@envive-ai/react-hooks 0.1.7 → 0.1.8

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 (368) hide show
  1. package/dist/{NewOrgConfig-CRyIfb_l.js → NewOrgConfig-BU6uJT74.js} +2 -2
  2. package/dist/{NewOrgConfig-C5YL4Y62.cjs → NewOrgConfig-DmidHiyj.cjs} +2 -2
  3. package/dist/{SystemSettingsContext-Cb9YHln8.cjs → SystemSettingsContext-BbobkM82.cjs} +2 -2
  4. package/dist/{SystemSettingsContext-D3mmGGcv.js → SystemSettingsContext-gtrccL_q.js} +2 -2
  5. package/dist/{TrackComponentVisibleEvent-C7c_rHFW.cjs → TrackComponentVisibleEvent-CqjMiZCS.cjs} +3 -3
  6. package/dist/{TrackComponentVisibleEvent-DXTEBjGM.js → TrackComponentVisibleEvent-D9kpqKM4.js} +3 -3
  7. package/dist/{amplitudeContext-CB_F-nJY.d.cts → amplitudeContext-B73xamNe.d.cts} +1 -1
  8. package/dist/{amplitudeContext-DFYBDc0h.d.ts → amplitudeContext-BhhYPJSL.d.ts} +1 -1
  9. package/dist/{amplitudeContext-sTEsPaVG.cjs → amplitudeContext-Dr1jHI13.cjs} +9 -9
  10. package/dist/{amplitudeContext-Cak6ijMq.js → amplitudeContext-YRS1QOO3.js} +9 -9
  11. package/dist/api-DYjHj_hR.cjs +239 -0
  12. package/dist/api-d5uWvb3-.js +166 -0
  13. package/dist/{app-D_upYeqF.js → app-B9r0MF9n.js} +6 -6
  14. package/dist/{app-KXTMPa4s.cjs → app-Bgr-mAvr.cjs} +7 -7
  15. package/dist/application/models/graphql/index.cjs +2 -2
  16. package/dist/application/models/graphql/index.d.ts +1 -1
  17. package/dist/application/models/graphql/index.js +2 -2
  18. package/dist/application/models/guards/api/index.cjs +3 -2
  19. package/dist/application/models/guards/api/index.d.ts +2 -2
  20. package/dist/application/models/guards/api/index.js +3 -2
  21. package/dist/application/models/guards/utils.cjs +3 -0
  22. package/dist/application/models/guards/utils.d.cts +2 -0
  23. package/dist/application/models/guards/utils.d.ts +2 -0
  24. package/dist/application/models/guards/utils.js +3 -0
  25. package/dist/application/models/index.cjs +10 -9
  26. package/dist/application/models/index.d.cts +8 -7
  27. package/dist/application/models/index.d.ts +11 -10
  28. package/dist/application/models/index.js +9 -8
  29. package/dist/application/models/utilityTypes/index.cjs +1 -1
  30. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  31. package/dist/application/models/utilityTypes/index.js +1 -1
  32. package/dist/application/models/variantInfo/index.cjs +1 -1
  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/models/variantInfo/index.js +1 -1
  36. package/dist/application/utils/index.cjs +36 -35
  37. package/dist/application/utils/index.d.cts +11 -10
  38. package/dist/application/utils/index.d.ts +16 -15
  39. package/dist/application/utils/index.js +18 -17
  40. package/dist/{atomStore-DnPEioF4.js → atomStore-BuopbV9k.js} +1 -1
  41. package/dist/{atomStore-DEZyFCNz.cjs → atomStore-CZKe3itM.cjs} +1 -1
  42. package/dist/atoms/app/index.cjs +13 -12
  43. package/dist/atoms/app/index.d.cts +10 -9
  44. package/dist/atoms/app/index.d.ts +19 -18
  45. package/dist/atoms/app/index.js +13 -12
  46. package/dist/atoms/atomStore/index.cjs +2 -2
  47. package/dist/atoms/atomStore/index.js +2 -2
  48. package/dist/atoms/chat/index.cjs +19 -18
  49. package/dist/atoms/chat/index.d.cts +36 -35
  50. package/dist/atoms/chat/index.d.ts +39 -38
  51. package/dist/atoms/chat/index.js +19 -18
  52. package/dist/atoms/globalSearch/index.cjs +1 -1
  53. package/dist/atoms/globalSearch/index.d.cts +5 -5
  54. package/dist/atoms/globalSearch/index.d.ts +6 -6
  55. package/dist/atoms/globalSearch/index.js +1 -1
  56. package/dist/atoms/org/index.cjs +4 -4
  57. package/dist/atoms/org/index.d.cts +26 -25
  58. package/dist/atoms/org/index.d.ts +29 -28
  59. package/dist/atoms/org/index.js +4 -4
  60. package/dist/atoms/search/index.cjs +26 -24
  61. package/dist/atoms/search/index.d.cts +10 -9
  62. package/dist/atoms/search/index.d.ts +13 -12
  63. package/dist/atoms/search/index.js +26 -24
  64. package/dist/atoms/search/types.cjs +1 -1
  65. package/dist/atoms/search/types.d.cts +1 -1
  66. package/dist/atoms/search/types.d.ts +1 -1
  67. package/dist/atoms/search/types.js +1 -1
  68. package/dist/atoms/search/utils.cjs +3 -0
  69. package/dist/atoms/search/utils.d.cts +5 -0
  70. package/dist/atoms/search/utils.d.ts +5 -0
  71. package/dist/atoms/search/utils.js +3 -0
  72. package/dist/{cdnContext-BMjVfBft.cjs → cdnContext-CVgXkdV2.cjs} +2 -2
  73. package/dist/{cdnContext-DgsJ00Tb.js → cdnContext-DdE6VPIF.js} +2 -2
  74. package/dist/{chat-DPJGdUkz.js → chat-BNDYKsqF.js} +10 -10
  75. package/dist/{chat-zA-K4tR_.cjs → chat-BkjIKhc5.cjs} +1 -1
  76. package/dist/{chat-D1Eat8Ih.cjs → chat-Br5FhtRs.cjs} +11 -11
  77. package/dist/{chat-B4lkFIxz.js → chat-CgLypC3w.js} +1 -1
  78. package/dist/{chatElementDisplayLocation-C1tRM5OD.d.ts → chatElementDisplayLocation-BwiXrkN7.d.ts} +1 -1
  79. package/dist/{chatElementDisplayLocation-9SW40Dd3.d.cts → chatElementDisplayLocation-DWmfNX_u.d.cts} +1 -1
  80. package/dist/chatSearch-BiF2__V0.js +295 -0
  81. package/dist/chatSearch-BrzfJOto.cjs +418 -0
  82. package/dist/{chatState-BisPJd5g.cjs → chatState-BDsqKE-B.cjs} +3 -3
  83. package/dist/{chatState-BrmBYY8l.js → chatState-ie771Hwy.js} +3 -3
  84. package/dist/{commerce-api-DagLj3D_.js → commerce-api-Dz1jxPOJ.js} +9 -9
  85. package/dist/{commerce-api-CxDIfeME.cjs → commerce-api-KoiUki51.cjs} +9 -9
  86. package/dist/{components-g0G58Kat.cjs → components-Cby-Cma3.cjs} +1 -1
  87. package/dist/{components-B1edduHz.js → components-D1mg1-Br.js} +1 -1
  88. package/dist/config/locators/components/chat/index.cjs +1 -1
  89. package/dist/config/locators/components/chat/index.d.cts +1 -1
  90. package/dist/config/locators/components/chat/index.d.ts +1 -1
  91. package/dist/config/locators/components/chat/index.js +1 -1
  92. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  93. package/dist/config/locators/components/index.cjs +1 -1
  94. package/dist/config/locators/components/index.d.cts +1 -1
  95. package/dist/config/locators/components/index.d.ts +1 -1
  96. package/dist/config/locators/components/index.js +1 -1
  97. package/dist/config/locators/components/search/index.d.ts +1 -1
  98. package/dist/config/locators/index.cjs +2 -2
  99. package/dist/config/locators/index.d.cts +2 -2
  100. package/dist/config/locators/index.d.ts +2 -2
  101. package/dist/config/locators/index.js +2 -2
  102. package/dist/contexts/amplitudeContext/index.cjs +16 -15
  103. package/dist/contexts/amplitudeContext/index.d.cts +1 -1
  104. package/dist/contexts/amplitudeContext/index.d.ts +1 -1
  105. package/dist/contexts/amplitudeContext/index.js +16 -15
  106. package/dist/contexts/cdnContext/index.cjs +4 -4
  107. package/dist/contexts/cdnContext/index.js +4 -4
  108. package/dist/contexts/chatContext/index.cjs +40 -38
  109. package/dist/contexts/chatContext/index.d.cts +2 -2
  110. package/dist/contexts/chatContext/index.d.ts +2 -2
  111. package/dist/contexts/chatContext/index.js +36 -34
  112. package/dist/contexts/enviveConfigContext/index.cjs +4 -4
  113. package/dist/contexts/enviveConfigContext/index.d.cts +3 -3
  114. package/dist/contexts/enviveConfigContext/index.d.ts +3 -3
  115. package/dist/contexts/enviveConfigContext/index.js +4 -4
  116. package/dist/contexts/enviveCssContext/index.cjs +18 -17
  117. package/dist/contexts/enviveCssContext/index.js +18 -17
  118. package/dist/contexts/featureFlagContext/index.cjs +6 -6
  119. package/dist/contexts/featureFlagContext/index.d.cts +3 -3
  120. package/dist/contexts/featureFlagContext/index.d.ts +3 -3
  121. package/dist/contexts/featureFlagContext/index.js +6 -6
  122. package/dist/contexts/featureFlagServiceContext/index.cjs +3 -3
  123. package/dist/contexts/featureFlagServiceContext/index.d.cts +4 -4
  124. package/dist/contexts/featureFlagServiceContext/index.d.ts +4 -4
  125. package/dist/contexts/featureFlagServiceContext/index.js +3 -3
  126. package/dist/contexts/graphqlContext/index.cjs +12 -11
  127. package/dist/contexts/graphqlContext/index.d.cts +9 -8
  128. package/dist/contexts/graphqlContext/index.d.ts +12 -11
  129. package/dist/contexts/graphqlContext/index.js +12 -11
  130. package/dist/contexts/localStorageContext/index.cjs +2 -2
  131. package/dist/contexts/localStorageContext/index.js +2 -2
  132. package/dist/contexts/newOrgConfigContext/index.cjs +16 -15
  133. package/dist/contexts/newOrgConfigContext/index.d.cts +10 -9
  134. package/dist/contexts/newOrgConfigContext/index.d.ts +13 -12
  135. package/dist/contexts/newOrgConfigContext/index.js +16 -15
  136. package/dist/contexts/searchContext/index.cjs +20 -19
  137. package/dist/contexts/searchContext/index.d.cts +1 -1
  138. package/dist/contexts/searchContext/index.d.ts +2 -2
  139. package/dist/contexts/searchContext/index.js +20 -19
  140. package/dist/contexts/sessionStorageContext/index.cjs +2 -2
  141. package/dist/contexts/sessionStorageContext/index.js +2 -2
  142. package/dist/contexts/shopifyUrlContext/index.cjs +2 -2
  143. package/dist/contexts/shopifyUrlContext/index.d.cts +3 -3
  144. package/dist/contexts/shopifyUrlContext/index.d.ts +3 -3
  145. package/dist/contexts/shopifyUrlContext/index.js +2 -2
  146. package/dist/contexts/systemSettingsContext/index.cjs +4 -4
  147. package/dist/contexts/systemSettingsContext/index.d.cts +11 -10
  148. package/dist/contexts/systemSettingsContext/index.d.ts +12 -11
  149. package/dist/contexts/systemSettingsContext/index.js +4 -4
  150. package/dist/contexts/types.d.cts +3 -3
  151. package/dist/contexts/types.d.ts +3 -3
  152. package/dist/contexts/userIdentityContext/index.cjs +22 -21
  153. package/dist/contexts/userIdentityContext/index.d.cts +1 -1
  154. package/dist/contexts/userIdentityContext/index.d.ts +1 -1
  155. package/dist/contexts/userIdentityContext/index.js +22 -21
  156. package/dist/{domObserver-B6cRGTny.js → domObserver-B19-69gW.js} +1 -1
  157. package/dist/{domObserver-DQZwhPrc.cjs → domObserver-CwieVNgj.cjs} +1 -1
  158. package/dist/{enviveConfig-BJZ4zTJo.js → enviveConfig-BQB14yuH.js} +3 -3
  159. package/dist/{enviveConfig-DdBrcGSQ.cjs → enviveConfig-DAA9sozZ.cjs} +3 -3
  160. package/dist/{enviveConfigContext-jBCCWQH9.js → enviveConfigContext-BCpBKqsz.js} +3 -3
  161. package/dist/{enviveConfigContext-78orE_uH.cjs → enviveConfigContext-Btg5JUMG.cjs} +3 -3
  162. package/dist/{featureFlagServiceContext-ChL7DJ53.cjs → featureFlagServiceContext-Bcx5yh4S.cjs} +3 -3
  163. package/dist/{featureFlagServiceContext-D1PzHsEs.d.ts → featureFlagServiceContext-Cpw8omUr.d.ts} +2 -2
  164. package/dist/{featureFlagServiceContext-DQwlCTde.d.cts → featureFlagServiceContext-Cvn6fcdB.d.cts} +2 -2
  165. package/dist/{featureFlagServiceContext-DzFfmb1Z.js → featureFlagServiceContext-_tXX5iro.js} +3 -3
  166. package/dist/{featureGates-Blx10fwB.js → featureGates-2Zea2D2S.js} +1 -1
  167. package/dist/{featureGates-DcZNrUma.cjs → featureGates-BY2Zy7x_.cjs} +1 -1
  168. package/dist/{frontendConfig-wg41mBok.d.cts → frontendConfig-DnMZfvcA.d.cts} +3 -3
  169. package/dist/{frontendConfig-DrvrQSm8.d.ts → frontendConfig-Dqxbqo8G.d.ts} +3 -3
  170. package/dist/{globalSearch-Bnjlxtr5.cjs → globalSearch-C94-vEVh.cjs} +1 -1
  171. package/dist/{globalSearch-CRWUqnjq.js → globalSearch-Dlbnfasm.js} +1 -1
  172. package/dist/{graphql-W7GMIHUu.js → graphql-DRLWdYEk.js} +2 -2
  173. package/dist/{graphql-B9HhDXYt.cjs → graphql-xPDT7ZkK.cjs} +2 -2
  174. package/dist/{graphqlConfig-Bn-HLHsh.cjs → graphqlConfig-B4ddz1vH.cjs} +1 -1
  175. package/dist/{graphqlConfig-DtZm_YaH.js → graphqlConfig-BnjOdeX7.js} +1 -1
  176. package/dist/{graphqlContext-BJg7B--J.js → graphqlContext-B-9g2vOb.js} +5 -5
  177. package/dist/{graphqlContext-DI-_VRmb.cjs → graphqlContext-B7PEKDJs.cjs} +5 -5
  178. package/dist/hooks/AmplitudeOperations/index.cjs +18 -17
  179. package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
  180. package/dist/hooks/AmplitudeOperations/index.d.ts +1 -1
  181. package/dist/hooks/AmplitudeOperations/index.js +18 -17
  182. package/dist/hooks/AppDetails/index.cjs +16 -15
  183. package/dist/hooks/AppDetails/index.d.cts +9 -8
  184. package/dist/hooks/AppDetails/index.d.ts +12 -11
  185. package/dist/hooks/AppDetails/index.js +16 -15
  186. package/dist/hooks/CdnOperations/index.cjs +4 -4
  187. package/dist/hooks/CdnOperations/index.js +4 -4
  188. package/dist/hooks/ChatToggle/index.cjs +20 -19
  189. package/dist/hooks/ChatToggle/index.d.cts +1 -1
  190. package/dist/hooks/ChatToggle/index.d.ts +1 -1
  191. package/dist/hooks/ChatToggle/index.js +20 -19
  192. package/dist/hooks/ChatToggleAnalytics/index.cjs +20 -19
  193. package/dist/hooks/ChatToggleAnalytics/index.d.cts +1 -1
  194. package/dist/hooks/ChatToggleAnalytics/index.d.ts +1 -1
  195. package/dist/hooks/ChatToggleAnalytics/index.js +20 -19
  196. package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
  197. package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
  198. package/dist/hooks/Debounce/index.cjs +1 -1
  199. package/dist/hooks/Debounce/index.js +1 -1
  200. package/dist/hooks/ElementObserver/index.cjs +1 -1
  201. package/dist/hooks/ElementObserver/index.d.cts +1 -1
  202. package/dist/hooks/ElementObserver/index.d.ts +1 -1
  203. package/dist/hooks/ElementObserver/index.js +1 -1
  204. package/dist/hooks/GrabAndScroll/index.d.cts +2 -2
  205. package/dist/hooks/GraphQLConfig/index.cjs +13 -12
  206. package/dist/hooks/GraphQLConfig/index.js +13 -12
  207. package/dist/hooks/IdentifyUser/index.cjs +23 -22
  208. package/dist/hooks/IdentifyUser/index.js +23 -22
  209. package/dist/hooks/ImageResolver/index.cjs +12 -11
  210. package/dist/hooks/ImageResolver/index.js +12 -11
  211. package/dist/hooks/Intersection/index.cjs +1 -1
  212. package/dist/hooks/Intersection/index.js +1 -1
  213. package/dist/hooks/LocalStorageOperations/index.cjs +2 -2
  214. package/dist/hooks/LocalStorageOperations/index.js +2 -2
  215. package/dist/hooks/MessageFilter/index.cjs +10 -9
  216. package/dist/hooks/MessageFilter/index.d.cts +9 -8
  217. package/dist/hooks/MessageFilter/index.d.ts +12 -11
  218. package/dist/hooks/MessageFilter/index.js +10 -9
  219. package/dist/hooks/NewOrgConfig/index.cjs +17 -16
  220. package/dist/hooks/NewOrgConfig/index.d.cts +10 -9
  221. package/dist/hooks/NewOrgConfig/index.d.ts +13 -12
  222. package/dist/hooks/NewOrgConfig/index.js +17 -16
  223. package/dist/hooks/Search/index.cjs +38 -36
  224. package/dist/hooks/Search/index.d.cts +13 -18
  225. package/dist/hooks/Search/index.d.ts +16 -21
  226. package/dist/hooks/Search/index.js +37 -35
  227. package/dist/hooks/SearchOperations/index.cjs +21 -20
  228. package/dist/hooks/SearchOperations/index.d.cts +1 -1
  229. package/dist/hooks/SearchOperations/index.d.ts +2 -2
  230. package/dist/hooks/SearchOperations/index.js +21 -20
  231. package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
  232. package/dist/hooks/SessionStorageOperations/index.js +2 -2
  233. package/dist/hooks/ShopifyUrlOperations/index.cjs +2 -2
  234. package/dist/hooks/ShopifyUrlOperations/index.d.cts +5 -5
  235. package/dist/hooks/ShopifyUrlOperations/index.d.ts +5 -5
  236. package/dist/hooks/ShopifyUrlOperations/index.js +2 -2
  237. package/dist/hooks/SystemSettingsContext/index.cjs +5 -5
  238. package/dist/hooks/SystemSettingsContext/index.d.cts +11 -10
  239. package/dist/hooks/SystemSettingsContext/index.d.ts +14 -13
  240. package/dist/hooks/SystemSettingsContext/index.js +5 -5
  241. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +18 -17
  242. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +2 -2
  243. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +2 -2
  244. package/dist/hooks/TrackComponentVisibleEvent/index.js +18 -17
  245. package/dist/hooks/UpdateAnalyticsProps/index.cjs +17 -16
  246. package/dist/hooks/UpdateAnalyticsProps/index.js +17 -16
  247. package/dist/hooks/utils.cjs +8 -0
  248. package/dist/hooks/utils.d.cts +13 -0
  249. package/dist/hooks/utils.d.ts +13 -0
  250. package/dist/hooks/utils.js +3 -0
  251. package/dist/{index-CyXULMyI.d.cts → index-B9HUPS_i.d.cts} +33 -33
  252. package/dist/{index-DuyZQOE1.d.ts → index-BN-3ctk_.d.ts} +2 -2
  253. package/dist/{index-Cz10TYQA.d.cts → index-BNiYL8h0.d.cts} +2 -2
  254. package/dist/{index-DO0s5KNA.d.cts → index-BW6pHibZ.d.cts} +1 -1
  255. package/dist/{index-fKJB9EFb.d.ts → index-BirtCYN3.d.ts} +5 -5
  256. package/dist/{index-DNUKSg6R.d.ts → index-BoYC9XLW.d.ts} +1 -1
  257. package/dist/{index-CKeS9dud.d.ts → index-C9zXP5bg.d.ts} +3 -3
  258. package/dist/index-CK_J3QMY.d.ts +676 -0
  259. package/dist/index-C_MIfxF0.d.cts +676 -0
  260. package/dist/{index-D8ThXrqI.d.ts → index-Da0UzyI9.d.ts} +1 -1
  261. package/dist/{index-BS7-_CW4.d.ts → index-Dr_c2DDq.d.ts} +1 -1
  262. package/dist/{index-D9VegTU-.d.ts → index-DsiilEj-.d.ts} +1 -1
  263. package/dist/{index-REhT-Pls.d.cts → index-MOOZ2oxZ.d.cts} +1 -1
  264. package/dist/{index-DBqgBV9N.d.ts → index-ghzD_356.d.ts} +1 -1
  265. package/dist/{index-D46Rd0io.d.cts → index-hdbCEjYy.d.cts} +1 -1
  266. package/dist/interceptors/index.cjs +2 -2
  267. package/dist/interceptors/index.d.cts +10 -9
  268. package/dist/interceptors/index.d.ts +13 -12
  269. package/dist/interceptors/index.js +2 -2
  270. package/dist/interceptors/types.cjs +1 -1
  271. package/dist/interceptors/types.d.cts +9 -8
  272. package/dist/interceptors/types.d.ts +12 -11
  273. package/dist/interceptors/types.js +1 -1
  274. package/dist/{localStorageContext-6OrGDFid.js → localStorageContext-DiTziaPa.js} +2 -2
  275. package/dist/{localStorageContext-Bld0OWmG.cjs → localStorageContext-S38L0OSP.cjs} +2 -2
  276. package/dist/{logger-D5MFf3nW.js → logger-CkhQayOW.js} +1 -1
  277. package/dist/{logger-CSL2jqI9.cjs → logger-DQ0WfCcD.cjs} +1 -1
  278. package/dist/{models-Dn8Emdzc.js → models-C48U9q70.js} +4 -3
  279. package/dist/{models-ZpQcRZQK.cjs → models-Ctn-pmug.cjs} +25 -24
  280. package/dist/{newOrgConfigAtom-DkSi45_Q.cjs → newOrgConfigAtom-D6R-7HCk.cjs} +1 -1
  281. package/dist/{newOrgConfigAtom--tewb_G0.js → newOrgConfigAtom-bn1lnljf.js} +1 -1
  282. package/dist/{newOrgConfigContext-B3aeblfE.cjs → newOrgConfigContext-D3WoaBVU.cjs} +5 -5
  283. package/dist/{newOrgConfigContext-B5mzHKTG.js → newOrgConfigContext-rWOYz0E8.js} +5 -5
  284. package/dist/{nodeSelector-XsUa5vNH.d.cts → nodeSelector-B3bPtEjX.d.cts} +1 -1
  285. package/dist/{nodeSelector-DybpVr-i.d.ts → nodeSelector-D5gjDWZ3.d.ts} +1 -1
  286. package/dist/{org-ClUxpHPZ.cjs → org-CIhjzxWr.cjs} +1 -1
  287. package/dist/{org-B2uRkPt3.js → org-CeWXnpwF.js} +1 -1
  288. package/dist/{orgAnalyticsConfig-DOceTdNp.js → orgAnalyticsConfig-BC4_sEmn.js} +1 -1
  289. package/dist/{orgAnalyticsConfig-CuWXijsr.cjs → orgAnalyticsConfig-DsGbyFhO.cjs} +1 -1
  290. package/dist/{search-DsQm_pAi.cjs → search--NZPZkK3.cjs} +5 -5
  291. package/dist/{search-BIomqYy6.d.ts → search-BLShhjvR.d.ts} +2 -2
  292. package/dist/{search-Bn4x-3TG.js → search-CxZl7iQF.js} +5 -5
  293. package/dist/{search-filter-types-B5xcaEit.d.ts → search-filter-types-DPgeG8FS.d.ts} +1 -1
  294. package/dist/{search-filter-types-Byd0lEUa.d.cts → search-filter-types-_mprCnBi.d.cts} +1 -1
  295. package/dist/{search-B_Hg-Es2.d.cts → search-y-ioX5Mz.d.cts} +1 -1
  296. package/dist/{searchContext-Cn-pCoDy.cjs → searchContext-C4Glr8Nv.cjs} +7 -7
  297. package/dist/{searchContext-fQDGSvUF.js → searchContext-VnjhV7Lk.js} +7 -7
  298. package/dist/{searchServiceAdapter-DrjFCiw8.cjs → searchServiceAdapter-DEv1tTn0.cjs} +1 -1
  299. package/dist/{searchServiceAdapter-BSPZOg1r.js → searchServiceAdapter-WyCU55NV.js} +1 -1
  300. package/dist/{sessionStorageContext-CXE7iHtP.cjs → sessionStorageContext-BJ05_j7l.cjs} +2 -2
  301. package/dist/{sessionStorageContext-C5MUl2zf.js → sessionStorageContext-Dp_bhXQP.js} +2 -2
  302. package/dist/{shopifyUrlContext-BSYWsoX9.js → shopifyUrlContext-CGqpJl1o.js} +2 -2
  303. package/dist/{shopifyUrlContext-7ppKx1jJ.cjs → shopifyUrlContext-Cob4L7Dt.cjs} +2 -2
  304. package/dist/{spiffyWidgets-DxGuuuCG.d.cts → spiffyWidgets-BuS00VaQ.d.cts} +1 -1
  305. package/dist/{spiffyWidgets-CdxRcXhW.d.ts → spiffyWidgets-GILaqHv6.d.ts} +1 -1
  306. package/dist/{systemSettingsContext-BdAe_3Ll.cjs → systemSettingsContext-BDKWrrco.cjs} +2 -2
  307. package/dist/{systemSettingsContext-Cjyo2o3N.js → systemSettingsContext-Dqng3YSZ.js} +2 -2
  308. package/dist/{test-types-ZuRAYwox.d.ts → test-types-EzMFw_U3.d.ts} +1 -1
  309. package/dist/{test-types-DQB1JqOf.d.cts → test-types-ThQiO_cc.d.cts} +1 -1
  310. package/dist/types/index.d.cts +2 -2
  311. package/dist/types/index.d.ts +2 -2
  312. package/dist/{types-DzwBmZHy.d.cts → types-BUeRbZUk.d.cts} +1 -1
  313. package/dist/{types-YvACLe2e.d.ts → types-CMuTSKrW.d.ts} +2 -2
  314. package/dist/{types-DIk0FLwd.js → types-CS0Hrzja.js} +1 -1
  315. package/dist/{types-DNLkuGWZ.cjs → types-CxObxLKs.cjs} +1 -1
  316. package/dist/{types-BCz-hOvv.d.ts → types-fsXBIQwO.d.ts} +1 -1
  317. package/dist/{types-Eip78dWv.d.cts → types-zuWLkBJ3.d.cts} +1 -1
  318. package/dist/types.d.cts +4 -4
  319. package/dist/types.d.ts +4 -4
  320. package/dist/{unsupportedProductExceptions-Dak4AD-t.cjs → unsupportedProductExceptions-CKiri_vO.cjs} +1 -1
  321. package/dist/{unsupportedProductExceptions--t7AQFou.js → unsupportedProductExceptions-ClxlJ6cU.js} +1 -1
  322. package/dist/{urlsParser-BV5yF8sa.cjs → urlsParser-D1nsJgQG.cjs} +1 -1
  323. package/dist/{urlsParser-DUgV_Qy9.js → urlsParser-DzEetiey.js} +1 -1
  324. package/dist/{useAmplitudeOperations-Cco_B3A5.cjs → useAmplitudeOperations-BSsyvkQ2.cjs} +2 -2
  325. package/dist/{useAmplitudeOperations-C6Osqkso.js → useAmplitudeOperations-BottjwT9.js} +2 -2
  326. package/dist/{useAppDetails-CGqtN6sJ.cjs → useAppDetails-BpiBxS_5.cjs} +4 -4
  327. package/dist/{useAppDetails-DwX2Rhed.js → useAppDetails-DDNIsM46.js} +4 -4
  328. package/dist/{useDebounce-BJqnCBcl.cjs → useDebounce-BaIp-A1W.cjs} +1 -1
  329. package/dist/{useDebounce-Ce31ph7m.js → useDebounce-CxPj9WmE.js} +1 -1
  330. package/dist/{useGraphQLConfig-ByOZb3oZ.js → useGraphQLConfig-DZ0ZannB.js} +2 -2
  331. package/dist/{useGraphQLConfig-DItL4BgM.cjs → useGraphQLConfig-Dw8dDh3T.cjs} +2 -2
  332. package/dist/{useIntersection-Czeo04jt.js → useIntersection-B4J9UhaG.js} +1 -1
  333. package/dist/{useIntersection-DnZNLcnu.cjs → useIntersection-DKWc5MY6.cjs} +1 -1
  334. package/dist/{useMessageInterceptor-C9p9No1n.cjs → useMessageInterceptor-CstX10ih.cjs} +1 -1
  335. package/dist/{useMessageInterceptor-tntd2rvB.js → useMessageInterceptor-D5oAekXn.js} +1 -1
  336. package/dist/{userIdentityContext-DBXoLrFu.d.cts → userIdentityContext-D2oFVFzo.d.cts} +1 -1
  337. package/dist/{userIdentityContext-C1HzZFb2.cjs → userIdentityContext-DPFkCSCu.cjs} +6 -6
  338. package/dist/{userIdentityContext-CDfosvOO.js → userIdentityContext-Z65zM-Ae.js} +5 -5
  339. package/dist/{userIdentityContext-W1OWF3cG.d.ts → userIdentityContext-wYRpgkaJ.d.ts} +1 -1
  340. package/dist/utils-2SWrJ12w.cjs +29 -0
  341. package/dist/utils-B1xLx9S8.d.ts +15 -0
  342. package/dist/utils-B3x_9JTY.d.cts +15 -0
  343. package/dist/utils-BZtSmwgh.d.cts +22 -0
  344. package/dist/{utils-C7S9YiFp.js → utils-Bcz5kAgP.js} +40 -2
  345. package/dist/utils-CEKzBcN2.js +27 -0
  346. package/dist/{utils-BA5HXmkL.cjs → utils-CMqFfqZx.cjs} +57 -1
  347. package/dist/{utils-CF13DfA1.js → utils-CVovRwlw.js} +4 -4
  348. package/dist/utils-CqBxIpEV.js +23 -0
  349. package/dist/utils-CsMbZmRw.cjs +33 -0
  350. package/dist/{utils-BTDw2aMx.cjs → utils-DzPSXtmD.cjs} +4 -4
  351. package/dist/utils-bxOCg2i9.d.ts +22 -0
  352. package/package.json +13 -1
  353. package/dist/api-DSFlctlc.cjs +0 -269
  354. package/dist/api-JTNjuOfc.js +0 -190
  355. package/dist/chatSearch-B5jMnCYX.js +0 -315
  356. package/dist/chatSearch-DWMiyWN0.cjs +0 -444
  357. package/dist/index-BCLaqnc2.d.cts +0 -689
  358. package/dist/index-Bs0QtkSu.d.ts +0 -689
  359. /package/dist/{AmplitudeOperations-CgIVPUlr.cjs → AmplitudeOperations-CNyxbBY6.cjs} +0 -0
  360. /package/dist/{AmplitudeOperations-YpyaR7Mp.js → AmplitudeOperations-Oa2efWtF.js} +0 -0
  361. /package/dist/{atomStore-C2OI76yN.js → atomStore-BS6qtYZF.js} +0 -0
  362. /package/dist/{atomStore-DWmT1six.cjs → atomStore-BjRyLFEx.cjs} +0 -0
  363. /package/dist/{types-DQoXDiso.js → types-DtTnp0o0.js} +0 -0
  364. /package/dist/{types-o3zWarRp.cjs → types-a8gm_IaQ.cjs} +0 -0
  365. /package/dist/{utilityTypes-CWJZb9BZ.js → utilityTypes-DynzxjK3.js} +0 -0
  366. /package/dist/{utilityTypes-YGiMSyV7.cjs → utilityTypes-xb8SjKSV.cjs} +0 -0
  367. /package/dist/{variantInfo-DRFLcGc7.cjs → variantInfo-B7IwRpCg.cjs} +0 -0
  368. /package/dist/{variantInfo-58JLeDJb.js → variantInfo-BtOYUGWa.js} +0 -0
