@envive-ai/react-hooks 0.2.2 → 0.2.4

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 (342) hide show
  1. package/README.md +35 -0
  2. package/dist/{NewOrgConfig-sLsJcSn8.cjs → NewOrgConfig-B_1A1d9q.cjs} +2 -2
  3. package/dist/{NewOrgConfig-CbqBTHzG.js → NewOrgConfig-xNlcpcF_.js} +2 -2
  4. package/dist/{SystemSettingsContext-BLRfTbCC.js → SystemSettingsContext-CCuS3kWH.js} +2 -2
  5. package/dist/{SystemSettingsContext-BHi2YaQp.cjs → SystemSettingsContext-Dh_35fES.cjs} +2 -2
  6. package/dist/{TrackComponentVisibleEvent-CftWp8QR.js → TrackComponentVisibleEvent-B828giM-.js} +3 -3
  7. package/dist/{TrackComponentVisibleEvent-Dag8vFhb.cjs → TrackComponentVisibleEvent-DsTIH7Yt.cjs} +7 -7
  8. package/dist/{amplitudeContext-BhhYPJSL.d.ts → amplitudeContext-BfRDG5CX.d.ts} +1 -1
  9. package/dist/application/models/graphql/index.d.ts +1 -1
  10. package/dist/application/models/guards/api/index.d.ts +2 -2
  11. package/dist/application/models/guards/utils.d.ts +1 -1
  12. package/dist/application/models/index.cjs +3 -2
  13. package/dist/application/models/index.d.cts +4 -4
  14. package/dist/application/models/index.d.ts +12 -12
  15. package/dist/application/models/index.js +3 -3
  16. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  17. package/dist/application/models/variantInfo/index.cjs +3 -1
  18. package/dist/application/models/variantInfo/index.d.cts +2 -2
  19. package/dist/application/models/variantInfo/index.d.ts +2 -2
  20. package/dist/application/models/variantInfo/index.js +2 -2
  21. package/dist/application/utils/index.cjs +7 -8
  22. package/dist/application/utils/index.d.cts +5 -5
  23. package/dist/application/utils/index.d.ts +15 -15
  24. package/dist/application/utils/index.js +7 -8
  25. package/dist/{atomStore-CZKe3itM.cjs → atomStore-8ppNkJ_n.cjs} +1 -1
  26. package/dist/{atomStore-BuopbV9k.js → atomStore-BLYJ2ZoQ.js} +1 -1
  27. package/dist/atoms/app/index.cjs +14 -9
  28. package/dist/atoms/app/index.d.cts +10 -10
  29. package/dist/atoms/app/index.d.ts +19 -19
  30. package/dist/atoms/app/index.js +9 -4
  31. package/dist/atoms/atomStore/index.cjs +1 -2
  32. package/dist/atoms/atomStore/index.js +1 -2
  33. package/dist/atoms/chat/index.cjs +9 -9
  34. package/dist/atoms/chat/index.d.cts +30 -30
  35. package/dist/atoms/chat/index.d.ts +39 -39
  36. package/dist/atoms/chat/index.js +9 -9
  37. package/dist/atoms/globalSearch/index.cjs +1 -1
  38. package/dist/atoms/globalSearch/index.d.cts +5 -5
  39. package/dist/atoms/globalSearch/index.d.ts +6 -6
  40. package/dist/atoms/globalSearch/index.js +1 -1
  41. package/dist/atoms/org/index.cjs +7 -8
  42. package/dist/atoms/org/index.d.cts +21 -21
  43. package/dist/atoms/org/index.d.ts +30 -30
  44. package/dist/atoms/org/index.js +3 -4
  45. package/dist/atoms/search/index.cjs +16 -16
  46. package/dist/atoms/search/index.d.cts +4 -4
  47. package/dist/atoms/search/index.d.ts +13 -13
  48. package/dist/atoms/search/index.js +16 -16
  49. package/dist/atoms/search/types.cjs +1 -1
  50. package/dist/atoms/search/types.d.ts +1 -1
  51. package/dist/atoms/search/types.js +1 -1
  52. package/dist/atoms/search/utils.cjs +1 -1
  53. package/dist/atoms/search/utils.d.cts +1 -1
  54. package/dist/atoms/search/utils.js +1 -1
  55. package/dist/{cdnContext-ShKWLgKA.cjs → cdnContext-BlRI74F-.cjs} +1 -1
  56. package/dist/{cdnContext-pfrZ6lfu.js → cdnContext-D26C8Y4H.js} +1 -1
  57. package/dist/{chat-KkJYXdfZ.cjs → chat-2NGrmU_Z.cjs} +8 -9
  58. package/dist/{chat-DQq8RR5E.js → chat-Bg3wEfNd.js} +5 -6
  59. package/dist/{chat-CV6MXeID.js → chat-pXCsesuS.js} +2 -3
  60. package/dist/{chat-BubCW1as.cjs → chat-sCX7aTrz.cjs} +1 -8
  61. package/dist/{chatElementDisplayLocation-BwiXrkN7.d.ts → chatElementDisplayLocation-D6oLuQS4.d.ts} +1 -1
  62. package/dist/{chatSearch-OgBQtu3u.cjs → chatSearch-B4dsxGth.cjs} +6 -6
  63. package/dist/{chatSearch-xO4HYEBI.js → chatSearch-Cvc_eBFV.js} +6 -6
  64. package/dist/{chatState-CkMgQSse.js → chatState-2bMtvPgG.js} +2 -2
  65. package/dist/{chatState-CTwPHEJG.cjs → chatState-fP1r34CN.cjs} +4 -4
  66. package/dist/common-4xhjcUbt.cjs +189 -0
  67. package/dist/common-DhKoZ6jN.js +39 -0
  68. package/dist/{components-B4T3Uzth.js → components-BUisjl4v.js} +1 -1
  69. package/dist/{components-Cw9WjA6g.cjs → components-DVaYBroL.cjs} +1 -1
  70. package/dist/config/locators/components/chat/index.cjs +1 -2
  71. package/dist/config/locators/components/chat/index.d.cts +2 -2
  72. package/dist/config/locators/components/chat/index.d.ts +2 -2
  73. package/dist/config/locators/components/chat/index.js +2 -2
  74. package/dist/config/locators/components/common/index.cjs +27 -0
  75. package/dist/config/locators/components/common/index.d.cts +2 -0
  76. package/dist/config/locators/components/common/index.d.ts +2 -0
  77. package/dist/config/locators/components/common/index.js +3 -0
  78. package/dist/config/locators/components/index.cjs +1 -1
  79. package/dist/config/locators/components/index.d.cts +1 -1
  80. package/dist/config/locators/components/index.d.ts +1 -1
  81. package/dist/config/locators/components/index.js +1 -1
  82. package/dist/config/locators/index.cjs +29 -4
  83. package/dist/config/locators/index.d.cts +5 -4
  84. package/dist/config/locators/index.d.ts +5 -4
  85. package/dist/config/locators/index.js +5 -4
  86. package/dist/contexts/amplitudeContext/index.cjs +10 -9
  87. package/dist/contexts/amplitudeContext/index.d.ts +1 -1
  88. package/dist/contexts/amplitudeContext/index.js +7 -6
  89. package/dist/contexts/cdnContext/index.cjs +1 -1
  90. package/dist/contexts/cdnContext/index.js +1 -1
  91. package/dist/contexts/chatContext/index.cjs +32 -37
  92. package/dist/contexts/chatContext/index.d.cts +2 -2
  93. package/dist/contexts/chatContext/index.d.ts +2 -2
  94. package/dist/contexts/chatContext/index.js +21 -26
  95. package/dist/contexts/enviveConfigContext/index.d.cts +1 -1
  96. package/dist/contexts/enviveConfigContext/index.d.ts +3 -3
  97. package/dist/contexts/enviveCssContext/index.cjs +8 -8
  98. package/dist/contexts/enviveCssContext/index.js +8 -8
  99. package/dist/contexts/featureFlagContext/index.cjs +2 -2
  100. package/dist/contexts/featureFlagContext/index.d.cts +1 -1
  101. package/dist/contexts/featureFlagContext/index.d.ts +3 -3
  102. package/dist/contexts/featureFlagContext/index.js +2 -2
  103. package/dist/contexts/featureFlagServiceContext/index.cjs +3 -2
  104. package/dist/contexts/featureFlagServiceContext/index.d.cts +3 -3
  105. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -5
  106. package/dist/contexts/featureFlagServiceContext/index.js +3 -3
  107. package/dist/contexts/graphqlContext/index.cjs +3 -3
  108. package/dist/contexts/graphqlContext/index.d.cts +4 -4
  109. package/dist/contexts/graphqlContext/index.d.ts +13 -13
  110. package/dist/contexts/graphqlContext/index.js +3 -3
  111. package/dist/contexts/newOrgConfigContext/index.cjs +7 -7
  112. package/dist/contexts/newOrgConfigContext/index.d.cts +5 -5
  113. package/dist/contexts/newOrgConfigContext/index.d.ts +14 -14
  114. package/dist/contexts/newOrgConfigContext/index.js +7 -7
  115. package/dist/contexts/searchContext/index.cjs +13 -10
  116. package/dist/contexts/searchContext/index.d.ts +2 -2
  117. package/dist/contexts/searchContext/index.js +13 -10
  118. package/dist/contexts/sessionStorageContext/index.cjs +1 -1
  119. package/dist/contexts/sessionStorageContext/index.js +1 -1
  120. package/dist/contexts/shopifyUrlContext/index.cjs +1 -1
  121. package/dist/contexts/shopifyUrlContext/index.d.cts +1 -1
  122. package/dist/contexts/shopifyUrlContext/index.d.ts +3 -3
  123. package/dist/contexts/shopifyUrlContext/index.js +1 -1
  124. package/dist/contexts/systemSettingsContext/index.cjs +1 -1
  125. package/dist/contexts/systemSettingsContext/index.d.cts +7 -7
  126. package/dist/contexts/systemSettingsContext/index.d.ts +13 -13
  127. package/dist/contexts/systemSettingsContext/index.js +1 -1
  128. package/dist/contexts/types.d.cts +1 -1
  129. package/dist/contexts/types.d.ts +3 -3
  130. package/dist/contexts/userIdentityContext/index.cjs +9 -14
  131. package/dist/contexts/userIdentityContext/index.d.ts +1 -1
  132. package/dist/contexts/userIdentityContext/index.js +7 -12
  133. package/dist/{domObserver-B19-69gW.js → domObserver-DKcas6tl.js} +1 -1
  134. package/dist/{domObserver-CwieVNgj.cjs → domObserver-Do6RAJdf.cjs} +1 -1
  135. package/dist/featureFlagServiceContext-C2Yj-Uyh.d.ts +23 -0
  136. package/dist/featureFlagServiceContext-CiKWV306.d.cts +23 -0
  137. package/dist/featureFlagServiceContext-DFb-uLHN.cjs +62 -0
  138. package/dist/featureFlagServiceContext-Dd_Hbq6e.js +42 -0
  139. package/dist/featureGates-BdvOVv8N.cjs +32 -0
  140. package/dist/featureGates-DhoJq4io.js +26 -0
  141. package/dist/frontendConfig-CbyjUXZW.d.ts +856 -0
  142. package/dist/frontendConfig-tVg0hsWZ.d.cts +856 -0
  143. package/dist/{globalSearch-B8jHLScz.js → globalSearch-B_v9qfCT.js} +1 -1
  144. package/dist/{globalSearch-JJI1Fijh.cjs → globalSearch-OiF96VLG.cjs} +1 -1
  145. package/dist/graphqlConfig-DZHeFKDY.cjs +73 -0
  146. package/dist/graphqlConfig-Xk--JbPl.js +24 -0
  147. package/dist/{graphqlContext-EhYZM1v_.d.ts → graphqlContext-BotK7KCg.d.ts} +5 -5
  148. package/dist/{graphqlContext-ChRuFVxO.d.cts → graphqlContext-CMav2igl.d.cts} +4 -4
  149. package/dist/{graphqlContext-8kw4aLRc.js → graphqlContext-CSVwhCnP.js} +1 -1
  150. package/dist/{graphqlContext-Fwc6Upvh.cjs → graphqlContext-aaOOb79d.cjs} +1 -1
  151. package/dist/hooks/AmplitudeOperations/index.cjs +9 -8
  152. package/dist/hooks/AmplitudeOperations/index.d.ts +1 -1
  153. package/dist/hooks/AmplitudeOperations/index.js +9 -8
  154. package/dist/hooks/AppDetails/index.cjs +12 -7
  155. package/dist/hooks/AppDetails/index.d.cts +3 -3
  156. package/dist/hooks/AppDetails/index.d.ts +11 -11
  157. package/dist/hooks/AppDetails/index.js +12 -7
  158. package/dist/hooks/CdnOperations/index.cjs +1 -1
  159. package/dist/hooks/CdnOperations/index.js +1 -1
  160. package/dist/hooks/ChatToggle/index.cjs +13 -13
  161. package/dist/hooks/ChatToggle/index.d.ts +1 -1
  162. package/dist/hooks/ChatToggle/index.js +9 -9
  163. package/dist/hooks/ChatToggleAnalytics/index.cjs +11 -10
  164. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  165. package/dist/hooks/ChatToggleAnalytics/index.js +11 -10
  166. package/dist/hooks/Debounce/index.cjs +1 -1
  167. package/dist/hooks/Debounce/index.js +1 -1
  168. package/dist/hooks/ElementObserver/index.cjs +1 -1
  169. package/dist/hooks/ElementObserver/index.d.ts +1 -1
  170. package/dist/hooks/ElementObserver/index.js +1 -1
  171. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  172. package/dist/hooks/GraphQLConfig/index.cjs +4 -4
  173. package/dist/hooks/GraphQLConfig/index.d.cts +4 -4
  174. package/dist/hooks/GraphQLConfig/index.d.ts +12 -12
  175. package/dist/hooks/GraphQLConfig/index.js +4 -4
  176. package/dist/hooks/IdentifyUser/index.cjs +9 -14
  177. package/dist/hooks/IdentifyUser/index.js +8 -13
  178. package/dist/hooks/ImageResolver/index.cjs +2 -2
  179. package/dist/hooks/ImageResolver/index.js +2 -2
  180. package/dist/hooks/Intersection/index.cjs +1 -1
  181. package/dist/hooks/Intersection/index.js +1 -1
  182. package/dist/hooks/MessageFilter/index.cjs +2 -2
  183. package/dist/hooks/MessageFilter/index.d.cts +3 -3
  184. package/dist/hooks/MessageFilter/index.d.ts +11 -11
  185. package/dist/hooks/MessageFilter/index.js +2 -2
  186. package/dist/hooks/NewOrgConfig/index.cjs +8 -8
  187. package/dist/hooks/NewOrgConfig/index.d.cts +5 -5
  188. package/dist/hooks/NewOrgConfig/index.d.ts +14 -14
  189. package/dist/hooks/NewOrgConfig/index.js +8 -8
  190. package/dist/hooks/Search/index.cjs +35 -36
  191. package/dist/hooks/Search/index.d.cts +6 -6
  192. package/dist/hooks/Search/index.d.ts +15 -15
  193. package/dist/hooks/Search/index.js +26 -27
  194. package/dist/hooks/SearchOperations/index.cjs +14 -11
  195. package/dist/hooks/SearchOperations/index.d.ts +2 -2
  196. package/dist/hooks/SearchOperations/index.js +14 -11
  197. package/dist/hooks/SessionStorageOperations/index.cjs +1 -1
  198. package/dist/hooks/SessionStorageOperations/index.js +1 -1
  199. package/dist/hooks/ShopifyUrlOperations/index.cjs +1 -1
  200. package/dist/hooks/ShopifyUrlOperations/index.d.cts +3 -3
  201. package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -5
  202. package/dist/hooks/ShopifyUrlOperations/index.js +1 -1
  203. package/dist/hooks/SystemSettingsContext/index.cjs +2 -2
  204. package/dist/hooks/SystemSettingsContext/index.d.cts +5 -5
  205. package/dist/hooks/SystemSettingsContext/index.d.ts +13 -13
  206. package/dist/hooks/SystemSettingsContext/index.js +2 -2
  207. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +9 -8
  208. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -2
  209. package/dist/hooks/TrackComponentVisibleEvent/index.js +9 -8
  210. package/dist/hooks/UpdateAnalyticsProps/index.cjs +12 -11
  211. package/dist/hooks/UpdateAnalyticsProps/index.js +8 -7
  212. package/dist/hooks/utils.cjs +1 -1
  213. package/dist/hooks/utils.d.cts +4 -4
  214. package/dist/hooks/utils.d.ts +12 -12
  215. package/dist/hooks/utils.js +1 -1
  216. package/dist/{index-BN-3ctk_.d.ts → index-7VOYQNo5.d.ts} +2 -2
  217. package/dist/index-9NE86em3.d.cts +35 -0
  218. package/dist/index-C1nwLU6Q.d.ts +35 -0
  219. package/dist/{index-C_MIfxF0.d.cts → index-CG3P8xE1.d.cts} +3 -3
  220. package/dist/{index-hdbCEjYy.d.cts → index-Cyq5HiC0.d.cts} +10 -5
  221. package/dist/{index-B5qslMv7.d.cts → index-D9SzePCE.d.cts} +31 -31
  222. package/dist/{index-C4_vohah.d.ts → index-DDZmV951.d.ts} +34 -34
  223. package/dist/{index-CVa3DeXJ.d.cts → index-Da1s8h5C.d.cts} +1 -1
  224. package/dist/{index-C6KdON7d.d.ts → index-Dy22w7kg.d.ts} +2 -3
  225. package/dist/{index-C12-NmS7.d.cts → index-DzbkQtaK.d.cts} +2 -3
  226. package/dist/{index-DOii3C6b.d.ts → index-DzzKdrcZ.d.ts} +1 -1
  227. package/dist/{index-DsiilEj-.d.ts → index-L7SEpDLz.d.ts} +1 -1
  228. package/dist/{index-CK_J3QMY.d.ts → index-YrhxAGtH.d.ts} +6 -6
  229. package/dist/{index-BoYC9XLW.d.ts → index-exSzn3SP.d.ts} +10 -5
  230. package/dist/{index-Dr_c2DDq.d.ts → index-hebsV7fc.d.ts} +1 -1
  231. package/dist/interceptors/index.cjs +2 -2
  232. package/dist/interceptors/index.d.cts +4 -4
  233. package/dist/interceptors/index.d.ts +12 -12
  234. package/dist/interceptors/index.js +2 -2
  235. package/dist/interceptors/types.cjs +1 -1
  236. package/dist/interceptors/types.d.cts +4 -4
  237. package/dist/interceptors/types.d.ts +12 -12
  238. package/dist/interceptors/types.js +1 -1
  239. package/dist/{newOrgConfigAtom-DxILMn2I.cjs → newOrgConfigAtom-B9FW3fDc.cjs} +1 -1
  240. package/dist/{newOrgConfigAtom-sqve6LZU.js → newOrgConfigAtom-CMeY5c6t.js} +1 -1
  241. package/dist/{newOrgConfigContext-BzIpdpd6.js → newOrgConfigContext-1uwWWCPa.js} +4 -4
  242. package/dist/{newOrgConfigContext-wTQVvOaX.cjs → newOrgConfigContext-B0v1q3dk.cjs} +4 -4
  243. package/dist/{newOrgConfigContext-CiwteVzM.d.cts → newOrgConfigContext-C8wBmK3q.d.cts} +2 -2
  244. package/dist/{newOrgConfigContext-D9PpVqyW.d.ts → newOrgConfigContext-D180PO0t.d.ts} +2 -2
  245. package/dist/{nodeSelector-D5gjDWZ3.d.ts → nodeSelector-DQicm08Y.d.ts} +1 -1
  246. package/dist/{org-DlAesvQ_.cjs → org-DU3Wck0R.cjs} +1 -1
  247. package/dist/{org-vi0njpBh.js → org-DptftvB6.js} +1 -1
  248. package/dist/{search-0-pfy0cc.js → search-BtYKpiNB.js} +5 -5
  249. package/dist/{search-BLShhjvR.d.ts → search-DYVQuYti.d.ts} +2 -2
  250. package/dist/{search-BQn1pW2M.cjs → search-Du6HZpO6.cjs} +5 -5
  251. package/dist/{search-filter-types-BlmWOnlA.d.ts → search-filter-types-B5xcaEit.d.ts} +1 -1
  252. package/dist/{search-filter-types-BBIjvwJV.d.cts → search-filter-types-DZPTzUK9.d.cts} +1 -1
  253. package/dist/{searchContext-DmXo2rpU.cjs → searchContext-BK43ArCs.cjs} +6 -6
  254. package/dist/{searchContext-5qTU8CbH.js → searchContext-JjZZhDCe.js} +4 -4
  255. package/dist/{searchServiceAdapter-WyCU55NV.js → searchServiceAdapter-BSPZOg1r.js} +1 -1
  256. package/dist/{searchServiceAdapter-DEv1tTn0.cjs → searchServiceAdapter-DrjFCiw8.cjs} +1 -1
  257. package/dist/{sessionStorageContext-DnuKi3Gk.js → sessionStorageContext-BQY9r8zz.js} +1 -1
  258. package/dist/{sessionStorageContext-B-UFXyJR.cjs → sessionStorageContext-R2yUAkd9.cjs} +1 -1
  259. package/dist/{shopifyUrlContext-jLW63VLY.js → shopifyUrlContext-Bon8_SUJ.js} +1 -1
  260. package/dist/{shopifyUrlContext-Lm-Xcut2.cjs → shopifyUrlContext-DUdw1xUH.cjs} +1 -1
  261. package/dist/{spiffyWidgets-GILaqHv6.d.ts → spiffyWidgets-DZqG5plz.d.ts} +1 -1
  262. package/dist/{systemSettingsContext--LcXOVJz.js → systemSettingsContext-BjbhIz6y.js} +1 -1
  263. package/dist/{systemSettingsContext-CafaP6Zh.cjs → systemSettingsContext-Dv9EmjmZ.cjs} +1 -1
  264. package/dist/{test-types-EzMFw_U3.d.ts → test-types-Dl5puRHC.d.ts} +1 -1
  265. package/dist/types/index.d.cts +1 -1
  266. package/dist/types/index.d.ts +2 -2
  267. package/dist/types-CKMMb_gX.d.cts +1 -1
  268. package/dist/{types-BN2z0HcL.d.ts → types-Csgpt7EV.d.ts} +1 -1
  269. package/dist/{types-CS0Hrzja.js → types-DIk0FLwd.js} +1 -1
  270. package/dist/{types-CxObxLKs.cjs → types-DNLkuGWZ.cjs} +1 -1
  271. package/dist/{types-D4aa7_7x.d.cts → types-DSW9XODe.d.cts} +1 -1
  272. package/dist/{types-6siNDmGv.d.ts → types-oSg-AkO5.d.ts} +2 -2
  273. package/dist/types.d.cts +1 -1
  274. package/dist/types.d.ts +4 -4
  275. package/dist/{useAmplitudeOperations-aGOqxc4V.cjs → useAmplitudeOperations-C9o_wDU6.cjs} +3 -3
  276. package/dist/{useAmplitudeOperations-wQnkMaDm.js → useAmplitudeOperations-COq3L1no.js} +2 -2
  277. package/dist/{useAppDetails-9WXEc3mg.cjs → useAppDetails-C4GTLEIR.cjs} +6 -6
  278. package/dist/{useAppDetails-mNC2PBqH.js → useAppDetails-CEksA88Q.js} +3 -3
  279. package/dist/{useDebounce-CxPj9WmE.js → useDebounce--rPGMuE7.js} +1 -1
  280. package/dist/{useDebounce-BaIp-A1W.cjs → useDebounce-DECHWSTn.cjs} +1 -1
  281. package/dist/{useGraphQLConfig-CTsRsKd2.js → useGraphQLConfig-DQoMmpNM.js} +2 -2
  282. package/dist/{useGraphQLConfig-D7naV2RD.cjs → useGraphQLConfig-DzH1nVBh.cjs} +2 -2
  283. package/dist/{useIntersection-B4J9UhaG.js → useIntersection-UEO0Cezc.js} +1 -1
  284. package/dist/{useIntersection-DKWc5MY6.cjs → useIntersection-rV0Q8mBH.cjs} +1 -1
  285. package/dist/{useMessageInterceptor-C9p9No1n.cjs → useMessageInterceptor-CstX10ih.cjs} +1 -1
  286. package/dist/{useMessageInterceptor-tntd2rvB.js → useMessageInterceptor-D5oAekXn.js} +1 -1
  287. package/dist/{userIdentityContext-wYRpgkaJ.d.ts → userIdentityContext-8kfKQRFx.d.ts} +1 -1
  288. package/dist/{utils-FU_r-pTj.d.ts → utils-B8rATLoc.d.ts} +4 -4
  289. package/dist/{utils-B1xLx9S8.d.ts → utils-BLe5oreh.d.ts} +1 -1
  290. package/dist/{utils-_97oEqyL.js → utils-Bcz5kAgP.js} +1 -1
  291. package/dist/{utils-C8vYQhLV.cjs → utils-CMqFfqZx.cjs} +1 -1
  292. package/dist/{utils-2SWrJ12w.cjs → utils-CqVRbvfN.cjs} +1 -1
  293. package/dist/{utils-CqBxIpEV.js → utils-DQhbbAnt.js} +1 -1
  294. package/dist/{utils-BSYichA7.d.cts → utils-EDgzCG3Q.d.cts} +3 -3
  295. package/dist/utils-V1YTUQng.js +1385 -0
  296. package/dist/utils-VI19AC8S.cjs +1591 -0
  297. package/dist/variantInfo-BRmDpamJ.cjs +17 -0
  298. package/dist/variantInfo-BwBBEWSA.js +11 -0
  299. package/package.json +3 -2
  300. package/src/application/models/featureGates.ts +18 -20
  301. package/src/application/models/variantInfo/variantInfo.ts +9 -3
  302. package/src/atoms/app/index.ts +3 -2
  303. package/src/atoms/app/variant.ts +27 -89
  304. package/src/config/locators/components/chat/index.ts +0 -1
  305. package/src/config/locators/components/chat/preview.ts +0 -1
  306. package/src/config/locators/components/common/index.ts +4 -0
  307. package/src/config/locators/index.ts +1 -0
  308. package/src/contexts/amplitudeContext/amplitudeContext.tsx +12 -45
  309. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +1 -1
  310. package/dist/amplitudeContext-CwPtBPhg.js +0 -287
  311. package/dist/amplitudeContext-DTC6maR0.cjs +0 -309
  312. package/dist/app-CoQ1nC-j.js +0 -132
  313. package/dist/app-DN72spgQ.cjs +0 -178
  314. package/dist/commerce-api-BVy49Qk8.js +0 -311
  315. package/dist/commerce-api-Pclc9ZBQ.cjs +0 -318
  316. package/dist/featureFlagServiceContext-CUBoBV2i.cjs +0 -56
  317. package/dist/featureFlagServiceContext-Cpw8omUr.d.ts +0 -23
  318. package/dist/featureFlagServiceContext-Cvn6fcdB.d.cts +0 -23
  319. package/dist/featureFlagServiceContext-Dg8okVk1.js +0 -42
  320. package/dist/featureGates-Blx10fwB.js +0 -27
  321. package/dist/featureGates-DcZNrUma.cjs +0 -33
  322. package/dist/frontendConfig-DnMZfvcA.d.cts +0 -857
  323. package/dist/frontendConfig-Dqxbqo8G.d.ts +0 -857
  324. package/dist/graphqlConfig-BWqLgZ6v.cjs +0 -39
  325. package/dist/graphqlConfig-Dn-hO_SQ.js +0 -14
  326. package/dist/orgAnalyticsConfig-BC4_sEmn.js +0 -14
  327. package/dist/orgAnalyticsConfig-DsGbyFhO.cjs +0 -39
  328. package/dist/types-DQoXDiso.js +0 -1
  329. package/dist/types-o3zWarRp.cjs +0 -0
  330. package/dist/unsupportedProductExceptions-CKiri_vO.cjs +0 -32
  331. package/dist/unsupportedProductExceptions-ClxlJ6cU.js +0 -20
  332. package/dist/userIdentityContext-BWzqWXPI.cjs +0 -125
  333. package/dist/userIdentityContext-BoNYqrTf.js +0 -109
  334. package/dist/utils-BgMcvG6l.js +0 -606
  335. package/dist/utils-D_aOvxMg.cjs +0 -715
  336. package/dist/variantInfo-B7IwRpCg.cjs +0 -0
  337. package/dist/variantInfo-BtOYUGWa.js +0 -1
  338. /package/dist/{AmplitudeOperations-CNyxbBY6.cjs → AmplitudeOperations-CEwp7tPJ.cjs} +0 -0
  339. /package/dist/{AmplitudeOperations-Oa2efWtF.js → AmplitudeOperations-uF2zIi_1.js} +0 -0
  340. /package/dist/{index-BPxqQmpF.d.ts → index-CalyvQj_.d.ts} +0 -0
  341. /package/dist/{atomStore-DKlaDbMx.js → types-DtTnp0o0.js} +0 -0
  342. /package/dist/{atomStore-CdFkEC8s.cjs → types-a8gm_IaQ.cjs} +0 -0
