@envive-ai/react-hooks 0.1.6 → 0.1.7

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 (667) hide show
  1. package/dist/NewOrgConfig-C5YL4Y62.cjs +20 -0
  2. package/dist/NewOrgConfig-CRyIfb_l.js +15 -0
  3. package/dist/SystemSettingsContext-Cb9YHln8.cjs +20 -0
  4. package/dist/SystemSettingsContext-D3mmGGcv.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-C7c_rHFW.cjs +59 -0
  6. package/dist/TrackComponentVisibleEvent-DXTEBjGM.js +52 -0
  7. package/dist/amplitudeContext-CB_F-nJY.d.cts +52 -0
  8. package/dist/amplitudeContext-Cak6ijMq.js +287 -0
  9. package/dist/amplitudeContext-DFYBDc0h.d.ts +52 -0
  10. package/dist/amplitudeContext-sTEsPaVG.cjs +309 -0
  11. package/dist/api-DSFlctlc.cjs +269 -0
  12. package/dist/api-JTNjuOfc.js +190 -0
  13. package/dist/{app-CjsQ2_n-.js → app-D_upYeqF.js} +6 -6
  14. package/dist/{app-CnKRZ9RW.cjs → app-KXTMPa4s.cjs} +8 -8
  15. package/dist/application/models/graphql/index.cjs +2 -1
  16. package/dist/application/models/graphql/index.d.ts +1 -1
  17. package/dist/application/models/graphql/index.js +2 -1
  18. package/dist/application/models/guards/api/index.cjs +2 -1
  19. package/dist/application/models/guards/api/index.d.ts +2 -2
  20. package/dist/application/models/guards/api/index.js +2 -1
  21. package/dist/application/models/index.cjs +11 -9
  22. package/dist/application/models/index.d.cts +8 -4
  23. package/dist/application/models/index.d.ts +11 -7
  24. package/dist/application/models/index.js +10 -7
  25. package/dist/application/models/utilityTypes/index.cjs +1 -1
  26. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  27. package/dist/application/models/utilityTypes/index.js +1 -1
  28. package/dist/application/models/variantInfo/index.cjs +1 -1
  29. package/dist/application/models/variantInfo/index.d.cts +1 -1
  30. package/dist/application/models/variantInfo/index.d.ts +1 -1
  31. package/dist/application/models/variantInfo/index.js +1 -1
  32. package/dist/application/utils/index.cjs +28 -22
  33. package/dist/application/utils/index.d.cts +12 -8
  34. package/dist/application/utils/index.d.ts +16 -12
  35. package/dist/application/utils/index.js +19 -13
  36. package/dist/{atomStore-B4jIaDPd.cjs → atomStore-DEZyFCNz.cjs} +1 -1
  37. package/dist/{atomStore-D8pjE1vL.js → atomStore-DnPEioF4.js} +1 -1
  38. package/dist/atoms/app/index.cjs +13 -9
  39. package/dist/atoms/app/index.d.cts +15 -11
  40. package/dist/atoms/app/index.d.ts +18 -14
  41. package/dist/atoms/app/index.js +13 -9
  42. package/dist/atoms/atomStore/index.cjs +2 -2
  43. package/dist/atoms/atomStore/index.d.cts +1 -1
  44. package/dist/atoms/atomStore/index.js +2 -2
  45. package/dist/atoms/chat/index.cjs +34 -28
  46. package/dist/atoms/chat/index.d.cts +35 -31
  47. package/dist/atoms/chat/index.d.ts +38 -34
  48. package/dist/atoms/chat/index.js +20 -14
  49. package/dist/atoms/globalSearch/index.cjs +1 -1
  50. package/dist/atoms/globalSearch/index.d.cts +5 -5
  51. package/dist/atoms/globalSearch/index.d.ts +5 -5
  52. package/dist/atoms/globalSearch/index.js +1 -1
  53. package/dist/atoms/org/index.cjs +6 -14
  54. package/dist/atoms/org/index.d.cts +27 -32
  55. package/dist/atoms/org/index.d.ts +30 -35
  56. package/dist/atoms/org/index.js +5 -11
  57. package/dist/atoms/search/index.cjs +44 -34
  58. package/dist/atoms/search/index.d.cts +9 -4
  59. package/dist/atoms/search/index.d.ts +12 -7
  60. package/dist/atoms/search/index.js +26 -16
  61. package/dist/atoms/search/types.cjs +5 -0
  62. package/dist/atoms/search/types.d.cts +2 -0
  63. package/dist/atoms/search/types.d.ts +2 -0
  64. package/dist/atoms/search/types.js +3 -0
  65. package/dist/cdnContext-BMjVfBft.cjs +53 -0
  66. package/dist/cdnContext-DgsJ00Tb.js +38 -0
  67. package/dist/{chat-CV6MXeID.js → chat-B4lkFIxz.js} +1 -1
  68. package/dist/chat-D1Eat8Ih.cjs +394 -0
  69. package/dist/chat-DPJGdUkz.js +258 -0
  70. package/dist/{chat-BubCW1as.cjs → chat-zA-K4tR_.cjs} +1 -1
  71. package/dist/chatElementDisplayLocation-9SW40Dd3.d.cts +25 -0
  72. package/dist/chatElementDisplayLocation-C1tRM5OD.d.ts +25 -0
  73. package/dist/chatSearch-B5jMnCYX.js +315 -0
  74. package/dist/chatSearch-DWMiyWN0.cjs +444 -0
  75. package/dist/chatState-BisPJd5g.cjs +120 -0
  76. package/dist/chatState-BrmBYY8l.js +34 -0
  77. package/dist/commerce-api-CxDIfeME.cjs +318 -0
  78. package/dist/commerce-api-DagLj3D_.js +311 -0
  79. package/dist/{components-B4T3Uzth.js → components-B1edduHz.js} +1 -1
  80. package/dist/{components-Cw9WjA6g.cjs → components-g0G58Kat.cjs} +1 -1
  81. package/dist/config/locators/components/chat/index.cjs +1 -1
  82. package/dist/config/locators/components/chat/index.d.cts +1 -1
  83. package/dist/config/locators/components/chat/index.d.ts +1 -1
  84. package/dist/config/locators/components/chat/index.js +1 -1
  85. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  86. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  87. package/dist/config/locators/components/index.cjs +1 -1
  88. package/dist/config/locators/components/index.d.cts +1 -1
  89. package/dist/config/locators/components/index.d.ts +1 -1
  90. package/dist/config/locators/components/index.js +1 -1
  91. package/dist/config/locators/components/search/index.d.cts +1 -1
  92. package/dist/config/locators/components/search/index.d.ts +1 -1
  93. package/dist/config/locators/index.cjs +42 -22
  94. package/dist/config/locators/index.d.cts +2 -2
  95. package/dist/config/locators/index.d.ts +3 -3
  96. package/dist/config/locators/index.js +25 -5
  97. package/dist/contexts/amplitudeContext/index.cjs +21 -0
  98. package/dist/contexts/amplitudeContext/index.d.cts +2 -0
  99. package/dist/contexts/amplitudeContext/index.d.ts +2 -0
  100. package/dist/contexts/amplitudeContext/index.js +19 -0
  101. package/dist/contexts/cdnContext/index.cjs +7 -0
  102. package/dist/contexts/cdnContext/index.d.cts +15 -0
  103. package/dist/contexts/cdnContext/index.d.ts +15 -0
  104. package/dist/contexts/cdnContext/index.js +6 -0
  105. package/dist/contexts/chatContext/index.cjs +329 -0
  106. package/dist/contexts/chatContext/index.d.cts +15 -0
  107. package/dist/contexts/chatContext/index.d.ts +15 -0
  108. package/dist/contexts/chatContext/index.js +322 -0
  109. package/dist/contexts/enviveConfigContext/index.cjs +7 -0
  110. package/dist/contexts/enviveConfigContext/index.d.cts +30 -0
  111. package/dist/contexts/enviveConfigContext/index.d.ts +30 -0
  112. package/dist/contexts/enviveConfigContext/index.js +6 -0
  113. package/dist/contexts/enviveCssContext/index.cjs +65 -0
  114. package/dist/contexts/enviveCssContext/index.d.cts +10 -0
  115. package/dist/contexts/enviveCssContext/index.d.ts +10 -0
  116. package/dist/contexts/enviveCssContext/index.js +62 -0
  117. package/dist/contexts/featureFlagContext/index.cjs +107 -0
  118. package/dist/contexts/featureFlagContext/index.d.cts +20 -0
  119. package/dist/contexts/featureFlagContext/index.d.ts +20 -0
  120. package/dist/contexts/featureFlagContext/index.js +103 -0
  121. package/dist/contexts/featureFlagServiceContext/index.cjs +6 -0
  122. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -0
  123. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -0
  124. package/dist/contexts/featureFlagServiceContext/index.js +5 -0
  125. package/dist/contexts/graphqlContext/index.cjs +15 -0
  126. package/dist/contexts/graphqlContext/index.d.cts +12 -0
  127. package/dist/contexts/graphqlContext/index.d.ts +12 -0
  128. package/dist/contexts/graphqlContext/index.js +14 -0
  129. package/dist/contexts/localStorageContext/index.cjs +6 -0
  130. package/dist/contexts/localStorageContext/index.d.cts +30 -0
  131. package/dist/contexts/localStorageContext/index.d.ts +30 -0
  132. package/dist/contexts/localStorageContext/index.js +4 -0
  133. package/dist/contexts/newOrgConfigContext/index.cjs +19 -0
  134. package/dist/contexts/newOrgConfigContext/index.d.cts +30 -0
  135. package/dist/contexts/newOrgConfigContext/index.d.ts +30 -0
  136. package/dist/contexts/newOrgConfigContext/index.js +18 -0
  137. package/dist/contexts/searchContext/index.cjs +23 -0
  138. package/dist/contexts/searchContext/index.d.cts +16 -0
  139. package/dist/contexts/searchContext/index.d.ts +16 -0
  140. package/dist/contexts/searchContext/index.js +22 -0
  141. package/dist/contexts/sessionStorageContext/index.cjs +5 -0
  142. package/dist/contexts/sessionStorageContext/index.d.cts +15 -0
  143. package/dist/contexts/sessionStorageContext/index.d.ts +15 -0
  144. package/dist/contexts/sessionStorageContext/index.js +4 -0
  145. package/dist/contexts/shopifyUrlContext/index.cjs +5 -0
  146. package/dist/contexts/shopifyUrlContext/index.d.cts +20 -0
  147. package/dist/contexts/shopifyUrlContext/index.d.ts +20 -0
  148. package/dist/contexts/shopifyUrlContext/index.js +4 -0
  149. package/dist/contexts/systemSettingsContext/index.cjs +8 -0
  150. package/dist/contexts/systemSettingsContext/index.d.cts +36 -0
  151. package/dist/contexts/systemSettingsContext/index.d.ts +36 -0
  152. package/dist/contexts/systemSettingsContext/index.js +6 -0
  153. package/dist/contexts/types.cjs +7 -0
  154. package/dist/contexts/types.d.cts +4 -0
  155. package/dist/contexts/types.d.ts +4 -0
  156. package/dist/contexts/types.js +3 -0
  157. package/dist/contexts/userIdentityContext/index.cjs +26 -0
  158. package/dist/contexts/userIdentityContext/index.d.cts +2 -0
  159. package/dist/contexts/userIdentityContext/index.d.ts +2 -0
  160. package/dist/contexts/userIdentityContext/index.js +25 -0
  161. package/dist/domObserver-B6cRGTny.js +285 -0
  162. package/dist/domObserver-DQZwhPrc.cjs +304 -0
  163. package/dist/enviveConfig-BJZ4zTJo.js +62 -0
  164. package/dist/enviveConfig-DdBrcGSQ.cjs +130 -0
  165. package/dist/enviveConfigContext-78orE_uH.cjs +60 -0
  166. package/dist/enviveConfigContext-jBCCWQH9.js +45 -0
  167. package/dist/events/index.cjs +1 -1
  168. package/dist/events/index.d.ts +1 -1
  169. package/dist/events/index.js +1 -1
  170. package/dist/{events-BrLpaNxh.js → events-BHJJjPDN.js} +1 -1
  171. package/dist/{events-DwT6cEwI.cjs → events-B_fJZf9E.cjs} +1 -1
  172. package/dist/featureFlagServiceContext-ChL7DJ53.cjs +56 -0
  173. package/dist/featureFlagServiceContext-D1PzHsEs.d.ts +23 -0
  174. package/dist/featureFlagServiceContext-DQwlCTde.d.cts +23 -0
  175. package/dist/featureFlagServiceContext-DzFfmb1Z.js +42 -0
  176. package/dist/featureGates-Blx10fwB.js +27 -0
  177. package/dist/featureGates-DcZNrUma.cjs +33 -0
  178. package/dist/frontendConfig-DrvrQSm8.d.ts +857 -0
  179. package/dist/frontendConfig-wg41mBok.d.cts +857 -0
  180. package/dist/{globalSearch-BFvEg53C.cjs → globalSearch-Bnjlxtr5.cjs} +1 -1
  181. package/dist/{globalSearch-B6THR7Jx.js → globalSearch-CRWUqnjq.js} +1 -1
  182. package/dist/graphql-B9HhDXYt.cjs +53 -0
  183. package/dist/graphql-W7GMIHUu.js +36 -0
  184. package/dist/graphqlConfig-Bn-HLHsh.cjs +39 -0
  185. package/dist/graphqlConfig-DtZm_YaH.js +14 -0
  186. package/dist/graphqlContext-BJg7B--J.js +96 -0
  187. package/dist/graphqlContext-DI-_VRmb.cjs +111 -0
  188. package/dist/hooks/AmplitudeOperations/index.cjs +21 -0
  189. package/dist/hooks/AmplitudeOperations/index.d.cts +12 -0
  190. package/dist/hooks/AmplitudeOperations/index.d.ts +12 -0
  191. package/dist/hooks/AmplitudeOperations/index.js +21 -0
  192. package/dist/hooks/AppDetails/index.cjs +18 -0
  193. package/dist/hooks/AppDetails/index.d.cts +26 -0
  194. package/dist/hooks/AppDetails/index.d.ts +26 -0
  195. package/dist/hooks/AppDetails/index.js +18 -0
  196. package/dist/hooks/BlockBackButton/index.cjs +29 -0
  197. package/dist/hooks/BlockBackButton/index.d.cts +5 -0
  198. package/dist/hooks/BlockBackButton/index.d.ts +5 -0
  199. package/dist/hooks/BlockBackButton/index.js +27 -0
  200. package/dist/hooks/CdnOperations/index.cjs +24 -0
  201. package/dist/hooks/CdnOperations/index.d.cts +7 -0
  202. package/dist/hooks/CdnOperations/index.d.ts +7 -0
  203. package/dist/hooks/CdnOperations/index.js +22 -0
  204. package/dist/hooks/ChatToggle/index.cjs +63 -0
  205. package/dist/hooks/ChatToggle/index.d.cts +12 -0
  206. package/dist/hooks/ChatToggle/index.d.ts +12 -0
  207. package/dist/hooks/ChatToggle/index.js +61 -0
  208. package/dist/hooks/ChatToggleAnalytics/index.cjs +37 -0
  209. package/dist/hooks/ChatToggleAnalytics/index.d.cts +9 -0
  210. package/dist/hooks/ChatToggleAnalytics/index.d.ts +9 -0
  211. package/dist/hooks/ChatToggleAnalytics/index.js +35 -0
  212. package/dist/hooks/CustomerSupportHandoff/index.cjs +36 -0
  213. package/dist/hooks/CustomerSupportHandoff/index.d.cts +16 -0
  214. package/dist/hooks/CustomerSupportHandoff/index.d.ts +16 -0
  215. package/dist/hooks/CustomerSupportHandoff/index.js +34 -0
  216. package/dist/hooks/Debounce/index.cjs +3 -0
  217. package/dist/hooks/Debounce/index.d.cts +5 -0
  218. package/dist/hooks/Debounce/index.d.ts +5 -0
  219. package/dist/hooks/Debounce/index.js +3 -0
  220. package/dist/hooks/ElementObserver/index.cjs +179 -0
  221. package/dist/hooks/ElementObserver/index.d.cts +29 -0
  222. package/dist/hooks/ElementObserver/index.d.ts +29 -0
  223. package/dist/hooks/ElementObserver/index.js +177 -0
  224. package/dist/hooks/GrabAndScroll/index.cjs +99 -0
  225. package/dist/hooks/GrabAndScroll/index.d.cts +14 -0
  226. package/dist/hooks/GrabAndScroll/index.d.ts +14 -0
  227. package/dist/hooks/GrabAndScroll/index.js +97 -0
  228. package/dist/hooks/GraphQLConfig/index.cjs +16 -0
  229. package/dist/hooks/GraphQLConfig/index.d.cts +15 -0
  230. package/dist/hooks/GraphQLConfig/index.d.ts +15 -0
  231. package/dist/hooks/GraphQLConfig/index.js +15 -0
  232. package/dist/hooks/IdentifyUser/index.cjs +59 -0
  233. package/dist/hooks/IdentifyUser/index.d.cts +10 -0
  234. package/dist/hooks/IdentifyUser/index.d.ts +10 -0
  235. package/dist/hooks/IdentifyUser/index.js +57 -0
  236. package/dist/hooks/ImageResolver/index.cjs +54 -0
  237. package/dist/hooks/ImageResolver/index.d.cts +7 -0
  238. package/dist/hooks/ImageResolver/index.d.ts +7 -0
  239. package/dist/hooks/ImageResolver/index.js +52 -0
  240. package/dist/hooks/Intersection/index.cjs +3 -0
  241. package/dist/hooks/Intersection/index.d.cts +7 -0
  242. package/dist/hooks/Intersection/index.d.ts +7 -0
  243. package/dist/hooks/Intersection/index.js +3 -0
  244. package/dist/hooks/IsSmallScreen/index.cjs +22 -0
  245. package/dist/hooks/IsSmallScreen/index.d.cts +5 -0
  246. package/dist/hooks/IsSmallScreen/index.d.ts +5 -0
  247. package/dist/hooks/IsSmallScreen/index.js +20 -0
  248. package/dist/hooks/LocalStorageOperations/index.cjs +79 -0
  249. package/dist/hooks/LocalStorageOperations/index.d.cts +17 -0
  250. package/dist/hooks/LocalStorageOperations/index.d.ts +17 -0
  251. package/dist/hooks/LocalStorageOperations/index.js +74 -0
  252. package/dist/hooks/MessageFilter/index.cjs +53 -0
  253. package/dist/hooks/MessageFilter/index.d.cts +29 -0
  254. package/dist/hooks/MessageFilter/index.d.ts +29 -0
  255. package/dist/hooks/MessageFilter/index.js +53 -0
  256. package/dist/hooks/MessageScrollObserver/index.cjs +36 -0
  257. package/dist/hooks/MessageScrollObserver/index.d.cts +5 -0
  258. package/dist/hooks/MessageScrollObserver/index.d.ts +5 -0
  259. package/dist/hooks/MessageScrollObserver/index.js +34 -0
  260. package/dist/hooks/NewOrgConfig/index.cjs +19 -0
  261. package/dist/hooks/NewOrgConfig/index.d.cts +22 -0
  262. package/dist/hooks/NewOrgConfig/index.d.ts +22 -0
  263. package/dist/hooks/NewOrgConfig/index.js +19 -0
  264. package/dist/hooks/Search/index.cjs +324 -0
  265. package/dist/hooks/Search/index.d.cts +66 -0
  266. package/dist/hooks/Search/index.d.ts +66 -0
  267. package/dist/hooks/Search/index.js +321 -0
  268. package/dist/hooks/SearchOperations/index.cjs +101 -0
  269. package/dist/hooks/SearchOperations/index.d.cts +22 -0
  270. package/dist/hooks/SearchOperations/index.d.ts +22 -0
  271. package/dist/hooks/SearchOperations/index.js +98 -0
  272. package/dist/hooks/SessionStorageOperations/index.cjs +30 -0
  273. package/dist/hooks/SessionStorageOperations/index.d.cts +8 -0
  274. package/dist/hooks/SessionStorageOperations/index.d.ts +8 -0
  275. package/dist/hooks/SessionStorageOperations/index.js +28 -0
  276. package/dist/hooks/ShopifyUrlOperations/index.cjs +53 -0
  277. package/dist/hooks/ShopifyUrlOperations/index.d.cts +23 -0
  278. package/dist/hooks/ShopifyUrlOperations/index.d.ts +23 -0
  279. package/dist/hooks/ShopifyUrlOperations/index.js +49 -0
  280. package/dist/hooks/SnapCalculator/index.cjs +29 -0
  281. package/dist/hooks/SnapCalculator/index.d.cts +12 -0
  282. package/dist/hooks/SnapCalculator/index.d.ts +12 -0
  283. package/dist/hooks/SnapCalculator/index.js +27 -0
  284. package/dist/hooks/SystemSettingsContext/index.cjs +7 -0
  285. package/dist/hooks/SystemSettingsContext/index.d.cts +22 -0
  286. package/dist/hooks/SystemSettingsContext/index.d.ts +22 -0
  287. package/dist/hooks/SystemSettingsContext/index.js +7 -0
  288. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +21 -0
  289. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +18 -0
  290. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +18 -0
  291. package/dist/hooks/TrackComponentVisibleEvent/index.js +21 -0
  292. package/dist/hooks/UpdateAnalyticsProps/index.cjs +61 -0
  293. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +9 -0
  294. package/dist/hooks/UpdateAnalyticsProps/index.d.ts +9 -0
  295. package/dist/hooks/UpdateAnalyticsProps/index.js +58 -0
  296. package/dist/index-BCLaqnc2.d.cts +689 -0
  297. package/dist/{index-ylUiJvnr.d.ts → index-BS7-_CW4.d.ts} +1 -1
  298. package/dist/index-Bmub8e38.d.cts +1 -1
  299. package/dist/index-Bs0QtkSu.d.ts +689 -0
  300. package/dist/index-CESxqFso.d.cts +1 -1
  301. package/dist/index-CKeS9dud.d.ts +28 -0
  302. package/dist/index-CiWEYzXl.d.cts +1 -1
  303. package/dist/index-CyXULMyI.d.cts +186 -0
  304. package/dist/index-Cz10TYQA.d.cts +28 -0
  305. package/dist/{index-B0NW9KTj.d.cts → index-D46Rd0io.d.cts} +1 -1
  306. package/dist/{index-C6KdON7d.d.ts → index-D8ThXrqI.d.ts} +1 -1
  307. package/dist/{index-PGF8BvxQ.d.ts → index-D9VegTU-.d.ts} +1 -1
  308. package/dist/{index-DOii3C6b.d.ts → index-DBqgBV9N.d.ts} +1 -1
  309. package/dist/{index-Cqg6ltII.d.ts → index-DNUKSg6R.d.ts} +1 -1
  310. package/dist/{index-BDPWBU3h.d.cts → index-DO0s5KNA.d.cts} +1 -1
  311. package/dist/{index-CcIG01PJ.d.ts → index-DuyZQOE1.d.ts} +2 -2
  312. package/dist/{index-Byb45OPg.d.cts → index-REhT-Pls.d.cts} +1 -1
  313. package/dist/index-fKJB9EFb.d.ts +186 -0
  314. package/dist/interceptors/index.cjs +2 -1
  315. package/dist/interceptors/index.d.cts +9 -10
  316. package/dist/interceptors/index.d.ts +12 -13
  317. package/dist/interceptors/index.js +2 -1
  318. package/dist/interceptors/types.cjs +1 -0
  319. package/dist/interceptors/types.d.cts +12 -0
  320. package/dist/interceptors/types.d.ts +12 -0
  321. package/dist/interceptors/types.js +3 -0
  322. package/dist/localStorageContext-6OrGDFid.js +95 -0
  323. package/dist/localStorageContext-Bld0OWmG.cjs +115 -0
  324. package/dist/logger-CSL2jqI9.cjs +26 -0
  325. package/dist/logger-D5MFf3nW.js +20 -0
  326. package/dist/{models-BkXg5eIP.cjs → models-Dn8Emdzc.js} +219 -458
  327. package/dist/models-ZpQcRZQK.cjs +1536 -0
  328. package/dist/newOrgConfigAtom--tewb_G0.js +8 -0
  329. package/dist/newOrgConfigAtom-DkSi45_Q.cjs +15 -0
  330. package/dist/newOrgConfigContext-B3aeblfE.cjs +68 -0
  331. package/dist/newOrgConfigContext-B5mzHKTG.js +53 -0
  332. package/dist/{nodeSelector-BxrS2S_k.d.ts → nodeSelector-DybpVr-i.d.ts} +1 -1
  333. package/dist/{nodeSelector-Dm4S-10n.d.cts → nodeSelector-XsUa5vNH.d.cts} +1 -1
  334. package/dist/org-B2uRkPt3.js +12 -0
  335. package/dist/org-ClUxpHPZ.cjs +43 -0
  336. package/dist/{orgAnalyticsConfig-BJ2A1RZ-.cjs → orgAnalyticsConfig-CuWXijsr.cjs} +1 -1
  337. package/dist/{orgAnalyticsConfig-ClrFy2qH.js → orgAnalyticsConfig-DOceTdNp.js} +1 -1
  338. package/dist/search-BIomqYy6.d.ts +20 -0
  339. package/dist/search-B_Hg-Es2.d.cts +20 -0
  340. package/dist/search-Bn4x-3TG.js +126 -0
  341. package/dist/search-DsQm_pAi.cjs +205 -0
  342. package/dist/{search-filter-types-fZf91Pdw.d.ts → search-filter-types-B5xcaEit.d.ts} +1 -1
  343. package/dist/{search-filter-types-DosbseF3.d.cts → search-filter-types-Byd0lEUa.d.cts} +1 -1
  344. package/dist/searchContext-Cn-pCoDy.cjs +145 -0
  345. package/dist/searchContext-fQDGSvUF.js +129 -0
  346. package/dist/searchServiceAdapter-BSPZOg1r.js +16 -0
  347. package/dist/searchServiceAdapter-DrjFCiw8.cjs +34 -0
  348. package/dist/sessionStorageContext-C5MUl2zf.js +52 -0
  349. package/dist/sessionStorageContext-CXE7iHtP.cjs +66 -0
  350. package/dist/shopifyUrlContext-7ppKx1jJ.cjs +75 -0
  351. package/dist/shopifyUrlContext-BSYWsoX9.js +61 -0
  352. package/dist/spiffyWidgets-CdxRcXhW.d.ts +20 -0
  353. package/dist/spiffyWidgets-DxGuuuCG.d.cts +20 -0
  354. package/dist/systemSettingsContext-BdAe_3Ll.cjs +60 -0
  355. package/dist/systemSettingsContext-Cjyo2o3N.js +39 -0
  356. package/dist/{test-types-CgVJtwUr.d.cts → test-types-DQB1JqOf.d.cts} +1 -1
  357. package/dist/{test-types-C9b_OdfO.d.ts → test-types-ZuRAYwox.d.ts} +1 -1
  358. package/dist/types/index.cjs +33 -5
  359. package/dist/types/index.d.cts +2 -2
  360. package/dist/types/index.d.ts +2 -2
  361. package/dist/types/index.js +30 -3
  362. package/dist/types-BCz-hOvv.d.ts +51 -0
  363. package/dist/types-BwNrLPSZ.cjs +106 -0
  364. package/dist/types-D3uOF0Oy.js +76 -0
  365. package/dist/types-DIk0FLwd.js +30 -0
  366. package/dist/types-DNLkuGWZ.cjs +48 -0
  367. package/dist/types-DzwBmZHy.d.cts +10 -0
  368. package/dist/types-Eip78dWv.d.cts +51 -0
  369. package/dist/types-YvACLe2e.d.ts +10 -0
  370. package/dist/types.d.cts +15 -0
  371. package/dist/types.d.ts +15 -0
  372. package/dist/unsupportedProductExceptions--t7AQFou.js +20 -0
  373. package/dist/unsupportedProductExceptions-Dak4AD-t.cjs +32 -0
  374. package/dist/urlsParser-BV5yF8sa.cjs +78 -0
  375. package/dist/urlsParser-DUgV_Qy9.js +42 -0
  376. package/dist/useAmplitudeOperations-C6Osqkso.js +34 -0
  377. package/dist/useAmplitudeOperations-Cco_B3A5.cjs +41 -0
  378. package/dist/useAppDetails-CGqtN6sJ.cjs +38 -0
  379. package/dist/useAppDetails-DwX2Rhed.js +30 -0
  380. package/dist/useDebounce-BJqnCBcl.cjs +26 -0
  381. package/dist/useDebounce-Ce31ph7m.js +19 -0
  382. package/dist/useGraphQLConfig-ByOZb3oZ.js +63 -0
  383. package/dist/useGraphQLConfig-DItL4BgM.cjs +76 -0
  384. package/dist/useIntersection-Czeo04jt.js +21 -0
  385. package/dist/useIntersection-DnZNLcnu.cjs +28 -0
  386. package/dist/{useMessageInterceptor-B87e3yu3.cjs → useMessageInterceptor-C9p9No1n.cjs} +3 -3
  387. package/dist/{useMessageInterceptor-Bb7YRaWk.js → useMessageInterceptor-tntd2rvB.js} +2 -2
  388. package/dist/userIdentityContext-C1HzZFb2.cjs +125 -0
  389. package/dist/userIdentityContext-CDfosvOO.js +109 -0
  390. package/dist/userIdentityContext-DBXoLrFu.d.cts +20 -0
  391. package/dist/userIdentityContext-W1OWF3cG.d.ts +20 -0
  392. package/dist/utilityTypes-CWJZb9BZ.js +1 -0
  393. package/dist/utilityTypes-YGiMSyV7.cjs +0 -0
  394. package/dist/utils-BA5HXmkL.cjs +74 -0
  395. package/dist/utils-BTDw2aMx.cjs +715 -0
  396. package/dist/utils-C7S9YiFp.js +54 -0
  397. package/dist/utils-CF13DfA1.js +606 -0
  398. package/dist/variantInfo-58JLeDJb.js +1 -0
  399. package/dist/variantInfo-DRFLcGc7.cjs +0 -0
  400. package/package.json +179 -7
  401. package/src/application/models/index.ts +0 -1
  402. package/src/application/utils/analyticsUtils.ts +1 -1
  403. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +1 -1
  404. package/src/atoms/app/index.ts +1 -1
  405. package/src/atoms/chat/chatState.ts +1 -1
  406. package/src/atoms/chat/replies.ts +1 -1
  407. package/src/atoms/org/graphqlConfig.ts +1 -39
  408. package/src/atoms/org/index.ts +0 -1
  409. package/src/atoms/org/newOrgConfigAtom.ts +2 -6
  410. package/src/contexts/{amplitudeContext.tsx → amplitudeContext/amplitudeContext.tsx} +1 -2
  411. package/src/contexts/amplitudeContext/index.ts +1 -0
  412. package/src/contexts/{cdnContext.tsx → cdnContext/cdnContext.tsx} +1 -1
  413. package/src/contexts/cdnContext/index.ts +1 -0
  414. package/src/contexts/{chatContext.tsx → chatContext/chatContext.tsx} +3 -3
  415. package/src/contexts/chatContext/index.ts +1 -0
  416. package/src/contexts/{enviveConfigContext.tsx → enviveConfigContext/enviveConfigContext.tsx} +1 -1
  417. package/src/contexts/enviveConfigContext/index.ts +1 -0
  418. package/src/contexts/{enviveCssContext.tsx → enviveCssContext/enviveCssContext.tsx} +1 -1
  419. package/src/contexts/enviveCssContext/index.ts +1 -0
  420. package/src/contexts/{featureFlagContext.tsx → featureFlagContext/featureFlagContext.tsx} +1 -1
  421. package/src/contexts/featureFlagContext/index.ts +1 -0
  422. package/src/contexts/featureFlagServiceContext/index.ts +1 -0
  423. package/src/contexts/graphqlContext/index.ts +1 -0
  424. package/src/contexts/localStorageContext/index.ts +1 -0
  425. package/src/contexts/{localStorageContext.tsx → localStorageContext/localStorageContext.tsx} +2 -2
  426. package/src/contexts/newOrgConfigContext/index.ts +1 -0
  427. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +70 -0
  428. package/src/contexts/searchContext/index.ts +1 -0
  429. package/src/contexts/{searchContext.tsx → searchContext/searchContext.tsx} +5 -5
  430. package/src/contexts/sessionStorageContext/index.ts +1 -0
  431. package/src/contexts/{sessionStorageContext.tsx → sessionStorageContext/sessionStorageContext.tsx} +1 -1
  432. package/src/contexts/shopifyUrlContext/index.ts +1 -0
  433. package/src/contexts/systemSettingsContext/index.ts +1 -0
  434. package/src/contexts/userIdentityContext/index.ts +1 -0
  435. package/src/events/registerAnalyticsListeners.ts +2 -2
  436. package/src/favicon.ico +0 -0
  437. package/src/hooks/AmplitudeOperations/index.ts +1 -0
  438. package/src/hooks/{useAmplitudeOperations.ts → AmplitudeOperations/useAmplitudeOperations.ts} +1 -1
  439. package/src/hooks/AppDetails/index.ts +1 -0
  440. package/src/hooks/{useAppDetails.ts → AppDetails/useAppDetails.ts} +1 -3
  441. package/src/hooks/BlockBackButton/index.ts +1 -0
  442. package/src/hooks/CdnOperations/index.ts +1 -0
  443. package/src/hooks/{useCdnOperations.ts → CdnOperations/useCdnOperations.ts} +1 -1
  444. package/src/hooks/ChatToggle/index.ts +1 -0
  445. package/src/hooks/{useChatToggle.ts → ChatToggle/useChatToggle.ts} +1 -1
  446. package/src/hooks/ChatToggleAnalytics/index.ts +1 -0
  447. package/src/hooks/{useChatToggleAnalytics.ts → ChatToggleAnalytics/useChatToggleAnalytics.ts} +1 -1
  448. package/src/hooks/CustomerSupportHandoff/index.ts +1 -0
  449. package/src/hooks/Debounce/index.ts +1 -0
  450. package/src/hooks/ElementObserver/index.ts +1 -0
  451. package/src/hooks/GrabAndScroll/index.ts +1 -0
  452. package/src/hooks/GraphQLConfig/index.ts +1 -0
  453. package/src/hooks/{useGraphQLConfig.ts → GraphQLConfig/useGraphQLConfig.ts} +1 -1
  454. package/src/hooks/IdentifyUser/index.ts +1 -0
  455. package/src/hooks/{useIdentifyUser.ts → IdentifyUser/useIdentifyUser.ts} +1 -1
  456. package/src/hooks/ImageResolver/index.ts +1 -0
  457. package/src/hooks/Intersection/index.ts +1 -0
  458. package/src/hooks/IsSmallScreen/index.ts +1 -0
  459. package/src/hooks/LocalStorageOperations/index.ts +1 -0
  460. package/src/hooks/{useLocalStorageOperations.ts → LocalStorageOperations/useLocalStorageOperations.ts} +2 -2
  461. package/src/hooks/MessageFilter/index.ts +1 -0
  462. package/src/hooks/MessageScrollObserver/index.ts +1 -0
  463. package/src/hooks/NewOrgConfig/index.ts +1 -0
  464. package/src/hooks/{useNewOrgConfig.ts → NewOrgConfig/useNewOrgConfig.ts} +1 -1
  465. package/src/hooks/Search/index.ts +1 -0
  466. package/src/hooks/{useSearch.tsx → Search/useSearch.tsx} +5 -4
  467. package/src/hooks/SearchOperations/index.ts +1 -0
  468. package/src/hooks/SessionStorageOperations/index.ts +1 -0
  469. package/src/hooks/{useSessionStorageOperations.ts → SessionStorageOperations/useSessionStorageOperations.ts} +1 -1
  470. package/src/hooks/ShopifyUrlOperations/index.ts +1 -0
  471. package/src/hooks/{useShopifyUrlOperations.ts → ShopifyUrlOperations/useShopifyUrlOperations.ts} +1 -1
  472. package/src/hooks/SnapCalculator/index.ts +1 -0
  473. package/src/hooks/SystemSettingsContext/index.ts +1 -0
  474. package/src/hooks/SystemSettingsContext/useSystemSettingsContext.ts +14 -0
  475. package/src/hooks/TrackComponentVisibleEvent/index.ts +1 -0
  476. package/src/hooks/{useTrackComponentVisibleEvent.ts → TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts} +2 -2
  477. package/src/hooks/UpdateAnalyticsProps/index.ts +1 -0
  478. package/src/hooks/{useUpdateAnalyticsProps.ts → UpdateAnalyticsProps/useUpdateAnalyticsProps.ts} +1 -1
  479. package/dist/amplitudeContext-CHzas7Cf.d.cts +0 -52
  480. package/dist/amplitudeContext-D-7fmVh1.cjs +0 -356
  481. package/dist/amplitudeContext-hY3caPC6.js +0 -322
  482. package/dist/amplitudeContext-tJ4y-SzX.d.ts +0 -52
  483. package/dist/api-DjeZXxl_.js +0 -207
  484. package/dist/api-_JaUnIUj.cjs +0 -292
  485. package/dist/bandolier-DYEz4-8C.js +0 -1229
  486. package/dist/bandolier-o_-xrbOV.cjs +0 -1229
  487. package/dist/carpe-CsG5jCcl.cjs +0 -607
  488. package/dist/carpe-DONk00bZ.js +0 -605
  489. package/dist/cdnUtils-32v8bDX9.cjs +0 -16
  490. package/dist/cdnUtils-E4tLBt2g.js +0 -11
  491. package/dist/chat-CO7cRkaq.cjs +0 -506
  492. package/dist/chat-hcRc4RRd.js +0 -285
  493. package/dist/contexts/index.cjs +0 -57
  494. package/dist/contexts/index.d.cts +0 -10
  495. package/dist/contexts/index.d.ts +0 -10
  496. package/dist/contexts/index.js +0 -23
  497. package/dist/contexts-B4ihTBsV.cjs +0 -2980
  498. package/dist/contexts-DGlr7M1o.js +0 -2596
  499. package/dist/coterie-CKB93qfz.cjs +0 -239
  500. package/dist/coterie-DHcj2fRE.js +0 -239
  501. package/dist/custservice-types-Dy0kc9TW.cjs +0 -35
  502. package/dist/custservice-types-mnIunabv.js +0 -23
  503. package/dist/default-BnB4p0Se.cjs +0 -234
  504. package/dist/default-D6f5Dyt7.js +0 -199
  505. package/dist/default-ZKkE5zT4.cjs +0 -4
  506. package/dist/default-legGZJwI.js +0 -4
  507. package/dist/divIds-2dJlU3z8.cjs +0 -117
  508. package/dist/divIds-BUrN2vY-.js +0 -21
  509. package/dist/dreamlandBaby-BiRYYFav.js +0 -346
  510. package/dist/dreamlandBaby-zuvmfzfD.cjs +0 -346
  511. package/dist/embedded-BJLWIriJ.js +0 -23
  512. package/dist/embedded-Dl79TJLC.cjs +0 -131
  513. package/dist/entrypoints-Bs3pn6EV.js +0 -7
  514. package/dist/entrypoints-Dqi5pzWH.cjs +0 -19
  515. package/dist/enviveConfig-BccuzS2a.cjs +0 -240
  516. package/dist/enviveConfig-CzhTz8Aa.js +0 -152
  517. package/dist/fiveCbd-DwTTwC2j.cjs +0 -613
  518. package/dist/fiveCbd-Dz2NouOF.js +0 -613
  519. package/dist/forLoveAndLemons-DqSdyD6S.js +0 -665
  520. package/dist/forLoveAndLemons-Ud6mPrV3.cjs +0 -667
  521. package/dist/graphql-BNW60InJ.cjs +0 -128
  522. package/dist/graphql-CjB8wHzm.js +0 -74
  523. package/dist/graphqlConfig-CYt6tWII.js +0 -30
  524. package/dist/graphqlConfig-DicykC-o.cjs +0 -61
  525. package/dist/greenpan-B_EbPkSP.js +0 -397
  526. package/dist/greenpan-kPE4fJgd.cjs +0 -397
  527. package/dist/grooveLife-Ckuir319.js +0 -342
  528. package/dist/grooveLife-DKSEQp1F.cjs +0 -342
  529. package/dist/homegrownCannabis-BVPa2pqe.js +0 -410
  530. package/dist/homegrownCannabis-BwIAkxuA.cjs +0 -410
  531. package/dist/hooks/index.cjs +0 -63
  532. package/dist/hooks/index.d.cts +0 -314
  533. package/dist/hooks/index.d.ts +0 -314
  534. package/dist/hooks/index.js +0 -23
  535. package/dist/index-BMPtlgac.d.ts +0 -191
  536. package/dist/index-C7pGDl1A.d.ts +0 -1609
  537. package/dist/index-C9lgsCWp.d.cts +0 -203
  538. package/dist/index-Cc-wBCn6.d.ts +0 -203
  539. package/dist/index-DTu2X-YS.d.cts +0 -1609
  540. package/dist/index-OEifcBsm.d.cts +0 -191
  541. package/dist/jackArcher-B39OEIj6.cjs +0 -727
  542. package/dist/jackArcher-BwkWGybC.js +0 -727
  543. package/dist/jordanCraig-CxRH_jLi.js +0 -1786
  544. package/dist/jordanCraig-RwmWw-jM.cjs +0 -1786
  545. package/dist/kindredBravely-D78VwL20.cjs +0 -490
  546. package/dist/kindredBravely-DQDpAzdl.js +0 -490
  547. package/dist/kutFromTheKloth-TcXQkIti.js +0 -369
  548. package/dist/kutFromTheKloth-dXRrNti0.cjs +0 -369
  549. package/dist/larryAndSerges-Bh5XEXsZ.js +0 -262
  550. package/dist/larryAndSerges-COdBzOzu.cjs +0 -262
  551. package/dist/leapsAndRebounds-BbXnqkl5.cjs +0 -360
  552. package/dist/leapsAndRebounds-mjCaH1k-.js +0 -360
  553. package/dist/longevityrx-DdV3v26F.cjs +0 -320
  554. package/dist/longevityrx-DfPDfvAt.js +0 -320
  555. package/dist/lookOptic-DgXFGBPP.cjs +0 -282
  556. package/dist/lookOptic-FgVW1afF.js +0 -282
  557. package/dist/mantraBrand-C5gVm3rk.cjs +0 -750
  558. package/dist/mantraBrand-uV8HCDR8.js +0 -750
  559. package/dist/medterra-BtDpr1Hw.cjs +0 -583
  560. package/dist/medterra-DgzE7-mj.js +0 -583
  561. package/dist/modells-CJjsxOIR.js +0 -484
  562. package/dist/modells-Ck5KbRFj.cjs +0 -484
  563. package/dist/models-UZ6HszfZ.js +0 -1281
  564. package/dist/org-C2RrBVQR.cjs +0 -81
  565. package/dist/org-xMytX--e.js +0 -38
  566. package/dist/pressedFloral-Bteoboms.js +0 -661
  567. package/dist/pressedFloral-CexgV-xy.cjs +0 -661
  568. package/dist/search-BMOAmrmY.js +0 -459
  569. package/dist/search-Df0Ifneg.cjs +0 -672
  570. package/dist/skinPerfection-BGzq9lq-.cjs +0 -334
  571. package/dist/skinPerfection-BlvcEcUE.js +0 -334
  572. package/dist/snapSupplements-CbbGzAgO.cjs +0 -285
  573. package/dist/snapSupplements-kcsPAOm9.js +0 -285
  574. package/dist/socialProofClasses-Db8gzsfi.cjs +0 -40
  575. package/dist/socialProofClasses-kwDvwLOZ.js +0 -10
  576. package/dist/spanx-B4WFA_rI.js +0 -661
  577. package/dist/spanx-BWoE4F8b.cjs +0 -663
  578. package/dist/spanxStaging-BOrOjhXn.js +0 -845
  579. package/dist/spanxStaging-BfdfIug4.cjs +0 -848
  580. package/dist/suggestionBarV2-types-IMMOmCir.js +0 -10
  581. package/dist/suggestionBarV2-types-nnGNgFvR.cjs +0 -16
  582. package/dist/supergoop-22dd5_BS.js +0 -323
  583. package/dist/supergoop-B-a4cku2.cjs +0 -323
  584. package/dist/types--pr1GQQx.js +0 -154
  585. package/dist/types-BVSyY3Hk.cjs +0 -196
  586. package/dist/uniqueVintage-CJXiNNe7.js +0 -1211
  587. package/dist/uniqueVintage-D0jzJWlo.cjs +0 -1213
  588. package/dist/userIdentityContext-BPqvVIg0.d.cts +0 -20
  589. package/dist/userIdentityContext-wbCRmlzp.d.ts +0 -20
  590. package/dist/utils-C9ZSCx12.js +0 -888
  591. package/dist/utils-D5HO61hG.cjs +0 -1016
  592. package/dist/venaCbd-Bhhu_qUf.cjs +0 -365
  593. package/dist/venaCbd-CanovPS_.js +0 -365
  594. package/dist/westonJonBoucher-BC0x1ktI.cjs +0 -422
  595. package/dist/westonJonBoucher-BUu1_wP1.js +0 -422
  596. package/dist/wineEnthusiast-BlCryfil.cjs +0 -940
  597. package/dist/wineEnthusiast-Ck1x5iJq.js +0 -940
  598. package/dist/wolfMattress-D9Mjq-HP.js +0 -372
  599. package/dist/wolfMattress-JssghhC-.cjs +0 -372
  600. package/dist/wolfTactical-C6exYhL7.cjs +0 -349
  601. package/dist/wolfTactical-CnV3KQdI.js +0 -349
  602. package/src/application/models/supportedOrgs.ts +0 -161
  603. package/src/atoms/org/orgPageConfig.ts +0 -42
  604. package/src/contexts/index.ts +0 -16
  605. package/src/contexts/newOrgConfigContext.tsx +0 -104
  606. package/src/contexts/orgConfigContext.tsx +0 -106
  607. package/src/hooks/index.ts +0 -27
  608. package/src/hooks/useSystemSettingsContext.ts +0 -12
  609. package/src/merchants/bandolier/bandolier.ts +0 -1371
  610. package/src/merchants/carpe/carpe.ts +0 -653
  611. package/src/merchants/coterie/coterie.ts +0 -277
  612. package/src/merchants/default.ts +0 -196
  613. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +0 -381
  614. package/src/merchants/fiveCbd/fiveCbd.ts +0 -691
  615. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +0 -751
  616. package/src/merchants/greenpan/greenpan.ts +0 -434
  617. package/src/merchants/grooveLife/grooveLife.ts +0 -392
  618. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +0 -474
  619. package/src/merchants/init-merchant.sh +0 -53
  620. package/src/merchants/jackArcher/jackArcher.ts +0 -989
  621. package/src/merchants/jordanCraig/jordanCraig.ts +0 -1927
  622. package/src/merchants/kindredBravely/kindredBravely.ts +0 -538
  623. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +0 -421
  624. package/src/merchants/larryAndSerges/larryAndSerges.ts +0 -318
  625. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +0 -424
  626. package/src/merchants/longevityrx/longevityrx.ts +0 -374
  627. package/src/merchants/lookOptic/lookOptic.ts +0 -323
  628. package/src/merchants/mantraBrand/mantraBrand.ts +0 -844
  629. package/src/merchants/medterra/medterra.ts +0 -673
  630. package/src/merchants/modells/modells.ts +0 -543
  631. package/src/merchants/pressedFloral/pressedFloral.ts +0 -728
  632. package/src/merchants/skinPerfection/skinPerfection.ts +0 -385
  633. package/src/merchants/snapSupplements/snapSupplements.ts +0 -328
  634. package/src/merchants/spanx/spanx.ts +0 -810
  635. package/src/merchants/spanx/spanxStaging.ts +0 -936
  636. package/src/merchants/supergoop/supergoop.ts +0 -375
  637. package/src/merchants/uniqueVintage/uniqueVintage.ts +0 -1314
  638. package/src/merchants/venaCbd/venaCbd.ts +0 -407
  639. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +0 -473
  640. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +0 -990
  641. package/src/merchants/wolfMattress/wolfMattress.ts +0 -411
  642. package/src/merchants/wolfTactical/wolfTactical.ts +0 -383
  643. /package/dist/{atomStore-KSoFS3Jj.cjs → AmplitudeOperations-CgIVPUlr.cjs} +0 -0
  644. /package/dist/{atomStore-CZnUUsrr.js → AmplitudeOperations-YpyaR7Mp.js} +0 -0
  645. /package/dist/{locators-fBXS_pxP.js → atomStore-C2OI76yN.js} +0 -0
  646. /package/dist/{locators-0YYZu9n4.cjs → atomStore-DWmT1six.cjs} +0 -0
  647. /package/dist/{utilityTypes-8sETsYPk.js → types-DQoXDiso.js} +0 -0
  648. /package/dist/{utilityTypes-COShxVir.cjs → types-o3zWarRp.cjs} +0 -0
  649. /package/dist/{variantInfo-orXoPBCU.cjs → types.cjs} +0 -0
  650. /package/dist/{variantInfo-DbVxA1yE.js → types.js} +0 -0
  651. /package/src/contexts/{featureFlagServiceContext.tsx → featureFlagServiceContext/featureFlagServiceContext.tsx} +0 -0
  652. /package/src/contexts/{graphqlContext.tsx → graphqlContext/graphqlContext.tsx} +0 -0
  653. /package/src/contexts/{shopifyUrlContext.tsx → shopifyUrlContext/shopifyUrlContext.tsx} +0 -0
  654. /package/src/contexts/{systemSettingsContext.tsx → systemSettingsContext/systemSettingsContext.tsx} +0 -0
  655. /package/src/contexts/{userIdentityContext.tsx → userIdentityContext/userIdentityContext.tsx} +0 -0
  656. /package/src/hooks/{useBlockBackButton.ts → BlockBackButton/useBlockBackButton.ts} +0 -0
  657. /package/src/hooks/{useCustomerSupportHandoff.ts → CustomerSupportHandoff/useCustomerSupportHandoff.ts} +0 -0
  658. /package/src/hooks/{useDebounce.ts → Debounce/useDebounce.ts} +0 -0
  659. /package/src/hooks/{useElementObserver.ts → ElementObserver/useElementObserver.ts} +0 -0
  660. /package/src/hooks/{useGrabAndScroll.ts → GrabAndScroll/useGrabAndScroll.ts} +0 -0
  661. /package/src/hooks/{useImageResolver.ts → ImageResolver/useImageResolver.ts} +0 -0
  662. /package/src/hooks/{useIntersection.ts → Intersection/useIntersection.ts} +0 -0
  663. /package/src/hooks/{useIsSmallScreen.ts → IsSmallScreen/useIsSmallScreen.ts} +0 -0
  664. /package/src/hooks/{useMessageFilter.ts → MessageFilter/useMessageFilter.ts} +0 -0
  665. /package/src/hooks/{useMessageScrollObserver.ts → MessageScrollObserver/useMessageScrollObserver.ts} +0 -0
  666. /package/src/hooks/{useSearchOperations.ts → SearchOperations/useSearchOperations.ts} +0 -0
  667. /package/src/hooks/{useSnapCalculator.ts → SnapCalculator/useSnapCalculator.ts} +0 -0
