@kando-env/kando-ui 1.2.233 → 1.2.235

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 (570) hide show
  1. package/lib/Router.js +66 -4
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +41 -11
  3. package/lib/Widgets/EventsRow/EventsRow.js +41 -14
  4. package/lib/Widgets/Map/GraphUtils.js +4 -1
  5. package/lib/Widgets/Map/Map.js +42 -20
  6. package/lib/Widgets/Map/MapUtils.js +58 -4
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +27 -7
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +21 -8
  9. package/lib/Widgets/Map/edges/Edge.js +30 -9
  10. package/lib/Widgets/Map/edges/Edges.js +17 -11
  11. package/lib/Widgets/Map/edges/arrows/Arrows.js +22 -7
  12. package/lib/Widgets/Map/events/Event.js +23 -7
  13. package/lib/Widgets/Map/events/EventIndicator.js +42 -19
  14. package/lib/Widgets/Map/events/EventPath.js +20 -5
  15. package/lib/Widgets/Map/events/EventUtils.js +53 -4
  16. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +16 -5
  17. package/lib/Widgets/Map/events/PointOfEvent.js +32 -3
  18. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +14 -4
  19. package/lib/Widgets/Map/events/Snail.js +19 -7
  20. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +54 -15
  21. package/lib/Widgets/Map/map/FloatingGraph.js +19 -3
  22. package/lib/Widgets/Map/map/GraphDateButton.js +9 -3
  23. package/lib/Widgets/Map/matchGraph/MatchGraph.js +11 -5
  24. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +10 -4
  25. package/lib/Widgets/Map/points/PointMarker.js +19 -3
  26. package/lib/Widgets/Map/points/PointMarkers.js +19 -6
  27. package/lib/Widgets/Map/points/PointUtils.js +78 -7
  28. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +49 -15
  29. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +19 -4
  30. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +13 -1
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +5 -1
  32. package/lib/Widgets/MostPolluting/Areas/Areas.js +53 -19
  33. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +1 -1
  34. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  35. package/lib/Widgets/MostPolluting/Areas/styles.js +7 -1
  36. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +11 -3
  37. package/lib/Widgets/MostPolluting/Factories/Factories.js +64 -30
  38. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +21 -4
  39. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +10 -1
  40. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +17 -4
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +7 -3
  42. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +1 -1
  43. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  44. package/lib/Widgets/MostPolluting/Factories/styles.js +7 -1
  45. package/lib/Widgets/MostPolluting/MostPolluting.js +17 -4
  46. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +17 -13
  47. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +9 -2
  48. package/lib/Widgets/MostPolluting/ShowMore/styles.js +5 -1
  49. package/lib/Widgets/MostPolluting/assets/index.js +28 -17
  50. package/lib/Widgets/MostPolluting/components/ChangePercent.js +16 -1
  51. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +26 -15
  52. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +26 -4
  53. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +33 -25
  54. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +20 -4
  55. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +43 -29
  56. package/lib/Widgets/MostPolluting/models.js +1 -1
  57. package/lib/Widgets/MostPolluting/styles.js +7 -1
  58. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +9 -2
  59. package/lib/Widgets/PotentialImpactSummary/Icon.js +11 -1
  60. package/lib/Widgets/PotentialImpactSummary/index.js +29 -7
  61. package/lib/Widgets/PotentialImpactSummary/index.test.js +36 -17
  62. package/lib/Widgets/PotentialImpactSummary/styles.js +15 -2
  63. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  64. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +10 -4
  65. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +21 -7
  66. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +29 -19
  67. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +24 -15
  68. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +21 -7
  69. package/lib/Widgets/QualitySummary/QualitySummary.js +24 -8
  70. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +2 -2
  71. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  72. package/lib/Widgets/QualitySummary/styles.js +16 -3
  73. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +20 -9
  74. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +34 -9
  75. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +18 -9
  76. package/lib/Widgets/UtilityInformation/UtilityInformation.js +45 -22
  77. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  78. package/lib/Widgets/UtilityInformation/styles.js +22 -2
  79. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +2 -2
  80. package/lib/assets/icons/index.js +8 -5
  81. package/lib/assets/icons/kandoStepper/index.js +14 -9
  82. package/lib/components/ApplyButton/ApplyButton.js +11 -5
  83. package/lib/components/ApplyButton/index.js +4 -1
  84. package/lib/components/Backdrop/Backdrop.js +8 -2
  85. package/lib/components/ContentLoader/ContentLoader.js +12 -7
  86. package/lib/components/ContentLoader/index.js +2 -1
  87. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +14 -7
  88. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +8 -2
  89. package/lib/components/CustomInputs/DoubleTabs/styles.js +10 -2
  90. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +18 -5
  91. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +5 -1
  92. package/lib/components/CustomInputs/Search/Search.js +38 -13
  93. package/lib/components/CustomInputs/Search/index.js +4 -1
  94. package/lib/components/CustomInputs/Select/Select.js +31 -13
  95. package/lib/components/CustomInputs/Select/Select.stories.js +8 -2
  96. package/lib/components/DamageType/DamageType.js +76 -37
  97. package/lib/components/DamageType/index.js +4 -1
  98. package/lib/components/DataLoaderError/DataLoaderError.js +10 -4
  99. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +16 -6
  100. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +37 -17
  101. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -12
  102. package/lib/components/DischargeHeatmap/HighchartsOptions.js +10 -6
  103. package/lib/components/DischargeHeatmap/index.js +4 -1
  104. package/lib/components/DischargeHeatmap/mocks/handlers.js +4 -3
  105. package/lib/components/DischargeHeatmap/popupText.js +16 -1
  106. package/lib/components/DischargeHeatmap/titles.js +8 -1
  107. package/lib/components/DischargeHeatmap/types.js +1 -1
  108. package/lib/components/ErrorBoundary.js +15 -3
  109. package/lib/components/Events/Events.js +30 -5
  110. package/lib/components/Events/index.js +4 -1
  111. package/lib/components/Graph/Graph.js +74 -31
  112. package/lib/components/Graph/index.js +4 -1
  113. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +7 -1
  114. package/lib/components/Header/Breadcrumbs/index.js +4 -1
  115. package/lib/components/Header/DoubleTabs/DoubleTabs.js +30 -14
  116. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +8 -2
  117. package/lib/components/Header/DoubleTabs/styles.js +10 -2
  118. package/lib/components/Header/Header.js +7 -1
  119. package/lib/components/Header/Header.stories.js +8 -2
  120. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +11 -1
  121. package/lib/components/Header/InfoBar/InfoBar.js +30 -4
  122. package/lib/components/Header/InfoBar/Search/Control.js +13 -2
  123. package/lib/components/Header/InfoBar/Search/GroupLabel.js +12 -1
  124. package/lib/components/Header/InfoBar/Search/Search.js +26 -5
  125. package/lib/components/Header/InfoBar/Search/SearchContainer.js +21 -4
  126. package/lib/components/Header/InfoBar/Search/index.js +4 -1
  127. package/lib/components/Header/InfoBar/Search/searchStyle.js +4 -1
  128. package/lib/components/Header/KandoNavbar/KandoNavbar.js +91 -46
  129. package/lib/components/Header/KandoNavbar/index.js +4 -1
  130. package/lib/components/Header/Slideshow/Slideshow.js +67 -31
  131. package/lib/components/Header/Slideshow/index.js +4 -1
  132. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +7 -1
  133. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +15 -2
  134. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +15 -1
  135. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +24 -7
  136. package/lib/components/Header/Toolbar/Toolbar.js +84 -46
  137. package/lib/components/InfoBar/InfoBar.js +23 -8
  138. package/lib/components/InfoBar/InfoBar.stories.js +8 -2
  139. package/lib/components/KandoModal/KandoModal.js +42 -19
  140. package/lib/components/KandoModal/index.js +4 -1
  141. package/lib/components/Link.js +11 -2
  142. package/lib/components/Links/CustomRedirect/CustomRedirect.js +12 -3
  143. package/lib/components/Links/StyledLink/StyledLink.js +16 -6
  144. package/lib/components/Links/StyledNavLink/StyledNavLink.js +14 -4
  145. package/lib/components/LiveEvents/CarouselSlide.js +11 -5
  146. package/lib/components/LiveEvents/LiveEvents.js +10 -1
  147. package/lib/components/LiveEvents/index.js +4 -1
  148. package/lib/components/LoaderByPercent/LoaderByPercent.js +23 -13
  149. package/lib/components/Map/Map.js +26 -12
  150. package/lib/components/Map/index.js +4 -1
  151. package/lib/components/Modal/Modal.js +10 -3
  152. package/lib/components/NarrowHeader.js +12 -1
  153. package/lib/components/PointInfo/PointInfo.js +22 -10
  154. package/lib/components/PointInfo/index.js +4 -1
  155. package/lib/components/PopupModal/PopupModal.js +17 -6
  156. package/lib/components/PopupModal/PopupModal.stories.js +11 -2
  157. package/lib/components/Sector/Sector.js +13 -4
  158. package/lib/components/Sector/Sector.test.js +8 -3
  159. package/lib/components/Sector/index.js +4 -1
  160. package/lib/components/Sector/sectorIcons.js +27 -1
  161. package/lib/components/SevereEvent/Eta/Eta.js +39 -14
  162. package/lib/components/SevereEvent/Eta/styles.js +5 -1
  163. package/lib/components/SevereEvent/SevereEvent.js +36 -15
  164. package/lib/components/Spinner/Spinner.js +10 -5
  165. package/lib/components/Spinner/Spinner.stories.js +8 -2
  166. package/lib/components/Spinner/index.js +4 -1
  167. package/lib/components/Spinner/styles.js +9 -1
  168. package/lib/components/Tabs/Tabs.js +24 -4
  169. package/lib/components/Tabs/Tabs.stories.js +8 -2
  170. package/lib/components/Tabs/assets/index.js +6 -1
  171. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +12 -2
  172. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +43 -12
  173. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +36 -12
  174. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +4 -1
  175. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +29 -9
  176. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +9 -4
  177. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +4 -1
  178. package/lib/components/TimeRangeSelector/TimeRangeList.js +13 -4
  179. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +24 -11
  180. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +36 -11
  181. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +10 -2
  182. package/lib/components/TimeRangeSelector/constants.js +2 -2
  183. package/lib/components/TimeRangeSelector/index.js +4 -1
  184. package/lib/components/Toggle/Toggle.js +21 -7
  185. package/lib/components/Toggle/index.js +4 -1
  186. package/lib/components/TrendGraph/TrendGraph.js +49 -16
  187. package/lib/components/TrendGraph/index.js +4 -1
  188. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +35 -10
  189. package/lib/components/TrendGraphNVL/index.js +4 -1
  190. package/lib/development-environment/index.js +13 -1
  191. package/lib/development-environment/mock/browser.js +8 -1
  192. package/lib/development-environment/mock/get.js +5 -1
  193. package/lib/development-environment/mock/handlers.js +26 -1
  194. package/lib/development-environment/mock/mockBus.js +7 -2
  195. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +1 -1
  196. package/lib/development-environment/mock/mockObjects/areaInformation.js +1 -1
  197. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +1 -1
  198. package/lib/development-environment/mock/mockObjects/areaSitesData.js +1 -1
  199. package/lib/development-environment/mock/mockObjects/areasJson.js +1 -1
  200. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +1 -1
  201. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +1 -1
  202. package/lib/development-environment/mock/mockObjects/data-menuData.js +1 -1
  203. package/lib/development-environment/mock/mockObjects/data-search.js +1 -1
  204. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +1 -1
  205. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +1 -1
  206. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +1 -1
  207. package/lib/development-environment/mock/mockObjects/eventsJson.js +1 -1
  208. package/lib/development-environment/mock/mockObjects/metascore.js +1 -1
  209. package/lib/development-environment/mock/mockObjects/permissionsJson.js +1 -1
  210. package/lib/development-environment/mock/mockObjects/pointsJson.js +1 -1
  211. package/lib/development-environment/mock/mockObjects/site-info.js +1 -1
  212. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +1 -1
  213. package/lib/development-environment/togly/ToglyDashboard.js +22 -4
  214. package/lib/development-environment/togly/ToglyItem.js +25 -5
  215. package/lib/development-environment/togly/flags.js +1 -1
  216. package/lib/development-environment/togly/init.js +6 -1
  217. package/lib/development-environment/togly/macro.js +9 -7
  218. package/lib/development-environment/togly/useDoubleKeyDown.js +8 -1
  219. package/lib/development-environment/togly/useLocalStorage.js +19 -12
  220. package/lib/hooks/useApi.js +29 -10
  221. package/lib/hooks/useApiWithDashboardQuery.js +30 -10
  222. package/lib/hooks/useClickOutside.js +5 -1
  223. package/lib/hooks/useInitializeHeaders.js +7 -1
  224. package/lib/hooks/useKandoFetch.js +27 -13
  225. package/lib/hooks/useMap.js +39 -8
  226. package/lib/hooks/useNavContext.js +22 -13
  227. package/lib/hooks/useQueryURL.js +4 -1
  228. package/lib/hooks/useRemoveExistingLayers.js +7 -2
  229. package/lib/hooks/useUpdateEventBodyTail.js +10 -1
  230. package/lib/hooks/useUserTimeZone.js +9 -1
  231. package/lib/hooks/useUserTimeZone.test.js +9 -1
  232. package/lib/hooks/useWindowSize.js +19 -14
  233. package/lib/i18n/en.json +2 -1
  234. package/lib/i18n/he.json +2 -1
  235. package/lib/index.js +29 -13
  236. package/lib/macros/getVersion.js +3 -2
  237. package/lib/models/IAction.js +1 -1
  238. package/lib/models/IAppState.js +1 -1
  239. package/lib/pages/AreaPage/AreaPage.js +34 -5
  240. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -6
  241. package/lib/pages/AreaPage/Dashboard/Dashboard.js +23 -2
  242. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +35 -11
  243. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +8 -6
  244. package/lib/pages/AreaPage/Dashboard/Sites/Sites.js +64 -28
  245. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +10 -1
  246. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +15 -3
  247. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +7 -3
  248. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  249. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +1 -1
  250. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +10 -2
  251. package/lib/pages/AssessmentPage/AssessmentPage.js +30 -5
  252. package/lib/pages/CannyWidget/Feedback.js +25 -10
  253. package/lib/pages/CovidPage/CovidPage.js +14 -1
  254. package/lib/pages/CovidPage/components/Body.js +33 -9
  255. package/lib/pages/CovidPage/components/Map.js +38 -20
  256. package/lib/pages/CovidPage/components/Sidebar.js +18 -4
  257. package/lib/pages/CovidPage/components/Summary.js +29 -8
  258. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +35 -10
  259. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +4 -1
  260. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +41 -13
  261. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +4 -1
  262. package/lib/pages/CovidPage/components/areas/Area.js +33 -6
  263. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +45 -4
  264. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +18 -5
  265. package/lib/pages/CovidPage/components/areas/AreasList.js +33 -14
  266. package/lib/pages/CovidPage/components/areas/Sort.js +19 -5
  267. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -2
  268. package/lib/pages/EventsPage/Body/Body.js +19 -2
  269. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +28 -11
  270. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +31 -11
  271. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +11 -4
  272. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +11 -3
  273. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +10 -5
  274. package/lib/pages/EventsPage/DragAndDropArea/index.js +4 -1
  275. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +33 -7
  276. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +21 -2
  277. package/lib/pages/EventsPage/EventsPage.js +13 -1
  278. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +32 -9
  279. package/lib/pages/EventsPage/events/MoreInfo.js +19 -1
  280. package/lib/pages/EventsPage/events/Sidebar.js +18 -5
  281. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +29 -5
  282. package/lib/pages/EventsPage/events/event_info/EventDetails.js +32 -8
  283. package/lib/pages/EventsPage/events/event_info/EventInfo.js +41 -12
  284. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +14 -2
  285. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +40 -10
  286. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +12 -1
  287. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +30 -8
  288. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +8 -1
  289. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/LineChartYear/LineChartYear.js +27 -7
  290. package/lib/pages/EventsPage/events/event_info/MockHistoryInformation/MockHistoryInformation.js +10 -2
  291. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +21 -5
  292. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsLineChart.js +23 -4
  293. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +22 -4
  294. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +33 -6
  295. package/lib/pages/EventsPage/events/event_info/samplings/Sampling.js +15 -3
  296. package/lib/pages/EventsPage/events/event_info/samplings/Samplings.js +10 -2
  297. package/lib/pages/EventsPage/events/event_info/sources/Source.js +31 -8
  298. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +20 -4
  299. package/lib/pages/EventsPage/events/events_list/EventItem.js +24 -3
  300. package/lib/pages/EventsPage/events/events_list/EventUtils.js +13 -2
  301. package/lib/pages/EventsPage/events/events_list/EventsList.js +102 -38
  302. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +32 -11
  303. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +96 -31
  304. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +55 -10
  305. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +17 -5
  306. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +38 -15
  307. package/lib/pages/EventsPage/events/events_list/Sort.js +23 -4
  308. package/lib/pages/ImportFileWizard/FileUploadRespones.js +19 -4
  309. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +8 -2
  310. package/lib/pages/ImportFileWizard/ImportFile.js +29 -10
  311. package/lib/pages/ImportFileWizard/ResponseBody.js +12 -3
  312. package/lib/pages/ImportFileWizard/ValidationForm.js +27 -7
  313. package/lib/pages/ImportFileWizard/ValidationResponse.js +30 -6
  314. package/lib/pages/ImportFileWizard/importFileUtils.js +2 -1
  315. package/lib/pages/ImportFileWizard/index.js +4 -1
  316. package/lib/pages/ImportGisPage/ImportGisContainer.js +27 -7
  317. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +27 -10
  318. package/lib/pages/ImportGisPage/importGisUtils.js +13 -1
  319. package/lib/pages/ImportGisProcess/index.js +18 -4
  320. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +19 -5
  321. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +10 -3
  322. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +8 -1
  323. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +58 -25
  324. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +8 -2
  325. package/lib/pages/NotificationsPage/Notification/Notification.js +16 -8
  326. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  327. package/lib/pages/NotificationsPage/Notifications.mock.js +1 -1
  328. package/lib/pages/NotificationsPage/Notifications.stories.js +10 -2
  329. package/lib/pages/NotificationsPage/NotificationsPage.js +35 -11
  330. package/lib/pages/NotificationsPage/assets/index.js +24 -15
  331. package/lib/pages/NotificationsPageV2/NotificationsPage.js +83 -35
  332. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +24 -4
  333. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +40 -15
  334. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +49 -18
  335. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +47 -4
  336. package/lib/pages/NotificationsPageV2/notificationUtils.js +30 -2
  337. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  338. package/lib/pages/OldSitePage/OldSitePage.js +77 -16
  339. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +16 -3
  340. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +8 -2
  341. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -4
  342. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +12 -5
  343. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -2
  344. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +23 -7
  345. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +20 -6
  346. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +10 -4
  347. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -2
  348. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +24 -9
  349. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +12 -4
  350. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +59 -28
  351. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  352. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  353. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +18 -3
  354. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +15 -2
  355. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +16 -8
  356. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +16 -1
  357. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  358. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +10 -2
  359. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +7 -2
  360. package/lib/pages/ProfilePage/Container.js +5 -1
  361. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +43 -16
  362. package/lib/pages/ProfilePage/ProfilePage.js +88 -39
  363. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +32 -9
  364. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +17 -7
  365. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +14 -3
  366. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +43 -7
  367. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +21 -4
  368. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +15 -7
  369. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +29 -8
  370. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +25 -6
  371. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +21 -9
  372. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +13 -1
  373. package/lib/pages/SamplingsPage/DesktopActions/index.js +4 -1
  374. package/lib/pages/SamplingsPage/NavigationDropdown.js +21 -3
  375. package/lib/pages/SamplingsPage/NewSamplingAction.js +84 -38
  376. package/lib/pages/SamplingsPage/SamplingMobileModal.js +65 -12
  377. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +19 -5
  378. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +13 -2
  379. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +56 -22
  380. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +20 -4
  381. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +14 -1
  382. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +107 -34
  383. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +42 -11
  384. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +47 -14
  385. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +49 -15
  386. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +23 -5
  387. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +8 -2
  388. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +11 -1
  389. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +36 -7
  390. package/lib/pages/SamplingsPage/SamplingsMobileList.js +34 -10
  391. package/lib/pages/SamplingsPage/SamplingsPage.js +39 -14
  392. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +48 -14
  393. package/lib/pages/SamplingsPage/index.js +3 -1
  394. package/lib/pages/SamplingsPage/samplingsPageUtils.js +30 -7
  395. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +10 -2
  396. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +8 -2
  397. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +17 -3
  398. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +11 -6
  399. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +23 -15
  400. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -7
  401. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +27 -18
  402. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -2
  403. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +26 -9
  404. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +20 -6
  405. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +10 -4
  406. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -2
  407. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +24 -9
  408. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +12 -4
  409. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +68 -32
  410. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +2 -2
  411. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +10 -12
  412. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +19 -4
  413. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +15 -2
  414. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +38 -17
  415. package/lib/pages/SitePage/SamplingParameters/dataParser.js +29 -13
  416. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +7 -3
  417. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  418. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +10 -2
  419. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +8 -2
  420. package/lib/pages/SitePage/SiteInformation/ContributorItem.js +12 -5
  421. package/lib/pages/SitePage/SiteInformation/EmptyState.js +10 -1
  422. package/lib/pages/SitePage/SiteInformation/PollutionContributor.js +15 -5
  423. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +48 -17
  424. package/lib/pages/SitePage/SiteInformation/style.js +8 -2
  425. package/lib/pages/SitePage/SitePage.js +49 -10
  426. package/lib/pages/UploadLabResult/index.js +8 -1
  427. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +37 -9
  428. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +9 -2
  429. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +16 -2
  430. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +8 -2
  431. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +35 -9
  432. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +5 -1
  433. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +7 -1
  434. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +10 -1
  435. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +16 -7
  436. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  437. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +10 -1
  438. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +5 -1
  439. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +25 -3
  440. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +19 -13
  441. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +17 -6
  442. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +20 -5
  443. package/lib/pages/WbeDashboard/ExpandableComponent.js +11 -1
  444. package/lib/pages/WbeDashboard/GraphWrapper.js +26 -5
  445. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -6
  446. package/lib/pages/WbeDashboard/SearchInput.js +22 -4
  447. package/lib/pages/WbeDashboard/SummaryGraph.js +44 -13
  448. package/lib/pages/WbeDashboard/SummaryGraphModal.js +13 -1
  449. package/lib/pages/WbeDashboard/Tabs.js +9 -3
  450. package/lib/pages/WbeDashboard/WbeDashboardPage.js +112 -25
  451. package/lib/pages/WbeDashboard/WbeSummaryBar.js +42 -8
  452. package/lib/providers/Slideshow/SlideshowContext.js +5 -3
  453. package/lib/providers/Slideshow/SlideshowProvider.js +31 -16
  454. package/lib/providers/Slideshow/SlideshowRunner.js +17 -7
  455. package/lib/providers/UrlHistory/UrlHistoryContext.js +7 -3
  456. package/lib/providers/UrlHistory/UrlHistoryProvider.js +13 -1
  457. package/lib/providers/UrlHistory/index.js +8 -5
  458. package/lib/providers/UrlHistory/useLastVisited.js +7 -1
  459. package/lib/react-app-env.d.js +1 -1
  460. package/lib/store/ImportGis/action.js +1 -1
  461. package/lib/store/ImportGis/actionTypes.js +2 -1
  462. package/lib/store/ImportGis/actionsCreator.js +17 -7
  463. package/lib/store/ImportGis/models/gisImports.js +1 -1
  464. package/lib/store/ImportGis/reducer.js +17 -1
  465. package/lib/store/WBE/actionTypes.js +1 -1
  466. package/lib/store/WBE/actions.js +3 -1
  467. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  468. package/lib/store/WBE/models/IWBE.js +1 -1
  469. package/lib/store/WBE/models/IWBEState.js +1 -1
  470. package/lib/store/WBE/reducer.js +9 -2
  471. package/lib/store/areas/actionTypes.js +2 -2
  472. package/lib/store/areas/actions.js +11 -2
  473. package/lib/store/areas/models/IArea.js +1 -1
  474. package/lib/store/areas/models/IAreasState.js +1 -1
  475. package/lib/store/areas/reducer.js +9 -1
  476. package/lib/store/context/actionTypes.js +2 -2
  477. package/lib/store/context/actions.js +6 -2
  478. package/lib/store/context/contextMiddlewares.js +9 -1
  479. package/lib/store/context/models/INavContext.js +1 -1
  480. package/lib/store/context/models/INavContextState.js +1 -1
  481. package/lib/store/context/reducer.js +9 -2
  482. package/lib/store/dashboard/dashboardSlice.js +3 -1
  483. package/lib/store/dashboard/periodType.js +1 -1
  484. package/lib/store/edges/actionTypes.js +2 -2
  485. package/lib/store/edges/actions.js +9 -3
  486. package/lib/store/edges/models/IEdge.js +1 -1
  487. package/lib/store/edges/models/IEdgesState.js +1 -1
  488. package/lib/store/edges/reducer.js +16 -2
  489. package/lib/store/events/actionTypes.js +2 -2
  490. package/lib/store/events/actions.js +28 -10
  491. package/lib/store/events/models/IEvent.js +1 -1
  492. package/lib/store/events/models/IEventsState.js +1 -1
  493. package/lib/store/events/models/ISource.js +1 -1
  494. package/lib/store/events/reducer.js +41 -3
  495. package/lib/store/filters/IFilter.js +1 -1
  496. package/lib/store/filters/IFilterItem.js +1 -1
  497. package/lib/store/global/actionTypes.js +2 -2
  498. package/lib/store/global/actions.js +20 -8
  499. package/lib/store/global/models/IGlobalState.js +1 -1
  500. package/lib/store/global/reducer.js +18 -2
  501. package/lib/store/permissions/permissionsSlice.js +6 -1
  502. package/lib/store/points/actionTypes.js +2 -2
  503. package/lib/store/points/actions.js +5 -1
  504. package/lib/store/points/models/IGroup.js +1 -1
  505. package/lib/store/points/models/IPoint.js +1 -1
  506. package/lib/store/points/models/IPointsState.js +1 -1
  507. package/lib/store/points/reducer.js +7 -1
  508. package/lib/store/rootActionTypes.js +1 -1
  509. package/lib/store/rootActions.js +3 -1
  510. package/lib/store/rootReducer.js +23 -4
  511. package/lib/store/rootStore.js +12 -4
  512. package/lib/store/samplings/action.js +1 -1
  513. package/lib/store/samplings/actionTypes.js +2 -1
  514. package/lib/store/samplings/actionsCreator.js +5 -2
  515. package/lib/store/samplings/models/Samplings.js +1 -1
  516. package/lib/store/samplings/reducer.js +9 -1
  517. package/lib/styles/StylesLayout.js +7 -1
  518. package/lib/styles/theme/theme.js +4 -2
  519. package/lib/test/mocks/browser.js +7 -3
  520. package/lib/test/test-utils.js +21 -11
  521. package/lib/ui-kit/Button/Button.js +23 -15
  522. package/lib/ui-kit/Button/Button.test.js +26 -6
  523. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  524. package/lib/ui-kit/Checkbox/Checkbox.js +21 -7
  525. package/lib/ui-kit/DropDown/DropDown.js +16 -5
  526. package/lib/ui-kit/DropDown/DropDown.test.js +12 -6
  527. package/lib/ui-kit/DropDown/DropDownItem.js +13 -5
  528. package/lib/ui-kit/DropDown/DropdownToggle.js +13 -2
  529. package/lib/ui-kit/IconAction/IconAction.js +9 -3
  530. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +70 -19
  531. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +27 -16
  532. package/lib/ui-kit/KandoList/KandoList.js +16 -5
  533. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  534. package/lib/ui-kit/KandoTable/KandoTable.js +35 -21
  535. package/lib/ui-kit/KandoTable/KandoTable.test.js +16 -1
  536. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  537. package/lib/ui-kit/Layout/Layout.js +8 -1
  538. package/lib/ui-kit/MobileInput/MobileInput.js +33 -18
  539. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +14 -8
  540. package/lib/ui-kit/ModalConfirmation/index.js +3 -1
  541. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +10 -5
  542. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +11 -3
  543. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +11 -4
  544. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +14 -5
  545. package/lib/ui-kit/Tooltip/Tooltip.js +8 -3
  546. package/lib/ui-kit/index.js +15 -1
  547. package/lib/ui-kit/kandoStepper/KandoStepper.js +7 -2
  548. package/lib/utilities/ActionUtility.js +2 -1
  549. package/lib/utilities/Alert.js +10 -2
  550. package/lib/utilities/Analytics.js +12 -1
  551. package/lib/utilities/Array.js +6 -2
  552. package/lib/utilities/Enum.js +16 -1
  553. package/lib/utilities/ErrorBoundary.js +18 -3
  554. package/lib/utilities/File.js +24 -5
  555. package/lib/utilities/GetDir.js +8 -4
  556. package/lib/utilities/KandoDate.js +7 -1
  557. package/lib/utilities/KandoModal.js +22 -7
  558. package/lib/utilities/LocalStorage.js +13 -2
  559. package/lib/utilities/ThousandsToK.js +3 -1
  560. package/lib/utilities/TimeFormat.js +19 -6
  561. package/lib/utilities/Truncate.js +27 -7
  562. package/lib/utilities/edgesMath.js +24 -5
  563. package/lib/utilities/i18n.js +14 -1
  564. package/lib/utilities/kql.js +10 -3
  565. package/lib/utilities/map/icons.js +14 -1
  566. package/lib/utilities/scoreToColor.js +8 -1
  567. package/lib/utilities/time.js +9 -2
  568. package/lib/utilities/uploadToS3.js +9 -1
  569. package/lib/utilities/urls.js +12 -4
  570. package/package.json +1 -1