@@ -1,22 +1,23 @@
1
1
  require('../../types-BwNrLPSZ.cjs');
2
2
  require('../../events-B_fJZf9E.cjs');
3
3
  require('../../models-B1P-dSCW.cjs');
4
- require('../../featureGates-DcZNrUma.cjs');
4
+ require('../../featureGates-BdvOVv8N.cjs');
5
5
  require('../../urlsParser-BV5yF8sa.cjs');
6
6
  require('../../graphql-B9HhDXYt.cjs');
7
7
  require('../../utils-Cavu4XiM.cjs');
8
8
  require('../../api-Bc3_julZ.cjs');
9
9
  require('../../logger-Cp7J4YJT.cjs');
10
10
  require('../../utilityTypes-xb8SjKSV.cjs');
11
- require('../../variantInfo-B7IwRpCg.cjs');
11
+ require('../../variantInfo-BRmDpamJ.cjs');
12
12
  require('../../localStorageContext-cnMYDllE.cjs');
13
13
  require('../../enviveConfig-D8vcVPWD.cjs');
14
- require('../../orgAnalyticsConfig-DsGbyFhO.cjs');
15
- require('../../atomStore-CZKe3itM.cjs');
16
- require('../../app-DN72spgQ.cjs');
14
+ require('../../graphqlConfig-DZHeFKDY.cjs');
15
+ const require_utils$1 = require('../../utils-VI19AC8S.cjs');
16
+ require('../../atomStore-8ppNkJ_n.cjs');
17
17
  require('../../enviveConfigContext-C8cCcdKU.cjs');
18
- const require_amplitudeContext = require('../../amplitudeContext-DTC6maR0.cjs');
18
+ require('../../featureFlagServiceContext-DFb-uLHN.cjs');
19
+ require('../../domObserver-Do6RAJdf.cjs');
19
20
 
