@envive-ai/react-hooks 0.2.6 → 0.2.7-arthur-1

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 (361) hide show
  1. package/dist/{NewOrgConfig-BxSuoP9C.cjs → NewOrgConfig-Bo1seKr6.cjs} +2 -2
  2. package/dist/{NewOrgConfig-BfrGpiGk.js → NewOrgConfig-yptI2imS.js} +2 -2
  3. package/dist/{SystemSettingsContext-B8X_Dvw2.js → SystemSettingsContext-BY1BFgAQ.js} +2 -2
  4. package/dist/{SystemSettingsContext-Bkoiobdv.cjs → SystemSettingsContext-EDpRMMt2.cjs} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-DwfGqNTx.js → TrackComponentVisibleEvent-CXhKOwKQ.js} +2 -2
  6. package/dist/{TrackComponentVisibleEvent-DMuX-byo.cjs → TrackComponentVisibleEvent-CgxCqrIt.cjs} +2 -2
  7. package/dist/amplitudeContext-BItT9HmT.js +1 -0
  8. package/dist/{amplitudeContext-ZTQMvVTV.cjs → amplitudeContext-C8tT74Mi.cjs} +9 -9
  9. package/dist/{amplitudeContext-B73xamNe.d.cts → amplitudeContext-CCVyp5RU.d.cts} +1 -1
  10. package/dist/{amplitudeContext-DOqL2Vn8.js → amplitudeContext-DCk6Va-j.js} +9 -9
  11. package/dist/amplitudeContext-DPtyVv3Q.cjs +0 -0
  12. package/dist/{amplitudeContext-CiO9T9c-.d.ts → amplitudeContext-DcRur97Z.d.ts} +1 -1
  13. package/dist/{api-bHEYmSiT.js → api-BWSsazAG.js} +3 -3
  14. package/dist/{api-BvygKEiX.cjs → api-DeW6rHj3.cjs} +3 -3
  15. package/dist/{app-BQw_-JGl.cjs → app-BbPSHefQ.cjs} +2 -2
  16. package/dist/{app-Aqkm_SlS.js → app-CflxT_xI.js} +2 -2
  17. package/dist/application/models/graphql/index.cjs +4 -3
  18. package/dist/application/models/graphql/index.d.cts +2 -2
  19. package/dist/application/models/graphql/index.d.ts +2 -2
  20. package/dist/application/models/graphql/index.js +3 -3
  21. package/dist/application/models/guards/api/index.cjs +3 -3
  22. package/dist/application/models/guards/api/index.d.cts +2 -1
  23. package/dist/application/models/guards/api/index.d.ts +2 -1
  24. package/dist/application/models/guards/api/index.js +3 -3
  25. package/dist/application/models/guards/utils.cjs +1 -1
  26. package/dist/application/models/guards/utils.d.cts +1 -1
  27. package/dist/application/models/guards/utils.d.ts +1 -1
  28. package/dist/application/models/guards/utils.js +1 -1
  29. package/dist/application/models/index.cjs +9 -9
  30. package/dist/application/models/index.d.cts +11 -10
  31. package/dist/application/models/index.d.ts +11 -10
  32. package/dist/application/models/index.js +8 -8
  33. package/dist/application/models/variantInfo/index.d.cts +1 -1
  34. package/dist/application/models/variantInfo/index.d.ts +1 -1
  35. package/dist/application/utils/index.cjs +15 -15
  36. package/dist/application/utils/index.d.cts +14 -13
  37. package/dist/application/utils/index.d.ts +14 -13
  38. package/dist/application/utils/index.js +15 -15
  39. package/dist/atoms/app/index.cjs +11 -11
  40. package/dist/atoms/app/index.d.cts +19 -18
  41. package/dist/atoms/app/index.d.ts +19 -18
  42. package/dist/atoms/app/index.js +11 -11
  43. package/dist/atoms/chat/index.cjs +16 -16
  44. package/dist/atoms/chat/index.d.cts +39 -38
  45. package/dist/atoms/chat/index.d.ts +39 -38
  46. package/dist/atoms/chat/index.js +16 -16
  47. package/dist/atoms/globalSearch/index.d.cts +5 -5
  48. package/dist/atoms/globalSearch/index.d.ts +6 -6
  49. package/dist/atoms/org/index.d.cts +30 -29
  50. package/dist/atoms/org/index.d.ts +30 -29
  51. package/dist/atoms/search/index.cjs +18 -18
  52. package/dist/atoms/search/index.d.cts +13 -12
  53. package/dist/atoms/search/index.d.ts +13 -12
  54. package/dist/atoms/search/index.js +18 -18
  55. package/dist/atoms/search/types.d.cts +4 -2
  56. package/dist/atoms/search/types.d.ts +4 -2
  57. package/dist/atoms/search/utils.d.ts +1 -1
  58. package/dist/{cdnContext-Cd0Kvt6g.cjs → cdnContext-CaDyQ_5p.cjs} +2 -2
  59. package/dist/{cdnContext-D8pHA9gh.js → cdnContext-CtrIlAqX.js} +2 -2
  60. package/dist/{chat-U1IgKNij.js → chat-BjhQCyW_.js} +8 -8
  61. package/dist/{chat-DwNALtox.cjs → chat-BkPax29G.cjs} +13 -7
  62. package/dist/{chat-EJbfGWRr.js → chat-ClvJ9xEj.js} +1 -1
  63. package/dist/{chat-CJ9D8n7g.cjs → chat-DCGriB7h.cjs} +1 -1
  64. package/dist/{chatElementDisplayLocation-DWmfNX_u.d.cts → chatElementDisplayLocation-B7vr33eG.d.cts} +1 -1
  65. package/dist/{chatElementDisplayLocation-DbmdwAff.d.ts → chatElementDisplayLocation-D4XF0UfI.d.ts} +1 -1
  66. package/dist/{chatSearch-Bb2SMr9X.js → chatSearch-BsYlFvpv.js} +4 -4
  67. package/dist/{chatSearch-DtE2cUQw.cjs → chatSearch-C3N3iIxu.cjs} +4 -4
  68. package/dist/{chatState-B3Dyrd9M.cjs → chatState-CJ52Ag_7.cjs} +3 -3
  69. package/dist/{chatState-BXBN-12W.js → chatState-CXA1vF16.js} +3 -3
  70. package/dist/{commerce-api-Dx02FCQ7.cjs → commerce-api-DA1QGGMK.cjs} +8 -7
  71. package/dist/{commerce-api-DXbnMNT8.js → commerce-api-rgj30eEp.js} +8 -7
  72. package/dist/{common-CuwWqIJ1.cjs → common-DQPvV_S_.cjs} +1 -1
  73. package/dist/{common-Df2bwzd2.js → common-c_4eX0qn.js} +1 -1
  74. package/dist/{components-QGCWJ26c.js → components-CDpaMUjK.js} +1 -1
  75. package/dist/{components-BCfFLf9X.cjs → components-DKwVHIjq.cjs} +1 -1
  76. package/dist/config/index.cjs +4 -4
  77. package/dist/config/index.d.cts +4 -4
  78. package/dist/config/index.d.ts +4 -4
  79. package/dist/config/index.js +4 -4
  80. package/dist/config/locators/components/chat/index.cjs +1 -1
  81. package/dist/config/locators/components/chat/index.d.cts +1 -1
  82. package/dist/config/locators/components/chat/index.d.ts +1 -1
  83. package/dist/config/locators/components/chat/index.js +1 -1
  84. package/dist/config/locators/components/common/index.cjs +1 -1
  85. package/dist/config/locators/components/common/index.d.cts +1 -1
  86. package/dist/config/locators/components/common/index.d.ts +1 -1
  87. package/dist/config/locators/components/common/index.js +1 -1
  88. package/dist/config/locators/components/index.cjs +1 -1
  89. package/dist/config/locators/components/index.d.cts +1 -1
  90. package/dist/config/locators/components/index.d.ts +1 -1
  91. package/dist/config/locators/components/index.js +1 -1
  92. package/dist/config/locators/index.cjs +4 -4
  93. package/dist/config/locators/index.d.cts +4 -4
  94. package/dist/config/locators/index.d.ts +4 -4
  95. package/dist/config/locators/index.js +4 -4
  96. package/dist/contexts/amplitudeContext/index.cjs +15 -14
  97. package/dist/contexts/amplitudeContext/index.d.cts +1 -1
  98. package/dist/contexts/amplitudeContext/index.d.ts +1 -1
  99. package/dist/contexts/amplitudeContext/index.js +15 -14
  100. package/dist/contexts/cdnContext/index.cjs +4 -4
  101. package/dist/contexts/cdnContext/index.js +4 -4
  102. package/dist/contexts/chatContext/index.cjs +23 -23
  103. package/dist/contexts/chatContext/index.d.cts +4 -4
  104. package/dist/contexts/chatContext/index.d.ts +4 -4
  105. package/dist/contexts/chatContext/index.js +23 -23
  106. package/dist/contexts/enviveConfigContext/index.cjs +4 -4
  107. package/dist/contexts/enviveConfigContext/index.d.cts +3 -3
  108. package/dist/contexts/enviveConfigContext/index.d.ts +3 -3
  109. package/dist/contexts/enviveConfigContext/index.js +4 -4
  110. package/dist/contexts/enviveCssContext/index.cjs +15 -15
  111. package/dist/contexts/enviveCssContext/index.js +15 -15
  112. package/dist/contexts/featureFlagContext/index.cjs +6 -6
  113. package/dist/contexts/featureFlagContext/index.d.cts +3 -3
  114. package/dist/contexts/featureFlagContext/index.d.ts +3 -3
  115. package/dist/contexts/featureFlagContext/index.js +6 -6
  116. package/dist/contexts/featureFlagServiceContext/index.cjs +3 -3
  117. package/dist/contexts/featureFlagServiceContext/index.d.cts +4 -4
  118. package/dist/contexts/featureFlagServiceContext/index.d.ts +4 -4
  119. package/dist/contexts/featureFlagServiceContext/index.js +3 -3
  120. package/dist/contexts/graphqlContext/index.cjs +11 -11
  121. package/dist/contexts/graphqlContext/index.d.cts +13 -12
  122. package/dist/contexts/graphqlContext/index.d.ts +13 -12
  123. package/dist/contexts/graphqlContext/index.js +11 -11
  124. package/dist/contexts/localStorageContext/index.cjs +2 -2
  125. package/dist/contexts/localStorageContext/index.js +2 -2
  126. package/dist/contexts/newOrgConfigContext/index.cjs +14 -14
  127. package/dist/contexts/newOrgConfigContext/index.d.cts +14 -13
  128. package/dist/contexts/newOrgConfigContext/index.d.ts +14 -13
  129. package/dist/contexts/newOrgConfigContext/index.js +14 -14
  130. package/dist/contexts/searchContext/index.cjs +17 -17
  131. package/dist/contexts/searchContext/index.d.cts +1 -1
  132. package/dist/contexts/searchContext/index.d.ts +1 -1
  133. package/dist/contexts/searchContext/index.js +17 -17
  134. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  135. package/dist/contexts/sessionStorageContext/index.js +2 -2
  136. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  137. package/dist/contexts/shopifyUrlContext/index.d.cts +3 -3
  138. package/dist/contexts/shopifyUrlContext/index.d.ts +3 -3
  139. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  140. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  141. package/dist/contexts/systemSettingsContext/index.d.cts +16 -15
  142. package/dist/contexts/systemSettingsContext/index.d.ts +16 -15
  143. package/dist/contexts/systemSettingsContext/index.js +4 -4
  144. package/dist/contexts/types.cjs +1 -1
  145. package/dist/contexts/types.d.cts +3 -3
  146. package/dist/contexts/types.d.ts +3 -3
  147. package/dist/contexts/types.js +1 -1
  148. package/dist/contexts/userIdentityContext/index.cjs +18 -18
  149. package/dist/contexts/userIdentityContext/index.d.cts +1 -1
  150. package/dist/contexts/userIdentityContext/index.d.ts +1 -1
  151. package/dist/contexts/userIdentityContext/index.js +18 -18
  152. package/dist/{enviveConfig-BlIkxiAF.js → enviveConfig-DZBohDpc.js} +3 -3
  153. package/dist/{enviveConfig-B42OJ8bK.cjs → enviveConfig-Dv9-esGV.cjs} +3 -3
  154. package/dist/{enviveConfigContext-Y1ahEAMe.cjs → enviveConfigContext-D2OELZDR.cjs} +3 -3
  155. package/dist/{enviveConfigContext-1_EivtCa.js → enviveConfigContext-DrDjCems.js} +3 -3
  156. package/dist/{featureFlagServiceContext-D3Ge8GH5.cjs → featureFlagServiceContext-CJyYItqu.cjs} +3 -3
  157. package/dist/{featureFlagServiceContext-C5U0bshi.d.ts → featureFlagServiceContext-CpxlOkI9.d.ts} +2 -2
  158. package/dist/{featureFlagServiceContext-CAPrb4e_.js → featureFlagServiceContext-FBM6DdMJ.js} +3 -3
  159. package/dist/{featureFlagServiceContext-CiKWV306.d.cts → featureFlagServiceContext-p5UBwPM3.d.cts} +2 -2
  160. package/dist/{featureGates-D4Me_IZH.js → featureGates-KEwAL8p_.js} +1 -1
  161. package/dist/{featureGates-Bt_Y3kZ7.cjs → featureGates-qU_ulhpC.cjs} +1 -1
  162. package/dist/{frontendConfig-BiD1-j48.d.ts → frontendConfig-Cawh5iqv.d.ts} +6 -3
  163. package/dist/{frontendConfig-tVg0hsWZ.d.cts → frontendConfig-iZipB5FG.d.cts} +6 -3
  164. package/dist/graphql-CkxgqsXP.js +48 -0
  165. package/dist/graphql-i3dtpVTl.cjs +71 -0
  166. package/dist/{graphqlContext-Bf3E-V2T.d.cts → graphqlContext-BeyKU1Dr.d.cts} +2 -2
  167. package/dist/{graphqlContext-CDeKzb46.d.ts → graphqlContext-CXQl0hq2.d.ts} +2 -2
  168. package/dist/{graphqlContext-CpwAvnro.cjs → graphqlContext-DP8T3-Kd.cjs} +6 -6
  169. package/dist/{graphqlContext-dyWNSWNv.js → graphqlContext-czH0kIZg.js} +5 -5
  170. package/dist/hooks/AmplitudeOperations/index.cjs +15 -15
  171. package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
  172. package/dist/hooks/AmplitudeOperations/index.d.ts +1 -1
  173. package/dist/hooks/AmplitudeOperations/index.js +15 -15
  174. package/dist/hooks/AppDetails/index.cjs +14 -14
  175. package/dist/hooks/AppDetails/index.d.cts +12 -11
  176. package/dist/hooks/AppDetails/index.d.ts +12 -11
  177. package/dist/hooks/AppDetails/index.js +14 -14
  178. package/dist/hooks/CdnOperations/index.cjs +4 -4
  179. package/dist/hooks/CdnOperations/index.js +4 -4
  180. package/dist/hooks/ChatToggle/index.cjs +16 -16
  181. package/dist/hooks/ChatToggle/index.d.cts +1 -1
  182. package/dist/hooks/ChatToggle/index.d.ts +1 -1
  183. package/dist/hooks/ChatToggle/index.js +16 -16
  184. package/dist/hooks/ChatToggleAnalytics/index.cjs +16 -16
  185. package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
  186. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  187. package/dist/hooks/ChatToggleAnalytics/index.js +16 -16
  188. package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
  189. package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
  190. package/dist/hooks/Debounce/index.cjs +20 -2
  191. package/dist/hooks/Debounce/index.js +18 -2
  192. package/dist/hooks/ElementObserver/index.d.cts +1 -1
  193. package/dist/hooks/ElementObserver/index.d.ts +1 -1
  194. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  195. package/dist/hooks/GraphQLConfig/index.cjs +12 -12
  196. package/dist/hooks/GraphQLConfig/index.d.cts +13 -12
  197. package/dist/hooks/GraphQLConfig/index.d.ts +13 -12
  198. package/dist/hooks/GraphQLConfig/index.js +12 -12
  199. package/dist/hooks/IdentifyUser/index.cjs +18 -18
  200. package/dist/hooks/IdentifyUser/index.js +18 -18
  201. package/dist/hooks/ImageResolver/index.cjs +10 -10
  202. package/dist/hooks/ImageResolver/index.js +10 -10
  203. package/dist/hooks/LocalStorageOperations/index.cjs +2 -2
  204. package/dist/hooks/LocalStorageOperations/index.js +2 -2
  205. package/dist/hooks/MessageFilter/index.cjs +8 -8
  206. package/dist/hooks/MessageFilter/index.d.cts +12 -11
  207. package/dist/hooks/MessageFilter/index.d.ts +12 -11
  208. package/dist/hooks/MessageFilter/index.js +8 -8
  209. package/dist/hooks/NewOrgConfig/index.cjs +15 -15
  210. package/dist/hooks/NewOrgConfig/index.d.cts +14 -13
  211. package/dist/hooks/NewOrgConfig/index.d.ts +14 -13
  212. package/dist/hooks/NewOrgConfig/index.js +15 -15
  213. package/dist/hooks/Search/index.cjs +1459 -150
  214. package/dist/hooks/Search/index.d.cts +21 -17
  215. package/dist/hooks/Search/index.d.ts +21 -17
  216. package/dist/hooks/Search/index.js +1460 -151
  217. package/dist/hooks/SearchOperations/index.cjs +17 -17
  218. package/dist/hooks/SearchOperations/index.d.cts +1 -1
  219. package/dist/hooks/SearchOperations/index.d.ts +1 -1
  220. package/dist/hooks/SearchOperations/index.js +17 -17
  221. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  222. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  223. package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
  224. package/dist/hooks/ShopifyUrlOperations/index.d.cts +5 -5
  225. package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -5
  226. package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
  227. package/dist/hooks/SystemSettingsContext/index.cjs +5 -5
  228. package/dist/hooks/SystemSettingsContext/index.d.cts +14 -13
  229. package/dist/hooks/SystemSettingsContext/index.d.ts +14 -13
  230. package/dist/hooks/SystemSettingsContext/index.js +5 -5
  231. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +15 -15
  232. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +2 -2
  233. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -2
  234. package/dist/hooks/TrackComponentVisibleEvent/index.js +15 -15
  235. package/dist/hooks/UpdateAnalyticsProps/index.cjs +14 -14
  236. package/dist/hooks/UpdateAnalyticsProps/index.js +14 -14
  237. package/dist/hooks/utils.d.cts +12 -11
  238. package/dist/hooks/utils.d.ts +12 -11
  239. package/dist/{index-B6xpW8RG.d.ts → index--9_c4tze.d.ts} +1 -1
  240. package/dist/index-BEpDGqnz.d.cts +41 -0
  241. package/dist/{index-D31m6bPU.d.ts → index-BKvFVPUX.d.ts} +1 -1
  242. package/dist/{index-VwfWqyR_.d.ts → index-BNHIIgYk.d.ts} +1 -1
  243. package/dist/{index-Bq39XSmY.d.cts → index-BSd8767K.d.cts} +34 -34
  244. package/dist/index-BUDrAxnl.d.ts +673 -0
  245. package/dist/{index-DzbkQtaK.d.cts → index-CCboEuTO.d.cts} +1 -1
  246. package/dist/{index-FQjyuD3D.d.cts → index-COXkY78t.d.cts} +1 -1
  247. package/dist/{index-wFHfdr6p.d.ts → index-CUO68KG3.d.ts} +34 -34
  248. package/dist/{index--uHjE7L8.d.ts → index-D7htGSQC.d.ts} +1 -1
  249. package/dist/index-DM_5fh8c.d.ts +101 -0
  250. package/dist/index-DU7uw0ba.d.cts +101 -0
  251. package/dist/{index-Da1s8h5C.d.cts → index-DZtnHhlr.d.cts} +1 -1
  252. package/dist/{index-DSRs6N6J.d.ts → index-Dtw-hJdt.d.ts} +1 -1
  253. package/dist/index-Dy3TTIOm.d.cts +673 -0
  254. package/dist/index-ErVcwUnR.d.ts +41 -0
  255. package/dist/{index-Cyq5HiC0.d.cts → index-OkKEOL6H.d.cts} +1 -1
  256. package/dist/{index-9NE86em3.d.cts → index-hAqp0oYb.d.cts} +1 -1
  257. package/dist/interceptors/index.d.cts +13 -12
  258. package/dist/interceptors/index.d.ts +13 -12
  259. package/dist/interceptors/types.d.cts +12 -11
  260. package/dist/interceptors/types.d.ts +12 -11
  261. package/dist/{localStorageContext-DAOJ4be4.js → localStorageContext-BPZ82q-G.js} +2 -2
  262. package/dist/{localStorageContext-C5giszHn.cjs → localStorageContext-NRP-CdmF.cjs} +2 -2
  263. package/dist/{locators-C2fWd-74.js → locators-BMQGmGLq.js} +1 -1
  264. package/dist/{locators-Cx3q6Z_h.cjs → locators-DxYdak1F.cjs} +1 -1
  265. package/dist/{logger-0D_8Ip2L.cjs → logger-TBIl4uIH.cjs} +1 -1
  266. package/dist/{logger-Co0IA3k5.js → logger-W3lqg-4b.js} +1 -1
  267. package/dist/models-CWOgrLCm.js +1284 -0
  268. package/dist/models-DqdLOi2I.cjs +1519 -0
  269. package/dist/{newOrgConfigContext-BMvcqPzD.cjs → newOrgConfigContext-Bet9CgKP.cjs} +4 -4
  270. package/dist/{newOrgConfigContext-6mlrvr1w.js → newOrgConfigContext-Bi_dBNe5.js} +4 -4
  271. package/dist/{newOrgConfigContext-DOdUxlOE.d.cts → newOrgConfigContext-CJI3tsVV.d.cts} +2 -2
  272. package/dist/{newOrgConfigContext-BVyJExeW.d.ts → newOrgConfigContext-I2qceBB4.d.ts} +2 -2
  273. package/dist/{nodeSelector-DYhDUi7v.d.ts → nodeSelector-B5NfnUHv.d.ts} +1 -1
  274. package/dist/{nodeSelector-B3bPtEjX.d.cts → nodeSelector-vKB44CDB.d.cts} +1 -1
  275. package/dist/responseGenerics-D9bS-Dd6.d.ts +148 -0
  276. package/dist/{index-Cx9e-fRi.d.ts → responseGenerics-DWLV09cQ.d.cts} +4 -40
  277. package/dist/{search-y-ioX5Mz.d.cts → search-6RrxBXD6.d.cts} +1 -1
  278. package/dist/{search-D-UfTjB7.cjs → search-Csh2n66W.cjs} +2 -2
  279. package/dist/{search-yawhMv22.js → search-DkiqkogN.js} +2 -2
  280. package/dist/{search-B1OtJe8Z.d.ts → search-DrJiCT7d.d.ts} +1 -1
  281. package/dist/{search-filter-types-BxaNSLs_.d.cts → search-filter-types-BItKtezf.d.cts} +1 -1
  282. package/dist/{search-filter-types-OI9zH3E_.d.ts → search-filter-types-CGFhksO3.d.ts} +1 -1
  283. package/dist/{searchContext-CiqOqTJL.js → searchContext-BmgoAFMF.js} +6 -6
  284. package/dist/{searchContext-CFuwIIW-.cjs → searchContext-DksJfC1s.cjs} +6 -6
  285. package/dist/{sessionStorageContext-BmCW091C.cjs → sessionStorageContext-B6FsNKjj.cjs} +2 -2
  286. package/dist/{sessionStorageContext-CNxkqJi1.js → sessionStorageContext-CLYCm83p.js} +2 -2
  287. package/dist/{shopifyUrlContext-BXbI0PIG.js → shopifyUrlContext-C-PkSgNC.js} +2 -2
  288. package/dist/{shopifyUrlContext-aZMwCfbJ.cjs → shopifyUrlContext-ZOcARiMR.cjs} +2 -2
  289. package/dist/{spiffyWidgets-CvEJIuJx.d.ts → spiffyWidgets-CR6F7FRE.d.ts} +1 -1
  290. package/dist/{spiffyWidgets-BuS00VaQ.d.cts → spiffyWidgets-eNbU1gMc.d.cts} +1 -1
  291. package/dist/{systemSettingsContext-kz6yyiFF.js → systemSettingsContext-DF0jSq9m.js} +2 -2
  292. package/dist/{systemSettingsContext-SozpUezn.cjs → systemSettingsContext-dmE1v6w8.cjs} +2 -2
  293. package/dist/{test-types-DRhqHXw-.d.ts → test-types-BEml_bm3.d.ts} +1 -1
  294. package/dist/{test-types-ThQiO_cc.d.cts → test-types-Dsu8RJZu.d.cts} +1 -1
  295. package/dist/types/index.d.cts +2 -2
  296. package/dist/types/index.d.ts +2 -2
  297. package/dist/{types-r0Z6CwyF.d.ts → types-4LQ7LUCk.d.ts} +2 -2
  298. package/dist/types-BegmH0S1.d.ts +60 -0
  299. package/dist/types-BuvXXGxE.cjs +1 -1
  300. package/dist/types-CtUb63bt.js +76 -0
  301. package/dist/{types-zQGBI-Yo.d.cts → types-DFsSqmWx.d.cts} +2 -2
  302. package/dist/types-DWorwfS-.d.cts +60 -0
  303. package/dist/types-DXnG1tV0.js +1 -1
  304. package/dist/types-UUvB6h05.cjs +106 -0
  305. package/dist/types.d.cts +3 -3
  306. package/dist/types.d.ts +3 -3
  307. package/dist/{unsupportedProductExceptions-B4f9aLjr.cjs → unsupportedProductExceptions-DGENUnEA.cjs} +1 -1
  308. package/dist/{unsupportedProductExceptions-DlmraJm8.js → unsupportedProductExceptions-uQuuelOs.js} +1 -1
  309. package/dist/{urlsParser-DhcEZLc_.cjs → urlsParser-COzMdJaX.cjs} +1 -1
  310. package/dist/{urlsParser-DLCzibqU.js → urlsParser-DxjoLj98.js} +1 -1
  311. package/dist/{useAmplitudeOperations-D0nvIYlt.cjs → useAmplitudeOperations-Bo6YNbTV.cjs} +2 -2
  312. package/dist/{useAmplitudeOperations-Dhks3PgF.js → useAmplitudeOperations-zIRSqmMW.js} +2 -2
  313. package/dist/{useAppDetails-qyaQIbWE.js → useAppDetails-B584gkCs.js} +4 -4
  314. package/dist/{useAppDetails-B9sGmpJ3.cjs → useAppDetails-DczgqeLG.cjs} +4 -4
  315. package/dist/{useGraphQLConfig-BccQUaeW.js → useGraphQLConfig-7UxACM4n.js} +2 -2
  316. package/dist/{useGraphQLConfig-CgKEfVYc.cjs → useGraphQLConfig-D_rF2Sun.cjs} +2 -2
  317. package/dist/{userIdentityContext-Cb6lLv6t.cjs → userIdentityContext-BqbNu7xu.cjs} +5 -5
  318. package/dist/{userIdentityContext-O_DHHPTN.js → userIdentityContext-BxFH9FNQ.js} +5 -5
  319. package/dist/{userIdentityContext-BKLedN4R.d.ts → userIdentityContext-C6kApbuk.d.ts} +1 -1
  320. package/dist/{userIdentityContext-D2oFVFzo.d.cts → userIdentityContext-kU1PIo8K.d.cts} +1 -1
  321. package/dist/{utils-BhyZiDrE.d.ts → utils-BRkGP1eb.d.ts} +1 -1
  322. package/dist/{utils-DFPt3FSw.js → utils-C1ErYSoW.js} +4 -4
  323. package/dist/{utils-B7PAzB_M.d.cts → utils-CBD4g2Nc.d.cts} +4 -4
  324. package/dist/{utils-C6imnLBo.cjs → utils-CDw74BCO.cjs} +1 -1
  325. package/dist/{utils-B3x_9JTY.d.cts → utils-DCrwX6FT.d.cts} +1 -1
  326. package/dist/{utils-C4ci_t0-.js → utils-DIvMgPe8.js} +1 -1
  327. package/dist/{utils-B1v0iXs3.d.ts → utils-QKFAbPT6.d.ts} +4 -4
  328. package/dist/{utils-Cazq8Q3q.cjs → utils-mqfncrhI.cjs} +4 -4
  329. package/package.json +5 -1
  330. package/src/application/commerce-api.ts +2 -0
  331. package/src/application/models/graphql/index.ts +1 -0
  332. package/src/atoms/search/productRetrievalAPI.ts +70 -0
  333. package/src/atoms/search/productRetrievalAdapter.ts +25 -0
  334. package/src/atoms/search/types.ts +13 -0
  335. package/src/contexts/graphqlContext/__tests__/graphqlContext.test.tsx +790 -0
  336. package/src/contexts/localStorageContext/__tests__/localStorageContext.test.tsx +775 -0
  337. package/src/contexts/newOrgConfigContext/__tests__/newOrgConfigContext.test.tsx +495 -0
  338. package/src/contexts/searchContext/__tests__/searchContext.test.tsx +806 -0
  339. package/src/contexts/systemSettingsContext/__tests__/systemSettingsContext.test.tsx +506 -0
  340. package/src/contexts/types.ts +3 -0
  341. package/src/hooks/Search/useRecommendedProducts.ts +48 -0
  342. package/src/hooks/Search/useSearch.tsx +89 -182
  343. package/src/hooks/Search/useSearchInput.ts +263 -0
  344. package/src/types/FilterAttribute.ts +35 -0
  345. package/dist/graphql-OkhsP4ir.js +0 -36
  346. package/dist/graphql-l4dQrsA6.cjs +0 -53
  347. package/dist/index-Bmub8e38.d.cts +0 -98
  348. package/dist/index-CG3P8xE1.d.cts +0 -676
  349. package/dist/index-CiWEYzXl.d.cts +0 -184
  350. package/dist/index-D2VaMPA3.d.ts +0 -98
  351. package/dist/index-fUsw_Mea.d.ts +0 -676
  352. package/dist/models-CkJ-wg9Q.cjs +0 -1537
  353. package/dist/models-UHOY0ak5.js +0 -1296
  354. package/dist/types-BwNrLPSZ.cjs +0 -106
  355. package/dist/types-CKMMb_gX.d.cts +0 -51
  356. package/dist/types-D3uOF0Oy.js +0 -76
  357. package/dist/types-DZPuBnHe.d.ts +0 -51
  358. package/dist/useDebounce-BZDtUAQ8.cjs +0 -26
  359. package/dist/useDebounce-ueblXZI-.js +0 -19
  360. /package/dist/{index-RcVcRKH7.d.cts → index-A0HvA68Y.d.cts} +0 -0
  361. /package/dist/{index-mHc9_XC3.d.ts → index-DNVvRcKu.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
- import { UserEvent } from "./index-CG3P8xE1.cjs";
2
- import { SearchResult } from "./search-y-ioX5Mz.cjs";
3
- import { VariantInfo } from "./index-Cyq5HiC0.cjs";
1
+ import { UserEvent } from "./index-Dy3TTIOm.cjs";
2
+ import { SearchResult } from "./search-6RrxBXD6.cjs";
3
+ import { VariantInfo } from "./index-OkKEOL6H.cjs";
4
4
 
5
5
  //#region src/hooks/utils.d.ts
6
6
  declare const isElementPartiallyVisible: (el?: HTMLDivElement | null) => boolean;
@@ -19,4 +19,4 @@ declare enum SearchResultsState {
19
19
  declare const getSearchResultsState: (isLoadingSearch: boolean, searchData: SearchResult | null) => SearchResultsState;
20
20
  //#endregion
21
21
  export { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQjdQQXpCX00uZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2hvb2tzL3V0aWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaFwiO1xuaW1wb3J0IHsgVXNlckV2ZW50LCBWYXJpYW50SW5mbyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0VsZW1lbnRQYXJ0aWFsbHlWaXNpYmxlOiAoZWw/OiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVBcHBMb2FkZWRFdmVudDogKCkgPT4gVXNlckV2ZW50O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY3JlYXRlVmlzaXRVc2VyRXZlbnQ6ICh7IHZhcmlhbnRJbmZvLCB9OiB7XG4gICAgdmFyaWFudEluZm86IFZhcmlhbnRJbmZvO1xufSkgPT4gVXNlckV2ZW50IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNXaXRoaW5CdXNpbmVzc0hvdXJzOiAoc3RhcnRUaW1lOiBzdHJpbmcsIGVuZFRpbWU6IHN0cmluZywgdGltZVpvbmU6IHN0cmluZykgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGVudW0gU2VhcmNoUmVzdWx0c1N0YXRlIHtcbiAgICBMb2FkaW5nID0gMCxcbiAgICBSZXN1bHRzID0gMSxcbiAgICBOb1Jlc3VsdHMgPSAyXG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBnZXRTZWFyY2hSZXN1bHRzU3RhdGU6IChpc0xvYWRpbmdTZWFyY2g6IGJvb2xlYW4sIHNlYXJjaERhdGE6IFNlYXJjaFJlc3VsdCB8IG51bGwpID0+IFNlYXJjaFJlc3VsdHNTdGF0ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxJQUFXLDRCQUE0QixDQUFDLFdBQVcsZUFBZTtBQUNsRSxJQUFXLHVCQUF1QixDQUFDLFdBQVcsVUFBVTtBQUN4RCxJQUFXLHVCQUF1QjtDQUFDO09BQVc7T0FBZ0I7T0FBQTtDQUFBO0FBQzlELElBQVcsd0JBQWlCLENBQUEsSUFBQTtBQUM1QixJQUFXLHFCQUFnQixDQUFBLElBQUE7QUFDM0IsSUFBVyx3QkFBd0I7Q0FBQztPQUFXO09BQW9CO0NBQW1CIn0=
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ0JENGcyTmMuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2hvb2tzL3V0aWxzLmQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VhcmNoUmVzdWx0IH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3NlYXJjaFwiO1xuaW1wb3J0IHsgVXNlckV2ZW50LCBWYXJpYW50SW5mbyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc0VsZW1lbnRQYXJ0aWFsbHlWaXNpYmxlOiAoZWw/OiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IGJvb2xlYW47XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVBcHBMb2FkZWRFdmVudDogKCkgPT4gVXNlckV2ZW50O1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgY3JlYXRlVmlzaXRVc2VyRXZlbnQ6ICh7IHZhcmlhbnRJbmZvLCB9OiB7XG4gICAgdmFyaWFudEluZm86IFZhcmlhbnRJbmZvO1xufSkgPT4gVXNlckV2ZW50IHwgdW5kZWZpbmVkO1xuZXhwb3J0IGRlY2xhcmUgY29uc3QgaXNXaXRoaW5CdXNpbmVzc0hvdXJzOiAoc3RhcnRUaW1lOiBzdHJpbmcsIGVuZFRpbWU6IHN0cmluZywgdGltZVpvbmU6IHN0cmluZykgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGVudW0gU2VhcmNoUmVzdWx0c1N0YXRlIHtcbiAgICBMb2FkaW5nID0gMCxcbiAgICBSZXN1bHRzID0gMSxcbiAgICBOb1Jlc3VsdHMgPSAyXG59XG5leHBvcnQgZGVjbGFyZSBjb25zdCBnZXRTZWFyY2hSZXN1bHRzU3RhdGU6IChpc0xvYWRpbmdTZWFyY2g6IGJvb2xlYW4sIHNlYXJjaERhdGE6IFNlYXJjaFJlc3VsdCB8IG51bGwpID0+IFNlYXJjaFJlc3VsdHNTdGF0ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxJQUFXLDRCQUE0QixDQUFDLFNBQVMsZUFBZTtBQUNoRSxJQUFXLHVCQUF1QixDQUFDLFNBQVMsVUFBVTtBQUN0RCxJQUFXLHVCQUF1QjtDQUFDO09BQVM7T0FBa0I7T0FBQTtDQUFBO0FBQzlELElBQVcsd0JBQWlCLENBQUEsRUFBQTtBQUM1QixJQUFXLHFCQUFnQixDQUFBLEVBQUE7QUFDM0IsSUFBVyx3QkFBd0I7Q0FBQztPQUFTO09BQW9CO0NBQW1CIn0=
@@ -30,4 +30,4 @@ Object.defineProperty(exports, 'hasPropertyOfType', {
30
30
  return hasPropertyOfType;
31
31
  }
32
32
  });
33
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQzZpbW5MQm8uY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLE1BQWEscUJBQ1gsS0FDQSxNQUNBLE1BQ0EsYUFBc0IsVUFDVDtBQUNiLEtBQUk7QUFDRixNQUFJLE9BQU8sUUFBUSxPQUFPLFFBQVEsU0FDaEMsUUFBTztBQUlULE1BQUksRUFBRSxRQUFRLEtBQ1osUUFBTztFQUdULE1BQU0sUUFBUyxJQUFVO0FBR3pCLE1BQUksY0FBYyxTQUFTLEtBQ3pCLFFBQU87QUFHVCxNQUFJLFNBQVMsUUFDWCxRQUFPLE1BQU0sUUFBUSxNQUFNO0FBRzdCLFNBQU8sT0FBTyxVQUFVO1VBQ2pCLEtBQUs7QUFFWixTQUFPIn0=
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ0R3NzRCQ08uY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLE1BQWEscUJBQ1gsS0FDQSxNQUNBLE1BQ0EsYUFBc0IsVUFDVDtBQUNiLEtBQUk7QUFDRixNQUFJLE9BQU8sUUFBUSxPQUFPLFFBQVEsU0FDaEMsUUFBTztBQUlULE1BQUksRUFBRSxRQUFRLEtBQ1osUUFBTztFQUdULE1BQU0sUUFBUyxJQUFVO0FBR3pCLE1BQUksY0FBYyxTQUFTLEtBQ3pCLFFBQU87QUFHVCxNQUFJLFNBQVMsUUFDWCxRQUFPLE1BQU0sUUFBUSxNQUFNO0FBRzdCLFNBQU8sT0FBTyxVQUFVO1VBQ2pCLEtBQUs7QUFFWixTQUFPIn0=
@@ -12,4 +12,4 @@
12
12
  declare const hasPropertyOfType: <T extends object>(obj: unknown, prop: keyof T, type: "string" | "number" | "boolean" | "object" | "array", isOptional?: boolean) => obj is T;
13
13
  //#endregion
14
14
  export { hasPropertyOfType };
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQjN4XzlKVFkuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkgb2YgYSBzcGVjaWZpYyB0eXBlXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgdG8gY2hlY2tcbiAqIEBwYXJhbSB0eXBlIC0gVGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gaXNPcHRpb25hbCAtIFdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIG9wdGlvbmFsIChkZWZhdWx0cyB0byBmYWxzZSlcbiAqXG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5IG9mIHRoZSBzcGVjaWZpZWQgdHlwZVxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZTogPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogdW5rbm93biwgcHJvcDoga2V5b2YgVCwgdHlwZTogXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwib2JqZWN0XCIgfCBcImFycmF5XCIsIGlzT3B0aW9uYWw/OiBib29sZWFuKSA9PiBvYmogaXMgVDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLElBQUUsb0JBQUE7Q0FBQTtPQUFBO09BQUE7Q0FBQSJ9
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtRENyd1g2RlQuZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaGFzIGEgcHJvcGVydHkgb2YgYSBzcGVjaWZpYyB0eXBlXG4gKlxuICogQHBhcmFtIG9iaiAtIFRoZSBvYmplY3QgdG8gY2hlY2tcbiAqIEBwYXJhbSBwcm9wIC0gVGhlIHByb3BlcnR5IG5hbWUgdG8gY2hlY2tcbiAqIEBwYXJhbSB0eXBlIC0gVGhlIGV4cGVjdGVkIHR5cGUgb2YgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0gaXNPcHRpb25hbCAtIFdoZXRoZXIgdGhlIHByb3BlcnR5IGlzIG9wdGlvbmFsIChkZWZhdWx0cyB0byBmYWxzZSlcbiAqXG4gKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIG9iamVjdCBoYXMgdGhlIHByb3BlcnR5IG9mIHRoZSBzcGVjaWZpZWQgdHlwZVxuICovXG5leHBvcnQgZGVjbGFyZSBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZTogPFQgZXh0ZW5kcyBvYmplY3Q+KG9iajogdW5rbm93biwgcHJvcDoga2V5b2YgVCwgdHlwZTogXCJzdHJpbmdcIiB8IFwibnVtYmVyXCIgfCBcImJvb2xlYW5cIiB8IFwib2JqZWN0XCIgfCBcImFycmF5XCIsIGlzT3B0aW9uYWw/OiBib29sZWFuKSA9PiBvYmogaXMgVDtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBLElBQUUsb0JBQUE7Q0FBQTtPQUFBO09BQUE7Q0FBQSJ9
@@ -24,4 +24,4 @@ const hasPropertyOfType = (obj, prop, type, isOptional = false) => {
24
24
 
25
25
  //#endregion
26
26
  export { hasPropertyOfType };
27
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQzRjaV90MC0uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5IG9mIGEgc3BlY2lmaWMgdHlwZVxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGNoZWNrXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGlzT3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlID0gPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBvYmo6IHVua25vd24sXG4gIHByb3A6IGtleW9mIFQsXG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheScsXG4gIGlzT3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZSxcbik6IG9iaiBpcyBUID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCwgaXQncyB2YWxpZCBmb3IgYW4gb3B0aW9uYWwgcHJvcGVydHlcbiAgICBpZiAoIShwcm9wIGluIG9iaikpIHtcbiAgICAgIHJldHVybiBpc09wdGlvbmFsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gKG9iaiBhcyBUKVtwcm9wXTtcblxuICAgIC8vIEZvciBvcHRpb25hbCBwcm9wZXJ0aWVzLCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHZhbGlkXG4gICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSB0eXBlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhcyBpdCBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gbW9yZSBkZXRhaWwgYnkgdGhlIGNhbGxlclxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFVQSxNQUFhLHFCQUNYLEtBQ0EsTUFDQSxNQUNBLGFBQXNCLFVBQ1Q7QUFDYixLQUFJO0FBQ0YsTUFBSSxPQUFPLFFBQVEsT0FBTyxRQUFRLFNBQ2hDLFFBQU87QUFJVCxNQUFJLEVBQUUsUUFBUSxLQUNaLFFBQU87RUFHVCxNQUFNLFFBQVMsSUFBVTtBQUd6QixNQUFJLGNBQWMsU0FBUyxLQUN6QixRQUFPO0FBR1QsTUFBSSxTQUFTLFFBQ1gsUUFBTyxNQUFNLFFBQVEsTUFBTTtBQUc3QixTQUFPLE9BQU8sVUFBVTtVQUNqQixLQUFLO0FBRVosU0FBTyJ9
27
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtREl2TWdQZTguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvdXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5IG9mIGEgc3BlY2lmaWMgdHlwZVxuICpcbiAqIEBwYXJhbSBvYmogLSBUaGUgb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0gcHJvcCAtIFRoZSBwcm9wZXJ0eSBuYW1lIHRvIGNoZWNrXG4gKiBAcGFyYW0gdHlwZSAtIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIGlzT3B0aW9uYWwgLSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBvcHRpb25hbCAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKlxuICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYmplY3QgaGFzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgc3BlY2lmaWVkIHR5cGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc1Byb3BlcnR5T2ZUeXBlID0gPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICBvYmo6IHVua25vd24sXG4gIHByb3A6IGtleW9mIFQsXG4gIHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnb2JqZWN0JyB8ICdhcnJheScsXG4gIGlzT3B0aW9uYWw6IGJvb2xlYW4gPSBmYWxzZSxcbik6IG9iaiBpcyBUID0+IHtcbiAgdHJ5IHtcbiAgICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBJZiBwcm9wZXJ0eSBpcyBub3QgcHJlc2VudCwgaXQncyB2YWxpZCBmb3IgYW4gb3B0aW9uYWwgcHJvcGVydHlcbiAgICBpZiAoIShwcm9wIGluIG9iaikpIHtcbiAgICAgIHJldHVybiBpc09wdGlvbmFsO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gKG9iaiBhcyBUKVtwcm9wXTtcblxuICAgIC8vIEZvciBvcHRpb25hbCBwcm9wZXJ0aWVzLCBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZXMgYXJlIHZhbGlkXG4gICAgaWYgKGlzT3B0aW9uYWwgJiYgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdhcnJheScpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSB0eXBlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBzd2FsbG93IHRoZSBlcnJvciBhcyBpdCBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gbW9yZSBkZXRhaWwgYnkgdGhlIGNhbGxlclxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFVQSxNQUFhLHFCQUNYLEtBQ0EsTUFDQSxNQUNBLGFBQXNCLFVBQ1Q7QUFDYixLQUFJO0FBQ0YsTUFBSSxPQUFPLFFBQVEsT0FBTyxRQUFRLFNBQ2hDLFFBQU87QUFJVCxNQUFJLEVBQUUsUUFBUSxLQUNaLFFBQU87RUFHVCxNQUFNLFFBQVMsSUFBVTtBQUd6QixNQUFJLGNBQWMsU0FBUyxLQUN6QixRQUFPO0FBR1QsTUFBSSxTQUFTLFFBQ1gsUUFBTyxNQUFNLFFBQVEsTUFBTTtBQUc3QixTQUFPLE9BQU8sVUFBVTtVQUNqQixLQUFLO0FBRVosU0FBTyJ9
@@ -1,6 +1,6 @@
1
- import { UserEvent } from "./index-fUsw_Mea.js";
2
- import { SearchResult } from "./search-B1OtJe8Z.js";
3
- import { VariantInfo } from "./index--uHjE7L8.js";
1
+ import { UserEvent } from "./index-BUDrAxnl.js";
2
+ import { SearchResult } from "./search-DrJiCT7d.js";
3
+ import { VariantInfo } from "./index-D7htGSQC.js";
4
4
 
5
5
  //#region src/hooks/utils.d.ts
6
6
  declare const isElementPartiallyVisible: (el?: HTMLDivElement | null) => boolean;
@@ -19,4 +19,4 @@ declare enum SearchResultsState {
19
19
  declare const getSearchResultsState: (isLoadingSearch: boolean, searchData: SearchResult | null) => SearchResultsState;
20
20
  //#endregion
21
21
  export { SearchResultsState, createAppLoadedEvent, createVisitUserEvent, getSearchResultsState, isElementPartiallyVisible, isWithinBusinessHours };
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQjF2MGlYczMuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvaG9va3MvdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoXCI7XG5pbXBvcnQgeyBVc2VyRXZlbnQsIFZhcmlhbnRJbmZvIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzRWxlbWVudFBhcnRpYWxseVZpc2libGU6IChlbD86IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZUFwcExvYWRlZEV2ZW50OiAoKSA9PiBVc2VyRXZlbnQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVWaXNpdFVzZXJFdmVudDogKHsgdmFyaWFudEluZm8sIH06IHtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59KSA9PiBVc2VyRXZlbnQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnM6IChzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICAgIExvYWRpbmcgPSAwLFxuICAgIFJlc3VsdHMgPSAxLFxuICAgIE5vUmVzdWx0cyA9IDJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldFNlYXJjaFJlc3VsdHNTdGF0ZTogKGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbiwgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCkgPT4gU2VhcmNoUmVzdWx0c1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQVcsNEJBQTRCLENBQUMsV0FBVyxlQUFlO0FBQ2xFLElBQVcsdUJBQXVCLENBQUMsV0FBVyxVQUFVO0FBQ3hELElBQVcsdUJBQXVCO0NBQUM7T0FBVztPQUFnQjtPQUFBO0NBQUE7QUFDOUQsSUFBVyx3QkFBaUIsQ0FBQSxJQUFBO0FBQzVCLElBQVcscUJBQWdCLENBQUEsSUFBQTtBQUMzQixJQUFXLHdCQUF3QjtDQUFDO09BQVc7T0FBb0I7Q0FBbUIifQ==
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtUUtGQWJQVDYuZC50cyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvaG9va3MvdXRpbHMuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWFyY2hSZXN1bHQgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvc2VhcmNoXCI7XG5pbXBvcnQgeyBVc2VyRXZlbnQsIFZhcmlhbnRJbmZvIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGlzRWxlbWVudFBhcnRpYWxseVZpc2libGU6IChlbD86IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4gYm9vbGVhbjtcbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGNyZWF0ZUFwcExvYWRlZEV2ZW50OiAoKSA9PiBVc2VyRXZlbnQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBjcmVhdGVWaXNpdFVzZXJFdmVudDogKHsgdmFyaWFudEluZm8sIH06IHtcbiAgICB2YXJpYW50SW5mbzogVmFyaWFudEluZm87XG59KSA9PiBVc2VyRXZlbnQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZGVjbGFyZSBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnM6IChzdGFydFRpbWU6IHN0cmluZywgZW5kVGltZTogc3RyaW5nLCB0aW1lWm9uZTogc3RyaW5nKSA9PiBib29sZWFuO1xuZXhwb3J0IGRlY2xhcmUgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICAgIExvYWRpbmcgPSAwLFxuICAgIFJlc3VsdHMgPSAxLFxuICAgIE5vUmVzdWx0cyA9IDJcbn1cbmV4cG9ydCBkZWNsYXJlIGNvbnN0IGdldFNlYXJjaFJlc3VsdHNTdGF0ZTogKGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbiwgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbCkgPT4gU2VhcmNoUmVzdWx0c1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQVcsNEJBQTRCLENBQUMsV0FBVyxlQUFlO0FBQ2xFLElBQVcsdUJBQXVCLENBQUMsV0FBVyxVQUFVO0FBQ3hELElBQVcsdUJBQXVCO0NBQUM7T0FBVztPQUFnQjtPQUFBO0NBQUE7QUFDOUQsSUFBVyx3QkFBaUIsQ0FBQSxJQUFBO0FBQzVCLElBQVcscUJBQWdCLENBQUEsSUFBQTtBQUMzQixJQUFXLHdCQUF3QjtDQUFDO09BQVc7T0FBb0I7Q0FBbUIifQ==
@@ -1,7 +1,7 @@
1
1
  const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const require_logger = require('./logger-0D_8Ip2L.cjs');
3
- const require_models = require('./models-CkJ-wg9Q.cjs');
4
- const require_amplitudeContext = require('./amplitudeContext-ZTQMvVTV.cjs');
2
+ const require_models = require('./models-DqdLOi2I.cjs');
3
+ const require_logger = require('./logger-TBIl4uIH.cjs');
4
+ const require_amplitudeContext = require('./amplitudeContext-C8tT74Mi.cjs');
5
5
  let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
6
6
  __spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
7
7
 
@@ -712,4 +712,4 @@ Object.defineProperty(exports, 'validateEmail', {
712
712
  return validateEmail;
713
713
  }
714
714
  });
715
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ2F6cThRM3EuY2pzIiwibmFtZXMiOlsiZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iLCJpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQiLCJpc0dBNEVjb21tZXJjZUV2ZW50IiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSIsImlzQmFzZUVjb21tZXJjZUV2ZW50IiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJQTFBBdHRyaWJ1dGVDYXRlZ29yeSIsIk1lc3NhZ2VUeXBlIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiUmVzcG9uc2VDYXRlZ29yeSIsIk1lc3NhZ2VUeXBlIiwiTWVzc2FnZVJvbGUiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIk1lc3NhZ2VSb2xlIiwiTWVzc2FnZVR5cGUiLCJub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCIsIm91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvYW5hbHl0aWNzVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZUNvbnRleHRUb0FwaUNvbnRleHQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2RpdmlkZUFycmF5LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2ltYWdlRmlsdGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lcmNoYW50VXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21RdWVyeUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25vZGVTZWxlY3Rvci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9vdmVycmlkZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3RyaW5nVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQsXG4gIGlzR0E0RWNvbW1lcmNlRXZlbnQsXG4gIGlzQmFzZUVjb21tZXJjZUV2ZW50LFxuICBCYXNlRWNvbW1lcmNlRXZlbnQsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcInNyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0L2FtcGxpdHVkZUNvbnRleHRcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBkYXRhTGF5ZXI6IGFueVtdO1xuICB9XG59XG5cbmNvbnN0IE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMgPSBbXCJhZGR0b2NhcnRcIiwgXCJhZGRlZHRvY2FydFwiXTtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfSU5URVJWQUxfTVMgPSA1MDA7XG5jb25zdCBDSEVDS19EQVRBX0xBWUVSX01BWF9BVFRFTVBUUyA9IDEwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIEdvb2dsZSBBbmFseXRpY3MgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBuYW1lIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGFuIGFkZF90b19jYXJ0IGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmNvbnN0IGlzQWRkVG9DYXJ0RXZlbnQgPSAoZXZlbnQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkRXZlbnQgPSBldmVudC5yZXBsYWNlKC9bLV9dL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBOT1JNQUxJWkVEX0FERF9UT19DQVJUX0VWRU5UX05BTUVTLnNvbWUoKG5hbWUpID0+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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
715
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtbXFmbmNyaEkuY2pzIiwibmFtZXMiOlsiZXZlbnRQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iLCJpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQiLCJpc0dBNEVjb21tZXJjZUV2ZW50IiwiU3BpZmZ5TWV0cmljc0V2ZW50TmFtZSIsImlzQmFzZUVjb21tZXJjZUV2ZW50IiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJQTFBBdHRyaWJ1dGVDYXRlZ29yeSIsIk1lc3NhZ2VUeXBlIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiVXNlckV2ZW50Q2F0ZWdvcnkiLCJNZXNzYWdlUm9sZSIsIk1lc3NhZ2VUeXBlIiwiUmVzcG9uc2VDYXRlZ29yeSIsIk1lc3NhZ2VUeXBlIiwiTWVzc2FnZVJvbGUiLCJVc2VyRXZlbnRDYXRlZ29yeSIsIk1lc3NhZ2VSb2xlIiwiTWVzc2FnZVR5cGUiLCJub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCIsIm91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvYW5hbHl0aWNzVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZUNvbnRleHRUb0FwaUNvbnRleHQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2RpdmlkZUFycmF5LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL2ltYWdlRmlsdGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lcmNoYW50VXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21Gb3JtU3VibWl0dGVkRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21RdWVyeUV2ZW50LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL21lc3NhZ2VGcm9tUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbmV4dE1lc3NhZ2VSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL25vZGVTZWxlY3Rvci50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9vdmVycmlkZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3RyaW5nVXRpbHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0LnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL3ZhbGlkYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZ2dlciBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyXCI7XG5pbXBvcnQge1xuICBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQsXG4gIGlzR0E0RWNvbW1lcmNlRXZlbnQsXG4gIGlzQmFzZUVjb21tZXJjZUV2ZW50LFxuICBCYXNlRWNvbW1lcmNlRXZlbnQsXG59IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzXCI7XG5pbXBvcnQgeyBTcGlmZnlNZXRyaWNzRXZlbnROYW1lIH0gZnJvbSBcInNyYy9jb250ZXh0cy9hbXBsaXR1ZGVDb250ZXh0L2FtcGxpdHVkZUNvbnRleHRcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICBkYXRhTGF5ZXI6IGFueVtdO1xuICB9XG59XG5cbmNvbnN0IE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMgPSBbXCJhZGR0b2NhcnRcIiwgXCJhZGRlZHRvY2FydFwiXTtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfSU5URVJWQUxfTVMgPSA1MDA7XG5jb25zdCBDSEVDS19EQVRBX0xBWUVSX01BWF9BVFRFTVBUUyA9IDEwO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIEdvb2dsZSBBbmFseXRpY3MgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQuXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBuYW1lIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGlzIGFuIGFkZF90b19jYXJ0IGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmNvbnN0IGlzQWRkVG9DYXJ0RXZlbnQgPSAoZXZlbnQ6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkRXZlbnQgPSBldmVudC5yZXBsYWNlKC9bLV9dL2csIFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBOT1JNQUxJWkVEX0FERF9UT19DQVJUX0VWRU5UX05BTUVTLnNvbWUoKG5hbWUpID0+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/LnRyaW0oKTtcbiAgICByZXR1cm4gU3RyaW5nVXRpbHMuaXNOdWxsT3JFbXB0eSh2YWx1ZVRyaW1tZWQpID8gdW5kZWZpbmVkIDogdmFsdWVUcmltbWVkO1xuICB9XG5cbiAgc3RhdGljIGNhcGl0YWxpemUodHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gdHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR5cGUuc3Vic3RyaW5nKDEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBmaXJzdCBwYXR0ZXJuIGluIGFuIGFycmF5IHRoYXQgbWF0Y2hlcyBhIGdpdmVuIFVSTC5cbiAgICogUGF0dGVybnMgY2FuIGluY2x1ZGUgYSBzaW5nbGUgd2lsZGNhcmQgJyonIHdoaWNoIG1hdGNoZXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJuc1xuICAgKiBAcGFyYW0gdXJsVG9UZXN0XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBzdGF0aWMgZmluZE1hdGNoaW5nUGF0dGVybihwYXR0ZXJuczogc3RyaW5nW10sIHVybFRvVGVzdDogTG9jYXRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghdXJsVG9UZXN0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgLy8gVGVzdCBvbmx5IGlmIGEgcGF0aG5hbWUgaXMgcHJlc2VudC5cbiAgICAgIGlmICh1cmxUb1Rlc3QucGF0aG5hbWUgIT09ICcvJykge1xuICAgICAgICAvLyBFc2NhcGUgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGNoYXJhY3RlcnMgbGlrZSAnLicsICcrJywgJz8nLCAnKCcsIGV0Yy4sIGluIHRoZSBwYXR0ZXJuIGFyZSB0cmVhdGVkIGxpdGVyYWxseS5cbiAgICAgICAgY29uc3QgZXNjYXBlZFBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoL1suKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcblxuICAgICAgICAvLyBSZXBsYWNlIHRoZSB3aWxkY2FyZCAnKicgd2l0aCBpdHMgcmVnZXggZXF1aXZhbGVudCAnLionIChtYXRjaGVzIGFueSBjaGFyYWN0ZXIgemVybyBvciBtb3JlIHRpbWVzKVxuICAgICAgICBjb25zdCByZWdleFBhdHRlcm4gPSBlc2NhcGVkUGF0dGVybi5yZXBsYWNlKC9cXCovZywgJy4qJyk7XG5cbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeJHtyZWdleFBhdHRlcm59JGApO1xuICAgICAgICBpZiAocmVnZXgudGVzdCh1cmxUb1Rlc3QucGF0aG5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgodXJsVG9UZXN0Lmhvc3RuYW1lKSkge1xuICAgICAgICByZXR1cm4gcGF0dGVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHsgU3RyaW5nVXRpbHMgfTtcbiIsImltcG9ydCB7IFN1cHBvcnRlZEV2ZW50UmVxdWVzdCBhcyBBcGlTdXBwb3J0ZWRFdmVudFJlcXVlc3QgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IGFzIENvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvYXBpL3N1cHBvcnRlZEV2ZW50UmVxdWVzdCc7XG5pbXBvcnQgeyBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQgfSBmcm9tICcuL2NvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCc7XG5pbXBvcnQgeyBjb3JlQ29udGV4dFRvQXBpQ29udGV4dCB9IGZyb20gJy4vY29yZUNvbnRleHRUb0FwaUNvbnRleHQnO1xuXG5leHBvcnQgY29uc3QgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdFRvQXBpUmVxdWVzdCA9IChcbiAgY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdDogQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCxcbik6IEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCA9PiAoe1xuICBpZDogY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5pZCxcbiAgdXNlcl9ldmVudDogY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KGNvcmVTdXBwb3J0ZWRFdmVudFJlcXVlc3QudXNlckV2ZW50KSxcbiAgY29udGV4dDogY29yZUNvbnRleHRUb0FwaUNvbnRleHQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC5jb250ZXh0KSxcbn0pO1xuIiwiLy8gVGhpcyBlbWFpbCB2YWxpZGF0ZXMgdGhhdCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGBAYCBzeW1ib2wsXG4vLyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJldHdlZW4gdGhlIGBAYCBzeW1ib2wgYW5kIHRoZSBgLmAgc3ltYm9sLFxuLy8gYW5kIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGAuYCBzeW1ib2xcbi8vIEl0IGRvZXMgTk9UIHZhbGlkYXRlIGFsbCBwb3NzaWJsZSBlbWFpbCBmb3JtYXRzLCBidXQgaXQgaXMgYSBkZWNlbnQgcGxhY2UgdG8gc3RhcnQuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVFbWFpbCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiAvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFlQSxNQUFNLHFDQUFxQyxDQUFDLGFBQWEsY0FBYztBQUN2RSxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLGdDQUFnQzs7Ozs7Ozs7QUFTdEMsTUFBTSxvQkFBb0IsVUFBMkI7Q0FDbkQsTUFBTSxrQkFBa0IsTUFBTSxRQUFRLFNBQVMsR0FBRyxDQUFDLGFBQWE7QUFDaEUsUUFBTyxtQ0FBbUMsTUFBTSxTQUM5QyxnQkFBZ0IsU0FBUyxLQUFLLENBQy9COzs7Ozs7O0FBUUgsTUFBTSx3QkFDSixPQUNBLFVBSUc7Q0FDSCxJQUFJQTtBQUVKLEtBQUlDLHdDQUF5QixNQUFNLENBQ2pDLGNBQWE7RUFDWCxPQUFPLE1BQU0sVUFBVSxJQUFJLFNBQVMsS0FBSyxhQUFhO0dBQ3BELFdBQVcsUUFBUTtHQUNuQixlQUFlLFFBQVE7R0FDdkIsT0FBTyxRQUFRO0dBQ2YsVUFBVSxRQUFRO0dBQ25CLEVBQUU7RUFDSCxVQUFVLE1BQU0sVUFBVSxJQUFJO0VBQzlCLHNCQUFzQjtFQUN2QjtVQUNRQyxtQ0FBb0IsTUFBTSxDQUNuQyxjQUFhO0VBQ1gsT0FBTyxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVU7R0FDMUMsV0FBVyxLQUFLO0dBQ2hCLGVBQWUsS0FBSztHQUNwQixPQUFPLEtBQUs7R0FDWixVQUFVLEtBQUs7R0FDaEIsRUFBRTtFQUNILFVBQVUsTUFBTSxVQUFVO0VBQzFCLHNCQUFzQjtFQUN2QjtLQUVELGNBQWE7RUFDWCxrQkFBa0IsRUFBRSxHQUFHLE9BQU87RUFDOUIsc0JBQXNCO0VBQ3ZCO0FBR0gsT0FBTUMsZ0RBQXVCLGtCQUFrQixFQUM3QyxZQUNELENBQUM7Ozs7OztBQU9KLE1BQWEsd0JBQ1gsVUFJRztDQUNILElBQUksV0FBVztDQUlmLE1BQU0sMkJBQTJCO0FBQy9CLE1BQUksQ0FBQyxPQUFPLGFBQWEsQ0FBRSxPQUFPLFVBQWtCLE1BQU07QUFDeEQsZUFBWTtBQUVaLE9BQUksWUFBWSwrQkFBK0I7QUFDN0Msa0NBQU8sU0FDTCw2Q0FBNkMsOEJBQThCLFdBQzVFO0FBQ0Q7O0FBR0YsY0FBVyxvQkFBb0IsNkJBQTZCO0FBQzVEOztBQUdGLGdDQUFPLFNBQ0wsZ0VBQ0Q7RUFDRCxNQUFNLGVBQWUsT0FBTyxVQUFVO0FBQ3RDLFNBQU8sVUFBVSxRQUFRLEdBQUcsU0FBb0I7QUFDOUMsT0FDRUMsb0NBQXFCLEtBQUssR0FBRyxJQUM3QixpQkFBa0IsS0FBSyxHQUFXLE1BQU0sQ0FFeEMsc0JBQXFCLEtBQUssSUFBMEIsTUFBTTtBQUk1RCxVQUFPLGFBQWEsTUFBTSxPQUFPLFdBQVcsS0FBSzs7O0FBSXJELHFCQUFvQjs7QUFHdEIsTUFBYSxpQkFDWCxVQUlHO0FBSUgsT0FBTUQsZ0RBQXVCLGFBQWE7Ozs7O0FDeEk1QyxNQUFhLDJCQUEyQixhQUFzQztDQUM1RSxTQUFTLFFBQVE7Q0FDakIsUUFBUSxRQUFRO0NBQ2hCLFNBQVMsUUFBUTtDQUNqQixnQkFBZ0IsUUFBUTtDQUN4QixRQUFRLFFBQVE7Q0FDaEIsS0FBSyxRQUFRO0NBQ2Q7Ozs7QUNGRCxNQUFhLCtCQUErQixTQUFzQztBQUNoRixLQUNFLEtBQUssYUFBYUUsa0RBQWtCLFlBQ3BDLEtBQUssYUFBYUEsa0RBQWtCLFVBRXBDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWTtHQUNWLFlBQVksS0FBSyxXQUFXO0dBQzVCLG1CQUFtQixLQUFLLFdBQVc7R0FDbkMsS0FBSyxLQUFLLFdBQVc7R0FDdEI7RUFDRjtBQUdILEtBQUksS0FBSyxhQUFhQSxrREFBa0IsU0FDdEMsUUFBTztFQUNMLFVBQVUsS0FBSztFQUNmLFlBQVksS0FBSztFQUNqQixVQUFVLEtBQUs7RUFDZixZQUFZO0dBQ1YsVUFBVUMscURBQXFCO0dBQy9CLFlBQVksRUFFVixJQUFLLEtBQUssV0FBVyxXQUErQixJQUNyRDtHQUNGO0VBQ0Y7QUFHSCxLQUFJLEtBQUssYUFBYUQsa0RBQWtCLFdBQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWSxFQUNWLE9BQU8sS0FBSyxXQUFXLE9BQ3hCO0VBQ0Y7QUFHSCxLQUFJLEtBQUssYUFBYUEsa0RBQWtCLE9BQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWTtHQUNWLGFBQWEsS0FBSyxXQUFXO0dBQzdCLGtCQUFrQixLQUFLLFdBQVc7R0FDbkM7RUFDRjtBQUdILEtBQUksS0FBSyxhQUFhQSxrREFBa0Isa0JBQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWSxFQUNWLGVBQWUsS0FBSyxXQUFXLGNBQ2hDO0VBQ0Y7QUFHSCxLQUFJLEtBQUssYUFBYUEsa0RBQWtCLFVBQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWTtHQUNWLEtBQUssS0FBSyxXQUFXO0dBQ3JCLHFCQUFxQixLQUFLLFdBQVc7R0FDdEM7RUFDRjtBQUdILEtBQUksS0FBSyxhQUFhQSxrREFBa0IsY0FDdEMsUUFBTztFQUNMLFVBQVUsS0FBSztFQUNmLFlBQVksS0FBSztFQUNqQixVQUFVLEtBQUs7RUFDZixZQUFZO0dBQ1YsZUFBZSxFQUFFLEdBQUcsS0FBSyxXQUFXLGNBQWM7R0FDbEQsa0JBQWtCLEtBQUssV0FBVztHQUNsQyxXQUFXLEtBQUssV0FBVztHQUM1QjtFQUNGO0FBSUgsUUFBTztFQUNMLFVBQVUsS0FBSztFQUNmLFlBQVksS0FBSztFQUNqQixVQUFVLEtBQUs7RUFDaEI7Ozs7O0FDeEdILE1BQWEsZUFBa0IsT0FBWSxTQUFpQjtDQUMxRCxNQUFNLE9BQU8sRUFBRTtBQUNmLE1BQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLEtBQUssRUFDN0IsTUFBSyxLQUFLLE1BQU0sUUFBUSxHQUFNLFVBQWtCLFFBQVEsU0FBUyxFQUFFLENBQUM7QUFFdEUsUUFBTzs7Ozs7QUNIVCxNQUFhLDZCQUE2QixjQUF5QixxQkFBeUM7Q0FDMUcsTUFBTSxrQkFBa0IsYUFDckIsUUFBUSxZQUFZLFFBQVEsU0FBU0UsMkJBQVksV0FBVyxRQUFRLFVBQVUsU0FBUyxDQUN2RixLQUFLLE1BQU0sRUFBNEI7QUFFMUMsUUFBTyxDQUNMLEdBQUcsZ0JBQWdCLFFBQVEsTUFBTSxFQUFFLFVBQVUsT0FBTyxpQkFBaUIsRUFDckUsR0FBRyxnQkFBZ0IsUUFBUSxNQUFNLEVBQUUsVUFBVSxPQUFPLGlCQUFpQixDQUN0RSxDQUFDLEtBQUssTUFBTSxFQUFFLFNBQVUsU0FBVTs7Ozs7QUNWckMsTUFBYSw0QkFBNEI7Q0FDdkMsSUFBSSxlQUFlLFNBQVMsY0FBYyx3QkFBd0I7QUFDbEUsS0FBSSxjQUFjO0VBQ2hCLE1BQU0sVUFBVSxhQUFhLGFBQWEsVUFBVTtBQUVwRCxNQUFJLENBRG9CLFNBQVMsU0FBUyxrQkFBa0IsQ0FFMUQsY0FBYSxhQUFhLFdBQVcsR0FBRyxRQUFRLG1CQUFtQjtBQUVyRTs7QUFHRixnQkFBZSxTQUFTLGNBQWMsT0FBTztBQUM3QyxjQUFhLGFBQWEsUUFBUSxXQUFXO0FBQzdDLGNBQWEsYUFBYSxXQUFXLHVEQUF1RDtBQUM1RixVQUFTLEtBQUssWUFBWSxhQUFhOzs7OztBQ0x6QyxNQUFhLGlDQUNYLE9BQ0EsMkJBQ3dCO0FBQ3hCLEtBQUksTUFBTSxhQUFhQyxrREFBa0IsY0FDdkM7Q0FHRixNQUFNLHFCQUFxQixPQUFPLFFBQVEsdUJBQXVCLE9BQU8sV0FBVyxDQUNoRixLQUFLLENBQUMsS0FBSyxXQUFXLEdBQUcsTUFBTSxNQUFNLElBQUksTUFBTSxXQUFXLGFBQWEsT0FBTyxDQUM5RSxLQUFLLEtBQUs7QUFFYixRQUFPO0VBQ0wsSUFBSSxNQUFNO0VBQ1YsTUFBTUMsMkJBQVk7RUFDbEIsTUFBTUMsMkJBQVk7RUFDbEIsV0FBVyxNQUFNO0VBQ2pCLFVBQVUsRUFDUixTQUFTLG9CQUNWO0VBQ0Y7Ozs7Ozs7Ozs7OztBQ25CSCxNQUFhLHlCQUF5QixVQUEwQztBQUM5RSxLQUFJLE1BQU0sYUFBYUMsa0RBQWtCLFdBQ3ZDLFFBQU87RUFDTCxJQUFJLE1BQU07RUFDVixNQUFNQywyQkFBWTtFQUNsQixNQUFNQywyQkFBWTtFQUNsQixXQUFXLE1BQU07RUFDakIsVUFBVSxFQUNSLFNBQVMsTUFBTSxXQUFXLE9BQzNCO0VBQ0Y7QUFHSCxLQUFJLE1BQU0sYUFBYUYsa0RBQWtCLE9BQ3ZDLFFBQU87RUFDTCxJQUFJLE1BQU07RUFDVixNQUFNQywyQkFBWTtFQUNsQixNQUFNQywyQkFBWTtFQUNsQixXQUFXLE1BQU07RUFDakIsVUFBVTtHQUNSLFlBQVksTUFBTSxXQUFXLGNBQWM7R0FDM0MsaUJBQWlCLE1BQU0sV0FBVyxtQkFBbUIsRUFBRTtHQUN4RDtFQUNGOzs7Ozs7Ozs7Ozs7QUN2QkwsTUFBYSx1QkFBdUIsYUFBNkM7QUFDL0UsS0FBSSxZQUFZLEtBQ2Q7QUFHRixLQUFJLFNBQVMsYUFBYUMsaURBQWlCLEtBQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTUMsMkJBQVk7RUFDbEIsTUFBTUMsMkJBQVk7RUFDbEIsVUFBVSxFQUNSLFNBQVMsU0FBUyxXQUFXLFNBQzlCO0VBQ0Y7QUFHSCxLQUFJLFNBQVMsYUFBYUYsaURBQWlCLFFBQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTUUsMkJBQVk7RUFDbEIsTUFBTUQsMkJBQVk7RUFDbEIsVUFBVSxFQUNSLEdBQUcsU0FBUyxZQUNiO0VBQ0Y7QUFHSCxLQUFJLFNBQVMsYUFBYUQsaURBQWlCLE9BQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTUMsMkJBQVk7RUFDbEIsTUFBTUMsMkJBQVk7RUFDbEIsVUFBVTtHQUNSLFFBQVEsU0FBUyxXQUFXO0dBQzVCLFVBQVUsU0FBUyxXQUFXO0dBQzlCLE9BQU8sU0FBUyxXQUFXO0dBQzNCLE9BQU8sU0FBUyxXQUFXO0dBQzNCLGlCQUFpQixTQUFTLFdBQVc7R0FDdEM7RUFDRjtBQUdILEtBQUksU0FBUyxhQUFhRixpREFBaUIsVUFDekMsUUFBTztFQUNMLElBQUksU0FBUztFQUNiLFdBQVcsU0FBUztFQUNwQixNQUFNQywyQkFBWTtFQUNsQixNQUFNQywyQkFBWTtFQUNuQjtBQUdILEtBQUksU0FBUyxhQUFhRixpREFBaUIsS0FDekMsUUFBTztFQUNMLElBQUksU0FBUztFQUNiLFdBQVcsU0FBUztFQUNwQixNQUFNRSwyQkFBWTtFQUNsQixNQUFNRCwyQkFBWTtFQUNsQixVQUFVLEVBQ1IsR0FBRyxTQUFTLFlBQ2I7RUFDRjtBQUdILEtBQUksU0FBUyxhQUFhRCxpREFBaUIsY0FDekMsUUFBTztFQUNMLElBQUksU0FBUztFQUNiLFdBQVcsU0FBUztFQUNwQixNQUFNRSwyQkFBWTtFQUNsQixNQUFNRCwyQkFBWTtFQUNsQixVQUFVLEVBQ1IsR0FBRyxTQUFTLFlBQ2I7RUFDRjtBQUdILEtBQUksU0FBUyxhQUFhRCxpREFBaUIsb0JBQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTUUsMkJBQVk7RUFDbEIsTUFBTUQsMkJBQVk7RUFDbEIsVUFBVSxFQUNSLEdBQUcsU0FBUyxZQUNiO0VBQ0Y7QUFHSCxLQUFJLFNBQVMsYUFBYUQsaURBQWlCLEtBQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTUUsMkJBQVk7RUFDbEIsTUFBTUQsMkJBQVk7RUFDbEIsVUFBVTtHQUNSLFVBQVUsU0FBUyxXQUFXLGNBQWM7R0FDNUMsUUFBUSxPQUFPLFFBQVEsU0FBUyxXQUFXLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVk7SUFDbkY7SUFDQSxPQUFPLE1BQU07SUFDYixNQUFNLE1BQU07SUFDWixRQUFRLE1BQU07SUFDZCxVQUFVLFNBQVMsV0FBVyxPQUFPLFNBQVMsU0FBUyxJQUFJO0lBQzVELEVBQUU7R0FDSjtFQUNGO0FBR0gsS0FBSSxTQUFTLGFBQWFELGlEQUFpQixNQUN6QyxRQUFPO0VBQ0wsSUFBSSxTQUFTO0VBQ2IsV0FBVyxTQUFTO0VBQ3BCLE1BQU1FLDJCQUFZO0VBQ2xCLE1BQU1ELDJCQUFZO0VBQ2xCLFVBQVUsRUFDUixHQUFHLFNBQVMsWUFDYjtFQUNGOzs7Ozs7Ozs7Ozs7O0FDckhMLE1BQWEsOEJBQ1gsT0FDQSxnQkFDd0I7QUFDeEIsS0FBSSxNQUFNLGFBQWFFLGtEQUFrQixtQkFBbUI7RUFDMUQsTUFBTSxFQUFFLGlCQUFpQixNQUFNO0FBRS9CLFNBQU87R0FDTCxJQUFJLE1BQU07R0FDVixNQUFNQywyQkFBWTtHQUNsQixNQUFNQywyQkFBWTtHQUNsQixXQUFXLE1BQU07R0FDakIsVUFBVTtJQUNSO0lBQ0EsbUJBQW1CLFlBQVksTUFBTSxNQUFNLEVBQUUsT0FBTyxhQUFhLEVBQUUsV0FBVztJQUMvRTtHQUNGOzs7Ozs7QUN2QkwsTUFBYSwwQ0FDWCxVQUMyQjtDQUMzQixTQUFTO0VBQ1AsU0FBUyxLQUFLLFFBQVE7RUFDdEIsUUFBUSxLQUFLLFFBQVE7RUFDckIsZ0JBQWdCLEtBQUssUUFBUTtFQUM3QixTQUFTLEtBQUssUUFBUTtFQUN0QixRQUFRLEtBQUssUUFBUTtFQUNyQixLQUFLLEtBQUssUUFBUTtFQUNuQjtDQUNELElBQUksS0FBSztDQUNULGVBQWUsS0FBSztDQUNwQixhQUFhLEtBQUssWUFBWSxLQUFLLGNBQWMsNEJBQTRCLFVBQVUsQ0FBQztDQUN4RixtQkFBbUI7RUFDakIsT0FBTyxLQUFLLGtCQUFrQjtFQUM5QixZQUFZLEtBQUssa0JBQWtCO0VBQ25DLE1BQU0sS0FBSyxrQkFBa0I7RUFDN0IsUUFBUSxLQUFLLGtCQUFrQjtFQUMvQixhQUFhLEtBQUssa0JBQWtCO0VBQ3BDLE9BQU8sS0FBSyxrQkFBa0I7RUFDOUIsaUJBQWlCLEtBQUssa0JBQWtCO0VBQ3hDLHdCQUF3QixLQUFLLGtCQUFrQjtFQUMvQywwQkFBMEIsS0FBSyxrQkFBa0I7RUFDakQsa0JBQWtCLEtBQUssa0JBQWtCO0VBQzFDO0NBQ0Y7Ozs7QUM5QkQsSUFBc0IsZUFBdEIsTUFBbUM7Q0FJakMsWUFBWSxTQUFpQjtBQUMzQixPQUFLLFVBQVU7QUFDZixPQUFLLE9BQU87O0NBR2QsYUFBYTtBQUNYLFNBQU8sS0FBSzs7Q0FHZCxRQUFRLE1BQWdCO0FBQ3RCLE9BQUssT0FBTzs7Q0FHZCxVQUFVO0FBQ1IsU0FBTyxLQUFLOzs7QUFNaEIsSUFBTSxnQkFBTixjQUE0QixhQUFhO0NBQ3ZDLFFBQXFCO0FBQ25CLFNBQU8sS0FBSyxTQUFTLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQzs7O0FBSTFELElBQU0sYUFBTixjQUF5QixhQUFhO0NBQ3BDLFFBQXFCO0FBQ25CLFNBQU8sS0FBSyxTQUFTLENBQUMsZUFBZSxLQUFLLFlBQVksQ0FBQzs7O0FBSTNELElBQU0sZ0JBQU4sY0FBNEIsYUFBYTtDQUN2QyxRQUFxQjtBQUNuQixTQUFPLEtBQUssU0FBUyxFQUFFLFNBQ3JCLEtBQUssWUFBWSxFQUNqQixLQUFLLFNBQVMsRUFDZCxNQUNBLFlBQVkseUJBQ1osS0FDRCxFQUFFOzs7QUFJUCxJQUFNLGdCQUFOLGNBQTRCLGFBQWE7Q0FDdkMsUUFBcUI7RUFDbkIsSUFBSSxnQkFBZ0I7RUFDcEIsTUFBTSxZQUFZLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSTtFQUM5QyxNQUFNLFlBQVksVUFBVSxTQUFTO0VBRXJDLE1BQU0sY0FBYyxTQUFpQixhQUF3QztHQUMzRSxNQUFNLFdBQVcsZ0JBQWdCLE1BQU0sUUFBUTtBQUUvQyxPQUFJLFNBQ0YsVUFBUyxRQUFRLFNBQXFCO0dBR3hDLE1BQU0sY0FBYyxTQUFTLE9BQU87QUFDcEMsT0FBSSxrQkFBa0IsVUFDcEIsUUFBTztHQUdULElBQUlDLE9BQWdDLGVBQWU7QUFDbkQsT0FBSyxhQUE2QixXQUNoQyxRQUFRLFlBQTRCO0FBR3RDLE9BQUssYUFBbUMsY0FDdEMsUUFBUSxZQUFrQyxlQUFlO0FBRzNELFVBQU8sV0FBVyxVQUFVLEVBQUUsZUFBZSxNQUFNLEVBQUUsS0FBSzs7QUFHNUQsU0FBTyxXQUFXLFVBQVUsZUFBZSxNQUFNLENBQUM7OztBQUl0RCxJQUFNLFFBQU4sY0FBb0IsYUFBYTtDQUMvQixjQUFjO0FBQ1osUUFBTSxHQUFHOztDQUVYLFFBQXFCO0FBQ25CLFNBQU87OztBQUlYLElBQWEsa0JBQWIsTUFBNkI7Q0FDM0IsT0FBTyxNQUFNLGtCQUEyQjtBQUN0QyxNQUFJLENBQUMsaUJBQ0gsUUFBTyxJQUFJLE9BQU87RUFHcEIsTUFBTSxRQUFRLGlCQUFpQixNQUFNLElBQUk7RUFDekMsTUFBTSxPQUFPLE1BQU07RUFDbkIsTUFBTSxXQUFXLE1BQU07QUFFdkIsVUFBUSxNQUFSO0dBQ0UsS0FBSyxLQUNILFFBQU8sS0FBSyxHQUFHLFNBQVM7R0FDMUIsS0FBSyxRQUNILFFBQU8sS0FBSyxNQUFNLFNBQVM7R0FDN0IsS0FBSyxRQUNILFFBQU8sS0FBSyxNQUFNLFNBQVM7R0FDN0IsUUFDRSxRQUFPLElBQUksT0FBTzs7O0NBSXhCLE9BQU8sTUFBTSxVQUF5QjtBQUNwQyxTQUFPLFlBQVksSUFBSSxPQUFPOztDQUdoQyxPQUFPLE1BQU0sU0FBa0I7QUFDN0IsU0FBTyxVQUFVLElBQUksY0FBYyxRQUFRLEdBQUcsSUFBSSxPQUFPOztDQUczRCxPQUFPLEdBQUcsU0FBZ0M7QUFDeEMsU0FBTyxVQUFVLElBQUksV0FBVyxRQUFRLEdBQUcsSUFBSSxPQUFPOztDQUd4RCxPQUFPLE1BQU0sU0FBZ0M7QUFDM0MsU0FBTyxVQUFVLElBQUksY0FBYyxRQUFRLEdBQUcsSUFBSSxPQUFPOztDQUczRCxPQUFPLE1BQU0sU0FBZ0M7QUFDM0MsU0FBTyxVQUFVLElBQUksY0FBYyxRQUFRLEdBQUcsSUFBSSxPQUFPOzs7Ozs7QUNoRjdELFNBQVMsY0FBYyxHQUEwQztBQUMvRCxRQUNFLENBQUMsQ0FBQyxLQUNGLE9BQU8sTUFBTSxZQUNiLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFDakIsRUFBRSxhQUFhLFNBQ2YsRUFBRSxhQUFhOztBQUluQixTQUFTLFVBQVUsR0FBcUM7QUFDdEQsUUFBTyxDQUFDLENBQUMsS0FBSyxPQUFPLE1BQU0sWUFBWSxjQUFlOztBQUV4RCxTQUFTLFNBQVMsR0FBMkI7QUFDM0MsUUFBTyxDQUFDLENBQUMsS0FBSyxPQUFPLE1BQU0sWUFBYSxFQUE4QixZQUFZOztBQUdwRixTQUFTLGlCQUFpQixHQUFxQjtDQUM3QyxNQUFNLElBQUksT0FBTztBQUNqQixRQUNFLE1BQU0sUUFDTixNQUFNLFlBQ04sTUFBTSxZQUNOLE1BQU0sYUFDTixNQUFNLFlBQ04sTUFBTSxZQUNOLE1BQU07O0FBSVYsU0FBUyxvQkFBb0IsS0FBeUI7QUFDcEQsS0FBSSxJQUFJLFdBQVcsRUFBRyxRQUFPO0FBRTdCLE1BQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSyxHQUFHO0VBQ3RDLE1BQU0sSUFBSSxJQUFJO0FBQ2QsTUFBSSxNQUFNLFVBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFFLFFBQU87O0FBRXRELFFBQU87O0FBR1QsU0FBUyxTQUFTLFNBQWtCLFVBQW1CLE1BQTZCO0FBQ2xGLEtBQUksVUFBVSxTQUFTLENBQUUsUUFBTyxTQUFTO0FBQ3pDLEtBQUksU0FBUyxTQUFTLENBQUUsUUFBTztBQUUvQixLQUFJLE1BQU0sUUFBUSxRQUFRLEVBQUU7QUFDMUIsTUFBSSxNQUFNLFFBQVEsU0FBUyxFQUFFO0dBQzNCLE1BQU0sVUFBVTtHQUNoQixNQUFNLFdBQVc7QUFLakIsT0FIRSxLQUFLLGtCQUFrQixhQUN2QixvQkFBb0IsUUFBUSxJQUM1QixvQkFBb0IsU0FBUyxDQUNaLFFBQU87R0FDMUIsTUFBTSxNQUFNLFFBQVEsT0FBTztHQUMzQixNQUFNLE1BQU0sS0FBSyxJQUFJLElBQUksUUFBUSxTQUFTLE9BQU87QUFDakQsUUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHO0lBQy9CLE1BQU0sT0FBTyxTQUFTO0FBQ3RCLFFBQUksU0FBUyxPQUNYLEtBQUksS0FBSyxTQUFTLElBQUksSUFBSSxNQUFNLEtBQUs7O0FBR3pDLFVBQU87O0FBRVQsU0FBTzs7QUFHVCxLQUFJLGNBQWMsUUFBUSxJQUFJLGNBQWMsU0FBUyxFQUFFO0VBQ3JELE1BQU0sVUFBVTtFQUNoQixNQUFNLFdBQVc7RUFDakIsTUFBTUMsTUFBK0IsRUFBRSxHQUFHLFNBQVM7QUFDbkQsT0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRTtHQUN2QyxNQUFNLE9BQU8sU0FBUztBQUN0QixPQUFJLFNBQVMsUUFBVyxZQUViLEtBQUssZUFBZSxTQUFTLEtBQ3RDLFFBQU8sSUFBSTtZQUNGLFVBQVUsS0FBSyxDQUN4QixLQUFJLE9BQU8sS0FBSztZQUNQLFNBQVMsS0FBSyxDQUN2QixRQUFPLElBQUk7T0FFWCxLQUFJLE9BQU8sU0FBUyxVQUFVLE1BQU0sTUFBTSxLQUFLOztBQUduRCxTQUFPOztBQUdULFFBQVEsWUFBd0I7O0FBR2xDLFNBQWdCLGVBQ2QsTUFDQSxPQUNBLE9BQXFCLEVBQUUsRUFDcEI7Q0FDSCxNQUFNLEVBQUUsZ0JBQWdCLGdCQUFnQixjQUFjLFVBQVU7QUFHaEUsS0FBSSxVQUFVLE1BQU0sQ0FBRSxRQUFPLE1BQU07QUFDbkMsS0FBSSxTQUFTLE1BQU0sQ0FBRSxRQUFPO0FBRzVCLEtBQUksTUFBTSxRQUFRLEtBQUssRUFBRTtBQUN2QixNQUFJLFVBQVUsTUFBTSxDQUFFLFFBQU8sTUFBTTtBQUNuQyxNQUFJLE1BQU0sUUFBUSxNQUFNLEVBQUU7QUFDeEIsT0FBSSxrQkFBa0IsVUFBVyxRQUFPO0dBRXhDLE1BQU0sTUFBTyxLQUFtQixPQUFPO0dBQ3ZDLE1BQU0sTUFBTSxLQUFLLElBQUksSUFBSSxRQUFRLE1BQU0sT0FBTztBQUM5QyxRQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUc7SUFDL0IsTUFBTSxPQUFRLE1BQW9CO0FBQ2xDLFFBQUksU0FBUyxPQUNYLEtBQUksS0FBSyxTQUFTLElBQUksSUFBSSxNQUFNLEtBQUs7O0FBR3pDLFVBQU87O0FBR1QsU0FBTzs7QUFJVCxLQUFJLGNBQWMsS0FBSyxJQUFJLGNBQWMsTUFBTSxFQUFFO0VBQy9DLE1BQU1BLE1BQStCLEVBQUUsR0FBSSxNQUFrQztFQUM3RSxNQUFNLFdBQVc7QUFDakIsT0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRTtHQUN2QyxNQUFNLE9BQU8sU0FBUztBQUN0QixPQUFJLFNBQVMsUUFBVyxZQUViLGVBQWUsU0FBUyxLQUNqQyxRQUFPLElBQUk7WUFDRixVQUFVLEtBQUssQ0FDeEIsS0FBSSxPQUFPLEtBQUs7WUFDUCxTQUFTLEtBQUssQ0FDdkIsUUFBTyxJQUFJO1FBQ047SUFDTCxNQUFNLE9BQVEsS0FBaUM7QUFDL0MsUUFBSSxPQUFPLFNBQVMsTUFBTSxNQUFNLEtBQUs7OztBQUd6QyxTQUFPOztBQUlULFFBQVMsU0FBcUI7Ozs7O0FDak1oQyxJQUFNLGNBQU4sTUFBTSxZQUFZO0NBQ2hCLE9BQU8sY0FBYyxPQUFvQztFQUN2RCxNQUFNLGVBQWUsT0FBTyxNQUFNO0FBQ2xDLFNBQU8sVUFBVSxVQUFhLGlCQUFpQjs7Q0FHakQsT0FBTyxXQUFXLE9BQStDO0VBQy9ELE1BQU0sZUFBZSxPQUFPLE1BQU07QUFDbEMsU0FBTyxZQUFZLGNBQWMsYUFBYSxHQUFHLFNBQVk7O0NBRy9ELE9BQU8sV0FBVyxNQUEwQjtBQUMxQyxNQUFJLFNBQVMsT0FDWCxRQUFPO0FBRVQsU0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDLGFBQWEsR0FBRyxLQUFLLFVBQVUsRUFBRTs7Ozs7Ozs7OztDQVd6RCxPQUFPLG9CQUFvQixVQUFvQixXQUF5QztBQUN0RixNQUFJLENBQUMsVUFDSDtBQUdGLE9BQUssTUFBTSxXQUFXLFNBRXBCLEtBQUksVUFBVSxhQUFhLEtBQUs7R0FNOUIsTUFBTSxlQUhpQixRQUFRLFFBQVEsc0JBQXNCLE9BQU8sQ0FHaEMsUUFBUSxPQUFPLEtBQUs7QUFHeEQsd0JBRGMsSUFBSSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQ25DLEtBQUssVUFBVSxTQUFTLENBQ2hDLFFBQU87YUFHQSxRQUFRLFdBQVcsVUFBVSxTQUFTLENBQy9DLFFBQU87Ozs7OztBQzNDZixNQUFhLHlDQUNYLCtCQUM4QjtDQUM5QixJQUFJLDBCQUEwQjtDQUM5QixZQUFZLDRCQUE0QiwwQkFBMEIsVUFBVTtDQUM1RSxTQUFTLHdCQUF3QiwwQkFBMEIsUUFBUTtDQUNwRTs7OztBQ1BELE1BQWEsaUJBQWlCLFVBQTJCLDZCQUE2QixLQUFLLE1BQU0ifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@envive-ai/react-hooks",
3
- "version": "0.2.6",
3
+ "version": "0.2.7-arthur-1",
4
4
  "description": "React hooks for connecting to Envive AI services.",
5
5
  "keywords": [
6
6
  "react",
@@ -431,6 +431,10 @@
431
431
  "import": "./dist/events/index.js",
432
432
  "require": "./dist/events/index.cjs"
433
433
  },
434
+ "./exceptions": {
435
+ "import": "./dist/exceptions/index.js",
436
+ "require": "./dist/exceptions/index.cjs"
437
+ },
434
438
  "./hooks": {
435
439
  "import": "./dist/hooks/index.js",
436
440
  "require": "./dist/hooks/index.cjs"
@@ -544,6 +544,8 @@ class CommerceApiClient {
544
544
  return V1OrgConfigGetSourceEnum.App;
545
545
  case ContextSourceEnum.Test:
546
546
  return V1OrgConfigGetSourceEnum.Test;
547
+ case ContextSourceEnum.Eval:
548
+ return V1OrgConfigGetSourceEnum.Test;
547
549
  default: {
548
550
  // This ensures that if new values are added to ContextSourceEnum, we catch it
549
551
  const exhaustiveCheck: never = source;
@@ -1,2 +1,3 @@
1
1
  export * from './queries/getMerchantFrontendConfigQuery';
2
2
  export * from './queries/getMerchantColorsQuery';
3
+ export * from './queries/getMerchantOrgIdQuery';
@@ -0,0 +1,70 @@
1
+
2
+ import { atom } from "jotai";
3
+ import { getProductRetrievalFunction } from "./productRetrievalAdapter";
4
+ import { ProductRetrievalParams, ProductRetrievalResult } from "./types";
5
+
6
+ interface ProductRetrievalState {
7
+ data: ProductRetrievalResult | null;
8
+ loading: boolean;
9
+ error: string | null;
10
+ lastProductIds: string[] | null;
11
+ }
12
+
13
+ export const productRetrievalAtom = atom<ProductRetrievalState>({
14
+ data: null,
15
+ loading: false,
16
+ error: null,
17
+ lastProductIds: null,
18
+ });
19
+
20
+ export const performProductRetrievalAtom = atom(
21
+ null,
22
+ async (get, set, params: ProductRetrievalParams) => {
23
+ const currentState = get(productRetrievalAtom);
24
+
25
+ if (currentState.loading) {
26
+ return; // Prevent concurrent retrievals
27
+ }
28
+
29
+ set(productRetrievalAtom, {
30
+ data: null,
31
+ loading: true,
32
+ error: null,
33
+ lastProductIds: params.productIds,
34
+ });
35
+
36
+ try {
37
+ const retrieveProducts = getProductRetrievalFunction();
38
+ const result = await retrieveProducts(params);
39
+ set(productRetrievalAtom, {
40
+ data: result,
41
+ loading: false,
42
+ error: null,
43
+ lastProductIds: params.productIds,
44
+ });
45
+ } catch (error: unknown) {
46
+ const errorMessage =
47
+ error instanceof Error ? error.message : "An unknown error occurred";
48
+ set(productRetrievalAtom, {
49
+ data: null,
50
+ loading: false,
51
+ error: errorMessage,
52
+ lastProductIds: params.productIds,
53
+ });
54
+ }
55
+ }
56
+ );
57
+
58
+ // Get just the products array (already normalized by service)
59
+ export const retrievedProductsAtom = atom((get) => {
60
+ const retrievalData = get(productRetrievalAtom).data;
61
+ return retrievalData?.products || [];
62
+ });
63
+
64
+ export const productRetrievalLoadingAtom = atom((get) => {
65
+ return get(productRetrievalAtom).loading;
66
+ });
67
+
68
+ export const productRetrievalErrorAtom = atom((get) => {
69
+ return get(productRetrievalAtom).error;
70
+ });
@@ -0,0 +1,25 @@
1
+ import { ProductRetrievalParams, ProductRetrievalResult } from "./types";
2
+
3
+ // This will be set by the ProductRetrievalProvider when it initializes
4
+ let productRetrievalFunction:
5
+ | ((params: ProductRetrievalParams) => Promise<ProductRetrievalResult>)
6
+ | null = null;
7
+
8
+ export const setProductRetrievalFunction = (
9
+ fn: (params: ProductRetrievalParams) => Promise<ProductRetrievalResult>
10
+ ) => {
11
+ productRetrievalFunction = fn;
12
+ };
13
+
14
+ export const getProductRetrievalFunction = () => {
15
+ if (!productRetrievalFunction) {
16
+ throw new Error(
17
+ "Product retrieval function not initialized. Make sure ProductRetrievalProvider is mounted."
18
+ );
19
+ }
20
+ return productRetrievalFunction;
21
+ };
22
+
23
+ export const clearProductRetrievalFunction = () => {
24
+ productRetrievalFunction = null;
25
+ };
@@ -1,3 +1,5 @@
1
+ import { SearchResponseProductAttributes } from "src/application/models/api/response";
2
+
1
3
  export enum ProductSorting {
2
4
  FEATURED = 'featured',
3
5
  PRICE_ASC = 'price_asc',
@@ -53,3 +55,14 @@ export enum ChatSearchSortOverrides {
53
55
  MOBILE_FILTER_MODAL_OPTION_DESCRIPTION = 'spiffy-chat-search-filter-modal-option-desc',
54
56
  MOBILE_FILTER_MODAL_APPLY_BUTTON = 'spiffy-chat-search-filter-modal-apply-button',
55
57
  }
58
+
59
+ // Custom product retrieval result interface
60
+ export interface ProductRetrievalResult {
61
+ products: SearchResponseProductAttributes['attributes'][];
62
+ totalProductCount: number;
63
+ }
64
+
65
+ // Product retrieval parameters interface
66
+ export interface ProductRetrievalParams {
67
+ productIds: string[];
68
+ }