@@ -1,43 +1,68 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
4
5
  var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
10
  exports.default = void 0;
11
+
9
12
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
13
+
10
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
15
+
11
16
  var _freeSolidSvgIcons = require("@fortawesome/free-solid-svg-icons");
17
+
12
18
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
19
+
13
20
  var _react = _interopRequireWildcard(require("react"));
21
+
14
22
  var _reactRedux = require("react-redux");
23
+
15
24
  var _reactRouterDom = require("react-router-dom");
25
+
16
26
  var _arrowLeft = _interopRequireDefault(require("assets/icons/arrow-left.svg"));
27
+
17
28
  var _funnel = require("@svgr/webpack?-svgo!assets/icons/funnel.svg");
29
+
18
30
  var _no_events = _interopRequireDefault(require("assets/no_events.svg"));
31
+
19
32
  var _SevereEvent = require("components/SevereEvent/SevereEvent");
33
+
20
34
  var _UrlHistory = require("providers/UrlHistory");
35
+
21
36
  var _actions = require("store/events/actions");
37
+
22
38
  var _actions2 = require("store/global/actions");
39
+
23
40
  var _i18n = _interopRequireDefault(require("utilities/i18n"));
41
+
24
42
  var _kql = require("utilities/kql");
43
+
25
44
  require("../EventsStyle.scss");