20
- exports.AmplitudeProvider = require_amplitudeContext.AmplitudeProvider;
21
- exports.SpiffyMetricsEventName = require_amplitudeContext.SpiffyMetricsEventName;
22
- exports.useAmplitude = require_amplitudeContext.useAmplitude;
21
+ exports.AmplitudeProvider = require_utils$1.AmplitudeProvider;
22
+ exports.SpiffyMetricsEventName = require_utils$1.SpiffyMetricsEventName;
23
+ exports.useAmplitude = require_utils$1.useAmplitude;
@@ -1,2 +1,2 @@
1
- import { AmplitudeProvider, SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-BhhYPJSL.js";
1
+ import { AmplitudeProvider, SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-BfRDG5CX.js";
2
2
  export { AmplitudeProvider, SpiffyMetricsEventName, useAmplitude };
@@ -1,20 +1,21 @@
1
1
  import "../../types-D3uOF0Oy.js";
2
2
  import "../../events-BHJJjPDN.js";
3
3
  import "../../models-CgvSM2fW.js";
4
- import "../../featureGates-Blx10fwB.js";
4
+ import "../../featureGates-DhoJq4io.js";
5
5
  import "../../urlsParser-DUgV_Qy9.js";
6
6
  import "../../graphql-W7GMIHUu.js";
7
7
  import "../../utils-ARmpTh1O.js";
8
8
  import "../../api-D9gmGNAV.js";
9
9
  import "../../logger-oAgZx2-m.js";
10
10
  import "../../utilityTypes-DynzxjK3.js";
11
- import "../../variantInfo-BtOYUGWa.js";
11
+ import "../../variantInfo-BwBBEWSA.js";
12
12
  import "../../localStorageContext-Dwgto93_.js";
13
13
  import "../../enviveConfig-BSfyz_pm.js";
14
- import "../../orgAnalyticsConfig-BC4_sEmn.js";
15
- import "../../atomStore-BuopbV9k.js";
16
- import "../../app-CoQ1nC-j.js";
14
+ import "../../graphqlConfig-Xk--JbPl.js";
15
+ import { AmplitudeProvider, SpiffyMetricsEventName, useAmplitude } from "../../utils-V1YTUQng.js";
16
+ import "../../atomStore-BLYJ2ZoQ.js";
17
17
  import "../../enviveConfigContext-CJqpRSKu.js";
18
- import { AmplitudeProvider, SpiffyMetricsEventName, useAmplitude } from "../../amplitudeContext-CwPtBPhg.js";
18
+ import "../../featureFlagServiceContext-Dd_Hbq6e.js";
19
+ import "../../domObserver-DKcas6tl.js";
19
20
 
20
21
  export { AmplitudeProvider, SpiffyMetricsEventName, useAmplitude };
@@ -1,7 +1,7 @@
1
1
  require('../../logger-Cp7J4YJT.cjs');
2
2
  require('../../localStorageContext-cnMYDllE.cjs');
3
3
  require('../../enviveConfig-D8vcVPWD.cjs');
4
- const require_cdnContext = require('../../cdnContext-ShKWLgKA.cjs');
4
+ const require_cdnContext = require('../../cdnContext-BlRI74F-.cjs');
5
5
 
6
6
  exports.CdnProvider = require_cdnContext.CdnProvider;
7
7
  exports.useCdn = require_cdnContext.useCdn;
@@ -1,6 +1,6 @@
1
1
  import "../../logger-oAgZx2-m.js";
2
2
  import "../../localStorageContext-Dwgto93_.js";
3
3
  import "../../enviveConfig-BSfyz_pm.js";
4
- import { CdnProvider, useCdn } from "../../cdnContext-pfrZ6lfu.js";
4
+ import { CdnProvider, useCdn } from "../../cdnContext-D26C8Y4H.js";
5
5
 
6
6
  export { CdnProvider, useCdn };
@@ -1,46 +1,41 @@
1
1
  const require_chunk = require('../../chunk-CUT6urMc.cjs');
2
2
  require('../../types-BwNrLPSZ.cjs');
3
3
  require('../../events-B_fJZf9E.cjs');
4
- const require_useMessageInterceptor = require('../../useMessageInterceptor-C9p9No1n.cjs');
5
- const require_utils = require('../../utils-C8vYQhLV.cjs');
4
+ const require_utils = require('../../utils-CMqFfqZx.cjs');
5
+ const require_useMessageInterceptor = require('../../useMessageInterceptor-CstX10ih.cjs');
6
6
  const require_models = require('../../models-B1P-dSCW.cjs');
7
- require('../../featureGates-DcZNrUma.cjs');
7
+ require('../../featureGates-BdvOVv8N.cjs');
8
8
  require('../../urlsParser-BV5yF8sa.cjs');
9
9
  require('../../graphql-B9HhDXYt.cjs');
10
10
  require('../../utils-Cavu4XiM.cjs');
11
11
  require('../../api-Bc3_julZ.cjs');
12
12
  const require_logger = require('../../logger-Cp7J4YJT.cjs');
13
13
  require('../../utilityTypes-xb8SjKSV.cjs');
14
- require('../../variantInfo-B7IwRpCg.cjs');
14
+ require('../../variantInfo-BRmDpamJ.cjs');
15
15
  require('../../localStorageContext-cnMYDllE.cjs');
16
16
  require('../../enviveConfig-D8vcVPWD.cjs');
17
- require('../../orgAnalyticsConfig-DsGbyFhO.cjs');
18
- const require_atomStore = require('../../atomStore-CZKe3itM.cjs');
19
- const require_app = require('../../app-DN72spgQ.cjs');
17
+ require('../../graphqlConfig-DZHeFKDY.cjs');
18
+ const require_utils$2 = require('../../utils-VI19AC8S.cjs');
19
+ const require_atomStore = require('../../atomStore-8ppNkJ_n.cjs');
20
20
  require('../../enviveConfigContext-C8cCcdKU.cjs');
21
- const require_amplitudeContext = require('../../amplitudeContext-DTC6maR0.cjs');
22
- const require_utils$2 = require('../../utils-D_aOvxMg.cjs');
23
- require('../../domObserver-CwieVNgj.cjs');
24
- require('../../atomStore-CdFkEC8s.cjs');
25
- const require_chatState = require('../../chatState-CTwPHEJG.cjs');
26
- require('../../graphqlConfig-BWqLgZ6v.cjs');
27
- const require_chat = require('../../chat-KkJYXdfZ.cjs');
28
- require('../../org-DlAesvQ_.cjs');
29
- require('../../newOrgConfigAtom-DxILMn2I.cjs');
30
- require('../../utils-2SWrJ12w.cjs');
31
- const require_chatSearch = require('../../chatSearch-OgBQtu3u.cjs');
32
- require('../../types-CxObxLKs.cjs');
33
- const require_unsupportedProductExceptions = require('../../unsupportedProductExceptions-CKiri_vO.cjs');
34
- const require_commerce_api = require('../../commerce-api-Pclc9ZBQ.cjs');
35
- const require_useAmplitudeOperations = require('../../useAmplitudeOperations-aGOqxc4V.cjs');
36
- require('../../systemSettingsContext-CafaP6Zh.cjs');
37
- const require_SystemSettingsContext = require('../../SystemSettingsContext-BHi2YaQp.cjs');
21
+ require('../../featureFlagServiceContext-DFb-uLHN.cjs');
22
+ require('../../domObserver-Do6RAJdf.cjs');
23
+ const require_chatState = require('../../chatState-fP1r34CN.cjs');
24
+ const require_chat = require('../../chat-2NGrmU_Z.cjs');
25
+ require('../../org-DU3Wck0R.cjs');
26
+ require('../../newOrgConfigAtom-B9FW3fDc.cjs');
27
+ require('../../utils-CqVRbvfN.cjs');
28
+ const require_chatSearch = require('../../chatSearch-B4dsxGth.cjs');
29
+ require('../../types-DNLkuGWZ.cjs');
30
+ const require_useAmplitudeOperations = require('../../useAmplitudeOperations-C9o_wDU6.cjs');
31
+ require('../../systemSettingsContext-Dv9EmjmZ.cjs');
32
+ const require_SystemSettingsContext = require('../../SystemSettingsContext-Dh_35fES.cjs');
38
33
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
39
34
  __spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
40
- let react = require("react");
41
- react = require_chunk.__toESM(react);
42
35
  let uuid = require("uuid");
43
36
  uuid = require_chunk.__toESM(uuid);
37
+ let react = require("react");
38
+ react = require_chunk.__toESM(react);
44
39
  let jotai = require("jotai");
45
40
  jotai = require_chunk.__toESM(jotai);
46
41
  let react_jsx_runtime = require("react/jsx-runtime");
@@ -84,7 +79,7 @@ const recordAssistantResponse = (startTimeMs, payload, track) => {
84
79
  eventProps.search_products_returned = searchProducts.length;
85
80
  eventProps.search_products_sort_type = searchProductsSort;
86
81
  }
87
- track(require_amplitudeContext.SpiffyMetricsEventName.ChatAssistantResponse, { eventProps });
82
+ track(require_utils$2.SpiffyMetricsEventName.ChatAssistantResponse, { eventProps });
88
83
  };
89
84
  const ChatContext = (0, react.createContext)(void 0);
90
85
  const updateMessageState = (message, lastMessage, setMessages) => {
@@ -154,11 +149,11 @@ const ChatContextProvider = ({ children }) => {
154
149
  const userQueueEventCount = (0, jotai.useAtomValue)(require_chat.userQueueEventCountAtom);
155
150
  const markUserEventsProcessed = (0, jotai.useSetAtom)(require_chat.processUserEventAtom);
156
151
  const clearUserEventQueue = (0, jotai.useSetAtom)(require_chat.clearUserEventAtom);
157
- const userId = (0, jotai.useAtomValue)(require_app.userIdAtom);
158
- const chatId = (0, jotai.useAtomValue)(require_app.chatIdAtom);
159
- const supportedEvent = (0, jotai.useAtomValue)(require_app.supportedEventAtom);
152
+ const userId = (0, jotai.useAtomValue)(require_utils$2.userIdAtom);
153
+ const chatId = (0, jotai.useAtomValue)(require_utils$2.chatIdAtom);
154
+ const supportedEvent = (0, jotai.useAtomValue)(require_utils$2.supportedEventAtom);
160
155
  const orgId = "mock-org-id";
161
- const variantInfo = (0, jotai.useAtomValue)(require_app.variantInfoAtom);
156
+ const variantInfo = (0, jotai.useAtomValue)(require_utils$2.variantInfoAtom);
162
157
  const settingsContext = require_SystemSettingsContext.useSystemSettingsContext();
163
158
  const messageInterceptor = require_useMessageInterceptor.useMessageInterceptor();
164
159
  const handleSearchResults = (0, jotai.useSetAtom)(require_chatSearch.handleSearchResultsAtom);
@@ -166,7 +161,7 @@ const ChatContextProvider = ({ children }) => {
166
161
  const { track } = require_useAmplitudeOperations.useAmplitudeTracking();
167
162
  const getStreamingResponses = (0, react.useCallback)(async (payload) => {
168
163
  logPerfMetric(require_chat.PerfMetricsEvents.FirstResponseStarted);
169
- const stream = require_commerce_api.commerce_api_default.getNextResponseStreaming(payload);
164
+ const stream = require_utils$2.commerce_api_default.getNextResponseStreaming(payload);
170
165
  try {
171
166
  setRequestFailure(false);
172
167
  const { hasSearchResults } = await processStreamingResponse(stream, messageInterceptor, handleSearchResults, setMessages, setSearchIsLoading, chatId);
@@ -194,7 +189,7 @@ const ChatContextProvider = ({ children }) => {
194
189
  userEvents: [],
195
190
  generationParams: settingsContext.generationParams
196
191
  });
197
- const response = await require_commerce_api.commerce_api_default.getNextSuggestions(payloadWithoutAppLoaded);
192
+ const response = await require_utils$2.commerce_api_default.getNextSuggestions(payloadWithoutAppLoaded);
198
193
  setSuggestions(response.sort((a, b) => a.content.length - b.content.length));
199
194
  setSuggestionsLoading(false);
200
195
  logPerfMetric(require_chat.PerfMetricsEvents.FirstSuggestionsCompleted);
@@ -269,13 +264,13 @@ const ChatContextProvider = ({ children }) => {
269
264
  const hydrateChat = async () => {
270
265
  try {
271
266
  require_logger.logger_default.logDebug(`[spiffy-ai] initializeWidget is_currently_streaming=${responseStreaming} is_initialized=${widgetInitialized}`);
272
- const { messages: existingMessages, userEvents: userEvents$1 } = await require_commerce_api.commerce_api_default.getResponses(orgId, chatId, userId);
267
+ const { messages: existingMessages, userEvents: userEvents$1 } = await require_utils$2.commerce_api_default.getResponses(orgId, chatId, userId);
273
268
  setMessages([...existingMessages]);
274
269
  setUserEvents([...userEvents$1]);
275
270
  getResponses();
276
271
  } catch (error) {
277
272
  require_logger.logger_default.logInfo(`Init chat [exception] chat_id=${chatId} error=${error}`, error);
278
- if (error instanceof require_unsupportedProductExceptions.SessionRestartRequired) {
273
+ if (error instanceof require_utils$2.SessionRestartRequired) {
279
274
  const appLoadedEvent = require_utils.createAppLoadedEvent();
280
275
  const visitEvent = require_utils.createVisitUserEvent({ variantInfo });
281
276
  setMessages([]);
@@ -297,7 +292,7 @@ const ChatContextProvider = ({ children }) => {
297
292
  const onFocus = (0, react.useCallback)(async () => {
298
293
  try {
299
294
  if (!responseStreaming && !suggestionsLoading && orgId) {
300
- const { messages: existingMessages } = await require_commerce_api.commerce_api_default.getResponses(orgId, chatId, userId);
295
+ const { messages: existingMessages } = await require_utils$2.commerce_api_default.getResponses(orgId, chatId, userId);
301
296
  if (existingMessages.length > messages.length) setMessages([...existingMessages]);
302
297
  }
303
298
  } catch (error) {
@@ -328,4 +323,4 @@ const ChatContextProvider = ({ children }) => {
328
323
  //#endregion
329
324
  exports.ChatContext = ChatContext;
330
325
  exports.ChatContextProvider = ChatContextProvider;
331
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiZ2V0QXRvbVN0b3JlIiwiY2hhdEF0b20iLCJjaGF0U2VhcmNoU3RhdGVBdG9tIiwiY2hhdFNlYXJjaFByb2R1Y3RzIiwiY2hhdFNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSIsInVzZXJRdWVyeVByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQiLCJVc2VyRXZlbnRDYXRlZ29yeSIsImV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IiwiTWVzc2FnZVJvbGUiLCJNZXNzYWdlVHlwZSIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJsYXN0TWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZCIsIm1lc3NhZ2VGcm9tUmVzcG9uc2UiLCJlcnJvcjogdW5rbm93biIsImxvZ1BlcmZNZXRyaWNBdG9tIiwidXNlckhhc1JlcGxpZWRBdG9tIiwibWVzc2FnZXNBdG9tIiwidXNlckV2ZW50c0F0b20iLCJzdWdnZXN0aW9uc0F0b20iLCJzdWdnZXN0aW9uc0xvYWRpbmdBdG9tIiwicmVzcG9uc2VTdHJlYW1pbmdBdG9tIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwidXNlckV2ZW50UXVldWVBdG9tIiwidXNlclF1ZXVlRXZlbnRDb3VudEF0b20iLCJwcm9jZXNzVXNlckV2ZW50QXRvbSIsImNsZWFyVXNlckV2ZW50QXRvbSIsInVzZXJJZEF0b20iLCJjaGF0SWRBdG9tIiwic3VwcG9ydGVkRXZlbnRBdG9tIiwidmFyaWFudEluZm9BdG9tIiwidXNlU3lzdGVtU2V0dGluZ3NDb250ZXh0IiwidXNlTWVzc2FnZUludGVyY2VwdG9yIiwiaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20iLCJjaGF0U2VhcmNoSXNMb2FkaW5nQXRvbSIsInVzZUFtcGxpdHVkZVRyYWNraW5nIiwiUGVyZk1ldHJpY3NFdmVudHMiLCJDb21tZXJjZUFwaUNsaWVudCIsImNyZWF0ZVJlc3BvbnNlUGF5bG9hZCIsInVzZXJFdmVudHMiLCJTZXNzaW9uUmVzdGFydFJlcXVpcmVkIiwiY3JlYXRlQXBwTG9hZGVkRXZlbnQiLCJjcmVhdGVWaXNpdFVzZXJFdmVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9jaGF0Q29udGV4dC9jaGF0Q29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyB1c2VBdG9tLCB1c2VBdG9tVmFsdWUsIHVzZVNldEF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG4gIFJlYWN0Tm9kZSxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gXCJzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tIFwic3JjL3R5cGVzL2V4Y2VwdGlvbnMvc2Vzc2lvbkV4Y2VwdGlvbnNcIjtcbmltcG9ydCBMb2dnZXIgZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlclwiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gXCJzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbVJlc3BvbnNlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlsc1wiO1xuaW1wb3J0IHsgY2hhdElkQXRvbSwgdXNlcklkQXRvbSwgdmFyaWFudEluZm9BdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9hcHBcIjtcbmltcG9ydCB7XG4gIG1lc3NhZ2VzQXRvbSxcbiAgcmVxdWVzdEZhaWx1cmVBdG9tLFxuICByZXNwb25zZVN0cmVhbWluZ0F0b20sXG4gIHVzZXJIYXNSZXBsaWVkQXRvbSxcbiAgUGVyZk1ldHJpY3NFdmVudHMsXG4gIGxvZ1BlcmZNZXRyaWNBdG9tLFxuICB1c2VyRXZlbnRzQXRvbSxcbiAgc3VnZ2VzdGlvbnNMb2FkaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL2NoYXRcIjtcbmltcG9ydCB7XG4gIGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20sXG4gIGNoYXRTZWFyY2hQcm9kdWN0cyxcbiAgY2hhdFNlYXJjaFN0YXRlQXRvbSxcbiAgaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20sXG4gIGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaC9jaGF0U2VhcmNoXCI7XG5pbXBvcnQgeyBjcmVhdGVBcHBMb2FkZWRFdmVudCwgY3JlYXRlVmlzaXRVc2VyRXZlbnQgfSBmcm9tIFwic3JjL2hvb2tzL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VNZXNzYWdlSW50ZXJjZXB0b3IgfSBmcm9tIFwic3JjL2ludGVyY2VwdG9ycy91c2VNZXNzYWdlSW50ZXJjZXB0b3JcIjtcbmltcG9ydCB7IHN1cHBvcnRlZEV2ZW50QXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvYXBwL3ZhcmlhbnRcIjtcbmltcG9ydCB7IGNoYXRBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9jaGF0XCI7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tIFwic3JjL2F0b21zL2F0b21TdG9yZVwiO1xuaW1wb3J0IHtcbiAgY2xlYXJVc2VyRXZlbnRBdG9tLFxuICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gIHByb2Nlc3NVc2VyRXZlbnRBdG9tLFxuICB1c2VyRXZlbnRRdWV1ZUF0b20sXG4gIHVzZXJRdWV1ZUV2ZW50Q291bnRBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL2NoYXQvbWVzc2FnZVF1ZXVlXCI7XG5pbXBvcnQgeyB1c2VBbXBsaXR1ZGVUcmFja2luZyB9IGZyb20gXCJzcmMvaG9va3MvQW1wbGl0dWRlT3BlcmF0aW9ucy91c2VBbXBsaXR1ZGVPcGVyYXRpb25zXCI7XG5pbXBvcnQgeyB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQgfSBmcm9tIFwic3JjL2hvb2tzL1N5c3RlbVNldHRpbmdzQ29udGV4dFwiO1xuXG4vKipcbiAqIFJlY29yZCB0aGUgY2hhdCBhc3Npc3RhbnQgcmVzcG9uc2UgaW4gQW1wbGl0dWRlXG4gKlxuICogQHBhcmFtIHN0YXJ0VGltZU1zIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBhc3Npc3RhbnQgcmVzcG9uc2VcbiAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlc3BvbnNlXG4gKi9cbmNvbnN0IHJlY29yZEFzc2lzdGFudFJlc3BvbnNlID0gKFxuICBzdGFydFRpbWVNczogbnVtYmVyLFxuICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgY29uc3QgY2hhdFN0YXRlID0gYXRvbVN0b3JlLmdldChjaGF0QXRvbSk7XG4gIGNvbnN0IGNoYXRTZWFyY2hTdGF0ZSA9IGF0b21TdG9yZS5nZXQoY2hhdFNlYXJjaFN0YXRlQXRvbSk7XG4gIGNvbnN0IHNlYXJjaFByb2R1Y3RzID0gYXRvbVN0b3JlLmdldChjaGF0U2VhcmNoUHJvZHVjdHMpO1xuICBjb25zdCBzZWFyY2hQcm9kdWN0c1NvcnQgPSBhdG9tU3RvcmUuZ2V0KGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20pO1xuICBjb25zdCBhc3Npc3RhbnRSZXNwb25zZVRpbWVNcyA9IHsgc3RhcnQ6IHN0YXJ0VGltZU1zLCBlbmQ6IERhdGUubm93KCkgfTtcbiAgbGV0IHVzZXJRdWVyeVByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgIGNoYXRTdGF0ZS5yZXBseUV2ZW50Q2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkICYmXG4gICAgY2hhdFN0YXRlLnN1Z2dlc3Rpb25cbiAgKSB7XG4gICAgdXNlclF1ZXJ5UHJvcGVydHkgPSBjaGF0U3RhdGUuc3VnZ2VzdGlvbi5jb250ZW50O1xuICB9IGVsc2UgaWYgKGNoYXRTdGF0ZS51c2VyUXVlcnkgJiYgY2hhdFN0YXRlLnVzZXJRdWVyeS5sZW5ndGggPiAwKSB7XG4gICAgdXNlclF1ZXJ5UHJvcGVydHkgPSBjaGF0U3RhdGUudXNlclF1ZXJ5O1xuICB9XG5cbiAgY29uc3QgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgcmVzcG9uc2VfdGltZV9tczpcbiAgICAgIGFzc2lzdGFudFJlc3BvbnNlVGltZU1zLmVuZCAtIGFzc2lzdGFudFJlc3BvbnNlVGltZU1zLnN0YXJ0LFxuICAgIHVzZXJfZXZlbnRfdHlwZTogY2hhdFN0YXRlLnJlcGx5RXZlbnRDYXRlZ29yeSxcbiAgICB1c2VyX3F1ZXJ5OiB1c2VyUXVlcnlQcm9wZXJ0eSxcbiAgfTtcblxuICBpZiAoY2hhdFN0YXRlLnJlcGx5RXZlbnRDYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIGNvbnN0IGxhc3RBc3Npc3RhbnRUdXJuID0gY2hhdFN0YXRlLm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAodHVybikgPT4gdHVybi5sZW5ndGggPiAwICYmIHR1cm5bMF0ucm9sZSA9PT0gTWVzc2FnZVJvbGUuQXNzaXN0YW50XG4gICAgICApXG4gICAgICAucG9wKCk7XG4gICAgY29uc3QgZm9ybVR5cGUgPSBwYXlsb2FkLnVzZXJFdmVudHM/LmZpbmQoXG4gICAgICAoZXZlbnQpID0+IGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkXG4gICAgKT8uYXR0cmlidXRlcy5mb3JtVHlwZTtcbiAgICBjb25zdCBmb3JtU3RhdHVzID0gbGFzdEFzc2lzdGFudFR1cm4/LnNvbWUoXG4gICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLk9yZGVyXG4gICAgKTtcbiAgICBldmVudFByb3BzLmZvcm1fc3VibWl0dGVkX2F0dHJpYnV0ZXMgPSB7XG4gICAgICBmb3JtX3R5cGU6IGZvcm1UeXBlLFxuICAgICAgc3RhdHVzOiBmb3JtU3RhdHVzID8gXCJzdWNjZXNzXCIgOiBcImZhaWxlZFwiLFxuICAgIH07XG4gIH1cblxuICBpZiAoY2hhdFNlYXJjaFN0YXRlID09PSBcInByb2R1Y3QtcGFnZVwiKSB7XG4gICAgZXZlbnRQcm9wcy5zZWFyY2hfcHJvZHVjdHNfcmV0dXJuZWQgPSBzZWFyY2hQcm9kdWN0cy5sZW5ndGg7XG4gICAgZXZlbnRQcm9wcy5zZWFyY2hfcHJvZHVjdHNfc29ydF90eXBlID0gc2VhcmNoUHJvZHVjdHNTb3J0O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0QXNzaXN0YW50UmVzcG9uc2UsIHtcbiAgICBldmVudFByb3BzLFxuICB9KTtcbn07XG5cbmludGVyZmFjZSBDaGF0Q29udGV4dFBhcmFtcyB7fVxuXG5jb25zdCBDaGF0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8Q2hhdENvbnRleHRQYXJhbXMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmNvbnN0IHVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IChcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZFxuKTogTWVzc2FnZSA9PiB7XG4gIGlmIChsYXN0TWVzc2FnZSA9PSBudWxsKSB7XG4gICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBbbWVzc2FnZV1dKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBpZiAoXG4gICAgbGFzdE1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCAmJlxuICAgIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dFxuICApIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0ge1xuICAgICAgLi4ubGFzdE1lc3NhZ2UsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UubWV0YWRhdGEuY29udGVudCArIG1lc3NhZ2UubWV0YWRhdGEuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBzZXRNZXNzYWdlcygocHJldikgPT4ge1xuICAgICAgY29uc3QgbGFzdFR1cm4gPSBwcmV2W3ByZXYubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgIFsuLi5sYXN0VHVybi5zbGljZSgwLCBsYXN0VHVybi5sZW5ndGggLSAxKSwgbmV3TWVzc2FnZV0sXG4gICAgICBdO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICB9XG4gIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbXG4gICAgLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLFxuICAgIFsuLi5wcmV2W3ByZXYubGVuZ3RoIC0gMV0sIG1lc3NhZ2VdLFxuICBdKTtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5jb25zdCBoYW5kbGVTdHJlYW1pbmdFcnJvciA9IChcbiAgX2Vycm9yOiB1bmtub3duLFxuICBzZXRSZXF1ZXN0RmFpbHVyZTogKGZhaWxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkXG4pID0+IHtcbiAgc2V0UmVxdWVzdEZhaWx1cmUodHJ1ZSk7XG4gIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbXG4gICAgLi4ucHJldixcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dCxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgIFwiSSdtIHNvcnJ5ISBJJ20gaGF2aW5nIHRyb3VibGUgcmlnaHQgbm93LiBQbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBvciB0cnkgYWdhaW4gaW4gYSBtb21lbnQuXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufTtcblxuY29uc3QgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlID0gYXN5bmMgKFxuICBzdHJlYW06IEFzeW5jSXRlcmFibGU8UmVzcG9uc2U+LFxuICBtZXNzYWdlSW50ZXJjZXB0b3I6IHtcbiAgICBpbnRlcmNlcHQ6IChyZXNwb25zZT86IFJlc3BvbnNlKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB9LFxuICBoYW5kbGVTZWFyY2hSZXN1bHRzOiAobWVzc2FnZTogTWVzc2FnZSkgPT4gdm9pZCxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkLFxuICBzZXRTZWFyY2hJc0xvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkLFxuICBjaGF0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7IGhhc1NlYXJjaFJlc3VsdHM6IGJvb2xlYW4gfT4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGxldCBoYXNTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBzdHJlYW0pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKG1lc3NhZ2VJbnRlcmNlcHRvci5pbnRlcmNlcHQocmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiB7IGhhc1NlYXJjaFJlc3VsdHMgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byB0cmFuc2Zvcm0gQVBJIHJlc3BvbnNlIHRvIGNsaWVudCBtZXNzYWdlXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICAgIGhhbmRsZVNlYXJjaFJlc3VsdHMobWVzc2FnZSk7XG4gICAgICAgIGhhc1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgICBzZXRTZWFyY2hJc0xvYWRpbmcoZmFsc2UpOyAvLyBVcGRhdGUgc2VhcmNoIGxvYWRpbmcgaW1tZWRpYXRlbHkgd2hlbiByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgfVxuXG4gICAgICBsYXN0TWVzc2FnZSA9IHVwZGF0ZU1lc3NhZ2VTdGF0ZShtZXNzYWdlLCBsYXN0TWVzc2FnZSEsIHNldE1lc3NhZ2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgIGBbc3BpZmZ5LWFpXSBGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtIGNoYXRfaWQ9JHtjaGF0SWR9YCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIHtcbiAgICAgICAgICBsYXN0UmVzcG9uc2U6IGxhc3RNZXNzYWdlLFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGhhc1NlYXJjaFJlc3VsdHMgfTtcbn07XG5cbmNvbnN0IENoYXRDb250ZXh0UHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCBsb2dQZXJmTWV0cmljID0gdXNlU2V0QXRvbShsb2dQZXJmTWV0cmljQXRvbSk7XG4gIGNvbnN0IFt3aWRnZXRJbml0aWFsaXplZCwgc2V0V2lkZ2V0SW5pdGlhbGl6ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzZXRVc2VySGFzUmVwbGllZCA9IHVzZVNldEF0b20odXNlckhhc1JlcGxpZWRBdG9tKTtcbiAgLy8gVE9ETzogY3JlYXRlIGF0b21zIGZvciBzZXR0aW5nL2dldHRpbmcgdGhlIGxhc3QgbWVzc2FnZSB0dXJuXG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlQXRvbTxNZXNzYWdlW11bXT4obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0VXNlckV2ZW50cyA9IHVzZVNldEF0b20odXNlckV2ZW50c0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9ucyA9IHVzZVNldEF0b20oc3VnZ2VzdGlvbnNBdG9tKTtcbiAgY29uc3QgW3N1Z2dlc3Rpb25zTG9hZGluZywgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nXSA9IHVzZUF0b208Ym9vbGVhbj4oXG4gICAgc3VnZ2VzdGlvbnNMb2FkaW5nQXRvbVxuICApO1xuICBjb25zdCBbcmVzcG9uc2VTdHJlYW1pbmcsIHNldFJlc3BvbnNlU3RyZWFtaW5nXSA9IHVzZUF0b208Ym9vbGVhbj4oXG4gICAgcmVzcG9uc2VTdHJlYW1pbmdBdG9tXG4gICk7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCB1c2VyRXZlbnRzID0gdXNlQXRvbVZhbHVlKHVzZXJFdmVudFF1ZXVlQXRvbSk7XG4gIGNvbnN0IHVzZXJRdWV1ZUV2ZW50Q291bnQgPSB1c2VBdG9tVmFsdWUodXNlclF1ZXVlRXZlbnRDb3VudEF0b20pO1xuICBjb25zdCBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZCA9IHVzZVNldEF0b20ocHJvY2Vzc1VzZXJFdmVudEF0b20pO1xuICBjb25zdCBjbGVhclVzZXJFdmVudFF1ZXVlID0gdXNlU2V0QXRvbShjbGVhclVzZXJFdmVudEF0b20pO1xuICBjb25zdCB1c2VySWQgPSB1c2VBdG9tVmFsdWUodXNlcklkQXRvbSk7XG4gIGNvbnN0IGNoYXRJZCA9IHVzZUF0b21WYWx1ZShjaGF0SWRBdG9tKTtcbiAgY29uc3Qgc3VwcG9ydGVkRXZlbnQgPSB1c2VBdG9tVmFsdWUoc3VwcG9ydGVkRXZlbnRBdG9tKTtcbiAgLy8gVE9ETzogUmVwbGFjZSB3aXRoIGFjdHVhbCBvcmdJZCBmcm9tIHVzZUVudml2ZUNvbmZpZyBvciBOZXdPcmdDb25maWdDb250ZXh0IHdoZW4gYXZhaWxhYmxlXG4gIGNvbnN0IG9yZ0lkID0gXCJtb2NrLW9yZy1pZFwiO1xuXG4gIGNvbnN0IHZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IHNldHRpbmdzQ29udGV4dCA9IHVzZVN5c3RlbVNldHRpbmdzQ29udGV4dCgpO1xuICBjb25zdCBtZXNzYWdlSW50ZXJjZXB0b3IgPSB1c2VNZXNzYWdlSW50ZXJjZXB0b3IoKTtcbiAgY29uc3QgaGFuZGxlU2VhcmNoUmVzdWx0cyA9IHVzZVNldEF0b20oaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20pO1xuICBjb25zdCBzZXRTZWFyY2hJc0xvYWRpbmcgPSB1c2VTZXRBdG9tKGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tKTtcbiAgY29uc3QgeyB0cmFjayB9ID0gdXNlQW1wbGl0dWRlVHJhY2tpbmcoKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3RcbiAgICApOiBQcm9taXNlPHsgaGFzU2VhcmNoUmVzdWx0czogYm9vbGVhbiB9PiA9PiB7XG4gICAgICBsb2dQZXJmTWV0cmljKFBlcmZNZXRyaWNzRXZlbnRzLkZpcnN0UmVzcG9uc2VTdGFydGVkKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0UmVxdWVzdEZhaWx1cmUoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IHsgaGFzU2VhcmNoUmVzdWx0cyB9ID0gYXdhaXQgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlKFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBtZXNzYWdlSW50ZXJjZXB0b3IsXG4gICAgICAgICAgaGFuZGxlU2VhcmNoUmVzdWx0cyxcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRTZWFyY2hJc0xvYWRpbmcsXG4gICAgICAgICAgY2hhdElkXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgaGFzU2VhcmNoUmVzdWx0cyB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVTdHJlYW1pbmdFcnJvcihlLCBzZXRSZXF1ZXN0RmFpbHVyZSwgc2V0TWVzc2FnZXMpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFJlc3BvbnNlQ29tcGxldGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGxvZ1BlcmZNZXRyaWMsXG4gICAgICBzZXRSZXF1ZXN0RmFpbHVyZSxcbiAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgIGhhbmRsZVNlYXJjaFJlc3VsdHMsXG4gICAgICBzZXRNZXNzYWdlcyxcbiAgICAgIHNldFNlYXJjaElzTG9hZGluZyxcbiAgICAgIGNoYXRJZCxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgZ2V0U3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFN1Z2dlc3Rpb25zU3RhcnRlZCk7XG4gICAgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nKHRydWUpO1xuICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcblxuICAgIGNvbnN0IHBheWxvYWRXaXRob3V0QXBwTG9hZGVkID0gY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgIHVzZXJFdmVudHM6IFtdLFxuICAgICAgZ2VuZXJhdGlvblBhcmFtczogc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXROZXh0U3VnZ2VzdGlvbnMoXG4gICAgICBwYXlsb2FkV2l0aG91dEFwcExvYWRlZFxuICAgICk7XG5cbiAgICAvLyBzb3J0IHRoZSBzdWdnZXN0aW9ucyBieSBzaG9ydGVzdCBsZW5ndGggc28gdGhlIHBpbGxzIGNhbiBiZSBzdGFja2VkIGhvcml6b250YWxseVxuICAgIHNldFN1Z2dlc3Rpb25zKFxuICAgICAgcmVzcG9uc2Uuc29ydCgoYSwgYikgPT4gYS5jb250ZW50Lmxlbmd0aCAtIGIuY29udGVudC5sZW5ndGgpXG4gICAgKTtcbiAgICBzZXRTdWdnZXN0aW9uc0xvYWRpbmcoZmFsc2UpO1xuICAgIGxvZ1BlcmZNZXRyaWMoUGVyZk1ldHJpY3NFdmVudHMuRmlyc3RTdWdnZXN0aW9uc0NvbXBsZXRlZCk7XG4gIH0sIFtcbiAgICBsb2dQZXJmTWV0cmljLFxuICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyxcbiAgICBzZXRTdWdnZXN0aW9ucyxcbiAgICBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgXSk7XG5cbiAgY29uc3QgZ2V0UmVzcG9uc2VzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ/OiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID1cbiAgICAgICAgICBwYXlsb2FkID8/XG4gICAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgICAgICBnZW5lcmF0aW9uUGFyYW1zOiBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyh0cnVlKTtcbiAgICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgICBjb25zdCBzdGFydFRpbWVNcyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgYXdhaXQgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzKHJlcXVlc3RQYXlsb2FkKTtcblxuICAgICAgICByZWNvcmRBc3Npc3RhbnRSZXNwb25zZShzdGFydFRpbWVNcywgcmVxdWVzdFBheWxvYWQsIHRyYWNrKTtcbiAgICAgICAgYXdhaXQgZ2V0U3VnZ2VzdGlvbnMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIGdldFJlc3BvbnNlcyBlcnJvclwiLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBSZW1vdmUgc2VhcmNoIGxvYWRpbmcgbWFuYWdlbWVudCBmcm9tIGhlcmUgLSBpdCdzIG5vdyBoYW5kbGVkIGluZGVwZW5kZW50bHlcbiAgICAgICAgLy8gaW4gdGhlIHByb2Nlc3NTdHJlYW1pbmdSZXNwb25zZSBmdW5jdGlvbiB3aGVuIHNlYXJjaCByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgICBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZCh1c2VyRXZlbnRzLm1hcCgoeyBldmVudElkIH0pID0+IGV2ZW50SWQpKTtcbiAgICAgICAgc2V0VXNlckhhc1JlcGxpZWQoZmFsc2UpO1xuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICB1c2VyRXZlbnRzLFxuICAgICAgc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgIHNldFN1Z2dlc3Rpb25zLFxuICAgICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgICAgbWFya1VzZXJFdmVudHNQcm9jZXNzZWQsXG4gICAgICBnZXRTdWdnZXN0aW9ucyxcbiAgICAgIHNldFVzZXJIYXNSZXBsaWVkLFxuICAgICAgdHJhY2ssXG4gICAgXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcHJvY2Vzc1VzZXJFdmVudHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2VTdHJlYW1pbmcgfHwgIXdpZGdldEluaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAodmFyaWFudEluZm8udmFyaWFudCA9PT0gXCJwZHBcIiAmJiAhdmFyaWFudEluZm8ucHJvZHVjdElkKSB8fFxuICAgICAgICAodmFyaWFudEluZm8udmFyaWFudCA9PT0gXCJwbHBcIiAmJiAhdmFyaWFudEluZm8ucGxwSWQpIHx8XG4gICAgICAgICh2YXJpYW50SW5mby52YXJpYW50ID09PSBcInBhZ2VfdmlzaXRcIiAmJiAhdmFyaWFudEluZm8udXJsKVxuICAgICAgKSB7XG4gICAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgICBcIltzcGlmZnktYWldIHZhcmlhbnRJbmZvIGhhcyBpbnZhbGlkIHZhbHVlcywgc2tpcHBpbmcuLi5cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXJpYW50SW5mbyxcbiAgICAgICAgICAgIHN1cHBvcnRlZEV2ZW50LFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBBc3Npc3RhbnRzIFR1cm4gaXNfY3VycmVudGx5X3N0cmVhbWluZz0ke3Jlc3BvbnNlU3RyZWFtaW5nfSBpbml0aWFsaXplZD0ke3dpZGdldEluaXRpYWxpemVkfWBcbiAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBnZXRSZXNwb25zZXMoKTtcbiAgICAgICAgTG9nZ2VyLmxvZ0luZm8oYEFzc2lzdGFudHMgVHVybiBbZmluaXNoZWRdYCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBMb2dnZXIubG9nRXJyb3IoXCJbc3BpZmZ5LWFpXSBBc3Npc3RhbnRzIFR1cm4gZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHVzZXJRdWV1ZUV2ZW50Q291bnQgPiAwKSB7XG4gICAgICBwcm9jZXNzVXNlckV2ZW50cygpO1xuICAgIH1cbiAgfSwgW1xuICAgIGdldFJlc3BvbnNlcyxcbiAgICByZXNwb25zZVN0cmVhbWluZyxcbiAgICB1c2VyUXVldWVFdmVudENvdW50LFxuICAgIHdpZGdldEluaXRpYWxpemVkLFxuICAgIHZhcmlhbnRJbmZvLFxuICAgIHN1cHBvcnRlZEV2ZW50LFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3aWRnZXRJbml0aWFsaXplZCB8fCByZXNwb25zZVN0cmVhbWluZykge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaW5pdGlhbGl6ZVdpZGdldCBbc2tpcHBlZF0gaXNfY3VycmVudGx5X3N0cmVhbWluZz0ke3Jlc3BvbnNlU3RyZWFtaW5nfSBpc19pbml0aWFsaXplZD0ke3dpZGdldEluaXRpYWxpemVkfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaHlkcmF0ZUNoYXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAgICAgYFtzcGlmZnktYWldIGluaXRpYWxpemVXaWRnZXQgaXNfY3VycmVudGx5X3N0cmVhbWluZz0ke3Jlc3BvbnNlU3RyZWFtaW5nfSBpc19pbml0aWFsaXplZD0ke3dpZGdldEluaXRpYWxpemVkfWBcbiAgICAgICAgKTtcbiAgICAgICAgLy8gb24gbW91bnQsIHRyeSB0byBnZXQgdGhlIHJlc3BvbnNlcyBmcm9tIGFuIGFjdGl2ZSBzZXNzaW9uIGlmIG9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFvcmdJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9yZ0lkIGlzIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBtZXNzYWdlczogZXhpc3RpbmdNZXNzYWdlcywgdXNlckV2ZW50cyB9ID1cbiAgICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRSZXNwb25zZXMob3JnSWQsIGNoYXRJZCwgdXNlcklkKTtcbiAgICAgICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgICAgICAgc2V0VXNlckV2ZW50cyhbLi4udXNlckV2ZW50c10pO1xuICAgICAgICBnZXRSZXNwb25zZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIG5vIGFjdGl2ZSBjaGF0IHNlc3Npb24gd2FzIGZvdW5kLCBzdGFydCBhIG5ldyBvbmVcbiAgICAgICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICAgICAgYEluaXQgY2hhdCBbZXhjZXB0aW9uXSBjaGF0X2lkPSR7Y2hhdElkfSBlcnJvcj0ke2Vycm9yfWAsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2Vzc2lvblJlc3RhcnRSZXF1aXJlZCkge1xuICAgICAgICAgIGNvbnN0IGFwcExvYWRlZEV2ZW50ID0gY3JlYXRlQXBwTG9hZGVkRXZlbnQoKTtcbiAgICAgICAgICBjb25zdCB2aXNpdEV2ZW50ID0gY3JlYXRlVmlzaXRVc2VyRXZlbnQoeyB2YXJpYW50SW5mbyB9KTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICAgICAgY2xlYXJVc2VyRXZlbnRRdWV1ZSgpO1xuICAgICAgICAgIGlmICh2aXNpdEV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICAgICAgdXNlckV2ZW50czogW2FwcExvYWRlZEV2ZW50LCB2aXNpdEV2ZW50XSxcbiAgICAgICAgICAgICAgZ2VuZXJhdGlvblBhcmFtczogc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdldFJlc3BvbnNlcyhwYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFdpZGdldEluaXRpYWxpemVkKHRydWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBoeWRyYXRlQ2hhdCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25Gb2N1cyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyZXNwb25zZVN0cmVhbWluZyAmJiAhc3VnZ2VzdGlvbnNMb2FkaW5nICYmIG9yZ0lkKSB7XG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMgfSA9XG4gICAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0UmVzcG9uc2VzKG9yZ0lkLCBjaGF0SWQsIHVzZXJJZCk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZXMubGVuZ3RoID4gbWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIGJ1ZyBoYWNrIHN0aWxsIG5lY2Vzc2FyeT9cbiAgICAgICAgICAvLyBJZiBpdCBpcywgY29tZSB1cCB3aXRoIGEgYmV0dGVyIHNvbHV0aW9uIGZvciBpdFxuICAgICAgICAgIC8vIH0gZWxzZSBpZiAoZXhpc3RpbmdNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyAgIC8vIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IHNlc3Npb24sIHRoZSBzZXNzaW9uIHdvdWxkIGJlXG4gICAgICAgICAgLy8gICAvLyBjcmVhdGVkIGluIHRoZSBiYWNrZW5kIGJ1dCB3aXRob3V0IGFueSBtZXNzYWdlcy4gUmV0cnkgdGhlIG5leHRfcmVzcG9uc2VzIHJlcXVlc3Qgd2l0aFxuICAgICAgICAgIC8vICAgLy8gdGhlIGN1cnJlbnQgc2V0IG9mIHBhcmFtZXRlcnMgdG8gXCJqdW1wc3RhcnRcIiB0aGUgc2Vzc2lvblxuICAgICAgICAgIC8vICAgdHJpZ2dlckdldFJlc3BvbnNlQ2FsbCgnb25Gb2N1cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIG9uRm9jdXMgZXJyb3JcIiwgZXJyb3IpO1xuICAgIH1cbiAgfSwgW1xuICAgIHJlc3BvbnNlU3RyZWFtaW5nLFxuICAgIHN1Z2dlc3Rpb25zTG9hZGluZyxcbiAgICBvcmdJZCxcbiAgICBjaGF0SWQsXG4gICAgdXNlcklkLFxuICAgIG1lc3NhZ2VzLmxlbmd0aCxcbiAgICBzZXRNZXNzYWdlcyxcbiAgXSk7XG5cbiAgLy8gbGlzdGVuIGZvciBwYWdlIGZvY3VzIHRvIGdldCBsYXRlc3QgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBvbkZvY3VzKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIG9uRm9jdXMpO1xuICAgIH07XG4gIH0sIFtvbkZvY3VzXSk7XG5cbiAgY29uc3QgY2hhdENvbnRleHQgPSB1c2VNZW1vKCgpID0+ICh7fSksIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxDaGF0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y2hhdENvbnRleHR9PntjaGlsZHJlbn08L0NoYXRDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IHsgQ2hhdENvbnRleHQsIENoYXRDb250ZXh0UHJvdmlkZXIgfTtcbmV4cG9ydCB0eXBlIHsgQ2hhdENvbnRleHRQYXJhbXMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQStEQSxNQUFNLDJCQUNKLGFBQ0EsU0FDQSxVQUlHO0NBQ0gsTUFBTSxZQUFZQSxnQ0FBYztDQUNoQyxNQUFNLFlBQVksVUFBVSxJQUFJQyxzQkFBUztDQUN6QyxNQUFNLGtCQUFrQixVQUFVLElBQUlDLHVDQUFvQjtDQUMxRCxNQUFNLGlCQUFpQixVQUFVLElBQUlDLHNDQUFtQjtDQUN4RCxNQUFNLHFCQUFxQixVQUFVLElBQUlDLGdEQUE2QjtDQUN0RSxNQUFNLDBCQUEwQjtFQUFFLE9BQU87RUFBYSxLQUFLLEtBQUssS0FBSztFQUFFO0NBQ3ZFLElBQUlDO0FBRUosS0FDRSxVQUFVLHVCQUF1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
326
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsiZ2V0QXRvbVN0b3JlIiwiY2hhdEF0b20iLCJjaGF0U2VhcmNoU3RhdGVBdG9tIiwiY2hhdFNlYXJjaFByb2R1Y3RzIiwiY2hhdFNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSIsInVzZXJRdWVyeVByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQiLCJVc2VyRXZlbnRDYXRlZ29yeSIsImV2ZW50UHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IiwiTWVzc2FnZVJvbGUiLCJNZXNzYWdlVHlwZSIsIlNwaWZmeU1ldHJpY3NFdmVudE5hbWUiLCJsYXN0TWVzc2FnZTogTWVzc2FnZSB8IHVuZGVmaW5lZCIsIm1lc3NhZ2VGcm9tUmVzcG9uc2UiLCJlcnJvcjogdW5rbm93biIsImxvZ1BlcmZNZXRyaWNBdG9tIiwidXNlckhhc1JlcGxpZWRBdG9tIiwibWVzc2FnZXNBdG9tIiwidXNlckV2ZW50c0F0b20iLCJzdWdnZXN0aW9uc0F0b20iLCJzdWdnZXN0aW9uc0xvYWRpbmdBdG9tIiwicmVzcG9uc2VTdHJlYW1pbmdBdG9tIiwicmVxdWVzdEZhaWx1cmVBdG9tIiwidXNlckV2ZW50UXVldWVBdG9tIiwidXNlclF1ZXVlRXZlbnRDb3VudEF0b20iLCJwcm9jZXNzVXNlckV2ZW50QXRvbSIsImNsZWFyVXNlckV2ZW50QXRvbSIsInVzZXJJZEF0b20iLCJjaGF0SWRBdG9tIiwic3VwcG9ydGVkRXZlbnRBdG9tIiwidmFyaWFudEluZm9BdG9tIiwidXNlU3lzdGVtU2V0dGluZ3NDb250ZXh0IiwidXNlTWVzc2FnZUludGVyY2VwdG9yIiwiaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20iLCJjaGF0U2VhcmNoSXNMb2FkaW5nQXRvbSIsInVzZUFtcGxpdHVkZVRyYWNraW5nIiwiUGVyZk1ldHJpY3NFdmVudHMiLCJDb21tZXJjZUFwaUNsaWVudCIsImNyZWF0ZVJlc3BvbnNlUGF5bG9hZCIsInVzZXJFdmVudHMiLCJTZXNzaW9uUmVzdGFydFJlcXVpcmVkIiwiY3JlYXRlQXBwTG9hZGVkRXZlbnQiLCJjcmVhdGVWaXNpdFVzZXJFdmVudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0cy9jaGF0Q29udGV4dC9jaGF0Q29udGV4dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyB1c2VBdG9tLCB1c2VBdG9tVmFsdWUsIHVzZVNldEF0b20gfSBmcm9tIFwiam90YWlcIjtcbmltcG9ydCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG4gIFJlYWN0Tm9kZSxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gXCJzcmMvYXBwbGljYXRpb24vY29tbWVyY2UtYXBpXCI7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IFNlc3Npb25SZXN0YXJ0UmVxdWlyZWQgfSBmcm9tIFwic3JjL3R5cGVzL2V4Y2VwdGlvbnMvc2Vzc2lvbkV4Y2VwdGlvbnNcIjtcbmltcG9ydCBMb2dnZXIgZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlclwiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIFJlc3BvbnNlLFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSB9IGZyb20gXCJzcmMvY29udGV4dHMvYW1wbGl0dWRlQ29udGV4dC9hbXBsaXR1ZGVDb250ZXh0XCI7XG5pbXBvcnQgeyBtZXNzYWdlRnJvbVJlc3BvbnNlIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi91dGlsc1wiO1xuaW1wb3J0IHsgY2hhdElkQXRvbSwgdXNlcklkQXRvbSwgdmFyaWFudEluZm9BdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9hcHBcIjtcbmltcG9ydCB7XG4gIG1lc3NhZ2VzQXRvbSxcbiAgcmVxdWVzdEZhaWx1cmVBdG9tLFxuICByZXNwb25zZVN0cmVhbWluZ0F0b20sXG4gIHVzZXJIYXNSZXBsaWVkQXRvbSxcbiAgUGVyZk1ldHJpY3NFdmVudHMsXG4gIGxvZ1BlcmZNZXRyaWNBdG9tLFxuICB1c2VyRXZlbnRzQXRvbSxcbiAgc3VnZ2VzdGlvbnNMb2FkaW5nQXRvbSxcbiAgc3VnZ2VzdGlvbnNBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL2NoYXRcIjtcbmltcG9ydCB7XG4gIGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20sXG4gIGNoYXRTZWFyY2hQcm9kdWN0cyxcbiAgY2hhdFNlYXJjaFN0YXRlQXRvbSxcbiAgaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20sXG4gIGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL3NlYXJjaC9jaGF0U2VhcmNoXCI7XG5pbXBvcnQgeyBjcmVhdGVBcHBMb2FkZWRFdmVudCwgY3JlYXRlVmlzaXRVc2VyRXZlbnQgfSBmcm9tIFwic3JjL2hvb2tzL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VNZXNzYWdlSW50ZXJjZXB0b3IgfSBmcm9tIFwic3JjL2ludGVyY2VwdG9ycy91c2VNZXNzYWdlSW50ZXJjZXB0b3JcIjtcbmltcG9ydCB7IHN1cHBvcnRlZEV2ZW50QXRvbSB9IGZyb20gXCJzcmMvYXRvbXMvYXBwL3ZhcmlhbnRcIjtcbmltcG9ydCB7IGNoYXRBdG9tIH0gZnJvbSBcInNyYy9hdG9tcy9jaGF0XCI7XG5pbXBvcnQgeyBnZXRBdG9tU3RvcmUgfSBmcm9tIFwic3JjL2F0b21zL2F0b21TdG9yZVwiO1xuaW1wb3J0IHtcbiAgY2xlYXJVc2VyRXZlbnRBdG9tLFxuICBjcmVhdGVSZXNwb25zZVBheWxvYWQsXG4gIHByb2Nlc3NVc2VyRXZlbnRBdG9tLFxuICB1c2VyRXZlbnRRdWV1ZUF0b20sXG4gIHVzZXJRdWV1ZUV2ZW50Q291bnRBdG9tLFxufSBmcm9tIFwic3JjL2F0b21zL2NoYXQvbWVzc2FnZVF1ZXVlXCI7XG5pbXBvcnQgeyB1c2VBbXBsaXR1ZGVUcmFja2luZyB9IGZyb20gXCJzcmMvaG9va3MvQW1wbGl0dWRlT3BlcmF0aW9ucy91c2VBbXBsaXR1ZGVPcGVyYXRpb25zXCI7XG5pbXBvcnQgeyB1c2VTeXN0ZW1TZXR0aW5nc0NvbnRleHQgfSBmcm9tIFwic3JjL2hvb2tzL1N5c3RlbVNldHRpbmdzQ29udGV4dFwiO1xuXG4vKipcbiAqIFJlY29yZCB0aGUgY2hhdCBhc3Npc3RhbnQgcmVzcG9uc2UgaW4gQW1wbGl0dWRlXG4gKlxuICogQHBhcmFtIHN0YXJ0VGltZU1zIFRoZSBzdGFydCB0aW1lIG9mIHRoZSBhc3Npc3RhbnQgcmVzcG9uc2VcbiAqIEBwYXJhbSBwYXlsb2FkIFRoZSBwYXlsb2FkIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlc3BvbnNlXG4gKi9cbmNvbnN0IHJlY29yZEFzc2lzdGFudFJlc3BvbnNlID0gKFxuICBzdGFydFRpbWVNczogbnVtYmVyLFxuICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3QsXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgY29uc3QgY2hhdFN0YXRlID0gYXRvbVN0b3JlLmdldChjaGF0QXRvbSk7XG4gIGNvbnN0IGNoYXRTZWFyY2hTdGF0ZSA9IGF0b21TdG9yZS5nZXQoY2hhdFNlYXJjaFN0YXRlQXRvbSk7XG4gIGNvbnN0IHNlYXJjaFByb2R1Y3RzID0gYXRvbVN0b3JlLmdldChjaGF0U2VhcmNoUHJvZHVjdHMpO1xuICBjb25zdCBzZWFyY2hQcm9kdWN0c1NvcnQgPSBhdG9tU3RvcmUuZ2V0KGNoYXRTZWFyY2hQcm9kdWN0U29ydGluZ0F0b20pO1xuICBjb25zdCBhc3Npc3RhbnRSZXNwb25zZVRpbWVNcyA9IHsgc3RhcnQ6IHN0YXJ0VGltZU1zLCBlbmQ6IERhdGUubm93KCkgfTtcbiAgbGV0IHVzZXJRdWVyeVByb3BlcnR5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgIGNoYXRTdGF0ZS5yZXBseUV2ZW50Q2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkICYmXG4gICAgY2hhdFN0YXRlLnN1Z2dlc3Rpb25cbiAgKSB7XG4gICAgdXNlclF1ZXJ5UHJvcGVydHkgPSBjaGF0U3RhdGUuc3VnZ2VzdGlvbi5jb250ZW50O1xuICB9IGVsc2UgaWYgKGNoYXRTdGF0ZS51c2VyUXVlcnkgJiYgY2hhdFN0YXRlLnVzZXJRdWVyeS5sZW5ndGggPiAwKSB7XG4gICAgdXNlclF1ZXJ5UHJvcGVydHkgPSBjaGF0U3RhdGUudXNlclF1ZXJ5O1xuICB9XG5cbiAgY29uc3QgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgcmVzcG9uc2VfdGltZV9tczpcbiAgICAgIGFzc2lzdGFudFJlc3BvbnNlVGltZU1zLmVuZCAtIGFzc2lzdGFudFJlc3BvbnNlVGltZU1zLnN0YXJ0LFxuICAgIHVzZXJfZXZlbnRfdHlwZTogY2hhdFN0YXRlLnJlcGx5RXZlbnRDYXRlZ29yeSxcbiAgICB1c2VyX3F1ZXJ5OiB1c2VyUXVlcnlQcm9wZXJ0eSxcbiAgfTtcblxuICBpZiAoY2hhdFN0YXRlLnJlcGx5RXZlbnRDYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIGNvbnN0IGxhc3RBc3Npc3RhbnRUdXJuID0gY2hhdFN0YXRlLm1lc3NhZ2VzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAodHVybikgPT4gdHVybi5sZW5ndGggPiAwICYmIHR1cm5bMF0ucm9sZSA9PT0gTWVzc2FnZVJvbGUuQXNzaXN0YW50XG4gICAgICApXG4gICAgICAucG9wKCk7XG4gICAgY29uc3QgZm9ybVR5cGUgPSBwYXlsb2FkLnVzZXJFdmVudHM/LmZpbmQoXG4gICAgICAoZXZlbnQpID0+IGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkXG4gICAgKT8uYXR0cmlidXRlcy5mb3JtVHlwZTtcbiAgICBjb25zdCBmb3JtU3RhdHVzID0gbGFzdEFzc2lzdGFudFR1cm4/LnNvbWUoXG4gICAgICAocmVzcG9uc2UpID0+IHJlc3BvbnNlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLk9yZGVyXG4gICAgKTtcbiAgICBldmVudFByb3BzLmZvcm1fc3VibWl0dGVkX2F0dHJpYnV0ZXMgPSB7XG4gICAgICBmb3JtX3R5cGU6IGZvcm1UeXBlLFxuICAgICAgc3RhdHVzOiBmb3JtU3RhdHVzID8gXCJzdWNjZXNzXCIgOiBcImZhaWxlZFwiLFxuICAgIH07XG4gIH1cblxuICBpZiAoY2hhdFNlYXJjaFN0YXRlID09PSBcInByb2R1Y3QtcGFnZVwiKSB7XG4gICAgZXZlbnRQcm9wcy5zZWFyY2hfcHJvZHVjdHNfcmV0dXJuZWQgPSBzZWFyY2hQcm9kdWN0cy5sZW5ndGg7XG4gICAgZXZlbnRQcm9wcy5zZWFyY2hfcHJvZHVjdHNfc29ydF90eXBlID0gc2VhcmNoUHJvZHVjdHNTb3J0O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5DaGF0QXNzaXN0YW50UmVzcG9uc2UsIHtcbiAgICBldmVudFByb3BzLFxuICB9KTtcbn07XG5cbmludGVyZmFjZSBDaGF0Q29udGV4dFBhcmFtcyB7fVxuXG5jb25zdCBDaGF0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8Q2hhdENvbnRleHRQYXJhbXMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbmNvbnN0IHVwZGF0ZU1lc3NhZ2VTdGF0ZSA9IChcbiAgbWVzc2FnZTogTWVzc2FnZSxcbiAgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UsXG4gIHNldE1lc3NhZ2VzOiAodXBkYXRlcjogKHByZXY6IE1lc3NhZ2VbXVtdKSA9PiBNZXNzYWdlW11bXSkgPT4gdm9pZFxuKTogTWVzc2FnZSA9PiB7XG4gIGlmIChsYXN0TWVzc2FnZSA9PSBudWxsKSB7XG4gICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBbbWVzc2FnZV1dKTtcbiAgICByZXR1cm4gbWVzc2FnZTtcbiAgfVxuICBpZiAoXG4gICAgbGFzdE1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dCAmJlxuICAgIG1lc3NhZ2UudHlwZSA9PT0gTWVzc2FnZVR5cGUuVGV4dFxuICApIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0ge1xuICAgICAgLi4ubGFzdE1lc3NhZ2UsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5sYXN0TWVzc2FnZS5tZXRhZGF0YSxcbiAgICAgICAgY29udGVudDogbGFzdE1lc3NhZ2UubWV0YWRhdGEuY29udGVudCArIG1lc3NhZ2UubWV0YWRhdGEuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBzZXRNZXNzYWdlcygocHJldikgPT4ge1xuICAgICAgY29uc3QgbGFzdFR1cm4gPSBwcmV2W3ByZXYubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gW1xuICAgICAgICAuLi5wcmV2LnNsaWNlKDAsIHByZXYubGVuZ3RoIC0gMSksXG4gICAgICAgIFsuLi5sYXN0VHVybi5zbGljZSgwLCBsYXN0VHVybi5sZW5ndGggLSAxKSwgbmV3TWVzc2FnZV0sXG4gICAgICBdO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICB9XG4gIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbXG4gICAgLi4ucHJldi5zbGljZSgwLCBwcmV2Lmxlbmd0aCAtIDEpLFxuICAgIFsuLi5wcmV2W3ByZXYubGVuZ3RoIC0gMV0sIG1lc3NhZ2VdLFxuICBdKTtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5jb25zdCBoYW5kbGVTdHJlYW1pbmdFcnJvciA9IChcbiAgX2Vycm9yOiB1bmtub3duLFxuICBzZXRSZXF1ZXN0RmFpbHVyZTogKGZhaWxlZDogYm9vbGVhbikgPT4gdm9pZCxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkXG4pID0+IHtcbiAgc2V0UmVxdWVzdEZhaWx1cmUodHJ1ZSk7XG4gIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbXG4gICAgLi4ucHJldixcbiAgICBbXG4gICAgICB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dCxcbiAgICAgICAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgY29udGVudDpcbiAgICAgICAgICAgIFwiSSdtIHNvcnJ5ISBJJ20gaGF2aW5nIHRyb3VibGUgcmlnaHQgbm93LiBQbGVhc2UgcmVmcmVzaCB0aGUgcGFnZSBvciB0cnkgYWdhaW4gaW4gYSBtb21lbnQuXCIsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufTtcblxuY29uc3QgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlID0gYXN5bmMgKFxuICBzdHJlYW06IEFzeW5jSXRlcmFibGU8UmVzcG9uc2U+LFxuICBtZXNzYWdlSW50ZXJjZXB0b3I6IHtcbiAgICBpbnRlcmNlcHQ6IChyZXNwb25zZT86IFJlc3BvbnNlKSA9PiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICB9LFxuICBoYW5kbGVTZWFyY2hSZXN1bHRzOiAobWVzc2FnZTogTWVzc2FnZSkgPT4gdm9pZCxcbiAgc2V0TWVzc2FnZXM6ICh1cGRhdGVyOiAocHJldjogTWVzc2FnZVtdW10pID0+IE1lc3NhZ2VbXVtdKSA9PiB2b2lkLFxuICBzZXRTZWFyY2hJc0xvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB2b2lkLFxuICBjaGF0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7IGhhc1NlYXJjaFJlc3VsdHM6IGJvb2xlYW4gfT4gPT4ge1xuICBsZXQgbGFzdE1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIGxldCBoYXNTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG5cbiAgZm9yIGF3YWl0IChjb25zdCByZXNwb25zZSBvZiBzdHJlYW0pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKG1lc3NhZ2VJbnRlcmNlcHRvci5pbnRlcmNlcHQocmVzcG9uc2UpKSB7XG4gICAgICAgIHJldHVybiB7IGhhc1NlYXJjaFJlc3VsdHMgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lc3NhZ2VGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgaWYgKCFtZXNzYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byB0cmFuc2Zvcm0gQVBJIHJlc3BvbnNlIHRvIGNsaWVudCBtZXNzYWdlXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICAgIGhhbmRsZVNlYXJjaFJlc3VsdHMobWVzc2FnZSk7XG4gICAgICAgIGhhc1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgICBzZXRTZWFyY2hJc0xvYWRpbmcoZmFsc2UpOyAvLyBVcGRhdGUgc2VhcmNoIGxvYWRpbmcgaW1tZWRpYXRlbHkgd2hlbiByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgfVxuXG4gICAgICBsYXN0TWVzc2FnZSA9IHVwZGF0ZU1lc3NhZ2VTdGF0ZShtZXNzYWdlLCBsYXN0TWVzc2FnZSEsIHNldE1lc3NhZ2VzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgIGBbc3BpZmZ5LWFpXSBGYWlsZWQgdG8gZ2VuZXJhdGUgcmVzcG9uc2VzIGZyb20gc3RyZWFtIGNoYXRfaWQ9JHtjaGF0SWR9YCxcbiAgICAgICAgZXJyb3IsXG4gICAgICAgIHtcbiAgICAgICAgICBsYXN0UmVzcG9uc2U6IGxhc3RNZXNzYWdlLFxuICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGhhc1NlYXJjaFJlc3VsdHMgfTtcbn07XG5cbmNvbnN0IENoYXRDb250ZXh0UHJvdmlkZXIgPSAoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdE5vZGUgfSkgPT4ge1xuICBjb25zdCBsb2dQZXJmTWV0cmljID0gdXNlU2V0QXRvbShsb2dQZXJmTWV0cmljQXRvbSk7XG4gIGNvbnN0IFt3aWRnZXRJbml0aWFsaXplZCwgc2V0V2lkZ2V0SW5pdGlhbGl6ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzZXRVc2VySGFzUmVwbGllZCA9IHVzZVNldEF0b20odXNlckhhc1JlcGxpZWRBdG9tKTtcbiAgLy8gVE9ETzogY3JlYXRlIGF0b21zIGZvciBzZXR0aW5nL2dldHRpbmcgdGhlIGxhc3QgbWVzc2FnZSB0dXJuXG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlQXRvbTxNZXNzYWdlW11bXT4obWVzc2FnZXNBdG9tKTtcbiAgY29uc3Qgc2V0VXNlckV2ZW50cyA9IHVzZVNldEF0b20odXNlckV2ZW50c0F0b20pO1xuICBjb25zdCBzZXRTdWdnZXN0aW9ucyA9IHVzZVNldEF0b20oc3VnZ2VzdGlvbnNBdG9tKTtcbiAgY29uc3QgW3N1Z2dlc3Rpb25zTG9hZGluZywgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nXSA9IHVzZUF0b208Ym9vbGVhbj4oXG4gICAgc3VnZ2VzdGlvbnNMb2FkaW5nQXRvbVxuICApO1xuICBjb25zdCBbcmVzcG9uc2VTdHJlYW1pbmcsIHNldFJlc3BvbnNlU3RyZWFtaW5nXSA9IHVzZUF0b208Ym9vbGVhbj4oXG4gICAgcmVzcG9uc2VTdHJlYW1pbmdBdG9tXG4gICk7XG4gIGNvbnN0IHNldFJlcXVlc3RGYWlsdXJlID0gdXNlU2V0QXRvbShyZXF1ZXN0RmFpbHVyZUF0b20pO1xuICBjb25zdCB1c2VyRXZlbnRzID0gdXNlQXRvbVZhbHVlKHVzZXJFdmVudFF1ZXVlQXRvbSk7XG4gIGNvbnN0IHVzZXJRdWV1ZUV2ZW50Q291bnQgPSB1c2VBdG9tVmFsdWUodXNlclF1ZXVlRXZlbnRDb3VudEF0b20pO1xuICBjb25zdCBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZCA9IHVzZVNldEF0b20ocHJvY2Vzc1VzZXJFdmVudEF0b20pO1xuICBjb25zdCBjbGVhclVzZXJFdmVudFF1ZXVlID0gdXNlU2V0QXRvbShjbGVhclVzZXJFdmVudEF0b20pO1xuICBjb25zdCB1c2VySWQgPSB1c2VBdG9tVmFsdWUodXNlcklkQXRvbSk7XG4gIGNvbnN0IGNoYXRJZCA9IHVzZUF0b21WYWx1ZShjaGF0SWRBdG9tKTtcbiAgY29uc3Qgc3VwcG9ydGVkRXZlbnQgPSB1c2VBdG9tVmFsdWUoc3VwcG9ydGVkRXZlbnRBdG9tKTtcbiAgLy8gVE9ETzogUmVwbGFjZSB3aXRoIGFjdHVhbCBvcmdJZCBmcm9tIHVzZUVudml2ZUNvbmZpZyBvciBOZXdPcmdDb25maWdDb250ZXh0IHdoZW4gYXZhaWxhYmxlXG4gIGNvbnN0IG9yZ0lkID0gXCJtb2NrLW9yZy1pZFwiO1xuXG4gIGNvbnN0IHZhcmlhbnRJbmZvID0gdXNlQXRvbVZhbHVlKHZhcmlhbnRJbmZvQXRvbSk7XG4gIGNvbnN0IHNldHRpbmdzQ29udGV4dCA9IHVzZVN5c3RlbVNldHRpbmdzQ29udGV4dCgpO1xuICBjb25zdCBtZXNzYWdlSW50ZXJjZXB0b3IgPSB1c2VNZXNzYWdlSW50ZXJjZXB0b3IoKTtcbiAgY29uc3QgaGFuZGxlU2VhcmNoUmVzdWx0cyA9IHVzZVNldEF0b20oaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20pO1xuICBjb25zdCBzZXRTZWFyY2hJc0xvYWRpbmcgPSB1c2VTZXRBdG9tKGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tKTtcbiAgY29uc3QgeyB0cmFjayB9ID0gdXNlQW1wbGl0dWRlVHJhY2tpbmcoKTtcblxuICBjb25zdCBnZXRTdHJlYW1pbmdSZXNwb25zZXMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBwYXlsb2FkOiBOZXh0TWVzc2FnZVJlcXVlc3RcbiAgICApOiBQcm9taXNlPHsgaGFzU2VhcmNoUmVzdWx0czogYm9vbGVhbiB9PiA9PiB7XG4gICAgICBsb2dQZXJmTWV0cmljKFBlcmZNZXRyaWNzRXZlbnRzLkZpcnN0UmVzcG9uc2VTdGFydGVkKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IENvbW1lcmNlQXBpQ2xpZW50LmdldE5leHRSZXNwb25zZVN0cmVhbWluZyhwYXlsb2FkKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0UmVxdWVzdEZhaWx1cmUoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IHsgaGFzU2VhcmNoUmVzdWx0cyB9ID0gYXdhaXQgcHJvY2Vzc1N0cmVhbWluZ1Jlc3BvbnNlKFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBtZXNzYWdlSW50ZXJjZXB0b3IsXG4gICAgICAgICAgaGFuZGxlU2VhcmNoUmVzdWx0cyxcbiAgICAgICAgICBzZXRNZXNzYWdlcyxcbiAgICAgICAgICBzZXRTZWFyY2hJc0xvYWRpbmcsXG4gICAgICAgICAgY2hhdElkXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHsgaGFzU2VhcmNoUmVzdWx0cyB9O1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVTdHJlYW1pbmdFcnJvcihlLCBzZXRSZXF1ZXN0RmFpbHVyZSwgc2V0TWVzc2FnZXMpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFJlc3BvbnNlQ29tcGxldGVkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGxvZ1BlcmZNZXRyaWMsXG4gICAgICBzZXRSZXF1ZXN0RmFpbHVyZSxcbiAgICAgIG1lc3NhZ2VJbnRlcmNlcHRvcixcbiAgICAgIGhhbmRsZVNlYXJjaFJlc3VsdHMsXG4gICAgICBzZXRNZXNzYWdlcyxcbiAgICAgIHNldFNlYXJjaElzTG9hZGluZyxcbiAgICAgIGNoYXRJZCxcbiAgICBdXG4gICk7XG5cbiAgY29uc3QgZ2V0U3VnZ2VzdGlvbnMgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgbG9nUGVyZk1ldHJpYyhQZXJmTWV0cmljc0V2ZW50cy5GaXJzdFN1Z2dlc3Rpb25zU3RhcnRlZCk7XG4gICAgc2V0U3VnZ2VzdGlvbnNMb2FkaW5nKHRydWUpO1xuICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcblxuICAgIGNvbnN0IHBheWxvYWRXaXRob3V0QXBwTG9hZGVkID0gY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgIHVzZXJFdmVudHM6IFtdLFxuICAgICAgZ2VuZXJhdGlvblBhcmFtczogc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXROZXh0U3VnZ2VzdGlvbnMoXG4gICAgICBwYXlsb2FkV2l0aG91dEFwcExvYWRlZFxuICAgICk7XG5cbiAgICAvLyBzb3J0IHRoZSBzdWdnZXN0aW9ucyBieSBzaG9ydGVzdCBsZW5ndGggc28gdGhlIHBpbGxzIGNhbiBiZSBzdGFja2VkIGhvcml6b250YWxseVxuICAgIHNldFN1Z2dlc3Rpb25zKFxuICAgICAgcmVzcG9uc2Uuc29ydCgoYSwgYikgPT4gYS5jb250ZW50Lmxlbmd0aCAtIGIuY29udGVudC5sZW5ndGgpXG4gICAgKTtcbiAgICBzZXRTdWdnZXN0aW9uc0xvYWRpbmcoZmFsc2UpO1xuICAgIGxvZ1BlcmZNZXRyaWMoUGVyZk1ldHJpY3NFdmVudHMuRmlyc3RTdWdnZXN0aW9uc0NvbXBsZXRlZCk7XG4gIH0sIFtcbiAgICBsb2dQZXJmTWV0cmljLFxuICAgIHNldFN1Z2dlc3Rpb25zTG9hZGluZyxcbiAgICBzZXRTdWdnZXN0aW9ucyxcbiAgICBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgXSk7XG5cbiAgY29uc3QgZ2V0UmVzcG9uc2VzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHBheWxvYWQ/OiBOZXh0TWVzc2FnZVJlcXVlc3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID1cbiAgICAgICAgICBwYXlsb2FkID8/XG4gICAgICAgICAgY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICAgIHVzZXJFdmVudHMsXG4gICAgICAgICAgICBnZW5lcmF0aW9uUGFyYW1zOiBzZXR0aW5nc0NvbnRleHQuZ2VuZXJhdGlvblBhcmFtcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyh0cnVlKTtcbiAgICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgICBjb25zdCBzdGFydFRpbWVNcyA9IERhdGUubm93KCk7XG5cbiAgICAgICAgYXdhaXQgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzKHJlcXVlc3RQYXlsb2FkKTtcblxuICAgICAgICByZWNvcmRBc3Npc3RhbnRSZXNwb25zZShzdGFydFRpbWVNcywgcmVxdWVzdFBheWxvYWQsIHRyYWNrKTtcbiAgICAgICAgYXdhaXQgZ2V0U3VnZ2VzdGlvbnMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIGdldFJlc3BvbnNlcyBlcnJvclwiLCBlcnJvcik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAvLyBSZW1vdmUgc2VhcmNoIGxvYWRpbmcgbWFuYWdlbWVudCBmcm9tIGhlcmUgLSBpdCdzIG5vdyBoYW5kbGVkIGluZGVwZW5kZW50bHlcbiAgICAgICAgLy8gaW4gdGhlIHByb2Nlc3NTdHJlYW1pbmdSZXNwb25zZSBmdW5jdGlvbiB3aGVuIHNlYXJjaCByZXN1bHRzIGFyZSBkZXRlY3RlZFxuICAgICAgICBtYXJrVXNlckV2ZW50c1Byb2Nlc3NlZCh1c2VyRXZlbnRzLm1hcCgoeyBldmVudElkIH0pID0+IGV2ZW50SWQpKTtcbiAgICAgICAgc2V0VXNlckhhc1JlcGxpZWQoZmFsc2UpO1xuICAgICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICB1c2VyRXZlbnRzLFxuICAgICAgc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgICBzZXRSZXNwb25zZVN0cmVhbWluZyxcbiAgICAgIHNldFN1Z2dlc3Rpb25zLFxuICAgICAgZ2V0U3RyZWFtaW5nUmVzcG9uc2VzLFxuICAgICAgbWFya1VzZXJFdmVudHNQcm9jZXNzZWQsXG4gICAgICBnZXRTdWdnZXN0aW9ucyxcbiAgICAgIHNldFVzZXJIYXNSZXBsaWVkLFxuICAgICAgdHJhY2ssXG4gICAgXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcHJvY2Vzc1VzZXJFdmVudHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2VTdHJlYW1pbmcgfHwgIXdpZGdldEluaXRpYWxpemVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICAodmFyaWFudEluZm8udmFyaWFudCA9PT0gXCJwZHBcIiAmJiAhdmFyaWFudEluZm8ucHJvZHVjdElkKSB8fFxuICAgICAgICAodmFyaWFudEluZm8udmFyaWFudCA9PT0gXCJwbHBcIiAmJiAhdmFyaWFudEluZm8ucGxwSWQpIHx8XG4gICAgICAgICh2YXJpYW50SW5mby52YXJpYW50ID09PSBcInBhZ2VfdmlzaXRcIiAmJiAhdmFyaWFudEluZm8udXJsKVxuICAgICAgKSB7XG4gICAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgICBcIltzcGlmZnktYWldIHZhcmlhbnRJbmZvIGhhcyBpbnZhbGlkIHZhbHVlcywgc2tpcHBpbmcuLi5cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXJpYW50SW5mbyxcbiAgICAgICAgICAgIHN1cHBvcnRlZEV2ZW50LFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAgIGBBc3Npc3RhbnRzIFR1cm4gaXNfY3VycmVudGx5X3N0cmVhbWluZz0ke3Jlc3BvbnNlU3RyZWFtaW5nfSBpbml0aWFsaXplZD0ke3dpZGdldEluaXRpYWxpemVkfWBcbiAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBnZXRSZXNwb25zZXMoKTtcbiAgICAgICAgTG9nZ2VyLmxvZ0luZm8oYEFzc2lzdGFudHMgVHVybiBbZmluaXNoZWRdYCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICBMb2dnZXIubG9nRXJyb3IoXCJbc3BpZmZ5LWFpXSBBc3Npc3RhbnRzIFR1cm4gZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHVzZXJRdWV1ZUV2ZW50Q291bnQgPiAwKSB7XG4gICAgICBwcm9jZXNzVXNlckV2ZW50cygpO1xuICAgIH1cbiAgfSwgW1xuICAgIGdldFJlc3BvbnNlcyxcbiAgICByZXNwb25zZVN0cmVhbWluZyxcbiAgICB1c2VyUXVldWVFdmVudENvdW50LFxuICAgIHdpZGdldEluaXRpYWxpemVkLFxuICAgIHZhcmlhbnRJbmZvLFxuICAgIHN1cHBvcnRlZEV2ZW50LFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3aWRnZXRJbml0aWFsaXplZCB8fCByZXNwb25zZVN0cmVhbWluZykge1xuICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICBgW3NwaWZmeS1haV0gaW5pdGlhbGl6ZVdpZGdldCBbc2tpcHBlZF0gaXNfY3VycmVudGx5X3N0cmVhbWluZz0ke3Jlc3BvbnNlU3RyZWFtaW5nfSBpc19pbml0aWFsaXplZD0ke3dpZGdldEluaXRpYWxpemVkfWBcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaHlkcmF0ZUNoYXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAgICAgYFtzcGlmZnktYWldIGluaXRpYWxpemVXaWRnZXQgaXNfY3VycmVudGx5X3N0cmVhbWluZz0ke3Jlc3BvbnNlU3RyZWFtaW5nfSBpc19pbml0aWFsaXplZD0ke3dpZGdldEluaXRpYWxpemVkfWBcbiAgICAgICAgKTtcbiAgICAgICAgLy8gb24gbW91bnQsIHRyeSB0byBnZXQgdGhlIHJlc3BvbnNlcyBmcm9tIGFuIGFjdGl2ZSBzZXNzaW9uIGlmIG9uZSBleGlzdHNcbiAgICAgICAgaWYgKCFvcmdJZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9yZ0lkIGlzIG5vdCBhdmFpbGFibGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBtZXNzYWdlczogZXhpc3RpbmdNZXNzYWdlcywgdXNlckV2ZW50cyB9ID1cbiAgICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRSZXNwb25zZXMob3JnSWQsIGNoYXRJZCwgdXNlcklkKTtcbiAgICAgICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgICAgICAgc2V0VXNlckV2ZW50cyhbLi4udXNlckV2ZW50c10pO1xuICAgICAgICBnZXRSZXNwb25zZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIG5vIGFjdGl2ZSBjaGF0IHNlc3Npb24gd2FzIGZvdW5kLCBzdGFydCBhIG5ldyBvbmVcbiAgICAgICAgTG9nZ2VyLmxvZ0luZm8oXG4gICAgICAgICAgYEluaXQgY2hhdCBbZXhjZXB0aW9uXSBjaGF0X2lkPSR7Y2hhdElkfSBlcnJvcj0ke2Vycm9yfWAsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2Vzc2lvblJlc3RhcnRSZXF1aXJlZCkge1xuICAgICAgICAgIGNvbnN0IGFwcExvYWRlZEV2ZW50ID0gY3JlYXRlQXBwTG9hZGVkRXZlbnQoKTtcbiAgICAgICAgICBjb25zdCB2aXNpdEV2ZW50ID0gY3JlYXRlVmlzaXRVc2VyRXZlbnQoeyB2YXJpYW50SW5mbyB9KTtcbiAgICAgICAgICBzZXRNZXNzYWdlcyhbXSk7XG4gICAgICAgICAgY2xlYXJVc2VyRXZlbnRRdWV1ZSgpO1xuICAgICAgICAgIGlmICh2aXNpdEV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gY3JlYXRlUmVzcG9uc2VQYXlsb2FkKHtcbiAgICAgICAgICAgICAgdXNlckV2ZW50czogW2FwcExvYWRlZEV2ZW50LCB2aXNpdEV2ZW50XSxcbiAgICAgICAgICAgICAgZ2VuZXJhdGlvblBhcmFtczogc2V0dGluZ3NDb250ZXh0LmdlbmVyYXRpb25QYXJhbXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdldFJlc3BvbnNlcyhwYXlsb2FkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldFdpZGdldEluaXRpYWxpemVkKHRydWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBoeWRyYXRlQ2hhdCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25Gb2N1cyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFyZXNwb25zZVN0cmVhbWluZyAmJiAhc3VnZ2VzdGlvbnNMb2FkaW5nICYmIG9yZ0lkKSB7XG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZXM6IGV4aXN0aW5nTWVzc2FnZXMgfSA9XG4gICAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0UmVzcG9uc2VzKG9yZ0lkLCBjaGF0SWQsIHVzZXJJZCk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZXMubGVuZ3RoID4gbWVzc2FnZXMubGVuZ3RoKSB7XG4gICAgICAgICAgc2V0TWVzc2FnZXMoWy4uLmV4aXN0aW5nTWVzc2FnZXNdKTtcbiAgICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIGJ1ZyBoYWNrIHN0aWxsIG5lY2Vzc2FyeT9cbiAgICAgICAgICAvLyBJZiBpdCBpcywgY29tZSB1cCB3aXRoIGEgYmV0dGVyIHNvbHV0aW9uIGZvciBpdFxuICAgICAgICAgIC8vIH0gZWxzZSBpZiAoZXhpc3RpbmdNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyAgIC8vIGlmIHRoZXJlIHdhcyBhbiBlcnJvciBkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIG9mIGEgbmV3IHNlc3Npb24sIHRoZSBzZXNzaW9uIHdvdWxkIGJlXG4gICAgICAgICAgLy8gICAvLyBjcmVhdGVkIGluIHRoZSBiYWNrZW5kIGJ1dCB3aXRob3V0IGFueSBtZXNzYWdlcy4gUmV0cnkgdGhlIG5leHRfcmVzcG9uc2VzIHJlcXVlc3Qgd2l0aFxuICAgICAgICAgIC8vICAgLy8gdGhlIGN1cnJlbnQgc2V0IG9mIHBhcmFtZXRlcnMgdG8gXCJqdW1wc3RhcnRcIiB0aGUgc2Vzc2lvblxuICAgICAgICAgIC8vICAgdHJpZ2dlckdldFJlc3BvbnNlQ2FsbCgnb25Gb2N1cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIltzcGlmZnktYWldIG9uRm9jdXMgZXJyb3JcIiwgZXJyb3IpO1xuICAgIH1cbiAgfSwgW1xuICAgIHJlc3BvbnNlU3RyZWFtaW5nLFxuICAgIHN1Z2dlc3Rpb25zTG9hZGluZyxcbiAgICBvcmdJZCxcbiAgICBjaGF0SWQsXG4gICAgdXNlcklkLFxuICAgIG1lc3NhZ2VzLmxlbmd0aCxcbiAgICBzZXRNZXNzYWdlcyxcbiAgXSk7XG5cbiAgLy8gbGlzdGVuIGZvciBwYWdlIGZvY3VzIHRvIGdldCBsYXRlc3QgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBvbkZvY3VzKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIG9uRm9jdXMpO1xuICAgIH07XG4gIH0sIFtvbkZvY3VzXSk7XG5cbiAgY29uc3QgY2hhdENvbnRleHQgPSB1c2VNZW1vKCgpID0+ICh7fSksIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxDaGF0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y2hhdENvbnRleHR9PntjaGlsZHJlbn08L0NoYXRDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufTtcblxuZXhwb3J0IHsgQ2hhdENvbnRleHQsIENoYXRDb250ZXh0UHJvdmlkZXIgfTtcbmV4cG9ydCB0eXBlIHsgQ2hhdENvbnRleHRQYXJhbXMgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErREEsTUFBTSwyQkFDSixhQUNBLFNBQ0EsVUFJRztDQUNILE1BQU0sWUFBWUEsZ0NBQWM7Q0FDaEMsTUFBTSxZQUFZLFVBQVUsSUFBSUMsc0JBQVM7Q0FDekMsTUFBTSxrQkFBa0IsVUFBVSxJQUFJQyx1Q0FBb0I7Q0FDMUQsTUFBTSxpQkFBaUIsVUFBVSxJQUFJQyxzQ0FBbUI7Q0FDeEQsTUFBTSxxQkFBcUIsVUFBVSxJQUFJQyxnREFBNkI7Q0FDdEUsTUFBTSwwQkFBMEI7RUFBRSxPQUFPO0VBQWEsS0FBSyxLQUFLLEtBQUs7RUFBRTtDQUN2RSxJQUFJQztBQUVKLEtBQ0UsVUFBVSx1QkFBdUJDLGtEQUFrQixxQkFDbkQsVUFBVSxXQUVWLHFCQUFvQixVQUFVLFdBQVc7VUFDaEMsVUFBVSxhQUFhLFVBQVUsVUFBVSxTQUFTLEVBQzdELHFCQUFvQixVQUFVO0NBR2hDLE1BQU1DLGFBQXNDO0VBQzFDLGtCQUNFLHdCQUF3QixNQUFNLHdCQUF3QjtFQUN4RCxpQkFBaUIsVUFBVTtFQUMzQixZQUFZO0VBQ2I7QUFFRCxLQUFJLFVBQVUsdUJBQXVCRCxrREFBa0IsZUFBZTtFQUNwRSxNQUFNLG9CQUFvQixVQUFVLFNBQ2pDLFFBQ0UsU0FBUyxLQUFLLFNBQVMsS0FBSyxLQUFLLEdBQUcsU0FBU0UsMkJBQVksVUFDM0QsQ0FDQSxLQUFLO0VBQ1IsTUFBTSxXQUFXLFFBQVEsWUFBWSxNQUNsQyxVQUFVLE1BQU0sYUFBYUYsa0RBQWtCLGNBQ2pELEVBQUUsV0FBVztFQUNkLE1BQU0sYUFBYSxtQkFBbUIsTUFDbkMsYUFBYSxTQUFTLFNBQVNHLDJCQUFZLE1BQzdDO0FBQ0QsYUFBVyw0QkFBNEI7R0FDckMsV0FBVztHQUNYLFFBQVEsYUFBYSxZQUFZO0dBQ2xDOztBQUdILEtBQUksb0JBQW9CLGdCQUFnQjtBQUN0QyxhQUFXLDJCQUEyQixlQUFlO0FBQ3JELGFBQVcsNEJBQTRCOztBQUd6QyxPQUFNQyx1Q0FBdUIsdUJBQXVCLEVBQ2xELFlBQ0QsQ0FBQzs7QUFLSixNQUFNLHVDQUEyRCxPQUFVO0FBRTNFLE1BQU0sc0JBQ0osU0FDQSxhQUNBLGdCQUNZO0FBQ1osS0FBSSxlQUFlLE1BQU07QUFDdkIsZUFBYSxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsU0FBTzs7QUFFVCxLQUNFLFlBQVksU0FBU0QsMkJBQVksUUFDakMsUUFBUSxTQUFTQSwyQkFBWSxNQUM3QjtFQUNBLE1BQU0sYUFBYTtHQUNqQixHQUFHO0dBQ0gsVUFBVTtJQUNSLEdBQUcsWUFBWTtJQUNmLFNBQVMsWUFBWSxTQUFTLFVBQVUsUUFBUSxTQUFTO0lBQzFEO0dBQ0Y7QUFDRCxlQUFhLFNBQVM7R0FDcEIsTUFBTSxXQUFXLEtBQUssS0FBSyxTQUFTO0FBQ3BDLFVBQU8sQ0FDTCxHQUFHLEtBQUssTUFBTSxHQUFHLEtBQUssU0FBUyxFQUFFLEVBQ2pDLENBQUMsR0FBRyxTQUFTLE1BQU0sR0FBRyxTQUFTLFNBQVMsRUFBRSxFQUFFLFdBQVcsQ0FDeEQ7SUFDRDtBQUNGLFNBQU87O0FBRVQsY0FBYSxTQUFTLENBQ3BCLEdBQUcsS0FBSyxNQUFNLEdBQUcsS0FBSyxTQUFTLEVBQUUsRUFDakMsQ0FBQyxHQUFHLEtBQUssS0FBSyxTQUFTLElBQUksUUFBUSxDQUNwQyxDQUFDO0FBQ0YsUUFBTzs7QUFHVCxNQUFNLHdCQUNKLFFBQ0EsbUJBQ0EsZ0JBQ0c7QUFDSCxtQkFBa0IsS0FBSztBQUN2QixjQUFhLFNBQVMsQ0FDcEIsR0FBRyxNQUNILENBQ0U7RUFDRSxrQkFBVTtFQUNWLE1BQU1ELDJCQUFZO0VBQ2xCLE1BQU1DLDJCQUFZO0VBQ2xCLDRCQUFXLElBQUksTUFBTSxFQUFDLGFBQWE7RUFDbkMsVUFBVSxFQUNSLFNBQ0UsOEZBQ0g7RUFDRixDQUNGLENBQ0YsQ0FBQzs7QUFHSixNQUFNLDJCQUEyQixPQUMvQixRQUNBLG9CQUdBLHFCQUNBLGFBQ0Esb0JBQ0EsV0FDMkM7Q0FDM0MsSUFBSUU7Q0FDSixJQUFJLG1CQUFtQjtBQUV2QixZQUFXLE1BQU0sWUFBWSxPQUMzQixLQUFJO0FBQ0YsTUFBSSxtQkFBbUIsVUFBVSxTQUFTLENBQ3hDLFFBQU8sRUFBRSxrQkFBa0I7RUFHN0IsTUFBTSxVQUFVQyxvQ0FBb0IsU0FBUztBQUM3QyxNQUFJLENBQUMsUUFDSCxPQUFNLElBQUksTUFBTSxxREFBcUQ7QUFHdkUsTUFBSSxRQUFRLFNBQVNILDJCQUFZLGVBQWU7QUFDOUMsdUJBQW9CLFFBQVE7QUFDNUIsc0JBQW1CO0FBQ25CLHNCQUFtQixNQUFNOztBQUczQixnQkFBYyxtQkFBbUIsU0FBUyxhQUFjLFlBQVk7VUFDN0RJLE9BQWdCO0FBQ3ZCLGdDQUFPLFFBQ0wsZ0VBQWdFLFVBQ2hFLE9BQ0E7R0FDRSxjQUFjO0dBQ2Q7R0FDRCxDQUNGOztBQUlMLFFBQU8sRUFBRSxrQkFBa0I7O0FBRzdCLE1BQU0sdUJBQXVCLEVBQUUsZUFBd0M7Q0FDckUsTUFBTSxzQ0FBMkJDLCtCQUFrQjtDQUNuRCxNQUFNLENBQUMsbUJBQW1CLDRDQUFpQyxNQUFNO0NBQ2pFLE1BQU0sMENBQStCQyxxQ0FBbUI7Q0FFeEQsTUFBTSxDQUFDLFVBQVUsa0NBQW9DQywrQkFBYTtDQUNsRSxNQUFNLHNDQUEyQkMsaUNBQWU7Q0FDaEQsTUFBTSx1Q0FBNEJDLGtDQUFnQjtDQUNsRCxNQUFNLENBQUMsb0JBQW9CLDRDQUN6QkMseUNBQ0Q7Q0FDRCxNQUFNLENBQUMsbUJBQW1CLDJDQUN4QkMsd0NBQ0Q7Q0FDRCxNQUFNLDBDQUErQkMscUNBQW1CO0NBQ3hELE1BQU0scUNBQTBCQyxnQ0FBbUI7Q0FDbkQsTUFBTSw4Q0FBbUNDLHFDQUF3QjtDQUNqRSxNQUFNLGdEQUFxQ0Msa0NBQXFCO0NBQ2hFLE1BQU0sNENBQWlDQyxnQ0FBbUI7Q0FDMUQsTUFBTSxpQ0FBc0JDLDJCQUFXO0NBQ3ZDLE1BQU0saUNBQXNCQywyQkFBVztDQUN2QyxNQUFNLHlDQUE4QkMsbUNBQW1CO0NBRXZELE1BQU0sUUFBUTtDQUVkLE1BQU0sc0NBQTJCQyxnQ0FBZ0I7Q0FDakQsTUFBTSxrQkFBa0JDLHdEQUEwQjtDQUNsRCxNQUFNLHFCQUFxQkMscURBQXVCO0NBQ2xELE1BQU0sNENBQWlDQywyQ0FBd0I7Q0FDL0QsTUFBTSwyQ0FBZ0NDLDJDQUF3QjtDQUM5RCxNQUFNLEVBQUUsVUFBVUMscURBQXNCO0NBRXhDLE1BQU0sK0NBQ0osT0FDRSxZQUMyQztBQUMzQyxnQkFBY0MsK0JBQWtCLHFCQUFxQjtFQUNyRCxNQUFNLFNBQVNDLHFDQUFrQix5QkFBeUIsUUFBUTtBQUVsRSxNQUFJO0FBQ0YscUJBQWtCLE1BQU07R0FFeEIsTUFBTSxFQUFFLHFCQUFxQixNQUFNLHlCQUNqQyxRQUNBLG9CQUNBLHFCQUNBLGFBQ0Esb0JBQ0EsT0FDRDtBQUVELFVBQU8sRUFBRSxrQkFBa0I7V0FDcEIsR0FBRztBQUNWLHdCQUFxQixHQUFHLG1CQUFtQixZQUFZO0FBQ3ZELFNBQU07WUFDRTtBQUNSLGlCQUFjRCwrQkFBa0IsdUJBQXVCOztJQUczRDtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0QsQ0FDRjtDQUVELE1BQU0sd0NBQTZCLFlBQVk7QUFDN0MsZ0JBQWNBLCtCQUFrQix3QkFBd0I7QUFDeEQsd0JBQXNCLEtBQUs7QUFDM0IsaUJBQWUsRUFBRSxDQUFDO0VBRWxCLE1BQU0sMEJBQTBCRSxtQ0FBc0I7R0FDcEQsWUFBWSxFQUFFO0dBQ2Qsa0JBQWtCLGdCQUFnQjtHQUNuQyxDQUFDO0VBQ0YsTUFBTSxXQUFXLE1BQU1ELHFDQUFrQixtQkFDdkMsd0JBQ0Q7QUFHRCxpQkFDRSxTQUFTLE1BQU0sR0FBRyxNQUFNLEVBQUUsUUFBUSxTQUFTLEVBQUUsUUFBUSxPQUFPLENBQzdEO0FBQ0Qsd0JBQXNCLE1BQU07QUFDNUIsZ0JBQWNELCtCQUFrQiwwQkFBMEI7SUFDekQ7RUFDRDtFQUNBO0VBQ0E7RUFDQSxnQkFBZ0I7RUFDakIsQ0FBQztDQUVGLE1BQU0sc0NBQ0osT0FBTyxZQUFpQztBQUN0QyxNQUFJO0dBQ0YsTUFBTSxpQkFDSixXQUNBRSxtQ0FBc0I7SUFDcEI7SUFDQSxrQkFBa0IsZ0JBQWdCO0lBQ25DLENBQUM7QUFFSix3QkFBcUIsS0FBSztBQUMxQixrQkFBZSxFQUFFLENBQUM7R0FDbEIsTUFBTSxjQUFjLEtBQUssS0FBSztBQUU5QixTQUFNLHNCQUFzQixlQUFlO0FBRTNDLDJCQUF3QixhQUFhLGdCQUFnQixNQUFNO0FBQzNELFNBQU0sZ0JBQWdCO1dBQ2YsT0FBTztBQUNkLGlDQUFPLFNBQVMsa0NBQWtDLE1BQU07WUFDaEQ7QUFHUiwyQkFBd0IsV0FBVyxLQUFLLEVBQUUsY0FBYyxRQUFRLENBQUM7QUFDakUscUJBQWtCLE1BQU07QUFDeEIsd0JBQXFCLE1BQU07O0lBRy9CO0VBQ0U7RUFDQSxnQkFBZ0I7RUFDaEI7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDRCxDQUNGO0FBRUQsNEJBQWdCO0VBQ2QsTUFBTSxvQkFBb0IsWUFBWTtBQUNwQyxPQUFJLHFCQUFxQixDQUFDLGtCQUN4QjtBQUdGLE9BQ0csWUFBWSxZQUFZLFNBQVMsQ0FBQyxZQUFZLGFBQzlDLFlBQVksWUFBWSxTQUFTLENBQUMsWUFBWSxTQUM5QyxZQUFZLFlBQVksZ0JBQWdCLENBQUMsWUFBWSxLQUN0RDtBQUNBLGtDQUFPLFNBQ0wsMkRBQ0E7S0FDRTtLQUNBO0tBQ0QsQ0FDRjtBQUNEOztBQUdGLGlDQUFPLFNBQ0wsMENBQTBDLGtCQUFrQixlQUFlLG9CQUM1RTtBQUNELE9BQUk7QUFDRixVQUFNLGNBQWM7QUFDcEIsa0NBQU8sUUFBUSw2QkFBNkI7WUFDckN4QixPQUFnQjtBQUN2QixrQ0FBTyxTQUFTLHFDQUFxQyxNQUFNOzs7QUFHL0QsTUFBSSxzQkFBc0IsRUFDeEIsb0JBQW1CO0lBRXBCO0VBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0QsQ0FBQztBQUVGLDRCQUFnQjtBQUNkLE1BQUkscUJBQXFCLG1CQUFtQjtBQUMxQyxpQ0FBTyxTQUNMLGlFQUFpRSxrQkFBa0Isa0JBQWtCLG9CQUN0RztBQUNEOztFQUdGLE1BQU0sY0FBYyxZQUFZO0FBQzlCLE9BQUk7QUFDRixrQ0FBTyxTQUNMLHVEQUF1RCxrQkFBa0Isa0JBQWtCLG9CQUM1RjtJQUtELE1BQU0sRUFBRSxVQUFVLGtCQUFrQiw2QkFDbEMsTUFBTXVCLHFDQUFrQixhQUFhLE9BQU8sUUFBUSxPQUFPO0FBQzdELGdCQUFZLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUNsQyxrQkFBYyxDQUFDLEdBQUdFLGFBQVcsQ0FBQztBQUM5QixrQkFBYztZQUNQLE9BQU87QUFFZCxrQ0FBTyxRQUNMLGlDQUFpQyxPQUFPLFNBQVMsU0FDakQsTUFDRDtBQUNELFFBQUksaUJBQWlCQyx3Q0FBd0I7S0FDM0MsTUFBTSxpQkFBaUJDLG9DQUFzQjtLQUM3QyxNQUFNLGFBQWFDLG1DQUFxQixFQUFFLGFBQWEsQ0FBQztBQUN4RCxpQkFBWSxFQUFFLENBQUM7QUFDZiwwQkFBcUI7QUFDckIsU0FBSSxZQUFZO01BQ2QsTUFBTSxVQUFVSixtQ0FBc0I7T0FDcEMsWUFBWSxDQUFDLGdCQUFnQixXQUFXO09BQ3hDLGtCQUFrQixnQkFBZ0I7T0FDbkMsQ0FBQztBQUNGLG1CQUFhLFFBQVE7OzthQUdqQjtBQUNSLHlCQUFxQixLQUFLOzs7QUFJOUIsZUFBYTtJQUNaLEVBQUUsQ0FBQztDQUVOLE1BQU0saUNBQXNCLFlBQVk7QUFDdEMsTUFBSTtBQUNGLE9BQUksQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsT0FBTztJQUN0RCxNQUFNLEVBQUUsVUFBVSxxQkFDaEIsTUFBTUQscUNBQWtCLGFBQWEsT0FBTyxRQUFRLE9BQU87QUFFN0QsUUFBSSxpQkFBaUIsU0FBUyxTQUFTLE9BQ3JDLGFBQVksQ0FBQyxHQUFHLGlCQUFpQixDQUFDOztXQVUvQnZCLE9BQWdCO0FBQ3ZCLGlDQUFPLFNBQVMsNkJBQTZCLE1BQU07O0lBRXBEO0VBQ0Q7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLFNBQVM7RUFDVDtFQUNELENBQUM7QUFHRiw0QkFBZ0I7QUFDZCxTQUFPLGlCQUFpQixTQUFTLFFBQVE7QUFFekMsZUFBYTtBQUNYLFVBQU8sb0JBQW9CLFNBQVMsUUFBUTs7SUFFN0MsQ0FBQyxRQUFRLENBQUM7Q0FFYixNQUFNLHdDQUE2QixFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRTNDLFFBQ0UsMkNBQUMsWUFBWTtFQUFTLE9BQU87RUFBYztHQUFnQyJ9
@@ -1,10 +1,10 @@
1
- import * as react0 from "react";
1
+ import * as react1 from "react";
2
2
  import { ReactNode } from "react";
3
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/contexts/chatContext/chatContext.d.ts
6
6
  interface ChatContextParams {}
7
- declare const ChatContext: react0.Context<ChatContextParams | undefined>;
7
+ declare const ChatContext: react1.Context<ChatContextParams | undefined>;
8
8
  declare const ChatContextProvider: ({
9
9
  children
10
10
  }: {
@@ -1,6 +1,6 @@
1
1
  import * as react4 from "react";
2
2
  import { ReactNode } from "react";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/contexts/chatContext/chatContext.d.ts
6
6
  interface ChatContextParams {}
@@ -9,7 +9,7 @@ declare const ChatContextProvider: ({
9
9
  children
10
10
  }: {
11
11
  children: ReactNode;
12
- }) => react_jsx_runtime0.JSX.Element;
12
+ }) => react_jsx_runtime1.JSX.Element;
13
13
  //#endregion
14
14
  export { ChatContext, type ChatContextParams, ChatContextProvider };
15
15
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udGV4dHMvY2hhdENvbnRleHQvY2hhdENvbnRleHQuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmludGVyZmFjZSBDaGF0Q29udGV4dFBhcmFtcyB7XG59XG5kZWNsYXJlIGNvbnN0IENoYXRDb250ZXh0OiBpbXBvcnQoXCJyZWFjdFwiKS5Db250ZXh0PENoYXRDb250ZXh0UGFyYW1zIHwgdW5kZWZpbmVkPjtcbmRlY2xhcmUgY29uc3QgQ2hhdENvbnRleHRQcm92aWRlcjogKHsgY2hpbGRyZW4gfToge1xuICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG59KSA9PiBpbXBvcnQoXCJyZWFjdC9qc3gtcnVudGltZVwiKS5KU1guRWxlbWVudDtcbmV4cG9ydCB7IENoYXRDb250ZXh0LCBDaGF0Q29udGV4dFByb3ZpZGVyIH07XG5leHBvcnQgdHlwZSB7IENoYXRDb250ZXh0UGFyYW1zIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJO0FBQzdCLElBQUksY0FBYztDQUFDO09BQVc7T0FBb0IsT0FBQTtDQUFBO0FBQ2xELElBQUksc0JBQW1CO0NBQUE7T0FBQTtPQUFBO09BQUEsbUJBQUEsSUFBQTtDQUFBIn0=