@envive-ai/react-hooks 0.2.6-alpha-marlo.0 → 0.2.6-alpha-arthur-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 (679) hide show
  1. package/dist/AmplitudeOperations-BNFYCh-W.js +34 -0
  2. package/dist/AmplitudeOperations-CHlghWFQ.cjs +41 -0
  3. package/dist/{NewOrgConfig-BfbTlFg1.js → NewOrgConfig-BeoqDaSB.js} +2 -2
  4. package/dist/{NewOrgConfig-DJm6_abA.cjs → NewOrgConfig-DgWHQyUc.cjs} +2 -2
  5. package/dist/TrackComponentVisibleEvent-HbfzgXtF.js +53 -0
  6. package/dist/TrackComponentVisibleEvent-vsaQaHKi.cjs +60 -0
  7. package/dist/amplitudeContext-Dp-Tm43M.cjs +253 -0
  8. package/dist/amplitudeContext-DwszOulA.js +237 -0
  9. package/dist/amplitudeTrackEventAtom-nkZxYoLu.cjs +15 -0
  10. package/dist/amplitudeTrackEventAtom-pJbLG4En.js +8 -0
  11. package/dist/api-D4HaU2Gf.js +166 -0
  12. package/dist/api-D4Xoibs9.cjs +239 -0
  13. package/dist/app-BCuEBoPJ.cjs +36 -0
  14. package/dist/app-D73Rksby.js +14 -0
  15. package/dist/application/models/graphql/index.cjs +3 -3
  16. package/dist/application/models/graphql/index.d.cts +2 -2
  17. package/dist/application/models/graphql/index.d.ts +2 -2
  18. package/dist/application/models/graphql/index.js +2 -3
  19. package/dist/application/models/guards/api/index.cjs +3 -3
  20. package/dist/application/models/guards/api/index.d.cts +2 -2
  21. package/dist/application/models/guards/api/index.d.ts +2 -2
  22. package/dist/application/models/guards/api/index.js +3 -3
  23. package/dist/application/models/guards/utils.cjs +1 -1
  24. package/dist/application/models/guards/utils.d.ts +1 -1
  25. package/dist/application/models/guards/utils.js +1 -1
  26. package/dist/application/models/index.cjs +7 -23
  27. package/dist/application/models/index.d.cts +167 -11
  28. package/dist/application/models/index.d.ts +168 -12
  29. package/dist/application/models/index.js +7 -11
  30. package/dist/application/utils/index.cjs +10 -19
  31. package/dist/application/utils/index.d.cts +13 -63
  32. package/dist/application/utils/index.d.ts +13 -63
  33. package/dist/application/utils/index.js +10 -19
  34. package/dist/{atomStore-DXTVqiKc.js → atomStore-BuopbV9k.js} +1 -1
  35. package/dist/{atomStore-DNji91Im.cjs → atomStore-CZKe3itM.cjs} +1 -1
  36. package/dist/atoms/app/index.cjs +10 -24
  37. package/dist/atoms/app/index.d.cts +9 -21
  38. package/dist/atoms/app/index.d.ts +8 -20
  39. package/dist/atoms/app/index.js +7 -20
  40. package/dist/atoms/atomStore/index.cjs +1 -1
  41. package/dist/atoms/atomStore/index.js +1 -1
  42. package/dist/atoms/chat/index.cjs +23 -21
  43. package/dist/atoms/chat/index.d.cts +36 -45
  44. package/dist/atoms/chat/index.d.ts +34 -43
  45. package/dist/atoms/chat/index.js +23 -21
  46. package/dist/atoms/globalSearch/index.cjs +1 -2
  47. package/dist/atoms/globalSearch/index.d.cts +6 -6
  48. package/dist/atoms/globalSearch/index.d.ts +6 -6
  49. package/dist/atoms/globalSearch/index.js +1 -2
  50. package/dist/atoms/org/index.cjs +11 -11
  51. package/dist/atoms/org/index.d.cts +19 -31
  52. package/dist/atoms/org/index.d.ts +19 -31
  53. package/dist/atoms/org/index.js +3 -3
  54. package/dist/atoms/search/index.cjs +8 -47
  55. package/dist/atoms/search/index.d.cts +76 -14
  56. package/dist/atoms/search/index.d.ts +76 -14
  57. package/dist/atoms/search/index.js +8 -29
  58. package/dist/atoms/search/utils.cjs +1 -1
  59. package/dist/atoms/search/utils.d.cts +1 -1
  60. package/dist/atoms/search/utils.d.ts +1 -1
  61. package/dist/atoms/search/utils.js +1 -1
  62. package/dist/cdnContext-Bs73r4Xd.cjs +53 -0
  63. package/dist/cdnContext-DJ1pDg-l.js +38 -0
  64. package/dist/chat-BqUkaIbS.js +226 -0
  65. package/dist/chat-zxjIy0qQ.cjs +326 -0
  66. package/dist/chatState-CMoQ1TMs.cjs +119 -0
  67. package/dist/chatState-DRJrYuno.js +33 -0
  68. package/dist/config/index.d.cts +4 -4
  69. package/dist/config/index.d.ts +4 -4
  70. package/dist/config/locators/components/chat/index.d.cts +1 -1
  71. package/dist/config/locators/components/chat/index.d.ts +1 -1
  72. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  73. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  74. package/dist/config/locators/components/common/index.d.cts +1 -1
  75. package/dist/config/locators/components/common/index.d.ts +1 -1
  76. package/dist/config/locators/components/index.d.cts +1 -1
  77. package/dist/config/locators/components/index.d.ts +1 -1
  78. package/dist/config/locators/components/search/index.d.cts +1 -1
  79. package/dist/config/locators/components/search/index.d.ts +1 -1
  80. package/dist/config/locators/index.d.cts +4 -4
  81. package/dist/config/locators/index.d.ts +4 -4
  82. package/dist/contexts/amplitudeContext/index.cjs +11 -22
  83. package/dist/contexts/amplitudeContext/index.d.cts +11 -2
  84. package/dist/contexts/amplitudeContext/index.d.ts +11 -2
  85. package/dist/contexts/amplitudeContext/index.js +10 -20
  86. package/dist/contexts/atomProvider/index.cjs +18 -0
  87. package/dist/contexts/atomProvider/index.d.cts +11 -0
  88. package/dist/contexts/atomProvider/index.d.ts +11 -0
  89. package/dist/contexts/atomProvider/index.js +15 -0
  90. package/dist/contexts/cdnContext/index.cjs +4 -4
  91. package/dist/contexts/cdnContext/index.d.cts +2 -6
  92. package/dist/contexts/cdnContext/index.d.ts +2 -6
  93. package/dist/contexts/cdnContext/index.js +4 -4
  94. package/dist/contexts/enviveConfigContext/index.cjs +6 -4
  95. package/dist/contexts/enviveConfigContext/index.d.cts +5 -25
  96. package/dist/contexts/enviveConfigContext/index.d.ts +5 -25
  97. package/dist/contexts/enviveConfigContext/index.js +6 -5
  98. package/dist/contexts/enviveCssContext/index.cjs +17 -19
  99. package/dist/contexts/enviveCssContext/index.d.cts +3 -5
  100. package/dist/contexts/enviveCssContext/index.d.ts +3 -5
  101. package/dist/contexts/enviveCssContext/index.js +17 -19
  102. package/dist/contexts/featureFlagContext/index.cjs +9 -10
  103. package/dist/contexts/featureFlagContext/index.d.cts +3 -11
  104. package/dist/contexts/featureFlagContext/index.d.ts +3 -11
  105. package/dist/contexts/featureFlagContext/index.js +6 -7
  106. package/dist/contexts/featureFlagServiceContext/index.cjs +4 -3
  107. package/dist/contexts/featureFlagServiceContext/index.d.cts +1 -4
  108. package/dist/contexts/featureFlagServiceContext/index.d.ts +1 -4
  109. package/dist/contexts/featureFlagServiceContext/index.js +4 -3
  110. package/dist/contexts/graphqlContext/index.cjs +10 -13
  111. package/dist/contexts/graphqlContext/index.d.cts +11 -14
  112. package/dist/contexts/graphqlContext/index.d.ts +11 -14
  113. package/dist/contexts/graphqlContext/index.js +10 -13
  114. package/dist/contexts/localStorageContext/index.cjs +3 -3
  115. package/dist/contexts/localStorageContext/index.d.cts +3 -22
  116. package/dist/contexts/localStorageContext/index.d.ts +3 -22
  117. package/dist/contexts/localStorageContext/index.js +4 -3
  118. package/dist/contexts/newOrgConfigContext/index.cjs +15 -17
  119. package/dist/contexts/newOrgConfigContext/index.d.cts +12 -15
  120. package/dist/contexts/newOrgConfigContext/index.d.ts +12 -15
  121. package/dist/contexts/newOrgConfigContext/index.js +15 -17
  122. package/dist/contexts/searchContext/index.cjs +27 -24
  123. package/dist/contexts/searchContext/index.d.cts +2 -7
  124. package/dist/contexts/searchContext/index.d.ts +2 -7
  125. package/dist/contexts/searchContext/index.js +27 -24
  126. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  127. package/dist/contexts/sessionStorageContext/index.d.cts +2 -6
  128. package/dist/contexts/sessionStorageContext/index.d.ts +2 -6
  129. package/dist/contexts/sessionStorageContext/index.js +2 -2
  130. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  131. package/dist/contexts/shopifyUrlContext/index.d.cts +2 -11
  132. package/dist/contexts/shopifyUrlContext/index.d.ts +2 -11
  133. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  134. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  135. package/dist/contexts/systemSettingsContext/index.d.cts +4 -14
  136. package/dist/contexts/systemSettingsContext/index.d.ts +2 -12
  137. package/dist/contexts/systemSettingsContext/index.js +4 -4
  138. package/dist/contexts/userIdentityContext/index.cjs +22 -21
  139. package/dist/contexts/userIdentityContext/index.d.cts +11 -2
  140. package/dist/contexts/userIdentityContext/index.d.ts +11 -2
  141. package/dist/contexts/userIdentityContext/index.js +20 -19
  142. package/dist/dist-B7BErEyV.cjs +6019 -0
  143. package/dist/dist-CtkINi1R.js +5923 -0
  144. package/dist/domObserver-CVhsCSkS.js +285 -0
  145. package/dist/{domObserver-v9ODTyfT.js → domObserver-LCBj1xw4.cjs} +23 -4
  146. package/dist/enviveConfig-6XJa6HAF.cjs +125 -0
  147. package/dist/enviveConfig-Cw7o9TLb.js +63 -0
  148. package/dist/enviveConfigContext-D_bCeK56.js +48 -0
  149. package/dist/enviveConfigContext-DoBbJZp_.cjs +69 -0
  150. package/dist/events/index.cjs +2 -3
  151. package/dist/events/index.d.cts +2 -15
  152. package/dist/events/index.d.ts +2 -15
  153. package/dist/events/index.js +2 -2
  154. package/dist/events-CgFGtanE.cjs +69 -0
  155. package/dist/events-WOOrnUAx.js +63 -0
  156. package/dist/exceptions/index.cjs +4 -0
  157. package/dist/exceptions/index.d.cts +12 -0
  158. package/dist/exceptions/index.d.ts +12 -0
  159. package/dist/exceptions/index.js +3 -0
  160. package/dist/exceptions-BjDgLzGi.cjs +32 -0
  161. package/dist/exceptions-CUGY31Ua.js +20 -0
  162. package/dist/featureFlagServiceContext-C6nTNI_i.d.ts +24 -0
  163. package/dist/featureFlagServiceContext-ClnlCJV5.d.cts +24 -0
  164. package/dist/featureFlagServiceContext-DQYo0d6Q.cjs +66 -0
  165. package/dist/featureFlagServiceContext-GIO9xKV0.js +46 -0
  166. package/dist/{globalSearch-Ccxq8hNF.js → globalSearch-B8jHLScz.js} +1 -1
  167. package/dist/{globalSearch-FBk2epe8.cjs → globalSearch-JJI1Fijh.cjs} +1 -1
  168. package/dist/graphql-CvAHWmel.js +46 -0
  169. package/dist/graphql-JaGqsToc.cjs +70 -0
  170. package/dist/graphqlContext-CXyZamIk.cjs +108 -0
  171. package/dist/graphqlContext-cAZtpn-W.js +94 -0
  172. package/dist/hooks/AmplitudeOperations/index.cjs +11 -22
  173. package/dist/hooks/AmplitudeOperations/index.d.cts +2 -2
  174. package/dist/hooks/AmplitudeOperations/index.d.ts +2 -2
  175. package/dist/hooks/AmplitudeOperations/index.js +10 -21
  176. package/dist/hooks/AppDetails/index.cjs +25 -22
  177. package/dist/hooks/AppDetails/index.d.cts +1 -12
  178. package/dist/hooks/AppDetails/index.d.ts +1 -12
  179. package/dist/hooks/AppDetails/index.js +25 -22
  180. package/dist/hooks/CdnOperations/index.cjs +4 -4
  181. package/dist/hooks/CdnOperations/index.js +4 -4
  182. package/dist/hooks/ChatToggle/index.cjs +31 -25
  183. package/dist/hooks/ChatToggle/index.d.cts +2 -2
  184. package/dist/hooks/ChatToggle/index.d.ts +2 -2
  185. package/dist/hooks/ChatToggle/index.js +28 -22
  186. package/dist/hooks/ChatToggleAnalytics/index.cjs +13 -24
  187. package/dist/hooks/ChatToggleAnalytics/index.d.cts +2 -2
  188. package/dist/hooks/ChatToggleAnalytics/index.d.ts +2 -2
  189. package/dist/hooks/ChatToggleAnalytics/index.js +12 -23
  190. package/dist/hooks/CustomerSupportHandoff/index.cjs +2 -2
  191. package/dist/hooks/CustomerSupportHandoff/index.js +2 -2
  192. package/dist/hooks/Debounce/index.cjs +20 -2
  193. package/dist/hooks/Debounce/index.d.ts +1 -1
  194. package/dist/hooks/Debounce/index.js +18 -2
  195. package/dist/hooks/ElementObserver/index.cjs +4 -6
  196. package/dist/hooks/ElementObserver/index.d.cts +4 -25
  197. package/dist/hooks/ElementObserver/index.d.ts +4 -25
  198. package/dist/hooks/ElementObserver/index.js +4 -6
  199. package/dist/hooks/GrabAndScroll/index.cjs +1 -1
  200. package/dist/hooks/GrabAndScroll/index.d.cts +3 -3
  201. package/dist/hooks/GrabAndScroll/index.js +1 -1
  202. package/dist/hooks/GraphQLConfig/index.cjs +11 -14
  203. package/dist/hooks/GraphQLConfig/index.d.cts +2 -13
  204. package/dist/hooks/GraphQLConfig/index.d.ts +2 -13
  205. package/dist/hooks/GraphQLConfig/index.js +11 -14
  206. package/dist/hooks/IdentifyUser/index.cjs +22 -21
  207. package/dist/hooks/IdentifyUser/index.js +21 -20
  208. package/dist/hooks/ImageResolver/index.cjs +20 -29
  209. package/dist/hooks/ImageResolver/index.js +20 -29
  210. package/dist/hooks/Intersection/index.cjs +1 -1
  211. package/dist/hooks/Intersection/index.js +1 -1
  212. package/dist/hooks/LocalStorageOperations/index.cjs +8 -7
  213. package/dist/hooks/LocalStorageOperations/index.js +4 -3
  214. package/dist/hooks/MessageFilter/index.cjs +3 -12
  215. package/dist/hooks/MessageFilter/index.d.cts +2 -17
  216. package/dist/hooks/MessageFilter/index.d.ts +2 -17
  217. package/dist/hooks/MessageFilter/index.js +2 -11
  218. package/dist/hooks/NewOrgConfig/index.cjs +16 -18
  219. package/dist/hooks/NewOrgConfig/index.d.cts +3 -16
  220. package/dist/hooks/NewOrgConfig/index.d.ts +3 -16
  221. package/dist/hooks/NewOrgConfig/index.js +16 -18
  222. package/dist/hooks/Search/index.cjs +304 -173
  223. package/dist/hooks/Search/index.d.cts +3 -57
  224. package/dist/hooks/Search/index.d.ts +3 -57
  225. package/dist/hooks/Search/index.js +291 -161
  226. package/dist/hooks/SearchOperations/index.cjs +28 -25
  227. package/dist/hooks/SearchOperations/index.d.cts +2 -3
  228. package/dist/hooks/SearchOperations/index.d.ts +2 -3
  229. package/dist/hooks/SearchOperations/index.js +28 -25
  230. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  231. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  232. package/dist/hooks/ShopifyUrlOperations/index.cjs +3 -3
  233. package/dist/hooks/ShopifyUrlOperations/index.d.cts +3 -5
  234. package/dist/hooks/ShopifyUrlOperations/index.d.ts +3 -5
  235. package/dist/hooks/ShopifyUrlOperations/index.js +3 -3
  236. package/dist/hooks/SnapCalculator/index.cjs +1 -1
  237. package/dist/hooks/SnapCalculator/index.d.cts +4 -3
  238. package/dist/hooks/SnapCalculator/index.d.ts +4 -3
  239. package/dist/hooks/SnapCalculator/index.js +1 -1
  240. package/dist/hooks/SystemSettingsContext/index.cjs +17 -6
  241. package/dist/hooks/SystemSettingsContext/index.d.cts +5 -15
  242. package/dist/hooks/SystemSettingsContext/index.d.ts +4 -14
  243. package/dist/hooks/SystemSettingsContext/index.js +15 -6
  244. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +11 -21
  245. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +2 -3
  246. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -3
  247. package/dist/hooks/TrackComponentVisibleEvent/index.js +11 -21
  248. package/dist/hooks/UpdateAnalyticsProps/index.cjs +16 -24
  249. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +1 -1
  250. package/dist/hooks/UpdateAnalyticsProps/index.js +12 -20
  251. package/dist/hooks/utils.d.cts +20 -13
  252. package/dist/hooks/utils.d.ts +20 -13
  253. package/dist/index-BVZbvpx_.d.cts +11 -0
  254. package/dist/{index-FQjyuD3D.d.cts → index-BbqT4BQv.d.cts} +1 -1
  255. package/dist/{index-Da1s8h5C.d.cts → index-CAJq_8bO.d.cts} +1 -1
  256. package/dist/index-CMZcE7pk.d.cts +224 -0
  257. package/dist/index-ChRMX2kc.d.ts +42 -0
  258. package/dist/{index-DzbkQtaK.d.cts → index-ChiZg0yw.d.cts} +1 -1
  259. package/dist/{index-DJTrxIFJ.d.ts → index-CkaLTFlB.d.ts} +1 -1
  260. package/dist/{index-BeYfyZ6k.d.ts → index-Cl35ht05.d.ts} +1 -1
  261. package/dist/{index-h809JLbL.d.ts → index-DIq5F_-r.d.ts} +1 -1
  262. package/dist/{index-xHVrsrbz.d.ts → index-DijHU7yp.d.ts} +1 -1
  263. package/dist/index-PktRD1En.d.ts +11 -0
  264. package/dist/{index-9NE86em3.d.cts → index-npqPeJ1g.d.cts} +1 -1
  265. package/dist/index-qOBU4GEh.d.cts +42 -0
  266. package/dist/index-smzckpKv.d.ts +224 -0
  267. package/dist/interceptors/index.cjs +28 -3
  268. package/dist/interceptors/index.d.cts +4 -15
  269. package/dist/interceptors/index.d.ts +4 -15
  270. package/dist/interceptors/index.js +25 -3
  271. package/dist/localStorageContext-CvwraLEo.js +90 -0
  272. package/dist/localStorageContext-DIIUUEvL.cjs +104 -0
  273. package/dist/{logger-W3lqg-4b.js → logger-BMVdhQOV.js} +1 -1
  274. package/dist/{logger-TBIl4uIH.cjs → logger-BqHq67zN.cjs} +1 -1
  275. package/dist/models-DmsMlaHT.js +1118 -0
  276. package/dist/models-wh2gh_Qz.cjs +1305 -0
  277. package/dist/{newOrgConfigAtom-DxILMn2I.cjs → newOrgConfigAtom-vEChAMrW.cjs} +1 -1
  278. package/dist/newOrgConfigAtom-wQeGYEFq.js +8 -0
  279. package/dist/newOrgConfigContext-C8uWGgkE.cjs +70 -0
  280. package/dist/newOrgConfigContext-garCXaH1.js +55 -0
  281. package/dist/nodeSelector-BYEAyrsj.d.cts +28 -0
  282. package/dist/nodeSelector-DU-o1I1d.d.ts +28 -0
  283. package/dist/org-DEzeBBk6.js +22 -0
  284. package/dist/org-Ky10pcuq.cjs +77 -0
  285. package/dist/orgAnalyticsConfig-Bxm8BZch.js +14 -0
  286. package/dist/orgAnalyticsConfig-DU1aESDh.cjs +39 -0
  287. package/dist/search-C4ZLnfzE.js +233 -0
  288. package/dist/search-DUJiAeEo.cjs +312 -0
  289. package/dist/searchContext-BrPSGjRo.js +130 -0
  290. package/dist/searchContext-Ck94DuBO.cjs +146 -0
  291. package/dist/searchServiceAdapter-C3_FRUly.js +16 -0
  292. package/dist/searchServiceAdapter-tPd0NClV.cjs +34 -0
  293. package/dist/sessionStorageContext-CBwNI1Va.js +52 -0
  294. package/dist/sessionStorageContext-CmHIsV7a.cjs +66 -0
  295. package/dist/shopifyUrlContext-C3gw4ZIN.js +61 -0
  296. package/dist/shopifyUrlContext-ZJtT_0XX.cjs +75 -0
  297. package/dist/systemSettingsContext-DzAyy0iP.js +39 -0
  298. package/dist/systemSettingsContext-ru4nA9k_.cjs +60 -0
  299. package/dist/types/index.cjs +3 -48
  300. package/dist/types/index.d.cts +2 -17
  301. package/dist/types/index.d.ts +2 -17
  302. package/dist/types/index.js +2 -44
  303. package/dist/types-1iJ_FnQQ.cjs +39 -0
  304. package/dist/types-D5du68Vp.js +27 -0
  305. package/dist/urlsParser-Dax4iVNC.cjs +78 -0
  306. package/dist/urlsParser-NAp2LwWP.js +42 -0
  307. package/dist/useAppDetails-Bg1yCUZi.cjs +41 -0
  308. package/dist/useAppDetails-Buzm9yIj.js +33 -0
  309. package/dist/useGraphQLConfig-B6CiGP57.cjs +76 -0
  310. package/dist/useGraphQLConfig-f2MK-FPn.js +63 -0
  311. package/dist/{useIntersection-Cncgxdmy.js → useIntersection-UEO0Cezc.js} +1 -1
  312. package/dist/{useIntersection-m4PEpvG7.cjs → useIntersection-rV0Q8mBH.cjs} +1 -1
  313. package/dist/userIdentityContext-B8XLgxMQ.cjs +431 -0
  314. package/dist/userIdentityContext-DgFLendI.js +414 -0
  315. package/dist/{utils-DIvMgPe8.js → utils-B1LVzQYK.js} +1 -1
  316. package/dist/{utils-DpneNSJf.d.ts → utils-BLe5oreh.d.ts} +1 -1
  317. package/dist/{utils-CqBxIpEV.js → utils-B_cnJJAH.js} +1 -1
  318. package/dist/{utils-CDw74BCO.cjs → utils-CiJLDPjY.cjs} +1 -1
  319. package/dist/utils-CxDOv-yL.js +607 -0
  320. package/dist/utils-D_kATUj6.js +1 -1
  321. package/dist/utils-DucG4gQ7.cjs +716 -0
  322. package/dist/{utils-2SWrJ12w.cjs → utils-_Q_-LvZS.cjs} +1 -1
  323. package/dist/utils-hYTjy7hJ.cjs +1 -1
  324. package/dist/variant-Ben5gKtM.js +93 -0
  325. package/dist/variant-CvYVVCqU.cjs +107 -0
  326. package/package.json +13 -36
  327. package/src/application/commerce-api.ts +44 -38
  328. package/src/application/models/graphql/index.ts +1 -0
  329. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -23
  330. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -89
  331. package/src/application/models/guards/api/isApiFormResponse.ts +4 -4
  332. package/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.ts +2 -2
  333. package/src/application/models/guards/api/isApiOrderResponseAttributes.ts +2 -20
  334. package/src/application/models/guards/api/isApiOrgConfigResults.ts +3 -9
  335. package/src/application/models/guards/api/isApiOrganizationConfig.ts +8 -32
  336. package/src/application/models/guards/api/isApiPDPEventAttributes.ts +8 -5
  337. package/src/application/models/guards/api/isApiPLPEventAttributes.ts +14 -10
  338. package/src/application/models/guards/api/isApiPageResponseAttributes.ts +1 -1
  339. package/src/application/models/guards/api/isApiProductResponseAttributes.ts +2 -4
  340. package/src/application/models/guards/api/isApiProductSearchAttributes.ts +9 -6
  341. package/src/application/models/guards/api/isApiProductSearchFilterAttributes.ts +7 -4
  342. package/src/application/models/guards/api/isApiQueryTypedEventAttributes.ts +8 -3
  343. package/src/application/models/guards/api/isApiResponse.ts +22 -15
  344. package/src/application/models/guards/api/isApiReviewResponseAttributes.ts +1 -1
  345. package/src/application/models/guards/api/isApiReviewRichInformation.ts +1 -1
  346. package/src/application/models/guards/api/isApiTextResponseAttributes.ts +1 -1
  347. package/src/application/models/guards/graphQL/isGraphQLColorsConfig.ts +1 -1
  348. package/src/application/models/guards/isBaseEcommerceEvent.ts +1 -2
  349. package/src/application/models/guards/isGA4EcommerceEvent.ts +1 -1
  350. package/src/application/models/guards/isLegacyUAEcommerceEvent.ts +1 -1
  351. package/src/application/models/guards/isMobilePLPChatPlacementParameter.ts +1 -3
  352. package/src/application/models/guards/isSpanxTakeAQuizCtaParameter.ts +5 -3
  353. package/src/application/models/guards/isVariantInfo.ts +6 -1
  354. package/src/application/models/index.ts +30 -95
  355. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  356. package/src/application/models/validators/validateGraphQLColorsConfig.ts +6 -2
  357. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +6 -6
  358. package/src/application/models/validators/validateMobilePLPChatPlacementParameter.ts +5 -3
  359. package/src/application/models/validators/validateOrgConfigResults.ts +6 -5
  360. package/src/application/models/validators/validateOrganizationConfig.ts +11 -8
  361. package/src/application/models/validators/validateResponse.ts +66 -44
  362. package/src/application/models/validators/validateSuggestion.ts +1 -1
  363. package/src/application/models/validators/validateUserEvent.ts +23 -12
  364. package/src/application/utils/analyticsUtils.ts +1 -8
  365. package/src/application/utils/coreContextToApiContext.ts +3 -1
  366. package/src/application/utils/coreUserEventToApiUserEvent.ts +2 -2
  367. package/src/application/utils/elementObserver.ts +1 -1
  368. package/src/application/utils/imageFilter.ts +5 -2
  369. package/src/application/utils/index.ts +20 -21
  370. package/src/application/utils/messageFromFormSubmittedEvent.ts +1 -1
  371. package/src/application/utils/messageFromQueryEvent.ts +1 -1
  372. package/src/application/utils/messageFromResponse.ts +14 -10
  373. package/src/application/utils/messageFromSuggestionEvent.ts +6 -4
  374. package/src/application/utils/mouseEventTypes.ts +1 -1
  375. package/src/application/utils/nextMessageRequestToApiRequest.ts +1 -1
  376. package/src/application/utils/overrides.ts +1 -49
  377. package/src/application/utils/supportedEventRequestToApiRequest.ts +3 -1
  378. package/src/application/utils/urlsParser.ts +1 -7
  379. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  380. package/src/atoms/app/index.ts +11 -39
  381. package/src/atoms/app/variant.ts +1 -1
  382. package/src/atoms/chat/chatState.ts +4 -4
  383. package/src/atoms/chat/form.ts +1 -1
  384. package/src/atoms/chat/messageQueue.ts +27 -47
  385. package/src/atoms/chat/replies.ts +1 -2
  386. package/src/atoms/chat/suggestions.ts +34 -29
  387. package/src/atoms/envive/enviveConfig.ts +15 -20
  388. package/src/atoms/org/customerService.ts +4 -8
  389. package/src/atoms/org/graphqlConfig.ts +7 -15
  390. package/src/atoms/org/index.ts +4 -6
  391. package/src/atoms/org/newOrgConfigAtom.ts +2 -2
  392. package/src/atoms/org/orgAnalyticsConfig.ts +1 -1
  393. package/src/atoms/search/index.ts +0 -1
  394. package/src/atoms/search/productFilters.ts +72 -52
  395. package/src/atoms/search/productRetrievalAPI.ts +72 -0
  396. package/src/atoms/search/productRetrievalAdapter.ts +28 -0
  397. package/src/atoms/search/productSorter.ts +2 -2
  398. package/src/atoms/search/searchAPI.ts +42 -60
  399. package/src/atoms/search/searchServiceAdapter.ts +1 -1
  400. package/src/contexts/amplitudeContext/amplitudeContext.tsx +26 -64
  401. package/src/contexts/atomProvider/atomProvider.tsx +6 -0
  402. package/src/contexts/atomProvider/index.ts +1 -0
  403. package/src/contexts/cdnContext/cdnContext.tsx +1 -6
  404. package/src/contexts/chatContext/chatContext.tsx +5 -2
  405. package/src/contexts/enviveConfigContext/enviveConfigContext.tsx +23 -34
  406. package/src/contexts/enviveCssContext/enviveCssContext.tsx +5 -12
  407. package/src/contexts/featureFlagContext/featureFlagContext.tsx +27 -48
  408. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +11 -3
  409. package/src/contexts/graphqlContext/graphqlContext.tsx +45 -97
  410. package/src/contexts/localStorageContext/localStorageContext.tsx +26 -60
  411. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +21 -25
  412. package/src/contexts/searchContext/searchContext.tsx +30 -49
  413. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +12 -33
  414. package/src/contexts/shopifyUrlContext/shopifyUrlContext.tsx +20 -37
  415. package/src/contexts/systemSettingsContext/systemSettingsContext.tsx +8 -21
  416. package/src/contexts/userIdentityContext/userIdentityContext.tsx +33 -77
  417. package/src/events/index.ts +8 -5
  418. package/src/events/registerAnalyticsListeners.ts +10 -13
  419. package/src/exceptions/index.ts +2 -0
  420. package/src/{types/exceptions → exceptions}/unsupportedProductExceptions.ts +2 -2
  421. package/src/global.d.ts +8 -0
  422. package/src/hooks/AmplitudeOperations/useAmplitudeOperations.ts +6 -11
  423. package/src/hooks/AppDetails/useAppDetails.ts +14 -15
  424. package/src/hooks/ChatToggle/useChatToggle.ts +7 -19
  425. package/src/hooks/ChatToggleAnalytics/useChatToggleAnalytics.ts +4 -4
  426. package/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.ts +1 -1
  427. package/src/hooks/ElementObserver/useElementObserver.ts +14 -32
  428. package/src/hooks/GrabAndScroll/useGrabAndScroll.ts +125 -124
  429. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +5 -7
  430. package/src/hooks/ImageResolver/useImageResolver.ts +24 -31
  431. package/src/hooks/LocalStorageOperations/useLocalStorageOperations.ts +12 -19
  432. package/src/hooks/MessageFilter/useMessageFilter.ts +1 -7
  433. package/src/hooks/Search/useRecommendedProducts.ts +50 -0
  434. package/src/hooks/Search/useSearch.tsx +87 -217
  435. package/src/hooks/Search/useSearchInput.ts +237 -0
  436. package/src/hooks/SearchOperations/useSearchOperations.ts +8 -12
  437. package/src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.ts +8 -14
  438. package/src/hooks/SnapCalculator/useSnapCalculator.ts +1 -2
  439. package/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts +8 -11
  440. package/src/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.ts +11 -25
  441. package/src/hooks/utils.ts +19 -29
  442. package/src/interceptors/index.ts +1 -2
  443. package/src/interceptors/useMessageInterceptor.ts +10 -6
  444. package/src/{application/models/api/response.ts → types/ApiResponse.ts} +35 -29
  445. package/src/types/FilterAttribute.ts +35 -0
  446. package/src/{application/models/message.ts → types/Message.ts} +38 -34
  447. package/src/types/Suggestion.ts +6 -0
  448. package/src/types/index.ts +4 -5
  449. package/src/util/colorVar.ts +4 -0
  450. package/src/util/configVersion.ts +4 -0
  451. package/src/util/domInsertion.ts +17 -0
  452. package/dist/SystemSettingsContext-6ZHzQkCE.cjs +0 -20
  453. package/dist/SystemSettingsContext-BbTKNBvJ.js +0 -13
  454. package/dist/TrackComponentVisibleEvent-BJgNOypY.js +0 -52
  455. package/dist/TrackComponentVisibleEvent-BRC2FTp-.cjs +0 -59
  456. package/dist/amplitudeContext-B73xamNe.d.cts +0 -52
  457. package/dist/amplitudeContext-CZUzMXHl.d.ts +0 -52
  458. package/dist/api-BWSsazAG.js +0 -166
  459. package/dist/api-DeW6rHj3.cjs +0 -239
  460. package/dist/application/models/utilityTypes/index.cjs +0 -1
  461. package/dist/application/models/utilityTypes/index.d.cts +0 -2
  462. package/dist/application/models/utilityTypes/index.d.ts +0 -2
  463. package/dist/application/models/utilityTypes/index.js +0 -3
  464. package/dist/application/models/variantInfo/index.cjs +0 -3
  465. package/dist/application/models/variantInfo/index.d.cts +0 -2
  466. package/dist/application/models/variantInfo/index.d.ts +0 -2
  467. package/dist/application/models/variantInfo/index.js +0 -3
  468. package/dist/atoms/search/types.cjs +0 -5
  469. package/dist/atoms/search/types.d.cts +0 -2
  470. package/dist/atoms/search/types.d.ts +0 -2
  471. package/dist/atoms/search/types.js +0 -3
  472. package/dist/cdnContext-CEGBVVBU.js +0 -38
  473. package/dist/cdnContext-DOSIofl8.cjs +0 -53
  474. package/dist/chat-CqPuT9_V.cjs +0 -393
  475. package/dist/chat-DH70QqJp.js +0 -257
  476. package/dist/chatElementDisplayLocation-CpgV2wR1.d.ts +0 -25
  477. package/dist/chatElementDisplayLocation-DWmfNX_u.d.cts +0 -25
  478. package/dist/chatSearch-C7Y-hb-6.js +0 -295
  479. package/dist/chatSearch-DLV4BUGA.cjs +0 -418
  480. package/dist/chatState-CcFtSqJT.cjs +0 -120
  481. package/dist/chatState-DKnNHmwe.js +0 -34
  482. package/dist/contexts/chatContext/index.cjs +0 -326
  483. package/dist/contexts/chatContext/index.d.cts +0 -15
  484. package/dist/contexts/chatContext/index.d.ts +0 -15
  485. package/dist/contexts/chatContext/index.js +0 -319
  486. package/dist/contexts/types.cjs +0 -7
  487. package/dist/contexts/types.d.cts +0 -4
  488. package/dist/contexts/types.d.ts +0 -4
  489. package/dist/contexts/types.js +0 -3
  490. package/dist/domObserver-Bqf3ooj8.cjs +0 -304
  491. package/dist/enviveConfig-DZBohDpc.js +0 -62
  492. package/dist/enviveConfig-Dv9-esGV.cjs +0 -130
  493. package/dist/enviveConfigContext-D2OELZDR.cjs +0 -60
  494. package/dist/enviveConfigContext-DrDjCems.js +0 -45
  495. package/dist/events-DYY4l817.cjs +0 -90
  496. package/dist/events-DyUix-Bn.js +0 -78
  497. package/dist/featureFlagServiceContext-Be_LUbFf.d.cts +0 -23
  498. package/dist/featureFlagServiceContext-CJyYItqu.cjs +0 -62
  499. package/dist/featureFlagServiceContext-FBM6DdMJ.js +0 -42
  500. package/dist/featureFlagServiceContext-V0J-69ty.d.ts +0 -23
  501. package/dist/featureGates-KEwAL8p_.js +0 -26
  502. package/dist/featureGates-qU_ulhpC.cjs +0 -32
  503. package/dist/frontendConfig-CeWhVevA.d.ts +0 -857
  504. package/dist/frontendConfig-OWWJmuPc.d.cts +0 -857
  505. package/dist/graphql-3PxNRFOc.js +0 -36
  506. package/dist/graphql-DGYfelZp.cjs +0 -53
  507. package/dist/graphqlConfig-GHZ1UgCw.cjs +0 -73
  508. package/dist/graphqlConfig-mDg6J44N.js +0 -24
  509. package/dist/graphqlContext-BQA6gnpH.d.ts +0 -28
  510. package/dist/graphqlContext-Ci5GRAdH.js +0 -96
  511. package/dist/graphqlContext-D67VEQg3.d.cts +0 -28
  512. package/dist/graphqlContext-W0cZNBf1.cjs +0 -111
  513. package/dist/hooks/FloatingButtonVisibility/index.cjs +0 -73
  514. package/dist/hooks/FloatingButtonVisibility/index.d.cts +0 -7
  515. package/dist/hooks/FloatingButtonVisibility/index.d.ts +0 -7
  516. package/dist/hooks/FloatingButtonVisibility/index.js +0 -69
  517. package/dist/hooks/LastInteraction/index.cjs +0 -34
  518. package/dist/hooks/LastInteraction/index.d.cts +0 -17
  519. package/dist/hooks/LastInteraction/index.d.ts +0 -17
  520. package/dist/hooks/LastInteraction/index.js +0 -32
  521. package/dist/index-BeGt0Aw3.d.cts +0 -186
  522. package/dist/index-Bmub8e38.d.cts +0 -98
  523. package/dist/index-CCa4tZuO.d.ts +0 -184
  524. package/dist/index-CESxqFso.d.cts +0 -228
  525. package/dist/index-CgAfoNpB.d.ts +0 -1
  526. package/dist/index-CiWEYzXl.d.cts +0 -184
  527. package/dist/index-Cyq5HiC0.d.cts +0 -44
  528. package/dist/index-D4c-port.d.ts +0 -676
  529. package/dist/index-DazMsEy_.d.ts +0 -44
  530. package/dist/index-Dfwnna1j.d.ts +0 -228
  531. package/dist/index-O33GSSRr.d.cts +0 -676
  532. package/dist/index-RcVcRKH7.d.cts +0 -1
  533. package/dist/index-bjMvkcBF.d.ts +0 -98
  534. package/dist/index-xhBQ1HBx.d.ts +0 -186
  535. package/dist/interceptors/types.cjs +0 -1
  536. package/dist/interceptors/types.d.cts +0 -13
  537. package/dist/interceptors/types.d.ts +0 -13
  538. package/dist/interceptors/types.js +0 -3
  539. package/dist/localStorageContext-BPZ82q-G.js +0 -95
  540. package/dist/localStorageContext-NRP-CdmF.cjs +0 -115
  541. package/dist/models-D-4db7XW.cjs +0 -1537
  542. package/dist/models-c86hYW-F.js +0 -1296
  543. package/dist/newOrgConfigAtom-sqve6LZU.js +0 -8
  544. package/dist/newOrgConfigContext-5Bw7RwT-.d.cts +0 -16
  545. package/dist/newOrgConfigContext-CS8IA5Eg.d.ts +0 -16
  546. package/dist/newOrgConfigContext-Cl4H9c3q.cjs +0 -68
  547. package/dist/newOrgConfigContext-DQiuf8nd.js +0 -53
  548. package/dist/nodeSelector-B3bPtEjX.d.cts +0 -31
  549. package/dist/nodeSelector-BiCDowlK.d.ts +0 -31
  550. package/dist/org-DlAesvQ_.cjs +0 -43
  551. package/dist/org-vi0njpBh.js +0 -12
  552. package/dist/search-1NQLQD9d.d.ts +0 -20
  553. package/dist/search-CXXslzAO.cjs +0 -205
  554. package/dist/search-DBSMrXWv.js +0 -126
  555. package/dist/search-filter-types-BxaNSLs_.d.cts +0 -102
  556. package/dist/search-filter-types-DPgeG8FS.d.ts +0 -102
  557. package/dist/search-y-ioX5Mz.d.cts +0 -20
  558. package/dist/searchContext-DXW6xvXv.cjs +0 -145
  559. package/dist/searchContext-mvwUJncR.js +0 -129
  560. package/dist/searchServiceAdapter-DEv1tTn0.cjs +0 -34
  561. package/dist/searchServiceAdapter-WyCU55NV.js +0 -16
  562. package/dist/sessionStorageContext-1Ks_d4Z0.cjs +0 -66
  563. package/dist/sessionStorageContext-CDcl7NVl.js +0 -52
  564. package/dist/shopifyUrlContext-CejRZfj7.js +0 -61
  565. package/dist/shopifyUrlContext-lnHoAOEf.cjs +0 -75
  566. package/dist/spiffyWidgets-B1uc84_g.d.ts +0 -20
  567. package/dist/spiffyWidgets-BuS00VaQ.d.cts +0 -20
  568. package/dist/systemSettingsContext-B0Kyq7nA.cjs +0 -60
  569. package/dist/systemSettingsContext-CVUxEcsU.js +0 -39
  570. package/dist/test-types-ThQiO_cc.d.cts +0 -40
  571. package/dist/test-types-y6kp-tiw.d.ts +0 -40
  572. package/dist/types-BCz-hOvv.d.ts +0 -51
  573. package/dist/types-CKMMb_gX.d.cts +0 -51
  574. package/dist/types-CKPddlfS.cjs +0 -0
  575. package/dist/types-CS0Hrzja.js +0 -30
  576. package/dist/types-CtUb63bt.js +0 -76
  577. package/dist/types-CxObxLKs.cjs +0 -48
  578. package/dist/types-Db5Eux6K.d.ts +0 -10
  579. package/dist/types-Dc6hx6ei.js +0 -1
  580. package/dist/types-UUvB6h05.cjs +0 -106
  581. package/dist/types-zQGBI-Yo.d.cts +0 -10
  582. package/dist/types.cjs +0 -0
  583. package/dist/types.d.cts +0 -34
  584. package/dist/types.d.ts +0 -34
  585. package/dist/types.js +0 -1
  586. package/dist/urlsParser-COzMdJaX.cjs +0 -78
  587. package/dist/urlsParser-DxjoLj98.js +0 -42
  588. package/dist/useAmplitudeOperations-DYs1h8a_.js +0 -34
  589. package/dist/useAmplitudeOperations-jqa7K9dH.cjs +0 -41
  590. package/dist/useAppDetails-BRUqZEyt.js +0 -30
  591. package/dist/useAppDetails-C71k0brz.cjs +0 -38
  592. package/dist/useDebounce-DZ8Cgiwc.cjs +0 -26
  593. package/dist/useDebounce-v9cezyjn.js +0 -19
  594. package/dist/useGraphQLConfig-5VwS9Q_Z.js +0 -63
  595. package/dist/useGraphQLConfig-Cj26_J9I.cjs +0 -76
  596. package/dist/useMessageInterceptor-BjGP_uXm.js +0 -25
  597. package/dist/useMessageInterceptor-arAqUq1Q.cjs +0 -33
  598. package/dist/userIdentityContext-BVODeTlN.d.ts +0 -20
  599. package/dist/userIdentityContext-D2oFVFzo.d.cts +0 -20
  600. package/dist/utilityTypes-B2KuRn37.js +0 -1
  601. package/dist/utilityTypes-BGbL2WTP.cjs +0 -0
  602. package/dist/utils-BxPPugeP.d.cts +0 -22
  603. package/dist/utils-CLGXsOwE.cjs +0 -1591
  604. package/dist/utils-Covisryh.d.ts +0 -22
  605. package/dist/utils-jYtD3hmA.js +0 -1385
  606. package/dist/variantInfo-BfKlkaWU.js +0 -11
  607. package/dist/variantInfo-DpLn4nHz.cjs +0 -17
  608. package/src/application/models/api/context.ts +0 -4
  609. package/src/application/models/api/generationParams.ts +0 -4
  610. package/src/application/models/api/nextMessageRequest.ts +0 -11
  611. package/src/application/models/api/orgAnalyticsConfig.ts +0 -19
  612. package/src/application/models/api/orgConfigResults.ts +0 -44
  613. package/src/application/models/api/organizationConfig.ts +0 -12
  614. package/src/application/models/api/responseGenerics.ts +0 -67
  615. package/src/application/models/api/search.ts +0 -26
  616. package/src/application/models/api/suggestion.ts +0 -4
  617. package/src/application/models/api/supportedEventRequest.ts +0 -8
  618. package/src/application/models/api/userEvent.ts +0 -101
  619. package/src/application/models/cachedValue.ts +0 -8
  620. package/src/application/models/chatElementDisplayLocation.ts +0 -22
  621. package/src/application/models/clientDetails.ts +0 -18
  622. package/src/application/models/colorsConfig.ts +0 -28
  623. package/src/application/models/conversationalSearchIds.ts +0 -5
  624. package/src/application/models/dataLayer.ts +0 -45
  625. package/src/application/models/events.ts +0 -5
  626. package/src/application/models/featureGates.ts +0 -21
  627. package/src/application/models/frontendConfig.ts +0 -14
  628. package/src/application/models/googleAnalyticsEvents.ts +0 -8
  629. package/src/application/models/localStorageEventListener.ts +0 -4
  630. package/src/application/models/mobilePLPChatPlacementParameter.ts +0 -3
  631. package/src/application/models/orgsEnum.ts +0 -36
  632. package/src/application/models/productExperiment.ts +0 -5
  633. package/src/application/models/spanxTakeAQuizCtaParameter.ts +0 -4
  634. package/src/application/models/spiffyWidgets.ts +0 -16
  635. package/src/application/models/utilityTypes/camelCase.ts +0 -87
  636. package/src/application/models/utilityTypes/camelCasedPropertiesDeep.ts +0 -80
  637. package/src/application/models/utilityTypes/delimiterCase.ts +0 -121
  638. package/src/application/models/utilityTypes/delimiterCasedPropertiesDeep.ts +0 -98
  639. package/src/application/models/utilityTypes/index.ts +0 -1
  640. package/src/application/models/utilityTypes/internal.ts +0 -93
  641. package/src/application/models/utilityTypes/primitive.ts +0 -8
  642. package/src/application/models/utilityTypes/snakeCasedPropertiesDeep.ts +0 -49
  643. package/src/application/models/utilityTypes/splitWords.ts +0 -76
  644. package/src/application/models/utilityTypes/trim.ts +0 -28
  645. package/src/application/models/utilityTypes/unknownArray.ts +0 -25
  646. package/src/application/models/variantInfo/index.ts +0 -1
  647. package/src/application/models/variantInfo/pageVisitInfo.ts +0 -6
  648. package/src/application/models/variantInfo/plpInfo.ts +0 -3
  649. package/src/application/models/variantInfo/productInfo.ts +0 -5
  650. package/src/application/models/variantInfo/variantInfo.ts +0 -29
  651. package/src/application/utils/__tests__/divideArrays.test.ts +0 -14
  652. package/src/application/utils/cdnUtils.ts +0 -11
  653. package/src/atoms/search/chatSearch.ts +0 -317
  654. package/src/atoms/search/types.ts +0 -55
  655. package/src/config/divIds.ts +0 -27
  656. package/src/config/socialProofClasses.ts +0 -17
  657. package/src/contexts/chatContext/index.ts +0 -1
  658. package/src/contexts/types.ts +0 -1067
  659. package/src/events/event-types.ts +0 -11
  660. package/src/hooks/FloatingButtonVisibility/index.ts +0 -1
  661. package/src/hooks/FloatingButtonVisibility/useFloatingButtonVisibility.ts +0 -99
  662. package/src/hooks/LastInteraction/index.ts +0 -1
  663. package/src/hooks/LastInteraction/useLastInteraction.ts +0 -42
  664. package/src/interceptors/types.ts +0 -6
  665. package/src/merchants/domInsertion.ts +0 -30
  666. package/src/merchants/gridInsertion.ts +0 -19
  667. package/src/types/config-versions.ts +0 -6
  668. package/src/types/customerService.ts +0 -31
  669. package/src/types/custservice-types.ts +0 -28
  670. package/src/types/floatingbuttonoverrides-types.ts +0 -10
  671. package/src/types/search-filter-types.ts +0 -111
  672. package/src/types/suggestionBarV2-types.ts +0 -4
  673. package/src/types/test-types.ts +0 -3
  674. package/src/types.ts +0 -27
  675. /package/dist/{AmplitudeOperations-DxQnurSG.cjs → enviveConfigContext-DJLIdWAK.cjs} +0 -0
  676. /package/dist/{AmplitudeOperations-ni7wVevx.js → enviveConfigContext-Qh6nF9qc.js} +0 -0
  677. /package/dist/{globalSearch-BpGfkuXz.js → featureFlagServiceContext-CG3rFJov.js} +0 -0
  678. /package/dist/{globalSearch-B9DRBxSM.cjs → featureFlagServiceContext-C_wrr2WY.cjs} +0 -0
  679. /package/src/{types/exceptions → exceptions}/sessionExceptions.ts +0 -0