45
+
26
46
  var _EventInfo = _interopRequireDefault(require("../event_info/EventInfo"));
47
+
27
48
  var _MoreInfo = _interopRequireDefault(require("../MoreInfo"));
49
+
28
50
  var _FilterContainer = _interopRequireDefault(require("./Filter/FilterContainer"));
51
+
29
52
  var _Sort = _interopRequireDefault(require("./Sort"));
53
+
30
54
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
55
+
31
56
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
32
- /* eslint-disable etc/no-commented-out-code */
33
57
 
58
+ /* eslint-disable etc/no-commented-out-code */
34
59
  function mapStateToProps(state) {
35
60
  var events_data = state.events_data,
36
- global_data = state.global_data,
37
- edges_data = state.edges_data,
38
- points_data = state.points_data,
39
- areas_data = state.areas_data,
40
- nav_context_data = state.nav_context_data;
61
+ global_data = state.global_data,
62
+ edges_data = state.edges_data,
63
+ points_data = state.points_data,
64
+ areas_data = state.areas_data,
65
+ nav_context_data = state.nav_context_data;
41
66
  return {
42
67
  events_data: events_data,
43
68
  global_data: global_data,
@@ -47,49 +72,58 @@ function mapStateToProps(state) {
47
72
  nav_context_data: nav_context_data
48
73
  };
49
74
  }
75
+
50
76
  var EventsList = function EventsList(_ref) {
51
77
  var areas_data = _ref.areas_data,
52
- points_data = _ref.points_data,
53
- edges_data = _ref.edges_data,
54
- global_data = _ref.global_data,
55
- sidenavExpanded = _ref.sidenavExpanded,
56
- events_data = _ref.events_data,
57
- nav_context_data = _ref.nav_context_data;
78
+ points_data = _ref.points_data,
79
+ edges_data = _ref.edges_data,
80
+ global_data = _ref.global_data,
81
+ sidenavExpanded = _ref.sidenavExpanded,
82
+ events_data = _ref.events_data,
83
+ nav_context_data = _ref.nav_context_data;
58
84
  var dispatch = (0, _reactRedux.useDispatch)();
59
85
  var items = events_data.items,
60
- isFetching = events_data.isFetching,
61
- focusedEvent = events_data.focusedEvent,
62
- hoveredEvent = events_data.hoveredEvent,
63
- hoveredEventPaths = events_data.hoveredEventPaths,
64
- hoveredEdgePaths = events_data.hoveredEdgePaths;
86
+ isFetching = events_data.isFetching,
87
+ focusedEvent = events_data.focusedEvent,
88
+ hoveredEvent = events_data.hoveredEvent,
89
+ hoveredEventPaths = events_data.hoveredEventPaths,
90
+ hoveredEdgePaths = events_data.hoveredEdgePaths;
65
91
  var waterAuthorityId = global_data.waterAuthorityId,
66
- map = global_data.map;
92
+ map = global_data.map;
93
+
67
94
  var _useState = (0, _react.useState)(true),
68
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
69
- filterPopupOpen = _useState2[0],
70
- setFilterPopupOpen = _useState2[1];
95
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
96
+ filterPopupOpen = _useState2[0],
97
+ setFilterPopupOpen = _useState2[1];
98
+
71
99
  var _useState3 = (0, _react.useState)({
72
- messages: [{
73
- message: '',
74
- event_id: 0
75
- }],
76
- event_ids: []
77
- }),
78
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
79
- exceptionAlert = _useState4[0],
80
- setExceptionAlert = _useState4[1];
100
+ messages: [{
101
+ message: '',
102
+ event_id: 0
103
+ }],
104
+ event_ids: []
105
+ }),
106
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
107
+ exceptionAlert = _useState4[0],
108
+ setExceptionAlert = _useState4[1];
109
+
81
110
  var lastVisited = (0, _UrlHistory.useLastVisited)();
111
+
82
112
  var useQuery = function useQuery() {
83
113
  return new URLSearchParams((0, _reactRouterDom.useLocation)().search);
84
114
  };
115
+
85
116
  var history = (0, _reactRouterDom.useHistory)();
86
117
  var query = useQuery();
118
+
87
119
  var getKQLValuesFromURL = function getKQLValuesFromURL() {
88
120
  return query.get('valuesFromKQL');
89
121
  };
122
+
90
123
  var getEventIdFromURL = function getEventIdFromURL() {
91
124
  return query.get('eventId');
92
125
  };
126
+
93
127
  var loader = function loader() {
94
128
  if (isFetching && items.length === 0 || areas_data.newAreas.length === 0 || points_data.isFetching || edges_data.isFetching) {
95
129
  return /*#__PURE__*/_react.default.createElement("div", {
@@ -99,13 +133,16 @@ var EventsList = function EventsList(_ref) {
99
133
  return null;
100
134
  }
101
135
  };
136
+
102
137
  var handleExpansionToggle = function handleExpansionToggle() {
103
138
  dispatch((0, _actions2.sideNavExpanded)(!sidenavExpanded));
104
139
  };
140
+
105
141
  var applyDefaultFilter = function applyDefaultFilter() {
106
142
  history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&valuesFromKQL="));
107
143
  dispatch((0, _actions2.setEventFilterParam)(''));
108
144
  };
145
+
109
146
  var validateEvent = function validateEvent(event) {
110
147
  // check that all observations' edges exists. If they are not exists it's indicates that their points are
111
148
  // not in the hierarchy or doesn't have lat/lng.
@@ -116,15 +153,18 @@ var EventsList = function EventsList(_ref) {
116
153
  var edge = edges_data.items.find(function (edge) {
117
154
  return edge.source_point_id === observation.point_id;
118
155
  });
156
+
119
157
  if (edge === undefined) {
120
158
  invalidObservationsMessages.push("".concat(observation.point_name, " (").concat(observation.point_id, ") "));
121
159
  }
122
160
  }
123
161
  });
162
+
124
163
  if (invalidObservationsMessages.length !== 0) {
125
164
  var index = exceptionAlert.messages.findIndex(function (msg) {
126
165
  return msg.event_id === event.id;
127
166
  });
167
+
128
168
  if (index === -1) {
129
169
  setExceptionAlert({
130
170
  messages: [].concat((0, _toConsumableArray2.default)(exceptionAlert.messages), [{
@@ -134,28 +174,30 @@ var EventsList = function EventsList(_ref) {
134
174
  event_ids: [].concat((0, _toConsumableArray2.default)(exceptionAlert.event_ids), [event.id])
135
175
  });
136
176
  }
137
- return false;
138
- }
139
177
 
140
- // same check as above but this time for the event path. If edge doesn't exist, it's indicates that one of the
178
+ return false;
179
+ } // same check as above but this time for the event path. If edge doesn't exist, it's indicates that one of the
141
180
  // points downstream doesn't have lat/lng.
181
+
182
+
142
183
  var invalidPathMessages = [];
143
184
  event.path.forEach(function (path) {
144
185
  var edge = edges_data.items.find(function (edge) {
145
186
  return edge.id === path.edge_id;
146
187
  });
188
+
147
189
  if (edge === undefined) {
148
190
  console.error("edge ".concat(path.edge_id, " can not be found"));
149
191
  var observation = event.observations.find(function (observation) {
150
192
  return observation.id === path.last_observation_id;
151
193
  });
152
194
  var lastObservationPoint = 'Not found';
195
+
153
196
  if (observation) {
154
197
  lastObservationPoint = observation.point_name;
155
198
  console.error('lastObservationPoint', lastObservationPoint);
156
- }
199
+ } // invalidPathMessages.push(`${lastObservationPoint} `);
157
200
 
158
- // invalidPathMessages.push(`${lastObservationPoint} `);
159
201
  }
160
202
  });
161
203
 
@@ -169,74 +211,89 @@ var EventsList = function EventsList(_ref) {
169
211
  });
170
212
  return false;
171
213
  }
214
+
172
215
  return true;
173
216
  };
217
+
174
218
  var handleEventItemClick = function handleEventItemClick(event, ref) {
175
- if (ref !== null) onMouseLeaveEvent();
176
- // if (hoveredEventPaths && map) {
219
+ if (ref !== null) onMouseLeaveEvent(); // if (hoveredEventPaths && map) {
177
220
  // hoveredEventPaths.forEach((path) => {
178
221
  // map.removeLayer(path);
179
222
  // });
180
223
  // }
181
224
  // dispatch(setHoveredEventPaths([]));
182
225
  // dispatch(setHoverEventIndicator(null));
226
+
183
227
  dispatch((0, _actions.setFocusedEvent)(event));
184
228
  setFilterPopupOpen(false);
185
229
  setTimeout(function () {
186
230
  history.push("/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&locale=").concat(nav_context_data.navContext.locale, "&eventId=").concat(event.id, "&valuesFromKQL=").concat(global_data.eventFilterParam, "&validEvent=").concat(validateEvent(event)));
187
231
  }, 500);
188
232
  };
233
+
189
234
  var onMouseEnterEvent = function onMouseEnterEvent(event) {
190
235
  if (!focusedEvent && !hoveredEvent && validateEvent(event)) {
191
236
  dispatch((0, _actions.setHoveredEvent)(event));
192
237
  }
193
238
  };
239
+
194
240
  var onMouseLeaveEvent = function onMouseLeaveEvent() {
195
241
  if (hoveredEvent && hoveredEventPaths && map) {
196
242
  hoveredEventPaths.forEach(function (path) {
197
243
  map.removeLayer(path);
198
244
  });
245
+
199
246
  if (hoveredEdgePaths) {
200
247
  hoveredEdgePaths.forEach(function (path) {
201
248
  map.removeLayer(path);
202
249
  });
203
250
  }
251
+
204
252
  var layers = map._layers;
253
+
205
254
  for (var property in layers) {
206
255
  var kando_object = layers[property].kando_object;
256
+
207
257
  if ((kando_object === null || kando_object === void 0 ? void 0 : kando_object.includes('EventBody')) || ['EventTail', 'SamplingPoint', 'Decorator', 'HoveredEdge', 'HoveredEdgeFront', 'FocusedEdge', 'FocusedEdgeFront'].includes(kando_object)) {
208
258
  map.removeLayer(layers[property]);
209
259
  }
210
260
  }
211
261
  }
262
+
212
263
  dispatch((0, _actions.setHoveredEvent)(null));
213
264
  dispatch((0, _actions.setHoveredEventPaths)([]));
214
265
  dispatch((0, _actions.setHoveredEdgePaths)([]));
215
266
  };
267
+
216
268
  var setFocusedEventIfFoundInParams = function setFocusedEventIfFoundInParams() {
217
269
  if (getEventIdFromURL() !== null && getEventIdFromURL() !== 'null' && focusedEvent === null && items.length !== 0 && !isFetching && !areas_data.isFetching && !points_data.isFetching && !edges_data.isFetching) {
218
270
  var event = events_data.items.find(function (e) {
219
271
  return e.id === parseInt(getEventIdFromURL());
220
272
  });
273
+
221
274
  if (event !== undefined) {
222
275
  handleEventItemClick(event, null);
223
276
  }
224
277
  }
225
278
  };
279
+
226
280
  var validEvent = (0, _react.useMemo)(function () {
227
281
  var event = events_data.items.find(function (e) {
228
282
  return e.id.toString() === getEventIdFromURL();
229
283
  });
284
+
230
285
  if (event !== undefined) {
231
286
  return validateEvent(event);
232
287
  } else {
233
288
  return true;
234
289
  }
235
290
  }, [events_data.focusedEvent, areas_data.isFetching, points_data.isFetching, edges_data.isFetching, events_data.isFetching]);
