@envive-ai/react-hooks 0.3.1 → 0.3.2

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 (259) hide show
  1. package/dist/application/commerce-api.cjs +4 -4
  2. package/dist/application/commerce-api.js +4 -4
  3. package/dist/application/models/api/response.d.cts +1 -1
  4. package/dist/application/models/api/response.d.ts +1 -1
  5. package/dist/application/models/frontendConfig.d.cts +1 -1
  6. package/dist/application/models/frontendConfig.d.ts +1 -1
  7. package/dist/application/models/guards/api/isApiFormResponse.cjs +1 -1
  8. package/dist/application/models/guards/api/isApiFormResponse.js +1 -1
  9. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.cjs +1 -1
  10. package/dist/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +1 -1
  11. package/dist/application/models/guards/api/isApiOrderResponseAttributes.cjs +2 -2
  12. package/dist/application/models/guards/api/isApiOrderResponseAttributes.js +2 -2
  13. package/dist/application/models/guards/api/isApiProductResponseAttributes.cjs +1 -1
  14. package/dist/application/models/guards/api/isApiProductResponseAttributes.js +1 -1
  15. package/dist/application/models/guards/api/isApiResponse.cjs +1 -1
  16. package/dist/application/models/guards/api/isApiResponse.js +1 -1
  17. package/dist/application/models/guards/api/isApiSearchEventAttributes.cjs +2 -2
  18. package/dist/application/models/guards/api/isApiSearchEventAttributes.js +2 -2
  19. package/dist/application/models/message.cjs +1 -1
  20. package/dist/application/models/message.d.cts +1 -1
  21. package/dist/application/models/message.d.ts +1 -1
  22. package/dist/application/models/message.js +1 -1
  23. package/dist/application/models/validators/validateGraphQLColorsConfig.cjs +2 -1
  24. package/dist/application/models/validators/validateGraphQLColorsConfig.js +2 -1
  25. package/dist/application/models/validators/validateGraphQLFrontendConfig.cjs +1 -1
  26. package/dist/application/models/validators/validateGraphQLFrontendConfig.d.cts +1 -1
  27. package/dist/application/models/validators/validateGraphQLFrontendConfig.d.ts +1 -1
  28. package/dist/application/models/validators/validateGraphQLFrontendConfig.js +1 -1
  29. package/dist/application/utils/analyticsUtils.cjs +2 -2
  30. package/dist/application/utils/analyticsUtils.js +2 -2
  31. package/dist/application/utils/domObserver.cjs +1 -1
  32. package/dist/application/utils/domObserver.js +1 -1
  33. package/dist/application/utils/elementObserver.cjs +1 -1
  34. package/dist/application/utils/elementObserver.js +1 -1
  35. package/dist/application/utils/mutationHelper.cjs +2 -2
  36. package/dist/application/utils/mutationHelper.js +2 -2
  37. package/dist/application/utils/nodeSelector.cjs +5 -2
  38. package/dist/application/utils/nodeSelector.js +5 -2
  39. package/dist/application/utils/stringUtils.cjs +1 -1
  40. package/dist/application/utils/stringUtils.js +1 -1
  41. package/dist/atoms/app/index.cjs +1 -1
  42. package/dist/atoms/app/index.d.cts +1 -1
  43. package/dist/atoms/app/index.d.ts +1 -1
  44. package/dist/atoms/app/index.js +1 -1
  45. package/dist/atoms/app/variant.cjs +1 -1
  46. package/dist/atoms/app/variant.d.cts +3 -3
  47. package/dist/atoms/app/variant.d.ts +3 -3
  48. package/dist/atoms/app/variant.js +1 -1
  49. package/dist/atoms/chat/chatState.d.cts +15 -15
  50. package/dist/atoms/chat/chatState.d.ts +15 -15
  51. package/dist/atoms/chat/form.d.cts +2 -2
  52. package/dist/atoms/chat/form.d.ts +2 -2
  53. package/dist/atoms/chat/index.cjs +1 -1
  54. package/dist/atoms/chat/index.d.ts +3 -3
  55. package/dist/atoms/chat/index.js +1 -1
  56. package/dist/atoms/chat/lastMessage.d.cts +2 -2
  57. package/dist/atoms/chat/lastMessage.d.ts +2 -2
  58. package/dist/atoms/chat/messageQueue.cjs +1 -1
  59. package/dist/atoms/chat/messageQueue.js +1 -1
  60. package/dist/atoms/chat/performanceMetrics.d.cts +6 -6
  61. package/dist/atoms/chat/performanceMetrics.d.ts +6 -6
  62. package/dist/atoms/chat/renderedWidgetRefs.d.cts +2 -2
  63. package/dist/atoms/chat/renderedWidgetRefs.d.ts +2 -2
  64. package/dist/atoms/chat/replies.cjs +2 -2
  65. package/dist/atoms/chat/replies.d.cts +2 -2
  66. package/dist/atoms/chat/replies.d.ts +2 -2
  67. package/dist/atoms/chat/replies.js +2 -2
  68. package/dist/atoms/chat/suggestions.d.cts +2 -2
  69. package/dist/atoms/chat/suggestions.d.ts +2 -2
  70. package/dist/atoms/globalSearch/globalSearch.cjs +3 -1
  71. package/dist/atoms/globalSearch/globalSearch.d.cts +10 -7
  72. package/dist/atoms/globalSearch/globalSearch.d.ts +10 -7
  73. package/dist/atoms/globalSearch/globalSearch.js +3 -2
  74. package/dist/atoms/globalSearch/index.cjs +1 -0
  75. package/dist/atoms/globalSearch/index.d.cts +2 -2
  76. package/dist/atoms/globalSearch/index.d.ts +2 -2
  77. package/dist/atoms/globalSearch/index.js +2 -2
  78. package/dist/atoms/org/customerService.d.cts +7 -7
  79. package/dist/atoms/org/customerService.d.ts +6 -6
  80. package/dist/atoms/org/graphqlConfig.cjs +1 -1
  81. package/dist/atoms/org/graphqlConfig.d.cts +5 -5
  82. package/dist/atoms/org/graphqlConfig.d.ts +5 -5
  83. package/dist/atoms/org/graphqlConfig.js +1 -1
  84. package/dist/atoms/org/newOrgConfigAtom.d.cts +2 -2
  85. package/dist/atoms/org/newOrgConfigAtom.d.ts +2 -2
  86. package/dist/atoms/org/orgAnalyticsConfig.cjs +1 -1
  87. package/dist/atoms/org/orgAnalyticsConfig.d.cts +6 -6
  88. package/dist/atoms/org/orgAnalyticsConfig.d.ts +6 -6
  89. package/dist/atoms/org/orgAnalyticsConfig.js +1 -1
  90. package/dist/atoms/search/chatSearch.d.cts +17 -17
  91. package/dist/atoms/search/chatSearch.d.ts +17 -17
  92. package/dist/atoms/search/searchAPI.cjs +1 -1
  93. package/dist/atoms/search/searchAPI.d.cts +14 -14
  94. package/dist/atoms/search/searchAPI.d.ts +14 -14
  95. package/dist/atoms/search/searchAPI.js +1 -1
  96. package/dist/atoms/search/searchServiceAdapter.cjs +1 -1
  97. package/dist/atoms/search/searchServiceAdapter.js +1 -1
  98. package/dist/atoms/search/types.d.cts +1 -1
  99. package/dist/atoms/search/types.d.ts +1 -1
  100. package/dist/atoms/search/utils.d.cts +1 -1
  101. package/dist/atoms/search/utils.d.ts +1 -1
  102. package/dist/contexts/amplitudeContext/amplitudeContext.cjs +6 -6
  103. package/dist/contexts/amplitudeContext/amplitudeContext.js +6 -6
  104. package/dist/contexts/cdnContext/cdnContext.cjs +1 -1
  105. package/dist/contexts/cdnContext/cdnContext.js +1 -1
  106. package/dist/contexts/chatContext/chatContext.cjs +4 -4
  107. package/dist/contexts/chatContext/chatContext.js +4 -4
  108. package/dist/contexts/enviveConfigContext/enviveConfigContext.cjs +2 -3
  109. package/dist/contexts/enviveConfigContext/enviveConfigContext.js +2 -3
  110. package/dist/contexts/enviveContext/enviveContext.cjs +52 -0
  111. package/dist/contexts/enviveContext/enviveContext.d.cts +31 -0
  112. package/dist/contexts/enviveContext/enviveContext.d.ts +31 -0
  113. package/dist/contexts/enviveContext/enviveContext.js +51 -0
  114. package/dist/contexts/enviveContext/index.cjs +5 -0
  115. package/dist/contexts/enviveContext/index.d.cts +3 -0
  116. package/dist/contexts/enviveContext/index.d.ts +3 -0
  117. package/dist/contexts/enviveContext/index.js +4 -0
  118. package/dist/contexts/enviveContext/types.cjs +11 -0
  119. package/dist/contexts/enviveContext/types.d.cts +8 -0
  120. package/dist/contexts/enviveContext/types.d.ts +8 -0
  121. package/dist/contexts/enviveContext/types.js +10 -0
  122. package/dist/contexts/featureFlagContext/featureFlagContext.cjs +2 -2
  123. package/dist/contexts/featureFlagContext/featureFlagContext.js +2 -2
  124. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.cjs +2 -2
  125. package/dist/contexts/featureFlagServiceContext/featureFlagServiceContext.js +2 -2
  126. package/dist/contexts/graphqlContext/graphqlContext.cjs +3 -3
  127. package/dist/contexts/graphqlContext/graphqlContext.js +3 -3
  128. package/dist/contexts/localStorageContext/localStorageContext.cjs +1 -1
  129. package/dist/contexts/localStorageContext/localStorageContext.js +1 -1
  130. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.cjs +1 -1
  131. package/dist/contexts/newOrgConfigContext/newOrgConfigContext.js +1 -1
  132. package/dist/contexts/searchContext/searchContext.cjs +1 -1
  133. package/dist/contexts/searchContext/searchContext.js +1 -1
  134. package/dist/contexts/sessionStorageContext/sessionStorageContext.cjs +1 -1
  135. package/dist/contexts/sessionStorageContext/sessionStorageContext.js +1 -1
  136. package/dist/contexts/types.cjs +1 -1
  137. package/dist/contexts/types.d.cts +1 -1
  138. package/dist/contexts/types.d.ts +1 -1
  139. package/dist/contexts/types.js +1 -1
  140. package/dist/contexts/userIdentityContext/userIdentityContext.cjs +1 -1
  141. package/dist/contexts/userIdentityContext/userIdentityContext.js +1 -1
  142. package/dist/events/index.cjs +2 -4
  143. package/dist/events/index.js +2 -4
  144. package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.cjs +1 -1
  145. package/dist/hooks/AmplitudeOperations/useAmplitudeOperations.js +1 -1
  146. package/dist/hooks/Debounce/useDebounce.cjs +1 -1
  147. package/dist/hooks/Debounce/useDebounce.js +1 -1
  148. package/dist/hooks/ElementObserver/useElementObserver.cjs +2 -2
  149. package/dist/hooks/ElementObserver/useElementObserver.js +2 -2
  150. package/dist/hooks/IdentifyUser/useIdentifyUser.cjs +1 -1
  151. package/dist/hooks/IdentifyUser/useIdentifyUser.js +1 -1
  152. package/dist/hooks/ImageResolver/useImageResolver.cjs +2 -2
  153. package/dist/hooks/ImageResolver/useImageResolver.js +2 -2
  154. package/dist/hooks/IsSmallScreen/useIsSmallScreen.cjs +1 -1
  155. package/dist/hooks/IsSmallScreen/useIsSmallScreen.js +1 -1
  156. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.cjs +11 -3
  157. package/dist/hooks/LocalStorageOperations/useLocalStorageOperations.js +11 -3
  158. package/dist/hooks/Search/useRecommendedProducts.cjs +1 -1
  159. package/dist/hooks/Search/useRecommendedProducts.js +1 -1
  160. package/dist/hooks/Search/useSearch.cjs +6 -3
  161. package/dist/hooks/Search/useSearch.d.cts +3 -1
  162. package/dist/hooks/Search/useSearch.d.ts +3 -1
  163. package/dist/hooks/Search/useSearch.js +7 -4
  164. package/dist/hooks/Search/useSearchInput.cjs +1 -1
  165. package/dist/hooks/Search/useSearchInput.js +1 -1
  166. package/dist/hooks/SearchOperations/useSearchOperations.cjs +1 -1
  167. package/dist/hooks/SearchOperations/useSearchOperations.d.cts +1 -1
  168. package/dist/hooks/SearchOperations/useSearchOperations.d.ts +1 -1
  169. package/dist/hooks/SearchOperations/useSearchOperations.js +1 -1
  170. package/dist/hooks/SessionStorageOperations/useSessionStorageOperations.cjs +1 -1
  171. package/dist/hooks/SessionStorageOperations/useSessionStorageOperations.js +1 -1
  172. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.cjs +1 -1
  173. package/dist/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +1 -1
  174. package/dist/hooks/utils.cjs +3 -3
  175. package/dist/hooks/utils.d.ts +1 -1
  176. package/dist/hooks/utils.js +3 -3
  177. package/package.json +25 -6
  178. package/src/application/commerce-api.ts +12 -10
  179. package/src/application/models/api/nextMessageRequest.ts +2 -0
  180. package/src/application/models/api/response.ts +4 -4
  181. package/src/application/models/api/search.ts +1 -2
  182. package/src/application/models/api/userEvent.ts +1 -2
  183. package/src/application/models/frontendConfig.ts +2 -2
  184. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +8 -4
  185. package/src/application/models/guards/api/isApiSearchEventAttributes.ts +1 -1
  186. package/src/application/models/index.ts +1 -0
  187. package/src/application/models/message.ts +5 -5
  188. package/src/application/models/utilityTypes/delimiterCase.ts +1 -0
  189. package/src/application/models/validators/validateGraphQLColorsConfig.ts +2 -1
  190. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +1 -1
  191. package/src/application/models/variantInfo/variantInfo.ts +3 -0
  192. package/src/application/utils/analyticsUtils.ts +3 -3
  193. package/src/application/utils/domObserver.ts +1 -0
  194. package/src/application/utils/elementObserver.ts +1 -0
  195. package/src/application/utils/mutationHelper.ts +3 -1
  196. package/src/application/utils/nodeSelector.ts +7 -1
  197. package/src/application/utils/stringUtils.ts +1 -0
  198. package/src/atoms/app/index.ts +17 -6
  199. package/src/atoms/app/variant.ts +11 -13
  200. package/src/atoms/chat/__tests__/messageQueue.test.spec.ts +61 -0
  201. package/src/atoms/chat/index.ts +8 -8
  202. package/src/atoms/chat/messageQueue.ts +2 -48
  203. package/src/atoms/chat/replies.ts +3 -3
  204. package/src/atoms/org/graphqlConfig.ts +0 -1
  205. package/src/atoms/org/orgAnalyticsConfig.ts +1 -1
  206. package/src/atoms/search/searchAPI.ts +1 -1
  207. package/src/atoms/search/searchServiceAdapter.ts +1 -1
  208. package/src/contexts/amplitudeContext/__tests__/amplitudeContext.test.tsx +4 -3
  209. package/src/contexts/amplitudeContext/amplitudeContext.tsx +5 -5
  210. package/src/contexts/cdnContext/cdnContext.tsx +1 -1
  211. package/src/contexts/enviveConfigContext/__tests__/enviveConfigContext.test.tsx +2 -3
  212. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +3 -3
  213. package/src/contexts/enviveContext/enviveContext.tsx +89 -0
  214. package/src/contexts/enviveContext/index.ts +2 -0
  215. package/src/contexts/enviveContext/types.ts +4 -0
  216. package/src/contexts/featureFlagContext/featureFlagContext.tsx +1 -1
  217. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +1 -1
  218. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +7 -5
  219. package/src/contexts/graphqlContext/graphqlContext.tsx +1 -5
  220. package/src/contexts/hardcopyContext/hardcopyContext.tsx +70 -0
  221. package/src/contexts/hardcopyContext/index.ts +1 -0
  222. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +9 -3
  223. package/src/contexts/localStorageContext/localStorageContext.tsx +1 -1
  224. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +2 -3
  225. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +1 -1
  226. package/src/contexts/pageContext/__tests__/pageContext.test.tsx +666 -0
  227. package/src/contexts/pageContext/index.ts +2 -0
  228. package/src/contexts/pageContext/mapping.ts +38 -0
  229. package/src/contexts/pageContext/pageContext.tsx +78 -0
  230. package/src/contexts/pageContext/types.ts +27 -0
  231. package/src/contexts/salesAgentContext/chatAPI.ts +75 -0
  232. package/src/contexts/salesAgentContext/index.ts +3 -0
  233. package/src/contexts/salesAgentContext/salesAgentContext.tsx +128 -0
  234. package/src/contexts/salesAgentContext/salesAgentService.ts +197 -0
  235. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +14 -15
  236. package/src/contexts/searchContext/searchContext.tsx +1 -1
  237. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +1 -1
  238. package/src/contexts/systemSettingsContext/__tests__/systemSettingsContext.test.tsx +7 -6
  239. package/src/contexts/types.ts +20 -22
  240. package/src/contexts/userIdentityContext/__tests__/userIdentityContext.test.tsx +3 -8
  241. package/src/contexts/userIdentityContext/userIdentityContext.tsx +1 -1
  242. package/src/events/index.ts +5 -7
  243. package/src/hooks/AmplitudeOperations/useAmplitudeOperations.ts +1 -1
  244. package/src/hooks/Debounce/useDebounce.ts +1 -1
  245. package/src/hooks/ElementObserver/useElementObserver.ts +2 -1
  246. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +4 -2
  247. package/src/hooks/IdentifyUser/useIdentifyUser.ts +1 -1
  248. package/src/hooks/ImageResolver/useImageResolver.ts +2 -0
  249. package/src/hooks/IsSmallScreen/useIsSmallScreen.ts +1 -1
  250. package/src/hooks/LocalStorageOperations/useLocalStorageOperations.ts +20 -4
  251. package/src/hooks/Search/__tests__/useSearch.test.tsx +15 -10
  252. package/src/hooks/Search/useRecommendedProducts.ts +2 -2
  253. package/src/hooks/Search/useSearchInput.ts +1 -1
  254. package/src/hooks/SearchOperations/useSearchOperations.ts +2 -2
  255. package/src/hooks/SessionStorageOperations/useSessionStorageOperations.ts +1 -1
  256. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +2 -2
  257. package/src/hooks/utils.ts +3 -2
  258. package/src/contexts/chatContext/chatContext.tsx +0 -463
  259. package/src/contexts/chatContext/index.ts +0 -1
@@ -1,13 +1,14 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
- const require_productExperiment = require('./models/productExperiment.cjs');
3
2
  const require_logger = require('./logging/logger.cjs');
3
+ const require_enviveConfig = require('../atoms/envive/enviveConfig.cjs');
4
+ const require_productExperiment = require('./models/productExperiment.cjs');
4
5
  const require_validateOrgConfigResults = require('./models/validators/validateOrgConfigResults.cjs');
5
6
  const require_validateResponse = require('./models/validators/validateResponse.cjs');
6
7
  const require_validateSuggestion = require('./models/validators/validateSuggestion.cjs');
7
8
  const require_validateUserEvent = require('./models/validators/validateUserEvent.cjs');
8
- const require_enviveConfig = require('../atoms/envive/enviveConfig.cjs');
9
9
  const require_atomStore = require('../atoms/atomStore/atomStore.cjs');
10
10
  const require_atoms_app_index = require('../atoms/app/index.cjs');
11
+ const require_graphqlConfig = require('../atoms/org/graphqlConfig.cjs');
11
12
  const require_messageFromFormSubmittedEvent = require('./utils/messageFromFormSubmittedEvent.cjs');
12
13
  const require_messageFromQueryEvent = require('./utils/messageFromQueryEvent.cjs');
13
14
  const require_messageFromResponse = require('./utils/messageFromResponse.cjs');