@@ -0,0 +1,715 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const require_logger = require('./logger-CSL2jqI9.cjs');
3
+ const require_models = require('./models-ZpQcRZQK.cjs');
4
+ const require_amplitudeContext = require('./amplitudeContext-sTEsPaVG.cjs');
5
+ let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
6
+ __spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
7
+
8
+ //#region src/application/utils/analyticsUtils.ts
9
+ const NORMALIZED_ADD_TO_CART_EVENT_NAMES = ["addtocart", "addedtocart"];
10
+ const CHECK_DATA_LAYER_INTERVAL_MS = 500;
11
+ const CHECK_DATA_LAYER_MAX_ATTEMPTS = 10;
12
+ /**
13
+ * Checks if a Google Analytics event is an add_to_cart event.
14
+ *
15
+ * @param event The event name to check.
16
+ *
17
+ * @returns True if the event is an add_to_cart event, false otherwise.
18
+ */
19
+ const isAddToCartEvent = (event) => {
20
+ const normalizedEvent = event.replace(/[-_]/g, "").toLowerCase();
21
+ return NORMALIZED_ADD_TO_CART_EVENT_NAMES.some((name) => normalizedEvent.includes(name));
22
+ };
23
+ /**
24
+ * Tracks an add_to_cart event in Amplitude.
25
+ *
26
+ * @param event The event to track.
27
+ */
28
+ const handleAddToCartEvent = (event, track) => {
29
+ let eventProps;
30
+ if (require_models.isLegacyUAEcommerceEvent(event)) eventProps = {
31
+ items: event.ecommerce.add.products.map((product) => ({
32
+ item_name: product.name,
33
+ item_category: product.category,
34
+ price: product.price,
35
+ quantity: product.quantity
36
+ })),
37
+ currency: event.ecommerce.add.currencyCode,
38
+ event_format_version: "legacy_universal_analytics"
39
+ };
40
+ else if (require_models.isGA4EcommerceEvent(event)) eventProps = {
41
+ items: event.ecommerce.items.map((item) => ({
42
+ item_name: item.item_name,
43
+ item_category: item.item_category,
44
+ price: item.price,
45
+ quantity: item.quantity
46
+ })),
47
+ currency: event.ecommerce.currency,
48
+ event_format_version: "google_analytics_4"
49
+ };
50
+ else eventProps = {
51
+ event_properties: { ...event },
52
+ event_format_version: "unknown"
53
+ };
54
+ track(require_amplitudeContext.SpiffyMetricsEventName.AddToCartClicked, { eventProps });
55
+ };
56
+ /**
57
+ * Wraps the window.dataLayer.push method to intercept add_to_cart events and send them to Amplitude.
58
+ * This function runs on an interval until the dataLayer is available.
59
+ */
60
+ const initDataLayerWrapper = (track) => {
61
+ let attempts = 0;
62
+ const checkAndInitialize = () => {
63
+ if (!window.dataLayer || !window.dataLayer.push) {
64
+ attempts += 1;
65
+ if (attempts >= CHECK_DATA_LAYER_MAX_ATTEMPTS) {
66
+ require_logger.logger_default.logDebug(`[spiffy-ai] dataLayer not available after ${CHECK_DATA_LAYER_MAX_ATTEMPTS} attempts`);
67
+ return;
68
+ }
69
+ setTimeout(checkAndInitialize, CHECK_DATA_LAYER_INTERVAL_MS);
70
+ return;
71
+ }
72
+ require_logger.logger_default.logDebug("[spiffy-ai] dataLayer is available, wrapping push function...");
73
+ const originalPush = window.dataLayer.push;
74
+ window.dataLayer.push = (...args) => {
75
+ if (require_models.isBaseEcommerceEvent(args[0]) && isAddToCartEvent(args[0].event)) handleAddToCartEvent(args[0], track);
76
+ return originalPush.apply(window.dataLayer, args);
77
+ };
78
+ };
79
+ checkAndInitialize();
80
+ };
81
+ const initAmplitude = (track) => {
82
+ track(require_amplitudeContext.SpiffyMetricsEventName.BundleLoaded);
83
+ };
84
+
85
+ //#endregion
86
+ //#region src/application/utils/coreContextToApiContext.ts
87
+ const coreContextToApiContext = (context) => ({
88
+ chat_id: context.chatId,
89
+ org_id: context.orgId,
90
+ user_id: context.userId,
91
+ org_short_name: context.orgShortName,
92
+ source: context.source,
93
+ env: context.env
94
+ });
95
+
96
+ //#endregion
97
+ //#region src/application/utils/coreUserEventToApiUserEvent.ts
98
+ const coreUserEventToApiUserEvent = (data) => {
99
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.PdpVisit || data.category === __spiffy_ai_commerce_api_client.UserEventCategory.AddToCart) return {
100
+ event_id: data.eventId,
101
+ created_at: data.createdAt,
102
+ category: data.category,
103
+ attributes: {
104
+ product_id: data.attributes.productId,
105
+ parent_product_id: data.attributes.parentProductId,
106
+ url: data.attributes.url
107
+ }
108
+ };
109
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.PlpVisit) return {
110
+ event_id: data.eventId,
111
+ created_at: data.createdAt,
112
+ category: data.category,
113
+ attributes: {
114
+ category: __spiffy_ai_commerce_api_client.PLPAttributeCategory.Id,
115
+ attributes: { id: data.attributes.attributes.id }
116
+ }
117
+ };
118
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.QueryTyped) return {
119
+ event_id: data.eventId,
120
+ created_at: data.createdAt,
121
+ category: data.category,
122
+ attributes: { query: data.attributes.query }
123
+ };
124
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.Search) return {
125
+ event_id: data.eventId,
126
+ created_at: data.createdAt,
127
+ category: data.category,
128
+ attributes: {
129
+ search_term: data.attributes.searchTerm,
130
+ selected_filters: data.attributes.selectedFilters
131
+ }
132
+ };
133
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.SuggestionClicked) return {
134
+ event_id: data.eventId,
135
+ created_at: data.createdAt,
136
+ category: data.category,
137
+ attributes: { suggestion_id: data.attributes.suggestionId }
138
+ };
139
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.PageVisit) return {
140
+ event_id: data.eventId,
141
+ created_at: data.createdAt,
142
+ category: data.category,
143
+ attributes: {
144
+ url: data.attributes.url,
145
+ page_visit_category: data.attributes.pageVisitCategory
146
+ }
147
+ };
148
+ if (data.category === __spiffy_ai_commerce_api_client.UserEventCategory.FormSubmitted) return {
149
+ event_id: data.eventId,
150
+ created_at: data.createdAt,
151
+ category: data.category,
152
+ attributes: {
153
+ filled_schema: { ...data.attributes.filledSchema },
154
+ form_response_id: data.attributes.formResponseId,
155
+ form_type: data.attributes.formType
156
+ }
157
+ };
158
+ return {
159
+ event_id: data.eventId,
160
+ created_at: data.createdAt,
161
+ category: data.category
162
+ };
163
+ };
164
+
165
+ //#endregion
166
+ //#region src/application/utils/divideArray.ts
167
+ const divideArray = (array, size) => {
168
+ const rows = [];
169
+ for (let i = 0; i < size; i += 1) rows.push(array.filter((_, index) => index % size === i));
170
+ return rows;
171
+ };
172
+
173
+ //#endregion
174
+ //#region src/application/utils/imageFilter.ts
175
+ const getRecentProductImageUrls = (lastMessages, currentProductId) => {
176
+ const productMessages = lastMessages.filter((message) => message.type === require_models.MessageType.Product && message.metadata?.imageUrl).map((m) => m);
177
+ return [...productMessages.filter((m) => m.metadata?.id === currentProductId), ...productMessages.filter((m) => m.metadata?.id !== currentProductId)].map((m) => m.metadata.imageUrl);
178
+ };
179
+
180
+ //#endregion
181
+ //#region src/application/utils/merchantUtils.ts
182
+ const prepareMerchantPage = () => {
183
+ let metaViewport = document.querySelector("meta[name='viewport']");
184
+ if (metaViewport) {
185
+ const content = metaViewport.getAttribute("content");
186
+ if (!content?.includes("maximum-scale=1")) metaViewport.setAttribute("content", `${content}, maximum-scale=1`);
187
+ return;
188
+ }
189
+ metaViewport = document.createElement("meta");
190
+ metaViewport.setAttribute("name", "viewport");
191
+ metaViewport.setAttribute("content", "width=device-width, initial-scale=1, maximum-scale=1");
192
+ document.head.appendChild(metaViewport);
193
+ };
194
+
195
+ //#endregion
196
+ //#region src/application/utils/messageFromFormSubmittedEvent.ts
197
+ const messageFromFormSubmittedEvent = (event, formResponseAttributes) => {
198
+ if (event.category !== __spiffy_ai_commerce_api_client.UserEventCategory.FormSubmitted) return;
199
+ const formStringContents = Object.entries(formResponseAttributes.schema.properties).map(([key, value]) => `${value.title}: ${event.attributes.filledSchema[key]}`).join("\n");
200
+ return {
201
+ id: event.eventId,
202
+ role: require_models.MessageRole.User,
203
+ type: require_models.MessageType.QueryTyped,
204
+ createdAt: event.createdAt,
205
+ metadata: { content: formStringContents }
206
+ };
207
+ };
208
+
209
+ //#endregion
210
+ //#region src/application/utils/messageFromQueryEvent.ts
211
+ /**
212
+ * Transforms a query UserEvent object into a Message object for presentation.
213
+ *
214
+ * @param event The user event object received from the server
215
+ *
216
+ * @returns A Message if the event is a query event, otherwise undefined
217
+ */
218
+ const messageFromQueryEvent = (event) => {
219
+ if (event.category === __spiffy_ai_commerce_api_client.UserEventCategory.QueryTyped) return {
220
+ id: event.eventId,
221
+ role: require_models.MessageRole.User,
222
+ type: require_models.MessageType.QueryTyped,
223
+ createdAt: event.createdAt,
224
+ metadata: { content: event.attributes.query }
225
+ };
226
+ if (event.category === __spiffy_ai_commerce_api_client.UserEventCategory.Search) return {
227
+ id: event.eventId,
228
+ role: require_models.MessageRole.User,
229
+ type: require_models.MessageType.Search,
230
+ createdAt: event.createdAt,
231
+ metadata: {
232
+ searchTerm: event.attributes.searchTerm || "",
233
+ selectedFilters: event.attributes.selectedFilters || []
234
+ }
235
+ };
236
+ };
237
+
238
+ //#endregion
239
+ //#region src/application/utils/messageFromResponse.ts
240
+ /**
241
+ * Transforms a server Response object into a Message object for presentation.
242
+ *
243
+ * @param response The response object received from the server containing model generated content
244
+ *
245
+ * @returns A Message if the response contains known attributes, undefined otherwise
246
+ */
247
+ const messageFromResponse = (response) => {
248
+ if (response == null) return;
249
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Text) return {
250
+ id: response.id,
251
+ createdAt: response.createdAt,
252
+ type: require_models.MessageType.Text,
253
+ role: require_models.MessageRole.Assistant,
254
+ metadata: { content: response.attributes.content }
255
+ };
256
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Product) return {
257
+ id: response.id,
258
+ createdAt: response.createdAt,
259
+ role: require_models.MessageRole.Assistant,
260
+ type: require_models.MessageType.Product,
261
+ metadata: { ...response.attributes }
262
+ };
263
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Review) return {
264
+ id: response.id,
265
+ createdAt: response.createdAt,
266
+ type: require_models.MessageType.Review,
267
+ role: require_models.MessageRole.Assistant,
268
+ metadata: {
269
+ review: response.attributes.review,
270
+ reviewer: response.attributes.reviewer,
271
+ stars: response.attributes.stars,
272
+ title: response.attributes.title,
273
+ richInformation: response.attributes.richInformation
274
+ }
275
+ };
276
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Separator) return {
277
+ id: response.id,
278
+ createdAt: response.createdAt,
279
+ type: require_models.MessageType.Separator,
280
+ role: require_models.MessageRole.Assistant
281
+ };
282
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Page) return {
283
+ id: response.id,
284
+ createdAt: response.createdAt,
285
+ role: require_models.MessageRole.Assistant,
286
+ type: require_models.MessageType.Page,
287
+ metadata: { ...response.attributes }
288
+ };
289
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.ProductSearch) return {
290
+ id: response.id,
291
+ createdAt: response.createdAt,
292
+ role: require_models.MessageRole.Assistant,
293
+ type: require_models.MessageType.ProductSearch,
294
+ metadata: { ...response.attributes }
295
+ };
296
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.ProductSearchFilter) return {
297
+ id: response.id,
298
+ createdAt: response.createdAt,
299
+ role: require_models.MessageRole.Assistant,
300
+ type: require_models.MessageType.ProductSearchFilter,
301
+ metadata: { ...response.attributes }
302
+ };
303
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Form) return {
304
+ id: response.id,
305
+ createdAt: response.createdAt,
306
+ role: require_models.MessageRole.Assistant,
307
+ type: require_models.MessageType.Form,
308
+ metadata: {
309
+ formType: response.attributes.formCategory?.formType,
310
+ fields: Object.entries(response.attributes.schema.properties).map(([key, value]) => ({
311
+ key,
312
+ title: value.title,
313
+ type: value.type,
314
+ format: value.format,
315
+ required: response.attributes.schema.required.includes(key)
316
+ }))
317
+ }
318
+ };
319
+ if (response.category === __spiffy_ai_commerce_api_client.ResponseCategory.Order) return {
320
+ id: response.id,
321
+ createdAt: response.createdAt,
322
+ role: require_models.MessageRole.Assistant,
323
+ type: require_models.MessageType.Order,
324
+ metadata: { ...response.attributes }
325
+ };
326
+ };
327
+
328
+ //#endregion
329
+ //#region src/application/utils/messageFromSuggestionEvent.ts
330
+ /**
331
+ * Transforms a UserEvent object into a Message object for presentation.
332
+ *
333
+ * @param event The UserEvent object received from the server
334
+ * @param suggestions A list of generated suggestions to match the event to
335
+ *
336
+ * @returns A Message if the event is a suggestion click event, undefined otherwise
337
+ */
338
+ const messageFromSuggestionEvent = (event, suggestions) => {
339
+ if (event.category === __spiffy_ai_commerce_api_client.UserEventCategory.SuggestionClicked) {
340
+ const { suggestionId } = event.attributes;
341
+ return {
342
+ id: event.eventId,
343
+ role: require_models.MessageRole.User,
344
+ type: require_models.MessageType.SuggestionClicked,
345
+ createdAt: event.createdAt,
346
+ metadata: {
347
+ suggestionId,
348
+ suggestionContent: suggestions.find((s) => s.id === suggestionId)?.content ?? ""
349
+ }
350
+ };
351
+ }
352
+ };
353
+
354
+ //#endregion
355
+ //#region src/application/utils/nextMessageRequestToApiRequest.ts
356
+ const messageRequestToCommerceMessageRequest = (data) => ({
357
+ context: {
358
+ chat_id: data.context.chatId,
359
+ org_id: data.context.orgId,
360
+ org_short_name: data.context.orgShortName,
361
+ user_id: data.context.userId,
362
+ source: data.context.source,
363
+ env: data.context.env
364
+ },
365
+ id: data.id,
366
+ feature_flags: data.featureFlags,
367
+ user_events: data.userEvents?.map((userEvent) => coreUserEventToApiUserEvent(userEvent)),
368
+ generation_params: {
369
+ model: data.generationParams?.model,
370
+ max_tokens: data.generationParams?.maxTokens,
371
+ stop: data.generationParams?.stop,
372
+ stream: data.generationParams?.stream,
373
+ temperature: data.generationParams?.temperature,
374
+ top_p: data.generationParams?.topP,
375
+ num_suggestions: data.generationParams?.numSuggestions,
376
+ response_system_prompt: data.generationParams?.responseSystemPrompt,
377
+ suggestion_system_prompt: data.generationParams?.suggestionSystemPrompt,
378
+ response_caching: data.generationParams?.responseCaching
379
+ }
380
+ });
381
+
382
+ //#endregion
383
+ //#region src/application/utils/nodeSelector.ts
384
+ var NodeSelector = class {
385
+ constructor(pattern) {
386
+ this.pattern = pattern;
387
+ this.root = document;
388
+ }
389
+ getPattern() {
390
+ return this.pattern;
391
+ }
392
+ setRoot(root) {
393
+ this.root = root;
394
+ }
395
+ getRoot() {
396
+ return this.root;
397
+ }
398
+ };
399
+ var QuerySelector = class extends NodeSelector {
400
+ parse() {
401
+ return this.getRoot().querySelector(this.getPattern());
402
+ }
403
+ };
404
+ var IDSelector = class extends NodeSelector {
405
+ parse() {
406
+ return this.getRoot().getElementById(this.getPattern());
407
+ }
408
+ };
409
+ var XpathSelector = class extends NodeSelector {
410
+ parse() {
411
+ return this.getRoot()?.evaluate(this.getPattern(), this.getRoot(), null, XPathResult.FIRST_ORDERED_NODE_TYPE, null)?.singleNodeValue;
412
+ }
413
+ };
414
+ var ChainSelector = class extends NodeSelector {
415
+ parse() {
416
+ let selectorIndex = 0;
417
+ const selectors = this.getPattern().split("@");
418
+ const lastIndex = selectors.length - 1;
419
+ const parseChain = (pattern, prevNode) => {
420
+ const selector = SelectorFactory.parse(pattern);
421
+ if (prevNode) selector.setRoot(prevNode);
422
+ const currentNode = selector.parse();
423
+ if (selectorIndex === lastIndex) return currentNode;
424
+ let node = currentNode || document;
425
+ if (currentNode?.shadowRoot) node = currentNode.shadowRoot;
426
+ if (currentNode?.contentWindow) node = currentNode.contentWindow?.document;
427
+ return parseChain(selectors[++selectorIndex].trim(), node);
428
+ };
429
+ return parseChain(selectors[selectorIndex].trim());
430
+ }
431
+ };
432
+ var Empty = class extends NodeSelector {
433
+ constructor() {
434
+ super("");
435
+ }
436
+ parse() {
437
+ return null;
438
+ }
439
+ };
440
+ var SelectorFactory = class {
441
+ static parse(composedSelector) {
442
+ if (!composedSelector) return new Empty();
443
+ const split = composedSelector.split("|");
444
+ const type = split[0];
445
+ const selector = split[1];
446
+ switch (type) {
447
+ case "id": return this.id(selector);
448
+ case "query": return this.query(selector);
449
+ case "xpath": return this.xpath(selector);
450
+ default: return new Empty();
451
+ }
452
+ }
453
+ static check(selector) {
454
+ return selector ?? new Empty();
455
+ }
456
+ static chain(pattern) {
457
+ return pattern ? new ChainSelector(pattern) : new Empty();
458
+ }
459
+ static id(pattern) {
460
+ return pattern ? new IDSelector(pattern) : new Empty();
461
+ }
462
+ static query(pattern) {
463
+ return pattern ? new QuerySelector(pattern) : new Empty();
464
+ }
465
+ static xpath(pattern) {
466
+ return pattern ? new XpathSelector(pattern) : new Empty();
467
+ }
468
+ };
469
+
470
+ //#endregion
471
+ //#region src/application/utils/overrides.ts
472
+ function isPlainObject(x) {
473
+ return !!x && typeof x === "object" && !Array.isArray(x) && !(x instanceof Date) && !(x instanceof RegExp);
474
+ }
475
+ function isReplace(x) {
476
+ return !!x && typeof x === "object" && "$replace" in x;
477
+ }
478
+ function isDelete(x) {
479
+ return !!x && typeof x === "object" && x.$delete === true;
480
+ }
481
+ function isPrimitiveValue(x) {
482
+ const t = typeof x;
483
+ return x === null || t === "string" || t === "number" || t === "boolean" || t === "bigint" || t === "symbol" || t === "undefined";
484
+ }
485
+ function isArrayOfPrimitives(arr) {
486
+ if (arr.length === 0) return false;
487
+ for (let i = 0; i < arr.length; i += 1) {
488
+ const v = arr[i];
489
+ if (v !== void 0 && !isPrimitiveValue(v)) return false;
490
+ }
491
+ return true;
492
+ }
493
+ function mergeAny(baseAny, patchAny, opts) {
494
+ if (isReplace(patchAny)) return patchAny.$replace;
495
+ if (isDelete(patchAny)) return void 0;
496
+ if (Array.isArray(baseAny)) {
497
+ if (Array.isArray(patchAny)) {
498
+ const baseArr = baseAny;
499
+ const patchArr = patchAny;
500
+ if (opts.arrayStrategy === "replace" || isArrayOfPrimitives(baseArr) || isArrayOfPrimitives(patchArr)) return patchAny;
501
+ const out = baseArr.slice();
502
+ const max = Math.max(out.length, patchArr.length);
503
+ for (let i = 0; i < max; i += 1) {
504
+ const pVal = patchArr[i];
505
+ if (pVal !== void 0) out[i] = mergeAny(out[i], pVal, opts);
506
+ }
507
+ return out;
508
+ }
509
+ return baseAny;
510
+ }
511
+ if (isPlainObject(baseAny) && isPlainObject(patchAny)) {
512
+ const baseObj = baseAny;
513
+ const patchObj = patchAny;
514
+ const out = { ...baseObj };
515
+ for (const key of Object.keys(patchObj)) {
516
+ const pVal = patchObj[key];
517
+ if (pVal === void 0) {} else if (opts.nullDeletes && pVal === null) delete out[key];
518
+ else if (isReplace(pVal)) out[key] = pVal.$replace;
519
+ else if (isDelete(pVal)) delete out[key];
520
+ else out[key] = mergeAny(baseObj?.[key], pVal, opts);
521
+ }
522
+ return out;
523
+ }
524
+ return patchAny ?? baseAny;
525
+ }
526
+ function applyOverrides(base, patch, opts = {}) {
527
+ const { arrayStrategy = "mergeByIndex", nullDeletes = false } = opts;
528
+ if (isReplace(patch)) return patch.$replace;
529
+ if (isDelete(patch)) return void 0;
530
+ if (Array.isArray(base)) {
531
+ if (isReplace(patch)) return patch.$replace;
532
+ if (Array.isArray(patch)) {
533
+ if (arrayStrategy === "replace") return patch;
534
+ const out = base.slice();
535
+ const max = Math.max(out.length, patch.length);
536
+ for (let i = 0; i < max; i += 1) {
537
+ const pVal = patch[i];
538
+ if (pVal !== void 0) out[i] = mergeAny(out[i], pVal, opts);
539
+ }
540
+ return out;
541
+ }
542
+ return base;
543
+ }
544
+ if (isPlainObject(base) && isPlainObject(patch)) {
545
+ const out = { ...base };
546
+ const patchObj = patch;
547
+ for (const key of Object.keys(patchObj)) {
548
+ const pVal = patchObj[key];
549
+ if (pVal === void 0) {} else if (nullDeletes && pVal === null) delete out[key];
550
+ else if (isReplace(pVal)) out[key] = pVal.$replace;
551
+ else if (isDelete(pVal)) delete out[key];
552
+ else {
553
+ const bVal = base[key];
554
+ out[key] = mergeAny(bVal, pVal, opts);
555
+ }
556
+ }
557
+ return out;
558
+ }
559
+ return patch ?? base;
560
+ }
561
+
562
+ //#endregion
563
+ //#region src/application/utils/stringUtils.ts
564
+ var StringUtils = class StringUtils {
565
+ static isNullOrEmpty(value) {
566
+ const valueTrimmed = value?.trim();
567
+ return value === void 0 || valueTrimmed === "";
568
+ }
569
+ static trimToNull(value) {
570
+ const valueTrimmed = value?.trim();
571
+ return StringUtils.isNullOrEmpty(valueTrimmed) ? void 0 : valueTrimmed;
572
+ }
573
+ static capitalize(type) {
574
+ if (type === void 0) return "";
575
+ return type.charAt(0).toUpperCase() + type.substring(1);
576
+ }
577
+ /**
578
+ * Finds the first pattern in an array that matches a given URL.
579
+ * Patterns can include a single wildcard '*' which matches any sequence of characters.
580
+ *
581
+ * @param patterns
582
+ * @param urlToTest
583
+ * @returns
584
+ */
585
+ static findMatchingPattern(patterns, urlToTest) {
586
+ if (!urlToTest) return;
587
+ for (const pattern of patterns) if (urlToTest.pathname !== "/") {
588
+ const regexPattern = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
589
+ if ((/* @__PURE__ */ new RegExp(`^${regexPattern}$`)).test(urlToTest.pathname)) return pattern;
590
+ } else if (pattern.startsWith(urlToTest.hostname)) return pattern;
591
+ }
592
+ };
593
+
594
+ //#endregion
595
+ //#region src/application/utils/supportedEventRequestToApiRequest.ts
596
+ const coreSupportedEventRequestToApiRequest = (coreSupportedEventRequest) => ({
597
+ id: coreSupportedEventRequest.id,
598
+ user_event: coreUserEventToApiUserEvent(coreSupportedEventRequest.userEvent),
599
+ context: coreContextToApiContext(coreSupportedEventRequest.context)
600
+ });
601
+
602
+ //#endregion
603
+ //#region src/application/utils/validation.ts
604
+ const validateEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
605
+
606
+ //#endregion
607
+ Object.defineProperty(exports, 'NodeSelector', {
608
+ enumerable: true,
609
+ get: function () {
610
+ return NodeSelector;
611
+ }
612
+ });
613
+ Object.defineProperty(exports, 'SelectorFactory', {
614
+ enumerable: true,
615
+ get: function () {
616
+ return SelectorFactory;
617
+ }
618
+ });
619
+ Object.defineProperty(exports, 'StringUtils', {
620
+ enumerable: true,
621
+ get: function () {
622
+ return StringUtils;
623
+ }
624
+ });
625
+ Object.defineProperty(exports, 'applyOverrides', {
626
+ enumerable: true,
627
+ get: function () {
628
+ return applyOverrides;
629
+ }
630
+ });
631
+ Object.defineProperty(exports, 'coreContextToApiContext', {
632
+ enumerable: true,
633
+ get: function () {
634
+ return coreContextToApiContext;
635
+ }
636
+ });
637
+ Object.defineProperty(exports, 'coreSupportedEventRequestToApiRequest', {
638
+ enumerable: true,
639
+ get: function () {
640
+ return coreSupportedEventRequestToApiRequest;
641
+ }
642
+ });
643
+ Object.defineProperty(exports, 'coreUserEventToApiUserEvent', {
644
+ enumerable: true,
645
+ get: function () {
646
+ return coreUserEventToApiUserEvent;
647
+ }
648
+ });
649
+ Object.defineProperty(exports, 'divideArray', {
650
+ enumerable: true,
651
+ get: function () {
652
+ return divideArray;
653
+ }
654
+ });
655
+ Object.defineProperty(exports, 'getRecentProductImageUrls', {
656
+ enumerable: true,
657
+ get: function () {
658
+ return getRecentProductImageUrls;
659
+ }
660
+ });
661
+ Object.defineProperty(exports, 'initAmplitude', {
662
+ enumerable: true,
663
+ get: function () {
664
+ return initAmplitude;
665
+ }
666
+ });
667
+ Object.defineProperty(exports, 'initDataLayerWrapper', {
668
+ enumerable: true,
669
+ get: function () {
670
+ return initDataLayerWrapper;
671
+ }
672
+ });
673
+ Object.defineProperty(exports, 'messageFromFormSubmittedEvent', {
674
+ enumerable: true,
675
+ get: function () {
676
+ return messageFromFormSubmittedEvent;
677
+ }
678
+ });
679
+ Object.defineProperty(exports, 'messageFromQueryEvent', {
680
+ enumerable: true,
681
+ get: function () {
682
+ return messageFromQueryEvent;
683
+ }
684
+ });
685
+ Object.defineProperty(exports, 'messageFromResponse', {
686
+ enumerable: true,
687
+ get: function () {
688
+ return messageFromResponse;
689
+ }
690
+ });
691
+ Object.defineProperty(exports, 'messageFromSuggestionEvent', {
692
+ enumerable: true,
693
+ get: function () {
694
+ return messageFromSuggestionEvent;
695
+ }
696
+ });
697
+ Object.defineProperty(exports, 'messageRequestToCommerceMessageRequest', {
698
+ enumerable: true,
699
+ get: function () {
700
+ return messageRequestToCommerceMessageRequest;
701
+ }
702
+ });
703
+ Object.defineProperty(exports, 'prepareMerchantPage', {
704
+ enumerable: true,
705
+ get: function () {
706
+ return prepareMerchantPage;
707
+ }
708
+ });
709
+ Object.defineProperty(exports, 'validateEmail', {
710
+ enumerable: true,
711
+ get: function () {
712
+ return validateEmail;
713
+ }
714
+ });
715
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQlREdzJhTXguY2pzIiwibmFtZXMiOlsiZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iLCJpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQiLCJpc0dBNEVjb21tZXJjZUV2ZW50IiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSIsImlzQmFzZUVjb21tZXJjZUV2ZW50IiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJQTFBBdHRyaWJ1dGVDYXRlZ29yeSIsIk1lc3NhZ2VUeXBlIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiUmVzcG9uc2VDYXRlZ29yeSIsIk1lc3NhZ2VUeXBlIiwiTWVzc2FnZVJvbGUiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIk1lc3NhZ2VSb2xlIiwiTWVzc2FnZVR5cGUiLCJub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCIsIm91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvYW5hbHl0aWNzVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZUNvbnRleHRUb0FwaUNvbnRleHQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2RpdmlkZUFycmF5LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2ltYWdlRmlsdGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lcmNoYW50VXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21RdWVyeUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25vZGVTZWxlY3Rvci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9vdmVycmlkZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3RyaW5nVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQsXG4gIGlzR0E0RWNvbW1lcmNlRXZlbnQsXG4gIGlzQmFzZUVjb21tZXJjZUV2ZW50LFxuICBCYXNlRWNvbW1lcmNlRXZlbnQsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcInNyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0L2FtcGxpdHVkZUNvbnRleHRcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBkYXRhTGF5ZXI6IGFueVtdO1xuICB9XG59XG5cbmNvbnN0IE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMgPSBbXCJhZGR0b2NhcnRcIiwgXCJhZGRlZHRvY2FydFwiXTtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfSU5URVJWQUxfTVMgPSA1MDA7XG5jb25zdCBDSEVDS19EQVRBX0xBWUVSX01BWF9BVFRFTVBUUyA9IDEwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIEdvb2dsZSBBbmFseXRpY3MgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBuYW1lIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGFuIGFkZF90b19jYXJ0IGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmNvbnN0IGlzQWRkVG9DYXJ0RXZlbnQgPSAoZXZlbnQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkRXZlbnQgPSBldmVudC5yZXBsYWNlKC9bLV9dL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBOT1JNQUxJWkVEX0FERF9UT19DQVJUX0VWRU5UX05BTUVTLnNvbWUoKG5hbWUpID0+XG4gICAgbm9ybWFsaXplZEV2ZW50LmluY2x1ZGVzKG5hbWUpXG4gICk7XG59O1xuXG4vKipcbiAqIFRyYWNrcyBhbiBhZGRfdG9fY2FydCBldmVudCBpbiBBbXBsaXR1ZGUuXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0byB0cmFjay5cbiAqL1xuY29uc3QgaGFuZGxlQWRkVG9DYXJ0RXZlbnQgPSAoXG4gIGV2ZW50OiBCYXNlRWNvbW1lcmNlRXZlbnQsXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICBsZXQgZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgaWYgKGlzTGVnYWN5VUFFY29tbWVyY2VFdmVudChldmVudCkpIHtcbiAgICBldmVudFByb3BzID0ge1xuICAgICAgaXRlbXM6IGV2ZW50LmVjb21tZXJjZS5hZGQucHJvZHVjdHMubWFwKChwcm9kdWN0KSA9PiAoe1xuICAgICAgICBpdGVtX25hbWU6IHByb2R1Y3QubmFtZSxcbiAgICAgICAgaXRlbV9jYXRlZ29yeTogcHJvZHVjdC5jYXRlZ29yeSxcbiAgICAgICAgcHJpY2U6IHByb2R1Y3QucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5LFxuICAgICAgfSkpLFxuICAgICAgY3VycmVuY3k6IGV2ZW50LmVjb21tZXJjZS5hZGQuY3VycmVuY3lDb2RlLFxuICAgICAgZXZlbnRfZm9ybWF0X3ZlcnNpb246IFwibGVnYWN5X3VuaXZlcnNhbF9hbmFseXRpY3NcIixcbiAgICB9O1xuICB9IGVsc2UgaWYgKGlzR0E0RWNvbW1lcmNlRXZlbnQoZXZlbnQpKSB7XG4gICAgZXZlbnRQcm9wcyA9IHtcbiAgICAgIGl0ZW1zOiBldmVudC5lY29tbWVyY2UuaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICBpdGVtX25hbWU6IGl0ZW0uaXRlbV9uYW1lLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBpdGVtLml0ZW1fY2F0ZWdvcnksXG4gICAgICAgIHByaWNlOiBpdGVtLnByaWNlLFxuICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcbiAgICAgIH0pKSxcbiAgICAgIGN1cnJlbmN5OiBldmVudC5lY29tbWVyY2UuY3VycmVuY3ksXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJnb29nbGVfYW5hbHl0aWNzXzRcIixcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGV2ZW50UHJvcHMgPSB7XG4gICAgICBldmVudF9wcm9wZXJ0aWVzOiB7IC4uLmV2ZW50IH0sXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJ1bmtub3duXCIsXG4gICAgfTtcbiAgfVxuXG4gIHRyYWNrKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQWRkVG9DYXJ0Q2xpY2tlZCwge1xuICAgIGV2ZW50UHJvcHMsXG4gIH0pO1xufTtcblxuLyoqXG4gKiBXcmFwcyB0aGUgd2luZG93LmRhdGFMYXllci5wdXNoIG1ldGhvZCB0byBpbnRlcmNlcHQgYWRkX3RvX2NhcnQgZXZlbnRzIGFuZCBzZW5kIHRoZW0gdG8gQW1wbGl0dWRlLlxuICogVGhpcyBmdW5jdGlvbiBydW5zIG9uIGFuIGludGVydmFsIHVudGlsIHRoZSBkYXRhTGF5ZXIgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgY29uc3QgaW5pdERhdGFMYXllcldyYXBwZXIgPSAoXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuXG4gIC8vIGN1cnJlbnRseSwgb3VyIGJ1bmRsZSBpcyBhbHdheXMgbG9hZGVkIGFmdGVyIEdUTSBoYXMgaW5pdGlhbGl6ZWQgR0EvZGF0YUxheWVyXG4gIC8vIHdlJ2xsIG5lZWQgdGhpcyBjaGVjayBoZXJlIGlmL3doZW4gd2UgbG9hZCBzcGlmZnkgYmVmb3JlL291dHNpZGUgb2YgR1RNXG4gIGNvbnN0IGNoZWNrQW5kSW5pdGlhbGl6ZSA9ICgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5kYXRhTGF5ZXIgfHwgISh3aW5kb3cuZGF0YUxheWVyIGFzIGFueSkucHVzaCkge1xuICAgICAgYXR0ZW1wdHMgKz0gMTtcblxuICAgICAgaWYgKGF0dGVtcHRzID49IENIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICAgICBgW3NwaWZmeS1haV0gZGF0YUxheWVyIG5vdCBhdmFpbGFibGUgYWZ0ZXIgJHtDSEVDS19EQVRBX0xBWUVSX01BWF9BVFRFTVBUU30gYXR0ZW1wdHNgXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc2V0VGltZW91dChjaGVja0FuZEluaXRpYWxpemUsIENIRUNLX0RBVEFfTEFZRVJfSU5URVJWQUxfTVMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgIFwiW3NwaWZmeS1haV0gZGF0YUxheWVyIGlzIGF2YWlsYWJsZSwgd3JhcHBpbmcgcHVzaCBmdW5jdGlvbi4uLlwiXG4gICAgKTtcbiAgICBjb25zdCBvcmlnaW5hbFB1c2ggPSB3aW5kb3cuZGF0YUxheWVyLnB1c2g7XG4gICAgd2luZG93LmRhdGFMYXllci5wdXNoID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBpc0Jhc2VFY29tbWVyY2VFdmVudChhcmdzWzBdKSAmJlxuICAgICAgICBpc0FkZFRvQ2FydEV2ZW50KChhcmdzWzBdIGFzIGFueSkuZXZlbnQpXG4gICAgICApIHtcbiAgICAgICAgaGFuZGxlQWRkVG9DYXJ0RXZlbnQoYXJnc1swXSBhcyBCYXNlRWNvbW1lcmNlRXZlbnQsIHRyYWNrKTtcbiAgICAgIH1cblxuICAgICAgLy8gSU1QT1JUQU5UOiBjYWxsIHRoZSBvcmlnaW5hbCBwdXNoIG1ldGhvZCBzbyB0aGF0IHRoZSBldmVudCBpcyBzdGlsbCBsb2dnZWQgdG8gR0FcbiAgICAgIHJldHVybiBvcmlnaW5hbFB1c2guYXBwbHkod2luZG93LmRhdGFMYXllciwgYXJncyk7XG4gICAgfTtcbiAgfTtcblxuICBjaGVja0FuZEluaXRpYWxpemUoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbml0QW1wbGl0dWRlID0gKFxuICB0cmFjazogKFxuICAgIGV2ZW50TmFtZTogU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSxcbiAgICBldmVudFByb3BzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSA9PiB2b2lkXG4pID0+IHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBtaWdodCBub3QgYmUgbmVlZGVkIGFueW1vcmUgaWYgQW1wbGl0dWRlIGlzIGluaXRpYWxpemVkIHZpYSBjb250ZXh0LlxuICAvLyBGb3Igbm93LCB3ZSdsbCBrZWVwIGl0IGFuZCBwYXNzIHRoZSB0cmFjayBmdW5jdGlvbi5cbiAgLy8gSWYgaXQncyB0cnVseSByZWR1bmRhbnQsIGl0IGNhbiBiZSByZW1vdmVkIGxhdGVyLlxuICB0cmFjayhTcGlmZnlNZXRyaWNzRXZlbnROYW1lLkJ1bmRsZUxvYWRlZCk7IC8vIEV4YW1wbGUgdXNhZ2UsIGFkanVzdCBhcyBuZWVkZWRcbn07XG4iLCJpbXBvcnQgeyBDb250ZXh0IGFzIEFwaUNvbnRleHQgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgQ29udGV4dCBhcyBDb3JlQ29udGV4dCB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBjb3JlQ29udGV4dFRvQXBpQ29udGV4dCA9IChjb250ZXh0OiBDb3JlQ29udGV4dCk6IEFwaUNvbnRleHQgPT4gKHtcbiAgY2hhdF9pZDogY29udGV4dC5jaGF0SWQsXG4gIG9yZ19pZDogY29udGV4dC5vcmdJZCxcbiAgdXNlcl9pZDogY29udGV4dC51c2VySWQsXG4gIG9yZ19zaG9ydF9uYW1lOiBjb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgc291cmNlOiBjb250ZXh0LnNvdXJjZSxcbiAgZW52OiBjb250ZXh0LmVudixcbn0pO1xuIiwiaW1wb3J0IHtcbiAgVXNlckV2ZW50IGFzIEFwaVVzZXJFdmVudCxcbiAgUExQQXR0cmlidXRlQ2F0ZWdvcnksXG4gIFBMUElkQXR0cmlidXRlcyxcbiAgVXNlckV2ZW50Q2F0ZWdvcnksXG59IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBVc2VyRXZlbnQgYXMgQ29yZVVzZXJFdmVudCB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQgPSAoZGF0YTogQ29yZVVzZXJFdmVudCk6IEFwaVVzZXJFdmVudCA9PiB7XG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QZHBWaXNpdCB8fFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkFkZFRvQ2FydFxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHByb2R1Y3RfaWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0SWQsXG4gICAgICAgIHBhcmVudF9wcm9kdWN0X2lkOiBkYXRhLmF0dHJpYnV0ZXMucGFyZW50UHJvZHVjdElkLFxuICAgICAgICB1cmw6IGRhdGEuYXR0cmlidXRlcy51cmwsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNhdGVnb3J5OiBQTFBBdHRyaWJ1dGVDYXRlZ29yeS5JZCxcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIC8vIHdlJ3JlIG9ubHkgaGFuZGxpbmcgaWQgYXR0cmlidXRlcyBmb3Igbm93XG4gICAgICAgICAgaWQ6IChkYXRhLmF0dHJpYnV0ZXMuYXR0cmlidXRlcyBhcyBQTFBJZEF0dHJpYnV0ZXMpLmlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHF1ZXJ5OiBkYXRhLmF0dHJpYnV0ZXMucXVlcnksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzZWFyY2hfdGVybTogZGF0YS5hdHRyaWJ1dGVzLnNlYXJjaFRlcm0sXG4gICAgICAgIHNlbGVjdGVkX2ZpbHRlcnM6IGRhdGEuYXR0cmlidXRlcy5zZWxlY3RlZEZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25faWQ6IGRhdGEuYXR0cmlidXRlcy5zdWdnZXN0aW9uSWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGFnZVZpc2l0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB1cmw6IGRhdGEuYXR0cmlidXRlcy51cmwsXG4gICAgICAgIHBhZ2VfdmlzaXRfY2F0ZWdvcnk6IGRhdGEuYXR0cmlidXRlcy5wYWdlVmlzaXRDYXRlZ29yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5Gb3JtU3VibWl0dGVkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgICBjcmVhdGVkX2F0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmaWxsZWRfc2NoZW1hOiB7IC4uLmRhdGEuYXR0cmlidXRlcy5maWxsZWRTY2hlbWEgfSxcbiAgICAgICAgZm9ybV9yZXNwb25zZV9pZDogZGF0YS5hdHRyaWJ1dGVzLmZvcm1SZXNwb25zZUlkLFxuICAgICAgICBmb3JtX3R5cGU6IGRhdGEuYXR0cmlidXRlcy5mb3JtVHlwZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgYXBwX2xvYWRlZCBldmVudCwgd2hlbiB3ZSBzdGFydCB0byB1c2UgYXBwX3VubG9hZGVkIHdlIG5lZWQgdG8gaGFuZGxlIGl0IGhlcmVcbiAgcmV0dXJuIHtcbiAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICB9O1xufTtcbiIsImV4cG9ydCBjb25zdCBkaXZpZGVBcnJheSA9IDxUPihhcnJheTogVFtdLCBzaXplOiBudW1iZXIpID0+IHtcbiAgY29uc3Qgcm93cyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgIHJvd3MucHVzaChhcnJheS5maWx0ZXIoKF86IFQsIGluZGV4OiBudW1iZXIpID0+IGluZGV4ICUgc2l6ZSA9PT0gaSkpO1xuICB9XG4gIHJldHVybiByb3dzO1xufTtcbiIsImltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VUeXBlLCBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBnZXRSZWNlbnRQcm9kdWN0SW1hZ2VVcmxzID0gKGxhc3RNZXNzYWdlczogTWVzc2FnZVtdLCBjdXJyZW50UHJvZHVjdElkOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgY29uc3QgcHJvZHVjdE1lc3NhZ2VzID0gbGFzdE1lc3NhZ2VzXG4gICAgLmZpbHRlcigobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0ICYmIG1lc3NhZ2UubWV0YWRhdGE/LmltYWdlVXJsKVxuICAgIC5tYXAoKG0pID0+IG0gYXMgUHJvZHVjdE1lc3NhZ2VNZXRhZGF0YSk7XG4gIC8vIHB1dCBhZGRlZCBwcm9kdWN0IGltYWdlIGF0IHRoZSB0b3Agb2YgdGhlIGxpc3RcbiAgcmV0dXJuIFtcbiAgICAuLi5wcm9kdWN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLm1ldGFkYXRhPy5pZCA9PT0gY3VycmVudFByb2R1Y3RJZCksXG4gICAgLi4ucHJvZHVjdE1lc3NhZ2VzLmZpbHRlcigobSkgPT4gbS5tZXRhZGF0YT8uaWQgIT09IGN1cnJlbnRQcm9kdWN0SWQpLFxuICBdLm1hcCgobSkgPT4gbS5tZXRhZGF0YSEuaW1hZ2VVcmwhKTtcbn07XG4iLCJleHBvcnQgY29uc3QgcHJlcGFyZU1lcmNoYW50UGFnZSA9ICgpID0+IHtcbiAgbGV0IG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J3ZpZXdwb3J0J11cIik7XG4gIGlmIChtZXRhVmlld3BvcnQpIHtcbiAgICBjb25zdCBjb250ZW50ID0gbWV0YVZpZXdwb3J0LmdldEF0dHJpYnV0ZShcImNvbnRlbnRcIilcbiAgICBjb25zdCBoYXNNYXhpbXVtU2NhbGUgPSBjb250ZW50Py5pbmNsdWRlcyhcIm1heGltdW0tc2NhbGU9MVwiKVxuICAgIGlmICghaGFzTWF4aW11bVNjYWxlKSB7XG4gICAgICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCBgJHtjb250ZW50fSwgbWF4aW11bS1zY2FsZT0xYClcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICBtZXRhVmlld3BvcnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibWV0YVwiKTtcbiAgbWV0YVZpZXdwb3J0LnNldEF0dHJpYnV0ZShcIm5hbWVcIiwgXCJ2aWV3cG9ydFwiKVxuICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwiY29udGVudFwiLCBcIndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLCBtYXhpbXVtLXNjYWxlPTFcIilcbiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChtZXRhVmlld3BvcnQpO1xufVxuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHtcbiAgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyxcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBVc2VyRXZlbnQsXG59IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQgPSAoXG4gIGV2ZW50OiBVc2VyRXZlbnQsXG4gIGZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IEZvcm1SZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXSxcbik6IE1lc3NhZ2UgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXZlbnQuY2F0ZWdvcnkgIT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZm9ybVN0cmluZ0NvbnRlbnRzID0gT2JqZWN0LmVudHJpZXMoZm9ybVJlc3BvbnNlQXR0cmlidXRlcy5zY2hlbWEucHJvcGVydGllcylcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke3ZhbHVlLnRpdGxlfTogJHtldmVudC5hdHRyaWJ1dGVzLmZpbGxlZFNjaGVtYVtrZXldfWApXG4gICAgLmpvaW4oJ1xcbicpO1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBjb250ZW50OiBmb3JtU3RyaW5nQ29udGVudHMsXG4gICAgfSxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBNZXNzYWdlLCBNZXNzYWdlUm9sZSwgTWVzc2FnZVR5cGUsIFVzZXJFdmVudCB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBxdWVyeSBVc2VyRXZlbnQgb2JqZWN0IGludG8gYSBNZXNzYWdlIG9iamVjdCBmb3IgcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgdXNlciBldmVudCBvYmplY3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSBldmVudCBpcyBhIHF1ZXJ5IGV2ZW50LCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbVF1ZXJ5RXZlbnQgPSAoZXZlbnQ6IFVzZXJFdmVudCk6IE1lc3NhZ2UgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUXVlcnlUeXBlZCxcbiAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY29udGVudDogZXZlbnQuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBldmVudC5ldmVudElkLFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlYXJjaCxcbiAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgc2VhcmNoVGVybTogZXZlbnQuYXR0cmlidXRlcy5zZWFyY2hUZXJtIHx8ICcnLFxuICAgICAgICBzZWxlY3RlZEZpbHRlcnM6IGV2ZW50LmF0dHJpYnV0ZXMuc2VsZWN0ZWRGaWx0ZXJzIHx8IFtdLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBSZXNwb25zZUNhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgUmVzcG9uc2UgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgc2VydmVyIFJlc3BvbnNlIG9iamVjdCBpbnRvIGEgTWVzc2FnZSBvYmplY3QgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgY29udGFpbmluZyBtb2RlbCBnZW5lcmF0ZWQgY29udGVudFxuICpcbiAqIEByZXR1cm5zIEEgTWVzc2FnZSBpZiB0aGUgcmVzcG9uc2UgY29udGFpbnMga25vd24gYXR0cmlidXRlcywgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21SZXNwb25zZSA9IChyZXNwb25zZT86IFJlc3BvbnNlKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5UZXh0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuVGV4dCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGNvbnRlbnQ6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuY29udGVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUmV2aWV3KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUmV2aWV3LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgcmV2aWV3OiByZXNwb25zZS5hdHRyaWJ1dGVzLnJldmlldyxcbiAgICAgICAgcmV2aWV3ZXI6IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmV2aWV3ZXIsXG4gICAgICAgIHN0YXJzOiByZXNwb25zZS5hdHRyaWJ1dGVzLnN0YXJzLFxuICAgICAgICB0aXRsZTogcmVzcG9uc2UuYXR0cmlidXRlcy50aXRsZSxcbiAgICAgICAgcmljaEluZm9ybWF0aW9uOiByZXNwb25zZS5hdHRyaWJ1dGVzLnJpY2hJbmZvcm1hdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5TZXBhcmF0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5TZXBhcmF0b3IsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5QYWdlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUGFnZSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2gsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5yZXNwb25zZS5hdHRyaWJ1dGVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2hGaWx0ZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoRmlsdGVyLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Gb3JtKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuRm9ybSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGZvcm1UeXBlOiByZXNwb25zZS5hdHRyaWJ1dGVzLmZvcm1DYXRlZ29yeT8uZm9ybVR5cGUsXG4gICAgICAgIGZpZWxkczogT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYXR0cmlidXRlcy5zY2hlbWEucHJvcGVydGllcykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgICAgICAga2V5LFxuICAgICAgICAgIHRpdGxlOiB2YWx1ZS50aXRsZSxcbiAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgIGZvcm1hdDogdmFsdWUuZm9ybWF0LFxuICAgICAgICAgIHJlcXVpcmVkOiByZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5yZXF1aXJlZC5pbmNsdWRlcyhrZXkpLFxuICAgICAgICB9KSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5PcmRlcixcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgU3VnZ2VzdGlvbiwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIFVzZXJFdmVudCBvYmplY3QgaW50byBhIE1lc3NhZ2Ugb2JqZWN0IGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBVc2VyRXZlbnQgb2JqZWN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlclxuICogQHBhcmFtIHN1Z2dlc3Rpb25zIEEgbGlzdCBvZiBnZW5lcmF0ZWQgc3VnZ2VzdGlvbnMgdG8gbWF0Y2ggdGhlIGV2ZW50IHRvXG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSBldmVudCBpcyBhIHN1Z2dlc3Rpb24gY2xpY2sgZXZlbnQsIHVuZGVmaW5lZCBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VGcm9tU3VnZ2VzdGlvbkV2ZW50ID0gKFxuICBldmVudDogVXNlckV2ZW50LFxuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdLFxuKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQpIHtcbiAgICBjb25zdCB7IHN1Z2dlc3Rpb25JZCB9ID0gZXZlbnQuYXR0cmlidXRlcztcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5TdWdnZXN0aW9uQ2xpY2tlZCxcbiAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgc3VnZ2VzdGlvbklkLFxuICAgICAgICBzdWdnZXN0aW9uQ29udGVudDogc3VnZ2VzdGlvbnMuZmluZCgocykgPT4gcy5pZCA9PT0gc3VnZ2VzdGlvbklkKT8uY29udGVudCA/PyAnJyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwiaW1wb3J0IHsgTmV4dE1lc3NhZ2VSZXF1ZXN0IGFzIEFwaU5leHRNZXNzYWdlUmVxdWVzdCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50IH0gZnJvbSAnLi9jb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQnO1xuXG5leHBvcnQgY29uc3QgbWVzc2FnZVJlcXVlc3RUb0NvbW1lcmNlTWVzc2FnZVJlcXVlc3QgPSAoXG4gIGRhdGE6IE5leHRNZXNzYWdlUmVxdWVzdCxcbik6IEFwaU5leHRNZXNzYWdlUmVxdWVzdCA9PiAoe1xuICBjb250ZXh0OiB7XG4gICAgY2hhdF9pZDogZGF0YS5jb250ZXh0LmNoYXRJZCxcbiAgICBvcmdfaWQ6IGRhdGEuY29udGV4dC5vcmdJZCxcbiAgICBvcmdfc2hvcnRfbmFtZTogZGF0YS5jb250ZXh0Lm9yZ1Nob3J0TmFtZSxcbiAgICB1c2VyX2lkOiBkYXRhLmNvbnRleHQudXNlcklkLFxuICAgIHNvdXJjZTogZGF0YS5jb250ZXh0LnNvdXJjZSxcbiAgICBlbnY6IGRhdGEuY29udGV4dC5lbnYsXG4gIH0sXG4gIGlkOiBkYXRhLmlkLFxuICBmZWF0dXJlX2ZsYWdzOiBkYXRhLmZlYXR1cmVGbGFncyxcbiAgdXNlcl9ldmVudHM6IGRhdGEudXNlckV2ZW50cz8ubWFwKCh1c2VyRXZlbnQpID0+IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCh1c2VyRXZlbnQpKSxcbiAgZ2VuZXJhdGlvbl9wYXJhbXM6IHtcbiAgICBtb2RlbDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5tb2RlbCxcbiAgICBtYXhfdG9rZW5zOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm1heFRva2VucyxcbiAgICBzdG9wOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0b3AsXG4gICAgc3RyZWFtOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN0cmVhbSxcbiAgICB0ZW1wZXJhdHVyZTogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50ZW1wZXJhdHVyZSxcbiAgICB0b3BfcDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy50b3BQLFxuICAgIG51bV9zdWdnZXN0aW9uczogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5udW1TdWdnZXN0aW9ucyxcbiAgICByZXNwb25zZV9zeXN0ZW1fcHJvbXB0OiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnJlc3BvbnNlU3lzdGVtUHJvbXB0LFxuICAgIHN1Z2dlc3Rpb25fc3lzdGVtX3Byb21wdDogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5zdWdnZXN0aW9uU3lzdGVtUHJvbXB0LFxuICAgIHJlc3BvbnNlX2NhY2hpbmc6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ucmVzcG9uc2VDYWNoaW5nLFxuICB9LFxufSk7XG4iLCJleHBvcnQgYWJzdHJhY3QgY2xhc3MgTm9kZVNlbGVjdG9yIHtcbiAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgcm9vdDogRG9jdW1lbnQ7XG5cbiAgY29uc3RydWN0b3IocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcbiAgICB0aGlzLnJvb3QgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGdldFBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIHRoaXMucGF0dGVybjtcbiAgfVxuXG4gIHNldFJvb3Qocm9vdDogRG9jdW1lbnQpIHtcbiAgICB0aGlzLnJvb3QgPSByb290O1xuICB9XG5cbiAgZ2V0Um9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5yb290O1xuICB9XG5cbiAgYWJzdHJhY3QgcGFyc2UoKTogTm9kZSB8IG51bGw7XG59XG5cbmNsYXNzIFF1ZXJ5U2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLnF1ZXJ5U2VsZWN0b3IodGhpcy5nZXRQYXR0ZXJuKCkpO1xuICB9XG59XG5cbmNsYXNzIElEU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpLmdldEVsZW1lbnRCeUlkKHRoaXMuZ2V0UGF0dGVybigpKSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIFhwYXRoU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Um9vdCgpPy5ldmFsdWF0ZShcbiAgICAgIHRoaXMuZ2V0UGF0dGVybigpLFxuICAgICAgdGhpcy5nZXRSb290KCksXG4gICAgICBudWxsLFxuICAgICAgWFBhdGhSZXN1bHQuRklSU1RfT1JERVJFRF9OT0RFX1RZUEUsXG4gICAgICBudWxsLFxuICAgICk/LnNpbmdsZU5vZGVWYWx1ZSBhcyBOb2RlO1xuICB9XG59XG5cbmNsYXNzIENoYWluU2VsZWN0b3IgZXh0ZW5kcyBOb2RlU2VsZWN0b3Ige1xuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IHNlbGVjdG9ySW5kZXggPSAwO1xuICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMuZ2V0UGF0dGVybigpLnNwbGl0KCdAJyk7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gc2VsZWN0b3JzLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBwYXJzZUNoYWluID0gKHBhdHRlcm46IHN0cmluZywgcHJldk5vZGU/OiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JGYWN0b3J5LnBhcnNlKHBhdHRlcm4pO1xuXG4gICAgICBpZiAocHJldk5vZGUpIHtcbiAgICAgICAgc2VsZWN0b3Iuc2V0Um9vdChwcmV2Tm9kZSBhcyBEb2N1bWVudCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gc2VsZWN0b3IucGFyc2UoKTtcbiAgICAgIGlmIChzZWxlY3RvckluZGV4ID09PSBsYXN0SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICBsZXQgbm9kZTogTm9kZSB8IG51bGwgfCB1bmRlZmluZWQgPSBjdXJyZW50Tm9kZSB8fCBkb2N1bWVudDtcbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpPy5zaGFkb3dSb290KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTEVsZW1lbnQpLnNoYWRvd1Jvb3Q7XG4gICAgICB9XG5cbiAgICAgIGlmICgoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpPy5jb250ZW50V2luZG93KSB7XG4gICAgICAgIG5vZGUgPSAoY3VycmVudE5vZGUgYXMgSFRNTElGcmFtZUVsZW1lbnQpLmNvbnRlbnRXaW5kb3c/LmRvY3VtZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbKytzZWxlY3RvckluZGV4XS50cmltKCksIG5vZGUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcGFyc2VDaGFpbihzZWxlY3RvcnNbc2VsZWN0b3JJbmRleF0udHJpbSgpKTtcbiAgfVxufVxuXG5jbGFzcyBFbXB0eSBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCcnKTtcbiAgfVxuICBwYXJzZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNlbGVjdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBwYXJzZShjb21wb3NlZFNlbGVjdG9yPzogc3RyaW5nKSB7XG4gICAgaWYgKCFjb21wb3NlZFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gbmV3IEVtcHR5KCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BsaXQgPSBjb21wb3NlZFNlbGVjdG9yLnNwbGl0KCd8Jyk7XG4gICAgY29uc3QgdHlwZSA9IHNwbGl0WzBdO1xuICAgIGNvbnN0IHNlbGVjdG9yID0gc3BsaXRbMV07XG5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2lkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQoc2VsZWN0b3IpO1xuICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeShzZWxlY3Rvcik7XG4gICAgICBjYXNlICd4cGF0aCc6XG4gICAgICAgIHJldHVybiB0aGlzLnhwYXRoKHNlbGVjdG9yKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgRW1wdHkoKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2soc2VsZWN0b3I/OiBOb2RlU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPz8gbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgY2hhaW4ocGF0dGVybj86IHN0cmluZykge1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IENoYWluU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBpZChwYXR0ZXJuPzogc3RyaW5nKTogTm9kZVNlbGVjdG9yIHtcbiAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBJRFNlbGVjdG9yKHBhdHRlcm4pIDogbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgcXVlcnkocGF0dGVybj86IHN0cmluZyk6IE5vZGVTZWxlY3RvciB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUXVlcnlTZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG5cbiAgc3RhdGljIHhwYXRoKHBhdHRlcm4/OiBzdHJpbmcpOiBOb2RlU2VsZWN0b3Ige1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IFhwYXRoU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxufVxuIiwiZXhwb3J0IHR5cGUgUmVwbGFjZU9wPFQ+ID0geyAkcmVwbGFjZTogVCB9O1xuZXhwb3J0IHR5cGUgRGVsZXRlT3AgPSB7ICRkZWxldGU6IHRydWUgfTtcblxuLy8gVHJlYXQgdGhlc2UgYXMgYXRvbWljIHZhbHVlcyAobm90IHJlY3Vyc2VkIGludG8pXG50eXBlIEJ1aWx0aW4gPSBEYXRlIHwgUmVnRXhwIHwgKCguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pO1xuXG50eXBlIFByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBiaWdpbnQgfCBzeW1ib2wgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIE92ZXJyaWRlPFQ+IGlzIGEgRGVlcFBhcnRpYWwtbGlrZSB0eXBlIHdpdGggc3BlY2lhbCBvcGVyYXRvcnM6XG4gKiAtIHsgJHJlcGxhY2U6IFQgfSB0byByZXBsYWNlIGFuIGVudGlyZSBzdWJ0cmVlL2FycmF5XG4gKiAtIHsgJGRlbGV0ZTogdHJ1ZSB9IHRvIGRlbGV0ZSBhbiBvYmplY3Qga2V5XG4gKlxuICogQXJyYXlzIGJlaGF2aW9yOlxuICogLSBBcnJheXMgb2Ygb2JqZWN0czogbWVyZ2UtYnktaW5kZXggYnkgZGVmYXVsdCAodW5sZXNzIGBhcnJheVN0cmF0ZWd5OiAncmVwbGFjZSdgIG9yIGAkcmVwbGFjZWAgaXMgdXNlZClcbiAqIC0gQXJyYXlzIG9mIHByaW1pdGl2ZXMgKHN0cmluZy9udW1iZXIvYm9vbGVhbi8uLi4pOiByZXBsYWNlZCBieSBkZWZhdWx0IHdoZW4gYSBwYXRjaCBhcnJheSBpcyBwcm92aWRlZFxuICovXG5leHBvcnQgdHlwZSBPdmVycmlkZTxUPiA9XG4gIC8vIGF0b21pY1xuICBUIGV4dGVuZHMgUHJpbWl0aXZlIHwgQnVpbHRpblxuICAgID8gVCB8IFJlcGxhY2VPcDxUPiB8IERlbGV0ZU9wXG4gICAgOiAvLyBhcnJheXNcbiAgICAgIFQgZXh0ZW5kcyAoaW5mZXIgVSlbXVxuICAgICAgPyBBcnJheTxPdmVycmlkZTxVPiB8IHVuZGVmaW5lZD4gfCBSZXBsYWNlT3A8VD5cbiAgICAgIDogLy8gbWFwcy9zZXRzIOKAkyBrZWVwIHNpbXBsZTogb25seSBhbGxvdyBmdWxsIHJlcGxhY2VcbiAgICAgICAgVCBleHRlbmRzIE1hcDx1bmtub3duLCB1bmtub3duPiB8IFNldDx1bmtub3duPlxuICAgICAgICA/IFJlcGxhY2VPcDxUPlxuICAgICAgICA6IC8vIG9iamVjdHNcbiAgICAgICAgICBUIGV4dGVuZHMgb2JqZWN0XG4gICAgICAgICAgPyB7IFtLIGluIGtleW9mIFRdPzogT3ZlcnJpZGU8VFtLXT4gfCBEZWxldGVPcCB8IG51bGwgfSB8IFJlcGxhY2VPcDxUPlxuICAgICAgICAgIDogVDtcblxuZXhwb3J0IHR5cGUgTWVyZ2VPcHRpb25zID0ge1xuICAvKipcbiAgICogSG93IHRvIHRyZWF0IGFycmF5cyB3aGVuIHBhdGNoIHByb3ZpZGVzIGFuIGFycmF5IChub3QgJHJlcGxhY2UpOlxuICAgKiAtICdyZXBsYWNlJzogYWx3YXlzIHVzZSBwYXRjaCBhcnJheSBhcyB3aG9sZSB2YWx1ZVxuICAgKiAtICdtZXJnZUJ5SW5kZXgnOiBtZXJnZSBlYWNoIGluZGV4IHJlY3Vyc2l2ZWx5IChkZWZhdWx0IGZvciBhcnJheXMgb2Ygb2JqZWN0cylcbiAgICogTm90ZTogQXJyYXlzIG9mIHByaW1pdGl2ZXMgYXJlIHJlcGxhY2VkIGJ5IGRlZmF1bHQgcmVnYXJkbGVzcyBvZiB0aGlzIG9wdGlvbi5cbiAgICovXG4gIGFycmF5U3RyYXRlZ3k/OiAncmVwbGFjZScgfCAnbWVyZ2VCeUluZGV4JztcbiAgLyoqXG4gICAqIElmIHRydWUsIGEgYG51bGxgIHBhdGNoIHZhbHVlIGRlbGV0ZXMgdGhlIGtleSBmcm9tIGFuIG9iamVjdCAoUkZDIDczOTYtaXNoKVxuICAgKi9cbiAgbnVsbERlbGV0ZXM/OiBib29sZWFuO1xufTtcblxuLy8gUHJldmVudHMgVCBmcm9tIGJlaW5nIGluZmVycmVkIGZyb20gdGhlICdwYXRjaCcgcGFyYW1ldGVyOyBpdCBtdXN0IGJlIGluZmVycmVkIGZyb20gJ2Jhc2UnLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE0ODI5I2lzc3VlY29tbWVudC01MDQwNDI1NDZcbnR5cGUgTm9JbmZlcjxUPiA9IFtUXVtUIGV4dGVuZHMgdW5rbm93biA/IDAgOiBuZXZlcl07XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QoeDogdW5rbm93bik6IHggaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gKFxuICAgICEheCAmJlxuICAgIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJlxuICAgICFBcnJheS5pc0FycmF5KHgpICYmXG4gICAgISh4IGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICAhKHggaW5zdGFuY2VvZiBSZWdFeHApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzUmVwbGFjZSh4OiB1bmtub3duKTogeCBpcyBSZXBsYWNlT3A8dW5rbm93bj4ge1xuICByZXR1cm4gISF4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAnJHJlcGxhY2UnIGluICh4IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KTtcbn1cbmZ1bmN0aW9uIGlzRGVsZXRlKHg6IHVua25vd24pOiB4IGlzIERlbGV0ZU9wIHtcbiAgcmV0dXJuICEheCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgKHggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLiRkZWxldGUgPT09IHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlVmFsdWUoeDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCB0ID0gdHlwZW9mIHg7XG4gIHJldHVybiAoXG4gICAgeCA9PT0gbnVsbCB8fFxuICAgIHQgPT09ICdzdHJpbmcnIHx8XG4gICAgdCA9PT0gJ251bWJlcicgfHxcbiAgICB0ID09PSAnYm9vbGVhbicgfHxcbiAgICB0ID09PSAnYmlnaW50JyB8fFxuICAgIHQgPT09ICdzeW1ib2wnIHx8XG4gICAgdCA9PT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheU9mUHJpbWl0aXZlcyhhcnI6IHVua25vd25bXSk6IGJvb2xlYW4ge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBhbWJpZ3VvdXMsIGRlZmF1bHQgdG8gbWVyZ2UtYnktaW5kZXggb24gZW1wdHlcbiAgLy8gSWYgZXZlcnkgZGVmaW5lZCBlbGVtZW50IGlzIHByaW1pdGl2ZSwgdHJlYXQgYXMgcHJpbWl0aXZlc1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHYgPSBhcnJbaV07XG4gICAgaWYgKHYgIT09IHVuZGVmaW5lZCAmJiAhaXNQcmltaXRpdmVWYWx1ZSh2KSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZXJnZUFueShiYXNlQW55OiB1bmtub3duLCBwYXRjaEFueTogdW5rbm93biwgb3B0czogTWVyZ2VPcHRpb25zKTogdW5rbm93biB7XG4gIGlmIChpc1JlcGxhY2UocGF0Y2hBbnkpKSByZXR1cm4gcGF0Y2hBbnkuJHJlcGxhY2UgYXMgdW5rbm93bjtcbiAgaWYgKGlzRGVsZXRlKHBhdGNoQW55KSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gY2FsbGVyIGRlbGV0ZXMgdGhlIGtleVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2VBbnkpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0Y2hBbnkpKSB7XG4gICAgICBjb25zdCBiYXNlQXJyID0gYmFzZUFueSBhcyB1bmtub3duW107XG4gICAgICBjb25zdCBwYXRjaEFyciA9IHBhdGNoQW55IGFzIHVua25vd25bXTtcbiAgICAgIGNvbnN0IHNob3VsZFJlcGxhY2UgPVxuICAgICAgICBvcHRzLmFycmF5U3RyYXRlZ3kgPT09ICdyZXBsYWNlJyB8fFxuICAgICAgICBpc0FycmF5T2ZQcmltaXRpdmVzKGJhc2VBcnIpIHx8XG4gICAgICAgIGlzQXJyYXlPZlByaW1pdGl2ZXMocGF0Y2hBcnIpO1xuICAgICAgaWYgKHNob3VsZFJlcGxhY2UpIHJldHVybiBwYXRjaEFueSBhcyB1bmtub3duO1xuICAgICAgY29uc3Qgb3V0ID0gYmFzZUFyci5zbGljZSgpO1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgob3V0Lmxlbmd0aCwgcGF0Y2hBcnIubGVuZ3RoKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4OyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgcFZhbCA9IHBhdGNoQXJyW2ldO1xuICAgICAgICBpZiAocFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb3V0W2ldID0gbWVyZ2VBbnkob3V0W2ldLCBwVmFsLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG91dCBhcyB1bmtub3duO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZUFueSBhcyB1bmtub3duO1xuICB9XG5cbiAgaWYgKGlzUGxhaW5PYmplY3QoYmFzZUFueSkgJiYgaXNQbGFpbk9iamVjdChwYXRjaEFueSkpIHtcbiAgICBjb25zdCBiYXNlT2JqID0gYmFzZUFueSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBwYXRjaE9iaiA9IHBhdGNoQW55IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmJhc2VPYmogfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXRjaE9iaikpIHtcbiAgICAgIGNvbnN0IHBWYWwgPSBwYXRjaE9ialtrZXldO1xuICAgICAgaWYgKHBWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBsZWF2ZSBhcy1pc1xuICAgICAgfSBlbHNlIGlmIChvcHRzLm51bGxEZWxldGVzICYmIHBWYWwgPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIGlmIChpc1JlcGxhY2UocFZhbCkpIHtcbiAgICAgICAgb3V0W2tleV0gPSBwVmFsLiRyZXBsYWNlO1xuICAgICAgfSBlbHNlIGlmIChpc0RlbGV0ZShwVmFsKSkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRba2V5XSA9IG1lcmdlQW55KGJhc2VPYmo/LltrZXldLCBwVmFsLCBvcHRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dCBhcyB1bmtub3duO1xuICB9XG5cbiAgcmV0dXJuIChwYXRjaEFueSBhcyB1bmtub3duKSA/PyBiYXNlQW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlPdmVycmlkZXM8VD4oXG4gIGJhc2U6IFQsXG4gIHBhdGNoOiBPdmVycmlkZTxOb0luZmVyPFQ+PixcbiAgb3B0czogTWVyZ2VPcHRpb25zID0ge30sXG4pOiBUIHtcbiAgY29uc3QgeyBhcnJheVN0cmF0ZWd5ID0gJ21lcmdlQnlJbmRleCcsIG51bGxEZWxldGVzID0gZmFsc2UgfSA9IG9wdHM7XG5cbiAgLy8gSGFuZGxlIHdob2xlLW5vZGUgY29udHJvbCBvcGVyYXRvcnMgb24gcGF0Y2ggaXRzZWxmXG4gIGlmIChpc1JlcGxhY2UocGF0Y2gpKSByZXR1cm4gcGF0Y2guJHJlcGxhY2UgYXMgVDtcbiAgaWYgKGlzRGVsZXRlKHBhdGNoKSkgcmV0dXJuIHVuZGVmaW5lZCBhcyB1bmtub3duIGFzIFQ7XG5cbiAgLy8gQXJyYXlzXG4gIGlmIChBcnJheS5pc0FycmF5KGJhc2UpKSB7XG4gICAgaWYgKGlzUmVwbGFjZShwYXRjaCkpIHJldHVybiBwYXRjaC4kcmVwbGFjZSBhcyBUO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGNoKSkge1xuICAgICAgaWYgKGFycmF5U3RyYXRlZ3kgPT09ICdyZXBsYWNlJykgcmV0dXJuIHBhdGNoIGFzIHVua25vd24gYXMgVDtcbiAgICAgIC8vIG1lcmdlIGJ5IGluZGV4XG4gICAgICBjb25zdCBvdXQgPSAoYmFzZSBhcyB1bmtub3duW10pLnNsaWNlKCk7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heChvdXQubGVuZ3RoLCBwYXRjaC5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBwVmFsID0gKHBhdGNoIGFzIHVua25vd25bXSlbaV07XG4gICAgICAgIGlmIChwVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvdXRbaV0gPSBtZXJnZUFueShvdXRbaV0sIHBWYWwsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0IGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgLy8gaW52YWxpZCBwYXRjaCB0eXBlIGZvciBhbiBhcnJheSDihpIgaWdub3JlIGFuZCByZXR1cm4gYmFzZVxuICAgIHJldHVybiBiYXNlIGFzIFQ7XG4gIH1cblxuICAvLyBQbGFpbiBvYmplY3RzXG4gIGlmIChpc1BsYWluT2JqZWN0KGJhc2UpICYmIGlzUGxhaW5PYmplY3QocGF0Y2gpKSB7XG4gICAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uKGJhc2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gICAgY29uc3QgcGF0Y2hPYmogPSBwYXRjaCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwYXRjaE9iaikpIHtcbiAgICAgIGNvbnN0IHBWYWwgPSBwYXRjaE9ialtrZXldO1xuICAgICAgaWYgKHBWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBsZWF2ZSBleGlzdGluZyB2YWx1ZVxuICAgICAgfSBlbHNlIGlmIChudWxsRGVsZXRlcyAmJiBwVmFsID09PSBudWxsKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBsYWNlKHBWYWwpKSB7XG4gICAgICAgIG91dFtrZXldID0gcFZhbC4kcmVwbGFjZTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEZWxldGUocFZhbCkpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYlZhbCA9IChiYXNlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgICAgICBvdXRba2V5XSA9IG1lcmdlQW55KGJWYWwsIHBWYWwsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0IGFzIHVua25vd24gYXMgVDtcbiAgfVxuXG4gIC8vIEZvciBwcmltaXRpdmVzIG9yIHdoZW4gcGF0Y2ggaXMgcHJpbWl0aXZlLCBwYXRjaCB3aW5zIGlmIGRlZmluZWRcbiAgcmV0dXJuICgocGF0Y2ggYXMgdW5rbm93bikgPz8gYmFzZSkgYXMgVDtcbn1cbiIsIlxuY2xhc3MgU3RyaW5nVXRpbHMge1xuICBzdGF0aWMgaXNOdWxsT3JFbXB0eSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVUcmltbWVkID0gdmFsdWU/LnRyaW0oKTtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZVRyaW1tZWQgPT09ICcnO1xuICB9XG5cbiAgc3RhdGljIHRyaW1Ub051bGwodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsdWVUcmltbWVkID0gdmFsdWU/LnRyaW0oKTtcbiAgICByZXR1cm4gU3RyaW5nVXRpbHMuaXNOdWxsT3JFbXB0eSh2YWx1ZVRyaW1tZWQpID8gdW5kZWZpbmVkIDogdmFsdWVUcmltbWVkO1xuICB9XG5cbiAgc3RhdGljIGNhcGl0YWxpemUodHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR5cGUuc3Vic3RyaW5nKDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBmaXJzdCBwYXR0ZXJuIGluIGFuIGFycmF5IHRoYXQgbWF0Y2hlcyBhIGdpdmVuIFVSTC5cbiAgICogUGF0dGVybnMgY2FuIGluY2x1ZGUgYSBzaW5nbGUgd2lsZGNhcmQgJyonIHdoaWNoIG1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJuc1xuICAgKiBAcGFyYW0gdXJsVG9UZXN0XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgZmluZE1hdGNoaW5nUGF0dGVybihwYXR0ZXJuczogc3RyaW5nW10sIHVybFRvVGVzdDogTG9jYXRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdXJsVG9UZXN0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgLy8gVGVzdCBvbmx5IGlmIGEgcGF0aG5hbWUgaXMgcHJlc2VudC5cbiAgICAgIGlmICh1cmxUb1Rlc3QucGF0aG5hbWUgIT09ICcvJykge1xuICAgICAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNoYXJhY3RlcnMgbGlrZSAnLicsICcrJywgJz8nLCAnKCcsIGV0Yy4sIGluIHRoZSBwYXR0ZXJuIGFyZSB0cmVhdGVkIGxpdGVyYWxseS5cbiAgICAgICAgY29uc3QgZXNjYXBlZFBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1suKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSB3aWxkY2FyZCAnKicgd2l0aCBpdHMgcmVnZXggZXF1aXZhbGVudCAnLionIChtYXRjaGVzIGFueSBjaGFyYWN0ZXIgemVybyBvciBtb3JlIHRpbWVzKVxuICAgICAgICBjb25zdCByZWdleFBhdHRlcm4gPSBlc2NhcGVkUGF0dGVybi5yZXBsYWNlKC9cXCovZywgJy4qJyk7XG5cbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtyZWdleFBhdHRlcm59JGApO1xuICAgICAgICBpZiAocmVnZXgudGVzdCh1cmxUb1Rlc3QucGF0aG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgodXJsVG9UZXN0Lmhvc3RuYW1lKSkge1xuICAgICAgICByZXR1cm4gcGF0dGVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU3RyaW5nVXRpbHMgfTtcbiIsImltcG9ydCB7IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCBhcyBBcGlTdXBwb3J0ZWRFdmVudFJlcXVlc3QgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IGFzIENvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvYXBpL3N1cHBvcnRlZEV2ZW50UmVxdWVzdCc7XG5pbXBvcnQgeyBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQgfSBmcm9tICcuL2NvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCc7XG5pbXBvcnQgeyBjb3JlQ29udGV4dFRvQXBpQ29udGV4dCB9IGZyb20gJy4vY29yZUNvbnRleHRUb0FwaUNvbnRleHQnO1xuXG5leHBvcnQgY29uc3QgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCA9IChcbiAgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdDogQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCxcbik6IEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9PiAoe1xuICBpZDogY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5pZCxcbiAgdXNlcl9ldmVudDogY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QudXNlckV2ZW50KSxcbiAgY29udGV4dDogY29yZUNvbnRleHRUb0FwaUNvbnRleHQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5jb250ZXh0KSxcbn0pO1xuIiwiLy8gVGhpcyBlbWFpbCB2YWxpZGF0ZXMgdGhhdCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGBAYCBzeW1ib2wsXG4vLyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGBAYCBzeW1ib2wgYW5kIHRoZSBgLmAgc3ltYm9sLFxuLy8gYW5kIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGAuYCBzeW1ib2xcbi8vIEl0IGRvZXMgTk9UIHZhbGlkYXRlIGFsbCBwb3NzaWJsZSBlbWFpbCBmb3JtYXRzLCBidXQgaXQgaXMgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFlQSxNQUFNLHFDQUFxQyxDQUFDLGFBQWEsY0FBYztBQUN2RSxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLGdDQUFnQzs7Ozs7Ozs7QUFTdEMsTUFBTSxvQkFBb0IsVUFBMkI7Q0FDbkQsTUFBTSxrQkFBa0IsTUFBTSxRQUFRLFNBQVMsR0FBRyxDQUFDLGFBQWE7QUFDaEUsUUFBTyxtQ0FBbUMsTUFBTSxTQUM5QyxnQkFBZ0IsU0FBUyxLQUFLLENBQy9COzs7Ozs7O0FBUUgsTUFBTSx3QkFDSixPQUNBLFVBSUc7Q0FDSCxJQUFJQTtBQUVKLEtBQUlDLHdDQUF5QixNQUFNLENBQ2pDLGNBQWE7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