291
+
236
292
  var triggerSort = function triggerSort(sort) {
237
293
  if (global_data.activeFilter !== null) {
238
294
  var KQL;
239
295
  var URL;
296
+
240
297
  switch (sort) {
241
298
  case 1:
242
299
  KQL = "".concat((0, _kql.buildKQLQuery)(global_data.activeFilter, 'newest'));
@@ -244,12 +301,14 @@ var EventsList = function EventsList(_ref) {
244
301
  history.push(URL);
245
302
  dispatch((0, _actions2.setEventFilterParam)(KQL));
246
303
  break;
304
+
247
305
  case 2:
248
306
  KQL = "".concat((0, _kql.buildKQLQuery)(global_data.activeFilter, 'oldest'));
249
307
  URL = "/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&eventId=").concat(getEventIdFromURL(), "&locale=").concat(nav_context_data.navContext.locale, "&valuesFromKQL=").concat(KQL, "&validEvent=").concat(validEvent);
250
308
  history.push(URL);
251
309
  dispatch((0, _actions2.setEventFilterParam)(KQL));
252
310
  break;
311
+
253
312
  case 3:
254
313
  KQL = "".concat((0, _kql.buildKQLQuery)(global_data.activeFilter, 'severity'));
255
314
  URL = "/".concat(nav_context_data.navContext.name, "/index?water_authority_id=").concat(global_data.waterAuthorityId, "&eventId=").concat(getEventIdFromURL(), "&locale=").concat(nav_context_data.navContext.locale, "&valuesFromKQL=").concat(KQL, "&validEvent=").concat(validEvent);
@@ -259,12 +318,14 @@ var EventsList = function EventsList(_ref) {
259
318
  }
260
319
  }
261
320
  };
321
+
262
322
  var calcEventsRealAmount = function calcEventsRealAmount() {
263
323
  var eventsCount = 0;
264
324
  eventsCount = events_data.events_count;
265
325
  if (eventsCount > 50) eventsCount = "".concat(_i18n.default.t('events_overview.more_than'), " 50");
266
326
  return eventsCount;
267
327
  };
328
+
268
329
  (0, _react.useEffect)(function () {
269
330
  dispatch((0, _actions.fetchEvents)(waterAuthorityId, getKQLValuesFromURL() || 'DEFAULT'));
270
331
  }, [global_data.waterAuthorityId, global_data.eventFilterParam]);
@@ -362,7 +423,10 @@ var EventsList = function EventsList(_ref) {
362
423
  }));
363
424
  }))));
364
425
  };
426
+
365
427
  var connector = (0, _reactRedux.connect)(mapStateToProps);
428
+
366
429
  var _default = connector(EventsList);
430
+
367
431
  exports.default = _default;