@@ -15,7 +16,6 @@ const require_messageFromSuggestionEvent = require('./utils/messageFromSuggestio
15
16
  const require_nextMessageRequestToApiRequest = require('./utils/nextMessageRequestToApiRequest.cjs');
16
17
  const require_supportedEventRequestToApiRequest = require('./utils/supportedEventRequestToApiRequest.cjs');
17
18
  require('./utils/index.cjs');
18
- const require_graphqlConfig = require('../atoms/org/graphqlConfig.cjs');
19
19
  const require_sessionExceptions = require('../types/exceptions/sessionExceptions.cjs');
20
20
  const require_unsupportedProductExceptions = require('../types/exceptions/unsupportedProductExceptions.cjs');
21
21
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
@@ -316,4 +316,4 @@ var commerce_api_default = CommerceApiClient;
316
316
 
317
317
  //#endregion
318
318
  exports.default = commerce_api_default;
319
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLmNqcyIsIm5hbWVzIjpbIlJlc3BvbnNlRXJyb3IiLCJVbnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb24iLCJTZXNzaW9uUmVzdGFydFJlcXVpcmVkIiwiZ2V0QXRvbVN0b3JlIiwiYmFzZVVybEF0b20iLCJjb25maWc6IENvbmZpZ3VyYXRpb24iLCJDb25maWd1cmF0aW9uIiwiRGVmYXVsdEFwaSIsIkluZmVyZW5jZUFwaSIsIkN1c3RvbWVyU2VydmljZUFwaSIsIm9yZ1Nob3J0TmFtZUF0b20iLCJvcmdJZEF0b20iLCJ1c2VySWRBdG9tIiwiY2hhdElkQXRvbSIsImNvbnRleHRTb3VyY2VBdG9tIiwiZW52QXRvbSIsImZlYXR1cmVGbGFnU2VydmljZUF0b20iLCJDb250ZXh0U291cmNlRW51bSIsIkNvbnRleHRFbnZFbnVtIiwibWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QiLCJ2YWxpZGF0ZVJlc3BvbnNlIiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycjogdW5rbm93biIsImVycm9yOiB1bmtub3duIiwidmFsaWRhdGVTdWdnZXN0aW9uIiwiZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSIsInJlc3BvbnNlczogUmVzcG9uc2VbXVtdIiwic3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSIsInVzZXJFdmVudHM6IFVzZXJFdmVudFtdIiwidmFsaWRhdGVVc2VyRXZlbnQiLCJVc2VyRXZlbnRDYXRlZ29yeSIsImFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSIsIlJlc3BvbnNlQ2F0ZWdvcnkiLCJ1c2VyTWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwibWVzc2FnZUZyb21RdWVyeUV2ZW50IiwibWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQiLCJGb3JtVHlwZSIsIm1lc3NhZ2VGcm9tRm9ybVN1Ym1pdHRlZEV2ZW50IiwiY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCIsIlYxT3JnQ29uZmlnR2V0U291cmNlRW51bSIsInJlYWN0QXBwTmFtZUF0b20iLCJyZXF1ZXN0OiBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QiLCJQcm9kdWN0RXhwZXJpbWVudCIsInZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbixcbiAgQ3VzdG9tZXJTZXJ2aWNlQXBpLFxuICBEZWZhdWx0QXBpLFxuICBJbmZlcmVuY2VBcGksXG4gIFJlcG9ydFNlc3Npb25SZXF1ZXN0LFxuICBSZXNwb25zZUVycm9yLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbiAgVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSxcbiAgVjFPcmdDb25maWdHZXRSZXF1ZXN0LFxuICBDb250ZXh0U291cmNlRW51bSxcbiAgVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLFxuICBDdXN0b21lclNlcnZpY2VQcm92aWRlcixcbiAgUmVzcG9uc2VDYXRlZ29yeSxcbiAgRm9ybVR5cGUsXG59IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN1Z2dlc3Rpb24gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVTdWdnZXN0aW9uJztcbmltcG9ydCB7IHZhbGlkYXRlVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlVXNlckV2ZW50JztcbmltcG9ydCB7XG4gIG1lc3NhZ2VGcm9tUXVlcnlFdmVudCxcbiAgbWVzc2FnZUZyb21SZXNwb25zZSxcbiAgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQge1xuICBNZXNzYWdlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBTdWdnZXN0aW9uLFxuICBTdXBwb3J0ZWRFdmVudFJlcXVlc3QsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy9uZXh0TWVzc2FnZVJlcXVlc3RUb0FwaVJlcXVlc3QnO1xuaW1wb3J0IHsgdmFsaWRhdGVSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVJlc3BvbnNlJztcbmltcG9ydCB7IGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0JztcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tICdzcmMvdHlwZXMvZXhjZXB0aW9ucy9zZXNzaW9uRXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb24gfSBmcm9tICdzcmMvdHlwZXMvZXhjZXB0aW9ucy91bnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb25zJztcbmltcG9ydCB7IENsaWVudERldGFpbHMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NsaWVudERldGFpbHMnO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSAnc3JjL2F0b21zL2F0b21TdG9yZS9hdG9tU3RvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdEV4cGVyaW1lbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50JztcbmltcG9ydCB7IEZlYXR1cmVHYXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZmVhdHVyZUdhdGVzJztcbmltcG9ydCB7IHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgT3JnQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRFdmVudCB9IGZyb20gJ3NyYy9hdG9tcy9hcHAvdmFyaWFudCc7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dCc7XG5pbXBvcnQgeyBDb250ZXh0RW52RW51bSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7IC8vIEltcG9ydCBDb250ZXh0RW52RW51bVxuaW1wb3J0IHtcbiAgYmFzZVVybEF0b20sXG4gIHJlYWN0QXBwTmFtZUF0b20sXG4gIGNvbnRleHRTb3VyY2VBdG9tLFxuICBvcmdTaG9ydE5hbWVBdG9tLFxuICBlbnZBdG9tLCAvLyBJbXBvcnQgZW52QXRvbVxufSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyB1c2VySWRBdG9tLCBjaGF0SWRBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7IC8vIEltcG9ydCB1c2VySWRBdG9tIGFuZCBjaGF0SWRBdG9tXG5pbXBvcnQgeyBvcmdJZEF0b20sIGZlYXR1cmVGbGFnU2VydmljZUF0b20gfSBmcm9tICdzcmMvYXRvbXMvb3JnL2dyYXBocWxDb25maWcnOyAvLyBJbXBvcnQgbmV3IG9yZ0lkQXRvbSBhbmQgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbVxuXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlc3BvbnNlQm9keShlcnJvcjogUmVzcG9uc2VFcnJvcikge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlcnJvci5yZXNwb25zZS5qc29uKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihlcnJvck1zZzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IpKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oZXJyb3JNc2csIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBhd2FpdCBlcnJvclJlc3BvbnNlQm9keShlcnJvcik7XG4gIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpID09PSAndW5zdXBwb3J0ZWQgcHJvZHVjdCcgfHwgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBBUEkgcmV0dXJuIHN1Yl9jb2RlIGluc3RlYWQgb2YgbWVzc2FnZVxuICAgIGVycm9yUmVzcG9uc2U/LmFwcF9jb2RlPy50b1VwcGVyQ2FzZSgpID09PSAnUFJPRFVDVF9OT1RfRk9VTkQnXG4gICkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb24oKTtcbiAgfSBlbHNlIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5hcHBfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gJ1JFU1RBUlRfU0VTU0lPTicgfHxcbiAgICBlcnJvclJlc3BvbnNlPy5zdWJfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gJ05PVF9GT1VORCcgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIG5ldyBBUEkgcmVzcG9uc2VzIHdpbGwgY29udGFpbiBcImFwcF9jb2RlXCJcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICAnU2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4gUmUtc3RhcnQgc2Vzc2lvbicsXG4gICAgICBlcnJvcixcbiAgICAgIGVycm9yLnJlc3BvbnNlLFxuICAgICAgZXJyb3JSZXNwb25zZSxcbiAgICApO1xuICAgIHRocm93IG5ldyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkKCk7XG4gIH1cblxuICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuY2xhc3MgQ29tbWVyY2VBcGlDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcGk6IERlZmF1bHRBcGk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21lclNlcnZpY2VBcGk6IEN1c3RvbWVyU2VydmljZUFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpO1xuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb21tZXJjZUFwaUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlID0gKCk6IENvbW1lcmNlQXBpQ2xpZW50ID0+IHtcbiAgICBpZiAoIUNvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZSA9IG5ldyBDb21tZXJjZUFwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZTtcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhc2VQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGF0b21TdG9yZS5nZXQoYmFzZVVybEF0b20pO1xuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aCB8fCBiYXNlVXJsO1xuICAgIC8vIEFQSSBLZXkgaXMgbm93IGhhbmRsZWQgYXQgdGhlIEVudml2ZUNvbmZpZ1Byb3ZpZGVyIGxldmVsXG4gICAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgICAgYmFzZVBhdGg6IHBhdGgsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmRlZmF1bHRBcGkgPSBuZXcgRGVmYXVsdEFwaShjb25maWcpO1xuICAgIHRoaXMuaW5mZXJlbmNlQXBpID0gbmV3IEluZmVyZW5jZUFwaShjb25maWcpO1xuICAgIHRoaXMuY3VzdG9tZXJTZXJ2aWNlQXBpID0gbmV3IEN1c3RvbWVyU2VydmljZUFwaShjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBvcmdTaG9ydE5hbWUgPSBhdG9tU3RvcmUuZ2V0KG9yZ1Nob3J0TmFtZUF0b20pO1xuICAgIGNvbnN0IG9yZ0lkID0gYXRvbVN0b3JlLmdldChvcmdJZEF0b20pO1xuICAgIGNvbnN0IHVzZXJJZCA9IGF0b21TdG9yZS5nZXQodXNlcklkQXRvbSk7XG4gICAgY29uc3QgY2hhdElkID0gYXRvbVN0b3JlLmdldChjaGF0SWRBdG9tKTtcbiAgICBjb25zdCBzb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICBjb25zdCBlbnYgPSBhdG9tU3RvcmUuZ2V0KGVudkF0b20pO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gYXRvbVN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKTtcblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICB1c2VyX2lkOiB1c2VySWQgPz8gJycsXG4gICAgICBvcmdfaWQ6IG9yZ0lkID8/ICcnLFxuICAgICAgb3JnX3Nob3J0X25hbWU6IG9yZ1Nob3J0TmFtZSA/PyAnJyxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCA/PyAnJyxcbiAgICAgIHNvdXJjZTogc291cmNlID8/IENvbnRleHRTb3VyY2VFbnVtLkFwcCxcbiAgICAgIGVudjogKGVudiBhcyBDb250ZXh0RW52RW51bSkgPz8gQ29udGV4dEVudkVudW0uRGV2LCAvLyBDYXN0IGVudiB0byBDb250ZXh0RW52RW51bVxuICAgIH07XG5cbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG4gICAgY29uc3QgdXJsUmVzb2x2aW5nUmVxdWVzdCA9IHtcbiAgICAgIHVybCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmZWF0dXJlX2dhdGVzOiBmZWF0dXJlR2F0ZXMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFVcmxSZXNvbHZpbmdQb3N0UmF3KHtcbiAgICAgIFVybFJlc29sdmluZ1JlcXVlc3Q6IHVybFJlc29sdmluZ1JlcXVlc3QsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcuanNvbigpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbiAgfTtcblxuICBzdGF0aWMgcmVwb3J0U2Vzc2lvbiA9IGFzeW5jIChyZXBvcnRSZXF1ZXN0OiBSZXBvcnRTZXNzaW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdCh7XG4gICAgICBSZXBvcnRTZXNzaW9uUmVxdWVzdDogcmVwb3J0UmVxdWVzdCxcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlcyA9IGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPE1lc3NhZ2VbXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFJlc3BvbnNlc1Bvc3Qoe1xuICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IHJlc3BvbnNlXG4gICAgICAgIC5tYXAocmVzcCA9PiB2YWxpZGF0ZVJlc3BvbnNlKHJlc3ApKVxuICAgICAgICAubWFwKHJlc3AgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwKSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG0pOiBtIGlzIE1lc3NhZ2UgPT4gbSAhPSBudWxsKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKCdGYWlsZWQgdG8gZ2V0IG5leHQgcmVzcG9uc2VzJywgZXJyLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlcycsIGVycik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0UmVzcG9uc2VTdHJlYW1pbmcgPSAoXG4gICAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICApOiBBc3luY0dlbmVyYXRvcjxSZXNwb25zZSwgdm9pZCwgdW5rbm93bj4gPT4ge1xuICAgIGFzeW5jIGZ1bmN0aW9uKiBnZW5lcmF0ZShpbmZlcmVuY2VBcGk6IEluZmVyZW5jZUFwaSwgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzdHJlYW1pbmcgaXMgZW5hYmxlZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZWFkIHRoZSByZXNwb25zZSBhcyBhIHN0cmVhbSBvZiBkYXRhXG4gICAgICAgIGlmICghcmVzcG9uc2UucmF3LmJvZHkpIHtcbiAgICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIE5vIGJvZHkgaW4gdGhlIHN0cmVhbWVkIHJlc3BvbnNlJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2UucmF3LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLnJhdy5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpO1xuXG4gICAgICAgIGxldCBwYXJ0aWFsID0gJyc7XG4gICAgICAgIC8vIFRPRE8gdGhpcyBmdW5jdGlvbiBpcyByZWNyZWF0ZWQgZXZlcnkgdGltZSBuZXcgZGF0YSBjb21lcyBmcm9tIHRoZSBzdHJlYW0gLSBkZWZpbmUgaXQgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhdG9yXG4gICAgICAgIGNvbnN0IHNhZmVQYXJzZSA9IChsaW5lOiBzdHJpbmcpOiB1bmtub3duID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobGluZSk7IC8vIFBhcnNlIHRoZSBKU09OIHN0cmluZ1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbc3BpZmZ5LWFpXSBFcnJvciBwYXJzaW5nIHN0cmVhbWVkIGxpbmUnLCBlcnIsIHtcbiAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYW5kIHNldCB0aGUgcGFydGlhbCB0byBvdXIgY3VycmVudCBjaHVua1xuICAgICAgICAgICAgcGFydGlhbCA9IGxpbmU7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3QgcHJvY2Vzc0NodW5rID0gKGNodW5rOiBzdHJpbmcpOiB1bmtub3duW10gPT4ge1xuICAgICAgICAgIC8vIG1lcmdlIHRoZSBwYXJ0aWFsIHdpdGggdGhlIGluY29taW5nIGNodW5rXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBgJHtwYXJ0aWFsfSR7Y2h1bmt9YC5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgICBjb25zdCBwYXJzZWRMaW5lcyA9IGxpbmVzXG4gICAgICAgICAgICAubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eZGF0YTogLywgJycpLnRyaW0oKSkgLy8gUmVtb3ZlIHRoZSBcImRhdGE6IFwiIHByZWZpeFxuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUgIT09ICcnICYmIGxpbmUgIT09ICdbRE9ORV0nKSAvLyBSZW1vdmUgZW1wdHkgbGluZXMgYW5kIFwiW0RPTkVdXCJcbiAgICAgICAgICAgIC5tYXAoc2FmZVBhcnNlKVxuICAgICAgICAgICAgLmZpbHRlcih2ID0+IHYpOyAvLyBhbmQgZmlsdGVyIG91dCB0aGUgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICAgIHJldHVybiBwYXJzZWRMaW5lcztcbiAgICAgICAgfTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcblxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXNzYWdlIGFuZCBwYXJzZSB0aGUgY2h1bmsgb2YgZGF0YVxuICAgICAgICAgIGNvbnN0IGNodW5rID0gZGVjb2Rlci5kZWNvZGUodmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gcHJvY2Vzc0NodW5rKGNodW5rKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgcGFyc2VkTGluZSBvZiBwYXJzZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkUmVzcG9uc2UgPSB2YWxpZGF0ZVJlc3BvbnNlKHBhcnNlZExpbmUpO1xuXG4gICAgICAgICAgICBpZiAodmFsaWRhdGVkUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgeWllbGQgdmFsaWRhdGVkUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZXJyb3IsIHtcbiAgICAgICAgICBwYXlsb2FkQ29udGV4dDogcGF5bG9hZD8uY29udGV4dCxcbiAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoJ0ZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdGUoXG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaSxcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyLFxuICAgICk7XG4gIH07XG5cbiAgc3RhdGljIGdldE5leHRTdWdnZXN0aW9ucyA9IGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPFN1Z2dlc3Rpb25bXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdChcbiAgICAgICAge1xuICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSByZXNwb25zZVxuICAgICAgICAubWFwKHJlc3AgPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHJlc3ApKVxuICAgICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0ZhaWxlZCB0byBnZXQgc3VnZ2VzdGlvbnMnLCBlcnJvciwge1xuICAgICAgICBwYXlsb2FkQ29udGV4dDogcGF5bG9hZD8uY29udGV4dCxcbiAgICAgICAgdXNlckV2ZW50czogcGF5bG9hZD8udXNlckV2ZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9ucycsIGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGV4aXN0aW5nIGNoYXQgZGF0YSBmb3IgYSBnaXZlbiBzZXNzaW9uIGFuZCB0cmFuc2Zvcm1zIHRoZW0gdG8gcmVjb25zdHJ1Y3QgdGhlIGNoYXQgaGlzdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIFRoZSBvcmdhbml6YXRpb24gSWRcbiAgICogQHBhcmFtIGNoYXRJZCBUaGUgZXhpc3RpbmcgY2hhdCBJZFxuICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIElkXG4gICAqXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiBtZXNzYWdlcyB0aGF0IHdlcmUgZXhjaGFuZ2VkIGluIHRoZSBjaGF0LCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNoYXQgc2Vzc2lvbiBoYXMgZXhwaXJlZC5cbiAgICovXG4gIHN0YXRpYyBnZXRSZXNwb25zZXMgPSBhc3luYyAoXG4gICAgb3JnSWQ6IHN0cmluZyxcbiAgICBjaGF0SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7XG4gICAgcmVzcG9uc2VzOiBSZXNwb25zZVtdW107XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdW107XG4gIH0+ID0+IHtcbiAgICBsZXQgZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IHtcbiAgICAgIHJlc3BvbnNlczogW10sXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB1c2VyX2V2ZW50czogW10sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgb3JnX2lkOiBvcmdJZCxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCxcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzKHJlcXVlc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBjaGF0IHJlc3BvbnNlcycsIGVycm9yKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZXM6IFJlc3BvbnNlW11bXSA9IGRhdGE/LnJlc3BvbnNlcz8ubWFwKHR1cm4gPT5cbiAgICAgIHR1cm5cbiAgICAgICAgLm1hcChyZXNwb25zZSA9PiB2YWxpZGF0ZVJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgLmZpbHRlcigocmVzcG9uc2UpOiByZXNwb25zZSBpcyBSZXNwb25zZSA9PiByZXNwb25zZSAhPSBudWxsKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSA9IGRhdGE/LnN1Z2dlc3Rpb25zXG4gICAgICAubWFwKHN1Z2dlc3Rpb24gPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHN1Z2dlc3Rpb24pKVxuICAgICAgLmZpbHRlcigoc3VnZ2VzdGlvbik6IHN1Z2dlc3Rpb24gaXMgU3VnZ2VzdGlvbiA9PiBzdWdnZXN0aW9uICE9IG51bGwpO1xuXG4gICAgY29uc3QgdXNlckV2ZW50czogVXNlckV2ZW50W10gPSBkYXRhPy51c2VyX2V2ZW50c1xuICAgICAgLm1hcChldmVudCA9PiB2YWxpZGF0ZVVzZXJFdmVudChldmVudCkpXG4gICAgICAuZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIFVzZXJFdmVudCA9PiBldmVudCAhPSBudWxsKTtcblxuICAgIC8vIGlmIGEgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHN1Ym1pdHRlZCwgZG9uJ3Qgc2hvdyBpdCBpbiB0aGUgY2hhdCBoaXN0b3J5XG4gICAgY29uc3QgZm9ybVN1Ym1pdHRlZFVzZXJFdmVudHNGb3JtSWRzID0gdXNlckV2ZW50c1xuICAgICAgLmZpbHRlcihldmVudCA9PiBldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZClcbiAgICAgIC5tYXAoZXZlbnQgPT4gZXZlbnQuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCk7XG5cbiAgICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlczogTWVzc2FnZVtdW10gPSByZXNwb25zZXNcbiAgICAgIC5tYXAodHVybiA9PlxuICAgICAgICB0dXJuXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIHJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSAmJlxuICAgICAgICAgICAgICAgIGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcy5pbmNsdWRlcyhyZXNwb25zZS5pZClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChyZXNwb25zZSA9PiBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgICAuZmlsdGVyKChtZXNzYWdlKTogbWVzc2FnZSBpcyBNZXNzYWdlID0+IG1lc3NhZ2UgIT0gbnVsbCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKHR1cm4gPT4gdHVybi5sZW5ndGggPiAwKTtcblxuICAgIGNvbnN0IHVzZXJNZXNzYWdlczogTWVzc2FnZVtdW10gPSB1c2VyRXZlbnRzXG4gICAgICAubWFwKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKFtVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLCBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2hdLmluY2x1ZGVzKGV2ZW50LmNhdGVnb3J5KSkge1xuICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21RdWVyeUV2ZW50KGV2ZW50KV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudChldmVudCwgc3VnZ2VzdGlvbnMpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IGZvcm1SZXNwb25zZSA9IHJlc3BvbnNlc1xuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgIHJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaWQgPT09IGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLmZvcm1UeXBlICE9PSBGb3JtVHlwZS5Fc2NhbGF0aW9uLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChmb3JtUmVzcG9uc2UgJiYgZm9ybVJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQoZXZlbnQsIGZvcm1SZXNwb25zZS5hdHRyaWJ1dGVzKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2VbXSA9PiBtZXNzYWdlLmxlbmd0aCA+IDApO1xuXG4gICAgLy8gU29ydCB0aGUgbWVzc2FnZXMgY2hyb25vbG9naWNhbGx5IHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBzb3J0ZWRNZXNzYWdlcyA9IFsuLi5hc3Npc3RhbnRNZXNzYWdlcywgLi4udXNlck1lc3NhZ2VzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IG5ldyBEYXRlKGFbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiWzBdLmNyZWF0ZWRBdCkuZ2V0VGltZSgpLFxuICAgICk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZXMsIHVzZXJFdmVudHMsIHN1Z2dlc3Rpb25zLCBtZXNzYWdlczogc29ydGVkTWVzc2FnZXMgfTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBpc1N1cHBvcnRlZEV2ZW50ID0gYXN5bmMgKHBheWxvYWQ6IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCk6IFByb21pc2U8U3VwcG9ydGVkRXZlbnQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyh7XG4gICAgICAgICAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0OiBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICB9KTtcblxuICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgSFRUUCByZXNwb25zZSBKU09OXG4gICAgICBjb25zdCBodHRwUmVzcG9uc2VUZXh0ID0gYXdhaXQgcmF3UmVzcG9uc2UucmF3LnRleHQoKTtcbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZUpzb24gPSBKU09OLnBhcnNlKGh0dHBSZXNwb25zZVRleHQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5odHRwUmVzcG9uc2VKc29uLFxuICAgICAgICBudW1iZXJPZlJldmlld3M6IGh0dHBSZXNwb25zZUpzb24ubnVtX29mX3Jldmlld3MsXG4gICAgICAgIG1lcmNoYW50X3RhZ3M6IGh0dHBSZXNwb25zZUpzb24ubWVyY2hhbnRfdGFncyB8fCBbXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBnZXQgcmVzcG9uc2UgZm9yIHYxU3VwcG9ydGVkRXZlbnRQb3N0Jywge1xuICAgICAgICBlcnIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1cHBvcnRlZDogZmFsc2UsXG4gICAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgICAgY2F0ZWdvcnk6IHVuZGVmaW5lZCxcbiAgICAgICAgY29sbGVjdGlvbnM6IFtdLFxuICAgICAgICBudW1iZXJPZlJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgdG9wX2NhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIG1lcmNoYW50X3RhZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGlkZW50aWZ5VXNlciA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBtZXJjaGFudFVzZXJJZDogc3RyaW5nLFxuICAgIHVhRGV0YWlsczogQ2xpZW50RGV0YWlscyxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUFuYWx5dGljc0lkZW50aWZ5UG9zdCh7XG4gICAgICAgIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICBvc19uYW1lOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgb3NfdmVyc2lvbjogdWFEZXRhaWxzLm9zVmVyc2lvbixcbiAgICAgICAgICBwbGF0Zm9ybTogdWFEZXRhaWxzLm9zLFxuICAgICAgICAgIGRldmljZV9pZDogdWFEZXRhaWxzLmRldmljZU1vZGVsLFxuICAgICAgICAgIGRldmljZV9icmFuZDogdWFEZXRhaWxzLmRldmljZUJyYW5kLFxuICAgICAgICAgIGRldmljZV9tYW51ZmFjdHVyZXI6IHVhRGV0YWlscy5kZXZpY2VNYW51ZmFjdHVyZXIsXG4gICAgICAgICAgZGV2aWNlX21vZGVsOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgdXNlcl9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjZHBfdXNlcl9pZDogbWVyY2hhbnRVc2VySWQsXG4gICAgICAgICAgICBicm93c2VyOiB1YURldGFpbHMuYnJvd3NlcixcbiAgICAgICAgICAgIGJyb3dzZXJfdmVyc2lvbjogdWFEZXRhaWxzLmJyb3dzZXJWZXJzaW9uLFxuICAgICAgICAgICAgdXNlcl9hZ2VudDogdWFEZXRhaWxzLnVzZXJBZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBpZGVudGlmeSB1c2VyJywgZXJyKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFwQ29udGV4dFNvdXJjZVRvVjFPcmdDb25maWdHZXRTb3VyY2UgPSAoXG4gICAgc291cmNlOiBDb250ZXh0U291cmNlRW51bSB8IHVuZGVmaW5lZCxcbiAgKTogVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3dpdGNoIChzb3VyY2UpIHtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uRm9yazpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5Gb3JrO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5QbGF5Z3JvdW5kOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlBsYXlncm91bmQ7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkFwcDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5BcHA7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLlRlc3Q6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uVGVzdDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uRXZhbDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5UZXN0O1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiBuZXcgdmFsdWVzIGFyZSBhZGRlZCB0byBDb250ZXh0U291cmNlRW51bSwgd2UgY2F0Y2ggaXRcbiAgICAgICAgY29uc3QgZXhoYXVzdGl2ZUNoZWNrOiBuZXZlciA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIGV4aGF1c3RpdmVDaGVjaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldE9yZ0NvbmZpZyA9IGFzeW5jICh1c2VyX2lkOiBzdHJpbmcpOiBQcm9taXNlPE9yZ0NvbmZpZyB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICAgIGNvbnN0IHJlYWN0QXBwTmFtZSA9IGF0b21TdG9yZS5nZXQocmVhY3RBcHBOYW1lQXRvbSk7XG4gICAgICBjb25zdCBjb250ZXh0U291cmNlID0gYXRvbVN0b3JlLmdldChjb250ZXh0U291cmNlQXRvbSk7XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSBhdG9tU3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pOyAvLyBHZXQgZmVhdHVyZUZsYWdTZXJ2aWNlXG4gICAgICBjb25zdCByZXF1ZXN0OiBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogcmVhY3RBcHBOYW1lLFxuICAgICAgICB1c2VyX2lkLFxuICAgICAgICBzb3VyY2U6IHRoaXMubWFwQ29udGV4dFNvdXJjZVRvVjFPcmdDb25maWdHZXRTb3VyY2UoY29udGV4dFNvdXJjZSksXG4gICAgICAgIGluY2x1ZGVfZXhwZXJpbWVudHM6IE9iamVjdC52YWx1ZXMoUHJvZHVjdEV4cGVyaW1lbnQpLFxuICAgICAgICBpbmNsdWRlX2ZlYXR1cmVfZ2F0ZXM6IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fSxcbiAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoKFssIGlzRW5hYmxlZF0pID0+IGlzRW5hYmxlZClcbiAgICAgICAgICAubWFwKChbZmVhdHVyZUdhdGVOYW1lXSkgPT4gZmVhdHVyZUdhdGVOYW1lKSwgLy8gVXNlIGZlYXR1cmVGbGFnU2VydmljZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxT3JnQ29uZmlnR2V0KHJlcXVlc3QpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzKHJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihgRmFpbGVkIHRvIGdldCBvcmcgY29uZmlnYCwgZXJyLCB7IGVyciB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBhZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gICAgc3BpZmZ5VXNlcklkOiBzdHJpbmcsXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBjdXN0b21lclNlcnZpY2VQcm92aWRlcjogQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gICkgPT4ge1xuICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgYGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiAtIHVzZXJfaWQ9JHtzcGlmZnlVc2VySWR9IGVtYWlsPSR7ZW1haWx9IGN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXI9JHtjdXN0b21lclNlcnZpY2VQcm92aWRlcn1gLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3VzdG9tZXJTZXJ2aWNlQXBpLnYxQ3VzdHNlcnZpY2VBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25Qb3N0KFxuICAgICAgICB7XG4gICAgICAgICAgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdDoge1xuICAgICAgICAgICAgc3BpZmZ5X3VzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcjogY3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBhZGQgbm90ZSB0byBsYXRlc3QgY29udmVyc2F0aW9uJywgeyBlcnIgfSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXRDdXN0b21lclNlcnZpY2VBcGkgPSAoKSA9PiBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmN1c3RvbWVyU2VydmljZUFwaTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVyY2VBcGlDbGllbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeURBLGVBQWUsa0JBQWtCLE9BQXNCO0FBQ3JELEtBQUk7QUFDRixTQUFPLE1BQU0sTUFBTSxTQUFTLE1BQU07U0FDNUI7QUFDTixTQUFPLEVBQUU7OztBQUliLGVBQWUs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
319
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLmNqcyIsIm5hbWVzIjpbIlJlc3BvbnNlRXJyb3IiLCJVbnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb24iLCJTZXNzaW9uUmVzdGFydFJlcXVpcmVkIiwiZ2V0QXRvbVN0b3JlIiwiYmFzZVVybEF0b20iLCJjb25maWc6IENvbmZpZ3VyYXRpb24iLCJDb25maWd1cmF0aW9uIiwiRGVmYXVsdEFwaSIsIkluZmVyZW5jZUFwaSIsIkN1c3RvbWVyU2VydmljZUFwaSIsIm9yZ1Nob3J0TmFtZUF0b20iLCJvcmdJZEF0b20iLCJ1c2VySWRBdG9tIiwiY2hhdElkQXRvbSIsImNvbnRleHRTb3VyY2VBdG9tIiwiZW52QXRvbSIsImZlYXR1cmVGbGFnU2VydmljZUF0b20iLCJDb250ZXh0U291cmNlRW51bSIsIkNvbnRleHRFbnZFbnVtIiwibWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QiLCJ2YWxpZGF0ZVJlc3BvbnNlIiwibWVzc2FnZUZyb21SZXNwb25zZSIsImVycjogdW5rbm93biIsImVycm9yOiB1bmtub3duIiwidmFsaWRhdGVTdWdnZXN0aW9uIiwiZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSIsInJlc3BvbnNlczogUmVzcG9uc2VbXVtdIiwic3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSIsInVzZXJFdmVudHM6IFVzZXJFdmVudFtdIiwidmFsaWRhdGVVc2VyRXZlbnQiLCJVc2VyRXZlbnRDYXRlZ29yeSIsImFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSIsIlJlc3BvbnNlQ2F0ZWdvcnkiLCJ1c2VyTWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwibWVzc2FnZUZyb21RdWVyeUV2ZW50IiwibWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQiLCJGb3JtVHlwZSIsIm1lc3NhZ2VGcm9tRm9ybVN1Ym1pdHRlZEV2ZW50IiwiY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCIsIlYxT3JnQ29uZmlnR2V0U291cmNlRW51bSIsInJlYWN0QXBwTmFtZUF0b20iLCJyZXF1ZXN0OiBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QiLCJQcm9kdWN0RXhwZXJpbWVudCIsInZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHBsaWNhdGlvbi9jb21tZXJjZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbixcbiAgQ29udGV4dEVudkVudW0sXG4gIENvbnRleHRTb3VyY2VFbnVtLFxuICBDdXN0b21lclNlcnZpY2VBcGksXG4gIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICBEZWZhdWx0QXBpLFxuICBGb3JtVHlwZSxcbiAgSW5mZXJlbmNlQXBpLFxuICBSZXBvcnRTZXNzaW9uUmVxdWVzdCxcbiAgUmVzcG9uc2VDYXRlZ29yeSxcbiAgUmVzcG9uc2VFcnJvcixcbiAgVXNlckV2ZW50Q2F0ZWdvcnksXG4gIFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UsXG4gIFYxT3JnQ29uZmlnR2V0UmVxdWVzdCxcbiAgVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLFxufSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgdmFsaWRhdGVTdWdnZXN0aW9uIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlU3VnZ2VzdGlvbic7XG5pbXBvcnQgeyB2YWxpZGF0ZVVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVVzZXJFdmVudCc7XG5pbXBvcnQge1xuICBtZXNzYWdlRnJvbVF1ZXJ5RXZlbnQsXG4gIG1lc3NhZ2VGcm9tUmVzcG9uc2UsXG4gIG1lc3NhZ2VGcm9tU3VnZ2VzdGlvbkV2ZW50LFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMnO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICBSZXNwb25zZSxcbiAgU3VnZ2VzdGlvbixcbiAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHsgbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0JztcbmltcG9ydCB7IHZhbGlkYXRlUmVzcG9uc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVSZXNwb25zZSc7XG5pbXBvcnQgeyBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3N1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCc7XG5pbXBvcnQgeyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkIH0gZnJvbSAnc3JjL3R5cGVzL2V4Y2VwdGlvbnMvc2Vzc2lvbkV4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgVW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9uIH0gZnJvbSAnc3JjL3R5cGVzL2V4Y2VwdGlvbnMvdW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBDbGllbnREZXRhaWxzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9jbGllbnREZXRhaWxzJztcbmltcG9ydCB7IGdldEF0b21TdG9yZSB9IGZyb20gJ3NyYy9hdG9tcy9hdG9tU3RvcmUvYXRvbVN0b3JlJztcbmltcG9ydCB7IFByb2R1Y3RFeHBlcmltZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9wcm9kdWN0RXhwZXJpbWVudCc7XG5pbXBvcnQgeyB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IE9yZ0NvbmZpZyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL29yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnQgfSBmcm9tICdzcmMvYXRvbXMvYXBwL3ZhcmlhbnQnO1xuaW1wb3J0IHsgbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQnO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50L2Rpc3QvbW9kZWxzL0NvbnRleHQnO1xuaW1wb3J0IHtcbiAgYmFzZVVybEF0b20sXG4gIGNvbnRleHRTb3VyY2VBdG9tLFxuICBlbnZBdG9tLFxuICBvcmdTaG9ydE5hbWVBdG9tLFxuICByZWFjdEFwcE5hbWVBdG9tLCAvLyBJbXBvcnQgZW52QXRvbVxufSBmcm9tICdzcmMvYXRvbXMvZW52aXZlL2Vudml2ZUNvbmZpZyc7XG5pbXBvcnQgeyBjaGF0SWRBdG9tLCB1c2VySWRBdG9tIH0gZnJvbSAnc3JjL2F0b21zL2FwcCc7IC8vIEltcG9ydCB1c2VySWRBdG9tIGFuZCBjaGF0SWRBdG9tXG5pbXBvcnQgeyBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tLCBvcmdJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvb3JnL2dyYXBocWxDb25maWcnOyAvLyBJbXBvcnQgbmV3IG9yZ0lkQXRvbSBhbmQgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbVxuXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlc3BvbnNlQm9keShlcnJvcjogUmVzcG9uc2VFcnJvcikge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlcnJvci5yZXNwb25zZS5qc29uKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihlcnJvck1zZzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IpKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oZXJyb3JNc2csIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBhd2FpdCBlcnJvclJlc3BvbnNlQm9keShlcnJvcik7XG4gIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpID09PSAndW5zdXBwb3J0ZWQgcHJvZHVjdCcgfHwgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIG5ld2VyIHZlcnNpb25zIG9mIHRoZSBBUEkgcmV0dXJuIHN1Yl9jb2RlIGluc3RlYWQgb2YgbWVzc2FnZVxuICAgIGVycm9yUmVzcG9uc2U/LmFwcF9jb2RlPy50b1VwcGVyQ2FzZSgpID09PSAnUFJPRFVDVF9OT1RfRk9VTkQnXG4gICkge1xuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb24oKTtcbiAgfSBlbHNlIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5hcHBfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gJ1JFU1RBUlRfU0VTU0lPTicgfHxcbiAgICBlcnJvclJlc3BvbnNlPy5zdWJfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gJ05PVF9GT1VORCcgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIG5ldyBBUEkgcmVzcG9uc2VzIHdpbGwgY29udGFpbiBcImFwcF9jb2RlXCJcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICAnU2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4gUmUtc3RhcnQgc2Vzc2lvbicsXG4gICAgICBlcnJvcixcbiAgICAgIGVycm9yLnJlc3BvbnNlLFxuICAgICAgZXJyb3JSZXNwb25zZSxcbiAgICApO1xuICAgIHRocm93IG5ldyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkKCk7XG4gIH1cblxuICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuY2xhc3MgQ29tbWVyY2VBcGlDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcGk6IERlZmF1bHRBcGk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21lclNlcnZpY2VBcGk6IEN1c3RvbWVyU2VydmljZUFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpO1xuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb21tZXJjZUFwaUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlID0gKCk6IENvbW1lcmNlQXBpQ2xpZW50ID0+IHtcbiAgICBpZiAoIUNvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZSA9IG5ldyBDb21tZXJjZUFwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZTtcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhc2VQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGF0b21TdG9yZS5nZXQoYmFzZVVybEF0b20pO1xuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aCB8fCBiYXNlVXJsO1xuICAgIC8vIEFQSSBLZXkgaXMgbm93IGhhbmRsZWQgYXQgdGhlIEVudml2ZUNvbmZpZ1Byb3ZpZGVyIGxldmVsXG4gICAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgICAgYmFzZVBhdGg6IHBhdGgsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmRlZmF1bHRBcGkgPSBuZXcgRGVmYXVsdEFwaShjb25maWcpO1xuICAgIHRoaXMuaW5mZXJlbmNlQXBpID0gbmV3IEluZmVyZW5jZUFwaShjb25maWcpO1xuICAgIHRoaXMuY3VzdG9tZXJTZXJ2aWNlQXBpID0gbmV3IEN1c3RvbWVyU2VydmljZUFwaShjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBvcmdTaG9ydE5hbWUgPSBhdG9tU3RvcmUuZ2V0KG9yZ1Nob3J0TmFtZUF0b20pO1xuICAgIGNvbnN0IG9yZ0lkID0gYXRvbVN0b3JlLmdldChvcmdJZEF0b20pO1xuICAgIGNvbnN0IHVzZXJJZCA9IGF0b21TdG9yZS5nZXQodXNlcklkQXRvbSk7XG4gICAgY29uc3QgY2hhdElkID0gYXRvbVN0b3JlLmdldChjaGF0SWRBdG9tKTtcbiAgICBjb25zdCBzb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICBjb25zdCBlbnYgPSBhdG9tU3RvcmUuZ2V0KGVudkF0b20pO1xuXG4gICAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gYXRvbVN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKTtcblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSB7XG4gICAgICB1c2VyX2lkOiB1c2VySWQgPz8gJycsXG4gICAgICBvcmdfaWQ6IG9yZ0lkID8/ICcnLFxuICAgICAgb3JnX3Nob3J0X25hbWU6IG9yZ1Nob3J0TmFtZSA/PyAnJyxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCA/PyAnJyxcbiAgICAgIHNvdXJjZTogc291cmNlID8/IENvbnRleHRTb3VyY2VFbnVtLkFwcCxcbiAgICAgIGVudjogKGVudiBhcyBDb250ZXh0RW52RW51bSkgPz8gQ29udGV4dEVudkVudW0uRGV2LCAvLyBDYXN0IGVudiB0byBDb250ZXh0RW52RW51bVxuICAgIH07XG5cbiAgICBjb25zdCBmZWF0dXJlR2F0ZXMgPSBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge307XG4gICAgY29uc3QgdXJsUmVzb2x2aW5nUmVxdWVzdCA9IHtcbiAgICAgIHVybCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBmZWF0dXJlX2dhdGVzOiBmZWF0dXJlR2F0ZXMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFVcmxSZXNvbHZpbmdQb3N0UmF3KHtcbiAgICAgIFVybFJlc29sdmluZ1JlcXVlc3Q6IHVybFJlc29sdmluZ1JlcXVlc3QsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUJvZHkgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcuanNvbigpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlQm9keTtcbiAgfTtcblxuICBzdGF0aWMgcmVwb3J0U2Vzc2lvbiA9IGFzeW5jIChyZXBvcnRSZXF1ZXN0OiBSZXBvcnRTZXNzaW9uUmVxdWVzdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUNoYXRzUmVwb3J0U2Vzc2lvbklkUG9zdCh7XG4gICAgICBSZXBvcnRTZXNzaW9uUmVxdWVzdDogcmVwb3J0UmVxdWVzdCxcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFJlc3BvbnNlcyA9IGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPE1lc3NhZ2VbXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFJlc3BvbnNlc1Bvc3Qoe1xuICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IHJlc3BvbnNlXG4gICAgICAgIC5tYXAocmVzcCA9PiB2YWxpZGF0ZVJlc3BvbnNlKHJlc3ApKVxuICAgICAgICAubWFwKHJlc3AgPT4gbWVzc2FnZUZyb21SZXNwb25zZShyZXNwKSk7XG5cbiAgICAgIHJldHVybiBtZXNzYWdlcy5maWx0ZXIoKG0pOiBtIGlzIE1lc3NhZ2UgPT4gbSAhPSBudWxsKTtcbiAgICB9IGNhdGNoIChlcnI6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dJbmZvKCdGYWlsZWQgdG8gZ2V0IG5leHQgcmVzcG9uc2VzJywgZXJyLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBuZXh0IHJlc3BvbnNlcycsIGVycik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0UmVzcG9uc2VTdHJlYW1pbmcgPSAoXG4gICAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuICApOiBBc3luY0dlbmVyYXRvcjxSZXNwb25zZSwgdm9pZCwgdW5rbm93bj4gPT4ge1xuICAgIGFzeW5jIGZ1bmN0aW9uKiBnZW5lcmF0ZShpbmZlcmVuY2VBcGk6IEluZmVyZW5jZUFwaSwgYWJvcnRDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIC8vIG1ha2Ugc3VyZSBzdHJlYW1pbmcgaXMgZW5hYmxlZFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBpbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdFJhdyhcbiAgICAgICAgICB7XG4gICAgICAgICAgICBOZXh0TWVzc2FnZVJlcXVlc3Q6IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZWFkIHRoZSByZXNwb25zZSBhcyBhIHN0cmVhbSBvZiBkYXRhXG4gICAgICAgIGlmICghcmVzcG9uc2UucmF3LmJvZHkpIHtcbiAgICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIE5vIGJvZHkgaW4gdGhlIHN0cmVhbWVkIHJlc3BvbnNlJywgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2UucmF3LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLnJhdy5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpO1xuXG4gICAgICAgIGxldCBwYXJ0aWFsID0gJyc7XG4gICAgICAgIC8vIFRPRE8gdGhpcyBmdW5jdGlvbiBpcyByZWNyZWF0ZWQgZXZlcnkgdGltZSBuZXcgZGF0YSBjb21lcyBmcm9tIHRoZSBzdHJlYW0gLSBkZWZpbmUgaXQgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhdG9yXG4gICAgICAgIGNvbnN0IHNhZmVQYXJzZSA9IChsaW5lOiBzdHJpbmcpOiB1bmtub3duID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobGluZSk7IC8vIFBhcnNlIHRoZSBKU09OIHN0cmluZ1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ0Vycm9yKCdbc3BpZmZ5LWFpXSBFcnJvciBwYXJzaW5nIHN0cmVhbWVkIGxpbmUnLCBlcnIsIHtcbiAgICAgICAgICAgICAgbGluZSxcbiAgICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYW5kIHNldCB0aGUgcGFydGlhbCB0byBvdXIgY3VycmVudCBjaHVua1xuICAgICAgICAgICAgcGFydGlhbCA9IGxpbmU7XG4gICAgICAgICAgICByZXR1cm4gcGFydGlhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3QgcHJvY2Vzc0NodW5rID0gKGNodW5rOiBzdHJpbmcpOiB1bmtub3duW10gPT4ge1xuICAgICAgICAgIC8vIG1lcmdlIHRoZSBwYXJ0aWFsIHdpdGggdGhlIGluY29taW5nIGNodW5rXG4gICAgICAgICAgY29uc3QgbGluZXMgPSBgJHtwYXJ0aWFsfSR7Y2h1bmt9YC5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgICBjb25zdCBwYXJzZWRMaW5lcyA9IGxpbmVzXG4gICAgICAgICAgICAubWFwKGxpbmUgPT4gbGluZS5yZXBsYWNlKC9eZGF0YTogLywgJycpLnRyaW0oKSkgLy8gUmVtb3ZlIHRoZSBcImRhdGE6IFwiIHByZWZpeFxuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUgIT09ICcnICYmIGxpbmUgIT09ICdbRE9ORV0nKSAvLyBSZW1vdmUgZW1wdHkgbGluZXMgYW5kIFwiW0RPTkVdXCJcbiAgICAgICAgICAgIC5tYXAoc2FmZVBhcnNlKVxuICAgICAgICAgICAgLmZpbHRlcih2ID0+IHYpOyAvLyBhbmQgZmlsdGVyIG91dCB0aGUgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgICAgIHJldHVybiBwYXJzZWRMaW5lcztcbiAgICAgICAgfTtcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcblxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBNYXNzYWdlIGFuZCBwYXJzZSB0aGUgY2h1bmsgb2YgZGF0YVxuICAgICAgICAgIGNvbnN0IGNodW5rID0gZGVjb2Rlci5kZWNvZGUodmFsdWUpO1xuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gcHJvY2Vzc0NodW5rKGNodW5rKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgcGFyc2VkTGluZSBvZiBwYXJzZWRMaW5lcykge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkUmVzcG9uc2UgPSB2YWxpZGF0ZVJlc3BvbnNlKHBhcnNlZExpbmUpO1xuXG4gICAgICAgICAgICBpZiAodmFsaWRhdGVkUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgeWllbGQgdmFsaWRhdGVkUmVzcG9uc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZXJyb3IsIHtcbiAgICAgICAgICBwYXlsb2FkQ29udGV4dDogcGF5bG9hZD8uY29udGV4dCxcbiAgICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoJ0ZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzJywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdGUoXG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaSxcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyLFxuICAgICk7XG4gIH07XG5cbiAgc3RhdGljIGdldE5leHRTdWdnZXN0aW9ucyA9IGFzeW5jIChwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QpOiBQcm9taXNlPFN1Z2dlc3Rpb25bXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFN1Z2dlc3Rpb25zUG9zdChcbiAgICAgICAge1xuICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzaWduYWw6IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSByZXNwb25zZVxuICAgICAgICAubWFwKHJlc3AgPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHJlc3ApKVxuICAgICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0ZhaWxlZCB0byBnZXQgc3VnZ2VzdGlvbnMnLCBlcnJvciwge1xuICAgICAgICBwYXlsb2FkQ29udGV4dDogcGF5bG9hZD8uY29udGV4dCxcbiAgICAgICAgdXNlckV2ZW50czogcGF5bG9hZD8udXNlckV2ZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9ucycsIGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGV4aXN0aW5nIGNoYXQgZGF0YSBmb3IgYSBnaXZlbiBzZXNzaW9uIGFuZCB0cmFuc2Zvcm1zIHRoZW0gdG8gcmVjb25zdHJ1Y3QgdGhlIGNoYXQgaGlzdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIFRoZSBvcmdhbml6YXRpb24gSWRcbiAgICogQHBhcmFtIGNoYXRJZCBUaGUgZXhpc3RpbmcgY2hhdCBJZFxuICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIElkXG4gICAqXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiBtZXNzYWdlcyB0aGF0IHdlcmUgZXhjaGFuZ2VkIGluIHRoZSBjaGF0LCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNoYXQgc2Vzc2lvbiBoYXMgZXhwaXJlZC5cbiAgICovXG4gIHN0YXRpYyBnZXRSZXNwb25zZXMgPSBhc3luYyAoXG4gICAgb3JnSWQ6IHN0cmluZyxcbiAgICBjaGF0SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx7XG4gICAgcmVzcG9uc2VzOiBSZXNwb25zZVtdW107XG4gICAgdXNlckV2ZW50czogVXNlckV2ZW50W107XG4gICAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgICBtZXNzYWdlczogTWVzc2FnZVtdW107XG4gIH0+ID0+IHtcbiAgICBsZXQgZGF0YTogVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSA9IHtcbiAgICAgIHJlc3BvbnNlczogW10sXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICB1c2VyX2V2ZW50czogW10sXG4gICAgfTtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgb3JnX2lkOiBvcmdJZCxcbiAgICAgIGNoYXRfaWQ6IGNoYXRJZCxcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxR2V0U2Vzc2lvbk1lc3NhZ2VzKHJlcXVlc3QpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBjaGF0IHJlc3BvbnNlcycsIGVycm9yKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZXM6IFJlc3BvbnNlW11bXSA9IGRhdGE/LnJlc3BvbnNlcz8ubWFwKHR1cm4gPT5cbiAgICAgIHR1cm5cbiAgICAgICAgLm1hcChyZXNwb25zZSA9PiB2YWxpZGF0ZVJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgLmZpbHRlcigocmVzcG9uc2UpOiByZXNwb25zZSBpcyBSZXNwb25zZSA9PiByZXNwb25zZSAhPSBudWxsKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXSA9IGRhdGE/LnN1Z2dlc3Rpb25zXG4gICAgICAubWFwKHN1Z2dlc3Rpb24gPT4gdmFsaWRhdGVTdWdnZXN0aW9uKHN1Z2dlc3Rpb24pKVxuICAgICAgLmZpbHRlcigoc3VnZ2VzdGlvbik6IHN1Z2dlc3Rpb24gaXMgU3VnZ2VzdGlvbiA9PiBzdWdnZXN0aW9uICE9IG51bGwpO1xuXG4gICAgY29uc3QgdXNlckV2ZW50czogVXNlckV2ZW50W10gPSBkYXRhPy51c2VyX2V2ZW50c1xuICAgICAgLm1hcChldmVudCA9PiB2YWxpZGF0ZVVzZXJFdmVudChldmVudCkpXG4gICAgICAuZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIFVzZXJFdmVudCA9PiBldmVudCAhPSBudWxsKTtcblxuICAgIC8vIGlmIGEgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHN1Ym1pdHRlZCwgZG9uJ3Qgc2hvdyBpdCBpbiB0aGUgY2hhdCBoaXN0b3J5XG4gICAgY29uc3QgZm9ybVN1Ym1pdHRlZFVzZXJFdmVudHNGb3JtSWRzID0gdXNlckV2ZW50c1xuICAgICAgLmZpbHRlcihldmVudCA9PiBldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZClcbiAgICAgIC5tYXAoZXZlbnQgPT4gZXZlbnQuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCk7XG5cbiAgICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlczogTWVzc2FnZVtdW10gPSByZXNwb25zZXNcbiAgICAgIC5tYXAodHVybiA9PlxuICAgICAgICB0dXJuXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIHJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSAmJlxuICAgICAgICAgICAgICAgIGZvcm1TdWJtaXR0ZWRVc2VyRXZlbnRzRm9ybUlkcy5pbmNsdWRlcyhyZXNwb25zZS5pZClcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLm1hcChyZXNwb25zZSA9PiBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgICAuZmlsdGVyKChtZXNzYWdlKTogbWVzc2FnZSBpcyBNZXNzYWdlID0+IG1lc3NhZ2UgIT0gbnVsbCksXG4gICAgICApXG4gICAgICAuZmlsdGVyKHR1cm4gPT4gdHVybi5sZW5ndGggPiAwKTtcblxuICAgIGNvbnN0IHVzZXJNZXNzYWdlczogTWVzc2FnZVtdW10gPSB1c2VyRXZlbnRzXG4gICAgICAubWFwKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKFtVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLCBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2hdLmluY2x1ZGVzKGV2ZW50LmNhdGVnb3J5KSkge1xuICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21RdWVyeUV2ZW50KGV2ZW50KV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudChldmVudCwgc3VnZ2VzdGlvbnMpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IGZvcm1SZXNwb25zZSA9IHJlc3BvbnNlc1xuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgIHJlc3BvbnNlID0+XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UuaWQgPT09IGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQgJiZcbiAgICAgICAgICAgICAgICBldmVudC5hdHRyaWJ1dGVzLmZvcm1UeXBlICE9PSBGb3JtVHlwZS5Fc2NhbGF0aW9uLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChmb3JtUmVzcG9uc2UgJiYgZm9ybVJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQoZXZlbnQsIGZvcm1SZXNwb25zZS5hdHRyaWJ1dGVzKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2VbXSA9PiBtZXNzYWdlLmxlbmd0aCA+IDApO1xuXG4gICAgLy8gU29ydCB0aGUgbWVzc2FnZXMgY2hyb25vbG9naWNhbGx5IHRvIHJlY29uc3RydWN0IHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBzb3J0ZWRNZXNzYWdlcyA9IFsuLi5hc3Npc3RhbnRNZXNzYWdlcywgLi4udXNlck1lc3NhZ2VzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IG5ldyBEYXRlKGFbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCkgLSBuZXcgRGF0ZShiWzBdLmNyZWF0ZWRBdCkuZ2V0VGltZSgpLFxuICAgICk7XG5cbiAgICByZXR1cm4geyByZXNwb25zZXMsIHVzZXJFdmVudHMsIHN1Z2dlc3Rpb25zLCBtZXNzYWdlczogc29ydGVkTWVzc2FnZXMgfTtcbiAgfTtcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHBheWxvYWRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBpc1N1cHBvcnRlZEV2ZW50ID0gYXN5bmMgKHBheWxvYWQ6IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCk6IFByb21pc2U8U3VwcG9ydGVkRXZlbnQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3UmVzcG9uc2UgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVN1cHBvcnRlZEV2ZW50UG9zdFJhdyh7XG4gICAgICAgICAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0OiBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0KHBheWxvYWQpLFxuICAgICAgICB9KTtcblxuICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgSFRUUCByZXNwb25zZSBKU09OXG4gICAgICBjb25zdCBodHRwUmVzcG9uc2VUZXh0ID0gYXdhaXQgcmF3UmVzcG9uc2UucmF3LnRleHQoKTtcbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZUpzb24gPSBKU09OLnBhcnNlKGh0dHBSZXNwb25zZVRleHQpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5odHRwUmVzcG9uc2VKc29uLFxuICAgICAgICBudW1iZXJPZlJldmlld3M6IGh0dHBSZXNwb25zZUpzb24ubnVtX29mX3Jldmlld3MsXG4gICAgICAgIG1lcmNoYW50X3RhZ3M6IGh0dHBSZXNwb25zZUpzb24ubWVyY2hhbnRfdGFncyB8fCBbXSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBnZXQgcmVzcG9uc2UgZm9yIHYxU3VwcG9ydGVkRXZlbnRQb3N0Jywge1xuICAgICAgICBlcnIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1cHBvcnRlZDogZmFsc2UsXG4gICAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgICAgY2F0ZWdvcnk6IHVuZGVmaW5lZCxcbiAgICAgICAgY29sbGVjdGlvbnM6IFtdLFxuICAgICAgICBudW1iZXJPZlJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgdG9wX2NhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIG1lcmNoYW50X3RhZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGlkZW50aWZ5VXNlciA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBtZXJjaGFudFVzZXJJZDogc3RyaW5nLFxuICAgIHVhRGV0YWlsczogQ2xpZW50RGV0YWlscyxcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuZGVmYXVsdEFwaS52MUFuYWx5dGljc0lkZW50aWZ5UG9zdCh7XG4gICAgICAgIEFuYWx5dGljc0lkZW50aWZ5UmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICBvc19uYW1lOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgb3NfdmVyc2lvbjogdWFEZXRhaWxzLm9zVmVyc2lvbixcbiAgICAgICAgICBwbGF0Zm9ybTogdWFEZXRhaWxzLm9zLFxuICAgICAgICAgIGRldmljZV9pZDogdWFEZXRhaWxzLmRldmljZU1vZGVsLFxuICAgICAgICAgIGRldmljZV9icmFuZDogdWFEZXRhaWxzLmRldmljZUJyYW5kLFxuICAgICAgICAgIGRldmljZV9tYW51ZmFjdHVyZXI6IHVhRGV0YWlscy5kZXZpY2VNYW51ZmFjdHVyZXIsXG4gICAgICAgICAgZGV2aWNlX21vZGVsOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgdXNlcl9wcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBjZHBfdXNlcl9pZDogbWVyY2hhbnRVc2VySWQsXG4gICAgICAgICAgICBicm93c2VyOiB1YURldGFpbHMuYnJvd3NlcixcbiAgICAgICAgICAgIGJyb3dzZXJfdmVyc2lvbjogdWFEZXRhaWxzLmJyb3dzZXJWZXJzaW9uLFxuICAgICAgICAgICAgdXNlcl9hZ2VudDogdWFEZXRhaWxzLnVzZXJBZ2VudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBpZGVudGlmeSB1c2VyJywgZXJyKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFwQ29udGV4dFNvdXJjZVRvVjFPcmdDb25maWdHZXRTb3VyY2UgPSAoXG4gICAgc291cmNlOiBDb250ZXh0U291cmNlRW51bSB8IHVuZGVmaW5lZCxcbiAgKTogVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3dpdGNoIChzb3VyY2UpIHtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uRm9yazpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5Gb3JrO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5QbGF5Z3JvdW5kOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlBsYXlncm91bmQ7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkFwcDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5BcHA7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLlRlc3Q6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uVGVzdDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uRXZhbDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5UZXN0O1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiBuZXcgdmFsdWVzIGFyZSBhZGRlZCB0byBDb250ZXh0U291cmNlRW51bSwgd2UgY2F0Y2ggaXRcbiAgICAgICAgY29uc3QgZXhoYXVzdGl2ZUNoZWNrOiBuZXZlciA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIGV4aGF1c3RpdmVDaGVjaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldE9yZ0NvbmZpZyA9IGFzeW5jICh1c2VyX2lkOiBzdHJpbmcpOiBQcm9taXNlPE9yZ0NvbmZpZyB8IHVuZGVmaW5lZD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICAgIGNvbnN0IHJlYWN0QXBwTmFtZSA9IGF0b21TdG9yZS5nZXQocmVhY3RBcHBOYW1lQXRvbSk7XG4gICAgICBjb25zdCBjb250ZXh0U291cmNlID0gYXRvbVN0b3JlLmdldChjb250ZXh0U291cmNlQXRvbSk7XG4gICAgICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSBhdG9tU3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pOyAvLyBHZXQgZmVhdHVyZUZsYWdTZXJ2aWNlXG4gICAgICBjb25zdCByZXF1ZXN0OiBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QgPSB7XG4gICAgICAgIG5hbWVzcGFjZTogcmVhY3RBcHBOYW1lLFxuICAgICAgICB1c2VyX2lkLFxuICAgICAgICBzb3VyY2U6IHRoaXMubWFwQ29udGV4dFNvdXJjZVRvVjFPcmdDb25maWdHZXRTb3VyY2UoY29udGV4dFNvdXJjZSksXG4gICAgICAgIGluY2x1ZGVfZXhwZXJpbWVudHM6IE9iamVjdC52YWx1ZXMoUHJvZHVjdEV4cGVyaW1lbnQpLFxuICAgICAgICBpbmNsdWRlX2ZlYXR1cmVfZ2F0ZXM6IE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fSxcbiAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoKFssIGlzRW5hYmxlZF0pID0+IGlzRW5hYmxlZClcbiAgICAgICAgICAubWFwKChbZmVhdHVyZUdhdGVOYW1lXSkgPT4gZmVhdHVyZUdhdGVOYW1lKSwgLy8gVXNlIGZlYXR1cmVGbGFnU2VydmljZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxT3JnQ29uZmlnR2V0KHJlcXVlc3QpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzKHJlc3BvbnNlKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihgRmFpbGVkIHRvIGdldCBvcmcgY29uZmlnYCwgZXJyLCB7IGVyciB9KTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBhZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gICAgc3BpZmZ5VXNlcklkOiBzdHJpbmcsXG4gICAgZW1haWw6IHN0cmluZyxcbiAgICBjdXN0b21lclNlcnZpY2VQcm92aWRlcjogQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gICkgPT4ge1xuICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgYGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiAtIHVzZXJfaWQ9JHtzcGlmZnlVc2VySWR9IGVtYWlsPSR7ZW1haWx9IGN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXI9JHtjdXN0b21lclNlcnZpY2VQcm92aWRlcn1gLFxuICAgICk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3VzdG9tZXJTZXJ2aWNlQXBpLnYxQ3VzdHNlcnZpY2VBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25Qb3N0KFxuICAgICAgICB7XG4gICAgICAgICAgQWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uUmVxdWVzdDoge1xuICAgICAgICAgICAgc3BpZmZ5X3VzZXJfaWQ6IHNwaWZmeVVzZXJJZCxcbiAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcjogY3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ0ZhaWxlZCB0byBhZGQgbm90ZSB0byBsYXRlc3QgY29udmVyc2F0aW9uJywgeyBlcnIgfSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXRDdXN0b21lclNlcnZpY2VBcGkgPSAoKSA9PiBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmN1c3RvbWVyU2VydmljZUFwaTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWVyY2VBcGlDbGllbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0RBLGVBQWUsa0JBQWtCLE9BQXNCO0FBQ3JELEtBQUk7QUFDRixTQUFPLE1BQU0sTUFBTSxTQUFTLE1BQU07U0FDNUI7QUFDTixTQUFPLEVBQUU7OztBQUliLGVBQWUsOEJBQThCLFVBQWtCLE9BQWdCO0FBQzdFLEtBQUksRUFBRSxpQkFBaUJBLGdEQUFnQjtBQUNyQyx5QkFBTyxRQUFRLFVBQVUsTUFBTTtBQUMvQixRQUFNOztDQUdSLE1BQU0sZ0JBQWdCLE1BQU0sa0JBQWtCLE1BQU07QUFDcEQsS0FDRSxlQUFlLFNB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
@@ -1,12 +1,13 @@
1
- import { ProductExperiment } from "./models/productExperiment.js";
2
1
  import logger_default from "./logging/logger.js";
2
+ import { baseUrlAtom, contextSourceAtom, envAtom, orgShortNameAtom, reactAppNameAtom } from "../atoms/envive/enviveConfig.js";
3
+ import { ProductExperiment } from "./models/productExperiment.js";
3
4
  import { validateOrgConfigResults } from "./models/validators/validateOrgConfigResults.js";
4
5
  import { validateResponse } from "./models/validators/validateResponse.js";
5
6
  import { validateSuggestion } from "./models/validators/validateSuggestion.js";
6
7
  import { validateUserEvent } from "./models/validators/validateUserEvent.js";
7
- import { baseUrlAtom, contextSourceAtom, envAtom, orgShortNameAtom, reactAppNameAtom } from "../atoms/envive/enviveConfig.js";
8
8
  import { getAtomStore } from "../atoms/atomStore/atomStore.js";
9
9
  import { chatIdAtom, userIdAtom } from "../atoms/app/index.js";
10
+ import { featureFlagServiceAtom, orgIdAtom } from "../atoms/org/graphqlConfig.js";
10
11
  import { messageFromFormSubmittedEvent } from "./utils/messageFromFormSubmittedEvent.js";
11
12
  import { messageFromQueryEvent } from "./utils/messageFromQueryEvent.js";
12
13
  import { messageFromResponse } from "./utils/messageFromResponse.js";
@@ -14,7 +15,6 @@ import { messageFromSuggestionEvent } from "./utils/messageFromSuggestionEvent.j
14
15
  import { messageRequestToCommerceMessageRequest } from "./utils/nextMessageRequestToApiRequest.js";
15
16
  import { coreSupportedEventRequestToApiRequest } from "./utils/supportedEventRequestToApiRequest.js";
16
17
  import "./utils/index.js";
17
- import { featureFlagServiceAtom, orgIdAtom } from "../atoms/org/graphqlConfig.js";
18
18
  import { SessionRestartRequired } from "../types/exceptions/sessionExceptions.js";
19
19
  import { UnsupportedProductException } from "../types/exceptions/unsupportedProductExceptions.js";
20
20
  import { Configuration, ContextEnvEnum, ContextSourceEnum, CustomerServiceApi, DefaultApi, FormType, InferenceApi, ResponseCategory, ResponseError, UserEventCategory, V1OrgConfigGetSourceEnum } from "@spiffy-ai/commerce-api-client";
@@ -315,4 +315,4 @@ var commerce_api_default = CommerceApiClient;
315
315
 
316
316
  //#endregion
317
317
  export { commerce_api_default as default };
318
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLmpzIiwibmFtZXMiOlsiY29uZmlnOiBDb25maWd1cmF0aW9uIiwiZXJyOiB1bmtub3duIiwiZXJyb3I6IHVua25vd24iLCJkYXRhOiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlIiwicmVzcG9uc2VzOiBSZXNwb25zZVtdW10iLCJzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdIiwidXNlckV2ZW50czogVXNlckV2ZW50W10iLCJhc3Npc3RhbnRNZXNzYWdlczogTWVzc2FnZVtdW10iLCJ1c2VyTWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwicmVxdWVzdDogVjFPcmdDb25maWdHZXRSZXF1ZXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uLFxuICBDdXN0b21lclNlcnZpY2VBcGksXG4gIERlZmF1bHRBcGksXG4gIEluZmVyZW5jZUFwaSxcbiAgUmVwb3J0U2Vzc2lvblJlcXVlc3QsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFVzZXJFdmVudENhdGVnb3J5LFxuICBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLFxuICBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QsXG4gIENvbnRleHRTb3VyY2VFbnVtLFxuICBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0sXG4gIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICBSZXNwb25zZUNhdGVnb3J5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IHZhbGlkYXRlU3VnZ2VzdGlvbiB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVN1Z2dlc3Rpb24nO1xuaW1wb3J0IHsgdmFsaWRhdGVVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVVc2VyRXZlbnQnO1xuaW1wb3J0IHtcbiAgbWVzc2FnZUZyb21RdWVyeUV2ZW50LFxuICBtZXNzYWdlRnJvbVJlc3BvbnNlLFxuICBtZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzJztcbmltcG9ydCB7XG4gIE1lc3NhZ2UsXG4gIE5leHRNZXNzYWdlUmVxdWVzdCxcbiAgUmVzcG9uc2UsXG4gIFN1Z2dlc3Rpb24sXG4gIFN1cHBvcnRlZEV2ZW50UmVxdWVzdCxcbiAgVXNlckV2ZW50LFxufSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcbmltcG9ydCB7IG1lc3NhZ2VSZXF1ZXN0VG9Db21tZXJjZU1lc3NhZ2VSZXF1ZXN0IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25leHRNZXNzYWdlUmVxdWVzdFRvQXBpUmVxdWVzdCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVJlc3BvbnNlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UnO1xuaW1wb3J0IHsgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy9zdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QnO1xuaW1wb3J0IHsgU2Vzc2lvblJlc3RhcnRSZXF1aXJlZCB9IGZyb20gJ3NyYy90eXBlcy9leGNlcHRpb25zL3Nlc3Npb25FeGNlcHRpb25zJztcbmltcG9ydCB7IFVuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbiB9IGZyb20gJ3NyYy90eXBlcy9leGNlcHRpb25zL3Vuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbnMnO1xuaW1wb3J0IHsgQ2xpZW50RGV0YWlscyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvY2xpZW50RGV0YWlscyc7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tICdzcmMvYXRvbXMvYXRvbVN0b3JlL2F0b21TdG9yZSc7XG5pbXBvcnQgeyBQcm9kdWN0RXhwZXJpbWVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvcHJvZHVjdEV4cGVyaW1lbnQnO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mZWF0dXJlR2F0ZXMnO1xuaW1wb3J0IHsgdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBPcmdDb25maWcgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9vcmdDb25maWdSZXN1bHRzJztcbmltcG9ydCB7IFN1cHBvcnRlZEV2ZW50IH0gZnJvbSAnc3JjL2F0b21zL2FwcC92YXJpYW50JztcbmltcG9ydCB7IG1lc3NhZ2VGcm9tRm9ybVN1Ym1pdHRlZEV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tRm9ybVN1Ym1pdHRlZEV2ZW50JztcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudC9kaXN0L21vZGVscy9Db250ZXh0JztcbmltcG9ydCB7IENvbnRleHRFbnZFbnVtIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JzsgLy8gSW1wb3J0IENvbnRleHRFbnZFbnVtXG5pbXBvcnQge1xuICBiYXNlVXJsQXRvbSxcbiAgcmVhY3RBcHBOYW1lQXRvbSxcbiAgY29udGV4dFNvdXJjZUF0b20sXG4gIG9yZ1Nob3J0TmFtZUF0b20sXG4gIGVudkF0b20sIC8vIEltcG9ydCBlbnZBdG9tXG59IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnJztcbmltcG9ydCB7IHVzZXJJZEF0b20sIGNoYXRJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJzsgLy8gSW1wb3J0IHVzZXJJZEF0b20gYW5kIGNoYXRJZEF0b21cbmltcG9ydCB7IG9yZ0lkQXRvbSwgZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZyc7IC8vIEltcG9ydCBuZXcgb3JnSWRBdG9tIGFuZCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tXG5cbmFzeW5jIGZ1bmN0aW9uIGVycm9yUmVzcG9uc2VCb2R5KGVycm9yOiBSZXNwb25zZUVycm9yKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGVycm9yLnJlc3BvbnNlLmpzb24oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKGVycm9yTXNnOiBzdHJpbmcsIGVycm9yOiB1bmtub3duKSB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmVzcG9uc2VFcnJvcikpIHtcbiAgICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGF3YWl0IGVycm9yUmVzcG9uc2VCb2R5KGVycm9yKTtcbiAgaWYgKFxuICAgIGVycm9yUmVzcG9uc2U/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkgPT09ICd1bnN1cHBvcnRlZCBwcm9kdWN0JyB8fCAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEFQSSByZXR1cm4gc3ViX2NvZGUgaW5zdGVhZCBvZiBtZXNzYWdlXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09ICdQUk9EVUNUX05PVF9GT1VORCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbigpO1xuICB9IGVsc2UgaWYgKFxuICAgIGVycm9yUmVzcG9uc2U/LmFwcF9jb2RlPy50b1VwcGVyQ2FzZSgpID09PSAnUkVTVEFSVF9TRVNTSU9OJyB8fFxuICAgIGVycm9yUmVzcG9uc2U/LnN1Yl9jb2RlPy50b1VwcGVyQ2FzZSgpID09PSAnTk9UX0ZPVU5EJyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3IEFQSSByZXNwb25zZXMgd2lsbCBjb250YWluIFwiYXBwX2NvZGVcIlxuICApIHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgICdTZXNzaW9uIGRvZXMgbm90IGV4aXN0LiBSZS1zdGFydCBzZXNzaW9uJyxcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3IucmVzcG9uc2UsXG4gICAgICBlcnJvclJlc3BvbnNlLFxuICAgICk7XG4gICAgdGhyb3cgbmV3IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQoKTtcbiAgfVxuXG4gIExvZ2dlci5sb2dJbmZvKGVycm9yTXNnLCBlcnJvcik7XG4gIHRocm93IGVycm9yO1xufVxuXG5jbGFzcyBDb21tZXJjZUFwaUNsaWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFwaTogRGVmYXVsdEFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbWVyU2VydmljZUFwaTogQ3VzdG9tZXJTZXJ2aWNlQXBpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5mZXJlbmNlQXBpOiBJbmZlcmVuY2VBcGk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IENvbW1lcmNlQXBpQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHJpdmF0ZSByZXNwb25zZXNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SW5zdGFuY2UgPSAoKTogQ29tbWVyY2VBcGlDbGllbnQgPT4ge1xuICAgIGlmICghQ29tbWVyY2VBcGlDbGllbnQuaW5zdGFuY2UpIHtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlID0gbmV3IENvbW1lcmNlQXBpQ2xpZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlO1xuICB9O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoYmFzZVBhdGg/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBiYXNlVXJsID0gYXRvbVN0b3JlLmdldChiYXNlVXJsQXRvbSk7XG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoIHx8IGJhc2VVcmw7XG4gICAgLy8gQVBJIEtleSBpcyBub3cgaGFuZGxlZCBhdCB0aGUgRW52aXZlQ29uZmlnUHJvdmlkZXIgbGV2ZWxcbiAgICBjb25zdCBjb25maWc6IENvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7XG4gICAgICBiYXNlUGF0aDogcGF0aCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuZGVmYXVsdEFwaSA9IG5ldyBEZWZhdWx0QXBpKGNvbmZpZyk7XG4gICAgdGhpcy5pbmZlcmVuY2VBcGkgPSBuZXcgSW5mZXJlbmNlQXBpKGNvbmZpZyk7XG4gICAgdGhpcy5jdXN0b21lclNlcnZpY2VBcGkgPSBuZXcgQ3VzdG9tZXJTZXJ2aWNlQXBpKGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZVVybCA9IGFzeW5jICh1cmw6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGF0b21TdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgIGNvbnN0IG9yZ1Nob3J0TmFtZSA9IGF0b21TdG9yZS5nZXQob3JnU2hvcnROYW1lQXRvbSk7XG4gICAgY29uc3Qgb3JnSWQgPSBhdG9tU3RvcmUuZ2V0KG9yZ0lkQXRvbSk7XG4gICAgY29uc3QgdXNlcklkID0gYXRvbVN0b3JlLmdldCh1c2VySWRBdG9tKTtcbiAgICBjb25zdCBjaGF0SWQgPSBhdG9tU3RvcmUuZ2V0KGNoYXRJZEF0b20pO1xuICAgIGNvbnN0IHNvdXJjZSA9IGF0b21TdG9yZS5nZXQoY29udGV4dFNvdXJjZUF0b20pO1xuICAgIGNvbnN0IGVudiA9IGF0b21TdG9yZS5nZXQoZW52QXRvbSk7XG5cbiAgICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSBhdG9tU3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pO1xuXG4gICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCA/PyAnJyxcbiAgICAgIG9yZ19pZDogb3JnSWQgPz8gJycsXG4gICAgICBvcmdfc2hvcnRfbmFtZTogb3JnU2hvcnROYW1lID8/ICcnLFxuICAgICAgY2hhdF9pZDogY2hhdElkID8/ICcnLFxuICAgICAgc291cmNlOiBzb3VyY2UgPz8gQ29udGV4dFNvdXJjZUVudW0uQXBwLFxuICAgICAgZW52OiAoZW52IGFzIENvbnRleHRFbnZFbnVtKSA/PyBDb250ZXh0RW52RW51bS5EZXYsIC8vIENhc3QgZW52IHRvIENvbnRleHRFbnZFbnVtXG4gICAgfTtcblxuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fTtcbiAgICBjb25zdCB1cmxSZXNvbHZpbmdSZXF1ZXN0ID0ge1xuICAgICAgdXJsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGZlYXR1cmVfZ2F0ZXM6IGZlYXR1cmVHYXRlcyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmF3UmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVVybFJlc29sdmluZ1Bvc3RSYXcoe1xuICAgICAgVXJsUmVzb2x2aW5nUmVxdWVzdDogdXJsUmVzb2x2aW5nUmVxdWVzdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJhd1Jlc3BvbnNlLnJhdy5qc29uKCk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9O1xuXG4gIHN0YXRpYyByZXBvcnRTZXNzaW9uID0gYXN5bmMgKHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFNlc3Npb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxQ2hhdHNSZXBvcnRTZXNzaW9uSWRQb3N0KHtcbiAgICAgIFJlcG9ydFNlc3Npb25SZXF1ZXN0OiByZXBvcnRSZXF1ZXN0LFxuICAgIH0pO1xuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0UmVzcG9uc2VzID0gYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8TWVzc2FnZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdCh7XG4gICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcChyZXNwID0+IHZhbGlkYXRlUmVzcG9uc2UocmVzcCkpXG4gICAgICAgIC5tYXAocmVzcCA9PiBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3ApKTtcblxuICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobSk6IG0gaXMgTWVzc2FnZSA9PiBtICE9IG51bGwpO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0ZhaWxlZCB0byBnZXQgbmV4dCByZXNwb25zZXMnLCBlcnIsIHtcbiAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKCdGYWlsZWQgdG8gZ2V0IG5leHQgcmVzcG9uc2VzJywgZXJyKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldE5leHRSZXNwb25zZVN0cmVhbWluZyA9IChcbiAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gICk6IEFzeW5jR2VuZXJhdG9yPFJlc3BvbnNlLCB2b2lkLCB1bmtub3duPiA9PiB7XG4gICAgYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlKGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpLCBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikge1xuICAgICAgLy8gbWFrZSBzdXJlIHN0cmVhbWluZyBpcyBlbmFibGVkXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGluZmVyZW5jZUFwaS52MU5leHRSZXNwb25zZXNQb3N0UmF3KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlIGFzIGEgc3RyZWFtIG9mIGRhdGFcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yYXcuYm9keSkge1xuICAgICAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gTm8gYm9keSBpbiB0aGUgc3RyZWFtZWQgcmVzcG9uc2UnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZS5yYXcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UucmF3LmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7XG5cbiAgICAgICAgbGV0IHBhcnRpYWwgPSAnJztcbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3Qgc2FmZVBhcnNlID0gKGxpbmU6IHN0cmluZyk6IHVua25vd24gPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsaW5lKTsgLy8gUGFyc2UgdGhlIEpTT04gc3RyaW5nXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEVycm9yIHBhcnNpbmcgc3RyZWFtZWQgbGluZScsIGVyciwge1xuICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhbmQgc2V0IHRoZSBwYXJ0aWFsIHRvIG91ciBjdXJyZW50IGNodW5rXG4gICAgICAgICAgICBwYXJ0aWFsID0gbGluZTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0aWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUT0RPIHRoaXMgZnVuY3Rpb24gaXMgcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgY29tZXMgZnJvbSB0aGUgc3RyZWFtIC0gZGVmaW5lIGl0IG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvclxuICAgICAgICBjb25zdCBwcm9jZXNzQ2h1bmsgPSAoY2h1bms6IHN0cmluZyk6IHVua25vd25bXSA9PiB7XG4gICAgICAgICAgLy8gbWVyZ2UgdGhlIHBhcnRpYWwgd2l0aCB0aGUgaW5jb21pbmcgY2h1bmtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGAke3BhcnRpYWx9JHtjaHVua31gLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gbGluZXNcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL15kYXRhOiAvLCAnJykudHJpbSgpKSAvLyBSZW1vdmUgdGhlIFwiZGF0YTogXCIgcHJlZml4XG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSAhPT0gJycgJiYgbGluZSAhPT0gJ1tET05FXScpIC8vIFJlbW92ZSBlbXB0eSBsaW5lcyBhbmQgXCJbRE9ORV1cIlxuICAgICAgICAgICAgLm1hcChzYWZlUGFyc2UpXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gdik7IC8vIGFuZCBmaWx0ZXIgb3V0IHRoZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZExpbmVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hc3NhZ2UgYW5kIHBhcnNlIHRoZSBjaHVuayBvZiBkYXRhXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkTGluZXMgPSBwcm9jZXNzQ2h1bmsoY2h1bmspO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBwYXJzZWRMaW5lIG9mIHBhcnNlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRSZXNwb25zZSA9IHZhbGlkYXRlUmVzcG9uc2UocGFyc2VkTGluZSk7XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZWRSZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gRmFpbGVkIHRvIGdldCBuZXh0IHN0cmVhbWluZyByZXNwb25zZXMnLCBlcnJvciwge1xuICAgICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBuZXh0IHN0cmVhbWluZyByZXNwb25zZXMnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnJlc3BvbnNlc0Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHJldHVybiBnZW5lcmF0ZShcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLFxuICAgICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIsXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFN1Z2dlc3Rpb25zID0gYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8U3VnZ2VzdGlvbltdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFOZXh0U3VnZ2VzdGlvbnNQb3N0KFxuICAgICAgICB7XG4gICAgICAgICAgTmV4dE1lc3NhZ2VSZXF1ZXN0OiBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdChwYXlsb2FkKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5zdWdnZXN0aW9uc0Fib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHJlc3BvbnNlXG4gICAgICAgIC5tYXAocmVzcCA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24ocmVzcCkpXG4gICAgICAgIC5maWx0ZXIoKHN1Z2dlc3Rpb24pOiBzdWdnZXN0aW9uIGlzIFN1Z2dlc3Rpb24gPT4gc3VnZ2VzdGlvbiAhPSBudWxsKTtcblxuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbygnRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9ucycsIGVycm9yLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKCdGYWlsZWQgdG8gZ2V0IHN1Z2dlc3Rpb25zJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgZXhpc3RpbmcgY2hhdCBkYXRhIGZvciBhIGdpdmVuIHNlc3Npb24gYW5kIHRyYW5zZm9ybXMgdGhlbSB0byByZWNvbnN0cnVjdCB0aGUgY2hhdCBoaXN0b3J5LlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgVGhlIG9yZ2FuaXphdGlvbiBJZFxuICAgKiBAcGFyYW0gY2hhdElkIFRoZSBleGlzdGluZyBjaGF0IElkXG4gICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgSWRcbiAgICpcbiAgICogQHJldHVybnMgQSBsaXN0IG9mIG1lc3NhZ2VzIHRoYXQgd2VyZSBleGNoYW5nZWQgaW4gdGhlIGNoYXQsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgY2hhdCBzZXNzaW9uIGhhcyBleHBpcmVkLlxuICAgKi9cbiAgc3RhdGljIGdldFJlc3BvbnNlcyA9IGFzeW5jIChcbiAgICBvcmdJZDogc3RyaW5nLFxuICAgIGNoYXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICApOiBQcm9taXNlPHtcbiAgICByZXNwb25zZXM6IFJlc3BvbnNlW11bXTtcbiAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgfT4gPT4ge1xuICAgIGxldCBkYXRhOiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0ge1xuICAgICAgcmVzcG9uc2VzOiBbXSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHVzZXJfZXZlbnRzOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBvcmdfaWQ6IG9yZ0lkLFxuICAgICAgY2hhdF9pZDogY2hhdElkLFxuICAgICAgdXNlcl9pZDogdXNlcklkLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmRlZmF1bHRBcGkudjFHZXRTZXNzaW9uTWVzc2FnZXMocmVxdWVzdCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKCdGYWlsZWQgdG8gZ2V0IGNoYXQgcmVzcG9uc2VzJywgZXJyb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlczogUmVzcG9uc2VbXVtdID0gZGF0YT8ucmVzcG9uc2VzPy5tYXAodHVybiA9PlxuICAgICAgdHVyblxuICAgICAgICAubWFwKHJlc3BvbnNlID0+IHZhbGlkYXRlUmVzcG9uc2UocmVzcG9uc2UpKVxuICAgICAgICAuZmlsdGVyKChyZXNwb25zZSk6IHJlc3BvbnNlIGlzIFJlc3BvbnNlID0+IHJlc3BvbnNlICE9IG51bGwpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdID0gZGF0YT8uc3VnZ2VzdGlvbnNcbiAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbikpXG4gICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICBjb25zdCB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXSA9IGRhdGE/LnVzZXJfZXZlbnRzXG4gICAgICAubWFwKGV2ZW50ID0+IHZhbGlkYXRlVXNlckV2ZW50KGV2ZW50KSlcbiAgICAgIC5maWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgVXNlckV2ZW50ID0+IGV2ZW50ICE9IG51bGwpO1xuXG4gICAgLy8gaWYgYSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gc3VibWl0dGVkLCBkb24ndCBzaG93IGl0IGluIHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBmb3JtU3VibWl0dGVkVXNlckV2ZW50c0Zvcm1JZHMgPSB1c2VyRXZlbnRzXG4gICAgICAuZmlsdGVyKGV2ZW50ID0+IGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKVxuICAgICAgLm1hcChldmVudCA9PiBldmVudC5hdHRyaWJ1dGVzLmZvcm1SZXNwb25zZUlkKTtcblxuICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHJlc3BvbnNlc1xuICAgICAgLm1hcCh0dXJuID0+XG4gICAgICAgIHR1cm5cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgcmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICByZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtICYmXG4gICAgICAgICAgICAgICAgZm9ybVN1Ym1pdHRlZFVzZXJFdmVudHNGb3JtSWRzLmluY2x1ZGVzKHJlc3BvbnNlLmlkKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHJlc3BvbnNlID0+IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpKVxuICAgICAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2UgPT4gbWVzc2FnZSAhPSBudWxsKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIodHVybiA9PiB0dXJuLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgdXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHVzZXJFdmVudHNcbiAgICAgIC5tYXAoZXZlbnQgPT4ge1xuICAgICAgICBpZiAoW1VzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQsIFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaF0uaW5jbHVkZXMoZXZlbnQuY2F0ZWdvcnkpKSB7XG4gICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbVF1ZXJ5RXZlbnQoZXZlbnQpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICAgICAgICByZXR1cm4gW21lc3NhZ2VGcm9tU3VnZ2VzdGlvbkV2ZW50KGV2ZW50LCBzdWdnZXN0aW9ucyldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKSB7XG4gICAgICAgICAgY29uc3QgZm9ybVJlc3BvbnNlID0gcmVzcG9uc2VzXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgcmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5pZCA9PT0gZXZlbnQuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVR5cGUgIT09IEZvcm1UeXBlLkVzY2FsYXRpb24sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZSAmJiBmb3JtUmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudChldmVudCwgZm9ybVJlc3BvbnNlLmF0dHJpYnV0ZXMpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgTWVzc2FnZVtdID0+IG1lc3NhZ2UubGVuZ3RoID4gMCk7XG5cbiAgICAvLyBTb3J0IHRoZSBtZXNzYWdlcyBjaHJvbm9sb2dpY2FsbHkgdG8gcmVjb25zdHJ1Y3QgdGhlIGNoYXQgaGlzdG9yeVxuICAgIGNvbnN0IHNvcnRlZE1lc3NhZ2VzID0gWy4uLmFzc2lzdGFudE1lc3NhZ2VzLCAuLi51c2VyTWVzc2FnZXNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gbmV3IERhdGUoYVswXS5jcmVhdGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGJbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCksXG4gICAgKTtcblxuICAgIHJldHVybiB7IHJlc3BvbnNlcywgdXNlckV2ZW50cywgc3VnZ2VzdGlvbnMsIG1lc3NhZ2VzOiBzb3J0ZWRNZXNzYWdlcyB9O1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkRXZlbnQgPSBhc3luYyAocGF5bG9hZDogU3VwcG9ydGVkRXZlbnRSZXF1ZXN0KTogUHJvbWlzZTxTdXBwb3J0ZWRFdmVudD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdSZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KHtcbiAgICAgICAgICBTdXBwb3J0ZWRFdmVudFJlcXVlc3Q6IGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlIEpTT05cbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZVRleHQgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcudGV4dCgpO1xuICAgICAgY29uc3QgaHR0cFJlc3BvbnNlSnNvbiA9IEpTT04ucGFyc2UoaHR0cFJlc3BvbnNlVGV4dCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmh0dHBSZXNwb25zZUpzb24sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogaHR0cFJlc3BvbnNlSnNvbi5udW1fb2ZfcmV2aWV3cyxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogaHR0cFJlc3BvbnNlSnNvbi5tZXJjaGFudF90YWdzIHx8IFtdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGdldCByZXNwb25zZSBmb3IgdjFTdXBwb3J0ZWRFdmVudFBvc3QnLCB7XG4gICAgICAgIGVycixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VwcG9ydGVkOiBmYWxzZSxcbiAgICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgICBjYXRlZ29yeTogdW5kZWZpbmVkLFxuICAgICAgICBjb2xsZWN0aW9uczogW10sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICB0b3BfY2F0ZWdvcnk6IHVuZGVmaW5lZCxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogW10sXG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgaWRlbnRpZnlVc2VyID0gYXN5bmMgKFxuICAgIHNwaWZmeVVzZXJJZDogc3RyaW5nLFxuICAgIG1lcmNoYW50VXNlcklkOiBzdHJpbmcsXG4gICAgdWFEZXRhaWxzOiBDbGllbnREZXRhaWxzLFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0KHtcbiAgICAgICAgQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcl9pZDogc3BpZmZ5VXNlcklkLFxuICAgICAgICAgIG9zX25hbWU6IHVhRGV0YWlscy5vcyxcbiAgICAgICAgICBvc192ZXJzaW9uOiB1YURldGFpbHMub3NWZXJzaW9uLFxuICAgICAgICAgIHBsYXRmb3JtOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgZGV2aWNlX2lkOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgZGV2aWNlX2JyYW5kOiB1YURldGFpbHMuZGV2aWNlQnJhbmQsXG4gICAgICAgICAgZGV2aWNlX21hbnVmYWN0dXJlcjogdWFEZXRhaWxzLmRldmljZU1hbnVmYWN0dXJlcixcbiAgICAgICAgICBkZXZpY2VfbW9kZWw6IHVhRGV0YWlscy5kZXZpY2VNb2RlbCxcbiAgICAgICAgICB1c2VyX3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNkcF91c2VyX2lkOiBtZXJjaGFudFVzZXJJZCxcbiAgICAgICAgICAgIGJyb3dzZXI6IHVhRGV0YWlscy5icm93c2VyLFxuICAgICAgICAgICAgYnJvd3Nlcl92ZXJzaW9uOiB1YURldGFpbHMuYnJvd3NlclZlcnNpb24sXG4gICAgICAgICAgICB1c2VyX2FnZW50OiB1YURldGFpbHMudXNlckFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGlkZW50aWZ5IHVzZXInLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBtYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZSA9IChcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkLFxuICApOiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChzb3VyY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5Gb3JrOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLkZvcms7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLlBsYXlncm91bmQ6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uUGxheWdyb3VuZDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uQXBwOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLkFwcDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uVGVzdDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5UZXN0O1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5FdmFsOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlRlc3Q7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGlmIG5ldyB2YWx1ZXMgYXJlIGFkZGVkIHRvIENvbnRleHRTb3VyY2VFbnVtLCB3ZSBjYXRjaCBpdFxuICAgICAgICBjb25zdCBleGhhdXN0aXZlQ2hlY2s6IG5ldmVyID0gc291cmNlO1xuICAgICAgICByZXR1cm4gZXhoYXVzdGl2ZUNoZWNrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0T3JnQ29uZmlnID0gYXN5bmMgKHVzZXJfaWQ6IHN0cmluZyk6IFByb21pc2U8T3JnQ29uZmlnIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGF0b21TdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgICAgY29uc3QgcmVhY3RBcHBOYW1lID0gYXRvbVN0b3JlLmdldChyZWFjdEFwcE5hbWVBdG9tKTtcbiAgICAgIGNvbnN0IGNvbnRleHRTb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFnU2VydmljZSA9IGF0b21TdG9yZS5nZXQoZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSk7IC8vIEdldCBmZWF0dXJlRmxhZ1NlcnZpY2VcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiByZWFjdEFwcE5hbWUsXG4gICAgICAgIHVzZXJfaWQsXG4gICAgICAgIHNvdXJjZTogdGhpcy5tYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZShjb250ZXh0U291cmNlKSxcbiAgICAgICAgaW5jbHVkZV9leHBlcmltZW50czogT2JqZWN0LnZhbHVlcyhQcm9kdWN0RXhwZXJpbWVudCksXG4gICAgICAgIGluY2x1ZGVfZmVhdHVyZV9nYXRlczogT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9LFxuICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcigoWywgaXNFbmFibGVkXSkgPT4gaXNFbmFibGVkKVxuICAgICAgICAgIC5tYXAoKFtmZWF0dXJlR2F0ZU5hbWVdKSA9PiBmZWF0dXJlR2F0ZU5hbWUpLCAvLyBVc2UgZmVhdHVyZUZsYWdTZXJ2aWNlXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmRlZmF1bHRBcGkudjFPcmdDb25maWdHZXQocmVxdWVzdCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKGBGYWlsZWQgdG8gZ2V0IG9yZyBjb25maWdgLCBlcnIsIHsgZXJyIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGN1c3RvbWVyU2VydmljZVByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VQcm92aWRlcixcbiAgKSA9PiB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICBgYWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uIC0gdXNlcl9pZD0ke3NwaWZmeVVzZXJJZH0gZW1haWw9JHtlbWFpbH0gY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcj0ke2N1c3RvbWVyU2VydmljZVByb3ZpZGVyfWAsXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5jdXN0b21lclNlcnZpY2VBcGkudjFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0OiB7XG4gICAgICAgICAgICBzcGlmZnlfdXNlcl9pZDogc3BpZmZ5VXNlcklkLFxuICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICBjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyOiBjdXN0b21lclNlcnZpY2VQcm92aWRlcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGFkZCBub3RlIHRvIGxhdGVzdCBjb252ZXJzYXRpb24nLCB7IGVyciB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldEN1c3RvbWVyU2VydmljZUFwaSA9ICgpID0+IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3Vz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
318
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVyY2UtYXBpLmpzIiwibmFtZXMiOlsiY29uZmlnOiBDb25maWd1cmF0aW9uIiwiZXJyOiB1bmtub3duIiwiZXJyb3I6IHVua25vd24iLCJkYXRhOiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlIiwicmVzcG9uc2VzOiBSZXNwb25zZVtdW10iLCJzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdIiwidXNlckV2ZW50czogVXNlckV2ZW50W10iLCJhc3Npc3RhbnRNZXNzYWdlczogTWVzc2FnZVtdW10iLCJ1c2VyTWVzc2FnZXM6IE1lc3NhZ2VbXVtdIiwicmVxdWVzdDogVjFPcmdDb25maWdHZXRSZXF1ZXN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uLFxuICBDb250ZXh0RW52RW51bSxcbiAgQ29udGV4dFNvdXJjZUVudW0sXG4gIEN1c3RvbWVyU2VydmljZUFwaSxcbiAgQ3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXIsXG4gIERlZmF1bHRBcGksXG4gIEZvcm1UeXBlLFxuICBJbmZlcmVuY2VBcGksXG4gIFJlcG9ydFNlc3Npb25SZXF1ZXN0LFxuICBSZXNwb25zZUNhdGVnb3J5LFxuICBSZXNwb25zZUVycm9yLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbiAgVjFHZXRTZXNzaW9uTWVzc2FnZXMyMDBSZXNwb25zZSxcbiAgVjFPcmdDb25maWdHZXRSZXF1ZXN0LFxuICBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0sXG59IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVN1Z2dlc3Rpb24gfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVTdWdnZXN0aW9uJztcbmltcG9ydCB7IHZhbGlkYXRlVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlVXNlckV2ZW50JztcbmltcG9ydCB7XG4gIG1lc3NhZ2VGcm9tUXVlcnlFdmVudCxcbiAgbWVzc2FnZUZyb21SZXNwb25zZSxcbiAgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscyc7XG5pbXBvcnQge1xuICBNZXNzYWdlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxuICBTdWdnZXN0aW9uLFxuICBTdXBwb3J0ZWRFdmVudFJlcXVlc3QsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy9uZXh0TWVzc2FnZVJlcXVlc3RUb0FwaVJlcXVlc3QnO1xuaW1wb3J0IHsgdmFsaWRhdGVSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZVJlc3BvbnNlJztcbmltcG9ydCB7IGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0JztcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tICdzcmMvdHlwZXMvZXhjZXB0aW9ucy9zZXNzaW9uRXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBVbnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb24gfSBmcm9tICdzcmMvdHlwZXMvZXhjZXB0aW9ucy91bnN1cHBvcnRlZFByb2R1Y3RFeGNlcHRpb25zJztcbmltcG9ydCB7IENsaWVudERldGFpbHMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2NsaWVudERldGFpbHMnO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSAnc3JjL2F0b21zL2F0b21TdG9yZS9hdG9tU3RvcmUnO1xuaW1wb3J0IHsgUHJvZHVjdEV4cGVyaW1lbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL3Byb2R1Y3RFeHBlcmltZW50JztcbmltcG9ydCB7IHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMnO1xuaW1wb3J0IHsgT3JnQ29uZmlnIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvb3JnQ29uZmlnUmVzdWx0cyc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRFdmVudCB9IGZyb20gJ3NyYy9hdG9tcy9hcHAvdmFyaWFudCc7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCc7XG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQvZGlzdC9tb2RlbHMvQ29udGV4dCc7XG5pbXBvcnQge1xuICBiYXNlVXJsQXRvbSxcbiAgY29udGV4dFNvdXJjZUF0b20sXG4gIGVudkF0b20sXG4gIG9yZ1Nob3J0TmFtZUF0b20sXG4gIHJlYWN0QXBwTmFtZUF0b20sIC8vIEltcG9ydCBlbnZBdG9tXG59IGZyb20gJ3NyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnJztcbmltcG9ydCB7IGNoYXRJZEF0b20sIHVzZXJJZEF0b20gfSBmcm9tICdzcmMvYXRvbXMvYXBwJzsgLy8gSW1wb3J0IHVzZXJJZEF0b20gYW5kIGNoYXRJZEF0b21cbmltcG9ydCB7IGZlYXR1cmVGbGFnU2VydmljZUF0b20sIG9yZ0lkQXRvbSB9IGZyb20gJ3NyYy9hdG9tcy9vcmcvZ3JhcGhxbENvbmZpZyc7IC8vIEltcG9ydCBuZXcgb3JnSWRBdG9tIGFuZCBmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tXG5cbmFzeW5jIGZ1bmN0aW9uIGVycm9yUmVzcG9uc2VCb2R5KGVycm9yOiBSZXNwb25zZUVycm9yKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGVycm9yLnJlc3BvbnNlLmpzb24oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKGVycm9yTXNnOiBzdHJpbmcsIGVycm9yOiB1bmtub3duKSB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgUmVzcG9uc2VFcnJvcikpIHtcbiAgICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGF3YWl0IGVycm9yUmVzcG9uc2VCb2R5KGVycm9yKTtcbiAgaWYgKFxuICAgIGVycm9yUmVzcG9uc2U/Lm1lc3NhZ2U/LnRvTG93ZXJDYXNlKCkgPT09ICd1bnN1cHBvcnRlZCBwcm9kdWN0JyB8fCAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEFQSSByZXR1cm4gc3ViX2NvZGUgaW5zdGVhZCBvZiBtZXNzYWdlXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09ICdQUk9EVUNUX05PVF9GT1VORCdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUHJvZHVjdEV4Y2VwdGlvbigpO1xuICB9IGVsc2UgaWYgKFxuICAgIGVycm9yUmVzcG9uc2U/LmFwcF9jb2RlPy50b1VwcGVyQ2FzZSgpID09PSAnUkVTVEFSVF9TRVNTSU9OJyB8fFxuICAgIGVycm9yUmVzcG9uc2U/LnN1Yl9jb2RlPy50b1VwcGVyQ2FzZSgpID09PSAnTk9UX0ZPVU5EJyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3IEFQSSByZXNwb25zZXMgd2lsbCBjb250YWluIFwiYXBwX2NvZGVcIlxuICApIHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgICdTZXNzaW9uIGRvZXMgbm90IGV4aXN0LiBSZS1zdGFydCBzZXNzaW9uJyxcbiAgICAgIGVycm9yLFxuICAgICAgZXJyb3IucmVzcG9uc2UsXG4gICAgICBlcnJvclJlc3BvbnNlLFxuICAgICk7XG4gICAgdGhyb3cgbmV3IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQoKTtcbiAgfVxuXG4gIExvZ2dlci5sb2dJbmZvKGVycm9yTXNnLCBlcnJvcik7XG4gIHRocm93IGVycm9yO1xufVxuXG5jbGFzcyBDb21tZXJjZUFwaUNsaWVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFwaTogRGVmYXVsdEFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbWVyU2VydmljZUFwaTogQ3VzdG9tZXJTZXJ2aWNlQXBpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5mZXJlbmNlQXBpOiBJbmZlcmVuY2VBcGk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2U6IENvbW1lcmNlQXBpQ2xpZW50IHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHJpdmF0ZSByZXNwb25zZXNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SW5zdGFuY2UgPSAoKTogQ29tbWVyY2VBcGlDbGllbnQgPT4ge1xuICAgIGlmICghQ29tbWVyY2VBcGlDbGllbnQuaW5zdGFuY2UpIHtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlID0gbmV3IENvbW1lcmNlQXBpQ2xpZW50KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIENvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlO1xuICB9O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoYmFzZVBhdGg/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBiYXNlVXJsID0gYXRvbVN0b3JlLmdldChiYXNlVXJsQXRvbSk7XG4gICAgY29uc3QgcGF0aCA9IGJhc2VQYXRoIHx8IGJhc2VVcmw7XG4gICAgLy8gQVBJIEtleSBpcyBub3cgaGFuZGxlZCBhdCB0aGUgRW52aXZlQ29uZmlnUHJvdmlkZXIgbGV2ZWxcbiAgICBjb25zdCBjb25maWc6IENvbmZpZ3VyYXRpb24gPSBuZXcgQ29uZmlndXJhdGlvbih7XG4gICAgICBiYXNlUGF0aDogcGF0aCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMuZGVmYXVsdEFwaSA9IG5ldyBEZWZhdWx0QXBpKGNvbmZpZyk7XG4gICAgdGhpcy5pbmZlcmVuY2VBcGkgPSBuZXcgSW5mZXJlbmNlQXBpKGNvbmZpZyk7XG4gICAgdGhpcy5jdXN0b21lclNlcnZpY2VBcGkgPSBuZXcgQ3VzdG9tZXJTZXJ2aWNlQXBpKGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgcmVzb2x2ZVVybCA9IGFzeW5jICh1cmw6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGF0b21TdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgIGNvbnN0IG9yZ1Nob3J0TmFtZSA9IGF0b21TdG9yZS5nZXQob3JnU2hvcnROYW1lQXRvbSk7XG4gICAgY29uc3Qgb3JnSWQgPSBhdG9tU3RvcmUuZ2V0KG9yZ0lkQXRvbSk7XG4gICAgY29uc3QgdXNlcklkID0gYXRvbVN0b3JlLmdldCh1c2VySWRBdG9tKTtcbiAgICBjb25zdCBjaGF0SWQgPSBhdG9tU3RvcmUuZ2V0KGNoYXRJZEF0b20pO1xuICAgIGNvbnN0IHNvdXJjZSA9IGF0b21TdG9yZS5nZXQoY29udGV4dFNvdXJjZUF0b20pO1xuICAgIGNvbnN0IGVudiA9IGF0b21TdG9yZS5nZXQoZW52QXRvbSk7XG5cbiAgICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSBhdG9tU3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pO1xuXG4gICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCA/PyAnJyxcbiAgICAgIG9yZ19pZDogb3JnSWQgPz8gJycsXG4gICAgICBvcmdfc2hvcnRfbmFtZTogb3JnU2hvcnROYW1lID8/ICcnLFxuICAgICAgY2hhdF9pZDogY2hhdElkID8/ICcnLFxuICAgICAgc291cmNlOiBzb3VyY2UgPz8gQ29udGV4dFNvdXJjZUVudW0uQXBwLFxuICAgICAgZW52OiAoZW52IGFzIENvbnRleHRFbnZFbnVtKSA/PyBDb250ZXh0RW52RW51bS5EZXYsIC8vIENhc3QgZW52IHRvIENvbnRleHRFbnZFbnVtXG4gICAgfTtcblxuICAgIGNvbnN0IGZlYXR1cmVHYXRlcyA9IGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fTtcbiAgICBjb25zdCB1cmxSZXNvbHZpbmdSZXF1ZXN0ID0ge1xuICAgICAgdXJsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGZlYXR1cmVfZ2F0ZXM6IGZlYXR1cmVHYXRlcyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmF3UmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmluZmVyZW5jZUFwaS52MVVybFJlc29sdmluZ1Bvc3RSYXcoe1xuICAgICAgVXJsUmVzb2x2aW5nUmVxdWVzdDogdXJsUmVzb2x2aW5nUmVxdWVzdCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlQm9keSA9IGF3YWl0IHJhd1Jlc3BvbnNlLnJhdy5qc29uKCk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2VCb2R5O1xuICB9O1xuXG4gIHN0YXRpYyByZXBvcnRTZXNzaW9uID0gYXN5bmMgKHJlcG9ydFJlcXVlc3Q6IFJlcG9ydFNlc3Npb25SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxQ2hhdHNSZXBvcnRTZXNzaW9uSWRQb3N0KHtcbiAgICAgIFJlcG9ydFNlc3Npb25SZXF1ZXN0OiByZXBvcnRSZXF1ZXN0LFxuICAgIH0pO1xuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0UmVzcG9uc2VzID0gYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8TWVzc2FnZVtdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFOZXh0UmVzcG9uc2VzUG9zdCh7XG4gICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gcmVzcG9uc2VcbiAgICAgICAgLm1hcChyZXNwID0+IHZhbGlkYXRlUmVzcG9uc2UocmVzcCkpXG4gICAgICAgIC5tYXAocmVzcCA9PiBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3ApKTtcblxuICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobSk6IG0gaXMgTWVzc2FnZSA9PiBtICE9IG51bGwpO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oJ0ZhaWxlZCB0byBnZXQgbmV4dCByZXNwb25zZXMnLCBlcnIsIHtcbiAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKCdGYWlsZWQgdG8gZ2V0IG5leHQgcmVzcG9uc2VzJywgZXJyKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldE5leHRSZXNwb25zZVN0cmVhbWluZyA9IChcbiAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gICk6IEFzeW5jR2VuZXJhdG9yPFJlc3BvbnNlLCB2b2lkLCB1bmtub3duPiA9PiB7XG4gICAgYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlKGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpLCBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikge1xuICAgICAgLy8gbWFrZSBzdXJlIHN0cmVhbWluZyBpcyBlbmFibGVkXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGluZmVyZW5jZUFwaS52MU5leHRSZXNwb25zZXNQb3N0UmF3KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJlYWQgdGhlIHJlc3BvbnNlIGFzIGEgc3RyZWFtIG9mIGRhdGFcbiAgICAgICAgaWYgKCFyZXNwb25zZS5yYXcuYm9keSkge1xuICAgICAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gTm8gYm9keSBpbiB0aGUgc3RyZWFtZWQgcmVzcG9uc2UnLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgIHJlc3BvbnNlOiByZXNwb25zZS5yYXcsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UucmF3LmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04Jyk7XG5cbiAgICAgICAgbGV0IHBhcnRpYWwgPSAnJztcbiAgICAgICAgLy8gVE9ETyB0aGlzIGZ1bmN0aW9uIGlzIHJlY3JlYXRlZCBldmVyeSB0aW1lIG5ldyBkYXRhIGNvbWVzIGZyb20gdGhlIHN0cmVhbSAtIGRlZmluZSBpdCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3JcbiAgICAgICAgY29uc3Qgc2FmZVBhcnNlID0gKGxpbmU6IHN0cmluZyk6IHVua25vd24gPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsaW5lKTsgLy8gUGFyc2UgdGhlIEpTT04gc3RyaW5nXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEVycm9yIHBhcnNpbmcgc3RyZWFtZWQgbGluZScsIGVyciwge1xuICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhbmQgc2V0IHRoZSBwYXJ0aWFsIHRvIG91ciBjdXJyZW50IGNodW5rXG4gICAgICAgICAgICBwYXJ0aWFsID0gbGluZTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0aWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUT0RPIHRoaXMgZnVuY3Rpb24gaXMgcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgY29tZXMgZnJvbSB0aGUgc3RyZWFtIC0gZGVmaW5lIGl0IG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvclxuICAgICAgICBjb25zdCBwcm9jZXNzQ2h1bmsgPSAoY2h1bms6IHN0cmluZyk6IHVua25vd25bXSA9PiB7XG4gICAgICAgICAgLy8gbWVyZ2UgdGhlIHBhcnRpYWwgd2l0aCB0aGUgaW5jb21pbmcgY2h1bmtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGAke3BhcnRpYWx9JHtjaHVua31gLnNwbGl0KCdcXG4nKTtcblxuICAgICAgICAgIGNvbnN0IHBhcnNlZExpbmVzID0gbGluZXNcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoL15kYXRhOiAvLCAnJykudHJpbSgpKSAvLyBSZW1vdmUgdGhlIFwiZGF0YTogXCIgcHJlZml4XG4gICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZSAhPT0gJycgJiYgbGluZSAhPT0gJ1tET05FXScpIC8vIFJlbW92ZSBlbXB0eSBsaW5lcyBhbmQgXCJbRE9ORV1cIlxuICAgICAgICAgICAgLm1hcChzYWZlUGFyc2UpXG4gICAgICAgICAgICAuZmlsdGVyKHYgPT4gdik7IC8vIGFuZCBmaWx0ZXIgb3V0IHRoZSB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgICAgcmV0dXJuIHBhcnNlZExpbmVzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3BcbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE1hc3NhZ2UgYW5kIHBhcnNlIHRoZSBjaHVuayBvZiBkYXRhXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSk7XG4gICAgICAgICAgY29uc3QgcGFyc2VkTGluZXMgPSBwcm9jZXNzQ2h1bmsoY2h1bmspO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBwYXJzZWRMaW5lIG9mIHBhcnNlZExpbmVzKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRSZXNwb25zZSA9IHZhbGlkYXRlUmVzcG9uc2UocGFyc2VkTGluZSk7XG5cbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWRSZXNwb25zZSkge1xuICAgICAgICAgICAgICB5aWVsZCB2YWxpZGF0ZWRSZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcignW3NwaWZmeS1haV0gRmFpbGVkIHRvIGdldCBuZXh0IHN0cmVhbWluZyByZXNwb25zZXMnLCBlcnJvciwge1xuICAgICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZignRmFpbGVkIHRvIGdldCBuZXh0IHN0cmVhbWluZyByZXNwb25zZXMnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnJlc3BvbnNlc0Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHJldHVybiBnZW5lcmF0ZShcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLFxuICAgICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXIsXG4gICAgKTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0TmV4dFN1Z2dlc3Rpb25zID0gYXN5bmMgKHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdCk6IFByb21pc2U8U3VnZ2VzdGlvbltdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFOZXh0U3VnZ2VzdGlvbnNQb3N0KFxuICAgICAgICB7XG4gICAgICAgICAgTmV4dE1lc3NhZ2VSZXF1ZXN0OiBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdChwYXlsb2FkKSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHNpZ25hbDogQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5zdWdnZXN0aW9uc0Fib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHJlc3BvbnNlXG4gICAgICAgIC5tYXAocmVzcCA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24ocmVzcCkpXG4gICAgICAgIC5maWx0ZXIoKHN1Z2dlc3Rpb24pOiBzdWdnZXN0aW9uIGlzIFN1Z2dlc3Rpb24gPT4gc3VnZ2VzdGlvbiAhPSBudWxsKTtcblxuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbygnRmFpbGVkIHRvIGdldCBzdWdnZXN0aW9ucycsIGVycm9yLCB7XG4gICAgICAgIHBheWxvYWRDb250ZXh0OiBwYXlsb2FkPy5jb250ZXh0LFxuICAgICAgICB1c2VyRXZlbnRzOiBwYXlsb2FkPy51c2VyRXZlbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKCdGYWlsZWQgdG8gZ2V0IHN1Z2dlc3Rpb25zJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgZXhpc3RpbmcgY2hhdCBkYXRhIGZvciBhIGdpdmVuIHNlc3Npb24gYW5kIHRyYW5zZm9ybXMgdGhlbSB0byByZWNvbnN0cnVjdCB0aGUgY2hhdCBoaXN0b3J5LlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgVGhlIG9yZ2FuaXphdGlvbiBJZFxuICAgKiBAcGFyYW0gY2hhdElkIFRoZSBleGlzdGluZyBjaGF0IElkXG4gICAqIEBwYXJhbSB1c2VySWQgVGhlIHVzZXIgSWRcbiAgICpcbiAgICogQHJldHVybnMgQSBsaXN0IG9mIG1lc3NhZ2VzIHRoYXQgd2VyZSBleGNoYW5nZWQgaW4gdGhlIGNoYXQsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgY2hhdCBzZXNzaW9uIGhhcyBleHBpcmVkLlxuICAgKi9cbiAgc3RhdGljIGdldFJlc3BvbnNlcyA9IGFzeW5jIChcbiAgICBvcmdJZDogc3RyaW5nLFxuICAgIGNoYXRJZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nLFxuICApOiBQcm9taXNlPHtcbiAgICByZXNwb25zZXM6IFJlc3BvbnNlW11bXTtcbiAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgfT4gPT4ge1xuICAgIGxldCBkYXRhOiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0ge1xuICAgICAgcmVzcG9uc2VzOiBbXSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHVzZXJfZXZlbnRzOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBvcmdfaWQ6IG9yZ0lkLFxuICAgICAgY2hhdF9pZDogY2hhdElkLFxuICAgICAgdXNlcl9pZDogdXNlcklkLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmRlZmF1bHRBcGkudjFHZXRTZXNzaW9uTWVzc2FnZXMocmVxdWVzdCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIGF3YWl0IHRocm93U2Vzc2lvblJlc3RhcnRSZXF1aXJlZElmKCdGYWlsZWQgdG8gZ2V0IGNoYXQgcmVzcG9uc2VzJywgZXJyb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlczogUmVzcG9uc2VbXVtdID0gZGF0YT8ucmVzcG9uc2VzPy5tYXAodHVybiA9PlxuICAgICAgdHVyblxuICAgICAgICAubWFwKHJlc3BvbnNlID0+IHZhbGlkYXRlUmVzcG9uc2UocmVzcG9uc2UpKVxuICAgICAgICAuZmlsdGVyKChyZXNwb25zZSk6IHJlc3BvbnNlIGlzIFJlc3BvbnNlID0+IHJlc3BvbnNlICE9IG51bGwpLFxuICAgICk7XG5cbiAgICBjb25zdCBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdID0gZGF0YT8uc3VnZ2VzdGlvbnNcbiAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbikpXG4gICAgICAuZmlsdGVyKChzdWdnZXN0aW9uKTogc3VnZ2VzdGlvbiBpcyBTdWdnZXN0aW9uID0+IHN1Z2dlc3Rpb24gIT0gbnVsbCk7XG5cbiAgICBjb25zdCB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXSA9IGRhdGE/LnVzZXJfZXZlbnRzXG4gICAgICAubWFwKGV2ZW50ID0+IHZhbGlkYXRlVXNlckV2ZW50KGV2ZW50KSlcbiAgICAgIC5maWx0ZXIoKGV2ZW50KTogZXZlbnQgaXMgVXNlckV2ZW50ID0+IGV2ZW50ICE9IG51bGwpO1xuXG4gICAgLy8gaWYgYSBmb3JtIGhhcyBhbHJlYWR5IGJlZW4gc3VibWl0dGVkLCBkb24ndCBzaG93IGl0IGluIHRoZSBjaGF0IGhpc3RvcnlcbiAgICBjb25zdCBmb3JtU3VibWl0dGVkVXNlckV2ZW50c0Zvcm1JZHMgPSB1c2VyRXZlbnRzXG4gICAgICAuZmlsdGVyKGV2ZW50ID0+IGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKVxuICAgICAgLm1hcChldmVudCA9PiBldmVudC5hdHRyaWJ1dGVzLmZvcm1SZXNwb25zZUlkKTtcblxuICAgIGNvbnN0IGFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHJlc3BvbnNlc1xuICAgICAgLm1hcCh0dXJuID0+XG4gICAgICAgIHR1cm5cbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgcmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICByZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtICYmXG4gICAgICAgICAgICAgICAgZm9ybVN1Ym1pdHRlZFVzZXJFdmVudHNGb3JtSWRzLmluY2x1ZGVzKHJlc3BvbnNlLmlkKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKHJlc3BvbnNlID0+IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpKVxuICAgICAgICAgIC5maWx0ZXIoKG1lc3NhZ2UpOiBtZXNzYWdlIGlzIE1lc3NhZ2UgPT4gbWVzc2FnZSAhPSBudWxsKSxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIodHVybiA9PiB0dXJuLmxlbmd0aCA+IDApO1xuXG4gICAgY29uc3QgdXNlck1lc3NhZ2VzOiBNZXNzYWdlW11bXSA9IHVzZXJFdmVudHNcbiAgICAgIC5tYXAoZXZlbnQgPT4ge1xuICAgICAgICBpZiAoW1VzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQsIFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaF0uaW5jbHVkZXMoZXZlbnQuY2F0ZWdvcnkpKSB7XG4gICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbVF1ZXJ5RXZlbnQoZXZlbnQpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICAgICAgICByZXR1cm4gW21lc3NhZ2VGcm9tU3VnZ2VzdGlvbkV2ZW50KGV2ZW50LCBzdWdnZXN0aW9ucyldO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKSB7XG4gICAgICAgICAgY29uc3QgZm9ybVJlc3BvbnNlID0gcmVzcG9uc2VzXG4gICAgICAgICAgICAuZmxhdCgpXG4gICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgcmVzcG9uc2UgPT5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5pZCA9PT0gZXZlbnQuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVR5cGUgIT09IEZvcm1UeXBlLkVzY2FsYXRpb24sXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGZvcm1SZXNwb25zZSAmJiBmb3JtUmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSkge1xuICAgICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudChldmVudCwgZm9ybVJlc3BvbnNlLmF0dHJpYnV0ZXMpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgTWVzc2FnZVtdID0+IG1lc3NhZ2UubGVuZ3RoID4gMCk7XG5cbiAgICAvLyBTb3J0IHRoZSBtZXNzYWdlcyBjaHJvbm9sb2dpY2FsbHkgdG8gcmVjb25zdHJ1Y3QgdGhlIGNoYXQgaGlzdG9yeVxuICAgIGNvbnN0IHNvcnRlZE1lc3NhZ2VzID0gWy4uLmFzc2lzdGFudE1lc3NhZ2VzLCAuLi51c2VyTWVzc2FnZXNdLnNvcnQoXG4gICAgICAoYSwgYikgPT4gbmV3IERhdGUoYVswXS5jcmVhdGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGJbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKCksXG4gICAgKTtcblxuICAgIHJldHVybiB7IHJlc3BvbnNlcywgdXNlckV2ZW50cywgc3VnZ2VzdGlvbnMsIG1lc3NhZ2VzOiBzb3J0ZWRNZXNzYWdlcyB9O1xuICB9O1xuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGF5bG9hZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc3RhdGljIGlzU3VwcG9ydGVkRXZlbnQgPSBhc3luYyAocGF5bG9hZDogU3VwcG9ydGVkRXZlbnRSZXF1ZXN0KTogUHJvbWlzZTxTdXBwb3J0ZWRFdmVudD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdSZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KHtcbiAgICAgICAgICBTdXBwb3J0ZWRFdmVudFJlcXVlc3Q6IGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgdGhlIGFjdHVhbCBIVFRQIHJlc3BvbnNlIEpTT05cbiAgICAgIGNvbnN0IGh0dHBSZXNwb25zZVRleHQgPSBhd2FpdCByYXdSZXNwb25zZS5yYXcudGV4dCgpO1xuICAgICAgY29uc3QgaHR0cFJlc3BvbnNlSnNvbiA9IEpTT04ucGFyc2UoaHR0cFJlc3BvbnNlVGV4dCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmh0dHBSZXNwb25zZUpzb24sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogaHR0cFJlc3BvbnNlSnNvbi5udW1fb2ZfcmV2aWV3cyxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogaHR0cFJlc3BvbnNlSnNvbi5tZXJjaGFudF90YWdzIHx8IFtdLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGdldCByZXNwb25zZSBmb3IgdjFTdXBwb3J0ZWRFdmVudFBvc3QnLCB7XG4gICAgICAgIGVycixcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VwcG9ydGVkOiBmYWxzZSxcbiAgICAgICAgcmVhZHk6IGZhbHNlLFxuICAgICAgICBjYXRlZ29yeTogdW5kZWZpbmVkLFxuICAgICAgICBjb2xsZWN0aW9uczogW10sXG4gICAgICAgIG51bWJlck9mUmV2aWV3czogdW5kZWZpbmVkLFxuICAgICAgICB0b3BfY2F0ZWdvcnk6IHVuZGVmaW5lZCxcbiAgICAgICAgbWVyY2hhbnRfdGFnczogW10sXG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgaWRlbnRpZnlVc2VyID0gYXN5bmMgKFxuICAgIHNwaWZmeVVzZXJJZDogc3RyaW5nLFxuICAgIG1lcmNoYW50VXNlcklkOiBzdHJpbmcsXG4gICAgdWFEZXRhaWxzOiBDbGllbnREZXRhaWxzLFxuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0KHtcbiAgICAgICAgQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcl9pZDogc3BpZmZ5VXNlcklkLFxuICAgICAgICAgIG9zX25hbWU6IHVhRGV0YWlscy5vcyxcbiAgICAgICAgICBvc192ZXJzaW9uOiB1YURldGFpbHMub3NWZXJzaW9uLFxuICAgICAgICAgIHBsYXRmb3JtOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgZGV2aWNlX2lkOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgZGV2aWNlX2JyYW5kOiB1YURldGFpbHMuZGV2aWNlQnJhbmQsXG4gICAgICAgICAgZGV2aWNlX21hbnVmYWN0dXJlcjogdWFEZXRhaWxzLmRldmljZU1hbnVmYWN0dXJlcixcbiAgICAgICAgICBkZXZpY2VfbW9kZWw6IHVhRGV0YWlscy5kZXZpY2VNb2RlbCxcbiAgICAgICAgICB1c2VyX3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNkcF91c2VyX2lkOiBtZXJjaGFudFVzZXJJZCxcbiAgICAgICAgICAgIGJyb3dzZXI6IHVhRGV0YWlscy5icm93c2VyLFxuICAgICAgICAgICAgYnJvd3Nlcl92ZXJzaW9uOiB1YURldGFpbHMuYnJvd3NlclZlcnNpb24sXG4gICAgICAgICAgICB1c2VyX2FnZW50OiB1YURldGFpbHMudXNlckFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGlkZW50aWZ5IHVzZXInLCBlcnIpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBtYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZSA9IChcbiAgICBzb3VyY2U6IENvbnRleHRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkLFxuICApOiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0gfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmIChzb3VyY2UgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHNvdXJjZSkge1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5Gb3JrOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLkZvcms7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLlBsYXlncm91bmQ6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uUGxheWdyb3VuZDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uQXBwOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLkFwcDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uVGVzdDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5UZXN0O1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5FdmFsOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlRlc3Q7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGlmIG5ldyB2YWx1ZXMgYXJlIGFkZGVkIHRvIENvbnRleHRTb3VyY2VFbnVtLCB3ZSBjYXRjaCBpdFxuICAgICAgICBjb25zdCBleGhhdXN0aXZlQ2hlY2s6IG5ldmVyID0gc291cmNlO1xuICAgICAgICByZXR1cm4gZXhoYXVzdGl2ZUNoZWNrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgZ2V0T3JnQ29uZmlnID0gYXN5bmMgKHVzZXJfaWQ6IHN0cmluZyk6IFByb21pc2U8T3JnQ29uZmlnIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGF0b21TdG9yZSA9IGdldEF0b21TdG9yZSgpO1xuICAgICAgY29uc3QgcmVhY3RBcHBOYW1lID0gYXRvbVN0b3JlLmdldChyZWFjdEFwcE5hbWVBdG9tKTtcbiAgICAgIGNvbnN0IGNvbnRleHRTb3VyY2UgPSBhdG9tU3RvcmUuZ2V0KGNvbnRleHRTb3VyY2VBdG9tKTtcbiAgICAgIGNvbnN0IGZlYXR1cmVGbGFnU2VydmljZSA9IGF0b21TdG9yZS5nZXQoZmVhdHVyZUZsYWdTZXJ2aWNlQXRvbSk7IC8vIEdldCBmZWF0dXJlRmxhZ1NlcnZpY2VcbiAgICAgIGNvbnN0IHJlcXVlc3Q6IFYxT3JnQ29uZmlnR2V0UmVxdWVzdCA9IHtcbiAgICAgICAgbmFtZXNwYWNlOiByZWFjdEFwcE5hbWUsXG4gICAgICAgIHVzZXJfaWQsXG4gICAgICAgIHNvdXJjZTogdGhpcy5tYXBDb250ZXh0U291cmNlVG9WMU9yZ0NvbmZpZ0dldFNvdXJjZShjb250ZXh0U291cmNlKSxcbiAgICAgICAgaW5jbHVkZV9leHBlcmltZW50czogT2JqZWN0LnZhbHVlcyhQcm9kdWN0RXhwZXJpbWVudCksXG4gICAgICAgIGluY2x1ZGVfZmVhdHVyZV9nYXRlczogT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgZmVhdHVyZUZsYWdTZXJ2aWNlPy5mZWF0dXJlRmxhZ1NlcnZpY2U/LmdldEZlYXR1cmVGbGFncygpIHx8IHt9LFxuICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcigoWywgaXNFbmFibGVkXSkgPT4gaXNFbmFibGVkKVxuICAgICAgICAgIC5tYXAoKFtmZWF0dXJlR2F0ZU5hbWVdKSA9PiBmZWF0dXJlR2F0ZU5hbWUpLCAvLyBVc2UgZmVhdHVyZUZsYWdTZXJ2aWNlXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmRlZmF1bHRBcGkudjFPcmdDb25maWdHZXQocmVxdWVzdCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMocmVzcG9uc2UpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKGBGYWlsZWQgdG8gZ2V0IG9yZyBjb25maWdgLCBlcnIsIHsgZXJyIH0pO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIGN1c3RvbWVyU2VydmljZVByb3ZpZGVyOiBDdXN0b21lclNlcnZpY2VQcm92aWRlcixcbiAgKSA9PiB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICBgYWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uIC0gdXNlcl9pZD0ke3NwaWZmeVVzZXJJZH0gZW1haWw9JHtlbWFpbH0gY3VzdG9tZXJfc2VydmljZV9wcm92aWRlcj0ke2N1c3RvbWVyU2VydmljZVByb3ZpZGVyfWAsXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5jdXN0b21lclNlcnZpY2VBcGkudjFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0OiB7XG4gICAgICAgICAgICBzcGlmZnlfdXNlcl9pZDogc3BpZmZ5VXNlcklkLFxuICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICBjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyOiBjdXN0b21lclNlcnZpY2VQcm92aWRlcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcignRmFpbGVkIHRvIGFkZCBub3RlIHRvIGxhdGVzdCBjb252ZXJzYXRpb24nLCB7IGVyciB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldEN1c3RvbWVyU2VydmljZUFwaSA9ICgpID0+IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3VzdG9tZXJTZXJ2aWNlQXBpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tZXJjZUFwaUNsaWVudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdEQSxlQUFlLGtCQUFrQixPQUFzQjtBQUNyRCxLQUFJO0FBQ0YsU0FBTyxN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
@@ -91,4 +91,4 @@ type Response$1 = {
91
91
  } & (TextResponseAttributes | ProductResponseAttributes | ReviewResponseAttributes | SeparatorResponseAttributes | PageResponseAttributes | SearchProductResponseAttributes | SearchProductFilterAttributes | FormResponseAttributes | OrderResponseAttributes$1);
92
92
  //#endregion
93
93
  export { AcceptableFormFieldType, FormResponseAttributes, OrderItemInfo$1 as OrderItemInfo, OrderResponseAttributes$1 as OrderResponseAttributes, PageResponseAttributes, ProductResponseAttributes, Response$1 as Response, ReviewResponseAttributes, ReviewRichInformation, SearchProductFilterAttributes, SearchProductResponseAttributes, SearchResponseAttributes, SearchResponseProductAttributes, SeparatorResponseAttributes, TextResponseAttributes };
94
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2UuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNwb25zZUNhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmltcG9ydCB0eXBlIHsgUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyBhcyBBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLCBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIGFzIEFwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsIFNlYXJjaFJlc3BvbnNlUHJvZHVjdCBhcyBBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3QsIEZvcm1UeXBlLCBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24sIEFwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMsIEFwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMsIEFwaVNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuZXhwb3J0IGludGVyZmFjZSBSZXZpZXdSaWNoSW5mb3JtYXRpb24gZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUmV2aWV3UmljaEluZm9ybWF0aW9uPiB7XG59XG5leHBvcnQgdHlwZSBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZSA9ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheSc7XG5leHBvcnQgaW50ZXJmYWNlIE9yZGVySXRlbUluZm8ge1xuICAgIGl0ZW1UaXRsZTogc3RyaW5nO1xuICAgIGl0ZW1QcmljZTogbnVtYmVyO1xuICAgIGl0ZW1RdWFudGl0eTogbnVtYmVyO1xuICAgIG9yZGVySXRlbUlkOiBzdHJpbmc7XG4gICAgaW1hZ2U/OiBzdHJpbmc7XG4gICAgaW5UcmFuc2l0QXQ/OiBzdHJpbmc7XG4gICAgZGVsaXZlcmVkQXQ/OiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkRGVsaXZlcnlBdD86IHN0cmluZztcbiAgICBmdWxmaWxsbWVudERpc3BsYXlTdGF0dXM/OiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXM7XG4gICAgdHJhY2tpbmdVcmw/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5PcmRlcjtcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIG9yZGVySWQ6IHN0cmluZztcbiAgICAgICAgb3JkZXJOdW1iZXI6IHN0cmluZztcbiAgICAgICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgICAgIGxhdGVzdEV2ZW50RGF0ZTogc3RyaW5nO1xuICAgICAgICBsaW5lSXRlbXM6IE9yZGVySXRlbUluZm9bXTtcbiAgICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5UZXh0O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdDtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyAmIHtcbiAgICAgICAgZmlsdGVycz86IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgIH0+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3Q+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlRleHQ7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2g7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcjtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJldmlld1Jlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUmV2aWV3O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXM+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXBhcmF0b3JSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUGFnZTtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LkZvcm07XG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICBmb3JtQ2F0ZWdvcnk/OiB7XG4gICAgICAgICAgICBmb3JtVHlwZTogRm9ybVR5cGU7XG4gICAgICAgIH07XG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdD86ICdlbWFpbCc7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1aXJlZDogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnk7XG59ICYgKFRleHRSZXNwb25zZUF0dHJpYnV0ZXMgfCBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIHwgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIHwgU2VwYXJhdG9yUmVzcG9uc2VBdHRyaWJ1dGVzIHwgUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB8IFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfCBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB8IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgfCBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsSUFBVyx3QkFBd0I7Q0FBQztPQUFXO09BQWdDO0NBQW1CO0FBQ2xHLElBQUEsMEJBQUEsQ0FBQSxJQUFBO0FBQ0EsSUFBVyxrQkFBZ0IsQ0FBQyxXQUFXLHlCQUF5QjtBQUNoRSxJQUFXLDRCQUFvQjtDQUFBO09BQUEsaUJBQUE7T0FBQTtDQUFBO0FBQy9CLElBQVcseUJBQVU7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3JCLElBQVcsNEJBQVU7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3JCLElBQVcsa0NBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQVcsMkJBQVk7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3ZCLElBQVcsa0NBQU87Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ2xCLElBQVcsZ0NBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQVcsMkJBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQVcsOEJBQXFCLENBQUEsV0FBQSxpQkFBQSxVQUFBO0FBQ2hDLElBQVcseUJBQXlCO0NBQUM7T0FBVyxpQkFBTztPQUFBO09BQUE7Q0FBQTtBQUN2RCxJQUFXLHlCQUFhO0NBQUE7T0FBQSxpQkFBQTtPQUFBO09BQUE7Q0FBQTtBQUN4QixJQUFBLGFBQUE7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2UuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNwb25zZUNhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbGl0eVR5cGVzJztcbmltcG9ydCB0eXBlIHsgUmVzcG9uc2VQcm9kdWN0QXR0cmlidXRlcyBhcyBBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLCBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGFzIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIFNlYXJjaFJlc3BvbnNlUHJvZHVjdCBhcyBBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3QsIEZvcm1UeXBlLCBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcywgQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcywgQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24sIEFwaVNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuZXhwb3J0IGludGVyZmFjZSBSZXZpZXdSaWNoSW5mb3JtYXRpb24gZXh0ZW5kcyBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUmV2aWV3UmljaEluZm9ybWF0aW9uPiB7XG59XG5leHBvcnQgdHlwZSBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZSA9ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheSc7XG5leHBvcnQgaW50ZXJmYWNlIE9yZGVySXRlbUluZm8ge1xuICAgIGl0ZW1UaXRsZTogc3RyaW5nO1xuICAgIGl0ZW1QcmljZTogbnVtYmVyO1xuICAgIGl0ZW1RdWFudGl0eTogbnVtYmVyO1xuICAgIG9yZGVySXRlbUlkOiBzdHJpbmc7XG4gICAgaW1hZ2U/OiBzdHJpbmc7XG4gICAgaW5UcmFuc2l0QXQ/OiBzdHJpbmc7XG4gICAgZGVsaXZlcmVkQXQ/OiBzdHJpbmc7XG4gICAgZXN0aW1hdGVkRGVsaXZlcnlBdD86IHN0cmluZztcbiAgICBmdWxmaWxsbWVudERpc3BsYXlTdGF0dXM/OiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXM7XG4gICAgdHJhY2tpbmdVcmw/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5PcmRlcjtcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIG9yZGVySWQ6IHN0cmluZztcbiAgICAgICAgb3JkZXJOdW1iZXI6IHN0cmluZztcbiAgICAgICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgICAgIGxhdGVzdEV2ZW50RGF0ZTogc3RyaW5nO1xuICAgICAgICBsaW5lSXRlbXM6IE9yZGVySXRlbUluZm9bXTtcbiAgICB9O1xufVxuZXhwb3J0IGludGVyZmFjZSBUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5UZXh0O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdDtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyAmIHtcbiAgICAgICAgZmlsdGVycz86IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgIH0+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlTZWFyY2hSZXNwb25zZVByb2R1Y3Q+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlRleHQ7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2g7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXM+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcjtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFJldmlld1Jlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUmV2aWV3O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXM+O1xufVxuZXhwb3J0IGludGVyZmFjZSBTZXBhcmF0b3JSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUGFnZTtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LkZvcm07XG4gICAgYXR0cmlidXRlczoge1xuICAgICAgICBmb3JtQ2F0ZWdvcnk/OiB7XG4gICAgICAgICAgICBmb3JtVHlwZTogRm9ybVR5cGU7XG4gICAgICAgIH07XG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQWNjZXB0YWJsZUZvcm1GaWVsZFR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdD86ICdlbWFpbCc7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1aXJlZDogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgfTtcbn1cbmV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnk7XG59ICYgKFRleHRSZXNwb25zZUF0dHJpYnV0ZXMgfCBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIHwgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIHwgU2VwYXJhdG9yUmVzcG9uc2VBdHRyaWJ1dGVzIHwgUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB8IFNlYXJjaFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfCBTZWFyY2hQcm9kdWN0RmlsdGVyQXR0cmlidXRlcyB8IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgfCBPcmRlclJlc3BvbnNlQXR0cmlidXRlcyk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBSUEsSUFBVyx3QkFBd0I7Q0FBQztPQUFXO09BQWdDO0NBQW1CO0FBQ2xHLElBQUEsMEJBQUEsQ0FBQSxJQUFBO0FBQ0EsSUFBVyxrQkFBZ0IsQ0FBQyxXQUFXLHlCQUF5QjtBQUNoRSxJQUFXLDRCQUFvQjtDQUFBO09BQUEsaUJBQUE7T0FBQTtDQUFBO0FBQy9CLElBQVcseUJBQVU7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3JCLElBQVcsNEJBQVU7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3JCLElBQVcsa0NBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQVcsMkJBQVk7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3ZCLElBQVcsa0NBQU87Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ2xCLElBQVcsZ0NBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQVcsMkJBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQVcsOEJBQXFCLENBQUEsV0FBQSxpQkFBQSxVQUFBO0FBQ2hDLElBQVcseUJBQXlCO0NBQUM7T0FBVyxpQkFBTztPQUFBO09BQUE7Q0FBQTtBQUN2RCxJQUFXLHlCQUFhO0NBQUE7T0FBQSxpQkFBQTtPQUFBO09BQUE7Q0FBQTtBQUN4QixJQUFBLGFBQUE7Q0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
@@ -91,4 +91,4 @@ type Response$1 = {
91
91
  } & (TextResponseAttributes | ProductResponseAttributes | ReviewResponseAttributes | SeparatorResponseAttributes | PageResponseAttributes | SearchProductResponseAttributes | SearchProductFilterAttributes | FormResponseAttributes | OrderResponseAttributes$1);
92
92
  //#endregion
93
93
  export { AcceptableFormFieldType, FormResponseAttributes, OrderItemInfo$1 as OrderItemInfo, OrderResponseAttributes$1 as OrderResponseAttributes, PageResponseAttributes, ProductResponseAttributes, Response$1 as Response, ReviewResponseAttributes, ReviewRichInformation, SearchProductFilterAttributes, SearchProductResponseAttributes, SearchResponseAttributes, SearchResponseProductAttributes, SeparatorResponseAttributes, TextResponseAttributes };
94
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9yZXNwb25zZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc3BvbnNlQ2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIGFzIEFwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMsIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgYXMgQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcywgU2VhcmNoUmVzcG9uc2VQcm9kdWN0IGFzIEFwaVNlYXJjaFJlc3BvbnNlUHJvZHVjdCwgRm9ybVR5cGUsIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMsIEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbiwgQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcywgQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcywgQXBpU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5leHBvcnQgaW50ZXJmYWNlIFJldmlld1JpY2hJbmZvcm1hdGlvbiBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24+IHtcbn1cbmV4cG9ydCB0eXBlIEFjY2VwdGFibGVGb3JtRmllbGRUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJyB8ICdvYmplY3QnIHwgJ2FycmF5JztcbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJJdGVtSW5mbyB7XG4gICAgaXRlbVRpdGxlOiBzdHJpbmc7XG4gICAgaXRlbVByaWNlOiBudW1iZXI7XG4gICAgaXRlbVF1YW50aXR5OiBudW1iZXI7XG4gICAgb3JkZXJJdGVtSWQ6IHN0cmluZztcbiAgICBpbWFnZT86IHN0cmluZztcbiAgICBpblRyYW5zaXRBdD86IHN0cmluZztcbiAgICBkZWxpdmVyZWRBdD86IHN0cmluZztcbiAgICBlc3RpbWF0ZWREZWxpdmVyeUF0Pzogc3RyaW5nO1xuICAgIGZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cz86IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcbiAgICB0cmFja2luZ1VybD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5Lk9yZGVyO1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgb3JkZXJJZDogc3RyaW5nO1xuICAgICAgICBvcmRlck51bWJlcjogc3RyaW5nO1xuICAgICAgICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgICAgICAgbGF0ZXN0RXZlbnREYXRlOiBzdHJpbmc7XG4gICAgICAgIGxpbmVJdGVtczogT3JkZXJJdGVtSW5mb1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIFRleHRSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlRleHQ7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXM+O1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzICYge1xuICAgICAgICBmaWx0ZXJzPzoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgfT47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3Q7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVNlYXJjaFJlc3BvbnNlUHJvZHVjdD47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuVGV4dDtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaDtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoRmlsdGVyO1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXc7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVJldmlld1Jlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlcGFyYXRvclJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuU2VwYXJhdG9yO1xufVxuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5QYWdlO1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybTtcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZvcm1DYXRlZ29yeT86IHtcbiAgICAgICAgICAgIGZvcm1UeXBlOiBGb3JtVHlwZTtcbiAgICAgICAgfTtcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0PzogJ2VtYWlsJztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVpcmVkOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeTtcbn0gJiAoVGV4dFJlc3BvbnNlQXR0cmlidXRlcyB8IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfCBSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMgfCBTZXBhcmF0b3JSZXNwb25zZUF0dHJpYnV0ZXMgfCBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIHwgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB8IFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzIHwgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB8IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxJQUFXLHdCQUF3QjtDQUFDO09BQVc7T0FBZ0M7Q0FBbUI7QUFDbEcsSUFBQSwwQkFBQSxDQUFBLElBQUE7QUFDQSxJQUFXLGtCQUFnQixDQUFDLFdBQVcseUJBQXlCO0FBQ2hFLElBQVcsNEJBQW9CO0NBQUE7T0FBQSxpQkFBQTtPQUFBO0NBQUE7QUFDL0IsSUFBVyx5QkFBVTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDckIsSUFBVyw0QkFBVTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDckIsSUFBVyxrQ0FBYTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBVywyQkFBWTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDdkIsSUFBVyxrQ0FBTztDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDbEIsSUFBVyxnQ0FBYTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBVywyQkFBYTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBVyw4QkFBcUIsQ0FBQSxXQUFBLGlCQUFBLFVBQUE7QUFDaEMsSUFBVyx5QkFBeUI7Q0FBQztPQUFXLGlCQUFPO09BQUE7T0FBQTtDQUFBO0FBQ3ZELElBQVcseUJBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQUEsYUFBQTtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9yZXNwb25zZS5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlc3BvbnNlQ2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy91dGlsaXR5VHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBSZXNwb25zZVByb2R1Y3RBdHRyaWJ1dGVzIGFzIEFwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMsIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgYXMgQXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcywgU2VhcmNoUmVzcG9uc2VQcm9kdWN0IGFzIEFwaVNlYXJjaFJlc3BvbnNlUHJvZHVjdCwgRm9ybVR5cGUsIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMsIEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbiwgQXBpU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzLCBBcGlUZXh0UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5leHBvcnQgaW50ZXJmYWNlIFJldmlld1JpY2hJbmZvcm1hdGlvbiBleHRlbmRzIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24+IHtcbn1cbmV4cG9ydCB0eXBlIEFjY2VwdGFibGVGb3JtRmllbGRUeXBlID0gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJyB8ICdvYmplY3QnIHwgJ2FycmF5JztcbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJJdGVtSW5mbyB7XG4gICAgaXRlbVRpdGxlOiBzdHJpbmc7XG4gICAgaXRlbVByaWNlOiBudW1iZXI7XG4gICAgaXRlbVF1YW50aXR5OiBudW1iZXI7XG4gICAgb3JkZXJJdGVtSWQ6IHN0cmluZztcbiAgICBpbWFnZT86IHN0cmluZztcbiAgICBpblRyYW5zaXRBdD86IHN0cmluZztcbiAgICBkZWxpdmVyZWRBdD86IHN0cmluZztcbiAgICBlc3RpbWF0ZWREZWxpdmVyeUF0Pzogc3RyaW5nO1xuICAgIGZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cz86IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cztcbiAgICB0cmFja2luZ1VybD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5Lk9yZGVyO1xuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgb3JkZXJJZDogc3RyaW5nO1xuICAgICAgICBvcmRlck51bWJlcjogc3RyaW5nO1xuICAgICAgICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgICAgICAgbGF0ZXN0RXZlbnREYXRlOiBzdHJpbmc7XG4gICAgICAgIGxpbmVJdGVtczogT3JkZXJJdGVtSW5mb1tdO1xuICAgIH07XG59XG5leHBvcnQgaW50ZXJmYWNlIFRleHRSZXNwb25zZUF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlRleHQ7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXM+O1xufVxuZXhwb3J0IGludGVyZmFjZSBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0O1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzICYge1xuICAgICAgICBmaWx0ZXJzPzoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgfT47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMge1xuICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3Q7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVNlYXJjaFJlc3BvbnNlUHJvZHVjdD47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuVGV4dDtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpU2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaDtcbiAgICBhdHRyaWJ1dGVzOiBDYW1lbENhc2VkUHJvcGVydGllc0RlZXA8QXBpUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoRmlsdGVyO1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQcm9kdWN0U2VhcmNoRmlsdGVyUmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXc7XG4gICAgYXR0cmlidXRlczogQ2FtZWxDYXNlZFByb3BlcnRpZXNEZWVwPEFwaVJldmlld1Jlc3BvbnNlQXR0cmlidXRlcz47XG59XG5leHBvcnQgaW50ZXJmYWNlIFNlcGFyYXRvclJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuU2VwYXJhdG9yO1xufVxuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIHtcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5QYWdlO1xuICAgIGF0dHJpYnV0ZXM6IENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcDxBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzPjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB7XG4gICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybTtcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZvcm1DYXRlZ29yeT86IHtcbiAgICAgICAgICAgIGZvcm1UeXBlOiBGb3JtVHlwZTtcbiAgICAgICAgfTtcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgW2tleTogc3RyaW5nXToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBBY2NlcHRhYmxlRm9ybUZpZWxkVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0PzogJ2VtYWlsJztcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlcXVpcmVkOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICB9O1xufVxuZXhwb3J0IHR5cGUgUmVzcG9uc2UgPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeTtcbn0gJiAoVGV4dFJlc3BvbnNlQXR0cmlidXRlcyB8IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfCBSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMgfCBTZXBhcmF0b3JSZXNwb25zZUF0dHJpYnV0ZXMgfCBQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIHwgU2VhcmNoUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcyB8IFNlYXJjaFByb2R1Y3RGaWx0ZXJBdHRyaWJ1dGVzIHwgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB8IE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFJQSxJQUFXLHdCQUF3QjtDQUFDO09BQVc7T0FBZ0M7Q0FBbUI7QUFDbEcsSUFBQSwwQkFBQSxDQUFBLElBQUE7QUFDQSxJQUFXLGtCQUFnQixDQUFDLFdBQVcseUJBQXlCO0FBQ2hFLElBQVcsNEJBQW9CO0NBQUE7T0FBQSxpQkFBQTtPQUFBO0NBQUE7QUFDL0IsSUFBVyx5QkFBVTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDckIsSUFBVyw0QkFBVTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDckIsSUFBVyxrQ0FBYTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBVywyQkFBWTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDdkIsSUFBVyxrQ0FBTztDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDbEIsSUFBVyxnQ0FBYTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBVywyQkFBYTtDQUFBO09BQUEsaUJBQUE7T0FBQTtPQUFBO0NBQUE7QUFDeEIsSUFBVyw4QkFBcUIsQ0FBQSxXQUFBLGlCQUFBLFVBQUE7QUFDaEMsSUFBVyx5QkFBeUI7Q0FBQztPQUFXLGlCQUFPO09BQUE7T0FBQTtDQUFBO0FBQ3ZELElBQVcseUJBQWE7Q0FBQTtPQUFBLGlCQUFBO09BQUE7T0FBQTtDQUFBO0FBQ3hCLElBQUEsYUFBQTtDQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
@@ -10,4 +10,4 @@ interface FrontendConfig {
10
10
  }
11
11
  //#endregion
12
12
  export { FrontendConfig };
13
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmRDb25maWcuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhZ2VWYXJpYW50Q29uZmlnLCBXaWRnZXRNb3VudGluZ0NvbmZpZywgV2lkZ2V0Q29uZmlnLCBPcmdVSUNvbmZpZyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIEZyb250ZW5kQ29uZmlnIHtcbiAgICBtZXJjaGFudF9vdmVycmlkZV9jc3M/OiBzdHJpbmc7XG4gICAgcGFnZVZhcmlhbnRzPzogUGFnZVZhcmlhbnRDb25maWdbXTtcbiAgICBtb3VudGluZ0NvbmZpZ3M/OiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz47XG4gICAgd2lkZ2V0Q29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZz47XG4gICAgdWlDb25maWdzPzogT21pdDxPcmdVSUNvbmZpZywgJ21lcmNoYW50T3ZlcnJpZGVDc3MnPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxpQkFBaUI7Q0FBQztPQUFHO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmRDb25maWcuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9mcm9udGVuZENvbmZpZy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9yZ1VJQ29uZmlnLCBQYWdlVmFyaWFudENvbmZpZywgV2lkZ2V0Q29uZmlnLCBXaWRnZXRNb3VudGluZ0NvbmZpZyB9IGZyb20gJ3NyYy9jb250ZXh0cy90eXBlcyc7XG5leHBvcnQgaW50ZXJmYWNlIEZyb250ZW5kQ29uZmlnIHtcbiAgICBtZXJjaGFudF9vdmVycmlkZV9jc3M/OiBzdHJpbmc7XG4gICAgcGFnZVZhcmlhbnRzPzogUGFnZVZhcmlhbnRDb25maWdbXTtcbiAgICBtb3VudGluZ0NvbmZpZ3M/OiBSZWNvcmQ8c3RyaW5nLCBXaWRnZXRNb3VudGluZ0NvbmZpZz47XG4gICAgd2lkZ2V0Q29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldENvbmZpZz47XG4gICAgdWlDb25maWdzPzogT21pdDxPcmdVSUNvbmZpZywgJ21lcmNoYW50T3ZlcnJpZGVDc3MnPjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsSUFBVyxpQkFBaUI7Q0FBQztPQUFHO09BQUE7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO0NBQUEifQ==
@@ -10,4 +10,4 @@ interface FrontendConfig {
10
10
  }
11
11
  //#endregion
12
12
  export { FrontendConfig };
13
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmRDb25maWcuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFnZVZhcmlhbnRDb25maWcsIFdpZGdldE1vdW50aW5nQ29uZmlnLCBXaWRnZXRDb25maWcsIE9yZ1VJQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRlbmRDb25maWcge1xuICAgIG1lcmNoYW50X292ZXJyaWRlX2Nzcz86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudHM/OiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIG1vdW50aW5nQ29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPjtcbiAgICB3aWRnZXRDb25maWdzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0Q29uZmlnPjtcbiAgICB1aUNvbmZpZ3M/OiBPbWl0PE9yZ1VJQ29uZmlnLCAnbWVyY2hhbnRPdmVycmlkZUNzcyc+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFXLGlCQUFpQjtDQUFDO09BQUc7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbnRlbmRDb25maWcuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2Zyb250ZW5kQ29uZmlnLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3JnVUlDb25maWcsIFBhZ2VWYXJpYW50Q29uZmlnLCBXaWRnZXRDb25maWcsIFdpZGdldE1vdW50aW5nQ29uZmlnIH0gZnJvbSAnc3JjL2NvbnRleHRzL3R5cGVzJztcbmV4cG9ydCBpbnRlcmZhY2UgRnJvbnRlbmRDb25maWcge1xuICAgIG1lcmNoYW50X292ZXJyaWRlX2Nzcz86IHN0cmluZztcbiAgICBwYWdlVmFyaWFudHM/OiBQYWdlVmFyaWFudENvbmZpZ1tdO1xuICAgIG1vdW50aW5nQ29uZmlncz86IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPjtcbiAgICB3aWRnZXRDb25maWdzPzogUmVjb3JkPHN0cmluZywgV2lkZ2V0Q29uZmlnPjtcbiAgICB1aUNvbmZpZ3M/OiBPbWl0PE9yZ1VJQ29uZmlnLCAnbWVyY2hhbnRPdmVycmlkZUNzcyc+O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFDQSxJQUFXLGlCQUFpQjtDQUFDO09BQUc7T0FBQTtPQUFBO09BQUE7T0FBQTtPQUFBO09BQUE7Q0FBQSJ9
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
2
- const require_application_models_guards_utils = require('../utils.cjs');
3
2
  const require_logger = require('../../../logging/logger.cjs');
3
+ const require_application_models_guards_utils = require('../utils.cjs');
4
4
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
5
5
 
6
6
  //#region src/application/models/guards/api/isApiFormResponse.ts
@@ -1,5 +1,5 @@
1
- import { hasPropertyOfType } from "../utils.js";
2
1
  import logger_default from "../../../logging/logger.js";
2
+ import { hasPropertyOfType } from "../utils.js";
3
3
  import { FormType } from "@spiffy-ai/commerce-api-client";
4
4
 
5
5
  //#region src/application/models/guards/api/isApiFormResponse.ts
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require('../../../../_virtual/rolldown_runtime.cjs');
2
- const require_application_models_guards_utils = require('../utils.cjs');
3
2
  const require_logger = require('../../../logging/logger.cjs');
3
+ const require_application_models_guards_utils = require('../utils.cjs');
4
4
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
5
5
 
6
6
  //#region src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts
@@ -1,5 +1,5 @@
1
- import { hasPropertyOfType } from "../utils.js";
2
1
  import logger_default from "../../../logging/logger.js";
2
+ import { hasPropertyOfType } from "../utils.js";
3
3
  import { FormType } from "@spiffy-ai/commerce-api-client";
4
4
 
5
5
  //#region src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts
@@ -1,5 +1,5 @@
1
- const require_application_models_guards_utils = require('../utils.cjs');
2
1
  const require_logger = require('../../../logging/logger.cjs');
2
+ const require_application_models_guards_utils = require('../utils.cjs');
3
3
 
4
4
  //#region src/application/models/guards/api/isApiOrderResponseAttributes.ts
5
5
  const isApiOrderItemInfo = (data) => {
@@ -79,4 +79,4 @@ const isApiOrderResponseAttributes = (data) => {
79
79
 
80
80
  //#endregion
81
81
  exports.isApiOrderResponseAttributes = isApiOrderResponseAttributes;
82
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcy5janMiLCJuYW1lcyI6WyJoYXNQcm9wZXJ0eU9mVHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IE9yZGVySXRlbUluZm8sIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGhhc1Byb3BlcnR5T2ZUeXBlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMnO1xuXG4vLyB0aGUgY2xpZW50IFNESyBnZW5lcmF0ZXMgZGF0ZS10aW1lIGZvcm1hdCB0eXBlcyBhcyBgRGF0ZWAgYnV0IHRoZSBvcGVuYXBpIHR5cGVzY3JpcHQgZ2VuZXJhdG9yXG4vLyBkb2VzIG5vdCBjb3JyZWN0bHkgZGVzZXJpYWxpemUgZGF0ZS10aW1lIHZhbHVlcyBzbyB0aGV5IGFyZSBhbHdheXMgYHN0cmluZ2AgYXQgcnVudGltZSBpbnN0ZWFkIG9mXG4vLyBgRGF0ZWAgb2JqZWN0cy4gVGhlc2UgaW50ZXJmYWNlcyBvdmVycmlkZSB0aGUgU0RLIHR5cGVzIHNvIHRoYXQgd2UgY2FuIHZhbGlkYXRlIGFnYWluc3QgdGhlIGFjdHVhbFxuLy8gYHN0cmluZ2AgdmFsdWVzLiBodHRwczovL2dpdGh1Yi5jb20vT3BlbkFQSVRvb2xzL29wZW5hcGktZ2VuZXJhdG9yL2lzc3Vlcy85MjZcbmV4cG9ydCBpbnRlcmZhY2UgQXBpT3JkZXJJdGVtSW5mb1xuICBleHRlbmRzIE9taXQ8T3JkZXJJdGVtSW5mbywgJ2RlbGl2ZXJlZF9hdCcgfCAnZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0JyB8ICdpbl90cmFuc2l0X2F0Jz4ge1xuICBkZWxpdmVyZWRfYXQ/OiBzdHJpbmc7XG4gIGVzdGltYXRlZF9kZWxpdmVyeV9hdD86IHN0cmluZztcbiAgaW5fdHJhbnNpdF9hdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlc1xuICBleHRlbmRzIE9taXQ8T3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMsICdjcmVhdGVkX2F0JyB8ICdsYXRlc3RfZXZlbnRfZGF0ZScgfCAnbGluZV9pdGVtcyc+IHtcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICBsYXRlc3RfZXZlbnRfZGF0ZTogc3RyaW5nO1xuICBsaW5lX2l0ZW1zOiBBcGlPcmRlckl0ZW1JbmZvW107XG59XG5cbmNvbnN0IGlzQXBpT3JkZXJJdGVtSW5mbyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmRlckl0ZW1JbmZvID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBiZSBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9pdGVtX2lkJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBvcmRlcl9pdGVtX2lkIHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaXRlbV90aXRsZScsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGhhdmUgYW4gaXRlbV90aXRsZSBwcm9wZXJ0eScsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2l0ZW1fcHJpY2UnLCAnbnVtYmVyJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIGl0ZW1fcHJpY2UgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpdGVtX3F1YW50aXR5JywgJ251bWJlcicpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBpdGVtX3F1YW50aXR5IHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaW1hZ2UnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uaW1hZ2UgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXMnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXJJdGVtSW5mby5mdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1cyBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ3RyYWNraW5nX3VybCcsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby50cmFja2luZ191cmwgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZGVsaXZlcmVkX2F0JywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLmRlbGl2ZXJlZF9hdCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdlc3RpbWF0ZWRfZGVsaXZlcnlfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0IG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpbl90cmFuc2l0X2F0JywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLmluX3RyYW5zaXRfYXQgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlciByZXNwb25zZSBhdHRyaWJ1dGVzIG11c3QgYmUgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnY3JlYXRlZF9hdCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlciByZXNwb25zZSBhdHRyaWJ1dGVzIG11c3QgaGF2ZSBhIGNyZWF0ZWRfYXQgcHJvcGVydHkgYW5kIGhhdmUgdHlwZSBzdHJpbmcnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2xhdGVzdF9ldmVudF9kYXRlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgbGF0ZXN0X2V2ZW50X2RhdGUgcHJvcGVydHkgYW5kIGhhdmUgdHlwZSBzdHJpbmcnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2xpbmVfaXRlbXMnLCAnYXJyYXknKSB8fFxuICAgICFkYXRhLmxpbmVfaXRlbXMuZXZlcnkoKGl0ZW06IHVua25vd24pID0+IGlzQXBpT3JkZXJJdGVtSW5mbyhpdGVtKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgbGluZV9pdGVtcyBwcm9wZXJ0eSB3aXRoIGF0IGxlYXN0IG9uZSBvcmRlciBpdGVtJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9pZCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlciByZXNwb25zZSBhdHRyaWJ1dGVzIG11c3QgaGF2ZSBhbiBvcmRlcl9pZCBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnb3JkZXJfbnVtYmVyJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIG9yZGVyX251bWJlciBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBc0JBLE1BQU0sc0JBQXNCLFNBQTRDO0FBQ3RFLEtBQUksUUFBUSxRQUFRLE9BQU8sU0FBUyxVQUFVO0FBQzVDLHlCQUFPLFNBQVMsbUNBQW1DLFFBQVcsRUFBRSxNQUFNLENBQUM7QUFDdkUsU0FBTzs7QUFHVCxLQUFJLENBQUNBLDBEQUFrQixNQUFNLGlCQUFpQixTQUFTLEVBQUU7QUFDdkQseUJBQU8sU0FBUyxxREFBcUQsUUFBVyxFQUFFLE1BQU0sQ0FBQztBQUN6RixTQUFPOztBQUdULEtBQUksQ0FB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
82
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcy5janMiLCJuYW1lcyI6WyJoYXNQcm9wZXJ0eU9mVHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IE9yZGVySXRlbUluZm8sIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IGhhc1Byb3BlcnR5T2ZUeXBlIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMnO1xuXG4vLyB0aGUgY2xpZW50IFNESyBnZW5lcmF0ZXMgZGF0ZS10aW1lIGZvcm1hdCB0eXBlcyBhcyBgRGF0ZWAgYnV0IHRoZSBvcGVuYXBpIHR5cGVzY3JpcHQgZ2VuZXJhdG9yXG4vLyBkb2VzIG5vdCBjb3JyZWN0bHkgZGVzZXJpYWxpemUgZGF0ZS10aW1lIHZhbHVlcyBzbyB0aGV5IGFyZSBhbHdheXMgYHN0cmluZ2AgYXQgcnVudGltZSBpbnN0ZWFkIG9mXG4vLyBgRGF0ZWAgb2JqZWN0cy4gVGhlc2UgaW50ZXJmYWNlcyBvdmVycmlkZSB0aGUgU0RLIHR5cGVzIHNvIHRoYXQgd2UgY2FuIHZhbGlkYXRlIGFnYWluc3QgdGhlIGFjdHVhbFxuLy8gYHN0cmluZ2AgdmFsdWVzLiBodHRwczovL2dpdGh1Yi5jb20vT3BlbkFQSVRvb2xzL29wZW5hcGktZ2VuZXJhdG9yL2lzc3Vlcy85MjZcbmV4cG9ydCBpbnRlcmZhY2UgQXBpT3JkZXJJdGVtSW5mbyBleHRlbmRzIE9taXQ8XG4gIE9yZGVySXRlbUluZm8sXG4gICdkZWxpdmVyZWRfYXQnIHwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcgfCAnaW5fdHJhbnNpdF9hdCdcbj4ge1xuICBkZWxpdmVyZWRfYXQ/OiBzdHJpbmc7XG4gIGVzdGltYXRlZF9kZWxpdmVyeV9hdD86IHN0cmluZztcbiAgaW5fdHJhbnNpdF9hdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyBleHRlbmRzIE9taXQ8XG4gIE9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICAnY3JlYXRlZF9hdCcgfCAnbGF0ZXN0X2V2ZW50X2RhdGUnIHwgJ2xpbmVfaXRlbXMnXG4+IHtcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICBsYXRlc3RfZXZlbnRfZGF0ZTogc3RyaW5nO1xuICBsaW5lX2l0ZW1zOiBBcGlPcmRlckl0ZW1JbmZvW107XG59XG5cbmNvbnN0IGlzQXBpT3JkZXJJdGVtSW5mbyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmRlckl0ZW1JbmZvID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBiZSBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9pdGVtX2lkJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBvcmRlcl9pdGVtX2lkIHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaXRlbV90aXRsZScsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGhhdmUgYW4gaXRlbV90aXRsZSBwcm9wZXJ0eScsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2l0ZW1fcHJpY2UnLCAnbnVtYmVyJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIGl0ZW1fcHJpY2UgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpdGVtX3F1YW50aXR5JywgJ251bWJlcicpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBpdGVtX3F1YW50aXR5IHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaW1hZ2UnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uaW1hZ2UgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXMnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXJJdGVtSW5mby5mdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1cyBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ3RyYWNraW5nX3VybCcsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby50cmFja2luZ191cmwgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZGVsaXZlcmVkX2F0JywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLmRlbGl2ZXJlZF9hdCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdlc3RpbWF0ZWRfZGVsaXZlcnlfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0IG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpbl90cmFuc2l0X2F0JywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLmluX3RyYW5zaXRfYXQgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlciByZXNwb25zZSBhdHRyaWJ1dGVzIG11c3QgYmUgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnY3JlYXRlZF9hdCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlciByZXNwb25zZSBhdHRyaWJ1dGVzIG11c3QgaGF2ZSBhIGNyZWF0ZWRfYXQgcHJvcGVydHkgYW5kIGhhdmUgdHlwZSBzdHJpbmcnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2xhdGVzdF9ldmVudF9kYXRlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgbGF0ZXN0X2V2ZW50X2RhdGUgcHJvcGVydHkgYW5kIGhhdmUgdHlwZSBzdHJpbmcnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2xpbmVfaXRlbXMnLCAnYXJyYXknKSB8fFxuICAgICFkYXRhLmxpbmVfaXRlbXMuZXZlcnkoKGl0ZW06IHVua25vd24pID0+IGlzQXBpT3JkZXJJdGVtSW5mbyhpdGVtKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgbGluZV9pdGVtcyBwcm9wZXJ0eSB3aXRoIGF0IGxlYXN0IG9uZSBvcmRlciBpdGVtJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9pZCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlciByZXNwb25zZSBhdHRyaWJ1dGVzIG11c3QgaGF2ZSBhbiBvcmRlcl9pZCBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnb3JkZXJfbnVtYmVyJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIG9yZGVyX251bWJlciBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBMEJBLE1BQU0sc0JBQXNCLFNBQTRDO0FBQ3RFLEtBQUksUUFBUSxRQUFRLE9BQU8sU0FBUyxVQUFVO0FBQzVDLHlCQUFPLFNBQVMsbUNBQW1DLFFBQVcsRUFBRSxNQUFNLENBQUM7QUFDdkUsU0FBTzs7QUFHVCxLQUFJLENBQUNBLDBEQUFrQixNQUFNLGlCQUFpQixTQUFTLEVBQUU7QUFDdkQseUJBQU8sU0FBUyxxREFBcUQsUUFBVyxFQUFFLE1BQU0sQ0FBQztBQUN6RixTQUFPOztB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