@@ -0,0 +1,414 @@
1
+ import { SessionRestartRequired, UnsupportedProductException } from "./exceptions-CUGY31Ua.js";
2
+ import { ProductExperiment } from "./dist-CtkINi1R.js";
3
+ import { validateOrgConfigResults, validateResponse, validateSuggestion, validateUserEvent } from "./models-DmsMlaHT.js";
4
+ import { logger_default } from "./logger-BMVdhQOV.js";
5
+ import { coreSupportedEventRequestToApiRequest, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest } from "./utils-CxDOv-yL.js";
6
+ import { getAtomStore } from "./atomStore-BuopbV9k.js";
7
+ import { baseUrlAtom, contextSourceAtom, envAtom, orgShortNameAtom, reactAppNameAtom } from "./enviveConfig-Cw7o9TLb.js";
8
+ import { chatIdAtom } from "./app-D73Rksby.js";
9
+ import { featureFlagServiceAtom, orgIdAtom } from "./org-DEzeBBk6.js";
10
+ import { useLocalStorage } from "./localStorageContext-CvwraLEo.js";
11
+ import { Configuration, ContextEnvEnum, ContextSourceEnum, CustomerServiceApi, DefaultApi, FormType, InferenceApi, ResponseCategory, ResponseError, UserEventCategory, V1OrgConfigGetSourceEnum } from "@spiffy-ai/commerce-api-client";
12
+ import { v4 } from "uuid";
13
+ import React, { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
14
+ import UAParser from "ua-parser-js";
15
+ import { jsx } from "react/jsx-runtime";
16
+
17
+ //#region src/application/commerce-api.ts
18
+ async function errorResponseBody(error) {
19
+ try {
20
+ return await error.response.json();
21
+ } catch {
22
+ return {};
23
+ }
24
+ }
25
+ async function throwSessionRestartRequiredIf(errorMsg, error) {
26
+ if (!(error instanceof ResponseError)) {
27
+ logger_default.logInfo(errorMsg, error);
28
+ throw error;
29
+ }
30
+ const errorResponse = await errorResponseBody(error);
31
+ if (errorResponse?.message?.toLowerCase() === "unsupported product" || errorResponse?.app_code?.toUpperCase() === "PRODUCT_NOT_FOUND") throw new UnsupportedProductException();
32
+ else if (errorResponse?.app_code?.toUpperCase() === "RESTART_SESSION" || errorResponse?.sub_code?.toUpperCase() === "NOT_FOUND") {
33
+ logger_default.logInfo("Session does not exist. Re-start session", error, error.response, errorResponse);
34
+ throw new SessionRestartRequired();
35
+ }
36
+ logger_default.logInfo(errorMsg, error);
37
+ throw error;
38
+ }
39
+ var CommerceApiClient = class CommerceApiClient {
40
+ static {
41
+ this.getInstance = () => {
42
+ if (!CommerceApiClient.instance) CommerceApiClient.instance = new CommerceApiClient();
43
+ return CommerceApiClient.instance;
44
+ };
45
+ }
46
+ constructor(basePath) {
47
+ this.suggestionsAbortController = new AbortController();
48
+ this.responsesAbortController = new AbortController();
49
+ const baseUrl = getAtomStore().get(baseUrlAtom);
50
+ const config = new Configuration({
51
+ basePath: basePath || baseUrl,
52
+ headers: {
53
+ "Content-Type": "application/json",
54
+ Accept: "application/json"
55
+ }
56
+ });
57
+ this.defaultApi = new DefaultApi(config);
58
+ this.inferenceApi = new InferenceApi(config);
59
+ this.customerServiceApi = new CustomerServiceApi(config);
60
+ }
61
+ static {
62
+ this.resolveUrl = async (url) => {
63
+ const atomStore = getAtomStore();
64
+ const orgShortName = atomStore.get(orgShortNameAtom);
65
+ const orgId = atomStore.get(orgIdAtom);
66
+ const chatId = atomStore.get(chatIdAtom);
67
+ const source = atomStore.get(contextSourceAtom);
68
+ const env = atomStore.get(envAtom);
69
+ const { getUserIdOrDefault } = useUserIdentity();
70
+ const userId = getUserIdOrDefault();
71
+ const featureFlagService = atomStore.get(featureFlagServiceAtom);
72
+ const context = {
73
+ user_id: userId ?? "",
74
+ org_id: orgId ?? "",
75
+ org_short_name: orgShortName ?? "",
76
+ chat_id: chatId ?? "",
77
+ source: source ?? ContextSourceEnum.App,
78
+ env: env ?? ContextEnvEnum.Dev
79
+ };
80
+ const featureGates = featureFlagService?.featureFlagService?.getFeatureFlags() || {};
81
+ const urlResolvingRequest = {
82
+ url,
83
+ context,
84
+ feature_gates: featureGates
85
+ };
86
+ return await (await CommerceApiClient.getInstance().inferenceApi.v1UrlResolvingPostRaw({ UrlResolvingRequest: urlResolvingRequest })).raw.json();
87
+ };
88
+ }
89
+ static {
90
+ this.reportSession = async (reportRequest) => {
91
+ await CommerceApiClient.getInstance().defaultApi.v1ChatsReportSessionIdPost({ ReportSessionRequest: reportRequest });
92
+ };
93
+ }
94
+ static {
95
+ this.getNextResponses = async (payload) => {
96
+ try {
97
+ return (await CommerceApiClient.getInstance().inferenceApi.v1NextResponsesPost({ NextMessageRequest: messageRequestToCommerceMessageRequest(payload) })).map((resp) => validateResponse(resp)).map((resp) => messageFromResponse(resp)).filter((m) => m != null);
98
+ } catch (err) {
99
+ logger_default.logInfo("Failed to get next responses", err, {
100
+ payloadContext: payload?.context,
101
+ userEvents: payload?.userEvents
102
+ });
103
+ await throwSessionRestartRequiredIf("Failed to get next responses", err);
104
+ return [];
105
+ }
106
+ };
107
+ }
108
+ static {
109
+ this.getNextResponseStreaming = (payload) => {
110
+ async function* generate(inferenceApi, abortController) {
111
+ try {
112
+ const response = await inferenceApi.v1NextResponsesPostRaw({ NextMessageRequest: messageRequestToCommerceMessageRequest(payload) }, { signal: abortController.signal });
113
+ if (!response.raw.body) {
114
+ logger_default.logError("[spiffy-ai] No body in the streamed response", void 0, { response: response.raw });
115
+ return;
116
+ }
117
+ const reader = response.raw.body.getReader();
118
+ const decoder = new TextDecoder("utf-8");
119
+ let partial = "";
120
+ const safeParse = (line) => {
121
+ try {
122
+ return JSON.parse(line);
123
+ } catch (err) {
124
+ logger_default.logError("[spiffy-ai] Error parsing streamed line", err, {
125
+ line,
126
+ partial
127
+ });
128
+ partial = line;
129
+ return partial;
130
+ }
131
+ };
132
+ const processChunk = (chunk) => {
133
+ return `${partial}${chunk}`.split("\n").map((line) => line.replace(/^data: /, "").trim()).filter((line) => line !== "" && line !== "[DONE]").map(safeParse).filter((v) => v);
134
+ };
135
+ while (true) {
136
+ const { done, value } = await reader.read();
137
+ if (done) break;
138
+ const chunk = decoder.decode(value);
139
+ const parsedLines = processChunk(chunk);
140
+ for (const parsedLine of parsedLines) {
141
+ const validatedResponse = validateResponse(parsedLine);
142
+ if (validatedResponse) yield validatedResponse;
143
+ }
144
+ }
145
+ } catch (error) {
146
+ logger_default.logError("[spiffy-ai] Failed to get next streaming responses", error, {
147
+ payloadContext: payload?.context,
148
+ userEvents: payload?.userEvents
149
+ });
150
+ await throwSessionRestartRequiredIf("Failed to get next streaming responses", error);
151
+ }
152
+ }
153
+ CommerceApiClient.getInstance().responsesAbortController.abort();
154
+ CommerceApiClient.getInstance().responsesAbortController = new AbortController();
155
+ return generate(CommerceApiClient.getInstance().inferenceApi, CommerceApiClient.getInstance().responsesAbortController);
156
+ };
157
+ }
158
+ static {
159
+ this.getNextSuggestions = async (payload) => {
160
+ try {
161
+ CommerceApiClient.getInstance().suggestionsAbortController.abort();
162
+ CommerceApiClient.getInstance().suggestionsAbortController = new AbortController();
163
+ return (await CommerceApiClient.getInstance().inferenceApi.v1NextSuggestionsPost({ NextMessageRequest: messageRequestToCommerceMessageRequest(payload) }, { signal: CommerceApiClient.getInstance().suggestionsAbortController.signal })).map((resp) => validateSuggestion(resp)).filter((suggestion) => suggestion != null);
164
+ } catch (error) {
165
+ logger_default.logInfo("Failed to get suggestions", error, {
166
+ payloadContext: payload?.context,
167
+ userEvents: payload?.userEvents
168
+ });
169
+ await throwSessionRestartRequiredIf("Failed to get suggestions", error);
170
+ return [];
171
+ }
172
+ };
173
+ }
174
+ static {
175
+ this.getResponses = async (orgId, chatId, userId) => {
176
+ let data = {
177
+ responses: [],
178
+ suggestions: [],
179
+ user_events: []
180
+ };
181
+ const request = {
182
+ org_id: orgId,
183
+ chat_id: chatId,
184
+ user_id: userId
185
+ };
186
+ try {
187
+ data = await CommerceApiClient.getInstance().defaultApi.v1GetSessionMessages(request);
188
+ } catch (error) {
189
+ await throwSessionRestartRequiredIf("Failed to get chat responses", error);
190
+ }
191
+ const responses = data?.responses?.map((turn) => turn.map((response) => validateResponse(response)).filter((response) => response != null));
192
+ const suggestions = data?.suggestions.map((suggestion) => validateSuggestion(suggestion)).filter((suggestion) => suggestion != null);
193
+ const userEvents = data?.user_events.map((event) => validateUserEvent(event)).filter((event) => event != null);
194
+ const formSubmittedUserEventsFormIds = userEvents.filter((event) => event.category === UserEventCategory.FormSubmitted).map((event) => event.attributes.formResponseId);
195
+ const assistantMessages = responses.map((turn) => turn.filter((response) => !(response.category === ResponseCategory.Form && formSubmittedUserEventsFormIds.includes(response.id))).map((response) => messageFromResponse(response)).filter((message) => message != null)).filter((turn) => turn.length > 0);
196
+ const userMessages = userEvents.map((event) => {
197
+ if ([UserEventCategory.QueryTyped, UserEventCategory.Search].includes(event.category)) return [messageFromQueryEvent(event)];
198
+ if (event.category === UserEventCategory.SuggestionClicked) return [messageFromSuggestionEvent(event, suggestions)];
199
+ if (event.category === UserEventCategory.FormSubmitted) {
200
+ const formResponse = responses.flat().find((response) => response.id === event.attributes.formResponseId && event.attributes.formType !== FormType.Escalation);
201
+ if (formResponse && formResponse.category === ResponseCategory.Form) return [messageFromFormSubmittedEvent(event, formResponse.attributes)];
202
+ }
203
+ return [];
204
+ }).filter((message) => message.length > 0);
205
+ const sortedMessages = [...assistantMessages, ...userMessages].sort((a, b) => new Date(a[0].createdAt).getTime() - new Date(b[0].createdAt).getTime());
206
+ return {
207
+ responses,
208
+ userEvents,
209
+ suggestions,
210
+ messages: sortedMessages
211
+ };
212
+ };
213
+ }
214
+ static {
215
+ this.isSupportedEvent = async (payload) => {
216
+ try {
217
+ const httpResponseText = await (await CommerceApiClient.getInstance().inferenceApi.v1SupportedEventPostRaw({ SupportedEventRequest: coreSupportedEventRequestToApiRequest(payload) })).raw.text();
218
+ const httpResponseJson = JSON.parse(httpResponseText);
219
+ return {
220
+ ...httpResponseJson,
221
+ numberOfReviews: httpResponseJson.num_of_reviews,
222
+ merchant_tags: httpResponseJson.merchant_tags || []
223
+ };
224
+ } catch (err) {
225
+ logger_default.logError("Failed to get response for v1SupportedEventPost", { err });
226
+ return {
227
+ supported: false,
228
+ ready: false,
229
+ category: void 0,
230
+ collections: [],
231
+ numberOfReviews: void 0,
232
+ top_category: void 0,
233
+ merchant_tags: []
234
+ };
235
+ }
236
+ };
237
+ }
238
+ static {
239
+ this.identifyUser = async (spiffyUserId, merchantUserId, uaDetails) => {
240
+ try {
241
+ await CommerceApiClient.getInstance().defaultApi.v1AnalyticsIdentifyPost({ AnalyticsIdentifyRequest: {
242
+ user_id: spiffyUserId,
243
+ os_name: uaDetails.os,
244
+ os_version: uaDetails.osVersion,
245
+ platform: uaDetails.os,
246
+ device_id: uaDetails.deviceModel,
247
+ device_brand: uaDetails.deviceBrand,
248
+ device_manufacturer: uaDetails.deviceManufacturer,
249
+ device_model: uaDetails.deviceModel,
250
+ user_properties: {
251
+ cdp_user_id: merchantUserId,
252
+ browser: uaDetails.browser,
253
+ browser_version: uaDetails.browserVersion,
254
+ user_agent: uaDetails.userAgent
255
+ }
256
+ } });
257
+ } catch (err) {
258
+ logger_default.logError("Failed to identify user", err);
259
+ }
260
+ };
261
+ }
262
+ static {
263
+ this.mapContextSourceToV1OrgConfigGetSource = (source) => {
264
+ if (source === void 0) return void 0;
265
+ switch (source) {
266
+ case ContextSourceEnum.Fork: return V1OrgConfigGetSourceEnum.Fork;
267
+ case ContextSourceEnum.Playground: return V1OrgConfigGetSourceEnum.Playground;
268
+ case ContextSourceEnum.App: return V1OrgConfigGetSourceEnum.App;
269
+ case ContextSourceEnum.Test: return V1OrgConfigGetSourceEnum.Test;
270
+ case ContextSourceEnum.Eval: return V1OrgConfigGetSourceEnum.Test;
271
+ default: return source;
272
+ }
273
+ };
274
+ }
275
+ static {
276
+ this.getOrgConfig = async (user_id) => {
277
+ try {
278
+ const atomStore = getAtomStore();
279
+ const reactAppName = atomStore.get(reactAppNameAtom);
280
+ const contextSource = atomStore.get(contextSourceAtom);
281
+ const featureFlagService = atomStore.get(featureFlagServiceAtom);
282
+ const request = {
283
+ namespace: reactAppName,
284
+ user_id,
285
+ source: this.mapContextSourceToV1OrgConfigGetSource(contextSource),
286
+ include_experiments: Object.values(ProductExperiment),
287
+ include_feature_gates: Object.entries(featureFlagService?.featureFlagService?.getFeatureFlags() || {}).filter(([, isEnabled]) => isEnabled).map(([featureGateName]) => featureGateName)
288
+ };
289
+ const response = await CommerceApiClient.getInstance().defaultApi.v1OrgConfigGet(request);
290
+ return validateOrgConfigResults(response);
291
+ } catch (err) {
292
+ logger_default.logError(`Failed to get org config`, err, { err });
293
+ return;
294
+ }
295
+ };
296
+ }
297
+ static {
298
+ this.addNoteToLatestConversation = async (spiffyUserId, email, customerServiceProvider) => {
299
+ logger_default.logInfo(`addNoteToLatestConversation - user_id=${spiffyUserId} email=${email} customer_service_provider=${customerServiceProvider}`);
300
+ try {
301
+ await CommerceApiClient.getInstance().customerServiceApi.v1CustserviceAddNoteToLatestConversationPost({ AddNoteToLatestConversationRequest: {
302
+ spiffy_user_id: spiffyUserId,
303
+ email,
304
+ customer_service_provider: customerServiceProvider
305
+ } });
306
+ } catch (err) {
307
+ logger_default.logError("Failed to add note to latest conversation", { err });
308
+ }
309
+ };
310
+ }
311
+ static {
312
+ this.getCustomerServiceApi = () => CommerceApiClient.getInstance().customerServiceApi;
313
+ }
314
+ };
315
+ var commerce_api_default = CommerceApiClient;
316
+
317
+ //#endregion
318
+ //#region src/contexts/userIdentityContext/userIdentityContext.tsx
319
+ const getUserAgentDetails = () => {
320
+ const result = new UAParser().getResult();
321
+ return {
322
+ os: result?.os?.name,
323
+ osVersion: result?.os?.version,
324
+ deviceBrand: result?.device?.vendor,
325
+ deviceManufacturer: result?.device?.vendor,
326
+ deviceModel: result?.device?.model,
327
+ browser: result?.browser?.name,
328
+ browserVersion: result?.browser?.version,
329
+ userAgent: result?.ua
330
+ };
331
+ };
332
+ const UserIdentityContext = createContext(void 0);
333
+ const UserIdentityProvider = ({ children }) => {
334
+ const { getItem, setItem, isAvailable: localStorageIsReady } = useLocalStorage();
335
+ const [isReady, setIsReady] = useState(false);
336
+ useEffect(() => {
337
+ setIsReady(localStorageIsReady);
338
+ }, [localStorageIsReady]);
339
+ const USER_ID_OVERRIDE_KEY = "v1-spiffy-user-id-override";
340
+ const USER_ID_DEFAULT_KEY = "v1-spiffy-user-id-default";
341
+ const getUserIdOverrideFromLocalStorage = useCallback(() => getItem(USER_ID_OVERRIDE_KEY) ?? void 0, [getItem]);
342
+ const getUserIdDefaultFromLocalStorage = useCallback(() => getItem(USER_ID_DEFAULT_KEY) ?? void 0, [getItem]);
343
+ const setUserIdDefaultInLocalStorage = useCallback((userId) => {
344
+ logger_default.logInfo(`setUserIdDefaultInLocalStorage - Setting user_id=${userId}`);
345
+ setItem(USER_ID_DEFAULT_KEY, userId);
346
+ return userId;
347
+ }, [setItem, USER_ID_DEFAULT_KEY]);
348
+ const setUserIdOverrideInLocalStorage = useCallback((userId) => {
349
+ logger_default.logInfo(`setUserIdOverrideInLocalStorage - Setting user_id=${userId}`);
350
+ setItem(USER_ID_OVERRIDE_KEY, userId);
351
+ return userId;
352
+ }, [setItem, USER_ID_OVERRIDE_KEY]);
353
+ const clearUserIdOverrideInLocalStorage = useCallback(() => {
354
+ logger_default.logInfo(`clearUserIdOverrideInLocalStorage - Clearing user_id`);
355
+ setItem(USER_ID_OVERRIDE_KEY, "");
356
+ }, [setItem, USER_ID_OVERRIDE_KEY]);
357
+ const getUserIdOrDefault = useCallback(() => {
358
+ const userIdOverride = getUserIdOverrideFromLocalStorage();
359
+ if (userIdOverride) return userIdOverride;
360
+ const defaultUserId = getUserIdDefaultFromLocalStorage();
361
+ if (defaultUserId) return defaultUserId;
362
+ return setUserIdDefaultInLocalStorage(`spiffy-user-id-${v4()}`);
363
+ }, [
364
+ getUserIdOverrideFromLocalStorage,
365
+ getUserIdDefaultFromLocalStorage,
366
+ setUserIdDefaultInLocalStorage
367
+ ]);
368
+ const identifyUser = useCallback(async () => {
369
+ if (!isReady) {
370
+ logger_default.logWarn("[UserIdentityContext] Context not ready, skipping identifyUser", void 0);
371
+ return;
372
+ }
373
+ try {
374
+ const cdpUserId = "UNKNOWN_CDP_USER_ID";
375
+ const userId = getUserIdOrDefault();
376
+ const userAgentDetails = getUserAgentDetails();
377
+ await commerce_api_default.identifyUser(userId, cdpUserId, userAgentDetails);
378
+ } catch (error) {
379
+ logger_default.logError("[spiffy-ai] Error identifying user", error);
380
+ }
381
+ }, [isReady, getUserIdOrDefault]);
382
+ const value = useMemo(() => ({
383
+ identifyUser,
384
+ getUserIdOrDefault,
385
+ getUserIdOverrideFromLocalStorage,
386
+ getUserIdDefaultFromLocalStorage,
387
+ setUserIdDefaultInLocalStorage,
388
+ setUserIdOverrideInLocalStorage,
389
+ clearUserIdOverrideInLocalStorage,
390
+ isReady
391
+ }), [
392
+ identifyUser,
393
+ getUserIdOrDefault,
394
+ getUserIdOverrideFromLocalStorage,
395
+ getUserIdDefaultFromLocalStorage,
396
+ setUserIdDefaultInLocalStorage,
397
+ setUserIdOverrideInLocalStorage,
398
+ clearUserIdOverrideInLocalStorage,
399
+ isReady
400
+ ]);
401
+ return /* @__PURE__ */ jsx(UserIdentityContext.Provider, {
402
+ value,
403
+ children
404
+ });
405
+ };
406
+ const useUserIdentity = () => {
407
+ const context = useContext(UserIdentityContext);
408
+ if (!context) throw new Error("useUserIdentity must be used within a UserIdentityProvider");
409
+ return context;
410
+ };
411
+
412
+ //#endregion
413
+ export { UserIdentityProvider, useUserIdentity };
414
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlcklkZW50aXR5Q29udGV4dC1EZ0ZMZW5kSS5qcyIsIm5hbWVzIjpbImNvbmZpZzogQ29uZmlndXJhdGlvbiIsImNvbnRleHQ6IENvbnRleHQiLCJlcnI6IHVua25vd24iLCJlcnJvcjogdW5rbm93biIsImRhdGE6IFYxR2V0U2Vzc2lvbk1lc3NhZ2VzMjAwUmVzcG9uc2UiLCJyZXNwb25zZXM6IEFwaVJlc3BvbnNlW11bXSIsInN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW10iLCJ1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXSIsImFzc2lzdGFudE1lc3NhZ2VzOiBNZXNzYWdlW11bXSIsInVzZXJNZXNzYWdlczogTWVzc2FnZVtdW10iLCJyZXF1ZXN0OiBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QiLCJVc2VySWRlbnRpdHlQcm92aWRlcjogUmVhY3QuRkM8eyBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlIH0+IiwidXVpZCIsIkNvbW1lcmNlQXBpQ2xpZW50Il0sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaS50cyIsIi4uL3NyYy9jb250ZXh0cy91c2VySWRlbnRpdHlDb250ZXh0L3VzZXJJZGVudGl0eUNvbnRleHQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnRleHQsXG4gIENvbnRleHRFbnZFbnVtLFxuICBDb25maWd1cmF0aW9uLFxuICBDdXN0b21lclNlcnZpY2VBcGksXG4gIERlZmF1bHRBcGksXG4gIEluZmVyZW5jZUFwaSxcbiAgUmVwb3J0U2Vzc2lvblJlcXVlc3QsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFVzZXJFdmVudENhdGVnb3J5LFxuICBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlLFxuICBWMU9yZ0NvbmZpZ0dldFJlcXVlc3QsXG4gIENvbnRleHRTb3VyY2VFbnVtLFxuICBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0sXG4gIEN1c3RvbWVyU2VydmljZVByb3ZpZGVyLFxuICBSZXNwb25zZUNhdGVnb3J5LFxuICBGb3JtVHlwZSxcbn0gZnJvbSBcIkBzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudFwiO1xuaW1wb3J0IHtcbiAgU3VwcG9ydGVkRXZlbnQsXG4gIFByb2R1Y3RFeHBlcmltZW50LFxuICBDbGllbnREZXRhaWxzLFxuICBVc2VyRXZlbnQsXG4gIE5leHRNZXNzYWdlUmVxdWVzdCxcbiAgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuICBPcmdDb25maWcsXG59IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBBcGlSZXNwb25zZSwgTWVzc2FnZSwgU3VnZ2VzdGlvbiB9IGZyb20gXCJzcmMvdHlwZXNcIjtcbmltcG9ydCB7IGNoYXRJZEF0b20gfSBmcm9tIFwic3JjL2F0b21zL2FwcFwiO1xuaW1wb3J0IHsgZ2V0QXRvbVN0b3JlIH0gZnJvbSBcInNyYy9hdG9tcy9hdG9tU3RvcmVcIjtcbmltcG9ydCB7XG4gIGJhc2VVcmxBdG9tLFxuICBvcmdTaG9ydE5hbWVBdG9tLFxuICBjb250ZXh0U291cmNlQXRvbSxcbiAgZW52QXRvbSxcbiAgcmVhY3RBcHBOYW1lQXRvbSxcbn0gZnJvbSBcInNyYy9hdG9tcy9lbnZpdmUvZW52aXZlQ29uZmlnXCI7XG5pbXBvcnQgeyBvcmdJZEF0b20sIGZlYXR1cmVGbGFnU2VydmljZUF0b20gfSBmcm9tIFwic3JjL2F0b21zL29yZ1wiO1xuaW1wb3J0IHtcbiAgVW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9uLFxuICBTZXNzaW9uUmVzdGFydFJlcXVpcmVkLFxufSBmcm9tIFwic3JjL2V4Y2VwdGlvbnNcIjtcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2luZy9sb2dnZXJcIjtcbmltcG9ydCB7XG4gIHZhbGlkYXRlUmVzcG9uc2UsXG4gIHZhbGlkYXRlU3VnZ2VzdGlvbixcbiAgdmFsaWRhdGVVc2VyRXZlbnQsXG4gIHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyxcbn0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQge1xuICBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCxcbiAgbWVzc2FnZUZyb21SZXNwb25zZSxcbiAgbWVzc2FnZUZyb21RdWVyeUV2ZW50LFxuICBtZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudCxcbiAgbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQsXG4gIGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cbmltcG9ydCB7IHVzZVVzZXJJZGVudGl0eSB9IGZyb20gXCJzcmMvY29udGV4dHMvdXNlcklkZW50aXR5Q29udGV4dFwiO1xuXG5hc3luYyBmdW5jdGlvbiBlcnJvclJlc3BvbnNlQm9keShlcnJvcjogUmVzcG9uc2VFcnJvcikge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBlcnJvci5yZXNwb25zZS5qc29uKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihlcnJvck1zZzogc3RyaW5nLCBlcnJvcjogdW5rbm93bikge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IpKSB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oZXJyb3JNc2csIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIGNvbnN0IGVycm9yUmVzcG9uc2UgPSBhd2FpdCBlcnJvclJlc3BvbnNlQm9keShlcnJvcik7XG4gIGlmIChcbiAgICBlcnJvclJlc3BvbnNlPy5tZXNzYWdlPy50b0xvd2VyQ2FzZSgpID09PSBcInVuc3VwcG9ydGVkIHByb2R1Y3RcIiB8fCAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3ZXIgdmVyc2lvbnMgb2YgdGhlIEFQSSByZXR1cm4gc3ViX2NvZGUgaW5zdGVhZCBvZiBtZXNzYWdlXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUFJPRFVDVF9OT1RfRk9VTkRcIlxuICApIHtcbiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRQcm9kdWN0RXhjZXB0aW9uKCk7XG4gIH0gZWxzZSBpZiAoXG4gICAgZXJyb3JSZXNwb25zZT8uYXBwX2NvZGU/LnRvVXBwZXJDYXNlKCkgPT09IFwiUkVTVEFSVF9TRVNTSU9OXCIgfHxcbiAgICBlcnJvclJlc3BvbnNlPy5zdWJfY29kZT8udG9VcHBlckNhc2UoKSA9PT0gXCJOT1RfRk9VTkRcIiAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gbmV3IEFQSSByZXNwb25zZXMgd2lsbCBjb250YWluIFwiYXBwX2NvZGVcIlxuICApIHtcbiAgICBMb2dnZXIubG9nSW5mbyhcbiAgICAgIFwiU2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4gUmUtc3RhcnQgc2Vzc2lvblwiLFxuICAgICAgZXJyb3IsXG4gICAgICBlcnJvci5yZXNwb25zZSxcbiAgICAgIGVycm9yUmVzcG9uc2VcbiAgICApO1xuICAgIHRocm93IG5ldyBTZXNzaW9uUmVzdGFydFJlcXVpcmVkKCk7XG4gIH1cblxuICBMb2dnZXIubG9nSW5mbyhlcnJvck1zZywgZXJyb3IpO1xuICB0aHJvdyBlcnJvcjtcbn1cblxuY2xhc3MgQ29tbWVyY2VBcGlDbGllbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRBcGk6IERlZmF1bHRBcGk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21lclNlcnZpY2VBcGk6IEN1c3RvbWVyU2VydmljZUFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGluZmVyZW5jZUFwaTogSW5mZXJlbmNlQXBpO1xuXG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBDb21tZXJjZUFwaUNsaWVudCB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIHN1Z2dlc3Rpb25zQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgcmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIHByaXZhdGUgc3RhdGljIGdldEluc3RhbmNlID0gKCk6IENvbW1lcmNlQXBpQ2xpZW50ID0+IHtcbiAgICBpZiAoIUNvbW1lcmNlQXBpQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZSA9IG5ldyBDb21tZXJjZUFwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiBDb21tZXJjZUFwaUNsaWVudC5pbnN0YW5jZTtcbiAgfTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKGJhc2VQYXRoPzogc3RyaW5nKSB7XG4gICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgY29uc3QgYmFzZVVybCA9IGF0b21TdG9yZS5nZXQoYmFzZVVybEF0b20pO1xuICAgIGNvbnN0IHBhdGggPSBiYXNlUGF0aCB8fCBiYXNlVXJsO1xuICAgIC8vIEFQSSBLZXkgaXMgbm93IGhhbmRsZWQgYXQgdGhlIEVudml2ZUNvbmZpZ1Byb3ZpZGVyIGxldmVsXG4gICAgY29uc3QgY29uZmlnOiBDb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oe1xuICAgICAgYmFzZVBhdGg6IHBhdGgsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmRlZmF1bHRBcGkgPSBuZXcgRGVmYXVsdEFwaShjb25maWcpO1xuICAgIHRoaXMuaW5mZXJlbmNlQXBpID0gbmV3IEluZmVyZW5jZUFwaShjb25maWcpO1xuICAgIHRoaXMuY3VzdG9tZXJTZXJ2aWNlQXBpID0gbmV3IEN1c3RvbWVyU2VydmljZUFwaShjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmVVcmwgPSBhc3luYyAodXJsOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBhdG9tU3RvcmUgPSBnZXRBdG9tU3RvcmUoKTtcbiAgICBjb25zdCBvcmdTaG9ydE5hbWUgPSBhdG9tU3RvcmUuZ2V0KG9yZ1Nob3J0TmFtZUF0b20pO1xuICAgIGNvbnN0IG9yZ0lkID0gYXRvbVN0b3JlLmdldChvcmdJZEF0b20pO1xuICAgIGNvbnN0IGNoYXRJZCA9IGF0b21TdG9yZS5nZXQoY2hhdElkQXRvbSk7XG4gICAgY29uc3Qgc291cmNlID0gYXRvbVN0b3JlLmdldChjb250ZXh0U291cmNlQXRvbSk7XG4gICAgY29uc3QgZW52ID0gYXRvbVN0b3JlLmdldChlbnZBdG9tKTtcbiAgICBjb25zdCB7IGdldFVzZXJJZE9yRGVmYXVsdCB9ID0gdXNlVXNlcklkZW50aXR5KCk7XG4gICAgY29uc3QgdXNlcklkID0gZ2V0VXNlcklkT3JEZWZhdWx0KCk7XG5cbiAgICBjb25zdCBmZWF0dXJlRmxhZ1NlcnZpY2UgPSBhdG9tU3RvcmUuZ2V0KGZlYXR1cmVGbGFnU2VydmljZUF0b20pO1xuXG4gICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IHtcbiAgICAgIHVzZXJfaWQ6IHVzZXJJZCA/PyBcIlwiLFxuICAgICAgb3JnX2lkOiBvcmdJZCA/PyBcIlwiLFxuICAgICAgb3JnX3Nob3J0X25hbWU6IG9yZ1Nob3J0TmFtZSA/PyBcIlwiLFxuICAgICAgY2hhdF9pZDogY2hhdElkID8/IFwiXCIsXG4gICAgICBzb3VyY2U6IHNvdXJjZSA/PyBDb250ZXh0U291cmNlRW51bS5BcHAsXG4gICAgICBlbnY6IChlbnYgYXMgQ29udGV4dEVudkVudW0pID8/IENvbnRleHRFbnZFbnVtLkRldiwgLy8gQ2FzdCBlbnYgdG8gQ29udGV4dEVudkVudW1cbiAgICB9O1xuXG4gICAgY29uc3QgZmVhdHVyZUdhdGVzID1cbiAgICAgIGZlYXR1cmVGbGFnU2VydmljZT8uZmVhdHVyZUZsYWdTZXJ2aWNlPy5nZXRGZWF0dXJlRmxhZ3MoKSB8fCB7fTtcbiAgICBjb25zdCB1cmxSZXNvbHZpbmdSZXF1ZXN0ID0ge1xuICAgICAgdXJsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGZlYXR1cmVfZ2F0ZXM6IGZlYXR1cmVHYXRlcyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmF3UmVzcG9uc2UgPVxuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFVcmxSZXNvbHZpbmdQb3N0UmF3KHtcbiAgICAgICAgVXJsUmVzb2x2aW5nUmVxdWVzdDogdXJsUmVzb2x2aW5nUmVxdWVzdCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmF3UmVzcG9uc2UucmF3Lmpzb24oKTtcblxuICAgIHJldHVybiByZXNwb25zZUJvZHk7XG4gIH07XG5cbiAgc3RhdGljIHJlcG9ydFNlc3Npb24gPSBhc3luYyAoXG4gICAgcmVwb3J0UmVxdWVzdDogUmVwb3J0U2Vzc2lvblJlcXVlc3RcbiAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxQ2hhdHNSZXBvcnRTZXNzaW9uSWRQb3N0KFxuICAgICAge1xuICAgICAgICBSZXBvcnRTZXNzaW9uUmVxdWVzdDogcmVwb3J0UmVxdWVzdCxcbiAgICAgIH1cbiAgICApO1xuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0UmVzcG9uc2VzID0gYXN5bmMgKFxuICAgIHBheWxvYWQ6IE5leHRNZXNzYWdlUmVxdWVzdFxuICApOiBQcm9taXNlPE1lc3NhZ2VbXT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxTmV4dFJlc3BvbnNlc1Bvc3Qoe1xuICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgIH0pO1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSByZXNwb25zZVxuICAgICAgICAubWFwKChyZXNwKSA9PiB2YWxpZGF0ZVJlc3BvbnNlKHJlc3ApKVxuICAgICAgICAubWFwKChyZXNwKSA9PiBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3ApKTtcblxuICAgICAgcmV0dXJuIG1lc3NhZ2VzLmZpbHRlcigobSk6IG0gaXMgTWVzc2FnZSA9PiBtICE9IG51bGwpO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oXCJGYWlsZWQgdG8gZ2V0IG5leHQgcmVzcG9uc2VzXCIsIGVyciwge1xuICAgICAgICBwYXlsb2FkQ29udGV4dDogcGF5bG9hZD8uY29udGV4dCxcbiAgICAgICAgdXNlckV2ZW50czogcGF5bG9hZD8udXNlckV2ZW50cyxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXCJGYWlsZWQgdG8gZ2V0IG5leHQgcmVzcG9uc2VzXCIsIGVycik7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0UmVzcG9uc2VTdHJlYW1pbmcgPSAoXG4gICAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0XG4gICk6IEFzeW5jR2VuZXJhdG9yPEFwaVJlc3BvbnNlLCB2b2lkLCB1bmtub3duPiA9PiB7XG4gICAgYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlKFxuICAgICAgaW5mZXJlbmNlQXBpOiBJbmZlcmVuY2VBcGksXG4gICAgICBhYm9ydENvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICAgICkge1xuICAgICAgLy8gbWFrZSBzdXJlIHN0cmVhbWluZyBpcyBlbmFibGVkXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGluZmVyZW5jZUFwaS52MU5leHRSZXNwb25zZXNQb3N0UmF3KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHNpZ25hbDogYWJvcnRDb250cm9sbGVyLnNpZ25hbCB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmVhZCB0aGUgcmVzcG9uc2UgYXMgYSBzdHJlYW0gb2YgZGF0YVxuICAgICAgICBpZiAoIXJlc3BvbnNlLnJhdy5ib2R5KSB7XG4gICAgICAgICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgICAgICAgXCJbc3BpZmZ5LWFpXSBObyBib2R5IGluIHRoZSBzdHJlYW1lZCByZXNwb25zZVwiLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXNwb25zZTogcmVzcG9uc2UucmF3LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UucmF3LmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKTtcblxuICAgICAgICBsZXQgcGFydGlhbCA9IFwiXCI7XG4gICAgICAgIC8vIFRPRE8gdGhpcyBmdW5jdGlvbiBpcyByZWNyZWF0ZWQgZXZlcnkgdGltZSBuZXcgZGF0YSBjb21lcyBmcm9tIHRoZSBzdHJlYW0gLSBkZWZpbmUgaXQgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhdG9yXG4gICAgICAgIGNvbnN0IHNhZmVQYXJzZSA9IChsaW5lOiBzdHJpbmcpOiB1bmtub3duID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobGluZSk7IC8vIFBhcnNlIHRoZSBKU09OIHN0cmluZ1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgTG9nZ2VyLmxvZ0Vycm9yKFwiW3NwaWZmeS1haV0gRXJyb3IgcGFyc2luZyBzdHJlYW1lZCBsaW5lXCIsIGVyciwge1xuICAgICAgICAgICAgICBsaW5lLFxuICAgICAgICAgICAgICBwYXJ0aWFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhbmQgc2V0IHRoZSBwYXJ0aWFsIHRvIG91ciBjdXJyZW50IGNodW5rXG4gICAgICAgICAgICBwYXJ0aWFsID0gbGluZTtcbiAgICAgICAgICAgIHJldHVybiBwYXJ0aWFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBUT0RPIHRoaXMgZnVuY3Rpb24gaXMgcmVjcmVhdGVkIGV2ZXJ5IHRpbWUgbmV3IGRhdGEgY29tZXMgZnJvbSB0aGUgc3RyZWFtIC0gZGVmaW5lIGl0IG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvclxuICAgICAgICBjb25zdCBwcm9jZXNzQ2h1bmsgPSAoY2h1bms6IHN0cmluZyk6IHVua25vd25bXSA9PiB7XG4gICAgICAgICAgLy8gbWVyZ2UgdGhlIHBhcnRpYWwgd2l0aCB0aGUgaW5jb21pbmcgY2h1bmtcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGAke3BhcnRpYWx9JHtjaHVua31gLnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICAgICAgY29uc3QgcGFyc2VkTGluZXMgPSBsaW5lc1xuICAgICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKC9eZGF0YTogLywgXCJcIikudHJpbSgpKSAvLyBSZW1vdmUgdGhlIFwiZGF0YTogXCIgcHJlZml4XG4gICAgICAgICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSBcIlwiICYmIGxpbmUgIT09IFwiW0RPTkVdXCIpIC8vIFJlbW92ZSBlbXB0eSBsaW5lcyBhbmQgXCJbRE9ORV1cIlxuICAgICAgICAgICAgLm1hcChzYWZlUGFyc2UpXG4gICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2KTsgLy8gYW5kIGZpbHRlciBvdXQgdGhlIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgICByZXR1cm4gcGFyc2VkTGluZXM7XG4gICAgICAgIH07XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG5cbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTWFzc2FnZSBhbmQgcGFyc2UgdGhlIGNodW5rIG9mIGRhdGFcbiAgICAgICAgICBjb25zdCBjaHVuayA9IGRlY29kZXIuZGVjb2RlKHZhbHVlKTtcbiAgICAgICAgICBjb25zdCBwYXJzZWRMaW5lcyA9IHByb2Nlc3NDaHVuayhjaHVuayk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHBhcnNlZExpbmUgb2YgcGFyc2VkTGluZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFJlc3BvbnNlID0gdmFsaWRhdGVSZXNwb25zZShwYXJzZWRMaW5lKTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZFJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlZFJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgICAgIFwiW3NwaWZmeS1haV0gRmFpbGVkIHRvIGdldCBuZXh0IHN0cmVhbWluZyByZXNwb25zZXNcIixcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXlsb2FkQ29udGV4dDogcGF5bG9hZD8uY29udGV4dCxcbiAgICAgICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihcbiAgICAgICAgICBcIkZhaWxlZCB0byBnZXQgbmV4dCBzdHJlYW1pbmcgcmVzcG9uc2VzXCIsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLnJlc3BvbnNlc0Fib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkucmVzcG9uc2VzQWJvcnRDb250cm9sbGVyID1cbiAgICAgIG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHJldHVybiBnZW5lcmF0ZShcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLFxuICAgICAgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5yZXNwb25zZXNBYm9ydENvbnRyb2xsZXJcbiAgICApO1xuICB9O1xuXG4gIHN0YXRpYyBnZXROZXh0U3VnZ2VzdGlvbnMgPSBhc3luYyAoXG4gICAgcGF5bG9hZDogTmV4dE1lc3NhZ2VSZXF1ZXN0XG4gICk6IFByb21pc2U8U3VnZ2VzdGlvbltdPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIgPVxuICAgICAgICBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5pbmZlcmVuY2VBcGkudjFOZXh0U3VnZ2VzdGlvbnNQb3N0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIE5leHRNZXNzYWdlUmVxdWVzdDogbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QocGF5bG9hZCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaWduYWw6XG4gICAgICAgICAgICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuc3VnZ2VzdGlvbnNBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSByZXNwb25zZVxuICAgICAgICAubWFwKChyZXNwKSA9PiB2YWxpZGF0ZVN1Z2dlc3Rpb24ocmVzcCkpXG4gICAgICAgIC5maWx0ZXIoKHN1Z2dlc3Rpb24pOiBzdWdnZXN0aW9uIGlzIFN1Z2dlc3Rpb24gPT4gc3VnZ2VzdGlvbiAhPSBudWxsKTtcblxuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBMb2dnZXIubG9nSW5mbyhcIkZhaWxlZCB0byBnZXQgc3VnZ2VzdGlvbnNcIiwgZXJyb3IsIHtcbiAgICAgICAgcGF5bG9hZENvbnRleHQ6IHBheWxvYWQ/LmNvbnRleHQsXG4gICAgICAgIHVzZXJFdmVudHM6IHBheWxvYWQ/LnVzZXJFdmVudHMsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhyb3dTZXNzaW9uUmVzdGFydFJlcXVpcmVkSWYoXCJGYWlsZWQgdG8gZ2V0IHN1Z2dlc3Rpb25zXCIsIGVycm9yKTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGV4aXN0aW5nIGNoYXQgZGF0YSBmb3IgYSBnaXZlbiBzZXNzaW9uIGFuZCB0cmFuc2Zvcm1zIHRoZW0gdG8gcmVjb25zdHJ1Y3QgdGhlIGNoYXQgaGlzdG9yeS5cbiAgICpcbiAgICogQHBhcmFtIG9yZ0lkIFRoZSBvcmdhbml6YXRpb24gSWRcbiAgICogQHBhcmFtIGNoYXRJZCBUaGUgZXhpc3RpbmcgY2hhdCBJZFxuICAgKiBAcGFyYW0gdXNlcklkIFRoZSB1c2VyIElkXG4gICAqXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiBtZXNzYWdlcyB0aGF0IHdlcmUgZXhjaGFuZ2VkIGluIHRoZSBjaGF0LCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNoYXQgc2Vzc2lvbiBoYXMgZXhwaXJlZC5cbiAgICovXG4gIHN0YXRpYyBnZXRSZXNwb25zZXMgPSBhc3luYyAoXG4gICAgb3JnSWQ6IHN0cmluZyxcbiAgICBjaGF0SWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPHtcbiAgICByZXNwb25zZXM6IEFwaVJlc3BvbnNlW11bXTtcbiAgICB1c2VyRXZlbnRzOiBVc2VyRXZlbnRbXTtcbiAgICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAgIG1lc3NhZ2VzOiBNZXNzYWdlW11bXTtcbiAgfT4gPT4ge1xuICAgIGxldCBkYXRhOiBWMUdldFNlc3Npb25NZXNzYWdlczIwMFJlc3BvbnNlID0ge1xuICAgICAgcmVzcG9uc2VzOiBbXSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHVzZXJfZXZlbnRzOiBbXSxcbiAgICB9O1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBvcmdfaWQ6IG9yZ0lkLFxuICAgICAgY2hhdF9pZDogY2hhdElkLFxuICAgICAgdXNlcl9pZDogdXNlcklkLFxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPVxuICAgICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5nZXRJbnN0YW5jZSgpLmRlZmF1bHRBcGkudjFHZXRTZXNzaW9uTWVzc2FnZXMoXG4gICAgICAgICAgcmVxdWVzdFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBhd2FpdCB0aHJvd1Nlc3Npb25SZXN0YXJ0UmVxdWlyZWRJZihcbiAgICAgICAgXCJGYWlsZWQgdG8gZ2V0IGNoYXQgcmVzcG9uc2VzXCIsXG4gICAgICAgIGVycm9yXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlczogQXBpUmVzcG9uc2VbXVtdID0gZGF0YT8ucmVzcG9uc2VzPy5tYXAoKHR1cm4pID0+XG4gICAgICB0dXJuXG4gICAgICAgIC5tYXAoKHJlc3BvbnNlKSA9PiB2YWxpZGF0ZVJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgLmZpbHRlcigocmVzcG9uc2UpOiByZXNwb25zZSBpcyBBcGlSZXNwb25zZSA9PiByZXNwb25zZSAhPSBudWxsKVxuICAgICk7XG5cbiAgICBjb25zdCBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdID0gZGF0YT8uc3VnZ2VzdGlvbnNcbiAgICAgIC5tYXAoKHN1Z2dlc3Rpb24pID0+IHZhbGlkYXRlU3VnZ2VzdGlvbihzdWdnZXN0aW9uKSlcbiAgICAgIC5maWx0ZXIoKHN1Z2dlc3Rpb24pOiBzdWdnZXN0aW9uIGlzIFN1Z2dlc3Rpb24gPT4gc3VnZ2VzdGlvbiAhPSBudWxsKTtcblxuICAgIGNvbnN0IHVzZXJFdmVudHM6IFVzZXJFdmVudFtdID0gZGF0YT8udXNlcl9ldmVudHNcbiAgICAgIC5tYXAoKGV2ZW50KSA9PiB2YWxpZGF0ZVVzZXJFdmVudChldmVudCkpXG4gICAgICAuZmlsdGVyKChldmVudCk6IGV2ZW50IGlzIFVzZXJFdmVudCA9PiBldmVudCAhPSBudWxsKTtcblxuICAgIC8vIGlmIGEgZm9ybSBoYXMgYWxyZWFkeSBiZWVuIHN1Ym1pdHRlZCwgZG9uJ3Qgc2hvdyBpdCBpbiB0aGUgY2hhdCBoaXN0b3J5XG4gICAgY29uc3QgZm9ybVN1Ym1pdHRlZFVzZXJFdmVudHNGb3JtSWRzID0gdXNlckV2ZW50c1xuICAgICAgLmZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKVxuICAgICAgLm1hcCgoZXZlbnQpID0+IGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQpO1xuXG4gICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZXM6IE1lc3NhZ2VbXVtdID0gcmVzcG9uc2VzXG4gICAgICAubWFwKCh0dXJuKSA9PlxuICAgICAgICB0dXJuXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICByZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtICYmXG4gICAgICAgICAgICAgICAgZm9ybVN1Ym1pdHRlZFVzZXJFdmVudHNGb3JtSWRzLmluY2x1ZGVzKHJlc3BvbnNlLmlkKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKHJlc3BvbnNlKSA9PiBtZXNzYWdlRnJvbVJlc3BvbnNlKHJlc3BvbnNlKSlcbiAgICAgICAgICAuZmlsdGVyKChtZXNzYWdlKTogbWVzc2FnZSBpcyBNZXNzYWdlID0+IG1lc3NhZ2UgIT0gbnVsbClcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoKHR1cm4pID0+IHR1cm4ubGVuZ3RoID4gMCk7XG5cbiAgICBjb25zdCB1c2VyTWVzc2FnZXM6IE1lc3NhZ2VbXVtdID0gdXNlckV2ZW50c1xuICAgICAgLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFtVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLCBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2hdLmluY2x1ZGVzKFxuICAgICAgICAgICAgZXZlbnQuY2F0ZWdvcnlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBbbWVzc2FnZUZyb21RdWVyeUV2ZW50KGV2ZW50KV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlN1Z2dlc3Rpb25DbGlja2VkKSB7XG4gICAgICAgICAgcmV0dXJuIFttZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudChldmVudCwgc3VnZ2VzdGlvbnMpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgICAgICAgIGNvbnN0IGZvcm1SZXNwb25zZSA9IHJlc3BvbnNlc1xuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgIChyZXNwb25zZSkgPT5cbiAgICAgICAgICAgICAgICByZXNwb25zZS5pZCA9PT0gZXZlbnQuYXR0cmlidXRlcy5mb3JtUmVzcG9uc2VJZCAmJlxuICAgICAgICAgICAgICAgIGV2ZW50LmF0dHJpYnV0ZXMuZm9ybVR5cGUgIT09IEZvcm1UeXBlLkVzY2FsYXRpb25cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoZm9ybVJlc3BvbnNlICYmIGZvcm1SZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudChldmVudCwgZm9ybVJlc3BvbnNlLmF0dHJpYnV0ZXMpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigobWVzc2FnZSk6IG1lc3NhZ2UgaXMgTWVzc2FnZVtdID0+IG1lc3NhZ2UubGVuZ3RoID4gMCk7XG5cbiAgICAvLyBTb3J0IHRoZSBtZXNzYWdlcyBjaHJvbm9sb2dpY2FsbHkgdG8gcmVjb25zdHJ1Y3QgdGhlIGNoYXQgaGlzdG9yeVxuICAgIGNvbnN0IHNvcnRlZE1lc3NhZ2VzID0gWy4uLmFzc2lzdGFudE1lc3NhZ2VzLCAuLi51c2VyTWVzc2FnZXNdLnNvcnQoXG4gICAgICAoYSwgYikgPT5cbiAgICAgICAgbmV3IERhdGUoYVswXS5jcmVhdGVkQXQpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGJbMF0uY3JlYXRlZEF0KS5nZXRUaW1lKClcbiAgICApO1xuXG4gICAgcmV0dXJuIHsgcmVzcG9uc2VzLCB1c2VyRXZlbnRzLCBzdWdnZXN0aW9ucywgbWVzc2FnZXM6IHNvcnRlZE1lc3NhZ2VzIH07XG4gIH07XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwYXlsb2FkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgaXNTdXBwb3J0ZWRFdmVudCA9IGFzeW5jIChcbiAgICBwYXlsb2FkOiBTdXBwb3J0ZWRFdmVudFJlcXVlc3RcbiAgKTogUHJvbWlzZTxTdXBwb3J0ZWRFdmVudD4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXdSZXNwb25zZSA9XG4gICAgICAgIGF3YWl0IENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuaW5mZXJlbmNlQXBpLnYxU3VwcG9ydGVkRXZlbnRQb3N0UmF3KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFN1cHBvcnRlZEV2ZW50UmVxdWVzdDpcbiAgICAgICAgICAgICAgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdChwYXlsb2FkKSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgIC8vIEdldCB0aGUgYWN0dWFsIEhUVFAgcmVzcG9uc2UgSlNPTlxuICAgICAgY29uc3QgaHR0cFJlc3BvbnNlVGV4dCA9IGF3YWl0IHJhd1Jlc3BvbnNlLnJhdy50ZXh0KCk7XG4gICAgICBjb25zdCBodHRwUmVzcG9uc2VKc29uID0gSlNPTi5wYXJzZShodHRwUmVzcG9uc2VUZXh0KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaHR0cFJlc3BvbnNlSnNvbixcbiAgICAgICAgbnVtYmVyT2ZSZXZpZXdzOiBodHRwUmVzcG9uc2VKc29uLm51bV9vZl9yZXZpZXdzLFxuICAgICAgICBtZXJjaGFudF90YWdzOiBodHRwUmVzcG9uc2VKc29uLm1lcmNoYW50X3RhZ3MgfHwgW10sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKFwiRmFpbGVkIHRvIGdldCByZXNwb25zZSBmb3IgdjFTdXBwb3J0ZWRFdmVudFBvc3RcIiwge1xuICAgICAgICBlcnIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1cHBvcnRlZDogZmFsc2UsXG4gICAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgICAgY2F0ZWdvcnk6IHVuZGVmaW5lZCxcbiAgICAgICAgY29sbGVjdGlvbnM6IFtdLFxuICAgICAgICBudW1iZXJPZlJldmlld3M6IHVuZGVmaW5lZCxcbiAgICAgICAgdG9wX2NhdGVnb3J5OiB1bmRlZmluZWQsXG4gICAgICAgIG1lcmNoYW50X3RhZ3M6IFtdLFxuICAgICAgfTtcbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGlkZW50aWZ5VXNlciA9IGFzeW5jIChcbiAgICBzcGlmZnlVc2VySWQ6IHN0cmluZyxcbiAgICBtZXJjaGFudFVzZXJJZDogc3RyaW5nLFxuICAgIHVhRGV0YWlsczogQ2xpZW50RGV0YWlsc1xuICApOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxQW5hbHl0aWNzSWRlbnRpZnlQb3N0KHtcbiAgICAgICAgQW5hbHl0aWNzSWRlbnRpZnlSZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcl9pZDogc3BpZmZ5VXNlcklkLFxuICAgICAgICAgIG9zX25hbWU6IHVhRGV0YWlscy5vcyxcbiAgICAgICAgICBvc192ZXJzaW9uOiB1YURldGFpbHMub3NWZXJzaW9uLFxuICAgICAgICAgIHBsYXRmb3JtOiB1YURldGFpbHMub3MsXG4gICAgICAgICAgZGV2aWNlX2lkOiB1YURldGFpbHMuZGV2aWNlTW9kZWwsXG4gICAgICAgICAgZGV2aWNlX2JyYW5kOiB1YURldGFpbHMuZGV2aWNlQnJhbmQsXG4gICAgICAgICAgZGV2aWNlX21hbnVmYWN0dXJlcjogdWFEZXRhaWxzLmRldmljZU1hbnVmYWN0dXJlcixcbiAgICAgICAgICBkZXZpY2VfbW9kZWw6IHVhRGV0YWlscy5kZXZpY2VNb2RlbCxcbiAgICAgICAgICB1c2VyX3Byb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGNkcF91c2VyX2lkOiBtZXJjaGFudFVzZXJJZCxcbiAgICAgICAgICAgIGJyb3dzZXI6IHVhRGV0YWlscy5icm93c2VyLFxuICAgICAgICAgICAgYnJvd3Nlcl92ZXJzaW9uOiB1YURldGFpbHMuYnJvd3NlclZlcnNpb24sXG4gICAgICAgICAgICB1c2VyX2FnZW50OiB1YURldGFpbHMudXNlckFnZW50LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcIkZhaWxlZCB0byBpZGVudGlmeSB1c2VyXCIsIGVycik7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIG1hcENvbnRleHRTb3VyY2VUb1YxT3JnQ29uZmlnR2V0U291cmNlID0gKFxuICAgIHNvdXJjZTogQ29udGV4dFNvdXJjZUVudW0gfCB1bmRlZmluZWRcbiAgKTogVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3dpdGNoIChzb3VyY2UpIHtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uRm9yazpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5Gb3JrO1xuICAgICAgY2FzZSBDb250ZXh0U291cmNlRW51bS5QbGF5Z3JvdW5kOlxuICAgICAgICByZXR1cm4gVjFPcmdDb25maWdHZXRTb3VyY2VFbnVtLlBsYXlncm91bmQ7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLkFwcDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5BcHA7XG4gICAgICBjYXNlIENvbnRleHRTb3VyY2VFbnVtLlRlc3Q6XG4gICAgICAgIHJldHVybiBWMU9yZ0NvbmZpZ0dldFNvdXJjZUVudW0uVGVzdDtcbiAgICAgIGNhc2UgQ29udGV4dFNvdXJjZUVudW0uRXZhbDpcbiAgICAgICAgcmV0dXJuIFYxT3JnQ29uZmlnR2V0U291cmNlRW51bS5UZXN0O1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiBuZXcgdmFsdWVzIGFyZSBhZGRlZCB0byBDb250ZXh0U291cmNlRW51bSwgd2UgY2F0Y2ggaXRcbiAgICAgICAgY29uc3QgZXhoYXVzdGl2ZUNoZWNrOiBuZXZlciA9IHNvdXJjZTtcbiAgICAgICAgcmV0dXJuIGV4aGF1c3RpdmVDaGVjaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc3RhdGljIGdldE9yZ0NvbmZpZyA9IGFzeW5jIChcbiAgICB1c2VyX2lkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxPcmdDb25maWcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYXRvbVN0b3JlID0gZ2V0QXRvbVN0b3JlKCk7XG4gICAgICBjb25zdCByZWFjdEFwcE5hbWUgPSBhdG9tU3RvcmUuZ2V0KHJlYWN0QXBwTmFtZUF0b20pO1xuICAgICAgY29uc3QgY29udGV4dFNvdXJjZSA9IGF0b21TdG9yZS5nZXQoY29udGV4dFNvdXJjZUF0b20pO1xuICAgICAgY29uc3QgZmVhdHVyZUZsYWdTZXJ2aWNlID0gYXRvbVN0b3JlLmdldChmZWF0dXJlRmxhZ1NlcnZpY2VBdG9tKTsgLy8gR2V0IGZlYXR1cmVGbGFnU2VydmljZVxuICAgICAgY29uc3QgcmVxdWVzdDogVjFPcmdDb25maWdHZXRSZXF1ZXN0ID0ge1xuICAgICAgICBuYW1lc3BhY2U6IHJlYWN0QXBwTmFtZSxcbiAgICAgICAgdXNlcl9pZCxcbiAgICAgICAgc291cmNlOiB0aGlzLm1hcENvbnRleHRTb3VyY2VUb1YxT3JnQ29uZmlnR2V0U291cmNlKGNvbnRleHRTb3VyY2UpLFxuICAgICAgICBpbmNsdWRlX2V4cGVyaW1lbnRzOiBPYmplY3QudmFsdWVzKFByb2R1Y3RFeHBlcmltZW50KSxcbiAgICAgICAgaW5jbHVkZV9mZWF0dXJlX2dhdGVzOiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICBmZWF0dXJlRmxhZ1NlcnZpY2U/LmZlYXR1cmVGbGFnU2VydmljZT8uZ2V0RmVhdHVyZUZsYWdzKCkgfHwge31cbiAgICAgICAgKVxuICAgICAgICAgIC5maWx0ZXIoKFssIGlzRW5hYmxlZF0pID0+IGlzRW5hYmxlZClcbiAgICAgICAgICAubWFwKChbZmVhdHVyZUdhdGVOYW1lXSkgPT4gZmVhdHVyZUdhdGVOYW1lKSwgLy8gVXNlIGZlYXR1cmVGbGFnU2VydmljZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID1cbiAgICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5kZWZhdWx0QXBpLnYxT3JnQ29uZmlnR2V0KFxuICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgKTtcblxuICAgICAgcmV0dXJuIHZhbGlkYXRlT3JnQ29uZmlnUmVzdWx0cyhyZXNwb25zZSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoYEZhaWxlZCB0byBnZXQgb3JnIGNvbmZpZ2AsIGVyciwgeyBlcnIgfSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICBzdGF0aWMgYWRkTm90ZVRvTGF0ZXN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICAgIHNwaWZmeVVzZXJJZDogc3RyaW5nLFxuICAgIGVtYWlsOiBzdHJpbmcsXG4gICAgY3VzdG9tZXJTZXJ2aWNlUHJvdmlkZXI6IEN1c3RvbWVyU2VydmljZVByb3ZpZGVyXG4gICkgPT4ge1xuICAgIExvZ2dlci5sb2dJbmZvKFxuICAgICAgYGFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvbiAtIHVzZXJfaWQ9JHtzcGlmZnlVc2VySWR9IGVtYWlsPSR7ZW1haWx9IGN1c3RvbWVyX3NlcnZpY2VfcHJvdmlkZXI9JHtjdXN0b21lclNlcnZpY2VQcm92aWRlcn1gXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgQ29tbWVyY2VBcGlDbGllbnQuZ2V0SW5zdGFuY2UoKS5jdXN0b21lclNlcnZpY2VBcGkudjFDdXN0c2VydmljZUFkZE5vdGVUb0xhdGVzdENvbnZlcnNhdGlvblBvc3QoXG4gICAgICAgIHtcbiAgICAgICAgICBBZGROb3RlVG9MYXRlc3RDb252ZXJzYXRpb25SZXF1ZXN0OiB7XG4gICAgICAgICAgICBzcGlmZnlfdXNlcl9pZDogc3BpZmZ5VXNlcklkLFxuICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICBjdXN0b21lcl9zZXJ2aWNlX3Byb3ZpZGVyOiBjdXN0b21lclNlcnZpY2VQcm92aWRlcixcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgTG9nZ2VyLmxvZ0Vycm9yKFwiRmFpbGVkIHRvIGFkZCBub3RlIHRvIGxhdGVzdCBjb252ZXJzYXRpb25cIiwgeyBlcnIgfSk7XG4gICAgfVxuICB9O1xuXG4gIHN0YXRpYyBnZXRDdXN0b21lclNlcnZpY2VBcGkgPSAoKSA9PlxuICAgIENvbW1lcmNlQXBpQ2xpZW50LmdldEluc3RhbmNlKCkuY3VzdG9tZXJTZXJ2aWNlQXBpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb21tZXJjZUFwaUNsaWVudDtcbiIsImltcG9ydCBSZWFjdCwgeyBjcmVhdGVDb250ZXh0LCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVQVBhcnNlciBmcm9tICd1YS1wYXJzZXItanMnO1xuaW1wb3J0IHsgQ2xpZW50RGV0YWlscywgVXNlcklkZW50aXR5Q29udGV4dFR5cGUgfSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnLi4vLi4vYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuaW1wb3J0IENvbW1lcmNlQXBpQ2xpZW50IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uL2NvbW1lcmNlLWFwaSc7XG5pbXBvcnQgeyB1c2VMb2NhbFN0b3JhZ2UgfSBmcm9tICcuLi9sb2NhbFN0b3JhZ2VDb250ZXh0JztcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tICd1dWlkJztcblxuLy8gSGVscGVyIGZ1bmN0aW9uIGZyb20gdGhlIG9yaWdpbmFsIHNlcnZpY2VcbmNvbnN0IGdldFVzZXJBZ2VudERldGFpbHMgPSAoKTogQ2xpZW50RGV0YWlscyA9PiB7XG4gIGNvbnN0IHVhUGFyc2VyID0gbmV3IFVBUGFyc2VyKCk7XG4gIGNvbnN0IHJlc3VsdCA9IHVhUGFyc2VyLmdldFJlc3VsdCgpO1xuXG4gIHJldHVybiB7XG4gICAgb3M6IHJlc3VsdD8ub3M/Lm5hbWUsXG4gICAgb3NWZXJzaW9uOiByZXN1bHQ/Lm9zPy52ZXJzaW9uLFxuICAgIGRldmljZUJyYW5kOiByZXN1bHQ/LmRldmljZT8udmVuZG9yLFxuICAgIGRldmljZU1hbnVmYWN0dXJlcjogcmVzdWx0Py5kZXZpY2U/LnZlbmRvcixcbiAgICBkZXZpY2VNb2RlbDogcmVzdWx0Py5kZXZpY2U/Lm1vZGVsLFxuICAgIGJyb3dzZXI6IHJlc3VsdD8uYnJvd3Nlcj8ubmFtZSxcbiAgICBicm93c2VyVmVyc2lvbjogcmVzdWx0Py5icm93c2VyPy52ZXJzaW9uLFxuICAgIHVzZXJBZ2VudDogcmVzdWx0Py51YSxcbiAgfTtcbn07XG5cbmNvbnN0IFVzZXJJZGVudGl0eUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PFVzZXJJZGVudGl0eUNvbnRleHRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG5leHBvcnQgY29uc3QgVXNlcklkZW50aXR5UHJvdmlkZXI6IFJlYWN0LkZDPHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9PiA9ICh7IGNoaWxkcmVuIH0pID0+IHtcbiAgY29uc3QgeyBnZXRJdGVtLCBzZXRJdGVtLCBpc0F2YWlsYWJsZTogbG9jYWxTdG9yYWdlSXNSZWFkeSB9ID0gdXNlTG9jYWxTdG9yYWdlKCk7XG5cbiAgY29uc3QgW2lzUmVhZHksIHNldElzUmVhZHldID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQXNzdW1pbmcgQ29tbWVyY2VBcGlDbGllbnQgYW5kIG90aGVyIGRlcGVuZGVuY2llcyBhcmUgcmVhZHkgaWYgbG9jYWxTdG9yYWdlIGlzLlxuICAgIC8vIEluIGEgbW9yZSBjb21wbGV4IHNjZW5hcmlvLCB5b3UgbWlnaHQgaGF2ZSBtb3JlIGNoZWNrcyBoZXJlLlxuICAgIHNldElzUmVhZHkobG9jYWxTdG9yYWdlSXNSZWFkeSk7XG4gIH0sIFtsb2NhbFN0b3JhZ2VJc1JlYWR5XSk7XG5cbiAgY29uc3QgVVNFUl9JRF9PVkVSUklERV9LRVkgPSAndjEtc3BpZmZ5LXVzZXItaWQtb3ZlcnJpZGUnO1xuICBjb25zdCBVU0VSX0lEX0RFRkFVTFRfS0VZID0gJ3YxLXNwaWZmeS11c2VyLWlkLWRlZmF1bHQnO1xuXG4gIGNvbnN0IGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSA9IHVzZUNhbGxiYWNrKFxuICAgICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gZ2V0SXRlbShVU0VSX0lEX09WRVJSSURFX0tFWSkgPz8gdW5kZWZpbmVkLFxuICAgIFtnZXRJdGVtXSxcbiAgKTtcblxuICBjb25zdCBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSA9IHVzZUNhbGxiYWNrKFxuICAgICgpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4gZ2V0SXRlbShVU0VSX0lEX0RFRkFVTFRfS0VZKSA/PyB1bmRlZmluZWQsXG4gICAgW2dldEl0ZW1dLFxuICApO1xuXG4gIGNvbnN0IHNldFVzZXJJZERlZmF1bHRJbkxvY2FsU3RvcmFnZSA9IHVzZUNhbGxiYWNrKFxuICAgICh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICBMb2dnZXIubG9nSW5mbyhgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlIC0gU2V0dGluZyB1c2VyX2lkPSR7dXNlcklkfWApO1xuICAgICAgc2V0SXRlbShVU0VSX0lEX0RFRkFVTFRfS0VZLCB1c2VySWQpO1xuICAgICAgLy8gd2luZG93LmRpc3BhdGNoRXZlbnQgaXMgaGFuZGxlZCBieSB1c2VMb2NhbFN0b3JhZ2Ugbm93XG4gICAgICByZXR1cm4gdXNlcklkO1xuICAgIH0sXG4gICAgW3NldEl0ZW0sIFVTRVJfSURfREVGQVVMVF9LRVldLFxuICApO1xuXG4gIGNvbnN0IHNldFVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodXNlcklkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgTG9nZ2VyLmxvZ0luZm8oYHNldFVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UgLSBTZXR0aW5nIHVzZXJfaWQ9JHt1c2VySWR9YCk7XG4gICAgICBzZXRJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZLCB1c2VySWQpO1xuICAgICAgLy8gd2luZG93LmRpc3BhdGNoRXZlbnQgaXMgaGFuZGxlZCBieSB1c2VMb2NhbFN0b3JhZ2Ugbm93XG4gICAgICByZXR1cm4gdXNlcklkO1xuICAgIH0sXG4gICAgW3NldEl0ZW0sIFVTRVJfSURfT1ZFUlJJREVfS0VZXSxcbiAgKTtcblxuICBjb25zdCBjbGVhclVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgTG9nZ2VyLmxvZ0luZm8oYGNsZWFyVXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSAtIENsZWFyaW5nIHVzZXJfaWRgKTtcbiAgICAvLyBMb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldExvY2FsU3RvcmFnZSgpPy5yZW1vdmVJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZKTtcbiAgICAvLyB3aW5kb3cuZGlzcGF0Y2hFdmVudCBpcyBoYW5kbGVkIGJ5IHVzZUxvY2FsU3RvcmFnZSBub3dcbiAgICBzZXRJdGVtKFVTRVJfSURfT1ZFUlJJREVfS0VZLCAnJyk7IC8vIFNldCB0byBlbXB0eSBzdHJpbmcgdG8gY2xlYXJcbiAgfSwgW3NldEl0ZW0sIFVTRVJfSURfT1ZFUlJJREVfS0VZXSk7XG5cbiAgY29uc3QgZ2V0VXNlcklkT3JEZWZhdWx0ID0gdXNlQ2FsbGJhY2soKCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgdXNlcklkT3ZlcnJpZGUgPSBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAodXNlcklkT3ZlcnJpZGUpIHtcbiAgICAgIHJldHVybiB1c2VySWRPdmVycmlkZTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VXNlcklkID0gZ2V0VXNlcklkRGVmYXVsdEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICBpZiAoZGVmYXVsdFVzZXJJZCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRVc2VySWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFVzZXJJZERlZmF1bHRJbkxvY2FsU3RvcmFnZShgc3BpZmZ5LXVzZXItaWQtJHt1dWlkKCl9YCk7XG4gIH0sIFtcbiAgICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgZ2V0VXNlcklkRGVmYXVsdEZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlLFxuICBdKTtcblxuICBjb25zdCBpZGVudGlmeVVzZXIgPSB1c2VDYWxsYmFjayhhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgaWYgKCFpc1JlYWR5KSB7XG4gICAgICBMb2dnZXIubG9nV2FybignW1VzZXJJZGVudGl0eUNvbnRleHRdIENvbnRleHQgbm90IHJlYWR5LCBza2lwcGluZyBpZGVudGlmeVVzZXInLCB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUZW1wb3JhcmlseSBjb21tZW50ZWQgb3V0IHVudGlsIFdpbmRvd0RhdGFMYXllclNlcnZpY2UgaXMgcmVzb2x2ZWRcbiAgICAgIC8vIGNvbnN0IGNkcFVzZXJJZCA9IFdpbmRvd0RhdGFMYXllclNlcnZpY2UuZ2V0R29vZ2xlQW5hbHl0aWNzQ2xpZW50SWQoKTtcbiAgICAgIGNvbnN0IGNkcFVzZXJJZCA9ICdVTktOT1dOX0NEUF9VU0VSX0lEJzsgLy8gUGxhY2Vob2xkZXJcbiAgICAgIGNvbnN0IHVzZXJJZCA9IGdldFVzZXJJZE9yRGVmYXVsdCgpO1xuICAgICAgY29uc3QgdXNlckFnZW50RGV0YWlscyA9IGdldFVzZXJBZ2VudERldGFpbHMoKTtcblxuICAgICAgaWYgKCFjZHBVc2VySWQpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ1dhcm4oJ1tzcGlmZnktYWldIE5vIEdBIENsaWVudCBJRCBmb3VuZCwgc2tpcHBpbmcgaWRlbnRpZnlVc2VyJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBDb21tZXJjZUFwaUNsaWVudC5pZGVudGlmeVVzZXIodXNlcklkLCBjZHBVc2VySWQsIHVzZXJBZ2VudERldGFpbHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBMb2dnZXIubG9nRXJyb3IoJ1tzcGlmZnktYWldIEVycm9yIGlkZW50aWZ5aW5nIHVzZXInLCBlcnJvcik7XG4gICAgfVxuICB9LCBbaXNSZWFkeSwgZ2V0VXNlcklkT3JEZWZhdWx0XSk7XG5cbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBpZGVudGlmeVVzZXIsXG4gICAgICBnZXRVc2VySWRPckRlZmF1bHQsXG4gICAgICBnZXRVc2VySWRPdmVycmlkZUZyb21Mb2NhbFN0b3JhZ2UsXG4gICAgICBnZXRVc2VySWREZWZhdWx0RnJvbUxvY2FsU3RvcmFnZSxcbiAgICAgIHNldFVzZXJJZERlZmF1bHRJbkxvY2FsU3RvcmFnZSxcbiAgICAgIHNldFVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBjbGVhclVzZXJJZE92ZXJyaWRlSW5Mb2NhbFN0b3JhZ2UsXG4gICAgICBpc1JlYWR5LFxuICAgIH0pLFxuICAgIFtcbiAgICAgIGlkZW50aWZ5VXNlcixcbiAgICAgIGdldFVzZXJJZE9yRGVmYXVsdCxcbiAgICAgIGdldFVzZXJJZE92ZXJyaWRlRnJvbUxvY2FsU3RvcmFnZSxcbiAgICAgIGdldFVzZXJJZERlZmF1bHRGcm9tTG9jYWxTdG9yYWdlLFxuICAgICAgc2V0VXNlcklkRGVmYXVsdEluTG9jYWxTdG9yYWdlLFxuICAgICAgc2V0VXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSxcbiAgICAgIGNsZWFyVXNlcklkT3ZlcnJpZGVJbkxvY2FsU3RvcmFnZSxcbiAgICAgIGlzUmVhZHksXG4gICAgXSxcbiAgKTtcblxuICByZXR1cm4gPFVzZXJJZGVudGl0eUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3ZhbHVlfT57Y2hpbGRyZW59PC9Vc2VySWRlbnRpdHlDb250ZXh0LlByb3ZpZGVyPjtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VVc2VySWRlbnRpdHkgPSAoKSA9PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFVzZXJJZGVudGl0eUNvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZVVzZXJJZGVudGl0eSBtdXN0IGJlIHVzZWQgd2l0aGluIGEgVXNlcklkZW50aXR5UHJvdmlkZXInKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNERBLGVBQWUsa0JB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
@@ -24,4 +24,4 @@ const hasPropertyOfType = (obj, prop, type, isOptional = false) => {
24
24
 
25
25
  //#endregion
26
26
  export { hasPropertyOfType };
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtREl2TWdQZTguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5IG9mIGEgc3BlY2lmaWMgdHlwZVxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGNoZWNrXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGlzT3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlID0gPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBvYmo6IHVua25vd24sXG4gIHByb3A6IGtleW9mIFQsXG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheScsXG4gIGlzT3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZSxcbik6IG9iaiBpcyBUID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCwgaXQncyB2YWxpZCBmb3IgYW4gb3B0aW9uYWwgcHJvcGVydHlcbiAgICBpZiAoIShwcm9wIGluIG9iaikpIHtcbiAgICAgIHJldHVybiBpc09wdGlvbmFsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gKG9iaiBhcyBUKVtwcm9wXTtcblxuICAgIC8vIEZvciBvcHRpb25hbCBwcm9wZXJ0aWVzLCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHZhbGlkXG4gICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSB0eXBlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhcyBpdCBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gbW9yZSBkZXRhaWwgYnkgdGhlIGNhbGxlclxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFVQSxNQUFhLHFCQUNYLEtBQ0EsTUFDQSxNQUNBLGFBQXNCLFVBQ1Q7QUFDYixLQUFJO0FBQ0YsTUFBSSxPQUFPLFFBQVEsT0FBTyxRQUFRLFNBQ2hDLFFBQU87QUFJVCxNQUFJLEVBQUUsUUFBUSxLQUNaLFFBQU87RUFHVCxNQUFNLFFBQVMsSUFBVTtBQUd6QixNQUFJLGNBQWMsU0FBUyxLQUN6QixRQUFPO0FBR1QsTUFBSSxTQUFTLFFBQ1gsUUFBTyxNQUFNLFFBQVEsTUFBTTtBQUc3QixTQUFPLE9BQU8sVUFBVTtVQUNqQixLQUFLO0FBRVosU0FBTyJ9
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQjFMVnpRWUsuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5IG9mIGEgc3BlY2lmaWMgdHlwZVxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGNoZWNrXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGlzT3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlID0gPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBvYmo6IHVua25vd24sXG4gIHByb3A6IGtleW9mIFQsXG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheScsXG4gIGlzT3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZSxcbik6IG9iaiBpcyBUID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCwgaXQncyB2YWxpZCBmb3IgYW4gb3B0aW9uYWwgcHJvcGVydHlcbiAgICBpZiAoIShwcm9wIGluIG9iaikpIHtcbiAgICAgIHJldHVybiBpc09wdGlvbmFsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gKG9iaiBhcyBUKVtwcm9wXTtcblxuICAgIC8vIEZvciBvcHRpb25hbCBwcm9wZXJ0aWVzLCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHZhbGlkXG4gICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSB0eXBlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhcyBpdCBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gbW9yZSBkZXRhaWwgYnkgdGhlIGNhbGxlclxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFVQSxNQUFhLHFCQUNYLEtBQ0EsTUFDQSxNQUNBLGFBQXNCLFVBQ1Q7QUFDYixLQUFJO0FBQ0YsTUFBSSxPQUFPLFFBQVEsT0FBTyxRQUFRLFNBQ2hDLFFBQU87QUFJVCxNQUFJLEVBQUUsUUFBUSxLQUNaLFFBQU87RUFHVCxNQUFNLFFBQVMsSUFBVTtBQUd6QixNQUFJLGNBQWMsU0FBUyxLQUN6QixRQUFPO0FBR1QsTUFBSSxTQUFTLFFBQ1gsUUFBTyxNQUFNLFFBQVEsTUFBTTtBQUc3QixTQUFPLE9BQU8sVUFBVTtVQUNqQixLQUFLO0FBRVosU0FBTyJ9
@@ -12,4 +12,4 @@
12
12
  declare const hasPropertyOfType: <T extends object>(obj: unknown, prop: keyof T, type: "string" | "number" | "boolean" | "object" | "array", isOptional?: boolean) => obj is T;
13
13
  //#endregion
14
14
  export { hasPropertyOfType };
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtRHBuZU5TSmYuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy91dGlscy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlOiA8VCBleHRlbmRzIG9iamVjdD4ob2JqOiB1bmtub3duLCBwcm9wOiBrZXlvZiBULCB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIiB8IFwiYXJyYXlcIiwgaXNPcHRpb25hbD86IGJvb2xlYW4pID0+IG9iaiBpcyBUO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBRSxvQkFBQTtDQUFBO09BQUE7T0FBQTtDQUFBIn0=
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQkxlNW9yZWguZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy91dGlscy5kLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlOiA8VCBleHRlbmRzIG9iamVjdD4ob2JqOiB1bmtub3duLCBwcm9wOiBrZXlvZiBULCB0eXBlOiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJvYmplY3RcIiB8IFwiYXJyYXlcIiwgaXNPcHRpb25hbD86IGJvb2xlYW4pID0+IG9iaiBpcyBUO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBRSxvQkFBQTtDQUFBO09BQUE7T0FBQTtDQUFBIn0=
@@ -20,4 +20,4 @@ const formatFilterDisplayName = (displayName) => {
20
20
 
21
21
  //#endregion
22
22
  export { formatFilterDisplayName };
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ3FCeElwRVYuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2F0b21zL3NlYXJjaC91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBzaXplcyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJywgJ3h4eGwnLCAneHh4eGwnXTtcblxuICBjb25zdCBwcm9jZXNzZWRXb3JkcyA9IGRpc3BsYXlOYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgIGlmIChzaXplcy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRpdGxlQ2FzZWROYW1lID0gcHJvY2Vzc2VkV29yZHMuam9pbignICcpO1xuXG4gIC8vIEZpbmFsIHJlcGxhY2VtZW50cyBmb3Igc3BlY2lhbCBjYXNlc1xuICByZXR1cm4gdGl0bGVDYXNlZE5hbWUucmVwbGFjZSgvSXBob25lL2csICdpUGhvbmUnKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFhLDJCQUEyQixnQkFBd0I7Q0FDOUQsTUFBTSxRQUFRO0VBQUM7RUFBUTtFQUFPO0VBQU07RUFBSztFQUFLO0VBQUs7RUFBTTtFQUFPO0VBQVE7RUFBUTtBQWVoRixRQWJ1QixZQUNwQixhQUFhLENBQ2IsTUFBTSxJQUFJLENBQ1YsS0FBSyxTQUFTO0FBQ2IsTUFBSSxNQUFNLFNBQVMsS0FBSyxDQUN0QixRQUFPLEtBQUssYUFBYTtBQUUzQixTQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsYUFBYSxHQUFHLEtBQUssTUFBTSxFQUFFO0dBQ25ELENBRWtDLEtBQUssSUFBSSxDQUd6QixRQUFRLFdBQVcsU0FBUyJ9
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQl9jbkpKQUguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2F0b21zL3NlYXJjaC91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBzaXplcyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJywgJ3h4eGwnLCAneHh4eGwnXTtcblxuICBjb25zdCBwcm9jZXNzZWRXb3JkcyA9IGRpc3BsYXlOYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgIGlmIChzaXplcy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRpdGxlQ2FzZWROYW1lID0gcHJvY2Vzc2VkV29yZHMuam9pbignICcpO1xuXG4gIC8vIEZpbmFsIHJlcGxhY2VtZW50cyBmb3Igc3BlY2lhbCBjYXNlc1xuICByZXR1cm4gdGl0bGVDYXNlZE5hbWUucmVwbGFjZSgvSXBob25lL2csICdpUGhvbmUnKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFhLDJCQUEyQixnQkFBd0I7Q0FDOUQsTUFBTSxRQUFRO0VBQUM7RUFBUTtFQUFPO0VBQU07RUFBSztFQUFLO0VBQUs7RUFBTTtFQUFPO0VBQVE7RUFBUTtBQWVoRixRQWJ1QixZQUNwQixhQUFhLENBQ2IsTUFBTSxJQUFJLENBQ1YsS0FBSyxTQUFTO0FBQ2IsTUFBSSxNQUFNLFNBQVMsS0FBSyxDQUN0QixRQUFPLEtBQUssYUFBYTtBQUUzQixTQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsYUFBYSxHQUFHLEtBQUssTUFBTSxFQUFFO0dBQ25ELENBRWtDLEtBQUssSUFBSSxDQUd6QixRQUFRLFdBQVcsU0FBUyJ9
@@ -30,4 +30,4 @@ Object.defineProperty(exports, 'hasPropertyOfType', {
30
30
  return hasPropertyOfType;
31
31
  }
32
32
  });
33
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ0R3NzRCQ08uY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLE1BQWEscUJBQ1gsS0FDQSxNQUNBLE1BQ0EsYUFBc0IsVUFDVDtBQUNiLEtBQUk7QUFDRixNQUFJLE9BQU8sUUFBUSxPQUFPLFFBQVEsU0FDaEMsUUFBTztBQUlULE1BQUksRUFBRSxRQUFRLEtBQ1osUUFBTztFQUdULE1BQU0sUUFBUyxJQUFVO0FBR3pCLE1BQUksY0FBYyxTQUFTLEtBQ3pCLFFBQU87QUFHVCxNQUFJLFNBQVMsUUFDWCxRQUFPLE1BQU0sUUFBUSxNQUFNO0FBRzdCLFNBQU8sT0FBTyxVQUFVO1VBQ2pCLEtBQUs7QUFFWixTQUFPIn0=
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ2lKTERQalkuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLE1BQWEscUJBQ1gsS0FDQSxNQUNBLE1BQ0EsYUFBc0IsVUFDVDtBQUNiLEtBQUk7QUFDRixNQUFJLE9BQU8sUUFBUSxPQUFPLFFBQVEsU0FDaEMsUUFBTztBQUlULE1BQUksRUFBRSxRQUFRLEtBQ1osUUFBTztFQUdULE1BQU0sUUFBUyxJQUFVO0FBR3pCLE1BQUksY0FBYyxTQUFTLEtBQ3pCLFFBQU87QUFHVCxNQUFJLFNBQVMsUUFDWCxRQUFPLE1BQU0sUUFBUSxNQUFNO0FBRzdCLFNBQU8sT0FBTyxVQUFVO1VBQ2pCLEtBQUs7QUFFWixTQUFPIn0=