@@ -5,6 +5,15 @@ let uuid = require("uuid");
5
5
  uuid = require_chunk.__toESM(uuid);
6
6
 
7
7
  //#region src/hooks/utils.ts
8
+ const isElementPartiallyVisible = (el) => {
9
+ if (!el) return false;
10
+ const rect = el.getBoundingClientRect();
11
+ const windowHeight = window.innerHeight || document.documentElement.clientHeight;
12
+ const windowWidth = window.innerWidth || document.documentElement.clientWidth;
13
+ const verticallyVisible = Math.round(rect.top) < windowHeight && Math.round(rect.bottom) > 0;
14
+ const horizontallyVisible = Math.round(rect.left) < windowWidth && Math.round(rect.right) > 0;
15
+ return verticallyVisible && horizontallyVisible;
16
+ };
8
17
  const createAppLoadedEvent = () => ({
9
18
  eventId: (0, uuid.v4)(),
10
19
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -40,6 +49,35 @@ const createVisitUserEvent = ({ variantInfo }) => {
40
49
  }
41
50
  };
42
51
  };
52
+ const parseTime = (time, timeZone) => {
53
+ const times = time.match(/^([0-1]?\d):([0-5]\d)(AM|PM)$/i);
54
+ const hours = times?.[1];
55
+ const minutes = times?.[2];
56
+ const period = times?.[3];
57
+ if (hours && minutes && period) {
58
+ const date = /* @__PURE__ */ new Date();
59
+ let adjustedHours = 0;
60
+ if (period.toUpperCase() === "PM" && hours !== "12") adjustedHours = parseInt(hours) + 12;
61
+ if (period.toUpperCase() === "AM" && hours !== "12") adjustedHours = parseInt(hours);
62
+ const formattedDate = `${date.toISOString().split("T")[0]}T${String(adjustedHours).padStart(2, "0")}:${minutes}:00`;
63
+ return /* @__PURE__ */ new Date(`${formattedDate}${timeZone}`);
64
+ }
65
+ };
66
+ const isWithinBusinessHours = (startTime, endTime, timeZone) => {
67
+ const start = parseTime(startTime, timeZone);
68
+ let end = parseTime(endTime, timeZone);
69
+ if (!start || !end) return false;
70
+ let now = /* @__PURE__ */ new Date();
71
+ if (end < start) {
72
+ end = new Date(end.getTime() + 1440 * 60 * 1e3);
73
+ now = new Date(now.getTime() + 1440 * 60 * 1e3);
74
+ }
75
+ if (end.getUTCDate() > start.getUTCDate()) {
76
+ const crossingMidnight = new Date(now.getTime() + 1440 * 60 * 1e3);
77
+ return start <= now || crossingMidnight <= end;
78
+ }
79
+ return now >= start && now <= end;
80
+ };
43
81
  let SearchResultsState = /* @__PURE__ */ function(SearchResultsState$1) {
44
82
  SearchResultsState$1[SearchResultsState$1["Loading"] = 0] = "Loading";
45
83
  SearchResultsState$1[SearchResultsState$1["Results"] = 1] = "Results";
@@ -53,6 +91,12 @@ const getSearchResultsState = (isLoadingSearch, searchData) => {
53
91
  };
54
92
 
55
93
  //#endregion
94
+ Object.defineProperty(exports, 'SearchResultsState', {
95
+ enumerable: true,
96
+ get: function () {
97
+ return SearchResultsState;
98
+ }
99
+ });
56
100
  Object.defineProperty(exports, 'createAppLoadedEvent', {
57
101
  enumerable: true,
58
102
  get: function () {
@@ -71,4 +115,16 @@ Object.defineProperty(exports, 'getSearchResultsState', {
71
115
  return getSearchResultsState;
72
116
  }
73
117
  });
74
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQkE1SFhta0wuY2pzIiwibmFtZXMiOlsiVXNlckV2ZW50Q2F0ZWdvcnkiLCJQTFBBdHRyaWJ1dGVDYXRlZ29yeSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9ob29rcy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgVXNlckV2ZW50Q2F0ZWdvcnksXG59IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9zZWFyY2hcIjtcbmltcG9ydCB7IFVzZXJFdmVudCwgVmFyaWFudEluZm8gfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRQYXJ0aWFsbHlWaXNpYmxlID0gKGVsPzogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHdpbmRvd0hlaWdodCA9XG4gICAgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICBjb25zdCB2ZXJ0aWNhbGx5VmlzaWJsZSA9XG4gICAgTWF0aC5yb3VuZChyZWN0LnRvcCkgPCB3aW5kb3dIZWlnaHQgJiYgTWF0aC5yb3VuZChyZWN0LmJvdHRvbSkgPiAwO1xuICBjb25zdCBob3Jpem9udGFsbHlWaXNpYmxlID1cbiAgICBNYXRoLnJvdW5kKHJlY3QubGVmdCkgPCB3aW5kb3dXaWR0aCAmJiBNYXRoLnJvdW5kKHJlY3QucmlnaHQpID4gMDtcbiAgcmV0dXJuIHZlcnRpY2FsbHlWaXNpYmxlICYmIGhvcml6b250YWxseVZpc2libGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQXBwTG9hZGVkRXZlbnQgPSAoKTogVXNlckV2ZW50ID0+ICh7XG4gIGV2ZW50SWQ6IHV1aWQoKSxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpc2l0VXNlckV2ZW50ID0gKHtcbiAgdmFyaWFudEluZm8sXG59OiB7XG4gIHZhcmlhbnRJbmZvOiBWYXJpYW50SW5mbztcbn0pOiBVc2VyRXZlbnQgfCB1bmRlZmluZWQgPT4ge1xuICAvLyB0aGlzIGlzIGEgcGRwIHZpc2l0IGV2ZW50XG4gIGlmICh2YXJpYW50SW5mby52YXJpYW50ID09PSBcInBkcFwiICYmIHZhcmlhbnRJbmZvLnByb2R1Y3RJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IHV1aWQoKSxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0SWQ6IHZhcmlhbnRJbmZvLnByb2R1Y3RJZCxcbiAgICAgICAgcGFyZW50UHJvZHVjdElkOiB2YXJpYW50SW5mby5wYXJlbnRQcm9kdWN0SWQgPz8gXCJcIixcbiAgICAgICAgdXJsOiB2YXJpYW50SW5mby51cmwgPz8gXCJcIixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHRoaXMgaXMgYSBwbHAgdmlzaXQgZXZlbnRcbiAgaWYgKHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09IFwicGxwXCIgJiYgdmFyaWFudEluZm8ucGxwSWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiB1dWlkKCksXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2F0ZWdvcnk6IFBMUEF0dHJpYnV0ZUNhdGVnb3J5LklkLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgaWQ6IHZhcmlhbnRJbmZvLnBscElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09IFwicGFnZV92aXNpdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IHV1aWQoKSxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdXJsOiB2YXJpYW50SW5mby51cmwsXG4gICAgICAgIHBhZ2VWaXNpdENhdGVnb3J5OiB2YXJpYW50SW5mby5wYWdlVmlzaXRDYXRlZ29yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgcGFyc2VUaW1lID0gKHRpbWU6IHN0cmluZywgdGltZVpvbmU6IHN0cmluZykgPT4ge1xuICBjb25zdCB0aW1lcyA9IHRpbWUubWF0Y2goL14oWzAtMV0/XFxkKTooWzAtNV1cXGQpKEFNfFBNKSQvaSk7XG4gIGNvbnN0IGhvdXJzID0gdGltZXM/LlsxXTtcbiAgY29uc3QgbWludXRlcyA9IHRpbWVzPy5bMl07XG4gIGNvbnN0IHBlcmlvZCA9IHRpbWVzPy5bM107XG5cbiAgaWYgKGhvdXJzICYmIG1pbnV0ZXMgJiYgcGVyaW9kKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAvLyBBZGp1c3QgaG91cnMgZm9yIEFNL1BNXG4gICAgbGV0IGFkanVzdGVkSG91cnMgPSAwO1xuICAgIGlmIChwZXJpb2QudG9VcHBlckNhc2UoKSA9PT0gXCJQTVwiICYmIGhvdXJzICE9PSBcIjEyXCIpIHtcbiAgICAgIGFkanVzdGVkSG91cnMgPSBwYXJzZUludChob3VycykgKyAxMjtcbiAgICB9XG5cbiAgICBpZiAocGVyaW9kLnRvVXBwZXJDYXNlKCkgPT09IFwiQU1cIiAmJiBob3VycyAhPT0gXCIxMlwiKSB7XG4gICAgICBhZGp1c3RlZEhvdXJzID0gcGFyc2VJbnQoaG91cnMpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZGF0ZSBzdHJpbmcgd2l0aCB0aW1lIHpvbmVcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX1UJHtTdHJpbmcoXG4gICAgICBhZGp1c3RlZEhvdXJzXG4gICAgKS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWludXRlc306MDBgO1xuICAgIHJldHVybiBuZXcgRGF0ZShgJHtmb3JtYXR0ZWREYXRlfSR7dGltZVpvbmV9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnMgPSAoXG4gIHN0YXJ0VGltZTogc3RyaW5nLFxuICBlbmRUaW1lOiBzdHJpbmcsXG4gIHRpbWVab25lOiBzdHJpbmdcbikgPT4ge1xuICAvLyBQYXJzZSBzdGFydCBhbmQgZW5kIHRpbWVzXG4gIGNvbnN0IHN0YXJ0ID0gcGFyc2VUaW1lKHN0YXJ0VGltZSwgdGltZVpvbmUpO1xuICBsZXQgZW5kID0gcGFyc2VUaW1lKGVuZFRpbWUsIHRpbWVab25lKTtcblxuICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbm93ID0gbmV3IERhdGUoKTtcblxuICAvLyBJZiB0aGUgZW5kIGRhdGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdGFydCBkYXRlLCBhZGQgYSBkYXkgdG8gYm90aCBvZiB0aGVtXG4gIC8vIFRoaXMgaGFuZGxlcyBjb25maWd1cmF0aW9ucyBzdWNoIGFzIHN0YXJ0VGltZSA9IDEwOjAwUE0gYW5kIGVuZFRpbWUgPSA3OjAwQU1cbiAgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgZW5kID0gbmV3IERhdGUoZW5kLmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIG5vdyA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBkYXRlIGNvbnZlcnNpb24gc2hpZnRzIHRoZSBlbmQgZGF0ZSB0byB0aGUgbmV4dCBkYXksIGNvbnNpZGVyIGNvbXBhcmluZyBpdCBhY3Jvc3MgbWlkbmlnaHRcbiAgaWYgKGVuZC5nZXRVVENEYXRlKCkgPiBzdGFydC5nZXRVVENEYXRlKCkpIHtcbiAgICBjb25zdCBjcm9zc2luZ01pZG5pZ2h0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIHJldHVybiBzdGFydCA8PSBub3cgfHwgY3Jvc3NpbmdNaWRuaWdodCA8PSBlbmQ7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB0aW1lIGZhbGxzIGJldHdlZW4gc3RhcnQgYW5kIGVuZFxuICByZXR1cm4gbm93ID49IHN0YXJ0ICYmIG5vdyA8PSBlbmQ7XG59O1xuXG5leHBvcnQgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICBMb2FkaW5nLFxuICBSZXN1bHRzLFxuICBOb1Jlc3VsdHMsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hSZXN1bHRzU3RhdGUgPSAoXG4gIGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbixcbiAgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbFxuKTogU2VhcmNoUmVzdWx0c1N0YXRlID0+IHtcbiAgaWYgKGlzTG9hZGluZ1NlYXJjaCkge1xuICAgIHJldHVybiBTZWFyY2hSZXN1bHRzU3RhdGUuTG9hZGluZztcbiAgfVxuICBpZiAoc2VhcmNoRGF0YSkge1xuICAgIHJldHVybiBTZWFyY2hSZXN1bHRzU3RhdGUuUmVzdWx0cztcbiAgfVxuICByZXR1cm4gU2VhcmNoUmVzdWx0c1N0YXRlLk5vUmVzdWx0cztcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFzQkEsTUFBYSw4QkFBeUM7Q0FDcEQsdUJBQWU7Q0FDZiw0QkFBVyxJQUFJLE1BQU0sRUFBQyxhQUFhO0NBQ25DLFVBQVVBLGtEQUFrQjtDQUM3QjtBQUVELE1BQWEsd0JBQXdCLEVBQ25DLGtCQUcyQjtBQUUzQixLQUFJLFlBQVksWUFBWSxTQUFTLFlBQVksYUFBYSxLQUM1RCxRQUFPO0VBQ0wsdUJBQWU7RUFDZiw0QkFBVyxJQUFJLE1BQU0sRUFBQyxhQUFhO0VBQ25DLFVBQVVBLGtEQUFrQjtFQUM1QixZQUFZO0dBQ1YsV0FBVyxZQUFZO0dBQ3ZCLGlCQUFpQixZQUFZLG1CQUFtQjtHQUNoRCxLQUFLLFlBQVksT0FBTztHQUN6QjtFQUNGO0FBSUgsS0FBSSxZQUFZLFlBQVksU0FBUyxZQUFZLFNBQVMsS0FDeEQsUUFBTztFQUNMLHVCQUFlO0VBQ2YsNEJBQVcsSUFBSSxNQUFNLEVBQUMsYUFBYTtFQUNuQyxVQUFVQSxrREFBa0I7RUFDNUIsWUFBWTtHQUNWLFVBQVVDLHFEQUFxQjtHQUMvQixZQUFZLEVBQ1YsSUFBSSxZQUFZLE9BQ2pCO0dBQ0Y7RUFDRjtBQUdILEtBQUksWUFBWSxZQUFZLGFBQzFCLFFBQU87RUFDTCx1QkFBZTtFQUNmLDRCQUFXLElBQUksTUFBTSxFQUFDLGFBQWE7RUFDbkMsVUFBVUQsa0RBQWtCO0VBQzVCLFlBQVk7R0FDVixLQUFLLFlBQVk7R0FDakIsbUJBQW1CLFlBQVk7R0FDaEM7RUFDRjs7QUFnRUwsSUFBWSxvRUFBTDtBQUNMO0FBQ0E7QUFDQTs7O0FBR0YsTUFBYSx5QkFDWCxpQkFDQSxlQUN1QjtBQUN2QixLQUFJLGdCQUNGLFFBQU8sbUJBQW1CO0FBRTVCLEtBQUksV0FDRixRQUFPLG1CQUFtQjtBQUU1QixRQUFPLG1CQUFtQiJ9
118
+ Object.defineProperty(exports, 'isElementPartiallyVisible', {
119
+ enumerable: true,
120
+ get: function () {
121
+ return isElementPartiallyVisible;
122
+ }
123
+ });
124
+ Object.defineProperty(exports, 'isWithinBusinessHours', {
125
+ enumerable: true,
126
+ get: function () {
127
+ return isWithinBusinessHours;
128
+ }
129
+ });
130
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ01xRmZxWnguY2pzIiwibmFtZXMiOlsiVXNlckV2ZW50Q2F0ZWdvcnkiLCJQTFBBdHRyaWJ1dGVDYXRlZ29yeSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9ob29rcy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgVXNlckV2ZW50Q2F0ZWdvcnksXG59IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7IFNlYXJjaFJlc3VsdCB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9zZWFyY2hcIjtcbmltcG9ydCB7IFVzZXJFdmVudCwgVmFyaWFudEluZm8gfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gXCJ1dWlkXCI7XG5cbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRQYXJ0aWFsbHlWaXNpYmxlID0gKGVsPzogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBmYWxzZTtcblxuICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHdpbmRvd0hlaWdodCA9XG4gICAgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO1xuICBjb25zdCB2ZXJ0aWNhbGx5VmlzaWJsZSA9XG4gICAgTWF0aC5yb3VuZChyZWN0LnRvcCkgPCB3aW5kb3dIZWlnaHQgJiYgTWF0aC5yb3VuZChyZWN0LmJvdHRvbSkgPiAwO1xuICBjb25zdCBob3Jpem9udGFsbHlWaXNpYmxlID1cbiAgICBNYXRoLnJvdW5kKHJlY3QubGVmdCkgPCB3aW5kb3dXaWR0aCAmJiBNYXRoLnJvdW5kKHJlY3QucmlnaHQpID4gMDtcbiAgcmV0dXJuIHZlcnRpY2FsbHlWaXNpYmxlICYmIGhvcml6b250YWxseVZpc2libGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQXBwTG9hZGVkRXZlbnQgPSAoKTogVXNlckV2ZW50ID0+ICh7XG4gIGV2ZW50SWQ6IHV1aWQoKSxcbiAgY3JlYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5BcHBMb2FkZWQsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpc2l0VXNlckV2ZW50ID0gKHtcbiAgdmFyaWFudEluZm8sXG59OiB7XG4gIHZhcmlhbnRJbmZvOiBWYXJpYW50SW5mbztcbn0pOiBVc2VyRXZlbnQgfCB1bmRlZmluZWQgPT4ge1xuICAvLyB0aGlzIGlzIGEgcGRwIHZpc2l0IGV2ZW50XG4gIGlmICh2YXJpYW50SW5mby52YXJpYW50ID09PSBcInBkcFwiICYmIHZhcmlhbnRJbmZvLnByb2R1Y3RJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IHV1aWQoKSxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0SWQ6IHZhcmlhbnRJbmZvLnByb2R1Y3RJZCxcbiAgICAgICAgcGFyZW50UHJvZHVjdElkOiB2YXJpYW50SW5mby5wYXJlbnRQcm9kdWN0SWQgPz8gXCJcIixcbiAgICAgICAgdXJsOiB2YXJpYW50SW5mby51cmwgPz8gXCJcIixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIHRoaXMgaXMgYSBwbHAgdmlzaXQgZXZlbnRcbiAgaWYgKHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09IFwicGxwXCIgJiYgdmFyaWFudEluZm8ucGxwSWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiB1dWlkKCksXG4gICAgICBjcmVhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2F0ZWdvcnk6IFBMUEF0dHJpYnV0ZUNhdGVnb3J5LklkLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgaWQ6IHZhcmlhbnRJbmZvLnBscElkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHZhcmlhbnRJbmZvLnZhcmlhbnQgPT09IFwicGFnZV92aXNpdFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IHV1aWQoKSxcbiAgICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBhZ2VWaXNpdCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgdXJsOiB2YXJpYW50SW5mby51cmwsXG4gICAgICAgIHBhZ2VWaXNpdENhdGVnb3J5OiB2YXJpYW50SW5mby5wYWdlVmlzaXRDYXRlZ29yeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuY29uc3QgcGFyc2VUaW1lID0gKHRpbWU6IHN0cmluZywgdGltZVpvbmU6IHN0cmluZykgPT4ge1xuICBjb25zdCB0aW1lcyA9IHRpbWUubWF0Y2goL14oWzAtMV0/XFxkKTooWzAtNV1cXGQpKEFNfFBNKSQvaSk7XG4gIGNvbnN0IGhvdXJzID0gdGltZXM/LlsxXTtcbiAgY29uc3QgbWludXRlcyA9IHRpbWVzPy5bMl07XG4gIGNvbnN0IHBlcmlvZCA9IHRpbWVzPy5bM107XG5cbiAgaWYgKGhvdXJzICYmIG1pbnV0ZXMgJiYgcGVyaW9kKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG5cbiAgICAvLyBBZGp1c3QgaG91cnMgZm9yIEFNL1BNXG4gICAgbGV0IGFkanVzdGVkSG91cnMgPSAwO1xuICAgIGlmIChwZXJpb2QudG9VcHBlckNhc2UoKSA9PT0gXCJQTVwiICYmIGhvdXJzICE9PSBcIjEyXCIpIHtcbiAgICAgIGFkanVzdGVkSG91cnMgPSBwYXJzZUludChob3VycykgKyAxMjtcbiAgICB9XG5cbiAgICBpZiAocGVyaW9kLnRvVXBwZXJDYXNlKCkgPT09IFwiQU1cIiAmJiBob3VycyAhPT0gXCIxMlwiKSB7XG4gICAgICBhZGp1c3RlZEhvdXJzID0gcGFyc2VJbnQoaG91cnMpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgZGF0ZSBzdHJpbmcgd2l0aCB0aW1lIHpvbmVcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRlID0gYCR7ZGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXX1UJHtTdHJpbmcoXG4gICAgICBhZGp1c3RlZEhvdXJzXG4gICAgKS5wYWRTdGFydCgyLCBcIjBcIil9OiR7bWludXRlc306MDBgO1xuICAgIHJldHVybiBuZXcgRGF0ZShgJHtmb3JtYXR0ZWREYXRlfSR7dGltZVpvbmV9YCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc1dpdGhpbkJ1c2luZXNzSG91cnMgPSAoXG4gIHN0YXJ0VGltZTogc3RyaW5nLFxuICBlbmRUaW1lOiBzdHJpbmcsXG4gIHRpbWVab25lOiBzdHJpbmdcbikgPT4ge1xuICAvLyBQYXJzZSBzdGFydCBhbmQgZW5kIHRpbWVzXG4gIGNvbnN0IHN0YXJ0ID0gcGFyc2VUaW1lKHN0YXJ0VGltZSwgdGltZVpvbmUpO1xuICBsZXQgZW5kID0gcGFyc2VUaW1lKGVuZFRpbWUsIHRpbWVab25lKTtcblxuICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBsZXQgbm93ID0gbmV3IERhdGUoKTtcblxuICAvLyBJZiB0aGUgZW5kIGRhdGUgaXMgZ3JlYXRlciB0aGFuIHRoZSBzdGFydCBkYXRlLCBhZGQgYSBkYXkgdG8gYm90aCBvZiB0aGVtXG4gIC8vIFRoaXMgaGFuZGxlcyBjb25maWd1cmF0aW9ucyBzdWNoIGFzIHN0YXJ0VGltZSA9IDEwOjAwUE0gYW5kIGVuZFRpbWUgPSA3OjAwQU1cbiAgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgZW5kID0gbmV3IERhdGUoZW5kLmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIG5vdyA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgKyAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgfVxuXG4gIC8vIElmIHRoZSBkYXRlIGNvbnZlcnNpb24gc2hpZnRzIHRoZSBlbmQgZGF0ZSB0byB0aGUgbmV4dCBkYXksIGNvbnNpZGVyIGNvbXBhcmluZyBpdCBhY3Jvc3MgbWlkbmlnaHRcbiAgaWYgKGVuZC5nZXRVVENEYXRlKCkgPiBzdGFydC5nZXRVVENEYXRlKCkpIHtcbiAgICBjb25zdCBjcm9zc2luZ01pZG5pZ2h0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIDI0ICogNjAgKiA2MCAqIDEwMDApO1xuICAgIHJldHVybiBzdGFydCA8PSBub3cgfHwgY3Jvc3NpbmdNaWRuaWdodCA8PSBlbmQ7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCB0aW1lIGZhbGxzIGJldHdlZW4gc3RhcnQgYW5kIGVuZFxuICByZXR1cm4gbm93ID49IHN0YXJ0ICYmIG5vdyA8PSBlbmQ7XG59O1xuXG5leHBvcnQgZW51bSBTZWFyY2hSZXN1bHRzU3RhdGUge1xuICBMb2FkaW5nLFxuICBSZXN1bHRzLFxuICBOb1Jlc3VsdHMsXG59XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hSZXN1bHRzU3RhdGUgPSAoXG4gIGlzTG9hZGluZ1NlYXJjaDogYm9vbGVhbixcbiAgc2VhcmNoRGF0YTogU2VhcmNoUmVzdWx0IHwgbnVsbFxuKTogU2VhcmNoUmVzdWx0c1N0YXRlID0+IHtcbiAgaWYgKGlzTG9hZGluZ1NlYXJjaCkge1xuICAgIHJldHVybiBTZWFyY2hSZXN1bHRzU3RhdGUuTG9hZGluZztcbiAgfVxuICBpZiAoc2VhcmNoRGF0YSkge1xuICAgIHJldHVybiBTZWFyY2hSZXN1bHRzU3RhdGUuUmVzdWx0cztcbiAgfVxuICByZXR1cm4gU2VhcmNoUmVzdWx0c1N0YXRlLk5vUmVzdWx0cztcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFRQSxNQUFhLDZCQUE2QixPQUErQjtBQUN2RSxLQUFJLENBQUMsR0FBSSxRQUFPO0NBRWhCLE1BQU0sT0FBTyxHQUFHLHVCQUF1QjtDQUN2QyxNQUFNLGVBQ0osT0FBTyxlQUFlLFNBQVMsZ0JBQWdCO0NBQ2pELE1BQU0sY0FBYyxPQUFPLGNBQWMsU0FBUyxnQkFBZ0I7Q0FDbEUsTUFBTSxvQkFDSixLQUFLLE1BQU0sS0FBSyxJQUFJLEdBQUcsZ0JBQWdCLEtBQUssTUFBTSxLQUFLLE9BQU8sR0FBRztDQUNuRSxNQUFNLHNCQUNKLEtBQUssTUFBTSxLQUFLLEtBQUssR0FBRyxlQUFlLEtBQUssTUFBTSxLQUFLLE1BQU0sR0FBRztBQUNsRSxRQUFPLHFCQUFxQjs7QUFHOUIsTUFBYSw4QkFBeUM7Q0FDcEQsdUJBQWU7Q0FDZiw0QkFBVyxJQUFJLE1BQU0sRUFBQyxhQUFhO0NBQ25DLFVBQVVBLGtEQUFrQjtDQUM3QjtBQUVELE1BQWEsd0JBQXdCLEVBQ25DLGtCQUcyQjtBQUUzQixLQUFJLFlBQVksWUFBWSxTQUFTLFlBQVksYUFBYSxLQUM1RCxRQUFPO0VBQ0wsdUJBQWU7RUFDZiw0QkFBVyxJQUFJLE1BQU0sRUFBQyxhQUFhO0VBQ25DLFVBQVVBLGtEQUFrQjtFQUM1QixZQUFZO0dBQ1YsV0FBVyxZQUFZO0dBQ3ZCLGlCQUFpQixZQUFZLG1CQUFtQjtHQUNoRCxLQUFLLFlBQVksT0FBTztHQUN6QjtFQUNGO0FBSUgsS0FBSSxZQUFZLFlBQVksU0FBUyxZQUFZLFNBQVMsS0FDeEQsUUFBTztFQUNMLHVCQUFlO0VBQ2YsNEJBQVcsSUFBSSxNQUFNLEVBQUMsYUFBYTtFQUNuQyxVQUFVQSxrREFBa0I7RUFDNUIsWUFBWTtHQUNWLFVBQVVDLHFEQUFxQjtHQUMvQixZQUFZLEVBQ1YsSUFBSSxZQUFZLE9BQ2pCO0dBQ0Y7RUFDRjtBQUdILEtBQUksWUFBWSxZQUFZLGFBQzFCLFFBQU87RUFDTCx1QkFBZTtFQUNmLDRCQUFXLElBQUksTUFBTSxFQUFDLGFBQWE7RUFDbkMsVUFBVUQsa0RBQWtCO0VBQzVCLFlBQVk7R0FDVixLQUFLLFlBQVk7R0FDakIsbUJBQW1CLFlBQVk7R0FDaEM7RUFDRjs7QUFLTCxNQUFNLGFBQWEsTUFBYyxhQUFxQjtDQUNwRCxNQUFNLFFBQVEsS0FBSyxNQUFNLGlDQUFpQztDQUMxRCxNQUFNLFFBQVEsUUFBUTtDQUN0QixNQUFNLFVBQVUsUUFBUTtDQUN4QixNQUFNLFNBQVMsUUFBUTtBQUV2QixLQUFJLFNBQVMsV0FBVyxRQUFRO0VBQzlCLE1BQU0sdUJBQU8sSUFBSSxNQUFNO0VBR3ZCLElBQUksZ0JBQWdCO0FBQ3BCLE1BQUksT0FBTyxhQUFhLEtBQUssUUFBUSxVQUFVLEtBQzdDLGlCQUFnQixTQUFTLE1BQU0sR0FBRztBQUdwQyxNQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsVUFBVSxLQUM3QyxpQkFBZ0IsU0FBUyxNQUFNO0VBSWpDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQzNELGNBQ0QsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsUUFBUTtBQUM5Qix5QkFBTyxJQUFJLEtBQUssR0FBRyxnQkFBZ0IsV0FBVzs7O0FBSWxELE1BQWEseUJBQ1gsV0FDQSxTQUNBLGFBQ0c7Q0FFSCxNQUFNLFFBQVEsVUFBVSxXQUFXLFNBQVM7Q0FDNUMsSUFBSSxNQUFNLFVBQVUsU0FBUyxTQUFTO0FBRXRDLEtBQUksQ0FBQyxTQUFTLENBQUMsSUFDYixRQUFPO0NBR1QsSUFBSSxzQkFBTSxJQUFJLE1BQU07QUFJcEIsS0FBSSxNQUFNLE9BQU87QUFDZixRQUFNLElBQUksS0FBSyxJQUFJLFNBQVMsR0FBRyxPQUFVLEtBQUssSUFBSztBQUNuRCxRQUFNLElBQUksS0FBSyxJQUFJLFNBQVMsR0FBRyxPQUFVLEtBQUssSUFBSzs7QUFJckQsS0FBSSxJQUFJLFlBQVksR0FBRyxNQUFNLFlBQVksRUFBRTtFQUN6QyxNQUFNLG1CQUFtQixJQUFJLEtBQUssSUFBSSxTQUFTLEdBQUcsT0FBVSxLQUFLLElBQUs7QUFDdEUsU0FBTyxTQUFTLE9BQU8sb0JBQW9COztBQUk3QyxRQUFPLE9BQU8sU0FBUyxPQUFPOztBQUdoQyxJQUFZLG9FQUFMO0FBQ0w7QUFDQTtBQUNBOzs7QUFHRixNQUFhLHlCQUNYLGlCQUNBLGVBQ3VCO0FBQ3ZCLEtBQUksZ0JBQ0YsUUFBTyxtQkFBbUI7QUFFNUIsS0FBSSxXQUNGLFFBQU8sbUJBQW1CO0FBRTVCLFFBQU8sbUJBQW1CIn0=
@@ -1,6 +1,6 @@
1
- import { logger_default } from "./logger-D5MFf3nW.js";
2
- import { MessageRole, MessageType, isBaseEcommerceEvent, isGA4EcommerceEvent, isLegacyUAEcommerceEvent } from "./models-Dn8Emdzc.js";
3
- import { SpiffyMetricsEventName } from "./amplitudeContext-Cak6ijMq.js";
1
+ import { logger_default } from "./logger-CkhQayOW.js";
2
+ import { MessageRole, MessageType, isBaseEcommerceEvent, isGA4EcommerceEvent, isLegacyUAEcommerceEvent } from "./models-C48U9q70.js";
3
+ import { SpiffyMetricsEventName } from "./amplitudeContext-YRS1QOO3.js";
4
4
  import { PLPAttributeCategory, ResponseCategory, UserEventCategory } from "@spiffy-ai/commerce-api-client";
5
5
 
6
6
  //#region src/application/utils/analyticsUtils.ts
@@ -603,4 +603,4 @@ const validateEmail = (value) => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
603
603
 
604
604
  //#endregion
605
605
  export { NodeSelector, SelectorFactory, StringUtils, applyOverrides, coreContextToApiContext, coreSupportedEventRequestToApiRequest, coreUserEventToApiUserEvent, divideArray, getRecentProductImageUrls, initAmplitude, initDataLayerWrapper, messageFromFormSubmittedEvent, messageFromQueryEvent, messageFromResponse, messageFromSuggestionEvent, messageRequestToCommerceMessageRequest, prepareMerchantPage, validateEmail };
606
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ0YxM0RmQTEuanMiLCJuYW1lcyI6WyJldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIm5vZGU6IE5vZGUgfCBudWxsIHwgdW5kZWZpbmVkIiwib3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9hbmFseXRpY3NVdGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9jb3JlQ29udGV4dFRvQXBpQ29udGV4dC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9jb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvZGl2aWRlQXJyYXkudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvaW1hZ2VGaWx0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVyY2hhbnRVdGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbVF1ZXJ5RXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21SZXNwb25zZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9uZXh0TWVzc2FnZVJlcXVlc3RUb0FwaVJlcXVlc3QudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbm9kZVNlbGVjdG9yLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL292ZXJyaWRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9zdHJpbmdVdGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9zdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvdmFsaWRhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nZ2VyIGZyb20gXCJzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXJcIjtcbmltcG9ydCB7XG4gIGlzTGVnYWN5VUFFY29tbWVyY2VFdmVudCxcbiAgaXNHQTRFY29tbWVyY2VFdmVudCxcbiAgaXNCYXNlRWNvbW1lcmNlRXZlbnQsXG4gIEJhc2VFY29tbWVyY2VFdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tIFwic3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dFwiO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIGRhdGFMYXllcjogYW55W107XG4gIH1cbn1cblxuY29uc3QgTk9STUFMSVpFRF9BRERfVE9fQ0FSVF9FVkVOVF9OQU1FUyA9IFtcImFkZHRvY2FydFwiLCBcImFkZGVkdG9jYXJ0XCJdO1xuY29uc3QgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTID0gMTA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgR29vZ2xlIEFuYWx5dGljcyBldmVudCBpcyBhbiBhZGRfdG9fY2FydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNBZGRUb0NhcnRFdmVudCA9IChldmVudDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFdmVudCA9IGV2ZW50LnJlcGxhY2UoL1stX10vZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMuc29tZSgobmFtZSkgPT5cbiAgICBub3JtYWxpemVkRXZlbnQuaW5jbHVkZXMobmFtZSlcbiAgKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIGFuIGFkZF90b19jYXJ0IGV2ZW50IGluIEFtcGxpdHVkZS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHRyYWNrLlxuICovXG5jb25zdCBoYW5kbGVBZGRUb0NhcnRFdmVudCA9IChcbiAgZXZlbnQ6IEJhc2VFY29tbWVyY2VFdmVudCxcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAoaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50KGV2ZW50KSkge1xuICAgIGV2ZW50UHJvcHMgPSB7XG4gICAgICBpdGVtczogZXZlbnQuZWNvbW1lcmNlLmFkZC5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBwcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICBwcmljZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3QucXVhbnRpdHksXG4gICAgICB9KSksXG4gICAgICBjdXJyZW5jeTogZXZlbnQuZWNvbW1lcmNlLmFkZC5jdXJyZW5jeUNvZGUsXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJsZWdhY3lfdW5pdmVyc2FsX2FuYWx5dGljc1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNHQTRFY29tbWVyY2VFdmVudChldmVudCkpIHtcbiAgICBldmVudFByb3BzID0ge1xuICAgICAgaXRlbXM6IGV2ZW50LmVjb21tZXJjZS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0uaXRlbV9jYXRlZ29yeSxcbiAgICAgICAgcHJpY2U6IGl0ZW0ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgfSkpLFxuICAgICAgY3VycmVuY3k6IGV2ZW50LmVjb21tZXJjZS5jdXJyZW5jeSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcImdvb2dsZV9hbmFseXRpY3NfNFwiLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRQcm9wcyA9IHtcbiAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHsgLi4uZXZlbnQgfSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcInVua25vd25cIixcbiAgICB9O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5BZGRUb0NhcnRDbGlja2VkLCB7XG4gICAgZXZlbnRQcm9wcyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSB3aW5kb3cuZGF0YUxheWVyLnB1c2ggbWV0aG9kIHRvIGludGVyY2VwdCBhZGRfdG9fY2FydCBldmVudHMgYW5kIHNlbmQgdGhlbSB0byBBbXBsaXR1ZGUuXG4gKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIGRhdGFMYXllciBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0RGF0YUxheWVyV3JhcHBlciA9IChcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgLy8gY3VycmVudGx5LCBvdXIgYnVuZGxlIGlzIGFsd2F5cyBsb2FkZWQgYWZ0ZXIgR1RNIGhhcyBpbml0aWFsaXplZCBHQS9kYXRhTGF5ZXJcbiAgLy8gd2UnbGwgbmVlZCB0aGlzIGNoZWNrIGhlcmUgaWYvd2hlbiB3ZSBsb2FkIHNwaWZmeSBiZWZvcmUvb3V0c2lkZSBvZiBHVE1cbiAgY29uc3QgY2hlY2tBbmRJbml0aWFsaXplID0gKCkgPT4ge1xuICAgIGlmICghd2luZG93LmRhdGFMYXllciB8fCAhKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55KS5wdXNoKSB7XG4gICAgICBhdHRlbXB0cyArPSAxO1xuXG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gQ0hFQ0tfREFUQV9MQVlFUl9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICAgIGBbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgbm90IGF2YWlsYWJsZSBhZnRlciAke0NIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTfSBhdHRlbXB0c2BcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGNoZWNrQW5kSW5pdGlhbGl6ZSwgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgXCJbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgaXMgYXZhaWxhYmxlLCB3cmFwcGluZyBwdXNoIGZ1bmN0aW9uLi4uXCJcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpbmFsUHVzaCA9IHdpbmRvdy5kYXRhTGF5ZXIucHVzaDtcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2ggPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzQmFzZUVjb21tZXJjZUV2ZW50KGFyZ3NbMF0pICYmXG4gICAgICAgIGlzQWRkVG9DYXJ0RXZlbnQoKGFyZ3NbMF0gYXMgYW55KS5ldmVudClcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVBZGRUb0NhcnRFdmVudChhcmdzWzBdIGFzIEJhc2VFY29tbWVyY2VFdmVudCwgdHJhY2spO1xuICAgICAgfVxuXG4gICAgICAvLyBJTVBPUlRBTlQ6IGNhbGwgdGhlIG9yaWdpbmFsIHB1c2ggbWV0aG9kIHNvIHRoYXQgdGhlIGV2ZW50IGlzIHN0aWxsIGxvZ2dlZCB0byBHQVxuICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaC5hcHBseSh3aW5kb3cuZGF0YUxheWVyLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIGNoZWNrQW5kSW5pdGlhbGl6ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRBbXBsaXR1ZGUgPSAoXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBuZWVkZWQgYW55bW9yZSBpZiBBbXBsaXR1ZGUgaXMgaW5pdGlhbGl6ZWQgdmlhIGNvbnRleHQuXG4gIC8vIEZvciBub3csIHdlJ2xsIGtlZXAgaXQgYW5kIHBhc3MgdGhlIHRyYWNrIGZ1bmN0aW9uLlxuICAvLyBJZiBpdCdzIHRydWx5IHJlZHVuZGFudCwgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIuXG4gIHRyYWNrKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkKTsgLy8gRXhhbXBsZSB1c2FnZSwgYWRqdXN0IGFzIG5lZWRlZFxufTtcbiIsImltcG9ydCB7IENvbnRleHQgYXMgQXBpQ29udGV4dCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDb250ZXh0IGFzIENvcmVDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGNvcmVDb250ZXh0VG9BcGlDb250ZXh0ID0gKGNvbnRleHQ6IENvcmVDb250ZXh0KTogQXBpQ29udGV4dCA9PiAoe1xuICBjaGF0X2lkOiBjb250ZXh0LmNoYXRJZCxcbiAgb3JnX2lkOiBjb250ZXh0Lm9yZ0lkLFxuICB1c2VyX2lkOiBjb250ZXh0LnVzZXJJZCxcbiAgb3JnX3Nob3J0X25hbWU6IGNvbnRleHQub3JnU2hvcnROYW1lLFxuICBzb3VyY2U6IGNvbnRleHQuc291cmNlLFxuICBlbnY6IGNvbnRleHQuZW52LFxufSk7XG4iLCJpbXBvcnQge1xuICBVc2VyRXZlbnQgYXMgQXBpVXNlckV2ZW50LFxuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgUExQSWRBdHRyaWJ1dGVzLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFVzZXJFdmVudCBhcyBDb3JlVXNlckV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCA9IChkYXRhOiBDb3JlVXNlckV2ZW50KTogQXBpVXNlckV2ZW50ID0+IHtcbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHx8XG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuQWRkVG9DYXJ0XG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgcHJvZHVjdF9pZDogZGF0YS5hdHRyaWJ1dGVzLnByb2R1Y3RJZCxcbiAgICAgICAgcGFyZW50X3Byb2R1Y3RfaWQ6IGRhdGEuYXR0cmlidXRlcy5wYXJlbnRQcm9kdWN0SWQsXG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2F0ZWdvcnk6IFBMUEF0dHJpYnV0ZUNhdGVnb3J5LklkLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgLy8gd2UncmUgb25seSBoYW5kbGluZyBpZCBhdHRyaWJ1dGVzIGZvciBub3dcbiAgICAgICAgICBpZDogKGRhdGEuYXR0cmlidXRlcy5hdHRyaWJ1dGVzIGFzIFBMUElkQXR0cmlidXRlcykuaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgcXVlcnk6IGRhdGEuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHNlYXJjaF90ZXJtOiBkYXRhLmF0dHJpYnV0ZXMuc2VhcmNoVGVybSxcbiAgICAgICAgc2VsZWN0ZWRfZmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLnNlbGVjdGVkRmlsdGVycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc3VnZ2VzdGlvbl9pZDogZGF0YS5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25JZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgcGFnZV92aXNpdF9jYXRlZ29yeTogZGF0YS5hdHRyaWJ1dGVzLnBhZ2VWaXNpdENhdGVnb3J5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZpbGxlZF9zY2hlbWE6IHsgLi4uZGF0YS5hdHRyaWJ1dGVzLmZpbGxlZFNjaGVtYSB9LFxuICAgICAgICBmb3JtX3Jlc3BvbnNlX2lkOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQsXG4gICAgICAgIGZvcm1fdHlwZTogZGF0YS5hdHRyaWJ1dGVzLmZvcm1UeXBlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBhcHBfbG9hZGVkIGV2ZW50LCB3aGVuIHdlIHN0YXJ0IHRvIHVzZSBhcHBfdW5sb2FkZWQgd2UgbmVlZCB0byBoYW5kbGUgaXQgaGVyZVxuICByZXR1cm4ge1xuICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gIH07XG59O1xuIiwiZXhwb3J0IGNvbnN0IGRpdmlkZUFycmF5ID0gPFQ+KGFycmF5OiBUW10sIHNpemU6IG51bWJlcikgPT4ge1xuICBjb25zdCByb3dzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAxKSB7XG4gICAgcm93cy5wdXNoKGFycmF5LmZpbHRlcigoXzogVCwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggJSBzaXplID09PSBpKSk7XG4gIH1cbiAgcmV0dXJuIHJvd3M7XG59O1xuIiwiaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVR5cGUsIFByb2R1Y3RNZXNzYWdlTWV0YWRhdGEgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGdldFJlY2VudFByb2R1Y3RJbWFnZVVybHMgPSAobGFzdE1lc3NhZ2VzOiBNZXNzYWdlW10sIGN1cnJlbnRQcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICBjb25zdCBwcm9kdWN0TWVzc2FnZXMgPSBsYXN0TWVzc2FnZXNcbiAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YT8uaW1hZ2VVcmwpXG4gICAgLm1hcCgobSkgPT4gbSBhcyBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhKTtcbiAgLy8gcHV0IGFkZGVkIHByb2R1Y3QgaW1hZ2UgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdFxuICByZXR1cm4gW1xuICAgIC4uLnByb2R1Y3RNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ubWV0YWRhdGE/LmlkID09PSBjdXJyZW50UHJvZHVjdElkKSxcbiAgICAuLi5wcm9kdWN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLm1ldGFkYXRhPy5pZCAhPT0gY3VycmVudFByb2R1Y3RJZCksXG4gIF0ubWFwKChtKSA9PiBtLm1ldGFkYXRhIS5pbWFnZVVybCEpO1xufTtcbiIsImV4cG9ydCBjb25zdCBwcmVwYXJlTWVyY2hhbnRQYWdlID0gKCkgPT4ge1xuICBsZXQgbWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0ndmlld3BvcnQnXVwiKTtcbiAgaWYgKG1ldGFWaWV3cG9ydCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtZXRhVmlld3BvcnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgIGNvbnN0IGhhc01heGltdW1TY2FsZSA9IGNvbnRlbnQ/LmluY2x1ZGVzKFwibWF4aW11bS1zY2FsZT0xXCIpXG4gICAgaWYgKCFoYXNNYXhpbXVtU2NhbGUpIHtcbiAgICAgIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIGAke2NvbnRlbnR9LCBtYXhpbXVtLXNjYWxlPTFgKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xuICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpXG4gIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MVwiKVxuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFWaWV3cG9ydCk7XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQge1xuICBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCA9IChcbiAgZXZlbnQ6IFVzZXJFdmVudCxcbiAgZm9ybVJlc3BvbnNlQXR0cmlidXRlczogRm9ybVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddLFxuKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSAhPT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmb3JtU3RyaW5nQ29udGVudHMgPSBPYmplY3QuZW50cmllcyhmb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7dmFsdWUudGl0bGV9OiAke2V2ZW50LmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hW2tleV19YClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGNvbnRlbnQ6IGZvcm1TdHJpbmdDb250ZW50cyxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHF1ZXJ5IFVzZXJFdmVudCBvYmplY3QgaW50byBhIE1lc3NhZ2Ugb2JqZWN0IGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSB1c2VyIGV2ZW50IG9iamVjdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgcXVlcnkgZXZlbnQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VGcm9tUXVlcnlFdmVudCA9IChldmVudDogVXNlckV2ZW50KTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBjb250ZW50OiBldmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzZWFyY2hUZXJtOiBldmVudC5hdHRyaWJ1dGVzLnNlYXJjaFRlcm0gfHwgJycsXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZXZlbnQuYXR0cmlidXRlcy5zZWxlY3RlZEZpbHRlcnMgfHwgW10sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IFJlc3BvbnNlQ2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVJvbGUsIE1lc3NhZ2VUeXBlLCBSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBzZXJ2ZXIgUmVzcG9uc2Ugb2JqZWN0IGludG8gYSBNZXNzYWdlIG9iamVjdCBmb3IgcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBjb250YWluaW5nIG1vZGVsIGdlbmVyYXRlZCBjb250ZW50XG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBrbm93biBhdHRyaWJ1dGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbVJlc3BvbnNlID0gKHJlc3BvbnNlPzogUmVzcG9uc2UpOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY29udGVudDogcmVzcG9uc2UuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXcsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICByZXZpZXc6IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmV2aWV3LFxuICAgICAgICByZXZpZXdlcjogcmVzcG9uc2UuYXR0cmlidXRlcy5yZXZpZXdlcixcbiAgICAgICAgc3RhcnM6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHRpdGxlOiByZXNwb25zZS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByaWNoSW5mb3JtYXRpb246IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcixcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlBhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5yZXNwb25zZS5hdHRyaWJ1dGVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZm9ybVR5cGU6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5Py5mb3JtVHlwZSxcbiAgICAgICAgZmllbGRzOiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdGl0bGU6IHZhbHVlLnRpdGxlLFxuICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgZm9ybWF0OiB2YWx1ZS5mb3JtYXQsXG4gICAgICAgICAgcmVxdWlyZWQ6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKGtleSksXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5PcmRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLk9yZGVyLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVJvbGUsIE1lc3NhZ2VUeXBlLCBTdWdnZXN0aW9uLCBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgVXNlckV2ZW50IG9iamVjdCBpbnRvIGEgTWVzc2FnZSBvYmplY3QgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIFVzZXJFdmVudCBvYmplY3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbnMgQSBsaXN0IG9mIGdlbmVyYXRlZCBzdWdnZXN0aW9ucyB0byBtYXRjaCB0aGUgZXZlbnQgdG9cbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgc3VnZ2VzdGlvbiBjbGljayBldmVudCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQgPSAoXG4gIGV2ZW50OiBVc2VyRXZlbnQsXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW10sXG4pOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIGNvbnN0IHsgc3VnZ2VzdGlvbklkIH0gPSBldmVudC5hdHRyaWJ1dGVzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBldmVudC5ldmVudElkLFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlN1Z2dlc3Rpb25DbGlja2VkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzdWdnZXN0aW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25Db250ZW50OiBzdWdnZXN0aW9ucy5maW5kKChzKSA9PiBzLmlkID09PSBzdWdnZXN0aW9uSWQpPy5jb250ZW50ID8/ICcnLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QgYXMgQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQgfSBmcm9tICcuL2NvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCA9IChcbiAgZGF0YTogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0ID0+ICh7XG4gIGNvbnRleHQ6IHtcbiAgICBjaGF0X2lkOiBkYXRhLmNvbnRleHQuY2hhdElkLFxuICAgIG9yZ19pZDogZGF0YS5jb250ZXh0Lm9yZ0lkLFxuICAgIG9yZ19zaG9ydF9uYW1lOiBkYXRhLmNvbnRleHQub3JnU2hvcnROYW1lLFxuICAgIHVzZXJfaWQ6IGRhdGEuY29udGV4dC51c2VySWQsXG4gICAgc291cmNlOiBkYXRhLmNvbnRleHQuc291cmNlLFxuICAgIGVudjogZGF0YS5jb250ZXh0LmVudixcbiAgfSxcbiAgaWQ6IGRhdGEuaWQsXG4gIGZlYXR1cmVfZmxhZ3M6IGRhdGEuZmVhdHVyZUZsYWdzLFxuICB1c2VyX2V2ZW50czogZGF0YS51c2VyRXZlbnRzPy5tYXAoKHVzZXJFdmVudCkgPT4gY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KHVzZXJFdmVudCkpLFxuICBnZW5lcmF0aW9uX3BhcmFtczoge1xuICAgIG1vZGVsOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm1vZGVsLFxuICAgIG1heF90b2tlbnM6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ubWF4VG9rZW5zLFxuICAgIHN0b3A6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8uc3RvcCxcbiAgICBzdHJlYW06IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8uc3RyZWFtLFxuICAgIHRlbXBlcmF0dXJlOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnRlbXBlcmF0dXJlLFxuICAgIHRvcF9wOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnRvcFAsXG4gICAgbnVtX3N1Z2dlc3Rpb25zOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm51bVN1Z2dlc3Rpb25zLFxuICAgIHJlc3BvbnNlX3N5c3RlbV9wcm9tcHQ6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ucmVzcG9uc2VTeXN0ZW1Qcm9tcHQsXG4gICAgc3VnZ2VzdGlvbl9zeXN0ZW1fcHJvbXB0OiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN1Z2dlc3Rpb25TeXN0ZW1Qcm9tcHQsXG4gICAgcmVzcG9uc2VfY2FjaGluZzogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5yZXNwb25zZUNhY2hpbmcsXG4gIH0sXG59KTtcbiIsImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOb2RlU2VsZWN0b3Ige1xuICBwcml2YXRlIHBhdHRlcm46IHN0cmluZztcbiAgcHJpdmF0ZSByb290OiBEb2N1bWVudDtcblxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHRoaXMucm9vdCA9IGRvY3VtZW50O1xuICB9XG5cbiAgZ2V0UGF0dGVybigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXR0ZXJuO1xuICB9XG5cbiAgc2V0Um9vdChyb290OiBEb2N1bWVudCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gIH1cblxuICBnZXRSb290KCkge1xuICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gIH1cblxuICBhYnN0cmFjdCBwYXJzZSgpOiBOb2RlIHwgbnVsbDtcbn1cblxuY2xhc3MgUXVlcnlTZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb290KCkucXVlcnlTZWxlY3Rvcih0aGlzLmdldFBhdHRlcm4oKSk7XG4gIH1cbn1cblxuY2xhc3MgSURTZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb290KCkuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRQYXR0ZXJuKCkpIGFzIE5vZGU7XG4gIH1cbn1cblxuY2xhc3MgWHBhdGhTZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb290KCk/LmV2YWx1YXRlKFxuICAgICAgdGhpcy5nZXRQYXR0ZXJuKCksXG4gICAgICB0aGlzLmdldFJvb3QoKSxcbiAgICAgIG51bGwsXG4gICAgICBYUGF0aFJlc3VsdC5GSVJTVF9PUkRFUkVEX05PREVfVFlQRSxcbiAgICAgIG51bGwsXG4gICAgKT8uc2luZ2xlTm9kZVZhbHVlIGFzIE5vZGU7XG4gIH1cbn1cblxuY2xhc3MgQ2hhaW5TZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgc2VsZWN0b3JJbmRleCA9IDA7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gdGhpcy5nZXRQYXR0ZXJuKCkuc3BsaXQoJ0AnKTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBzZWxlY3RvcnMubGVuZ3RoIC0gMTtcblxuICAgIGNvbnN0IHBhcnNlQ2hhaW4gPSAocGF0dGVybjogc3RyaW5nLCBwcmV2Tm9kZT86IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBTZWxlY3RvckZhY3RvcnkucGFyc2UocGF0dGVybik7XG5cbiAgICAgIGlmIChwcmV2Tm9kZSkge1xuICAgICAgICBzZWxlY3Rvci5zZXRSb290KHByZXZOb2RlIGFzIERvY3VtZW50KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBzZWxlY3Rvci5wYXJzZSgpO1xuICAgICAgaWYgKHNlbGVjdG9ySW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIGxldCBub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGN1cnJlbnROb2RlIHx8IGRvY3VtZW50O1xuICAgICAgaWYgKChjdXJyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCk/LnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgbm9kZSA9IChjdXJyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCkuc2hhZG93Um9vdDtcbiAgICAgIH1cblxuICAgICAgaWYgKChjdXJyZW50Tm9kZSBhcyBIVE1MSUZyYW1lRWxlbWVudCk/LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgbm9kZSA9IChjdXJyZW50Tm9kZSBhcyBIVE1MSUZyYW1lRWxlbWVudCkuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZUNoYWluKHNlbGVjdG9yc1srK3NlbGVjdG9ySW5kZXhdLnRyaW0oKSwgbm9kZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwYXJzZUNoYWluKHNlbGVjdG9yc1tzZWxlY3RvckluZGV4XS50cmltKCkpO1xuICB9XG59XG5cbmNsYXNzIEVtcHR5IGV4dGVuZHMgTm9kZVNlbGVjdG9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJycpO1xuICB9XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0b3JGYWN0b3J5IHtcbiAgc3RhdGljIHBhcnNlKGNvbXBvc2VkU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbXBvc2VkU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBuZXcgRW1wdHkoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGxpdCA9IGNvbXBvc2VkU2VsZWN0b3Iuc3BsaXQoJ3wnKTtcbiAgICBjb25zdCB0eXBlID0gc3BsaXRbMF07XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBzcGxpdFsxXTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5pZChzZWxlY3Rvcik7XG4gICAgICBjYXNlICdxdWVyeSc6XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcbiAgICAgIGNhc2UgJ3hwYXRoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMueHBhdGgoc2VsZWN0b3IpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVjayhzZWxlY3Rvcj86IE5vZGVTZWxlY3Rvcikge1xuICAgIHJldHVybiBzZWxlY3RvciA/PyBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBjaGFpbihwYXR0ZXJuPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgQ2hhaW5TZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG5cbiAgc3RhdGljIGlkKHBhdHRlcm4/OiBzdHJpbmcpOiBOb2RlU2VsZWN0b3Ige1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IElEU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBxdWVyeShwYXR0ZXJuPzogc3RyaW5nKTogTm9kZVNlbGVjdG9yIHtcbiAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBRdWVyeVNlbGVjdG9yKHBhdHRlcm4pIDogbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgeHBhdGgocGF0dGVybj86IHN0cmluZyk6IE5vZGVTZWxlY3RvciB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgWHBhdGhTZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG59XG4iLCJleHBvcnQgdHlwZSBSZXBsYWNlT3A8VD4gPSB7ICRyZXBsYWNlOiBUIH07XG5leHBvcnQgdHlwZSBEZWxldGVPcCA9IHsgJGRlbGV0ZTogdHJ1ZSB9O1xuXG4vLyBUcmVhdCB0aGVzZSBhcyBhdG9taWMgdmFsdWVzIChub3QgcmVjdXJzZWQgaW50bylcbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBSZWdFeHAgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik7XG5cbnR5cGUgUHJpbWl0aXZlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IGJpZ2ludCB8IHN5bWJvbCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogT3ZlcnJpZGU8VD4gaXMgYSBEZWVwUGFydGlhbC1saWtlIHR5cGUgd2l0aCBzcGVjaWFsIG9wZXJhdG9yczpcbiAqIC0geyAkcmVwbGFjZTogVCB9IHRvIHJlcGxhY2UgYW4gZW50aXJlIHN1YnRyZWUvYXJyYXlcbiAqIC0geyAkZGVsZXRlOiB0cnVlIH0gdG8gZGVsZXRlIGFuIG9iamVjdCBrZXlcbiAqXG4gKiBBcnJheXMgYmVoYXZpb3I6XG4gKiAtIEFycmF5cyBvZiBvYmplY3RzOiBtZXJnZS1ieS1pbmRleCBieSBkZWZhdWx0ICh1bmxlc3MgYGFycmF5U3RyYXRlZ3k6ICdyZXBsYWNlJ2Agb3IgYCRyZXBsYWNlYCBpcyB1c2VkKVxuICogLSBBcnJheXMgb2YgcHJpbWl0aXZlcyAoc3RyaW5nL251bWJlci9ib29sZWFuLy4uLik6IHJlcGxhY2VkIGJ5IGRlZmF1bHQgd2hlbiBhIHBhdGNoIGFycmF5IGlzIHByb3ZpZGVkXG4gKi9cbmV4cG9ydCB0eXBlIE92ZXJyaWRlPFQ+ID1cbiAgLy8gYXRvbWljXG4gIFQgZXh0ZW5kcyBQcmltaXRpdmUgfCBCdWlsdGluXG4gICAgPyBUIHwgUmVwbGFjZU9wPFQ+IHwgRGVsZXRlT3BcbiAgICA6IC8vIGFycmF5c1xuICAgICAgVCBleHRlbmRzIChpbmZlciBVKVtdXG4gICAgICA/IEFycmF5PE92ZXJyaWRlPFU+IHwgdW5kZWZpbmVkPiB8IFJlcGxhY2VPcDxUPlxuICAgICAgOiAvLyBtYXBzL3NldHMg4oCTIGtlZXAgc2ltcGxlOiBvbmx5IGFsbG93IGZ1bGwgcmVwbGFjZVxuICAgICAgICBUIGV4dGVuZHMgTWFwPHVua25vd24sIHVua25vd24+IHwgU2V0PHVua25vd24+XG4gICAgICAgID8gUmVwbGFjZU9wPFQ+XG4gICAgICAgIDogLy8gb2JqZWN0c1xuICAgICAgICAgIFQgZXh0ZW5kcyBvYmplY3RcbiAgICAgICAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBPdmVycmlkZTxUW0tdPiB8IERlbGV0ZU9wIHwgbnVsbCB9IHwgUmVwbGFjZU9wPFQ+XG4gICAgICAgICAgOiBUO1xuXG5leHBvcnQgdHlwZSBNZXJnZU9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBIb3cgdG8gdHJlYXQgYXJyYXlzIHdoZW4gcGF0Y2ggcHJvdmlkZXMgYW4gYXJyYXkgKG5vdCAkcmVwbGFjZSk6XG4gICAqIC0gJ3JlcGxhY2UnOiBhbHdheXMgdXNlIHBhdGNoIGFycmF5IGFzIHdob2xlIHZhbHVlXG4gICAqIC0gJ21lcmdlQnlJbmRleCc6IG1lcmdlIGVhY2ggaW5kZXggcmVjdXJzaXZlbHkgKGRlZmF1bHQgZm9yIGFycmF5cyBvZiBvYmplY3RzKVxuICAgKiBOb3RlOiBBcnJheXMgb2YgcHJpbWl0aXZlcyBhcmUgcmVwbGFjZWQgYnkgZGVmYXVsdCByZWdhcmRsZXNzIG9mIHRoaXMgb3B0aW9uLlxuICAgKi9cbiAgYXJyYXlTdHJhdGVneT86ICdyZXBsYWNlJyB8ICdtZXJnZUJ5SW5kZXgnO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgYSBgbnVsbGAgcGF0Y2ggdmFsdWUgZGVsZXRlcyB0aGUga2V5IGZyb20gYW4gb2JqZWN0IChSRkMgNzM5Ni1pc2gpXG4gICAqL1xuICBudWxsRGVsZXRlcz86IGJvb2xlYW47XG59O1xuXG4vLyBQcmV2ZW50cyBUIGZyb20gYmVpbmcgaW5mZXJyZWQgZnJvbSB0aGUgJ3BhdGNoJyBwYXJhbWV0ZXI7IGl0IG11c3QgYmUgaW5mZXJyZWQgZnJvbSAnYmFzZScuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTQ4MjkjaXNzdWVjb21tZW50LTUwNDA0MjU0NlxudHlwZSBOb0luZmVyPFQ+ID0gW1RdW1QgZXh0ZW5kcyB1bmtub3duID8gMCA6IG5ldmVyXTtcblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh4OiB1bmtub3duKTogeCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgISF4ICYmXG4gICAgdHlwZW9mIHggPT09ICdvYmplY3QnICYmXG4gICAgIUFycmF5LmlzQXJyYXkoeCkgJiZcbiAgICAhKHggaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICEoeCBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSZXBsYWNlKHg6IHVua25vd24pOiB4IGlzIFJlcGxhY2VPcDx1bmtub3duPiB7XG4gIHJldHVybiAhIXggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICckcmVwbGFjZScgaW4gKHggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xufVxuZnVuY3Rpb24gaXNEZWxldGUoeDogdW5rbm93bik6IHggaXMgRGVsZXRlT3Age1xuICByZXR1cm4gISF4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAoeCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuJGRlbGV0ZSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQcmltaXRpdmVWYWx1ZSh4OiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGNvbnN0IHQgPSB0eXBlb2YgeDtcbiAgcmV0dXJuIChcbiAgICB4ID09PSBudWxsIHx8XG4gICAgdCA9PT0gJ3N0cmluZycgfHxcbiAgICB0ID09PSAnbnVtYmVyJyB8fFxuICAgIHQgPT09ICdib29sZWFuJyB8fFxuICAgIHQgPT09ICdiaWdpbnQnIHx8XG4gICAgdCA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0ID09PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5T2ZQcmltaXRpdmVzKGFycjogdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIGlmIChhcnIubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIGFtYmlndW91cywgZGVmYXVsdCB0byBtZXJnZS1ieS1pbmRleCBvbiBlbXB0eVxuICAvLyBJZiBldmVyeSBkZWZpbmVkIGVsZW1lbnQgaXMgcHJpbWl0aXZlLCB0cmVhdCBhcyBwcmltaXRpdmVzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgdiA9IGFycltpXTtcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmICFpc1ByaW1pdGl2ZVZhbHVlKHYpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQW55KGJhc2VBbnk6IHVua25vd24sIHBhdGNoQW55OiB1bmtub3duLCBvcHRzOiBNZXJnZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKGlzUmVwbGFjZShwYXRjaEFueSkpIHJldHVybiBwYXRjaEFueS4kcmVwbGFjZSBhcyB1bmtub3duO1xuICBpZiAoaXNEZWxldGUocGF0Y2hBbnkpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBjYWxsZXIgZGVsZXRlcyB0aGUga2V5XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZUFueSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaEFueSkpIHtcbiAgICAgIGNvbnN0IGJhc2VBcnIgPSBiYXNlQW55IGFzIHVua25vd25bXTtcbiAgICAgIGNvbnN0IHBhdGNoQXJyID0gcGF0Y2hBbnkgYXMgdW5rbm93bltdO1xuICAgICAgY29uc3Qgc2hvdWxkUmVwbGFjZSA9XG4gICAgICAgIG9wdHMuYXJyYXlTdHJhdGVneSA9PT0gJ3JlcGxhY2UnIHx8XG4gICAgICAgIGlzQXJyYXlPZlByaW1pdGl2ZXMoYmFzZUFycikgfHxcbiAgICAgICAgaXNBcnJheU9mUHJpbWl0aXZlcyhwYXRjaEFycik7XG4gICAgICBpZiAoc2hvdWxkUmVwbGFjZSkgcmV0dXJuIHBhdGNoQW55IGFzIHVua25vd247XG4gICAgICBjb25zdCBvdXQgPSBiYXNlQXJyLnNsaWNlKCk7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heChvdXQubGVuZ3RoLCBwYXRjaEFyci5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBwVmFsID0gcGF0Y2hBcnJbaV07XG4gICAgICAgIGlmIChwVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvdXRbaV0gPSBtZXJnZUFueShvdXRbaV0sIHBWYWwsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0IGFzIHVua25vd247XG4gICAgfVxuICAgIHJldHVybiBiYXNlQW55IGFzIHVua25vd247XG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdChiYXNlQW55KSAmJiBpc1BsYWluT2JqZWN0KHBhdGNoQW55KSkge1xuICAgIGNvbnN0IGJhc2VPYmogPSBiYXNlQW55IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHBhdGNoT2JqID0gcGF0Y2hBbnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uYmFzZU9iaiB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhdGNoT2JqKSkge1xuICAgICAgY29uc3QgcFZhbCA9IHBhdGNoT2JqW2tleV07XG4gICAgICBpZiAocFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGxlYXZlIGFzLWlzXG4gICAgICB9IGVsc2UgaWYgKG9wdHMubnVsbERlbGV0ZXMgJiYgcFZhbCA9PT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZShwVmFsKSkge1xuICAgICAgICBvdXRba2V5XSA9IHBWYWwuJHJlcGxhY2U7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVsZXRlKHBWYWwpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dFtrZXldID0gbWVyZ2VBbnkoYmFzZU9iaj8uW2tleV0sIHBWYWwsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0IGFzIHVua25vd247XG4gIH1cblxuICByZXR1cm4gKHBhdGNoQW55IGFzIHVua25vd24pID8/IGJhc2VBbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU92ZXJyaWRlczxUPihcbiAgYmFzZTogVCxcbiAgcGF0Y2g6IE92ZXJyaWRlPE5vSW5mZXI8VD4+LFxuICBvcHRzOiBNZXJnZU9wdGlvbnMgPSB7fSxcbik6IFQge1xuICBjb25zdCB7IGFycmF5U3RyYXRlZ3kgPSAnbWVyZ2VCeUluZGV4JywgbnVsbERlbGV0ZXMgPSBmYWxzZSB9ID0gb3B0cztcblxuICAvLyBIYW5kbGUgd2hvbGUtbm9kZSBjb250cm9sIG9wZXJhdG9ycyBvbiBwYXRjaCBpdHNlbGZcbiAgaWYgKGlzUmVwbGFjZShwYXRjaCkpIHJldHVybiBwYXRjaC4kcmVwbGFjZSBhcyBUO1xuICBpZiAoaXNEZWxldGUocGF0Y2gpKSByZXR1cm4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVDtcblxuICAvLyBBcnJheXNcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZSkpIHtcbiAgICBpZiAoaXNSZXBsYWNlKHBhdGNoKSkgcmV0dXJuIHBhdGNoLiRyZXBsYWNlIGFzIFQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgICBpZiAoYXJyYXlTdHJhdGVneSA9PT0gJ3JlcGxhY2UnKSByZXR1cm4gcGF0Y2ggYXMgdW5rbm93biBhcyBUO1xuICAgICAgLy8gbWVyZ2UgYnkgaW5kZXhcbiAgICAgIGNvbnN0IG91dCA9IChiYXNlIGFzIHVua25vd25bXSkuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG91dC5sZW5ndGgsIHBhdGNoLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHBWYWwgPSAocGF0Y2ggYXMgdW5rbm93bltdKVtpXTtcbiAgICAgICAgaWYgKHBWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dFtpXSA9IG1lcmdlQW55KG91dFtpXSwgcFZhbCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICAvLyBpbnZhbGlkIHBhdGNoIHR5cGUgZm9yIGFuIGFycmF5IOKGkiBpZ25vcmUgYW5kIHJldHVybiBiYXNlXG4gICAgcmV0dXJuIGJhc2UgYXMgVDtcbiAgfVxuXG4gIC8vIFBsYWluIG9iamVjdHNcbiAgaWYgKGlzUGxhaW5PYmplY3QoYmFzZSkgJiYgaXNQbGFpbk9iamVjdChwYXRjaCkpIHtcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi4oYmFzZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBjb25zdCBwYXRjaE9iaiA9IHBhdGNoIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhdGNoT2JqKSkge1xuICAgICAgY29uc3QgcFZhbCA9IHBhdGNoT2JqW2tleV07XG4gICAgICBpZiAocFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGxlYXZlIGV4aXN0aW5nIHZhbHVlXG4gICAgICB9IGVsc2UgaWYgKG51bGxEZWxldGVzICYmIHBWYWwgPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIGlmIChpc1JlcGxhY2UocFZhbCkpIHtcbiAgICAgICAgb3V0W2tleV0gPSBwVmFsLiRyZXBsYWNlO1xuICAgICAgfSBlbHNlIGlmIChpc0RlbGV0ZShwVmFsKSkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiVmFsID0gKGJhc2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgIG91dFtrZXldID0gbWVyZ2VBbnkoYlZhbCwgcFZhbCwgb3B0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgLy8gRm9yIHByaW1pdGl2ZXMgb3Igd2hlbiBwYXRjaCBpcyBwcmltaXRpdmUsIHBhdGNoIHdpbnMgaWYgZGVmaW5lZFxuICByZXR1cm4gKChwYXRjaCBhcyB1bmtub3duKSA/PyBiYXNlKSBhcyBUO1xufVxuIiwiXG5jbGFzcyBTdHJpbmdVdGlscyB7XG4gIHN0YXRpYyBpc051bGxPckVtcHR5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZVRyaW1tZWQgPSB2YWx1ZT8udHJpbSgpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlVHJpbW1lZCA9PT0gJyc7XG4gIH1cblxuICBzdGF0aWMgdHJpbVRvTnVsbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2YWx1ZVRyaW1tZWQgPSB2YWx1ZT8udHJpbSgpO1xuICAgIHJldHVybiBTdHJpbmdVdGlscy5pc051bGxPckVtcHR5KHZhbHVlVHJpbW1lZCkgPyB1bmRlZmluZWQgOiB2YWx1ZVRyaW1tZWQ7XG4gIH1cblxuICBzdGF0aWMgY2FwaXRhbGl6ZSh0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGZpcnN0IHBhdHRlcm4gaW4gYW4gYXJyYXkgdGhhdCBtYXRjaGVzIGEgZ2l2ZW4gVVJMLlxuICAgKiBQYXR0ZXJucyBjYW4gaW5jbHVkZSBhIHNpbmdsZSB3aWxkY2FyZCAnKicgd2hpY2ggbWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy5cbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm5zXG4gICAqIEBwYXJhbSB1cmxUb1Rlc3RcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBmaW5kTWF0Y2hpbmdQYXR0ZXJuKHBhdHRlcm5zOiBzdHJpbmdbXSwgdXJsVG9UZXN0OiBMb2NhdGlvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF1cmxUb1Rlc3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAvLyBUZXN0IG9ubHkgaWYgYSBwYXRobmFtZSBpcyBwcmVzZW50LlxuICAgICAgaWYgKHVybFRvVGVzdC5wYXRobmFtZSAhPT0gJy8nKSB7XG4gICAgICAgIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm5cbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgY2hhcmFjdGVycyBsaWtlICcuJywgJysnLCAnPycsICcoJywgZXRjLiwgaW4gdGhlIHBhdHRlcm4gYXJlIHRyZWF0ZWQgbGl0ZXJhbGx5LlxuICAgICAgICBjb25zdCBlc2NhcGVkUGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvWy4rP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIHdpbGRjYXJkICcqJyB3aXRoIGl0cyByZWdleCBlcXVpdmFsZW50ICcuKicgKG1hdGNoZXMgYW55IGNoYXJhY3RlciB6ZXJvIG9yIG1vcmUgdGltZXMpXG4gICAgICAgIGNvbnN0IHJlZ2V4UGF0dGVybiA9IGVzY2FwZWRQYXR0ZXJuLnJlcGxhY2UoL1xcKi9nLCAnLionKTtcblxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4ke3JlZ2V4UGF0dGVybn0kYCk7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KHVybFRvVGVzdC5wYXRobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGF0dGVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCh1cmxUb1Rlc3QuaG9zdG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBTdHJpbmdVdGlscyB9O1xuIiwiaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IGFzIEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRFdmVudFJlcXVlc3QgYXMgQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9hcGkvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0JztcbmltcG9ydCB7IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCB9IGZyb20gJy4vY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IGNvcmVDb250ZXh0VG9BcGlDb250ZXh0IH0gZnJvbSAnLi9jb3JlQ29udGV4dFRvQXBpQ29udGV4dCc7XG5cbmV4cG9ydCBjb25zdCBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0ID0gKFxuICBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0OiBDb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuKTogQXBpU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0+ICh7XG4gIGlkOiBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmlkLFxuICB1c2VyX2V2ZW50OiBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC51c2VyRXZlbnQpLFxuICBjb250ZXh0OiBjb3JlQ29udGV4dFRvQXBpQ29udGV4dChjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmNvbnRleHQpLFxufSk7XG4iLCIvLyBUaGlzIGVtYWlsIHZhbGlkYXRlcyB0aGF0IHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgYEBgIHN5bWJvbCxcbi8vIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgYEBgIHN5bWJvbCBhbmQgdGhlIGAuYCBzeW1ib2wsXG4vLyBhbmQgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBhZnRlciB0aGUgYC5gIHN5bWJvbFxuLy8gSXQgZG9lcyBOT1QgdmFsaWRhdGUgYWxsIHBvc3NpYmxlIGVtYWlsIGZvcm1hdHMsIGJ1dCBpdCBpcyBhIGRlY2VudCBwbGFjZSB0byBzdGFydC5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QodmFsdWUpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFlQSxNQUFNLHFDQUFxQyxDQUFDLGFBQWEsY0FBYztBQUN2RSxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLGdDQUFnQzs7Ozs7Ozs7QUFTdEMsTUFBTSxvQkFBb0IsVUFBMkI7Q0FDbkQsTUFBTSxrQkFBa0IsTUFBTSxRQUFRLFNBQVMsR0FBRyxDQUFDLGFBQWE7QUFDaEUsUUFBTyxtQ0FBbUMsTUFBTSxTQUM5QyxnQkFBZ0IsU0FBUyxLQUFLLENBQy9COzs7Ozs7O0FBUUgsTUFBTSx3QkFDSixPQUNBLFVBSUc7Q0FDSCxJQUFJQTtBQUVKLEtBQUkseUJBQXlCLE1BQU0sQ0FDakMsY0FBYTtFQUNYLE9BQU8sTUFBTSxVQUFVLElBQUksU0FBUyxLQUFLLGFBQWE7R0FDcEQsV0FBVyxRQUFRO0dBQ25CLGVBQWUsUUFBUTtHQUN2QixPQUFPLFFBQVE7R0FDZixVQUFVLFFBQVE7R0FDbkIsRUFBRTtFQUNILFVBQVUsTUFBTSxVQUFVLElBQUk7RUFDOUIsc0JBQXNCO0VBQ3ZCO1VBQ1Esb0JBQW9CLE1BQU0sQ0FDbkMsY0FBYTtFQUNYLE9BQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFVO0dBQzFDLFdBQVcsS0FBSztHQUNoQixlQUFlLEtBQUs7R0FDcEIsT0FBTyxLQUFLO0dBQ1osVUFBVSxLQUFLO0dBQ2hCLEVBQUU7RUFDSCxVQUFVLE1BQU0sVUFBVTtFQUMxQixzQkFBc0I7RUFDdkI7S0FFRCxjQUFhO0VBQ1gsa0JBQWtCLEVBQUUsR0FBRyxPQUFPO0VBQzlCLHNCQUFzQjtFQUN2QjtBQUdILE9BQU0sdUJBQXVCLGtCQUFrQixFQUM3QyxZQUNELENBQUM7Ozs7OztBQU9KLE1BQWEsd0JBQ1gsVUFJRztDQUNILElBQUksV0FBVztDQUlmLE1BQU0sMkJBQTJCO0FBQy9CLE1BQUksQ0FBQyxPQUFPLGFBQWEsQ0FBRSxPQUFPLFVBQWtCLE1BQU07QUFDeEQsZUFBWTtBQUVaLE9BQUksWUFBWSwrQkFBK0I7QUFDN0MsbUJBQU8sU0FDTCw2Q0FBNkMsOEJBQThCLFdBQzVFO0FBQ0Q7O0FBR0YsY0FBVyxvQkFBb0IsNkJBQTZCO0FBQzVEOztBQUdGLGlCQUFPLFNBQ0wsZ0VBQ0Q7RUFDRCxNQUFNLGVBQWUsT0FBTyxVQUFVO0FBQ3RDLFNBQU8sVUFBVSxRQUFRLEdBQUcsU0FBb0I7QUFDOUMsT0FDRSxxQkFBcUIsS0FBSyxHQUFHLElBQzdCLGlCQUFrQixLQUFLLEdBQVcsTUFBTSxDQUV4QyxzQkFBcUIsS0FBSyxJQUEwQixNQUFNO0FBSTVELFVBQU8sYUFBYSxNQUFNLE9BQU8sV0FBVyxLQUFLOzs7QUFJckQscUJBQW9COztBQUd0QixNQUFhLGlCQUNYLFVBSUc7QUFJSCxPQUFNLHVCQUF1QixhQUFhOzs7OztBQ3hJNUMsTUFBYSwyQkFBMkIsYUFBc0M7Q0FDNUUsU0FBUyxRQUFRO0NBQ2pCLFFBQVEsUUFBUTtDQUNoQixTQUFTLFFBQVE7Q0FDakIsZ0JBQWdCLFFBQVE7Q0FDeEIsUUFBUSxRQUFRO0NBQ2hCLEtBQUssUUFBUTtDQUNkOzs7O0FDRkQsTUFBYSwrQkFBK0IsU0FBc0M7QUFDaEYsS0FDRSxLQUFLLGFBQWEsa0JBQWtCLFlBQ3BDLEtBQUssYUFBYSxrQkFBa0IsVUFFcEMsUUFBTztFQUNMLFVBQVUsS0FBSztFQUNmLFlBQVksS0FBSztFQUNqQixVQUFVLEtBQUs7RUFDZixZQUFZO0dBQ1YsWUFBWSxLQUFLLFdBQVc7R0FDNUIsbUJBQW1CLEtBQUssV0FBVztHQUNuQyxLQUFLLEtBQUssV0FBVztHQUN0QjtFQUNGO0FBR0gsS0FBSSxLQUFLLGFBQWEsa0JBQWtCLFNBQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWTtHQUNWLFVBQVUscUJBQXFCO0dBQy9CLFlBQVksRUFFVixJQUFLLEtBQUssV0FBVyxXQUErQixJQUNyRDtHQUNGO0VBQ0Y7QUFHSCxLQUFJLEtBQUssYUFBYSxrQkFBa0IsV0FDdEMsUUFBTztFQUNMLFVBQVUsS0FBSztFQUNmLFlBQVksS0FBSztFQUNqQixVQUFVLEtBQUs7RUFDZixZQUFZLEVBQ1YsT0FBTyxLQUFLLFdBQVcsT0FDeEI7RUFDRjtBQUdILEtBQUksS0FBSyxhQUFhLGtCQUFrQixPQUN0QyxRQUFPO0VBQ0wsVUFBVSxLQUFLO0VBQ2YsWUFBWSxLQUFLO0VBQ2pCLFVBQVUsS0FBSztFQUNmLFlBQVk7R0FDVixhQUFhLEtBQUssV0FBVztHQUM3QixrQkFBa0IsS0FBSyxXQUFXO0dBQ25DO0VBQ0Y7QUFHSCxLQUFJLEtBQUssYUFBYSxrQkFBa0Isa0JBQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWSxFQUNWLGVBQWUsS0FBSyxXQUFXLGNBQ2hDO0VBQ0Y7QUFHSCxLQUFJLEtBQUssYUFBYSxrQkFBa0IsVUFDdEMsUUFBTztFQUNMLFVBQVUsS0FBSztFQUNmLFlBQVksS0FBSztFQUNqQixVQUFVLEtBQUs7RUFDZixZQUFZO0dBQ1YsS0FBSyxLQUFLLFdBQVc7R0FDckIscUJBQXFCLEtBQUssV0FBVztHQUN0QztFQUNGO0FBR0gsS0FBSSxLQUFLLGFBQWEsa0JBQWtCLGNBQ3RDLFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2YsWUFBWTtHQUNWLGVBQWUsRUFBRSxHQUFHLEtBQUssV0FBVyxjQUFjO0dBQ2xELGtCQUFrQixLQUFLLFdBQVc7R0FDbEMsV0FBVyxLQUFLLFdBQVc7R0FDNUI7RUFDRjtBQUlILFFBQU87RUFDTCxVQUFVLEtBQUs7RUFDZixZQUFZLEtBQUs7RUFDakIsVUFBVSxLQUFLO0VBQ2hCOzs7OztBQ3hHSCxNQUFhLGVBQWtCLE9BQVksU0FBaUI7Q0FDMUQsTUFBTSxPQUFPLEVBQUU7QUFDZixNQUFLLElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxLQUFLLEVBQzdCLE1BQUssS0FBSyxNQUFNLFFBQVEsR0FBTSxVQUFrQixRQUFRLFNBQVMsRUFBRSxDQUFDO0FBRXRFLFFBQU87Ozs7O0FDSFQsTUFBYSw2QkFBNkIsY0FBeUIscUJBQXlDO0NBQzFHLE1BQU0sa0JBQWtCLGFBQ3JCLFFBQVEsWUFBWSxRQUFRLFNBQVMsWUFBWSxXQUFXLFFBQVEsVUFBVSxTQUFTLENBQ3ZGLEtBQUssTUFBTSxFQUE0QjtBQUUxQyxRQUFPLENBQ0wsR0FBRyxnQkFBZ0IsUUFBUSxNQUFNLEVBQUUsVUFBVSxPQUFPLGlCQUFpQixFQUNyRSxHQUFHLGdCQUFnQixRQUFRLE1BQU0sRUFBRSxVQUFVLE9BQU8saUJBQWlCLENBQ3RFLENBQUMsS0FBSyxNQUFNLEVBQUUsU0FBVSxTQUFVOzs7OztBQ1ZyQyxNQUFhLDRCQUE0QjtDQUN2QyxJQUFJLGVBQWUsU0FBUyxjQUFjLHdCQUF3QjtBQUNsRSxLQUFJLGNBQWM7RUFDaEIsTUFBTSxVQUFVLGFBQWEsYUFBYSxVQUFVO0FBRXBELE1BQUksQ0FEb0IsU0FBUyxTQUFTLGtCQUFrQixDQUUxRCxjQUFhLGFBQWEsV0FBVyxHQUFHLFFBQVEsbUJBQW1CO0FBRXJFOztBQUdGLGdCQUFlLFNBQVMsY0FBYyxPQUFPO0FBQzdDLGNBQWEsYUFBYSxRQUFRLFdBQVc7QUFDN0MsY0FBYSxhQUFhLFdBQVcsdURBQXVEO0FBQzVGLFVBQVMsS0FBSyxZQUFZLGFBQWE7Ozs7O0FDTHpDLE1BQWEsaUNBQ1gsT0FDQSwyQkFDd0I7QUFDeEIsS0FBSSxNQUFNLGFBQWEsa0JBQWtCLGNBQ3ZDO0NBR0YsTUFBTSxxQkFBcUIsT0FBTyxRQUFRLHVCQUF1QixPQUFPLFdBQVcsQ0FDaEYsS0FBSyxDQUFDLEtBQUssV0FBVyxHQUFHLE1BQU0sTUFBTSxJQUFJLE1BQU0sV0FBVyxhQUFhLE9BQU8sQ0FDOUUsS0FBSyxLQUFLO0FBRWIsUUFBTztFQUNMLElBQUksTUFBTTtFQUNWLE1BQU0sWUFBWTtFQUNsQixNQUFNLFlBQVk7RUFDbEIsV0FBVyxNQUFNO0VBQ2pCLFVBQVUsRUFDUixTQUFTLG9CQUNWO0VBQ0Y7Ozs7Ozs7Ozs7OztBQ25CSCxNQUFhLHlCQUF5QixVQUEwQztBQUM5RSxLQUFJLE1BQU0sYUFBYSxrQkFBa0IsV0FDdkMsUUFBTztFQUNMLElBQUksTUFBTTtFQUNWLE1BQU0sWUFBWTtFQUNsQixNQUFNLFlBQVk7RUFDbEIsV0FBVyxNQUFNO0VBQ2pCLFVBQVUsRUFDUixTQUFTLE1BQU0sV0FBVyxPQUMzQjtFQUNGO0FBR0gsS0FBSSxNQUFNLGFBQWEsa0JBQWtCLE9BQ3ZDLFFBQU87RUFDTCxJQUFJLE1BQU07RUFDVixNQUFNLFlBQVk7RUFDbEIsTUFBTSxZQUFZO0VBQ2xCLFdBQVcsTUFBTTtFQUNqQixVQUFVO0dBQ1IsWUFBWSxNQUFNLFdBQVcsY0FBYztHQUMzQyxpQkFBaUIsTUFBTSxXQUFXLG1CQUFtQixFQUFFO0dBQ3hEO0VBQ0Y7Ozs7Ozs7Ozs7OztBQ3ZCTCxNQUFhLHVCQUF1QixhQUE2QztBQUMvRSxLQUFJLFlBQVksS0FDZDtBQUdGLEtBQUksU0FBUyxhQUFhLGlCQUFpQixLQUN6QyxRQUFPO0VBQ0wsSUFBSSxTQUFTO0VBQ2IsV0FBVyxTQUFTO0VBQ3BCLE1BQU0sWUFBWTtFQUNsQixNQUFNLFlBQVk7RUFDbEIsVUFBVSxFQUNSLFNBQVMsU0FBUyxXQUFXLFNBQzlCO0VBQ0Y7QUFHSCxLQUFJLFNBQVMsYUFBYSxpQkFBaUIsUUFDekMsUUFBTztFQUNMLElBQUksU0FBUztFQUNiLFdBQVcsU0FBUztFQUNwQixNQUFNLFlBQVk7RUFDbEIsTUFBTSxZQUFZO0VBQ2xCLFVBQVUsRUFDUixHQUFHLFNBQVMsWUFDYjtFQUNGO0FBR0gsS0FBSSxTQUFTLGFBQWEsaUJBQWlCLE9BQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTSxZQUFZO0VBQ2xCLE1BQU0sWUFBWTtFQUNsQixVQUFVO0dBQ1IsUUFBUSxTQUFTLFdBQVc7R0FDNUIsVUFBVSxTQUFTLFdBQVc7R0FDOUIsT0FBTyxTQUFTLFdBQVc7R0FDM0IsT0FBTyxTQUFTLFdBQVc7R0FDM0IsaUJBQWlCLFNBQVMsV0FBVztHQUN0QztFQUNGO0FBR0gsS0FBSSxTQUFTLGFBQWEsaUJBQWlCLFVBQ3pDLFFBQU87RUFDTCxJQUFJLFNBQVM7RUFDYixXQUFXLFNBQVM7RUFDcEIsTUFBTSxZQUFZO0VBQ2xCLE1BQU0sWUFBWTtFQUNuQjtBQUdILEtBQUksU0FBUyxhQUFhLGlCQUFpQixLQUN6QyxRQUFPO0VBQ0wsSUFBSSxTQUFTO0VBQ2IsV0FBVyxTQUFTO0VBQ3BCLE1BQU0sWUFBWTtFQUNsQixNQUFNLFlBQVk7RUFDbEIsVUFBVSxFQUNSLEdBQUcsU0FBUyxZQUNiO0VBQ0Y7QUFHSCxLQUFJLFNBQVMsYUFBYSxpQkFBaUIsY0FDekMsUUFBTztFQUNMLElBQUksU0FBUztFQUNiLFdBQVcsU0FBUztFQUNwQixNQUFNLFlBQVk7RUFDbEIsTUFBTSxZQUFZO0VBQ2xCLFVBQVUsRUFDUixHQUFHLFNBQVMsWUFDYjtFQUNGO0FBR0gsS0FBSSxTQUFTLGFBQWEsaUJBQWlCLG9CQUN6QyxRQUFPO0VBQ0wsSUFBSSxTQUFTO0VBQ2IsV0FBVyxTQUFTO0VBQ3BCLE1BQU0sWUFBWTtFQUNsQixNQUFNLFlBQVk7RUFDbEIsVUFBVSxFQUNSLEdBQUcsU0FBUyxZQUNiO0VBQ0Y7QUFHSCxLQUFJLFNBQVMsYUFBYSxpQkFBaUIsS0FDekMsUUFBTztFQUNMLElBQUksU0FBUztFQUNiLFdBQVcsU0FBUztFQUNwQixNQUFNLFlBQVk7RUFDbEIsTUFBTSxZQUFZO0VBQ2xCLFVBQVU7R0FDUixVQUFVLFNBQVMsV0FBVyxjQUFjO0dBQzVDLFFBQVEsT0FBTyxRQUFRLFNBQVMsV0FBVyxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxZQUFZO0lBQ25GO0lBQ0EsT0FBTyxNQUFNO0lBQ2IsTUFBTSxNQUFNO0lBQ1osUUFBUSxNQUFNO0lBQ2QsVUFBVSxTQUFTLFdBQVcsT0FBTyxTQUFTLFNBQVMsSUFBSTtJQUM1RCxFQUFFO0dBQ0o7RUFDRjtBQUdILEtBQUksU0FBUyxhQUFhLGlCQUFpQixNQUN6QyxRQUFPO0VBQ0wsSUFBSSxTQUFTO0VBQ2IsV0FBVyxTQUFTO0VBQ3BCLE1BQU0sWUFBWTtFQUNsQixNQUFNLFlBQVk7RUFDbEIsVUFBVSxFQUNSLEdBQUcsU0FBUyxZQUNiO0VBQ0Y7Ozs7Ozs7Ozs7Ozs7QUNySEwsTUFBYSw4QkFDWCxPQUNBLGdCQUN3QjtBQUN4QixLQUFJLE1BQU0sYUFBYSxrQkFBa0IsbUJBQW1CO0VBQzFELE1BQU0sRUFBRSxpQkFBaUIsTUFBTTtBQUUvQixTQUFPO0dBQ0wsSUFBSSxNQUFNO0dBQ1YsTUFBTSxZQUFZO0dBQ2xCLE1BQU0sWUFBWTtHQUNsQixXQUFXLE1BQU07R0FDakIsVUFBVTtJQUNSO0lBQ0EsbUJBQW1CLFlBQVksTUFBTSxNQUFNLEVBQUUsT0FBTyxhQUFhLEVBQUUsV0FBVztJQUMvRTtHQUNGOzs7Ozs7QUN2QkwsTUFBYSwwQ0FDWCxVQUMyQjtDQUMzQixTQUFTO0VBQ1AsU0FBUyxLQUFLLFFBQVE7RUFDdEIsUUFBUSxLQUFLLFFBQVE7RUFDckIsZ0JBQWdCLEtBQUssUUFBUTtFQUM3QixTQUFTLEtBQUssUUFBUTtFQUN0QixRQUFRLEtBQUssUUFBUTtFQUNyQixLQUFLLEtBQUssUUFBUTtFQUNuQjtDQUNELElBQUksS0FBSztDQUNULGVBQWUsS0FBSztDQUNwQixhQUFhLEtBQUssWUFBWSxLQUFLLGNBQWMsNEJBQTRCLFVBQVUsQ0FBQztDQUN4RixtQkFBbUI7RUFDakIsT0FBTyxLQUFLLGtCQUFrQjtFQUM5QixZQUFZLEtBQUssa0JBQWtCO0VBQ25DLE1BQU0sS0FBSyxrQkFBa0I7RUFDN0IsUUFBUSxLQUFLLGtCQUFrQjtFQUMvQixhQUFhLEtBQUssa0JBQWtCO0VBQ3BDLE9BQU8sS0FBSyxrQkFBa0I7RUFDOUIsaUJBQWlCLEtBQUssa0JBQWtCO0VBQ3hDLHdCQUF3QixLQUFLLGtCQUFrQjtFQUMvQywwQkFBMEIsS0FBSyxrQkFBa0I7RUFDakQsa0JBQWtCLEtBQUssa0JBQWtCO0VBQzFDO0NBQ0Y7Ozs7QUM5QkQsSUFBc0IsZUFBdEIsTUFBbUM7Q0FJakMsWUFBWSxTQUFpQjtBQUMzQixPQUFLLFVBQVU7QUFDZixPQUFLLE9BQU87O0NBR2QsYUFBYTtBQUNYLFNBQU8sS0FBSzs7Q0FHZCxRQUFRLE1BQWdCO0FBQ3RCLE9BQUssT0FBTzs7Q0FHZCxVQUFVO0FBQ1IsU0FBTyxLQUFLOzs7QUFNaEIsSUFBTSxnQkFBTixjQUE0QixhQUFhO0NBQ3ZDLFFBQXFCO0FBQ25CLFNBQU8sS0FBSyxTQUFTLENBQUMsY0FBYyxLQUFLLFlBQVksQ0FBQzs7O0FBSTFELElBQU0sYUFBTixjQUF5QixhQUFhO0NBQ3BDLFFBQXFCO0FBQ25CLFNBQU8sS0FBSyxTQUFTLENBQUMsZUFBZSxLQUFLLFlBQVksQ0FBQzs7O0FBSTNELElBQU0sZ0JBQU4sY0FBNEIsYUFBYTtDQUN2QyxRQUFxQjtBQUNuQixTQUFPLEtBQUssU0FBUyxFQUFFLFNBQ3JCLEtBQUssWUFBWSxFQUNqQixLQUFLLFNBQVMsRUFDZCxNQUNBLFlBQVkseUJBQ1osS0FDRCxFQUFFOzs7QUFJUCxJQUFNLGdCQUFOLGNBQTRCLGFBQWE7Q0FDdkMsUUFBcUI7RUFDbkIsSUFBSSxnQkFBZ0I7RUFDcEIsTUFBTSxZQUFZLEtBQUssWUFBWSxDQUFDLE1BQU0sSUFBSTtFQUM5QyxNQUFNLFlBQVksVUFBVSxTQUFTO0VBRXJDLE1BQU0sY0FBYyxTQUFpQixhQUF3QztHQUMzRSxNQUFNLFdBQVcsZ0JBQWdCLE1BQU0sUUFBUTtBQUUvQyxPQUFJLFNBQ0YsVUFBUyxRQUFRLFNBQXFCO0dBR3hDLE1BQU0sY0FBYyxTQUFTLE9BQU87QUFDcEMsT0FBSSxrQkFBa0IsVUFDcEIsUUFBTztHQUdULElBQUlDLE9BQWdDLGVBQWU7QUFDbkQsT0FBSyxhQUE2QixXQUNoQyxRQUFRLFlBQTRCO0FBR3RDLE9BQUssYUFBbUMsY0FDdEMsUUFBUSxZQUFrQyxlQUFlO0FBRzNELFVBQU8sV0FBVyxVQUFVLEVBQUUsZUFBZSxNQUFNLEVBQUUsS0FBSzs7QUFHNUQsU0FBTyxXQUFXLFVBQVUsZUFBZSxNQUFNLENBQUM7OztBQUl0RCxJQUFNLFFBQU4sY0FBb0IsYUFBYTtDQUMvQixjQUFjO0FBQ1osUUFBTSxHQUFHOztDQUVYLFFBQXFCO0FBQ25CLFNBQU87OztBQUlYLElBQWEsa0JBQWIsTUFBNkI7Q0FDM0IsT0FBTyxNQUFNLGtCQUEyQjtBQUN0QyxNQUFJLENBQUMsaUJBQ0gsUUFBTyxJQUFJLE9BQU87RUFHcEIsTUFBTSxRQUFRLGlCQUFpQixNQUFNLElBQUk7RUFDekMsTUFBTSxPQUFPLE1BQU07RUFDbkIsTUFBTSxXQUFXLE1BQU07QUFFdkIsVUFBUSxNQUFSO0dBQ0UsS0FBSyxLQUNILFFBQU8sS0FBSyxHQUFHLFNBQVM7R0FDMUIsS0FBSyxRQUNILFFBQU8sS0FBSyxNQUFNLFNBQVM7R0FDN0IsS0FBSyxRQUNILFFBQU8sS0FBSyxNQUFNLFNBQVM7R0FDN0IsUUFDRSxRQUFPLElBQUksT0FBTzs7O0NBSXhCLE9BQU8sTUFBTSxVQUF5QjtBQUNwQyxTQUFPLFlBQVksSUFBSSxPQUFPOztDQUdoQyxPQUFPLE1BQU0sU0FBa0I7QUFDN0IsU0FBTyxVQUFVLElBQUksY0FBYyxRQUFRLEdBQUcsSUFBSSxPQUFPOztDQUczRCxPQUFPLEdBQUcsU0FBZ0M7QUFDeEMsU0FBTyxVQUFVLElBQUksV0FBVyxRQUFRLEdBQUcsSUFBSSxPQUFPOztDQUd4RCxPQUFPLE1BQU0sU0FBZ0M7QUFDM0MsU0FBTyxVQUFVLElBQUksY0FBYyxRQUFRLEdBQUcsSUFBSSxPQUFPOztDQUczRCxPQUFPLE1BQU0sU0FBZ0M7QUFDM0MsU0FBTyxVQUFVLElBQUksY0FBYyxRQUFRLEdBQUcsSUFBSSxPQUFPOzs7Ozs7QUNoRjdELFNBQVMsY0FBYyxHQUEwQztBQUMvRCxRQUNFLENBQUMsQ0FBQyxLQUNGLE9BQU8sTUFBTSxZQUNiLENBQUMsTUFBTSxRQUFRLEVBQUUsSUFDakIsRUFBRSxhQUFhLFNBQ2YsRUFBRSxhQUFhOztBQUluQixTQUFTLFVBQVUsR0FBcUM7QUFDdEQsUUFBTyxDQUFDLENBQUMsS0FBSyxPQUFPLE1BQU0sWUFBWSxjQUFlOztBQUV4RCxTQUFTLFNBQVMsR0FBMkI7QUFDM0MsUUFBTyxDQUFDLENBQUMsS0FBSyxPQUFPLE1BQU0sWUFBYSxFQUE4QixZQUFZOztBQUdwRixTQUFTLGlCQUFpQixHQUFxQjtDQUM3QyxNQUFNLElBQUksT0FBTztBQUNqQixRQUNFLE1BQU0sUUFDTixNQUFNLFlBQ04sTUFBTSxZQUNOLE1BQU0sYUFDTixNQUFNLFlBQ04sTUFBTSxZQUNOLE1BQU07O0FBSVYsU0FBUyxvQkFBb0IsS0FBeUI7QUFDcEQsS0FBSSxJQUFJLFdBQVcsRUFBRyxRQUFPO0FBRTdCLE1BQUssSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSyxHQUFHO0VBQ3RDLE1BQU0sSUFBSSxJQUFJO0FBQ2QsTUFBSSxNQUFNLFVBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFFLFFBQU87O0FBRXRELFFBQU87O0FBR1QsU0FBUyxTQUFTLFNBQWtCLFVBQW1CLE1BQTZCO0FBQ2xGLEtBQUksVUFBVSxTQUFTLENBQUUsUUFBTyxTQUFTO0FBQ3pDLEtBQUksU0FBUyxTQUFTLENBQUUsUUFBTztBQUUvQixLQUFJLE1BQU0sUUFBUSxRQUFRLEVBQUU7QUFDMUIsTUFBSSxNQUFNLFFBQVEsU0FBUyxFQUFFO0dBQzNCLE1BQU0sVUFBVTtHQUNoQixNQUFNLFdBQVc7QUFLakIsT0FIRSxLQUFLLGtCQUFrQixhQUN2QixvQkFBb0IsUUFBUSxJQUM1QixvQkFBb0IsU0FBUyxDQUNaLFFBQU87R0FDMUIsTUFBTSxNQUFNLFFBQVEsT0FBTztHQUMzQixNQUFNLE1BQU0sS0FBSyxJQUFJLElBQUksUUFBUSxTQUFTLE9BQU87QUFDakQsUUFBSyxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHO0lBQy9CLE1BQU0sT0FBTyxTQUFTO0FBQ3RCLFFBQUksU0FBUyxPQUNYLEtBQUksS0FBSyxTQUFTLElBQUksSUFBSSxNQUFNLEtBQUs7O0FBR3pDLFVBQU87O0FBRVQsU0FBTzs7QUFHVCxLQUFJLGNBQWMsUUFBUSxJQUFJLGNBQWMsU0FBUyxFQUFFO0VBQ3JELE1BQU0sVUFBVTtFQUNoQixNQUFNLFdBQVc7RUFDakIsTUFBTUMsTUFBK0IsRUFBRSxHQUFHLFNBQVM7QUFDbkQsT0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRTtHQUN2QyxNQUFNLE9BQU8sU0FBUztBQUN0QixPQUFJLFNBQVMsUUFBVyxZQUViLEtBQUssZUFBZSxTQUFTLEtBQ3RDLFFBQU8sSUFBSTtZQUNGLFVBQVUsS0FBSyxDQUN4QixLQUFJLE9BQU8sS0FBSztZQUNQLFNBQVMsS0FBSyxDQUN2QixRQUFPLElBQUk7T0FFWCxLQUFJLE9BQU8sU0FBUyxVQUFVLE1BQU0sTUFBTSxLQUFLOztBQUduRCxTQUFPOztBQUdULFFBQVEsWUFBd0I7O0FBR2xDLFNBQWdCLGVBQ2QsTUFDQSxPQUNBLE9BQXFCLEVBQUUsRUFDcEI7Q0FDSCxNQUFNLEVBQUUsZ0JBQWdCLGdCQUFnQixjQUFjLFVBQVU7QUFHaEUsS0FBSSxVQUFVLE1BQU0sQ0FBRSxRQUFPLE1BQU07QUFDbkMsS0FBSSxTQUFTLE1BQU0sQ0FBRSxRQUFPO0FBRzVCLEtBQUksTUFBTSxRQUFRLEtBQUssRUFBRTtBQUN2QixNQUFJLFVBQVUsTUFBTSxDQUFFLFFBQU8sTUFBTTtBQUNuQyxNQUFJLE1BQU0sUUFBUSxNQUFNLEVBQUU7QUFDeEIsT0FBSSxrQkFBa0IsVUFBVyxRQUFPO0dBRXhDLE1BQU0sTUFBTyxLQUFtQixPQUFPO0dBQ3ZDLE1BQU0sTUFBTSxLQUFLLElBQUksSUFBSSxRQUFRLE1BQU0sT0FBTztBQUM5QyxRQUFLLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUc7SUFDL0IsTUFBTSxPQUFRLE1BQW9CO0FBQ2xDLFFBQUksU0FBUyxPQUNYLEtBQUksS0FBSyxTQUFTLElBQUksSUFBSSxNQUFNLEtBQUs7O0FBR3pDLFVBQU87O0FBR1QsU0FBTzs7QUFJVCxLQUFJLGNBQWMsS0FBSyxJQUFJLGNBQWMsTUFBTSxFQUFFO0VBQy9DLE1BQU1BLE1BQStCLEVBQUUsR0FBSSxNQUFrQztFQUM3RSxNQUFNLFdBQVc7QUFDakIsT0FBSyxNQUFNLE9BQU8sT0FBTyxLQUFLLFNBQVMsRUFBRTtHQUN2QyxNQUFNLE9BQU8sU0FBUztBQUN0QixPQUFJLFNBQVMsUUFBVyxZQUViLGVBQWUsU0FBUyxLQUNqQyxRQUFPLElBQUk7WUFDRixVQUFVLEtBQUssQ0FDeEIsS0FBSSxPQUFPLEtBQUs7WUFDUCxTQUFTLEtBQUssQ0FDdkIsUUFBTyxJQUFJO1FBQ047SUFDTCxNQUFNLE9BQVEsS0FBaUM7QUFDL0MsUUFBSSxPQUFPLFNBQVMsTUFBTSxNQUFNLEtBQUs7OztBQUd6QyxTQUFPOztBQUlULFFBQVMsU0FBcUI7Ozs7O0FDak1oQyxJQUFNLGNBQU4sTUFBTSxZQUFZO0NBQ2hCLE9BQU8sY0FBYyxPQUFvQztFQUN2RCxNQUFNLGVBQWUsT0FBTyxNQUFNO0FBQ2xDLFNBQU8sVUFBVSxVQUFhLGlCQUFpQjs7Q0FHakQsT0FBTyxXQUFXLE9BQStDO0VBQy9ELE1BQU0sZUFBZSxPQUFPLE1BQU07QUFDbEMsU0FBTyxZQUFZLGNBQWMsYUFBYSxHQUFHLFNBQVk7O0NBRy9ELE9BQU8sV0FBVyxNQUEwQjtBQUMxQyxNQUFJLFNBQVMsT0FDWCxRQUFPO0FBRVQsU0FBTyxLQUFLLE9BQU8sRUFBRSxDQUFDLGFBQWEsR0FBRyxLQUFLLFVBQVUsRUFBRTs7Ozs7Ozs7OztDQVd6RCxPQUFPLG9CQUFvQixVQUFvQixXQUF5QztBQUN0RixNQUFJLENBQUMsVUFDSDtBQUdGLE9BQUssTUFBTSxXQUFXLFNBRXBCLEtBQUksVUFBVSxhQUFhLEtBQUs7R0FNOUIsTUFBTSxlQUhpQixRQUFRLFFBQVEsc0JBQXNCLE9BQU8sQ0FHaEMsUUFBUSxPQUFPLEtBQUs7QUFHeEQsd0JBRGMsSUFBSSxPQUFPLElBQUksYUFBYSxHQUFHLEVBQ25DLEtBQUssVUFBVSxTQUFTLENBQ2hDLFFBQU87YUFHQSxRQUFRLFdBQVcsVUFBVSxTQUFTLENBQy9DLFFBQU87Ozs7OztBQzNDZixNQUFhLHlDQUNYLCtCQUM4QjtDQUM5QixJQUFJLDBCQUEwQjtDQUM5QixZQUFZLDRCQUE0QiwwQkFBMEIsVUFBVTtDQUM1RSxTQUFTLHdCQUF3QiwwQkFBMEIsUUFBUTtDQUNwRTs7OztBQ1BELE1BQWEsaUJBQWlCLFVBQTJCLDZCQUE2QixLQUFLLE1BQU0ifQ==
606
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ1ZvdlJ3bHcuanMiLCJuYW1lcyI6WyJldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIm5vZGU6IE5vZGUgfCBudWxsIHwgdW5kZWZpbmVkIiwib3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9hbmFseXRpY3NVdGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9jb3JlQ29udGV4dFRvQXBpQ29udGV4dC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9jb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvZGl2aWRlQXJyYXkudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvaW1hZ2VGaWx0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVyY2hhbnRVdGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbVF1ZXJ5RXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbWVzc2FnZUZyb21SZXNwb25zZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9tZXNzYWdlRnJvbVN1Z2dlc3Rpb25FdmVudC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9uZXh0TWVzc2FnZVJlcXVlc3RUb0FwaVJlcXVlc3QudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvbm9kZVNlbGVjdG9yLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL3V0aWxzL292ZXJyaWRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9zdHJpbmdVdGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi91dGlscy9zdXBwb3J0ZWRFdmVudFJlcXVlc3RUb0FwaVJlcXVlc3QudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vdXRpbHMvdmFsaWRhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nZ2VyIGZyb20gXCJzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXJcIjtcbmltcG9ydCB7XG4gIGlzTGVnYWN5VUFFY29tbWVyY2VFdmVudCxcbiAgaXNHQTRFY29tbWVyY2VFdmVudCxcbiAgaXNCYXNlRWNvbW1lcmNlRXZlbnQsXG4gIEJhc2VFY29tbWVyY2VFdmVudCxcbn0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHNcIjtcbmltcG9ydCB7IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUgfSBmcm9tIFwic3JjL2NvbnRleHRzL2FtcGxpdHVkZUNvbnRleHQvYW1wbGl0dWRlQ29udGV4dFwiO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIGRhdGFMYXllcjogYW55W107XG4gIH1cbn1cblxuY29uc3QgTk9STUFMSVpFRF9BRERfVE9fQ0FSVF9FVkVOVF9OQU1FUyA9IFtcImFkZHRvY2FydFwiLCBcImFkZGVkdG9jYXJ0XCJdO1xuY29uc3QgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyA9IDUwMDtcbmNvbnN0IENIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTID0gMTA7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgR29vZ2xlIEFuYWx5dGljcyBldmVudCBpcyBhbiBhZGRfdG9fY2FydCBldmVudC5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG5hbWUgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYW4gYWRkX3RvX2NhcnQgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuY29uc3QgaXNBZGRUb0NhcnRFdmVudCA9IChldmVudDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFdmVudCA9IGV2ZW50LnJlcGxhY2UoL1stX10vZywgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIE5PUk1BTElaRURfQUREX1RPX0NBUlRfRVZFTlRfTkFNRVMuc29tZSgobmFtZSkgPT5cbiAgICBub3JtYWxpemVkRXZlbnQuaW5jbHVkZXMobmFtZSlcbiAgKTtcbn07XG5cbi8qKlxuICogVHJhY2tzIGFuIGFkZF90b19jYXJ0IGV2ZW50IGluIEFtcGxpdHVkZS5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IHRvIHRyYWNrLlxuICovXG5jb25zdCBoYW5kbGVBZGRUb0NhcnRFdmVudCA9IChcbiAgZXZlbnQ6IEJhc2VFY29tbWVyY2VFdmVudCxcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBldmVudFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBpZiAoaXNMZWdhY3lVQUVjb21tZXJjZUV2ZW50KGV2ZW50KSkge1xuICAgIGV2ZW50UHJvcHMgPSB7XG4gICAgICBpdGVtczogZXZlbnQuZWNvbW1lcmNlLmFkZC5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICBpdGVtX2NhdGVnb3J5OiBwcm9kdWN0LmNhdGVnb3J5LFxuICAgICAgICBwcmljZTogcHJvZHVjdC5wcmljZSxcbiAgICAgICAgcXVhbnRpdHk6IHByb2R1Y3QucXVhbnRpdHksXG4gICAgICB9KSksXG4gICAgICBjdXJyZW5jeTogZXZlbnQuZWNvbW1lcmNlLmFkZC5jdXJyZW5jeUNvZGUsXG4gICAgICBldmVudF9mb3JtYXRfdmVyc2lvbjogXCJsZWdhY3lfdW5pdmVyc2FsX2FuYWx5dGljc1wiLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoaXNHQTRFY29tbWVyY2VFdmVudChldmVudCkpIHtcbiAgICBldmVudFByb3BzID0ge1xuICAgICAgaXRlbXM6IGV2ZW50LmVjb21tZXJjZS5pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgIGl0ZW1fbmFtZTogaXRlbS5pdGVtX25hbWUsXG4gICAgICAgIGl0ZW1fY2F0ZWdvcnk6IGl0ZW0uaXRlbV9jYXRlZ29yeSxcbiAgICAgICAgcHJpY2U6IGl0ZW0ucHJpY2UsXG4gICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxuICAgICAgfSkpLFxuICAgICAgY3VycmVuY3k6IGV2ZW50LmVjb21tZXJjZS5jdXJyZW5jeSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcImdvb2dsZV9hbmFseXRpY3NfNFwiLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRQcm9wcyA9IHtcbiAgICAgIGV2ZW50X3Byb3BlcnRpZXM6IHsgLi4uZXZlbnQgfSxcbiAgICAgIGV2ZW50X2Zvcm1hdF92ZXJzaW9uOiBcInVua25vd25cIixcbiAgICB9O1xuICB9XG5cbiAgdHJhY2soU3BpZmZ5TWV0cmljc0V2ZW50TmFtZS5BZGRUb0NhcnRDbGlja2VkLCB7XG4gICAgZXZlbnRQcm9wcyxcbiAgfSk7XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSB3aW5kb3cuZGF0YUxheWVyLnB1c2ggbWV0aG9kIHRvIGludGVyY2VwdCBhZGRfdG9fY2FydCBldmVudHMgYW5kIHNlbmQgdGhlbSB0byBBbXBsaXR1ZGUuXG4gKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgb24gYW4gaW50ZXJ2YWwgdW50aWwgdGhlIGRhdGFMYXllciBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBpbml0RGF0YUxheWVyV3JhcHBlciA9IChcbiAgdHJhY2s6IChcbiAgICBldmVudE5hbWU6IFNwaWZmeU1ldHJpY3NFdmVudE5hbWUsXG4gICAgZXZlbnRQcm9wcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICkgPT4gdm9pZFxuKSA9PiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgLy8gY3VycmVudGx5LCBvdXIgYnVuZGxlIGlzIGFsd2F5cyBsb2FkZWQgYWZ0ZXIgR1RNIGhhcyBpbml0aWFsaXplZCBHQS9kYXRhTGF5ZXJcbiAgLy8gd2UnbGwgbmVlZCB0aGlzIGNoZWNrIGhlcmUgaWYvd2hlbiB3ZSBsb2FkIHNwaWZmeSBiZWZvcmUvb3V0c2lkZSBvZiBHVE1cbiAgY29uc3QgY2hlY2tBbmRJbml0aWFsaXplID0gKCkgPT4ge1xuICAgIGlmICghd2luZG93LmRhdGFMYXllciB8fCAhKHdpbmRvdy5kYXRhTGF5ZXIgYXMgYW55KS5wdXNoKSB7XG4gICAgICBhdHRlbXB0cyArPSAxO1xuXG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gQ0hFQ0tfREFUQV9MQVlFUl9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgICAgIGBbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgbm90IGF2YWlsYWJsZSBhZnRlciAke0NIRUNLX0RBVEFfTEFZRVJfTUFYX0FUVEVNUFRTfSBhdHRlbXB0c2BcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KGNoZWNrQW5kSW5pdGlhbGl6ZSwgQ0hFQ0tfREFUQV9MQVlFUl9JTlRFUlZBTF9NUyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgXCJbc3BpZmZ5LWFpXSBkYXRhTGF5ZXIgaXMgYXZhaWxhYmxlLCB3cmFwcGluZyBwdXNoIGZ1bmN0aW9uLi4uXCJcbiAgICApO1xuICAgIGNvbnN0IG9yaWdpbmFsUHVzaCA9IHdpbmRvdy5kYXRhTGF5ZXIucHVzaDtcbiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2ggPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzQmFzZUVjb21tZXJjZUV2ZW50KGFyZ3NbMF0pICYmXG4gICAgICAgIGlzQWRkVG9DYXJ0RXZlbnQoKGFyZ3NbMF0gYXMgYW55KS5ldmVudClcbiAgICAgICkge1xuICAgICAgICBoYW5kbGVBZGRUb0NhcnRFdmVudChhcmdzWzBdIGFzIEJhc2VFY29tbWVyY2VFdmVudCwgdHJhY2spO1xuICAgICAgfVxuXG4gICAgICAvLyBJTVBPUlRBTlQ6IGNhbGwgdGhlIG9yaWdpbmFsIHB1c2ggbWV0aG9kIHNvIHRoYXQgdGhlIGV2ZW50IGlzIHN0aWxsIGxvZ2dlZCB0byBHQVxuICAgICAgcmV0dXJuIG9yaWdpbmFsUHVzaC5hcHBseSh3aW5kb3cuZGF0YUxheWVyLCBhcmdzKTtcbiAgICB9O1xuICB9O1xuXG4gIGNoZWNrQW5kSW5pdGlhbGl6ZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluaXRBbXBsaXR1ZGUgPSAoXG4gIHRyYWNrOiAoXG4gICAgZXZlbnROYW1lOiBTcGlmZnlNZXRyaWNzRXZlbnROYW1lLFxuICAgIGV2ZW50UHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApID0+IHZvaWRcbikgPT4ge1xuICAvLyBUaGlzIGZ1bmN0aW9uIG1pZ2h0IG5vdCBiZSBuZWVkZWQgYW55bW9yZSBpZiBBbXBsaXR1ZGUgaXMgaW5pdGlhbGl6ZWQgdmlhIGNvbnRleHQuXG4gIC8vIEZvciBub3csIHdlJ2xsIGtlZXAgaXQgYW5kIHBhc3MgdGhlIHRyYWNrIGZ1bmN0aW9uLlxuICAvLyBJZiBpdCdzIHRydWx5IHJlZHVuZGFudCwgaXQgY2FuIGJlIHJlbW92ZWQgbGF0ZXIuXG4gIHRyYWNrKFNwaWZmeU1ldHJpY3NFdmVudE5hbWUuQnVuZGxlTG9hZGVkKTsgLy8gRXhhbXBsZSB1c2FnZSwgYWRqdXN0IGFzIG5lZWRlZFxufTtcbiIsImltcG9ydCB7IENvbnRleHQgYXMgQXBpQ29udGV4dCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBDb250ZXh0IGFzIENvcmVDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGNvcmVDb250ZXh0VG9BcGlDb250ZXh0ID0gKGNvbnRleHQ6IENvcmVDb250ZXh0KTogQXBpQ29udGV4dCA9PiAoe1xuICBjaGF0X2lkOiBjb250ZXh0LmNoYXRJZCxcbiAgb3JnX2lkOiBjb250ZXh0Lm9yZ0lkLFxuICB1c2VyX2lkOiBjb250ZXh0LnVzZXJJZCxcbiAgb3JnX3Nob3J0X25hbWU6IGNvbnRleHQub3JnU2hvcnROYW1lLFxuICBzb3VyY2U6IGNvbnRleHQuc291cmNlLFxuICBlbnY6IGNvbnRleHQuZW52LFxufSk7XG4iLCJpbXBvcnQge1xuICBVc2VyRXZlbnQgYXMgQXBpVXNlckV2ZW50LFxuICBQTFBBdHRyaWJ1dGVDYXRlZ29yeSxcbiAgUExQSWRBdHRyaWJ1dGVzLFxuICBVc2VyRXZlbnRDYXRlZ29yeSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IFVzZXJFdmVudCBhcyBDb3JlVXNlckV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCA9IChkYXRhOiBDb3JlVXNlckV2ZW50KTogQXBpVXNlckV2ZW50ID0+IHtcbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0IHx8XG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuQWRkVG9DYXJ0XG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgcHJvZHVjdF9pZDogZGF0YS5hdHRyaWJ1dGVzLnByb2R1Y3RJZCxcbiAgICAgICAgcGFyZW50X3Byb2R1Y3RfaWQ6IGRhdGEuYXR0cmlidXRlcy5wYXJlbnRQcm9kdWN0SWQsXG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QbHBWaXNpdCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2F0ZWdvcnk6IFBMUEF0dHJpYnV0ZUNhdGVnb3J5LklkLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgLy8gd2UncmUgb25seSBoYW5kbGluZyBpZCBhdHRyaWJ1dGVzIGZvciBub3dcbiAgICAgICAgICBpZDogKGRhdGEuYXR0cmlidXRlcy5hdHRyaWJ1dGVzIGFzIFBMUElkQXR0cmlidXRlcykuaWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgcXVlcnk6IGRhdGEuYXR0cmlidXRlcy5xdWVyeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHNlYXJjaF90ZXJtOiBkYXRhLmF0dHJpYnV0ZXMuc2VhcmNoVGVybSxcbiAgICAgICAgc2VsZWN0ZWRfZmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLnNlbGVjdGVkRmlsdGVycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudF9pZDogZGF0YS5ldmVudElkLFxuICAgICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogZGF0YS5jYXRlZ29yeSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc3VnZ2VzdGlvbl9pZDogZGF0YS5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25JZCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChkYXRhLmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5QYWdlVmlzaXQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgICAgcGFnZV92aXNpdF9jYXRlZ29yeTogZGF0YS5hdHRyaWJ1dGVzLnBhZ2VWaXNpdENhdGVnb3J5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRfaWQ6IGRhdGEuZXZlbnRJZCxcbiAgICAgIGNyZWF0ZWRfYXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZpbGxlZF9zY2hlbWE6IHsgLi4uZGF0YS5hdHRyaWJ1dGVzLmZpbGxlZFNjaGVtYSB9LFxuICAgICAgICBmb3JtX3Jlc3BvbnNlX2lkOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybVJlc3BvbnNlSWQsXG4gICAgICAgIGZvcm1fdHlwZTogZGF0YS5hdHRyaWJ1dGVzLmZvcm1UeXBlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBhcHBfbG9hZGVkIGV2ZW50LCB3aGVuIHdlIHN0YXJ0IHRvIHVzZSBhcHBfdW5sb2FkZWQgd2UgbmVlZCB0byBoYW5kbGUgaXQgaGVyZVxuICByZXR1cm4ge1xuICAgIGV2ZW50X2lkOiBkYXRhLmV2ZW50SWQsXG4gICAgY3JlYXRlZF9hdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgY2F0ZWdvcnk6IGRhdGEuY2F0ZWdvcnksXG4gIH07XG59O1xuIiwiZXhwb3J0IGNvbnN0IGRpdmlkZUFycmF5ID0gPFQ+KGFycmF5OiBUW10sIHNpemU6IG51bWJlcikgPT4ge1xuICBjb25zdCByb3dzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSAxKSB7XG4gICAgcm93cy5wdXNoKGFycmF5LmZpbHRlcigoXzogVCwgaW5kZXg6IG51bWJlcikgPT4gaW5kZXggJSBzaXplID09PSBpKSk7XG4gIH1cbiAgcmV0dXJuIHJvd3M7XG59O1xuIiwiaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVR5cGUsIFByb2R1Y3RNZXNzYWdlTWV0YWRhdGEgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGdldFJlY2VudFByb2R1Y3RJbWFnZVVybHMgPSAobGFzdE1lc3NhZ2VzOiBNZXNzYWdlW10sIGN1cnJlbnRQcm9kdWN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICBjb25zdCBwcm9kdWN0TWVzc2FnZXMgPSBsYXN0TWVzc2FnZXNcbiAgICAuZmlsdGVyKChtZXNzYWdlKSA9PiBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3QgJiYgbWVzc2FnZS5tZXRhZGF0YT8uaW1hZ2VVcmwpXG4gICAgLm1hcCgobSkgPT4gbSBhcyBQcm9kdWN0TWVzc2FnZU1ldGFkYXRhKTtcbiAgLy8gcHV0IGFkZGVkIHByb2R1Y3QgaW1hZ2UgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdFxuICByZXR1cm4gW1xuICAgIC4uLnByb2R1Y3RNZXNzYWdlcy5maWx0ZXIoKG0pID0+IG0ubWV0YWRhdGE/LmlkID09PSBjdXJyZW50UHJvZHVjdElkKSxcbiAgICAuLi5wcm9kdWN0TWVzc2FnZXMuZmlsdGVyKChtKSA9PiBtLm1ldGFkYXRhPy5pZCAhPT0gY3VycmVudFByb2R1Y3RJZCksXG4gIF0ubWFwKChtKSA9PiBtLm1ldGFkYXRhIS5pbWFnZVVybCEpO1xufTtcbiIsImV4cG9ydCBjb25zdCBwcmVwYXJlTWVyY2hhbnRQYWdlID0gKCkgPT4ge1xuICBsZXQgbWV0YVZpZXdwb3J0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1ldGFbbmFtZT0ndmlld3BvcnQnXVwiKTtcbiAgaWYgKG1ldGFWaWV3cG9ydCkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBtZXRhVmlld3BvcnQuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKVxuICAgIGNvbnN0IGhhc01heGltdW1TY2FsZSA9IGNvbnRlbnQ/LmluY2x1ZGVzKFwibWF4aW11bS1zY2FsZT0xXCIpXG4gICAgaWYgKCFoYXNNYXhpbXVtU2NhbGUpIHtcbiAgICAgIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIGAke2NvbnRlbnR9LCBtYXhpbXVtLXNjYWxlPTFgKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIG1ldGFWaWV3cG9ydCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtZXRhXCIpO1xuICBtZXRhVmlld3BvcnQuc2V0QXR0cmlidXRlKFwibmFtZVwiLCBcInZpZXdwb3J0XCIpXG4gIG1ldGFWaWV3cG9ydC5zZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIsIFwid2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MVwiKVxuICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG1ldGFWaWV3cG9ydCk7XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQge1xuICBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLFxuICBNZXNzYWdlLFxuICBNZXNzYWdlUm9sZSxcbiAgTWVzc2FnZVR5cGUsXG4gIFVzZXJFdmVudCxcbn0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbUZvcm1TdWJtaXR0ZWRFdmVudCA9IChcbiAgZXZlbnQ6IFVzZXJFdmVudCxcbiAgZm9ybVJlc3BvbnNlQXR0cmlidXRlczogRm9ybVJlc3BvbnNlQXR0cmlidXRlc1snYXR0cmlidXRlcyddLFxuKTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSAhPT0gVXNlckV2ZW50Q2F0ZWdvcnkuRm9ybVN1Ym1pdHRlZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBmb3JtU3RyaW5nQ29udGVudHMgPSBPYmplY3QuZW50cmllcyhmb3JtUmVzcG9uc2VBdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7dmFsdWUudGl0bGV9OiAke2V2ZW50LmF0dHJpYnV0ZXMuZmlsbGVkU2NoZW1hW2tleV19YClcbiAgICAuam9pbignXFxuJyk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlF1ZXJ5VHlwZWQsXG4gICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgIGNvbnRlbnQ6IGZvcm1TdHJpbmdDb250ZW50cyxcbiAgICB9LFxuICB9O1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudENhdGVnb3J5IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE1lc3NhZ2UsIE1lc3NhZ2VSb2xlLCBNZXNzYWdlVHlwZSwgVXNlckV2ZW50IH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhIHF1ZXJ5IFVzZXJFdmVudCBvYmplY3QgaW50byBhIE1lc3NhZ2Ugb2JqZWN0IGZvciBwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIGV2ZW50IFRoZSB1c2VyIGV2ZW50IG9iamVjdCByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXJcbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgcXVlcnkgZXZlbnQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAqL1xuZXhwb3J0IGNvbnN0IG1lc3NhZ2VGcm9tUXVlcnlFdmVudCA9IChldmVudDogVXNlckV2ZW50KTogTWVzc2FnZSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChldmVudC5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUXVlcnlUeXBlZCkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZXZlbnQuZXZlbnRJZCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5RdWVyeVR5cGVkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBjb250ZW50OiBldmVudC5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TZWFyY2gpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGV2ZW50LmV2ZW50SWQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Vc2VyLFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzZWFyY2hUZXJtOiBldmVudC5hdHRyaWJ1dGVzLnNlYXJjaFRlcm0gfHwgJycsXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZXZlbnQuYXR0cmlidXRlcy5zZWxlY3RlZEZpbHRlcnMgfHwgW10sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsImltcG9ydCB7IFJlc3BvbnNlQ2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVJvbGUsIE1lc3NhZ2VUeXBlLCBSZXNwb25zZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMnO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSBzZXJ2ZXIgUmVzcG9uc2Ugb2JqZWN0IGludG8gYSBNZXNzYWdlIG9iamVjdCBmb3IgcHJlc2VudGF0aW9uLlxuICpcbiAqIEBwYXJhbSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0IHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciBjb250YWluaW5nIG1vZGVsIGdlbmVyYXRlZCBjb250ZW50XG4gKlxuICogQHJldHVybnMgQSBNZXNzYWdlIGlmIHRoZSByZXNwb25zZSBjb250YWlucyBrbm93biBhdHRyaWJ1dGVzLCB1bmRlZmluZWQgb3RoZXJ3aXNlXG4gKi9cbmV4cG9ydCBjb25zdCBtZXNzYWdlRnJvbVJlc3BvbnNlID0gKHJlc3BvbnNlPzogUmVzcG9uc2UpOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHJlc3BvbnNlID09IG51bGwpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5UZXh0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgY29udGVudDogcmVzcG9uc2UuYXR0cmlidXRlcy5jb250ZW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Qcm9kdWN0LFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5SZXZpZXcpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5SZXZpZXcsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICByZXZpZXc6IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmV2aWV3LFxuICAgICAgICByZXZpZXdlcjogcmVzcG9uc2UuYXR0cmlidXRlcy5yZXZpZXdlcixcbiAgICAgICAgc3RhcnM6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHRpdGxlOiByZXNwb25zZS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByaWNoSW5mb3JtYXRpb246IHJlc3BvbnNlLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlNlcGFyYXRvcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlNlcGFyYXRvcixcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlBhZ2UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5QYWdlLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogcmVzcG9uc2UuY3JlYXRlZEF0LFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuQXNzaXN0YW50LFxuICAgICAgdHlwZTogTWVzc2FnZVR5cGUuUHJvZHVjdFNlYXJjaCxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIC4uLnJlc3BvbnNlLmF0dHJpYnV0ZXMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVzcG9uc2UuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXIsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICAuLi5yZXNwb25zZS5hdHRyaWJ1dGVzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKHJlc3BvbnNlLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmlkLFxuICAgICAgY3JlYXRlZEF0OiByZXNwb25zZS5jcmVhdGVkQXQsXG4gICAgICByb2xlOiBNZXNzYWdlUm9sZS5Bc3Npc3RhbnQsXG4gICAgICB0eXBlOiBNZXNzYWdlVHlwZS5Gb3JtLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgZm9ybVR5cGU6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5Py5mb3JtVHlwZSxcbiAgICAgICAgZmllbGRzOiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5hdHRyaWJ1dGVzLnNjaGVtYS5wcm9wZXJ0aWVzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdGl0bGU6IHZhbHVlLnRpdGxlLFxuICAgICAgICAgIHR5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgZm9ybWF0OiB2YWx1ZS5mb3JtYXQsXG4gICAgICAgICAgcmVxdWlyZWQ6IHJlc3BvbnNlLmF0dHJpYnV0ZXMuc2NoZW1hLnJlcXVpcmVkLmluY2x1ZGVzKGtleSksXG4gICAgICAgIH0pKSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXNwb25zZS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5PcmRlcikge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuaWQsXG4gICAgICBjcmVhdGVkQXQ6IHJlc3BvbnNlLmNyZWF0ZWRBdCxcbiAgICAgIHJvbGU6IE1lc3NhZ2VSb2xlLkFzc2lzdGFudCxcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLk9yZGVyLFxuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgLi4ucmVzcG9uc2UuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgTWVzc2FnZSwgTWVzc2FnZVJvbGUsIE1lc3NhZ2VUeXBlLCBTdWdnZXN0aW9uLCBVc2VyRXZlbnQgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzJztcblxuLyoqXG4gKiBUcmFuc2Zvcm1zIGEgVXNlckV2ZW50IG9iamVjdCBpbnRvIGEgTWVzc2FnZSBvYmplY3QgZm9yIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0gZXZlbnQgVGhlIFVzZXJFdmVudCBvYmplY3QgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0gc3VnZ2VzdGlvbnMgQSBsaXN0IG9mIGdlbmVyYXRlZCBzdWdnZXN0aW9ucyB0byBtYXRjaCB0aGUgZXZlbnQgdG9cbiAqXG4gKiBAcmV0dXJucyBBIE1lc3NhZ2UgaWYgdGhlIGV2ZW50IGlzIGEgc3VnZ2VzdGlvbiBjbGljayBldmVudCwgdW5kZWZpbmVkIG90aGVyd2lzZVxuICovXG5leHBvcnQgY29uc3QgbWVzc2FnZUZyb21TdWdnZXN0aW9uRXZlbnQgPSAoXG4gIGV2ZW50OiBVc2VyRXZlbnQsXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW10sXG4pOiBNZXNzYWdlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSBVc2VyRXZlbnRDYXRlZ29yeS5TdWdnZXN0aW9uQ2xpY2tlZCkge1xuICAgIGNvbnN0IHsgc3VnZ2VzdGlvbklkIH0gPSBldmVudC5hdHRyaWJ1dGVzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBldmVudC5ldmVudElkLFxuICAgICAgcm9sZTogTWVzc2FnZVJvbGUuVXNlcixcbiAgICAgIHR5cGU6IE1lc3NhZ2VUeXBlLlN1Z2dlc3Rpb25DbGlja2VkLFxuICAgICAgY3JlYXRlZEF0OiBldmVudC5jcmVhdGVkQXQsXG4gICAgICBtZXRhZGF0YToge1xuICAgICAgICBzdWdnZXN0aW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25Db250ZW50OiBzdWdnZXN0aW9ucy5maW5kKChzKSA9PiBzLmlkID09PSBzdWdnZXN0aW9uSWQpPy5jb250ZW50ID8/ICcnLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBOZXh0TWVzc2FnZVJlcXVlc3QgYXMgQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0IH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IE5leHRNZXNzYWdlUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQgfSBmcm9tICcuL2NvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCc7XG5cbmV4cG9ydCBjb25zdCBtZXNzYWdlUmVxdWVzdFRvQ29tbWVyY2VNZXNzYWdlUmVxdWVzdCA9IChcbiAgZGF0YTogTmV4dE1lc3NhZ2VSZXF1ZXN0LFxuKTogQXBpTmV4dE1lc3NhZ2VSZXF1ZXN0ID0+ICh7XG4gIGNvbnRleHQ6IHtcbiAgICBjaGF0X2lkOiBkYXRhLmNvbnRleHQuY2hhdElkLFxuICAgIG9yZ19pZDogZGF0YS5jb250ZXh0Lm9yZ0lkLFxuICAgIG9yZ19zaG9ydF9uYW1lOiBkYXRhLmNvbnRleHQub3JnU2hvcnROYW1lLFxuICAgIHVzZXJfaWQ6IGRhdGEuY29udGV4dC51c2VySWQsXG4gICAgc291cmNlOiBkYXRhLmNvbnRleHQuc291cmNlLFxuICAgIGVudjogZGF0YS5jb250ZXh0LmVudixcbiAgfSxcbiAgaWQ6IGRhdGEuaWQsXG4gIGZlYXR1cmVfZmxhZ3M6IGRhdGEuZmVhdHVyZUZsYWdzLFxuICB1c2VyX2V2ZW50czogZGF0YS51c2VyRXZlbnRzPy5tYXAoKHVzZXJFdmVudCkgPT4gY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50KHVzZXJFdmVudCkpLFxuICBnZW5lcmF0aW9uX3BhcmFtczoge1xuICAgIG1vZGVsOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm1vZGVsLFxuICAgIG1heF90b2tlbnM6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ubWF4VG9rZW5zLFxuICAgIHN0b3A6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8uc3RvcCxcbiAgICBzdHJlYW06IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8uc3RyZWFtLFxuICAgIHRlbXBlcmF0dXJlOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnRlbXBlcmF0dXJlLFxuICAgIHRvcF9wOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnRvcFAsXG4gICAgbnVtX3N1Z2dlc3Rpb25zOiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/Lm51bVN1Z2dlc3Rpb25zLFxuICAgIHJlc3BvbnNlX3N5c3RlbV9wcm9tcHQ6IGRhdGEuZ2VuZXJhdGlvblBhcmFtcz8ucmVzcG9uc2VTeXN0ZW1Qcm9tcHQsXG4gICAgc3VnZ2VzdGlvbl9zeXN0ZW1fcHJvbXB0OiBkYXRhLmdlbmVyYXRpb25QYXJhbXM/LnN1Z2dlc3Rpb25TeXN0ZW1Qcm9tcHQsXG4gICAgcmVzcG9uc2VfY2FjaGluZzogZGF0YS5nZW5lcmF0aW9uUGFyYW1zPy5yZXNwb25zZUNhY2hpbmcsXG4gIH0sXG59KTtcbiIsImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOb2RlU2VsZWN0b3Ige1xuICBwcml2YXRlIHBhdHRlcm46IHN0cmluZztcbiAgcHJpdmF0ZSByb290OiBEb2N1bWVudDtcblxuICBjb25zdHJ1Y3RvcihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHRoaXMucm9vdCA9IGRvY3VtZW50O1xuICB9XG5cbiAgZ2V0UGF0dGVybigpIHtcbiAgICByZXR1cm4gdGhpcy5wYXR0ZXJuO1xuICB9XG5cbiAgc2V0Um9vdChyb290OiBEb2N1bWVudCkge1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gIH1cblxuICBnZXRSb290KCkge1xuICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gIH1cblxuICBhYnN0cmFjdCBwYXJzZSgpOiBOb2RlIHwgbnVsbDtcbn1cblxuY2xhc3MgUXVlcnlTZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb290KCkucXVlcnlTZWxlY3Rvcih0aGlzLmdldFBhdHRlcm4oKSk7XG4gIH1cbn1cblxuY2xhc3MgSURTZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb290KCkuZ2V0RWxlbWVudEJ5SWQodGhpcy5nZXRQYXR0ZXJuKCkpIGFzIE5vZGU7XG4gIH1cbn1cblxuY2xhc3MgWHBhdGhTZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSb290KCk/LmV2YWx1YXRlKFxuICAgICAgdGhpcy5nZXRQYXR0ZXJuKCksXG4gICAgICB0aGlzLmdldFJvb3QoKSxcbiAgICAgIG51bGwsXG4gICAgICBYUGF0aFJlc3VsdC5GSVJTVF9PUkRFUkVEX05PREVfVFlQRSxcbiAgICAgIG51bGwsXG4gICAgKT8uc2luZ2xlTm9kZVZhbHVlIGFzIE5vZGU7XG4gIH1cbn1cblxuY2xhc3MgQ2hhaW5TZWxlY3RvciBleHRlbmRzIE5vZGVTZWxlY3RvciB7XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgc2VsZWN0b3JJbmRleCA9IDA7XG4gICAgY29uc3Qgc2VsZWN0b3JzID0gdGhpcy5nZXRQYXR0ZXJuKCkuc3BsaXQoJ0AnKTtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBzZWxlY3RvcnMubGVuZ3RoIC0gMTtcblxuICAgIGNvbnN0IHBhcnNlQ2hhaW4gPSAocGF0dGVybjogc3RyaW5nLCBwcmV2Tm9kZT86IE5vZGUgfCBudWxsKTogTm9kZSB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBTZWxlY3RvckZhY3RvcnkucGFyc2UocGF0dGVybik7XG5cbiAgICAgIGlmIChwcmV2Tm9kZSkge1xuICAgICAgICBzZWxlY3Rvci5zZXRSb290KHByZXZOb2RlIGFzIERvY3VtZW50KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBzZWxlY3Rvci5wYXJzZSgpO1xuICAgICAgaWYgKHNlbGVjdG9ySW5kZXggPT09IGxhc3RJbmRleCkge1xuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIGxldCBub2RlOiBOb2RlIHwgbnVsbCB8IHVuZGVmaW5lZCA9IGN1cnJlbnROb2RlIHx8IGRvY3VtZW50O1xuICAgICAgaWYgKChjdXJyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCk/LnNoYWRvd1Jvb3QpIHtcbiAgICAgICAgbm9kZSA9IChjdXJyZW50Tm9kZSBhcyBIVE1MRWxlbWVudCkuc2hhZG93Um9vdDtcbiAgICAgIH1cblxuICAgICAgaWYgKChjdXJyZW50Tm9kZSBhcyBIVE1MSUZyYW1lRWxlbWVudCk/LmNvbnRlbnRXaW5kb3cpIHtcbiAgICAgICAgbm9kZSA9IChjdXJyZW50Tm9kZSBhcyBIVE1MSUZyYW1lRWxlbWVudCkuY29udGVudFdpbmRvdz8uZG9jdW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZUNoYWluKHNlbGVjdG9yc1srK3NlbGVjdG9ySW5kZXhdLnRyaW0oKSwgbm9kZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwYXJzZUNoYWluKHNlbGVjdG9yc1tzZWxlY3RvckluZGV4XS50cmltKCkpO1xuICB9XG59XG5cbmNsYXNzIEVtcHR5IGV4dGVuZHMgTm9kZVNlbGVjdG9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJycpO1xuICB9XG4gIHBhcnNlKCk6IE5vZGUgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2VsZWN0b3JGYWN0b3J5IHtcbiAgc3RhdGljIHBhcnNlKGNvbXBvc2VkU2VsZWN0b3I/OiBzdHJpbmcpIHtcbiAgICBpZiAoIWNvbXBvc2VkU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBuZXcgRW1wdHkoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGxpdCA9IGNvbXBvc2VkU2VsZWN0b3Iuc3BsaXQoJ3wnKTtcbiAgICBjb25zdCB0eXBlID0gc3BsaXRbMF07XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBzcGxpdFsxXTtcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnaWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5pZChzZWxlY3Rvcik7XG4gICAgICBjYXNlICdxdWVyeSc6XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KHNlbGVjdG9yKTtcbiAgICAgIGNhc2UgJ3hwYXRoJzpcbiAgICAgICAgcmV0dXJuIHRoaXMueHBhdGgoc2VsZWN0b3IpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG5ldyBFbXB0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVjayhzZWxlY3Rvcj86IE5vZGVTZWxlY3Rvcikge1xuICAgIHJldHVybiBzZWxlY3RvciA/PyBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBjaGFpbihwYXR0ZXJuPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgQ2hhaW5TZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG5cbiAgc3RhdGljIGlkKHBhdHRlcm4/OiBzdHJpbmcpOiBOb2RlU2VsZWN0b3Ige1xuICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IElEU2VsZWN0b3IocGF0dGVybikgOiBuZXcgRW1wdHkoKTtcbiAgfVxuXG4gIHN0YXRpYyBxdWVyeShwYXR0ZXJuPzogc3RyaW5nKTogTm9kZVNlbGVjdG9yIHtcbiAgICByZXR1cm4gcGF0dGVybiA/IG5ldyBRdWVyeVNlbGVjdG9yKHBhdHRlcm4pIDogbmV3IEVtcHR5KCk7XG4gIH1cblxuICBzdGF0aWMgeHBhdGgocGF0dGVybj86IHN0cmluZyk6IE5vZGVTZWxlY3RvciB7XG4gICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgWHBhdGhTZWxlY3RvcihwYXR0ZXJuKSA6IG5ldyBFbXB0eSgpO1xuICB9XG59XG4iLCJleHBvcnQgdHlwZSBSZXBsYWNlT3A8VD4gPSB7ICRyZXBsYWNlOiBUIH07XG5leHBvcnQgdHlwZSBEZWxldGVPcCA9IHsgJGRlbGV0ZTogdHJ1ZSB9O1xuXG4vLyBUcmVhdCB0aGVzZSBhcyBhdG9taWMgdmFsdWVzIChub3QgcmVjdXJzZWQgaW50bylcbnR5cGUgQnVpbHRpbiA9IERhdGUgfCBSZWdFeHAgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik7XG5cbnR5cGUgUHJpbWl0aXZlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IGJpZ2ludCB8IHN5bWJvbCB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogT3ZlcnJpZGU8VD4gaXMgYSBEZWVwUGFydGlhbC1saWtlIHR5cGUgd2l0aCBzcGVjaWFsIG9wZXJhdG9yczpcbiAqIC0geyAkcmVwbGFjZTogVCB9IHRvIHJlcGxhY2UgYW4gZW50aXJlIHN1YnRyZWUvYXJyYXlcbiAqIC0geyAkZGVsZXRlOiB0cnVlIH0gdG8gZGVsZXRlIGFuIG9iamVjdCBrZXlcbiAqXG4gKiBBcnJheXMgYmVoYXZpb3I6XG4gKiAtIEFycmF5cyBvZiBvYmplY3RzOiBtZXJnZS1ieS1pbmRleCBieSBkZWZhdWx0ICh1bmxlc3MgYGFycmF5U3RyYXRlZ3k6ICdyZXBsYWNlJ2Agb3IgYCRyZXBsYWNlYCBpcyB1c2VkKVxuICogLSBBcnJheXMgb2YgcHJpbWl0aXZlcyAoc3RyaW5nL251bWJlci9ib29sZWFuLy4uLik6IHJlcGxhY2VkIGJ5IGRlZmF1bHQgd2hlbiBhIHBhdGNoIGFycmF5IGlzIHByb3ZpZGVkXG4gKi9cbmV4cG9ydCB0eXBlIE92ZXJyaWRlPFQ+ID1cbiAgLy8gYXRvbWljXG4gIFQgZXh0ZW5kcyBQcmltaXRpdmUgfCBCdWlsdGluXG4gICAgPyBUIHwgUmVwbGFjZU9wPFQ+IHwgRGVsZXRlT3BcbiAgICA6IC8vIGFycmF5c1xuICAgICAgVCBleHRlbmRzIChpbmZlciBVKVtdXG4gICAgICA/IEFycmF5PE92ZXJyaWRlPFU+IHwgdW5kZWZpbmVkPiB8IFJlcGxhY2VPcDxUPlxuICAgICAgOiAvLyBtYXBzL3NldHMg4oCTIGtlZXAgc2ltcGxlOiBvbmx5IGFsbG93IGZ1bGwgcmVwbGFjZVxuICAgICAgICBUIGV4dGVuZHMgTWFwPHVua25vd24sIHVua25vd24+IHwgU2V0PHVua25vd24+XG4gICAgICAgID8gUmVwbGFjZU9wPFQ+XG4gICAgICAgIDogLy8gb2JqZWN0c1xuICAgICAgICAgIFQgZXh0ZW5kcyBvYmplY3RcbiAgICAgICAgICA/IHsgW0sgaW4ga2V5b2YgVF0/OiBPdmVycmlkZTxUW0tdPiB8IERlbGV0ZU9wIHwgbnVsbCB9IHwgUmVwbGFjZU9wPFQ+XG4gICAgICAgICAgOiBUO1xuXG5leHBvcnQgdHlwZSBNZXJnZU9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBIb3cgdG8gdHJlYXQgYXJyYXlzIHdoZW4gcGF0Y2ggcHJvdmlkZXMgYW4gYXJyYXkgKG5vdCAkcmVwbGFjZSk6XG4gICAqIC0gJ3JlcGxhY2UnOiBhbHdheXMgdXNlIHBhdGNoIGFycmF5IGFzIHdob2xlIHZhbHVlXG4gICAqIC0gJ21lcmdlQnlJbmRleCc6IG1lcmdlIGVhY2ggaW5kZXggcmVjdXJzaXZlbHkgKGRlZmF1bHQgZm9yIGFycmF5cyBvZiBvYmplY3RzKVxuICAgKiBOb3RlOiBBcnJheXMgb2YgcHJpbWl0aXZlcyBhcmUgcmVwbGFjZWQgYnkgZGVmYXVsdCByZWdhcmRsZXNzIG9mIHRoaXMgb3B0aW9uLlxuICAgKi9cbiAgYXJyYXlTdHJhdGVneT86ICdyZXBsYWNlJyB8ICdtZXJnZUJ5SW5kZXgnO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgYSBgbnVsbGAgcGF0Y2ggdmFsdWUgZGVsZXRlcyB0aGUga2V5IGZyb20gYW4gb2JqZWN0IChSRkMgNzM5Ni1pc2gpXG4gICAqL1xuICBudWxsRGVsZXRlcz86IGJvb2xlYW47XG59O1xuXG4vLyBQcmV2ZW50cyBUIGZyb20gYmVpbmcgaW5mZXJyZWQgZnJvbSB0aGUgJ3BhdGNoJyBwYXJhbWV0ZXI7IGl0IG11c3QgYmUgaW5mZXJyZWQgZnJvbSAnYmFzZScuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTQ4MjkjaXNzdWVjb21tZW50LTUwNDA0MjU0NlxudHlwZSBOb0luZmVyPFQ+ID0gW1RdW1QgZXh0ZW5kcyB1bmtub3duID8gMCA6IG5ldmVyXTtcblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh4OiB1bmtub3duKTogeCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiAoXG4gICAgISF4ICYmXG4gICAgdHlwZW9mIHggPT09ICdvYmplY3QnICYmXG4gICAgIUFycmF5LmlzQXJyYXkoeCkgJiZcbiAgICAhKHggaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgICEoeCBpbnN0YW5jZW9mIFJlZ0V4cClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNSZXBsYWNlKHg6IHVua25vd24pOiB4IGlzIFJlcGxhY2VPcDx1bmtub3duPiB7XG4gIHJldHVybiAhIXggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmICckcmVwbGFjZScgaW4gKHggYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xufVxuZnVuY3Rpb24gaXNEZWxldGUoeDogdW5rbm93bik6IHggaXMgRGVsZXRlT3Age1xuICByZXR1cm4gISF4ICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiAoeCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikuJGRlbGV0ZSA9PT0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQcmltaXRpdmVWYWx1ZSh4OiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGNvbnN0IHQgPSB0eXBlb2YgeDtcbiAgcmV0dXJuIChcbiAgICB4ID09PSBudWxsIHx8XG4gICAgdCA9PT0gJ3N0cmluZycgfHxcbiAgICB0ID09PSAnbnVtYmVyJyB8fFxuICAgIHQgPT09ICdib29sZWFuJyB8fFxuICAgIHQgPT09ICdiaWdpbnQnIHx8XG4gICAgdCA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0ID09PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5T2ZQcmltaXRpdmVzKGFycjogdW5rbm93bltdKTogYm9vbGVhbiB7XG4gIGlmIChhcnIubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7IC8vIGFtYmlndW91cywgZGVmYXVsdCB0byBtZXJnZS1ieS1pbmRleCBvbiBlbXB0eVxuICAvLyBJZiBldmVyeSBkZWZpbmVkIGVsZW1lbnQgaXMgcHJpbWl0aXZlLCB0cmVhdCBhcyBwcmltaXRpdmVzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3QgdiA9IGFycltpXTtcbiAgICBpZiAodiAhPT0gdW5kZWZpbmVkICYmICFpc1ByaW1pdGl2ZVZhbHVlKHYpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lcmdlQW55KGJhc2VBbnk6IHVua25vd24sIHBhdGNoQW55OiB1bmtub3duLCBvcHRzOiBNZXJnZU9wdGlvbnMpOiB1bmtub3duIHtcbiAgaWYgKGlzUmVwbGFjZShwYXRjaEFueSkpIHJldHVybiBwYXRjaEFueS4kcmVwbGFjZSBhcyB1bmtub3duO1xuICBpZiAoaXNEZWxldGUocGF0Y2hBbnkpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBjYWxsZXIgZGVsZXRlcyB0aGUga2V5XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZUFueSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaEFueSkpIHtcbiAgICAgIGNvbnN0IGJhc2VBcnIgPSBiYXNlQW55IGFzIHVua25vd25bXTtcbiAgICAgIGNvbnN0IHBhdGNoQXJyID0gcGF0Y2hBbnkgYXMgdW5rbm93bltdO1xuICAgICAgY29uc3Qgc2hvdWxkUmVwbGFjZSA9XG4gICAgICAgIG9wdHMuYXJyYXlTdHJhdGVneSA9PT0gJ3JlcGxhY2UnIHx8XG4gICAgICAgIGlzQXJyYXlPZlByaW1pdGl2ZXMoYmFzZUFycikgfHxcbiAgICAgICAgaXNBcnJheU9mUHJpbWl0aXZlcyhwYXRjaEFycik7XG4gICAgICBpZiAoc2hvdWxkUmVwbGFjZSkgcmV0dXJuIHBhdGNoQW55IGFzIHVua25vd247XG4gICAgICBjb25zdCBvdXQgPSBiYXNlQXJyLnNsaWNlKCk7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heChvdXQubGVuZ3RoLCBwYXRjaEFyci5sZW5ndGgpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBwVmFsID0gcGF0Y2hBcnJbaV07XG4gICAgICAgIGlmIChwVmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvdXRbaV0gPSBtZXJnZUFueShvdXRbaV0sIHBWYWwsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0IGFzIHVua25vd247XG4gICAgfVxuICAgIHJldHVybiBiYXNlQW55IGFzIHVua25vd247XG4gIH1cblxuICBpZiAoaXNQbGFpbk9iamVjdChiYXNlQW55KSAmJiBpc1BsYWluT2JqZWN0KHBhdGNoQW55KSkge1xuICAgIGNvbnN0IGJhc2VPYmogPSBiYXNlQW55IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbnN0IHBhdGNoT2JqID0gcGF0Y2hBbnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgb3V0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgLi4uYmFzZU9iaiB9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhdGNoT2JqKSkge1xuICAgICAgY29uc3QgcFZhbCA9IHBhdGNoT2JqW2tleV07XG4gICAgICBpZiAocFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGxlYXZlIGFzLWlzXG4gICAgICB9IGVsc2UgaWYgKG9wdHMubnVsbERlbGV0ZXMgJiYgcFZhbCA9PT0gbnVsbCkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVwbGFjZShwVmFsKSkge1xuICAgICAgICBvdXRba2V5XSA9IHBWYWwuJHJlcGxhY2U7XG4gICAgICB9IGVsc2UgaWYgKGlzRGVsZXRlKHBWYWwpKSB7XG4gICAgICAgIGRlbGV0ZSBvdXRba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dFtrZXldID0gbWVyZ2VBbnkoYmFzZU9iaj8uW2tleV0sIHBWYWwsIG9wdHMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0IGFzIHVua25vd247XG4gIH1cblxuICByZXR1cm4gKHBhdGNoQW55IGFzIHVua25vd24pID8/IGJhc2VBbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseU92ZXJyaWRlczxUPihcbiAgYmFzZTogVCxcbiAgcGF0Y2g6IE92ZXJyaWRlPE5vSW5mZXI8VD4+LFxuICBvcHRzOiBNZXJnZU9wdGlvbnMgPSB7fSxcbik6IFQge1xuICBjb25zdCB7IGFycmF5U3RyYXRlZ3kgPSAnbWVyZ2VCeUluZGV4JywgbnVsbERlbGV0ZXMgPSBmYWxzZSB9ID0gb3B0cztcblxuICAvLyBIYW5kbGUgd2hvbGUtbm9kZSBjb250cm9sIG9wZXJhdG9ycyBvbiBwYXRjaCBpdHNlbGZcbiAgaWYgKGlzUmVwbGFjZShwYXRjaCkpIHJldHVybiBwYXRjaC4kcmVwbGFjZSBhcyBUO1xuICBpZiAoaXNEZWxldGUocGF0Y2gpKSByZXR1cm4gdW5kZWZpbmVkIGFzIHVua25vd24gYXMgVDtcblxuICAvLyBBcnJheXNcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmFzZSkpIHtcbiAgICBpZiAoaXNSZXBsYWNlKHBhdGNoKSkgcmV0dXJuIHBhdGNoLiRyZXBsYWNlIGFzIFQ7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGF0Y2gpKSB7XG4gICAgICBpZiAoYXJyYXlTdHJhdGVneSA9PT0gJ3JlcGxhY2UnKSByZXR1cm4gcGF0Y2ggYXMgdW5rbm93biBhcyBUO1xuICAgICAgLy8gbWVyZ2UgYnkgaW5kZXhcbiAgICAgIGNvbnN0IG91dCA9IChiYXNlIGFzIHVua25vd25bXSkuc2xpY2UoKTtcbiAgICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG91dC5sZW5ndGgsIHBhdGNoLmxlbmd0aCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHBWYWwgPSAocGF0Y2ggYXMgdW5rbm93bltdKVtpXTtcbiAgICAgICAgaWYgKHBWYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG91dFtpXSA9IG1lcmdlQW55KG91dFtpXSwgcFZhbCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICAvLyBpbnZhbGlkIHBhdGNoIHR5cGUgZm9yIGFuIGFycmF5IOKGkiBpZ25vcmUgYW5kIHJldHVybiBiYXNlXG4gICAgcmV0dXJuIGJhc2UgYXMgVDtcbiAgfVxuXG4gIC8vIFBsYWluIG9iamVjdHNcbiAgaWYgKGlzUGxhaW5PYmplY3QoYmFzZSkgJiYgaXNQbGFpbk9iamVjdChwYXRjaCkpIHtcbiAgICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi4oYmFzZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBjb25zdCBwYXRjaE9iaiA9IHBhdGNoIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhdGNoT2JqKSkge1xuICAgICAgY29uc3QgcFZhbCA9IHBhdGNoT2JqW2tleV07XG4gICAgICBpZiAocFZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGxlYXZlIGV4aXN0aW5nIHZhbHVlXG4gICAgICB9IGVsc2UgaWYgKG51bGxEZWxldGVzICYmIHBWYWwgPT09IG51bGwpIHtcbiAgICAgICAgZGVsZXRlIG91dFtrZXldO1xuICAgICAgfSBlbHNlIGlmIChpc1JlcGxhY2UocFZhbCkpIHtcbiAgICAgICAgb3V0W2tleV0gPSBwVmFsLiRyZXBsYWNlO1xuICAgICAgfSBlbHNlIGlmIChpc0RlbGV0ZShwVmFsKSkge1xuICAgICAgICBkZWxldGUgb3V0W2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBiVmFsID0gKGJhc2UgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgICAgIG91dFtrZXldID0gbWVyZ2VBbnkoYlZhbCwgcFZhbCwgb3B0cyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgLy8gRm9yIHByaW1pdGl2ZXMgb3Igd2hlbiBwYXRjaCBpcyBwcmltaXRpdmUsIHBhdGNoIHdpbnMgaWYgZGVmaW5lZFxuICByZXR1cm4gKChwYXRjaCBhcyB1bmtub3duKSA/PyBiYXNlKSBhcyBUO1xufVxuIiwiXG5jbGFzcyBTdHJpbmdVdGlscyB7XG4gIHN0YXRpYyBpc051bGxPckVtcHR5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZVRyaW1tZWQgPSB2YWx1ZT8udHJpbSgpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlVHJpbW1lZCA9PT0gJyc7XG4gIH1cblxuICBzdGF0aWMgdHJpbVRvTnVsbCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2YWx1ZVRyaW1tZWQgPSB2YWx1ZT8udHJpbSgpO1xuICAgIHJldHVybiBTdHJpbmdVdGlscy5pc051bGxPckVtcHR5KHZhbHVlVHJpbW1lZCkgPyB1bmRlZmluZWQgOiB2YWx1ZVRyaW1tZWQ7XG4gIH1cblxuICBzdGF0aWMgY2FwaXRhbGl6ZSh0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdHlwZS5zdWJzdHJpbmcoMSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGZpcnN0IHBhdHRlcm4gaW4gYW4gYXJyYXkgdGhhdCBtYXRjaGVzIGEgZ2l2ZW4gVVJMLlxuICAgKiBQYXR0ZXJucyBjYW4gaW5jbHVkZSBhIHNpbmdsZSB3aWxkY2FyZCAnKicgd2hpY2ggbWF0Y2hlcyBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy5cbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm5zXG4gICAqIEBwYXJhbSB1cmxUb1Rlc3RcbiAgICogQHJldHVybnNcbiAgICovXG4gIHN0YXRpYyBmaW5kTWF0Y2hpbmdQYXR0ZXJuKHBhdHRlcm5zOiBzdHJpbmdbXSwgdXJsVG9UZXN0OiBMb2NhdGlvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF1cmxUb1Rlc3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAvLyBUZXN0IG9ubHkgaWYgYSBwYXRobmFtZSBpcyBwcmVzZW50LlxuICAgICAgaWYgKHVybFRvVGVzdC5wYXRobmFtZSAhPT0gJy8nKSB7XG4gICAgICAgIC8vIEVzY2FwZSBzcGVjaWFsIHJlZ2V4IGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm5cbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgY2hhcmFjdGVycyBsaWtlICcuJywgJysnLCAnPycsICcoJywgZXRjLiwgaW4gdGhlIHBhdHRlcm4gYXJlIHRyZWF0ZWQgbGl0ZXJhbGx5LlxuICAgICAgICBjb25zdCBlc2NhcGVkUGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvWy4rP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIHdpbGRjYXJkICcqJyB3aXRoIGl0cyByZWdleCBlcXVpdmFsZW50ICcuKicgKG1hdGNoZXMgYW55IGNoYXJhY3RlciB6ZXJvIG9yIG1vcmUgdGltZXMpXG4gICAgICAgIGNvbnN0IHJlZ2V4UGF0dGVybiA9IGVzY2FwZWRQYXR0ZXJuLnJlcGxhY2UoL1xcKi9nLCAnLionKTtcblxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF4ke3JlZ2V4UGF0dGVybn0kYCk7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KHVybFRvVGVzdC5wYXRobmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGF0dGVybjtcbiAgICAgICAgfVxuXG4gICAgICB9IGVsc2UgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aCh1cmxUb1Rlc3QuaG9zdG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgeyBTdHJpbmdVdGlscyB9O1xuIiwiaW1wb3J0IHsgU3VwcG9ydGVkRXZlbnRSZXF1ZXN0IGFzIEFwaVN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRFdmVudFJlcXVlc3QgYXMgQ29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9hcGkvc3VwcG9ydGVkRXZlbnRSZXF1ZXN0JztcbmltcG9ydCB7IGNvcmVVc2VyRXZlbnRUb0FwaVVzZXJFdmVudCB9IGZyb20gJy4vY29yZVVzZXJFdmVudFRvQXBpVXNlckV2ZW50JztcbmltcG9ydCB7IGNvcmVDb250ZXh0VG9BcGlDb250ZXh0IH0gZnJvbSAnLi9jb3JlQ29udGV4dFRvQXBpQ29udGV4dCc7XG5cbmV4cG9ydCBjb25zdCBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0VG9BcGlSZXF1ZXN0ID0gKFxuICBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0OiBDb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LFxuKTogQXBpU3VwcG9ydGVkRXZlbnRSZXF1ZXN0ID0+ICh7XG4gIGlkOiBjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmlkLFxuICB1c2VyX2V2ZW50OiBjb3JlVXNlckV2ZW50VG9BcGlVc2VyRXZlbnQoY29yZVN1cHBvcnRlZEV2ZW50UmVxdWVzdC51c2VyRXZlbnQpLFxuICBjb250ZXh0OiBjb3JlQ29udGV4dFRvQXBpQ29udGV4dChjb3JlU3VwcG9ydGVkRXZlbnRSZXF1ZXN0LmNvbnRleHQpLFxufSk7XG4iLCIvLyBUaGlzIGVtYWlsIHZhbGlkYXRlcyB0aGF0IHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgYEBgIHN5bWJvbCxcbi8vIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgYEBgIHN5bWJvbCBhbmQgdGhlIGAuYCBzeW1ib2wsXG4vLyBhbmQgb25lIG9yIG1vcmUgY2hhcmFjdGVycyBhZnRlciB0aGUgYC5gIHN5bWJvbFxuLy8gSXQgZG9lcyBOT1QgdmFsaWRhdGUgYWxsIHBvc3NpYmxlIGVtYWlsIGZvcm1hdHMsIGJ1dCBpdCBpcyBhIGRlY2VudCBwbGFjZSB0byBzdGFydC5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsID0gKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuID0+IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvLnRlc3QodmFsdWUpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFlQSxNQUFNLHFDQUFxQyxDQUFDLGFBQWEsY0FBYztBQUN2RSxNQUFNLCtCQUErQjtBQUNyQyxNQUFNLGdDQUFnQzs7Ozs7Ozs7QUFTdEMsTUFBTSxvQkFBb0IsVUFBMkI7Q0FDbkQsTUFBTSxrQkFBa0IsTUFBTSxRQUFRLFNBQVMsR0FBRyxDQUFDLGFBQWE7QUFDaEUsUUFBTyxtQ0FBbUMsTUFBTSxTQUM5QyxnQkFBZ0IsU0FBUyxLQUFLLENBQy9COzs7Ozs7O0FBUUgsTUFBTSx3QkFDSixPQUNBLFVBSUc7Q0FDSCxJQUFJQTtBQUVKLEtBQUkseUJBQXlCLE1BQU0sQ0FDakMsY0FBYTtFQUNYLE9BQU8sTUFBTSxVQUFVLElBQUksU0FBUyxLQUFLLGFBQWE7R0FDcEQsV0FBVyxRQUFRO0dBQ25CLGVBQWUsUUFBUTtHQUN2QixPQUFPLFFBQVE7R0FDZixVQUFVLFFBQVE7R0FDbkIsRUFBRTtFQUNILFVBQVUsTUFBTSxVQUFVLElBQUk7RUFDOUIsc0JBQXNCO0VBQ3ZCO1VBQ1Esb0JBQW9CLE1BQU0sQ0FDbkMsY0FBYTtFQUNYLE9BQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFVO0dBQzFDLFdBQVcsS0FBSztHQUNoQixlQUFlLEtBQUs7R0FDcEIsT0FBTyxLQUFLO0dBQ1osVUFBVSxLQUFLO0dBQ2hCLEVBQUU7RUFDSCxVQUFVLE1BQU0sVUFBVTtFQUMxQixzQkFBc0I7RUFDdkI7S0FFRCxjQUFhO0VBQ1gs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
@@ -0,0 +1,23 @@
1
+ //#region src/atoms/search/utils.ts
2
+ const formatFilterDisplayName = (displayName) => {
3
+ const sizes = [
4
+ "xxxs",
5
+ "xxs",
6
+ "xs",
7
+ "s",
8
+ "m",
9
+ "l",
10
+ "xl",
11
+ "xxl",
12
+ "xxxl",
13
+ "xxxxl"
14
+ ];
15
+ return displayName.toLowerCase().split(" ").map((word) => {
16
+ if (sizes.includes(word)) return word.toUpperCase();
17
+ return word.charAt(0).toUpperCase() + word.slice(1);
18
+ }).join(" ").replace(/Iphone/g, "iPhone");
19
+ };
20
+
21
+ //#endregion
22
+ export { formatFilterDisplayName };
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ3FCeElwRVYuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2F0b21zL3NlYXJjaC91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBzaXplcyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJywgJ3h4eGwnLCAneHh4eGwnXTtcblxuICBjb25zdCBwcm9jZXNzZWRXb3JkcyA9IGRpc3BsYXlOYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgIGlmIChzaXplcy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRpdGxlQ2FzZWROYW1lID0gcHJvY2Vzc2VkV29yZHMuam9pbignICcpO1xuXG4gIC8vIEZpbmFsIHJlcGxhY2VtZW50cyBmb3Igc3BlY2lhbCBjYXNlc1xuICByZXR1cm4gdGl0bGVDYXNlZE5hbWUucmVwbGFjZSgvSXBob25lL2csICdpUGhvbmUnKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQSxNQUFhLDJCQUEyQixnQkFBd0I7Q0FDOUQsTUFBTSxRQUFRO0VBQUM7RUFBUTtFQUFPO0VBQU07RUFBSztFQUFLO0VBQUs7RUFBTTtFQUFPO0VBQVE7RUFBUTtBQWVoRixRQWJ1QixZQUNwQixhQUFhLENBQ2IsTUFBTSxJQUFJLENBQ1YsS0FBSyxTQUFTO0FBQ2IsTUFBSSxNQUFNLFNBQVMsS0FBSyxDQUN0QixRQUFPLEtBQUssYUFBYTtBQUUzQixTQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsYUFBYSxHQUFHLEtBQUssTUFBTSxFQUFFO0dBQ25ELENBRWtDLEtBQUssSUFBSSxDQUd6QixRQUFRLFdBQVcsU0FBUyJ9
@@ -0,0 +1,33 @@
1
+
2
+ //#region src/application/models/guards/utils.ts
3
+ /**
4
+ * Checks if an object has a property of a specific type
5
+ *
6
+ * @param obj - The object to check
7
+ * @param prop - The property name to check
8
+ * @param type - The expected type of the property
9
+ * @param isOptional - Whether the property is optional (defaults to false)
10
+ *
11
+ * @returns boolean indicating if the object has the property of the specified type
12
+ */
13
+ const hasPropertyOfType = (obj, prop, type, isOptional = false) => {
14
+ try {
15
+ if (obj == null || typeof obj !== "object") return false;
16
+ if (!(prop in obj)) return isOptional;
17
+ const value = obj[prop];
18
+ if (isOptional && value == null) return true;
19
+ if (type === "array") return Array.isArray(value);
20
+ return typeof value === type;
21
+ } catch (err) {
22
+ return false;
23
+ }
24
+ };
25
+
26
+ //#endregion
27
+ Object.defineProperty(exports, 'hasPropertyOfType', {
28
+ enumerable: true,
29
+ get: function () {
30
+ return hasPropertyOfType;
31
+ }
32
+ });
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMtQ3NNYlptUncuY2pzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQVVBLE1BQWEscUJBQ1gsS0FDQSxNQUNBLE1BQ0EsYUFBc0IsVUFDVDtBQUNiLEtBQUk7QUFDRixNQUFJLE9BQU8sUUFBUSxPQUFPLFFBQVEsU0FDaEMsUUFBTztBQUlULE1BQUksRUFBRSxRQUFRLEtBQ1osUUFBTztFQUdULE1BQU0sUUFBUyxJQUFVO0FBR3pCLE1BQUksY0FBYyxTQUFTLEtBQ3pCLFFBQU87QUFHVCxNQUFJLFNBQVMsUUFDWCxRQUFPLE1BQU0sUUFBUSxNQUFNO0FBRzdCLFNBQU8sT0FBTyxVQUFVO1VBQ2pCLEtBQUs7QUFFWixTQUFPIn0=