368
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnJlZVNvbGlkU3ZnSWNvbnMiLCJyZXF1aXJlIiwiX3JlYWN0Rm9udGF3ZXNvbWUiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9yZWFjdFJlZHV4IiwiX3JlYWN0Um91dGVyRG9tIiwiX2Fycm93TGVmdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZnVubmVsIiwiX25vX2V2ZW50cyIsIl9TZXZlcmVFdmVudCIsIl9VcmxIaXN0b3J5IiwiX2FjdGlvbnMiLCJfYWN0aW9uczIiLCJfaTE4biIsIl9rcWwiLCJfRXZlbnRJbmZvIiwiX01vcmVJbmZvIiwiX0ZpbHRlckNvbnRhaW5lciIsIl9Tb3J0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJkZWZhdWx0IiwiY2FjaGUiLCJoYXMiLCJnZXQiLCJuZXdPYmoiLCJoYXNQcm9wZXJ0eURlc2NyaXB0b3IiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImRlc2MiLCJzZXQiLCJtYXBTdGF0ZVRvUHJvcHMiLCJzdGF0ZSIsImV2ZW50c19kYXRhIiwiZ2xvYmFsX2RhdGEiLCJlZGdlc19kYXRhIiwicG9pbnRzX2RhdGEiLCJhcmVhc19kYXRhIiwibmF2X2NvbnRleHRfZGF0YSIsIkV2ZW50c0xpc3QiLCJfcmVmIiwic2lkZW5hdkV4cGFuZGVkIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsIml0ZW1zIiwiaXNGZXRjaGluZyIsImZvY3VzZWRFdmVudCIsImhvdmVyZWRFdmVudCIsImhvdmVyZWRFdmVudFBhdGhzIiwiaG92ZXJlZEVkZ2VQYXRocyIsIndhdGVyQXV0aG9yaXR5SWQiLCJtYXAiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJmaWx0ZXJQb3B1cE9wZW4iLCJzZXRGaWx0ZXJQb3B1cE9wZW4iLCJfdXNlU3RhdGUzIiwibWVzc2FnZXMiLCJtZXNzYWdlIiwiZXZlbnRfaWQiLCJldmVudF9pZHMiLCJfdXNlU3RhdGU0IiwiZXhjZXB0aW9uQWxlcnQiLCJzZXRFeGNlcHRpb25BbGVydCIsImxhc3RWaXNpdGVkIiwidXNlTGFzdFZpc2l0ZWQiLCJ1c2VRdWVyeSIsIlVSTFNlYXJjaFBhcmFtcyIsInVzZUxvY2F0aW9uIiwic2VhcmNoIiwiaGlzdG9yeSIsInVzZUhpc3RvcnkiLCJxdWVyeSIsImdldEtRTFZhbHVlc0Zyb21VUkwiLCJnZXRFdmVudElkRnJvbVVSTCIsImxvYWRlciIsImxlbmd0aCIsIm5ld0FyZWFzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImhhbmRsZUV4cGFuc2lvblRvZ2dsZSIsInNpZGVOYXZFeHBhbmRlZCIsImFwcGx5RGVmYXVsdEZpbHRlciIsInB1c2giLCJjb25jYXQiLCJuYXZDb250ZXh0IiwibmFtZSIsImxvY2FsZSIsInNldEV2ZW50RmlsdGVyUGFyYW0iLCJ2YWxpZGF0ZUV2ZW50IiwiZXZlbnQiLCJpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXMiLCJvYnNlcnZhdGlvbnMiLCJmb3JFYWNoIiwib2JzZXJ2YXRpb24iLCJwb2ludF9pc19yb290IiwiZWRnZSIsImZpbmQiLCJzb3VyY2VfcG9pbnRfaWQiLCJwb2ludF9pZCIsInVuZGVmaW5lZCIsInBvaW50X25hbWUiLCJpbmRleCIsImZpbmRJbmRleCIsIm1zZyIsImlkIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIkZyYWdtZW50IiwiaTE4biIsInQiLCJpbnZhbGlkUGF0aE1lc3NhZ2VzIiwicGF0aCIsImVkZ2VfaWQiLCJjb25zb2xlIiwiZXJyb3IiLCJsYXN0X29ic2VydmF0aW9uX2lkIiwibGFzdE9ic2VydmF0aW9uUG9pbnQiLCJoYW5kbGVFdmVudEl0ZW1DbGljayIsInJlZiIsIm9uTW91c2VMZWF2ZUV2ZW50Iiwic2V0Rm9jdXNlZEV2ZW50Iiwic2V0VGltZW91dCIsImV2ZW50RmlsdGVyUGFyYW0iLCJvbk1vdXNlRW50ZXJFdmVudCIsInNldEhvdmVyZWRFdmVudCIsInJlbW92ZUxheWVyIiwibGF5ZXJzIiwiX2xheWVycyIsInByb3BlcnR5Iiwia2FuZG9fb2JqZWN0IiwiaW5jbHVkZXMiLCJzZXRIb3ZlcmVkRXZlbnRQYXRocyIsInNldEhvdmVyZWRFZGdlUGF0aHMiLCJzZXRGb2N1c2VkRXZlbnRJZkZvdW5kSW5QYXJhbXMiLCJlIiwicGFyc2VJbnQiLCJ2YWxpZEV2ZW50IiwidXNlTWVtbyIsInRvU3RyaW5nIiwidHJpZ2dlclNvcnQiLCJzb3J0IiwiYWN0aXZlRmlsdGVyIiwiS1FMIiwiVVJMIiwiYnVpbGRLUUxRdWVyeSIsImNhbGNFdmVudHNSZWFsQW1vdW50IiwiZXZlbnRzQ291bnQiLCJldmVudHNfY291bnQiLCJ1c2VFZmZlY3QiLCJmZXRjaEV2ZW50cyIsIm1vcmVJbmZvIiwiYWN0aXZlIiwicmVPcGVuRmlsdGVyIiwib25DbGljayIsIkZvbnRBd2Vzb21lSWNvbiIsImljb24iLCJmYUNhcmV0TGVmdCIsImZhQ2FyZXRSaWdodCIsImhyZWYiLCJmYUFycm93TGVmdCIsIkxpbmsiLCJ0byIsInNyYyIsIkxlZnRBcnJvd0ljb24iLCJoZWlnaHQiLCJ3aWR0aCIsImFsdCIsImV2ZW50cyIsImV2ZW50c0ZldGNoaW5nIiwiUmVhY3RDb21wb25lbnQiLCJmaWxsIiwiZmV0Y2hUeXBlIiwiTm9FdmVudHNJbWFnZSIsIlNldmVyZUV2ZW50IiwiaGFuZGxlQ2xpY2siLCJjb25uZWN0b3IiLCJjb25uZWN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3BhZ2VzL0V2ZW50c1BhZ2UvZXZlbnRzL2V2ZW50c19saXN0L0V2ZW50c0xpc3QudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGV0Yy9uby1jb21tZW50ZWQtb3V0LWNvZGUgKi9cbmltcG9ydCB7XG4gIGZhQXJyb3dMZWZ0LFxuICBmYUNhcmV0TGVmdCxcbiAgZmFDYXJldFJpZ2h0LFxufSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVJY29uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lJztcbmltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0LCBDb25uZWN0ZWRQcm9wcywgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBMaW5rLCB1c2VIaXN0b3J5LCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IExlZnRBcnJvd0ljb24gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1sZWZ0LnN2Zyc7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBGaWx0ZXJJY29uIH0gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9mdW5uZWwuc3ZnJztcbmltcG9ydCBOb0V2ZW50c0ltYWdlIGZyb20gJ3NyYy9hc3NldHMvbm9fZXZlbnRzLnN2Zyc7XG5pbXBvcnQgeyBTZXZlcmVFdmVudCB9IGZyb20gJ3NyYy9jb21wb25lbnRzL1NldmVyZUV2ZW50L1NldmVyZUV2ZW50JztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJ3NyYy9tb2RlbHMvSUFwcFN0YXRlJztcbmltcG9ydCB7IHVzZUxhc3RWaXNpdGVkIH0gZnJvbSAnc3JjL3Byb3ZpZGVycy9VcmxIaXN0b3J5JztcbmltcG9ydCB7XG4gIGZldGNoRXZlbnRzLFxuICBzZXRGb2N1c2VkRXZlbnQsXG4gIHNldEhvdmVyZWRFZGdlUGF0aHMsXG4gIHNldEhvdmVyZWRFdmVudCxcbiAgc2V0SG92ZXJlZEV2ZW50UGF0aHMsXG59IGZyb20gJ3NyYy9zdG9yZS9ldmVudHMvYWN0aW9ucyc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdzcmMvc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHsgc2V0RXZlbnRGaWx0ZXJQYXJhbSwgc2lkZU5hdkV4cGFuZGVkIH0gZnJvbSAnc3JjL3N0b3JlL2dsb2JhbC9hY3Rpb25zJztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBidWlsZEtRTFF1ZXJ5IH0gZnJvbSAnc3JjL3V0aWxpdGllcy9rcWwnO1xuaW1wb3J0ICcuLi9FdmVudHNTdHlsZS5zY3NzJztcbmltcG9ydCBFdmVudEluZm8gZnJvbSAnLi4vZXZlbnRfaW5mby9FdmVudEluZm8nO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4uL01vcmVJbmZvJztcbmltcG9ydCBGaWx0ZXJDb250YWluZXIgZnJvbSAnLi9GaWx0ZXIvRmlsdGVyQ29udGFpbmVyJztcbmltcG9ydCBTb3J0IGZyb20gJy4vU29ydCc7XG5cbmZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogSUFwcFN0YXRlKSB7XG4gIGNvbnN0IHtcbiAgICBldmVudHNfZGF0YSxcbiAgICBnbG9iYWxfZGF0YSxcbiAgICBlZGdlc19kYXRhLFxuICAgIHBvaW50c19kYXRhLFxuICAgIGFyZWFzX2RhdGEsXG4gICAgbmF2X2NvbnRleHRfZGF0YSxcbiAgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgZXZlbnRzX2RhdGEsXG4gICAgZ2xvYmFsX2RhdGEsXG4gICAgZWRnZXNfZGF0YSxcbiAgICBwb2ludHNfZGF0YSxcbiAgICBhcmVhc19kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gIH07XG59XG5cbnR5cGUgSVByb3BzID0gQ29ubmVjdGVkUHJvcHM8dHlwZW9mIGNvbm5lY3Rvcj4gJiB7XG4gIHNpZGVuYXZFeHBhbmRlZDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEV2ZW50c0xpc3Q6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICBhcmVhc19kYXRhLFxuICBwb2ludHNfZGF0YSxcbiAgZWRnZXNfZGF0YSxcbiAgZ2xvYmFsX2RhdGEsXG4gIHNpZGVuYXZFeHBhbmRlZCxcbiAgZXZlbnRzX2RhdGEsXG4gIG5hdl9jb250ZXh0X2RhdGEsXG59KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3Qge1xuICAgIGl0ZW1zLFxuICAgIGlzRmV0Y2hpbmcsXG4gICAgZm9jdXNlZEV2ZW50LFxuICAgIGhvdmVyZWRFdmVudCxcbiAgICBob3ZlcmVkRXZlbnRQYXRocyxcbiAgICBob3ZlcmVkRWRnZVBhdGhzLFxuICB9ID0gZXZlbnRzX2RhdGE7XG4gIGNvbnN0IHsgd2F0ZXJBdXRob3JpdHlJZCwgbWFwIH0gPSBnbG9iYWxfZGF0YTtcbiAgY29uc3QgW2ZpbHRlclBvcHVwT3Blbiwgc2V0RmlsdGVyUG9wdXBPcGVuXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXhjZXB0aW9uQWxlcnQsIHNldEV4Y2VwdGlvbkFsZXJ0XSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlczogeyBtZXNzYWdlOiBhbnk7IGV2ZW50X2lkOiBudW1iZXIgfVtdO1xuICAgIGV2ZW50X2lkczogbnVtYmVyW107XG4gIH0+KHsgbWVzc2FnZXM6IFt7IG1lc3NhZ2U6ICcnLCBldmVudF9pZDogMCB9XSwgZXZlbnRfaWRzOiBbXSB9KTtcbiAgY29uc3QgbGFzdFZpc2l0ZWQgPSB1c2VMYXN0VmlzaXRlZCgpO1xuXG4gIGNvbnN0IHVzZVF1ZXJ5ID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHVzZUxvY2F0aW9uKCkuc2VhcmNoKTtcbiAgfTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeSgpO1xuICBjb25zdCBnZXRLUUxWYWx1ZXNGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ3ZhbHVlc0Zyb21LUUwnKTtcbiAgfTtcbiAgY29uc3QgZ2V0RXZlbnRJZEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgnZXZlbnRJZCcpO1xuICB9O1xuXG4gIGNvbnN0IGxvYWRlciA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAoaXNGZXRjaGluZyAmJiBpdGVtcy5sZW5ndGggPT09IDApIHx8XG4gICAgICBhcmVhc19kYXRhLm5ld0FyZWFzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgcG9pbnRzX2RhdGEuaXNGZXRjaGluZyB8fFxuICAgICAgZWRnZXNfZGF0YS5pc0ZldGNoaW5nXG4gICAgKSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9eydsb2FkZXInfT48L2Rpdj47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFeHBhbnNpb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2lkZU5hdkV4cGFuZGVkKCFzaWRlbmF2RXhwYW5kZWQpKTtcbiAgfTtcblxuICBjb25zdCBhcHBseURlZmF1bHRGaWx0ZXIgPSAoKSA9PiB7XG4gICAgaGlzdG9yeS5wdXNoKFxuICAgICAgYC8ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlfSZ2YWx1ZXNGcm9tS1FMPWAsXG4gICAgKTtcbiAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKCcnKSk7XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGVFdmVudCA9IChldmVudDogSUV2ZW50KSA9PiB7XG4gICAgLy8gY2hlY2sgdGhhdCBhbGwgb2JzZXJ2YXRpb25zJyBlZGdlcyBleGlzdHMuIElmIHRoZXkgYXJlIG5vdCBleGlzdHMgaXQncyBpbmRpY2F0ZXMgdGhhdCB0aGVpciBwb2ludHMgYXJlXG4gICAgLy8gbm90IGluIHRoZSBoaWVyYXJjaHkgb3IgZG9lc24ndCBoYXZlIGxhdC9sbmcuXG4gICAgbGV0IGludmFsaWRPYnNlcnZhdGlvbnNNZXNzYWdlczogYW55ID0gW107XG4gICAgZXZlbnQub2JzZXJ2YXRpb25zLmZvckVhY2goKG9ic2VydmF0aW9uOiBhbnkpID0+IHtcbiAgICAgIC8vIGlmIG9ic2VydmF0aW9uIGlzIHJvb3QgKGV4LiBXV1RQKSB0aGVyZSBpcyBubyBlZGdlIHRoYXQgaXRzIGEgc291cmNlLiBzbyB3ZSBjYW4gc2tpcCB0aGlzIGNoZWNrXG4gICAgICBpZiAoIW9ic2VydmF0aW9uLnBvaW50X2lzX3Jvb3QpIHtcbiAgICAgICAgbGV0IGVkZ2UgPSBlZGdlc19kYXRhLml0ZW1zLmZpbmQoXG4gICAgICAgICAgKGVkZ2UpID0+IGVkZ2Uuc291cmNlX3BvaW50X2lkID09PSBvYnNlcnZhdGlvbi5wb2ludF9pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGludmFsaWRPYnNlcnZhdGlvbnNNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgYCR7b2JzZXJ2YXRpb24ucG9pbnRfbmFtZX0gKCR7b2JzZXJ2YXRpb24ucG9pbnRfaWR9KSBgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBsZXQgaW5kZXggPSBleGNlcHRpb25BbGVydC5tZXNzYWdlcy5maW5kSW5kZXgoXG4gICAgICAgIChtc2cpID0+IG1zZy5ldmVudF9pZCA9PT0gZXZlbnQuaWQsXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHNldEV4Y2VwdGlvbkFsZXJ0KHtcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAgLi4uZXhjZXB0aW9uQWxlcnQubWVzc2FnZXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmV2ZW50X2RhdGFfbWlzc2luZycpfTwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmlkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGV2ZW50X2lkczogWy4uLmV4Y2VwdGlvbkFsZXJ0LmV2ZW50X2lkcywgZXZlbnQuaWRdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzYW1lIGNoZWNrIGFzIGFib3ZlIGJ1dCB0aGlzIHRpbWUgZm9yIHRoZSBldmVudCBwYXRoLiBJZiBlZGdlIGRvZXNuJ3QgZXhpc3QsIGl0J3MgaW5kaWNhdGVzIHRoYXQgb25lIG9mIHRoZVxuICAgIC8vIHBvaW50cyBkb3duc3RyZWFtIGRvZXNuJ3QgaGF2ZSBsYXQvbG5nLlxuICAgIGxldCBpbnZhbGlkUGF0aE1lc3NhZ2VzOiBhbnkgPSBbXTtcbiAgICBldmVudC5wYXRoLmZvckVhY2goKHBhdGg6IGFueSkgPT4ge1xuICAgICAgbGV0IGVkZ2UgPSBlZGdlc19kYXRhLml0ZW1zLmZpbmQoKGVkZ2UpID0+IGVkZ2UuaWQgPT09IHBhdGguZWRnZV9pZCk7XG4gICAgICBpZiAoZWRnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGVkZ2UgJHtwYXRoLmVkZ2VfaWR9IGNhbiBub3QgYmUgZm91bmRgKTtcbiAgICAgICAgbGV0IG9ic2VydmF0aW9uID0gZXZlbnQub2JzZXJ2YXRpb25zLmZpbmQoXG4gICAgICAgICAgKG9ic2VydmF0aW9uKSA9PiBvYnNlcnZhdGlvbi5pZCA9PT0gcGF0aC5sYXN0X29ic2VydmF0aW9uX2lkLFxuICAgICAgICApO1xuICAgICAgICBsZXQgbGFzdE9ic2VydmF0aW9uUG9pbnQgPSAnTm90IGZvdW5kJztcbiAgICAgICAgaWYgKG9ic2VydmF0aW9uKSB7XG4gICAgICAgICAgbGFzdE9ic2VydmF0aW9uUG9pbnQgPSBvYnNlcnZhdGlvbi5wb2ludF9uYW1lO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xhc3RPYnNlcnZhdGlvblBvaW50JywgbGFzdE9ic2VydmF0aW9uUG9pbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW52YWxpZFBhdGhNZXNzYWdlcy5wdXNoKGAke2xhc3RPYnNlcnZhdGlvblBvaW50fSBgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpbnZhbGlkUGF0aE1lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgc2V0RXhjZXB0aW9uQWxlcnQoe1xuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIC4uLmV4Y2VwdGlvbkFsZXJ0Lm1lc3NhZ2VzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8cD57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZXZlbnRfdmVyaWZ5X2Nvb3JkaW5hdGVzJyl9PC9wPlxuICAgICAgICAgICAgICAgIDxzcGFuPntpbnZhbGlkUGF0aE1lc3NhZ2VzfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGV2ZW50X2lkczogWy4uLmV4Y2VwdGlvbkFsZXJ0LmV2ZW50X2lkcywgZXZlbnQuaWRdLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRXZlbnRJdGVtQ2xpY2sgPSAoXG4gICAgZXZlbnQ6IElFdmVudCxcbiAgICByZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4gfCBudWxsLFxuICApID0+IHtcbiAgICBpZiAocmVmICE9PSBudWxsKSBvbk1vdXNlTGVhdmVFdmVudCgpO1xuICAgIC8vIGlmIChob3ZlcmVkRXZlbnRQYXRocyAmJiBtYXApIHtcbiAgICAvLyAgICAgaG92ZXJlZEV2ZW50UGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIC8vICAgICAgICAgbWFwLnJlbW92ZUxheWVyKHBhdGgpO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG4gICAgLy8gZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50UGF0aHMoW10pKTtcbiAgICAvLyBkaXNwYXRjaChzZXRIb3ZlckV2ZW50SW5kaWNhdG9yKG51bGwpKTtcbiAgICBkaXNwYXRjaChzZXRGb2N1c2VkRXZlbnQoZXZlbnQpKTtcbiAgICBzZXRGaWx0ZXJQb3B1cE9wZW4oZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICBgLyR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWV9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgfSZsb2NhbGU9JHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlfSZldmVudElkPSR7XG4gICAgICAgICAgZXZlbnQuaWRcbiAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7XG4gICAgICAgICAgZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbVxuICAgICAgICB9JnZhbGlkRXZlbnQ9JHt2YWxpZGF0ZUV2ZW50KGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICB9LCA1MDApO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VFbnRlckV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkRXZlbnQgJiYgIWhvdmVyZWRFdmVudCAmJiB2YWxpZGF0ZUV2ZW50KGV2ZW50KSkge1xuICAgICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50KGV2ZW50KSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZUV2ZW50ID0gKCkgPT4ge1xuICAgIGlmIChob3ZlcmVkRXZlbnQgJiYgaG92ZXJlZEV2ZW50UGF0aHMgJiYgbWFwKSB7XG4gICAgICBob3ZlcmVkRXZlbnRQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIG1hcC5yZW1vdmVMYXllcihwYXRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaG92ZXJlZEVkZ2VQYXRocykge1xuICAgICAgICBob3ZlcmVkRWRnZVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIocGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGF5ZXJzID0gbWFwLl9sYXllcnM7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVycykge1xuICAgICAgICBjb25zdCBrYW5kb19vYmplY3QgPSBsYXllcnNbcHJvcGVydHldLmthbmRvX29iamVjdDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGthbmRvX29iamVjdD8uaW5jbHVkZXMoJ0V2ZW50Qm9keScpIHx8XG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ0V2ZW50VGFpbCcsXG4gICAgICAgICAgICAnU2FtcGxpbmdQb2ludCcsXG4gICAgICAgICAgICAnRGVjb3JhdG9yJyxcbiAgICAgICAgICAgICdIb3ZlcmVkRWRnZScsXG4gICAgICAgICAgICAnSG92ZXJlZEVkZ2VGcm9udCcsXG4gICAgICAgICAgICAnRm9jdXNlZEVkZ2UnLFxuICAgICAgICAgICAgJ0ZvY3VzZWRFZGdlRnJvbnQnLFxuICAgICAgICAgIF0uaW5jbHVkZXMoa2FuZG9fb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJzW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50KG51bGwpKTtcbiAgICBkaXNwYXRjaChzZXRIb3ZlcmVkRXZlbnRQYXRocyhbXSkpO1xuICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFZGdlUGF0aHMoW10pKTtcbiAgfTtcblxuICBjb25zdCBzZXRGb2N1c2VkRXZlbnRJZkZvdW5kSW5QYXJhbXMgPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSAhPT0gbnVsbCAmJlxuICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSAhPT0gJ251bGwnICYmXG4gICAgICBmb2N1c2VkRXZlbnQgPT09IG51bGwgJiZcbiAgICAgIGl0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgIWlzRmV0Y2hpbmcgJiZcbiAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhZWRnZXNfZGF0YS5pc0ZldGNoaW5nXG4gICAgKSB7XG4gICAgICBsZXQgZXZlbnQgPSBldmVudHNfZGF0YS5pdGVtcy5maW5kKFxuICAgICAgICAoZTogSUV2ZW50KSA9PiBlLmlkID09PSBwYXJzZUludChnZXRFdmVudElkRnJvbVVSTCgpISksXG4gICAgICApO1xuICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGFuZGxlRXZlbnRJdGVtQ2xpY2soZXZlbnQsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2YWxpZEV2ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGV2ZW50ID0gZXZlbnRzX2RhdGEuaXRlbXMuZmluZChcbiAgICAgIChlKSA9PiBlLmlkLnRvU3RyaW5nKCkgPT09IGdldEV2ZW50SWRGcm9tVVJMKCksXG4gICAgKTtcblxuICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFdmVudChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50c19kYXRhLmZvY3VzZWRFdmVudCxcbiAgICBhcmVhc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgcG9pbnRzX2RhdGEuaXNGZXRjaGluZyxcbiAgICBlZGdlc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZXZlbnRzX2RhdGEuaXNGZXRjaGluZyxcbiAgXSk7XG5cbiAgY29uc3QgdHJpZ2dlclNvcnQgPSAoc29ydDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgbGV0IEtRTDtcbiAgICAgIGxldCBVUkw7XG4gICAgICBzd2l0Y2ggKHNvcnQpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIEtRTCA9IGAke2J1aWxkS1FMUXVlcnkoZ2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyLCAnbmV3ZXN0Jyl9YDtcbiAgICAgICAgICBVUkwgPSBgLyR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZVxuICAgICAgICAgIH0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgICAgfSZldmVudElkPSR7Z2V0RXZlbnRJZEZyb21VUkwoKX0mbG9jYWxlPSR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7S1FMfSZ2YWxpZEV2ZW50PSR7dmFsaWRFdmVudH1gO1xuICAgICAgICAgIGhpc3RvcnkucHVzaChVUkwpO1xuICAgICAgICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oS1FMKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBLUUwgPSBgJHtidWlsZEtRTFF1ZXJ5KGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciwgJ29sZGVzdCcpfWA7XG4gICAgICAgICAgVVJMID0gYC8ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWVcbiAgICAgICAgICB9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JmxvY2FsZT0ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke0tRTH0mdmFsaWRFdmVudD0ke3ZhbGlkRXZlbnR9YDtcbiAgICAgICAgICBoaXN0b3J5LnB1c2goVVJMKTtcbiAgICAgICAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKEtRTCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgS1FMID0gYCR7YnVpbGRLUUxRdWVyeShnbG9iYWxfZGF0YS5hY3RpdmVGaWx0ZXIsICdzZXZlcml0eScpfWA7XG4gICAgICAgICAgVVJMID0gYC8ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWVcbiAgICAgICAgICB9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JmxvY2FsZT0ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke0tRTH0mdmFsaWRFdmVudD0ke3ZhbGlkRXZlbnR9YDtcbiAgICAgICAgICBoaXN0b3J5LnB1c2goVVJMKTtcbiAgICAgICAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKEtRTCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBjYWxjRXZlbnRzUmVhbEFtb3VudCA9ICgpID0+IHtcbiAgICBsZXQgZXZlbnRzQ291bnQ6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gICAgZXZlbnRzQ291bnQgPSBldmVudHNfZGF0YS5ldmVudHNfY291bnQ7XG4gICAgaWYgKGV2ZW50c0NvdW50ID4gNTApXG4gICAgICBldmVudHNDb3VudCA9IGAke2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3Lm1vcmVfdGhhbicpfSA1MGA7XG5cbiAgICByZXR1cm4gZXZlbnRzQ291bnQ7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChmZXRjaEV2ZW50cyh3YXRlckF1dGhvcml0eUlkLCBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkgfHwgJ0RFRkFVTFQnKSk7XG4gIH0sIFtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkLCBnbG9iYWxfZGF0YS5ldmVudEZpbHRlclBhcmFtXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICAhZXZlbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIWVkZ2VzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIXBvaW50c19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmdcbiAgICApIHtcbiAgICAgIHNldEZvY3VzZWRFdmVudElmRm91bmRJblBhcmFtcygpO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZWRnZXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIHBvaW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgYXJlYXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIGdsb2JhbF9kYXRhLmV2ZW50RmlsdGVyUGFyYW0sXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9eydzaWRlbmF2ICcgKyAoc2lkZW5hdkV4cGFuZGVkID8gJycgOiAnc2lkZW5hdi0tY29sbGFwc2VkJyl9PlxuICAgICAge2dsb2JhbF9kYXRhLm1vcmVJbmZvICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsX2RhdGEubW9yZUluZm8uYWN0aXZlICYmIChcbiAgICAgICAgPE1vcmVJbmZvIC8+XG4gICAgICApfVxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgJ2V2ZW50LWluZm8gJyArXG4gICAgICAgICAgKCFob3ZlcmVkRXZlbnQgJiYgZm9jdXNlZEV2ZW50ICE9PSBudWxsXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6ICdldmVudC1pbmZvLS1jb2xsYXBzZWQnKVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHshaG92ZXJlZEV2ZW50ICYmIGZvY3VzZWRFdmVudCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgPEV2ZW50SW5mb1xuICAgICAgICAgICAgZXZlbnQ9e2ZvY3VzZWRFdmVudH1cbiAgICAgICAgICAgIHJlT3BlbkZpbHRlcj17KCkgPT4gc2V0RmlsdGVyUG9wdXBPcGVuKHRydWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwidG9nZ2xlLWV4cGFuc2lvbi1idXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRXhwYW5zaW9uVG9nZ2xlKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibmF2LWV4cGFuc2lvbi1pY29uXCI+XG4gICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgaWNvbj17c2lkZW5hdkV4cGFuZGVkID8gZmFDYXJldExlZnQgOiBmYUNhcmV0UmlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXsndG9nZ2xlLWV4cGFuc2lvbi1idXR0b24tbW9iaWxlJ31cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUV4cGFuc2lvblRvZ2dsZSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8YSBocmVmPVwiI1wiPlxuICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFBcnJvd0xlZnR9IC8+XG4gICAgICAgICAgPHNwYW4+IHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5iYWNrX3RvX2RldGFpbHMnKX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJldmVudHMtaGVhZGVyXCI+XG4gICAgICAgIHtsYXN0VmlzaXRlZCAmJiAhaXNGZXRjaGluZyAmJiAoXG4gICAgICAgICAgPExpbmsgY2xhc3NOYW1lPVwiYmFja1wiIHRvPXtsYXN0VmlzaXRlZH0+XG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBzcmM9e0xlZnRBcnJvd0ljb259XG4gICAgICAgICAgICAgIGhlaWdodD1cIjEwcHhcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjEycHhcIlxuICAgICAgICAgICAgICBhbHQ9XCJiYWNrXCJcbiAgICAgICAgICAgIC8+eycgJ31cbiAgICAgICAgICAgIHtpMThuLnQoJ2FyZWFfc2NyZWVuLmJhY2snKX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICl9XG4gICAgICAgIDxoND5cbiAgICAgICAgICB7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZXZlbnRzX2xpc3QnKX1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eydldmVudHMtaGVhZGVyX19ldmVudHNfYW1vdW50J30+XG4gICAgICAgICAgICAoe2NhbGNFdmVudHNSZWFsQW1vdW50KCl9KVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9oND5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJpbmdcIj5cbiAgICAgICAgICB7ZXZlbnRzX2RhdGEuaXRlbXMubGVuZ3RoICE9PSAwICYmIChcbiAgICAgICAgICAgIDxTb3J0XG4gICAgICAgICAgICAgIHRyaWdnZXJTb3J0PXt0cmlnZ2VyU29ydH1cbiAgICAgICAgICAgICAgZXZlbnRzPXtldmVudHNfZGF0YS5pdGVtc31cbiAgICAgICAgICAgICAgZXZlbnRzRmV0Y2hpbmc9e2V2ZW50c19kYXRhLmlzRmV0Y2hpbmd9XG4gICAgICAgICAgICAgIGFjdGl2ZUZpbHRlcj17Z2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWNvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RmlsdGVyUG9wdXBPcGVuKCFmaWx0ZXJQb3B1cE9wZW4pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RmlsdGVySWNvbiB3aWR0aD1cIjE3cHhcIiBoZWlnaHQ9XCIxN3B4XCIgZmlsbD1cIiNmNjAwNGZcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHtwb2ludHNfZGF0YS5pdGVtcy5sZW5ndGggIT09IDAgJiYgIWZvY3VzZWRFdmVudCAmJiAoXG4gICAgICAgICAgPEZpbHRlckNvbnRhaW5lclxuICAgICAgICAgICAgZmlsdGVyUG9wdXBPcGVuPXtmaWx0ZXJQb3B1cE9wZW59XG4gICAgICAgICAgICBmZXRjaFR5cGU9eydFdmVudEZpbHRlcid9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJldmVudHMtY29udGFpbmVyIHNjcm9sbGJhciBcIj5cbiAgICAgICAge2xvYWRlcigpfVxuICAgICAgICB7IWlzRmV0Y2hpbmcgJiZcbiAgICAgICAgICBpdGVtcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydldmVudHNfX2JsYW5rc2xhdGUnfT5cbiAgICAgICAgICAgICAgPGltZyBzcmM9e05vRXZlbnRzSW1hZ2V9IGFsdD1cIk5vRXZlbnRzSWNvblwiIC8+XG4gICAgICAgICAgICAgIDxoMj57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLmJsYW5rc2xhdGUuaGVhZGVyJyl9PC9oMj5cbiAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5ibGFua3NsYXRlLmJvZHknKX08L3A+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXBwbHlfZGVmYXVsdF9maWx0ZXJfYnV0dG9uJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBhcHBseURlZmF1bHRGaWx0ZXIoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuYmxhbmtzbGF0ZS5idXR0b24nKX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAge2l0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiYgKFxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImV2ZW50cyBcIj5cbiAgICAgICAgICAgICAge2l0ZW1zLm1hcCgoZXZlbnQ6IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgIDxsaSBrZXk9e2V2ZW50LmlkfSBjbGFzc05hbWU9XCJldmVudFwiIGRhdGEtZXZlbnQtaWQ9e2V2ZW50LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxTZXZlcmVFdmVudFxuICAgICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsaWNrPXtoYW5kbGVFdmVudEl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyRXZlbnQ9e29uTW91c2VFbnRlckV2ZW50fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmVFdmVudD17b25Nb3VzZUxlYXZlRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRXZlbnQ9e3ZhbGlkYXRlRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkFsZXJ0PXtleGNlcHRpb25BbGVydH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3RvcihFdmVudHNMaXN0KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUNBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFLQSxJQUFBQyxpQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBQyx1QkFB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
432
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wYWdlcy9FdmVudHNQYWdlL2V2ZW50cy9ldmVudHNfbGlzdC9FdmVudHNMaXN0LnRzeCJdLCJuYW1lcyI6WyJtYXBTdGF0ZVRvUHJvcHMiLCJzdGF0ZSIsImV2ZW50c19kYXRhIiwiZ2xvYmFsX2RhdGEiLCJlZGdlc19kYXRhIiwicG9pbnRzX2RhdGEiLCJhcmVhc19kYXRhIiwibmF2X2NvbnRleHRfZGF0YSIsIkV2ZW50c0xpc3QiLCJzaWRlbmF2RXhwYW5kZWQiLCJkaXNwYXRjaCIsIml0ZW1zIiwiaXNGZXRjaGluZyIsImZvY3VzZWRFdmVudCIsImhvdmVyZWRFdmVudCIsImhvdmVyZWRFdmVudFBhdGhzIiwiaG92ZXJlZEVkZ2VQYXRocyIsIndhdGVyQXV0aG9yaXR5SWQiLCJtYXAiLCJmaWx0ZXJQb3B1cE9wZW4iLCJzZXRGaWx0ZXJQb3B1cE9wZW4iLCJtZXNzYWdlcyIsIm1lc3NhZ2UiLCJldmVudF9pZCIsImV2ZW50X2lkcyIsImV4Y2VwdGlvbkFsZXJ0Iiwic2V0RXhjZXB0aW9uQWxlcnQiLCJsYXN0VmlzaXRlZCIsInVzZVF1ZXJ5IiwiVVJMU2VhcmNoUGFyYW1zIiwic2VhcmNoIiwiaGlzdG9yeSIsInF1ZXJ5IiwiZ2V0S1FMVmFsdWVzRnJvbVVSTCIsImdldCIsImdldEV2ZW50SWRGcm9tVVJMIiwibG9hZGVyIiwibGVuZ3RoIiwibmV3QXJlYXMiLCJoYW5kbGVFeHBhbnNpb25Ub2dnbGUiLCJhcHBseURlZmF1bHRGaWx0ZXIiLCJwdXNoIiwibmF2Q29udGV4dCIsIm5hbWUiLCJsb2NhbGUiLCJ2YWxpZGF0ZUV2ZW50IiwiZXZlbnQiLCJpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXMiLCJvYnNlcnZhdGlvbnMiLCJmb3JFYWNoIiwib2JzZXJ2YXRpb24iLCJwb2ludF9pc19yb290IiwiZWRnZSIsImZpbmQiLCJzb3VyY2VfcG9pbnRfaWQiLCJwb2ludF9pZCIsInVuZGVmaW5lZCIsInBvaW50X25hbWUiLCJpbmRleCIsImZpbmRJbmRleCIsIm1zZyIsImlkIiwiaTE4biIsInQiLCJpbnZhbGlkUGF0aE1lc3NhZ2VzIiwicGF0aCIsImVkZ2VfaWQiLCJjb25zb2xlIiwiZXJyb3IiLCJsYXN0X29ic2VydmF0aW9uX2lkIiwibGFzdE9ic2VydmF0aW9uUG9pbnQiLCJoYW5kbGVFdmVudEl0ZW1DbGljayIsInJlZiIsIm9uTW91c2VMZWF2ZUV2ZW50Iiwic2V0VGltZW91dCIsImV2ZW50RmlsdGVyUGFyYW0iLCJvbk1vdXNlRW50ZXJFdmVudCIsInJlbW92ZUxheWVyIiwibGF5ZXJzIiwiX2xheWVycyIsInByb3BlcnR5Iiwia2FuZG9fb2JqZWN0IiwiaW5jbHVkZXMiLCJzZXRGb2N1c2VkRXZlbnRJZkZvdW5kSW5QYXJhbXMiLCJlIiwicGFyc2VJbnQiLCJ2YWxpZEV2ZW50IiwidG9TdHJpbmciLCJ0cmlnZ2VyU29ydCIsInNvcnQiLCJhY3RpdmVGaWx0ZXIiLCJLUUwiLCJVUkwiLCJjYWxjRXZlbnRzUmVhbEFtb3VudCIsImV2ZW50c0NvdW50IiwiZXZlbnRzX2NvdW50IiwibW9yZUluZm8iLCJhY3RpdmUiLCJmYUNhcmV0TGVmdCIsImZhQ2FyZXRSaWdodCIsImZhQXJyb3dMZWZ0IiwiTGVmdEFycm93SWNvbiIsIk5vRXZlbnRzSW1hZ2UiLCJjb25uZWN0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUtBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUlBOztBQUVBOztBQUNBOztBQVFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUEvQkE7QUFpQ0EsU0FBU0EsZUFBVCxDQUF5QkMsS0FBekIsRUFBMkM7QUFDekMsTUFDRUMsV0FERixHQU9JRCxLQVBKLENBQ0VDLFdBREY7QUFBQSxNQUVFQyxXQUZGLEdBT0lGLEtBUEosQ0FFRUUsV0FGRjtBQUFBLE1BR0VDLFVBSEYsR0FPSUgsS0FQSixDQUdFRyxVQUhGO0FBQUEsTUFJRUMsV0FK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ZWQtb3V0LWNvZGUgKi9cbmltcG9ydCB7XG4gIGZhQXJyb3dMZWZ0LFxuICBmYUNhcmV0TGVmdCxcbiAgZmFDYXJldFJpZ2h0LFxufSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVJY29uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lJztcbmltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjb25uZWN0LCBDb25uZWN0ZWRQcm9wcywgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBMaW5rLCB1c2VIaXN0b3J5LCB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nO1xuaW1wb3J0IExlZnRBcnJvd0ljb24gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9hcnJvdy1sZWZ0LnN2Zyc7XG5pbXBvcnQgeyBSZWFjdENvbXBvbmVudCBhcyBGaWx0ZXJJY29uIH0gZnJvbSAnc3JjL2Fzc2V0cy9pY29ucy9mdW5uZWwuc3ZnJztcbmltcG9ydCBOb0V2ZW50c0ltYWdlIGZyb20gJ3NyYy9hc3NldHMvbm9fZXZlbnRzLnN2Zyc7XG5pbXBvcnQgeyBTZXZlcmVFdmVudCB9IGZyb20gJ3NyYy9jb21wb25lbnRzL1NldmVyZUV2ZW50L1NldmVyZUV2ZW50JztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJ3NyYy9tb2RlbHMvSUFwcFN0YXRlJztcbmltcG9ydCB7IHVzZUxhc3RWaXNpdGVkIH0gZnJvbSAnc3JjL3Byb3ZpZGVycy9VcmxIaXN0b3J5JztcbmltcG9ydCB7XG4gIGZldGNoRXZlbnRzLFxuICBzZXRGb2N1c2VkRXZlbnQsXG4gIHNldEhvdmVyZWRFZGdlUGF0aHMsXG4gIHNldEhvdmVyZWRFdmVudCxcbiAgc2V0SG92ZXJlZEV2ZW50UGF0aHMsXG59IGZyb20gJ3NyYy9zdG9yZS9ldmVudHMvYWN0aW9ucyc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICdzcmMvc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHsgc2V0RXZlbnRGaWx0ZXJQYXJhbSwgc2lkZU5hdkV4cGFuZGVkIH0gZnJvbSAnc3JjL3N0b3JlL2dsb2JhbC9hY3Rpb25zJztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBidWlsZEtRTFF1ZXJ5IH0gZnJvbSAnc3JjL3V0aWxpdGllcy9rcWwnO1xuaW1wb3J0ICcuLi9FdmVudHNTdHlsZS5zY3NzJztcbmltcG9ydCBFdmVudEluZm8gZnJvbSAnLi4vZXZlbnRfaW5mby9FdmVudEluZm8nO1xuaW1wb3J0IE1vcmVJbmZvIGZyb20gJy4uL01vcmVJbmZvJztcbmltcG9ydCBGaWx0ZXJDb250YWluZXIgZnJvbSAnLi9GaWx0ZXIvRmlsdGVyQ29udGFpbmVyJztcbmltcG9ydCBTb3J0IGZyb20gJy4vU29ydCc7XG5cbmZ1bmN0aW9uIG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZTogSUFwcFN0YXRlKSB7XG4gIGNvbnN0IHtcbiAgICBldmVudHNfZGF0YSxcbiAgICBnbG9iYWxfZGF0YSxcbiAgICBlZGdlc19kYXRhLFxuICAgIHBvaW50c19kYXRhLFxuICAgIGFyZWFzX2RhdGEsXG4gICAgbmF2X2NvbnRleHRfZGF0YSxcbiAgfSA9IHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgZXZlbnRzX2RhdGEsXG4gICAgZ2xvYmFsX2RhdGEsXG4gICAgZWRnZXNfZGF0YSxcbiAgICBwb2ludHNfZGF0YSxcbiAgICBhcmVhc19kYXRhLFxuICAgIG5hdl9jb250ZXh0X2RhdGEsXG4gIH07XG59XG5cbnR5cGUgSVByb3BzID0gQ29ubmVjdGVkUHJvcHM8dHlwZW9mIGNvbm5lY3Rvcj4gJiB7XG4gIHNpZGVuYXZFeHBhbmRlZDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IEV2ZW50c0xpc3Q6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICBhcmVhc19kYXRhLFxuICBwb2ludHNfZGF0YSxcbiAgZWRnZXNfZGF0YSxcbiAgZ2xvYmFsX2RhdGEsXG4gIHNpZGVuYXZFeHBhbmRlZCxcbiAgZXZlbnRzX2RhdGEsXG4gIG5hdl9jb250ZXh0X2RhdGEsXG59KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3Qge1xuICAgIGl0ZW1zLFxuICAgIGlzRmV0Y2hpbmcsXG4gICAgZm9jdXNlZEV2ZW50LFxuICAgIGhvdmVyZWRFdmVudCxcbiAgICBob3ZlcmVkRXZlbnRQYXRocyxcbiAgICBob3ZlcmVkRWRnZVBhdGhzLFxuICB9ID0gZXZlbnRzX2RhdGE7XG4gIGNvbnN0IHsgd2F0ZXJBdXRob3JpdHlJZCwgbWFwIH0gPSBnbG9iYWxfZGF0YTtcbiAgY29uc3QgW2ZpbHRlclBvcHVwT3Blbiwgc2V0RmlsdGVyUG9wdXBPcGVuXSA9IHVzZVN0YXRlKHRydWUpO1xuICBjb25zdCBbZXhjZXB0aW9uQWxlcnQsIHNldEV4Y2VwdGlvbkFsZXJ0XSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlczogeyBtZXNzYWdlOiBhbnk7IGV2ZW50X2lkOiBudW1iZXIgfVtdO1xuICAgIGV2ZW50X2lkczogbnVtYmVyW107XG4gIH0+KHsgbWVzc2FnZXM6IFt7IG1lc3NhZ2U6ICcnLCBldmVudF9pZDogMCB9XSwgZXZlbnRfaWRzOiBbXSB9KTtcbiAgY29uc3QgbGFzdFZpc2l0ZWQgPSB1c2VMYXN0VmlzaXRlZCgpO1xuXG4gIGNvbnN0IHVzZVF1ZXJ5ID0gKCkgPT4ge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zKHVzZUxvY2F0aW9uKCkuc2VhcmNoKTtcbiAgfTtcbiAgY29uc3QgaGlzdG9yeSA9IHVzZUhpc3RvcnkoKTtcbiAgY29uc3QgcXVlcnkgPSB1c2VRdWVyeSgpO1xuICBjb25zdCBnZXRLUUxWYWx1ZXNGcm9tVVJMID0gKCkgPT4ge1xuICAgIHJldHVybiBxdWVyeS5nZXQoJ3ZhbHVlc0Zyb21LUUwnKTtcbiAgfTtcbiAgY29uc3QgZ2V0RXZlbnRJZEZyb21VUkwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHF1ZXJ5LmdldCgnZXZlbnRJZCcpO1xuICB9O1xuXG4gIGNvbnN0IGxvYWRlciA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAoaXNGZXRjaGluZyAmJiBpdGVtcy5sZW5ndGggPT09IDApIHx8XG4gICAgICBhcmVhc19kYXRhLm5ld0FyZWFzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgcG9pbnRzX2RhdGEuaXNGZXRjaGluZyB8fFxuICAgICAgZWRnZXNfZGF0YS5pc0ZldGNoaW5nXG4gICAgKSB7XG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9eydsb2FkZXInfT48L2Rpdj47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVFeHBhbnNpb25Ub2dnbGUgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2lkZU5hdkV4cGFuZGVkKCFzaWRlbmF2RXhwYW5kZWQpKTtcbiAgfTtcblxuICBjb25zdCBhcHBseURlZmF1bHRGaWx0ZXIgPSAoKSA9PiB7XG4gICAgaGlzdG9yeS5wdXNoKFxuICAgICAgYC8ke25hdl9jb250ZXh0X2RhdGEubmF2Q29udGV4dC5uYW1lfS9pbmRleD93YXRlcl9hdXRob3JpdHlfaWQ9JHtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkfSZsb2NhbGU9JHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlfSZ2YWx1ZXNGcm9tS1FMPWAsXG4gICAgKTtcbiAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKCcnKSk7XG4gIH07XG5cbiAgY29uc3QgdmFsaWRhdGVFdmVudCA9IChldmVudDogSUV2ZW50KSA9PiB7XG4gICAgLy8gY2hlY2sgdGhhdCBhbGwgb2JzZXJ2YXRpb25zJyBlZGdlcyBleGlzdHMuIElmIHRoZXkgYXJlIG5vdCBleGlzdHMgaXQncyBpbmRpY2F0ZXMgdGhhdCB0aGVpciBwb2ludHMgYXJlXG4gICAgLy8gbm90IGluIHRoZSBoaWVyYXJjaHkgb3IgZG9lc24ndCBoYXZlIGxhdC9sbmcuXG4gICAgbGV0IGludmFsaWRPYnNlcnZhdGlvbnNNZXNzYWdlczogYW55ID0gW107XG4gICAgZXZlbnQub2JzZXJ2YXRpb25zLmZvckVhY2goKG9ic2VydmF0aW9uOiBhbnkpID0+IHtcbiAgICAgIC8vIGlmIG9ic2VydmF0aW9uIGlzIHJvb3QgKGV4LiBXV1RQKSB0aGVyZSBpcyBubyBlZGdlIHRoYXQgaXRzIGEgc291cmNlLiBzbyB3ZSBjYW4gc2tpcCB0aGlzIGNoZWNrXG4gICAgICBpZiAoIW9ic2VydmF0aW9uLnBvaW50X2lzX3Jvb3QpIHtcbiAgICAgICAgbGV0IGVkZ2UgPSBlZGdlc19kYXRhLml0ZW1zLmZpbmQoXG4gICAgICAgICAgKGVkZ2UpID0+IGVkZ2Uuc291cmNlX3BvaW50X2lkID09PSBvYnNlcnZhdGlvbi5wb2ludF9pZCxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVkZ2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGludmFsaWRPYnNlcnZhdGlvbnNNZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgYCR7b2JzZXJ2YXRpb24ucG9pbnRfbmFtZX0gKCR7b2JzZXJ2YXRpb24ucG9pbnRfaWR9KSBgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpbnZhbGlkT2JzZXJ2YXRpb25zTWVzc2FnZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICBsZXQgaW5kZXggPSBleGNlcHRpb25BbGVydC5tZXNzYWdlcy5maW5kSW5kZXgoXG4gICAgICAgIChtc2cpID0+IG1zZy5ldmVudF9pZCA9PT0gZXZlbnQuaWQsXG4gICAgICApO1xuXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgIHNldEV4Y2VwdGlvbkFsZXJ0KHtcbiAgICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgICAgLi4uZXhjZXB0aW9uQWxlcnQubWVzc2FnZXMsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmV2ZW50X2RhdGFfbWlzc2luZycpfTwvcD5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmlkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGV2ZW50X2lkczogWy4uLmV4Y2VwdGlvbkFsZXJ0LmV2ZW50X2lkcywgZXZlbnQuaWRdLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBzYW1lIGNoZWNrIGFzIGFib3ZlIGJ1dCB0aGlzIHRpbWUgZm9yIHRoZSBldmVudCBwYXRoLiBJZiBlZGdlIGRvZXNuJ3QgZXhpc3QsIGl0J3MgaW5kaWNhdGVzIHRoYXQgb25lIG9mIHRoZVxuICAgIC8vIHBvaW50cyBkb3duc3RyZWFtIGRvZXNuJ3QgaGF2ZSBsYXQvbG5nLlxuICAgIGxldCBpbnZhbGlkUGF0aE1lc3NhZ2VzOiBhbnkgPSBbXTtcbiAgICBldmVudC5wYXRoLmZvckVhY2goKHBhdGg6IGFueSkgPT4ge1xuICAgICAgbGV0IGVkZ2UgPSBlZGdlc19kYXRhLml0ZW1zLmZpbmQoKGVkZ2UpID0+IGVkZ2UuaWQgPT09IHBhdGguZWRnZV9pZCk7XG4gICAgICBpZiAoZWRnZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGVkZ2UgJHtwYXRoLmVkZ2VfaWR9IGNhbiBub3QgYmUgZm91bmRgKTtcbiAgICAgICAgbGV0IG9ic2VydmF0aW9uID0gZXZlbnQub2JzZXJ2YXRpb25zLmZpbmQoXG4gICAgICAgICAgKG9ic2VydmF0aW9uKSA9PiBvYnNlcnZhdGlvbi5pZCA9PT0gcGF0aC5sYXN0X29ic2VydmF0aW9uX2lkLFxuICAgICAgICApO1xuICAgICAgICBsZXQgbGFzdE9ic2VydmF0aW9uUG9pbnQgPSAnTm90IGZvdW5kJztcbiAgICAgICAgaWYgKG9ic2VydmF0aW9uKSB7XG4gICAgICAgICAgbGFzdE9ic2VydmF0aW9uUG9pbnQgPSBvYnNlcnZhdGlvbi5wb2ludF9uYW1lO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ2xhc3RPYnNlcnZhdGlvblBvaW50JywgbGFzdE9ic2VydmF0aW9uUG9pbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaW52YWxpZFBhdGhNZXNzYWdlcy5wdXNoKGAke2xhc3RPYnNlcnZhdGlvblBvaW50fSBgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChpbnZhbGlkUGF0aE1lc3NhZ2VzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgc2V0RXhjZXB0aW9uQWxlcnQoe1xuICAgICAgICBtZXNzYWdlczogW1xuICAgICAgICAgIC4uLmV4Y2VwdGlvbkFsZXJ0Lm1lc3NhZ2VzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8cD57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZXZlbnRfdmVyaWZ5X2Nvb3JkaW5hdGVzJyl9PC9wPlxuICAgICAgICAgICAgICAgIDxzcGFuPntpbnZhbGlkUGF0aE1lc3NhZ2VzfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgZXZlbnRfaWQ6IGV2ZW50LmlkLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGV2ZW50X2lkczogWy4uLmV4Y2VwdGlvbkFsZXJ0LmV2ZW50X2lkcywgZXZlbnQuaWRdLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRXZlbnRJdGVtQ2xpY2sgPSAoXG4gICAgZXZlbnQ6IElFdmVudCxcbiAgICByZWY6IFJlZk9iamVjdDxIVE1MRWxlbWVudD4gfCBudWxsLFxuICApID0+IHtcbiAgICBpZiAocmVmICE9PSBudWxsKSBvbk1vdXNlTGVhdmVFdmVudCgpO1xuICAgIC8vIGlmIChob3ZlcmVkRXZlbnRQYXRocyAmJiBtYXApIHtcbiAgICAvLyAgICAgaG92ZXJlZEV2ZW50UGF0aHMuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIC8vICAgICAgICAgbWFwLnJlbW92ZUxheWVyKHBhdGgpO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG4gICAgLy8gZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50UGF0aHMoW10pKTtcbiAgICAvLyBkaXNwYXRjaChzZXRIb3ZlckV2ZW50SW5kaWNhdG9yKG51bGwpKTtcbiAgICBkaXNwYXRjaChzZXRGb2N1c2VkRXZlbnQoZXZlbnQpKTtcbiAgICBzZXRGaWx0ZXJQb3B1cE9wZW4oZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaGlzdG9yeS5wdXNoKFxuICAgICAgICBgLyR7bmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWV9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgIGdsb2JhbF9kYXRhLndhdGVyQXV0aG9yaXR5SWRcbiAgICAgICAgfSZsb2NhbGU9JHtuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlfSZldmVudElkPSR7XG4gICAgICAgICAgZXZlbnQuaWRcbiAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7XG4gICAgICAgICAgZ2xvYmFsX2RhdGEuZXZlbnRGaWx0ZXJQYXJhbVxuICAgICAgICB9JnZhbGlkRXZlbnQ9JHt2YWxpZGF0ZUV2ZW50KGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICB9LCA1MDApO1xuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VFbnRlckV2ZW50ID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkRXZlbnQgJiYgIWhvdmVyZWRFdmVudCAmJiB2YWxpZGF0ZUV2ZW50KGV2ZW50KSkge1xuICAgICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50KGV2ZW50KSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZUV2ZW50ID0gKCkgPT4ge1xuICAgIGlmIChob3ZlcmVkRXZlbnQgJiYgaG92ZXJlZEV2ZW50UGF0aHMgJiYgbWFwKSB7XG4gICAgICBob3ZlcmVkRXZlbnRQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICAgIG1hcC5yZW1vdmVMYXllcihwYXRoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaG92ZXJlZEVkZ2VQYXRocykge1xuICAgICAgICBob3ZlcmVkRWRnZVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIocGF0aCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGF5ZXJzID0gbWFwLl9sYXllcnM7XG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVycykge1xuICAgICAgICBjb25zdCBrYW5kb19vYmplY3QgPSBsYXllcnNbcHJvcGVydHldLmthbmRvX29iamVjdDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGthbmRvX29iamVjdD8uaW5jbHVkZXMoJ0V2ZW50Qm9keScpIHx8XG4gICAgICAgICAgW1xuICAgICAgICAgICAgJ0V2ZW50VGFpbCcsXG4gICAgICAgICAgICAnU2FtcGxpbmdQb2ludCcsXG4gICAgICAgICAgICAnRGVjb3JhdG9yJyxcbiAgICAgICAgICAgICdIb3ZlcmVkRWRnZScsXG4gICAgICAgICAgICAnSG92ZXJlZEVkZ2VGcm9udCcsXG4gICAgICAgICAgICAnRm9jdXNlZEVkZ2UnLFxuICAgICAgICAgICAgJ0ZvY3VzZWRFZGdlRnJvbnQnLFxuICAgICAgICAgIF0uaW5jbHVkZXMoa2FuZG9fb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJzW3Byb3BlcnR5XSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZGlzcGF0Y2goc2V0SG92ZXJlZEV2ZW50KG51bGwpKTtcbiAgICBkaXNwYXRjaChzZXRIb3ZlcmVkRXZlbnRQYXRocyhbXSkpO1xuICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFZGdlUGF0aHMoW10pKTtcbiAgfTtcblxuICBjb25zdCBzZXRGb2N1c2VkRXZlbnRJZkZvdW5kSW5QYXJhbXMgPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSAhPT0gbnVsbCAmJlxuICAgICAgZ2V0RXZlbnRJZEZyb21VUkwoKSAhPT0gJ251bGwnICYmXG4gICAgICBmb2N1c2VkRXZlbnQgPT09IG51bGwgJiZcbiAgICAgIGl0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgIWlzRmV0Y2hpbmcgJiZcbiAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFwb2ludHNfZGF0YS5pc0ZldGNoaW5nICYmXG4gICAgICAhZWRnZXNfZGF0YS5pc0ZldGNoaW5nXG4gICAgKSB7XG4gICAgICBsZXQgZXZlbnQgPSBldmVudHNfZGF0YS5pdGVtcy5maW5kKFxuICAgICAgICAoZTogSUV2ZW50KSA9PiBlLmlkID09PSBwYXJzZUludChnZXRFdmVudElkRnJvbVVSTCgpISksXG4gICAgICApO1xuICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGFuZGxlRXZlbnRJdGVtQ2xpY2soZXZlbnQsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCB2YWxpZEV2ZW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgbGV0IGV2ZW50ID0gZXZlbnRzX2RhdGEuaXRlbXMuZmluZChcbiAgICAgIChlKSA9PiBlLmlkLnRvU3RyaW5nKCkgPT09IGdldEV2ZW50SWRGcm9tVVJMKCksXG4gICAgKTtcblxuICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFdmVudChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50c19kYXRhLmZvY3VzZWRFdmVudCxcbiAgICBhcmVhc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgcG9pbnRzX2RhdGEuaXNGZXRjaGluZyxcbiAgICBlZGdlc19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZXZlbnRzX2RhdGEuaXNGZXRjaGluZyxcbiAgXSk7XG5cbiAgY29uc3QgdHJpZ2dlclNvcnQgPSAoc29ydDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgbGV0IEtRTDtcbiAgICAgIGxldCBVUkw7XG4gICAgICBzd2l0Y2ggKHNvcnQpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIEtRTCA9IGAke2J1aWxkS1FMUXVlcnkoZ2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyLCAnbmV3ZXN0Jyl9YDtcbiAgICAgICAgICBVUkwgPSBgLyR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubmFtZVxuICAgICAgICAgIH0vaW5kZXg/d2F0ZXJfYXV0aG9yaXR5X2lkPSR7XG4gICAgICAgICAgICBnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkXG4gICAgICAgICAgfSZldmVudElkPSR7Z2V0RXZlbnRJZEZyb21VUkwoKX0mbG9jYWxlPSR7XG4gICAgICAgICAgICBuYXZfY29udGV4dF9kYXRhLm5hdkNvbnRleHQubG9jYWxlXG4gICAgICAgICAgfSZ2YWx1ZXNGcm9tS1FMPSR7S1FMfSZ2YWxpZEV2ZW50PSR7dmFsaWRFdmVudH1gO1xuICAgICAgICAgIGhpc3RvcnkucHVzaChVUkwpO1xuICAgICAgICAgIGRpc3BhdGNoKHNldEV2ZW50RmlsdGVyUGFyYW0oS1FMKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBLUUwgPSBgJHtidWlsZEtRTFF1ZXJ5KGdsb2JhbF9kYXRhLmFjdGl2ZUZpbHRlciwgJ29sZGVzdCcpfWA7XG4gICAgICAgICAgVVJMID0gYC8ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWVcbiAgICAgICAgICB9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JmxvY2FsZT0ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke0tRTH0mdmFsaWRFdmVudD0ke3ZhbGlkRXZlbnR9YDtcbiAgICAgICAgICBoaXN0b3J5LnB1c2goVVJMKTtcbiAgICAgICAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKEtRTCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgS1FMID0gYCR7YnVpbGRLUUxRdWVyeShnbG9iYWxfZGF0YS5hY3RpdmVGaWx0ZXIsICdzZXZlcml0eScpfWA7XG4gICAgICAgICAgVVJMID0gYC8ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0Lm5hbWVcbiAgICAgICAgICB9L2luZGV4P3dhdGVyX2F1dGhvcml0eV9pZD0ke1xuICAgICAgICAgICAgZ2xvYmFsX2RhdGEud2F0ZXJBdXRob3JpdHlJZFxuICAgICAgICAgIH0mZXZlbnRJZD0ke2dldEV2ZW50SWRGcm9tVVJMKCl9JmxvY2FsZT0ke1xuICAgICAgICAgICAgbmF2X2NvbnRleHRfZGF0YS5uYXZDb250ZXh0LmxvY2FsZVxuICAgICAgICAgIH0mdmFsdWVzRnJvbUtRTD0ke0tRTH0mdmFsaWRFdmVudD0ke3ZhbGlkRXZlbnR9YDtcbiAgICAgICAgICBoaXN0b3J5LnB1c2goVVJMKTtcbiAgICAgICAgICBkaXNwYXRjaChzZXRFdmVudEZpbHRlclBhcmFtKEtRTCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBjYWxjRXZlbnRzUmVhbEFtb3VudCA9ICgpID0+IHtcbiAgICBsZXQgZXZlbnRzQ291bnQ6IG51bWJlciB8IHN0cmluZyA9IDA7XG4gICAgZXZlbnRzQ291bnQgPSBldmVudHNfZGF0YS5ldmVudHNfY291bnQ7XG4gICAgaWYgKGV2ZW50c0NvdW50ID4gNTApXG4gICAgICBldmVudHNDb3VudCA9IGAke2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3Lm1vcmVfdGhhbicpfSA1MGA7XG5cbiAgICByZXR1cm4gZXZlbnRzQ291bnQ7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkaXNwYXRjaChmZXRjaEV2ZW50cyh3YXRlckF1dGhvcml0eUlkLCBnZXRLUUxWYWx1ZXNGcm9tVVJMKCkgfHwgJ0RFRkFVTFQnKSk7XG4gIH0sIFtnbG9iYWxfZGF0YS53YXRlckF1dGhvcml0eUlkLCBnbG9iYWxfZGF0YS5ldmVudEZpbHRlclBhcmFtXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICAhZXZlbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIWVkZ2VzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgIXBvaW50c19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmdcbiAgICApIHtcbiAgICAgIHNldEZvY3VzZWRFdmVudElmRm91bmRJblBhcmFtcygpO1xuICAgIH1cbiAgfSwgW1xuICAgIGV2ZW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgZWRnZXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIHBvaW50c19kYXRhLmlzRmV0Y2hpbmcsXG4gICAgYXJlYXNfZGF0YS5pc0ZldGNoaW5nLFxuICAgIGdsb2JhbF9kYXRhLmV2ZW50RmlsdGVyUGFyYW0sXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9eydzaWRlbmF2ICcgKyAoc2lkZW5hdkV4cGFuZGVkID8gJycgOiAnc2lkZW5hdi0tY29sbGFwc2VkJyl9PlxuICAgICAge2dsb2JhbF9kYXRhLm1vcmVJbmZvICE9PSB1bmRlZmluZWQgJiYgZ2xvYmFsX2RhdGEubW9yZUluZm8uYWN0aXZlICYmIChcbiAgICAgICAgPE1vcmVJbmZvIC8+XG4gICAgICApfVxuXG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17XG4gICAgICAgICAgJ2V2ZW50LWluZm8gJyArXG4gICAgICAgICAgKCFob3ZlcmVkRXZlbnQgJiYgZm9jdXNlZEV2ZW50ICE9PSBudWxsXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6ICdldmVudC1pbmZvLS1jb2xsYXBzZWQnKVxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIHshaG92ZXJlZEV2ZW50ICYmIGZvY3VzZWRFdmVudCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgPEV2ZW50SW5mb1xuICAgICAgICAgICAgZXZlbnQ9e2ZvY3VzZWRFdmVudH1cbiAgICAgICAgICAgIHJlT3BlbkZpbHRlcj17KCkgPT4gc2V0RmlsdGVyUG9wdXBPcGVuKHRydWUpfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPVwidG9nZ2xlLWV4cGFuc2lvbi1idXR0b25cIlxuICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgaGFuZGxlRXhwYW5zaW9uVG9nZ2xlKCk7XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibmF2LWV4cGFuc2lvbi1pY29uXCI+XG4gICAgICAgICAgPEZvbnRBd2Vzb21lSWNvblxuICAgICAgICAgICAgaWNvbj17c2lkZW5hdkV4cGFuZGVkID8gZmFDYXJldExlZnQgOiBmYUNhcmV0UmlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXsndG9nZ2xlLWV4cGFuc2lvbi1idXR0b24tbW9iaWxlJ31cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGhhbmRsZUV4cGFuc2lvblRvZ2dsZSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8YSBocmVmPVwiI1wiPlxuICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFBcnJvd0xlZnR9IC8+XG4gICAgICAgICAgPHNwYW4+IHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5iYWNrX3RvX2RldGFpbHMnKX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJldmVudHMtaGVhZGVyXCI+XG4gICAgICAgIHtsYXN0VmlzaXRlZCAmJiAhaXNGZXRjaGluZyAmJiAoXG4gICAgICAgICAgPExpbmsgY2xhc3NOYW1lPVwiYmFja1wiIHRvPXtsYXN0VmlzaXRlZH0+XG4gICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICBzcmM9e0xlZnRBcnJvd0ljb259XG4gICAgICAgICAgICAgIGhlaWdodD1cIjEwcHhcIlxuICAgICAgICAgICAgICB3aWR0aD1cIjEycHhcIlxuICAgICAgICAgICAgICBhbHQ9XCJiYWNrXCJcbiAgICAgICAgICAgIC8+eycgJ31cbiAgICAgICAgICAgIHtpMThuLnQoJ2FyZWFfc2NyZWVuLmJhY2snKX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgICl9XG4gICAgICAgIDxoND5cbiAgICAgICAgICB7aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZXZlbnRzX2xpc3QnKX1cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9eydldmVudHMtaGVhZGVyX19ldmVudHNfYW1vdW50J30+XG4gICAgICAgICAgICAoe2NhbGNFdmVudHNSZWFsQW1vdW50KCl9KVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9oND5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXJpbmdcIj5cbiAgICAgICAgICB7ZXZlbnRzX2RhdGEuaXRlbXMubGVuZ3RoICE9PSAwICYmIChcbiAgICAgICAgICAgIDxTb3J0XG4gICAgICAgICAgICAgIHRyaWdnZXJTb3J0PXt0cmlnZ2VyU29ydH1cbiAgICAgICAgICAgICAgZXZlbnRzPXtldmVudHNfZGF0YS5pdGVtc31cbiAgICAgICAgICAgICAgZXZlbnRzRmV0Y2hpbmc9e2V2ZW50c19kYXRhLmlzRmV0Y2hpbmd9XG4gICAgICAgICAgICAgIGFjdGl2ZUZpbHRlcj17Z2xvYmFsX2RhdGEuYWN0aXZlRmlsdGVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaWNvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RmlsdGVyUG9wdXBPcGVuKCFmaWx0ZXJQb3B1cE9wZW4pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8RmlsdGVySWNvbiB3aWR0aD1cIjE3cHhcIiBoZWlnaHQ9XCIxN3B4XCIgZmlsbD1cIiNmNjAwNGZcIiAvPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHtwb2ludHNfZGF0YS5pdGVtcy5sZW5ndGggIT09IDAgJiYgIWZvY3VzZWRFdmVudCAmJiAoXG4gICAgICAgICAgPEZpbHRlckNvbnRhaW5lclxuICAgICAgICAgICAgZmlsdGVyUG9wdXBPcGVuPXtmaWx0ZXJQb3B1cE9wZW59XG4gICAgICAgICAgICBmZXRjaFR5cGU9eydFdmVudEZpbHRlcid9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJldmVudHMtY29udGFpbmVyIHNjcm9sbGJhciBcIj5cbiAgICAgICAge2xvYWRlcigpfVxuICAgICAgICB7IWlzRmV0Y2hpbmcgJiZcbiAgICAgICAgICBpdGVtcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9eydldmVudHNfX2JsYW5rc2xhdGUnfT5cbiAgICAgICAgICAgICAgPGltZyBzcmM9e05vRXZlbnRzSW1hZ2V9IGFsdD1cIk5vRXZlbnRzSWNvblwiIC8+XG4gICAgICAgICAgICAgIDxoMj57aTE4bi50KCdldmVudHNfb3ZlcnZpZXcuZmlsdGVyLmJsYW5rc2xhdGUuaGVhZGVyJyl9PC9oMj5cbiAgICAgICAgICAgICAgPHA+e2kxOG4udCgnZXZlbnRzX292ZXJ2aWV3LmZpbHRlci5ibGFua3NsYXRlLmJvZHknKX08L3A+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYXBwbHlfZGVmYXVsdF9maWx0ZXJfYnV0dG9uJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBhcHBseURlZmF1bHRGaWx0ZXIoKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpMThuLnQoJ2V2ZW50c19vdmVydmlldy5maWx0ZXIuYmxhbmtzbGF0ZS5idXR0b24nKX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAge2l0ZW1zLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgICAgICFhcmVhc19kYXRhLmlzRmV0Y2hpbmcgJiZcbiAgICAgICAgICAhcG9pbnRzX2RhdGEuaXNGZXRjaGluZyAmJlxuICAgICAgICAgICFlZGdlc19kYXRhLmlzRmV0Y2hpbmcgJiYgKFxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImV2ZW50cyBcIj5cbiAgICAgICAgICAgICAge2l0ZW1zLm1hcCgoZXZlbnQ6IGFueSkgPT4gKFxuICAgICAgICAgICAgICAgIDxsaSBrZXk9e2V2ZW50LmlkfSBjbGFzc05hbWU9XCJldmVudFwiIGRhdGEtZXZlbnQtaWQ9e2V2ZW50LmlkfT5cbiAgICAgICAgICAgICAgICAgIDxTZXZlcmVFdmVudFxuICAgICAgICAgICAgICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNsaWNrPXtoYW5kbGVFdmVudEl0ZW1DbGlja31cbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyRXZlbnQ9e29uTW91c2VFbnRlckV2ZW50fVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmVFdmVudD17b25Nb3VzZUxlYXZlRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRXZlbnQ9e3ZhbGlkYXRlRXZlbnR9XG4gICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkFsZXJ0PXtleGNlcHRpb25BbGVydH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzKTtcbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3RvcihFdmVudHNMaXN0KTtcbiJdfQ==