@kando-env/kando-ui 1.2.466-alpha.7 → 1.2.466-alpha.9

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 (728) hide show
  1. package/lib/Router.js +81 -40
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +35 -24
  3. package/lib/Widgets/EventsRow/EventsRow.js +39 -26
  4. package/lib/Widgets/Map/GraphUtils.js +6 -4
  5. package/lib/Widgets/Map/Map.js +139 -100
  6. package/lib/Widgets/Map/MapUtils.js +102 -83
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +84 -57
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +25 -23
  9. package/lib/Widgets/Map/areas/AreaUtils.js +46 -46
  10. package/lib/Widgets/Map/areas/Patterns.js +5 -5
  11. package/lib/Widgets/Map/edges/Edge.js +41 -32
  12. package/lib/Widgets/Map/edges/Edges.js +24 -19
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +45 -24
  14. package/lib/Widgets/Map/events/Event.js +14 -15
  15. package/lib/Widgets/Map/events/EventIndicator.js +63 -66
  16. package/lib/Widgets/Map/events/EventPath.js +34 -33
  17. package/lib/Widgets/Map/events/EventUtils.js +78 -54
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +19 -17
  19. package/lib/Widgets/Map/events/PointOfEvent.js +36 -27
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +39 -29
  21. package/lib/Widgets/Map/events/Snail.js +11 -10
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +79 -77
  23. package/lib/Widgets/Map/map/FloatingGraph.js +21 -24
  24. package/lib/Widgets/Map/map/GraphDateButton.js +20 -27
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +14 -14
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +16 -17
  27. package/lib/Widgets/Map/points/PointIcon.js +22 -23
  28. package/lib/Widgets/Map/points/PointMarker.js +88 -68
  29. package/lib/Widgets/Map/points/PointMarkers.js +36 -30
  30. package/lib/Widgets/Map/points/PointUtils.js +90 -76
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +43 -25
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +11 -11
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +14 -11
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +6 -4
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +60 -28
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +4 -3
  37. package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
  38. package/lib/Widgets/MostPolluting/Areas/styles.js +6 -4
  39. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +9 -12
  40. package/lib/Widgets/MostPolluting/Factories/Factories.js +65 -33
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/CardLayout.js +20 -15
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +20 -15
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +10 -9
  44. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +11 -13
  45. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +6 -4
  46. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +3 -2
  47. package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
  48. package/lib/Widgets/MostPolluting/Factories/styles.js +6 -4
  49. package/lib/Widgets/MostPolluting/MostPolluting.js +34 -23
  50. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +32 -20
  51. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +5 -7
  52. package/lib/Widgets/MostPolluting/ShowMore/styles.js +6 -7
  53. package/lib/Widgets/MostPolluting/assets/index.js +12 -12
  54. package/lib/Widgets/MostPolluting/components/ChangePercent.js +14 -20
  55. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +31 -36
  56. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +54 -49
  57. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +40 -44
  58. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +27 -28
  59. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +49 -53
  60. package/lib/Widgets/MostPolluting/models.js +1 -1
  61. package/lib/Widgets/MostPolluting/styles.js +6 -4
  62. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +6 -8
  63. package/lib/Widgets/PotentialImpactSummary/Icon.js +39 -30
  64. package/lib/Widgets/PotentialImpactSummary/index.js +28 -20
  65. package/lib/Widgets/PotentialImpactSummary/index.test.js +54 -48
  66. package/lib/Widgets/PotentialImpactSummary/styles.js +13 -8
  67. package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
  68. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +8 -10
  69. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +18 -23
  70. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +31 -34
  71. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +26 -28
  72. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +38 -35
  73. package/lib/Widgets/QualitySummary/QualitySummary.js +14 -10
  74. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +7 -4
  75. package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
  76. package/lib/Widgets/QualitySummary/styles.js +21 -24
  77. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +14 -12
  78. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +25 -25
  79. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +21 -26
  80. package/lib/Widgets/UtilityInformation/UtilityInformation.js +36 -23
  81. package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
  82. package/lib/Widgets/UtilityInformation/styles.js +31 -30
  83. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +5 -3
  84. package/lib/assets/icons/TopNavbar/index.js +7 -7
  85. package/lib/assets/icons/TrendSvg.js +7 -7
  86. package/lib/assets/icons/index.js +16 -16
  87. package/lib/assets/icons/kandoStepper/index.js +7 -7
  88. package/lib/assets/icons/siteTypes/index.js +2 -2
  89. package/lib/components/ApplyButton/ApplyButton.js +11 -10
  90. package/lib/components/ApplyButton/index.js +4 -3
  91. package/lib/components/Backdrop/Backdrop.js +5 -7
  92. package/lib/components/ContentLoader/ContentLoader.js +10 -12
  93. package/lib/components/ContentLoader/index.js +2 -2
  94. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +12 -12
  95. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +9 -5
  96. package/lib/components/CustomInputs/DoubleTabs/styles.js +16 -21
  97. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +20 -12
  98. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +6 -7
  99. package/lib/components/CustomInputs/Search/Search.js +60 -37
  100. package/lib/components/CustomInputs/Search/index.js +4 -3
  101. package/lib/components/CustomInputs/Select/Select.js +55 -38
  102. package/lib/components/CustomInputs/Select/Select.stories.js +10 -6
  103. package/lib/components/DamageType/DamageType.js +60 -35
  104. package/lib/components/DamageType/index.js +4 -3
  105. package/lib/components/DataLoaderError/DataLoaderError.js +7 -9
  106. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +13 -11
  107. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +73 -72
  108. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -25
  109. package/lib/components/DischargeHeatmap/HighchartsOptions.js +16 -12
  110. package/lib/components/DischargeHeatmap/index.js +4 -3
  111. package/lib/components/DischargeHeatmap/mocks/handlers.js +6 -5
  112. package/lib/components/DischargeHeatmap/popupText.js +12 -11
  113. package/lib/components/DischargeHeatmap/titles.js +6 -4
  114. package/lib/components/DischargeHeatmap/types.js +1 -1
  115. package/lib/components/ErrorBoundary.js +42 -27
  116. package/lib/components/Events/Events.js +48 -29
  117. package/lib/components/Events/index.js +4 -3
  118. package/lib/components/Graph/Graph.js +95 -74
  119. package/lib/components/Graph/index.js +4 -3
  120. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +24 -19
  121. package/lib/components/Header/Breadcrumbs/index.js +4 -3
  122. package/lib/components/Header/DoubleTabs/DoubleTabs.js +28 -18
  123. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +9 -5
  124. package/lib/components/Header/DoubleTabs/styles.js +8 -5
  125. package/lib/components/Header/Header.js +3 -3
  126. package/lib/components/Header/Header.stories.js +9 -5
  127. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +36 -24
  128. package/lib/components/Header/InfoBar/InfoBar.js +102 -69
  129. package/lib/components/Header/InfoBar/Search/Control.js +10 -11
  130. package/lib/components/Header/InfoBar/Search/GroupLabel.js +7 -8
  131. package/lib/components/Header/InfoBar/Search/Search.js +24 -17
  132. package/lib/components/Header/InfoBar/Search/SearchContainer.js +35 -21
  133. package/lib/components/Header/InfoBar/Search/index.js +4 -3
  134. package/lib/components/Header/InfoBar/Search/searchStyle.js +49 -36
  135. package/lib/components/Header/InfoBar/TimeFilter.js +17 -13
  136. package/lib/components/Header/InfoBar/types.js +1 -1
  137. package/lib/components/Header/KandoNavbar/KandoNavbar.js +93 -66
  138. package/lib/components/Header/KandoNavbar/index.js +4 -3
  139. package/lib/components/Header/Slideshow/Slideshow.js +91 -67
  140. package/lib/components/Header/Slideshow/index.js +4 -3
  141. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +5 -7
  142. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +24 -22
  143. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +17 -17
  144. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +42 -36
  145. package/lib/components/Header/Toolbar/Toolbar.js +76 -58
  146. package/lib/components/InfoBar/InfoBar.js +24 -10
  147. package/lib/components/InfoBar/InfoBar.stories.js +9 -5
  148. package/lib/components/KandoModal/KandoModal.js +62 -26
  149. package/lib/components/KandoModal/index.js +4 -3
  150. package/lib/components/Link.js +8 -9
  151. package/lib/components/Links/CustomRedirect/CustomRedirect.js +7 -10
  152. package/lib/components/Links/StyledLink/StyledLink.js +20 -17
  153. package/lib/components/Links/StyledNavLink/StyledNavLink.js +10 -12
  154. package/lib/components/LiveEvents/CarouselSlide.js +10 -11
  155. package/lib/components/LiveEvents/LiveEvents.js +6 -7
  156. package/lib/components/LiveEvents/index.js +4 -3
  157. package/lib/components/LoaderByPercent/LoaderByPercent.js +30 -37
  158. package/lib/components/Map/Map.js +25 -20
  159. package/lib/components/Map/index.js +4 -3
  160. package/lib/components/Modal/Modal.js +10 -10
  161. package/lib/components/NarrowHeader.js +32 -18
  162. package/lib/components/PointInfo/PointInfo.js +19 -20
  163. package/lib/components/PointInfo/index.js +4 -3
  164. package/lib/components/PopupModal/PopupModal.js +17 -13
  165. package/lib/components/PopupModal/PopupModal.stories.js +24 -17
  166. package/lib/components/SeasonalInsights/SeasonalInsights.js +147 -0
  167. package/lib/components/Sector/Sector.js +40 -34
  168. package/lib/components/Sector/Sector.test.js +24 -24
  169. package/lib/components/Sector/SectorIconsNew.js +19 -26
  170. package/lib/components/Sector/index.js +4 -3
  171. package/lib/components/Sector/sectorIcons.js +5 -4
  172. package/lib/components/SevereEvent/Eta/Eta.js +54 -49
  173. package/lib/components/SevereEvent/Eta/styles.js +8 -11
  174. package/lib/components/SevereEvent/SevereEvent.js +52 -28
  175. package/lib/components/SevereEvent/SevereEvent.scss +24 -0
  176. package/lib/components/SevereEvent/UpstreamBadge.js +60 -0
  177. package/lib/components/Spinner/Spinner.js +8 -8
  178. package/lib/components/Spinner/Spinner.stories.js +11 -6
  179. package/lib/components/Spinner/index.js +4 -3
  180. package/lib/components/Spinner/styles.js +16 -21
  181. package/lib/components/Tabs/Tabs.js +31 -18
  182. package/lib/components/Tabs/Tabs.stories.js +10 -6
  183. package/lib/components/Tabs/assets/index.js +6 -6
  184. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +18 -13
  185. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +45 -32
  186. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +34 -20
  187. package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +4 -3
  188. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +22 -17
  189. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +14 -13
  190. package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +4 -3
  191. package/lib/components/TimeRangeSelector/TimeRangeList.js +27 -24
  192. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +27 -17
  193. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +31 -26
  194. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +10 -6
  195. package/lib/components/TimeRangeSelector/constants.js +5 -3
  196. package/lib/components/TimeRangeSelector/index.js +4 -3
  197. package/lib/components/Toggle/Toggle.js +18 -11
  198. package/lib/components/Toggle/index.js +4 -3
  199. package/lib/components/TopBanner/TopBanner.js +235 -0
  200. package/lib/components/TopBanner/insightsDismissalStorage.js +36 -0
  201. package/lib/components/TrendGraph/TrendGraph.js +42 -24
  202. package/lib/components/TrendGraph/index.js +4 -3
  203. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +33 -26
  204. package/lib/components/TrendGraphNVL/index.js +4 -3
  205. package/lib/development-environment/index.js +13 -9
  206. package/lib/development-environment/mock/browser.js +5 -2
  207. package/lib/development-environment/mock/get.js +10 -8
  208. package/lib/development-environment/mock/handlers.js +3 -2
  209. package/lib/development-environment/mock/mockBus.js +5 -4
  210. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +3 -2
  211. package/lib/development-environment/mock/mockObjects/areaInformation.js +3 -2
  212. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +3 -2
  213. package/lib/development-environment/mock/mockObjects/areaSitesData.js +3 -2
  214. package/lib/development-environment/mock/mockObjects/areasJson.js +3 -2
  215. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +3 -2
  216. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +3 -2
  217. package/lib/development-environment/mock/mockObjects/data-menuData.js +3 -2
  218. package/lib/development-environment/mock/mockObjects/data-search.js +3 -2
  219. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +3 -2
  220. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +3 -2
  221. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +3 -2
  222. package/lib/development-environment/mock/mockObjects/eventsJson.js +3 -2
  223. package/lib/development-environment/mock/mockObjects/metascore.js +3 -2
  224. package/lib/development-environment/mock/mockObjects/permissionsJson.js +3 -2
  225. package/lib/development-environment/mock/mockObjects/pointsJson.js +3 -2
  226. package/lib/development-environment/mock/mockObjects/site-info.js +3 -2
  227. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +3 -2
  228. package/lib/development-environment/togly/ToglyDashboard.js +23 -13
  229. package/lib/development-environment/togly/ToglyItem.js +31 -24
  230. package/lib/development-environment/togly/flags.js +1 -1
  231. package/lib/development-environment/togly/init.js +4 -4
  232. package/lib/development-environment/togly/macro.js +9 -13
  233. package/lib/development-environment/togly/useDoubleKeyDown.js +9 -7
  234. package/lib/development-environment/togly/useLocalStorage.js +18 -13
  235. package/lib/hooks/useApi.js +56 -20
  236. package/lib/hooks/useApiWithDashboardQuery.js +43 -23
  237. package/lib/hooks/useClickOutside.js +5 -4
  238. package/lib/hooks/useInitializeHeaders.js +6 -6
  239. package/lib/hooks/useKandoFetch.js +31 -17
  240. package/lib/hooks/useMap.js +37 -25
  241. package/lib/hooks/useNavContext.js +26 -22
  242. package/lib/hooks/useQueryURL.js +3 -2
  243. package/lib/hooks/useRemoveExistingLayers.js +8 -7
  244. package/lib/hooks/useUpdateEventBodyTail.js +19 -14
  245. package/lib/hooks/useUserTimeZone.js +31 -34
  246. package/lib/hooks/useUserTimeZone.test.js +23 -19
  247. package/lib/hooks/useWindowSize.js +14 -7
  248. package/lib/i18n/en.json +15 -3
  249. package/lib/i18n/fr.json +4 -0
  250. package/lib/i18n/he.json +12 -1
  251. package/lib/i18n/it.json +4 -0
  252. package/lib/index.js +13 -11
  253. package/lib/macros/getVersion.js +2 -2
  254. package/lib/models/IAction.js +1 -1
  255. package/lib/models/IAppState.js +1 -1
  256. package/lib/pages/AreaPage/AreaPage.js +68 -34
  257. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -15
  258. package/lib/pages/AreaPage/Dashboard/Dashboard.js +28 -26
  259. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +23 -14
  260. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +5 -5
  261. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
  262. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +10 -10
  263. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +6 -4
  264. package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
  265. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +3 -2
  266. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +8 -5
  267. package/lib/pages/AssessmentPage/AssessmentPage.js +46 -38
  268. package/lib/pages/CannyWidget/Feedback.js +16 -14
  269. package/lib/pages/CovidPage/CovidPage.js +16 -9
  270. package/lib/pages/CovidPage/components/Body.js +30 -26
  271. package/lib/pages/CovidPage/components/Map.js +40 -28
  272. package/lib/pages/CovidPage/components/Sidebar.js +16 -15
  273. package/lib/pages/CovidPage/components/Summary.js +29 -20
  274. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +33 -26
  275. package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +4 -3
  276. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +76 -52
  277. package/lib/pages/CovidPage/components/TrendPopupContent/index.js +4 -3
  278. package/lib/pages/CovidPage/components/areas/Area.js +36 -24
  279. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +46 -45
  280. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +36 -32
  281. package/lib/pages/CovidPage/components/areas/AreasList.js +42 -29
  282. package/lib/pages/CovidPage/components/areas/Sort.js +17 -12
  283. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
  284. package/lib/pages/DashboardMap/AreaCard.js +27 -27
  285. package/lib/pages/DashboardMap/AssessmentIcon.js +7 -8
  286. package/lib/pages/DashboardMap/Capacity.js +77 -28
  287. package/lib/pages/DashboardMap/FactoryCard.js +24 -28
  288. package/lib/pages/DashboardMap/HighchartsOptions.js +5 -6
  289. package/lib/pages/DashboardMap/List.js +65 -55
  290. package/lib/pages/DashboardMap/ListContext.js +19 -14
  291. package/lib/pages/DashboardMap/Loader.js +3 -3
  292. package/lib/pages/DashboardMap/SeverityBadge.js +24 -16
  293. package/lib/pages/DashboardMap/WWTPMap.js +71 -57
  294. package/lib/pages/DashboardMap/WaterDischarge.js +9 -9
  295. package/lib/pages/DashboardMap/Widget.js +67 -48
  296. package/lib/pages/DashboardMap/index.js +4 -3
  297. package/lib/pages/DashboardMap/utils.js +60 -41
  298. package/lib/pages/EventsPage/Body/Body.js +12 -15
  299. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +20 -17
  300. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +27 -16
  301. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +9 -10
  302. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +10 -13
  303. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +31 -22
  304. package/lib/pages/EventsPage/DragAndDropArea/index.js +4 -3
  305. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +38 -30
  306. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +23 -14
  307. package/lib/pages/EventsPage/EventsPage.js +17 -10
  308. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +40 -26
  309. package/lib/pages/EventsPage/events/MoreInfo.js +19 -18
  310. package/lib/pages/EventsPage/events/Sidebar.js +11 -14
  311. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +10 -9
  312. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +24 -19
  313. package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +4 -3
  314. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +38 -31
  315. package/lib/pages/EventsPage/events/event_info/EventDetails.js +33 -35
  316. package/lib/pages/EventsPage/events/event_info/EventInfo.js +60 -50
  317. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +5 -5
  318. package/lib/pages/EventsPage/events/event_info/EventSection.js +21 -18
  319. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +23 -29
  320. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +50 -39
  321. package/lib/pages/EventsPage/events/event_info/Header/Header.js +7 -8
  322. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +35 -30
  323. package/lib/pages/EventsPage/events/event_info/Header/index.js +4 -3
  324. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +7 -6
  325. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +39 -30
  326. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +9 -6
  327. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +15 -14
  328. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +12 -9
  329. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /index.js +4 -3
  330. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +24 -23
  331. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +22 -13
  332. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +6 -7
  333. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +4 -3
  334. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +12 -13
  335. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +28 -22
  336. package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +4 -3
  337. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +10 -13
  338. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +9 -8
  339. package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +4 -3
  340. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +9 -9
  341. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +5 -4
  342. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +11 -13
  343. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +5 -7
  344. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +14 -11
  345. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +6 -7
  346. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +8 -9
  347. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +8 -9
  348. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +7 -8
  349. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +12 -13
  350. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +19 -18
  351. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +7 -7
  352. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +8 -9
  353. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +18 -19
  354. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +7 -6
  355. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +12 -13
  356. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +19 -23
  357. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +11 -12
  358. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +7 -8
  359. package/lib/pages/EventsPage/events/event_info/Timelines/index.js +4 -3
  360. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +6 -4
  361. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +40 -25
  362. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +39 -30
  363. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +12 -13
  364. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +20 -17
  365. package/lib/pages/EventsPage/events/event_info/sources/Source.js +31 -27
  366. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +27 -22
  367. package/lib/pages/EventsPage/events/event_info/styles.js +15 -21
  368. package/lib/pages/EventsPage/events/events_list/EventItem.js +21 -18
  369. package/lib/pages/EventsPage/events/events_list/EventUtils.js +11 -11
  370. package/lib/pages/EventsPage/events/events_list/EventsList.js +142 -111
  371. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +58 -41
  372. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +135 -90
  373. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +76 -54
  374. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +44 -39
  375. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +41 -32
  376. package/lib/pages/EventsPage/events/events_list/Filter/SingleSelect.js +21 -19
  377. package/lib/pages/EventsPage/events/events_list/Sort.js +39 -28
  378. package/lib/pages/ImportFileWizard/FileUploadRespones.js +22 -14
  379. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +8 -9
  380. package/lib/pages/ImportFileWizard/ImportFile.js +25 -21
  381. package/lib/pages/ImportFileWizard/ResponseBody.js +36 -26
  382. package/lib/pages/ImportFileWizard/ValidationForm.js +23 -23
  383. package/lib/pages/ImportFileWizard/ValidationResponse.js +25 -23
  384. package/lib/pages/ImportFileWizard/importFileUtils.js +5 -4
  385. package/lib/pages/ImportFileWizard/index.js +4 -3
  386. package/lib/pages/ImportGisPage/ImportGisContainer.js +27 -22
  387. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +44 -38
  388. package/lib/pages/ImportGisPage/importGisUtils.js +52 -43
  389. package/lib/pages/ImportGisProcess/index.js +18 -14
  390. package/lib/pages/ImportSiteProcess/index.js +18 -14
  391. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +13 -7
  392. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +20 -18
  393. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +4 -4
  394. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +60 -28
  395. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +12 -8
  396. package/lib/pages/NotificationsPage/Notification/Notification.js +13 -17
  397. package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
  398. package/lib/pages/NotificationsPage/Notifications.mock.js +3 -2
  399. package/lib/pages/NotificationsPage/Notifications.stories.js +10 -6
  400. package/lib/pages/NotificationsPage/NotificationsPage.js +38 -19
  401. package/lib/pages/NotificationsPage/assets/index.js +10 -10
  402. package/lib/pages/NotificationsPageV2/NotificationsPage.js +101 -72
  403. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +65 -95
  404. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +15 -13
  405. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +17 -19
  406. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +22 -18
  407. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +22 -18
  408. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +23 -19
  409. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +71 -82
  410. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +23 -19
  411. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +74 -71
  412. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +94 -80
  413. package/lib/pages/NotificationsPageV2/notificationUtils.js +39 -40
  414. package/lib/pages/OldSitePage/IDashboardData.js +1 -1
  415. package/lib/pages/OldSitePage/OldSitePage.js +132 -56
  416. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +10 -6
  417. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +9 -5
  418. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +7 -9
  419. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +19 -16
  420. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -10
  421. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +19 -12
  422. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +11 -14
  423. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +9 -5
  424. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +16 -18
  425. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +64 -51
  426. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +8 -10
  427. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +54 -29
  428. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +7 -4
  429. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +19 -12
  430. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +11 -11
  431. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +12 -10
  432. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +23 -27
  433. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +30 -28
  434. package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
  435. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +8 -5
  436. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +12 -16
  437. package/lib/pages/OperationsPage/LeftPanel.js +55 -35
  438. package/lib/pages/OperationsPage/Map/Map.js +12 -12
  439. package/lib/pages/OperationsPage/Map/useMap.js +64 -52
  440. package/lib/pages/OperationsPage/OperationsContainerPage.js +59 -32
  441. package/lib/pages/OperationsPage/OperationsFilePage.js +12 -10
  442. package/lib/pages/OperationsPage/OperationsUtilityPage.js +6 -5
  443. package/lib/pages/OperationsPage/RightPanel.js +25 -22
  444. package/lib/pages/OperationsPage/index.js +4 -4
  445. package/lib/pages/PollutionRiskAssessment/FactoryDetails.js +60 -27
  446. package/lib/pages/PollutionRiskAssessment/FilterBehaviors.js +25 -19
  447. package/lib/pages/PollutionRiskAssessment/FilterButton.js +10 -11
  448. package/lib/pages/PollutionRiskAssessment/Map.js +42 -38
  449. package/lib/pages/PollutionRiskAssessment/SearchButton.js +10 -11
  450. package/lib/pages/PollutionRiskAssessment/SearchField.js +40 -26
  451. package/lib/pages/PollutionRiskAssessment/TotalSavings.js +16 -16
  452. package/lib/pages/PollutionRiskAssessment/UseCases.js +34 -32
  453. package/lib/pages/PollutionRiskAssessment/index.js +136 -76
  454. package/lib/pages/PollutionRiskAssessment/useMap.js +50 -34
  455. package/lib/pages/PollutionRiskAssessment/utils.js +7 -7
  456. package/lib/pages/ProfilePage/Container.js +4 -3
  457. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +40 -23
  458. package/lib/pages/ProfilePage/ProfilePage.js +205 -106
  459. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +34 -25
  460. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +20 -20
  461. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +30 -27
  462. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +119 -57
  463. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +23 -18
  464. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +13 -14
  465. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +45 -40
  466. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +24 -25
  467. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +19 -18
  468. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +18 -15
  469. package/lib/pages/SamplingsPage/DesktopActions/index.js +4 -3
  470. package/lib/pages/SamplingsPage/NavigationDropdown.js +31 -43
  471. package/lib/pages/SamplingsPage/NewSamplingAction.js +102 -75
  472. package/lib/pages/SamplingsPage/SamplingMobileModal.js +98 -124
  473. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +25 -23
  474. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +25 -36
  475. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +61 -36
  476. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +21 -16
  477. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +9 -10
  478. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +193 -108
  479. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +54 -47
  480. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +39 -42
  481. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +39 -42
  482. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +28 -21
  483. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +6 -4
  484. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +7 -11
  485. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +53 -51
  486. package/lib/pages/SamplingsPage/SamplingsMobileList.js +31 -22
  487. package/lib/pages/SamplingsPage/SamplingsPage.js +33 -25
  488. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +58 -49
  489. package/lib/pages/SamplingsPage/index.js +3 -2
  490. package/lib/pages/SamplingsPage/samplingsPageUtils.js +83 -52
  491. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +6 -7
  492. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +16 -16
  493. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +16 -12
  494. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
  495. package/lib/pages/SitePage/PollutionContributor/index.js +4 -3
  496. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +9 -5
  497. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +15 -15
  498. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -10
  499. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +24 -27
  500. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -12
  501. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +33 -37
  502. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -10
  503. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +25 -15
  504. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +11 -14
  505. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +9 -5
  506. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +16 -18
  507. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +71 -58
  508. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +8 -10
  509. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +27 -15
  510. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +9 -5
  511. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +19 -12
  512. package/lib/pages/SitePage/SamplingParameters/body/Body.js +9 -10
  513. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +40 -30
  514. package/lib/pages/SitePage/SamplingParameters/body/index.js +4 -3
  515. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +12 -11
  516. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +12 -10
  517. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +54 -54
  518. package/lib/pages/SitePage/SamplingParameters/dataParser.js +41 -32
  519. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +9 -11
  520. package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
  521. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +8 -5
  522. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +12 -16
  523. package/lib/pages/SitePage/SiteInformation/EmptyState.js +10 -13
  524. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +31 -31
  525. package/lib/pages/SitePage/SitePage.js +77 -37
  526. package/lib/pages/UploadLabResult/index.js +16 -15
  527. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +37 -27
  528. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +13 -8
  529. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +15 -11
  530. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +9 -5
  531. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +50 -47
  532. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +8 -11
  533. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +5 -4
  534. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +9 -6
  535. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +10 -11
  536. package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
  537. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +13 -16
  538. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +8 -8
  539. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +4 -3
  540. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +30 -20
  541. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +40 -28
  542. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +17 -15
  543. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +14 -7
  544. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +31 -26
  545. package/lib/pages/WbeDashboard/ExpandableComponent.js +9 -9
  546. package/lib/pages/WbeDashboard/GraphWrapper.js +35 -28
  547. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -16
  548. package/lib/pages/WbeDashboard/SearchInput.js +21 -15
  549. package/lib/pages/WbeDashboard/SummaryGraph.js +77 -50
  550. package/lib/pages/WbeDashboard/SummaryGraphModal.js +18 -20
  551. package/lib/pages/WbeDashboard/Tabs.js +11 -11
  552. package/lib/pages/WbeDashboard/WbeDashboardPage.js +210 -147
  553. package/lib/pages/WbeDashboard/WbeSummaryBar.js +48 -39
  554. package/lib/pages/WwtpPage/DashboardCard.js +21 -25
  555. package/lib/pages/WwtpPage/DischargePatternCard.js +25 -14
  556. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +11 -11
  557. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +22 -22
  558. package/lib/pages/WwtpPage/InletsCard/index.js +4 -3
  559. package/lib/pages/WwtpPage/Map.js +6 -6
  560. package/lib/pages/WwtpPage/OrganicCard.js +5 -4
  561. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +5 -4
  562. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +7 -8
  563. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +11 -11
  564. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +17 -20
  565. package/lib/pages/WwtpPage/PotentialSaving/index.js +4 -3
  566. package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
  567. package/lib/pages/WwtpPage/PredictionCard.js +5 -4
  568. package/lib/pages/WwtpPage/TrendCard.js +22 -20
  569. package/lib/pages/WwtpPage/UpgradeBox.js +5 -4
  570. package/lib/pages/WwtpPage/WwtpPage.js +8 -9
  571. package/lib/pages/WwtpPage/WwtpPageContainer.js +19 -23
  572. package/lib/pages/WwtpPage/index.js +4 -3
  573. package/lib/providers/Slideshow/SlideshowContext.js +10 -11
  574. package/lib/providers/Slideshow/SlideshowProvider.js +40 -22
  575. package/lib/providers/Slideshow/SlideshowRunner.js +21 -18
  576. package/lib/providers/UrlHistory/UrlHistoryContext.js +6 -7
  577. package/lib/providers/UrlHistory/UrlHistoryProvider.js +13 -12
  578. package/lib/providers/UrlHistory/index.js +4 -4
  579. package/lib/providers/UrlHistory/useLastVisited.js +6 -5
  580. package/lib/react-app-env.d.js +1 -1
  581. package/lib/store/ImportGis/action.js +1 -1
  582. package/lib/store/ImportGis/actionTypes.js +5 -4
  583. package/lib/store/ImportGis/actionsCreator.js +5 -7
  584. package/lib/store/ImportGis/models/gisImports.js +1 -1
  585. package/lib/store/ImportGis/reducer.js +7 -9
  586. package/lib/store/WBE/actionTypes.js +3 -2
  587. package/lib/store/WBE/actions.js +1 -1
  588. package/lib/store/WBE/models/IAreaWBE.js +1 -1
  589. package/lib/store/WBE/models/IWBE.js +1 -1
  590. package/lib/store/WBE/models/IWBEState.js +1 -1
  591. package/lib/store/WBE/reducer.js +8 -10
  592. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +15 -24
  593. package/lib/store/WWTPDashboard/types.js +1 -1
  594. package/lib/store/areas/actionTypes.js +7 -4
  595. package/lib/store/areas/actions.js +13 -7
  596. package/lib/store/areas/models/IArea.js +1 -1
  597. package/lib/store/areas/models/IAreasState.js +1 -1
  598. package/lib/store/areas/reducer.js +6 -8
  599. package/lib/store/context/actionTypes.js +5 -3
  600. package/lib/store/context/actions.js +3 -3
  601. package/lib/store/context/contextMiddlewares.js +18 -15
  602. package/lib/store/context/models/INavContext.js +1 -1
  603. package/lib/store/context/models/INavContextState.js +1 -1
  604. package/lib/store/context/reducer.js +8 -10
  605. package/lib/store/dashboard/dashboardSlice.js +11 -18
  606. package/lib/store/dashboard/periodType.js +1 -1
  607. package/lib/store/edges/actionTypes.js +9 -5
  608. package/lib/store/edges/actions.js +8 -4
  609. package/lib/store/edges/models/IEdge.js +1 -1
  610. package/lib/store/edges/models/IEdgesState.js +1 -1
  611. package/lib/store/edges/reducer.js +17 -13
  612. package/lib/store/events/actionTypes.js +33 -17
  613. package/lib/store/events/actions.js +7 -3
  614. package/lib/store/events/models/IEvent.js +1 -1
  615. package/lib/store/events/models/IEventsState.js +1 -1
  616. package/lib/store/events/models/ISource.js +1 -1
  617. package/lib/store/events/reducer.js +39 -28
  618. package/lib/store/filters/IFilter.js +1 -1
  619. package/lib/store/filters/IFilterItem.js +1 -1
  620. package/lib/store/global/actionTypes.js +21 -11
  621. package/lib/store/global/actions.js +6 -8
  622. package/lib/store/global/models/IGlobalState.js +1 -1
  623. package/lib/store/global/reducer.js +7 -9
  624. package/lib/store/permissions/permissionsSlice.js +9 -12
  625. package/lib/store/points/actionTypes.js +5 -3
  626. package/lib/store/points/actions.js +10 -6
  627. package/lib/store/points/models/IGeoPoint.js +1 -1
  628. package/lib/store/points/models/IGroup.js +1 -1
  629. package/lib/store/points/models/IIssue.js +1 -1
  630. package/lib/store/points/models/IPoint.js +1 -1
  631. package/lib/store/points/models/IPointsState.js +1 -1
  632. package/lib/store/points/reducer.js +5 -7
  633. package/lib/store/rootActionTypes.js +3 -2
  634. package/lib/store/rootActions.js +1 -1
  635. package/lib/store/rootReducer.js +10 -12
  636. package/lib/store/rootStore.js +6 -6
  637. package/lib/store/samplings/action.js +1 -1
  638. package/lib/store/samplings/actionTypes.js +5 -4
  639. package/lib/store/samplings/actionsCreator.js +1 -1
  640. package/lib/store/samplings/models/Samplings.js +1 -1
  641. package/lib/store/samplings/reducer.js +10 -10
  642. package/lib/styles/StylesLayout.js +6 -7
  643. package/lib/styles/theme/theme.js +26 -23
  644. package/lib/test/mocks/browser.js +5 -2
  645. package/lib/test/test-utils.js +9 -12
  646. package/lib/ui-kit/Alert/KandoAlert.js +6 -8
  647. package/lib/ui-kit/Button/Button.js +83 -129
  648. package/lib/ui-kit/Button/Button.test.js +33 -27
  649. package/lib/ui-kit/Button/ButtonUtils.js +1 -1
  650. package/lib/ui-kit/Checkbox/Checkbox.js +27 -34
  651. package/lib/ui-kit/ContentCard/ContentCard.js +20 -16
  652. package/lib/ui-kit/Dashboard/Dashboard.js +28 -29
  653. package/lib/ui-kit/Dashboard/index.js +4 -3
  654. package/lib/ui-kit/DropDown/DropDown.js +22 -23
  655. package/lib/ui-kit/DropDown/DropDown.test.js +13 -13
  656. package/lib/ui-kit/DropDown/DropDownItem.js +25 -26
  657. package/lib/ui-kit/DropDown/DropdownToggle.js +10 -13
  658. package/lib/ui-kit/EmptyState/EmptyState.js +6 -7
  659. package/lib/ui-kit/HierarchyGraph/AutoFitTree.js +81 -69
  660. package/lib/ui-kit/HierarchyGraph/HierarchyGraph.js +167 -89
  661. package/lib/ui-kit/HierarchyGraph/LeafSign.js +7 -7
  662. package/lib/ui-kit/HierarchyGraph/MicroStackedBar.js +19 -17
  663. package/lib/ui-kit/HierarchyGraph/NodeIcon.js +8 -9
  664. package/lib/ui-kit/HierarchyGraph/NodeLayout.js +25 -22
  665. package/lib/ui-kit/HierarchyGraph/PollutionContributorNode.js +10 -11
  666. package/lib/ui-kit/HierarchyGraph/ScoreNode.js +9 -10
  667. package/lib/ui-kit/HierarchyGraph/index.js +4 -3
  668. package/lib/ui-kit/HierarchyGraph/utils.js +67 -57
  669. package/lib/ui-kit/IconAction/IconAction.js +8 -9
  670. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +64 -47
  671. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +49 -58
  672. package/lib/ui-kit/InletsPie/InletsPie.js +16 -17
  673. package/lib/ui-kit/InletsPie/index.js +4 -3
  674. package/lib/ui-kit/InletsPie/options.js +9 -7
  675. package/lib/ui-kit/KandoBottomSheet/KandoBottomSheet.js +38 -29
  676. package/lib/ui-kit/KandoFilter/KandoFilter.js +11 -10
  677. package/lib/ui-kit/KandoList/KandoList.js +12 -13
  678. package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
  679. package/lib/ui-kit/KandoTable/KandoTable.js +41 -48
  680. package/lib/ui-kit/KandoTable/KandoTable.test.js +27 -21
  681. package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
  682. package/lib/ui-kit/Layout/Layout.js +7 -8
  683. package/lib/ui-kit/MobileInput/MobileInput.js +50 -56
  684. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +17 -14
  685. package/lib/ui-kit/ModalConfirmation/index.js +3 -2
  686. package/lib/ui-kit/OrganicEvents/GaugeChart.js +8 -9
  687. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +9 -8
  688. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +22 -26
  689. package/lib/ui-kit/OrganicEvents/TextInfo.js +13 -17
  690. package/lib/ui-kit/OrganicEvents/index.js +4 -3
  691. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +11 -12
  692. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +21 -17
  693. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +4 -3
  694. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +24 -21
  695. package/lib/ui-kit/ScoreGauge/constant.js +4 -3
  696. package/lib/ui-kit/ScoreGauge/index.js +4 -3
  697. package/lib/ui-kit/TimeLineChart/TrendChart.js +28 -25
  698. package/lib/ui-kit/TimeLineChart/index.js +4 -3
  699. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +11 -10
  700. package/lib/ui-kit/Tooltip/Tooltip.js +9 -15
  701. package/lib/ui-kit/index.js +8 -8
  702. package/lib/ui-kit/kandoStepper/KandoStepper.js +14 -13
  703. package/lib/ui-kit/siteName/SiteName.js +11 -13
  704. package/lib/utilities/ActionUtility.js +7 -7
  705. package/lib/utilities/Alert.js +20 -23
  706. package/lib/utilities/Analytics.js +19 -19
  707. package/lib/utilities/Array.js +5 -4
  708. package/lib/utilities/Enum.js +51 -15
  709. package/lib/utilities/ErrorBoundary.js +42 -27
  710. package/lib/utilities/File.js +73 -45
  711. package/lib/utilities/GetDir.js +10 -10
  712. package/lib/utilities/KandoDate.js +15 -7
  713. package/lib/utilities/KandoModal.js +28 -16
  714. package/lib/utilities/LocalStorage.js +7 -5
  715. package/lib/utilities/ThousandsToK.js +2 -2
  716. package/lib/utilities/TimeFormat.js +23 -22
  717. package/lib/utilities/Truncate.js +27 -17
  718. package/lib/utilities/edgesMath.js +16 -15
  719. package/lib/utilities/i18n.js +6 -5
  720. package/lib/utilities/kql.js +12 -10
  721. package/lib/utilities/map/icons.js +18 -18
  722. package/lib/utilities/polylinedecorator.js +113 -88
  723. package/lib/utilities/scoreToData.js +26 -20
  724. package/lib/utilities/scoreToData.test.js +5 -5
  725. package/lib/utilities/time.js +10 -9
  726. package/lib/utilities/uploadToS3.js +12 -12
  727. package/lib/utilities/urls.js +16 -19
  728. package/package.json +9 -12
@@ -1,23 +1,24 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.zoomLevels = exports.topIconOptions = exports.toggleEdgesVisibility = exports.shouldLoadMapObjects = exports.shoudLoadDependentMapObjects = exports.setupCheckboxListener = exports.multipleLayeredIcons = exports.middleIconOptions = exports.mapZoomLayer = exports.mapStyle = exports.mapGetLayerById = exports.mapClickLayer = exports.isValidArea = exports.initializeMap = exports.iconZoomControl = exports.findSpecificLayersFromMap = exports.findPoint = exports.filterPoints = exports.filterEdges = exports.eventsCounterIcons = exports.eventsCountIcon = exports.edgesSpecificLogic = exports.customFunctionalityForMapLayers = exports.bubbleIconOptions = exports.baseMaps = exports.areaFocusLogic = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
8
9
  var _leaflet = _interopRequireDefault(require("leaflet"));
9
10
  var _actions = require("../../store/global/actions");
10
11
  var _i18n = _interopRequireDefault(require("utilities/i18n"));
11
12
  var _WWTPDashboardSlice = require("../../store/WWTPDashboard/WWTPDashboardSlice");
12
- const areaFocusLogic = (mapRef, isValidArea, areaToCenterBy) => {
13
- let mapInstance = mapRef.current;
13
+ var areaFocusLogic = function areaFocusLogic(mapRef, isValidArea, areaToCenterBy) {
14
+ var mapInstance = mapRef.current;
14
15
  if (isValidArea(areaToCenterBy)) {
15
16
  mapInstance.fitBounds(areaToCenterBy, {
16
17
  padding: [0, 0]
17
18
  });
18
19
  } else {
19
- const group = [];
20
- for (const property in mapInstance._layers) {
20
+ var group = [];
21
+ for (var property in mapInstance._layers) {
21
22
  if (mapInstance._layers[property].kando_object === 'Area' || mapInstance._layers[property].kando_object === 'Point') {
22
23
  group.push(mapInstance._layers[property]);
23
24
  }
@@ -31,34 +32,34 @@ const areaFocusLogic = (mapRef, isValidArea, areaToCenterBy) => {
31
32
  // mapInstance.invalidateSize(true);
32
33
  };
33
34
  exports.areaFocusLogic = areaFocusLogic;
34
- const isValidArea = area => {
35
+ var isValidArea = function isValidArea(area) {
35
36
  return area && area.length > 0 && Object.keys(area[0]).length > 0;
36
37
  };
37
38
  exports.isValidArea = isValidArea;
38
- const shouldLoadMapObjects = (global_data, mapRef, points, edges) => {
39
+ var shouldLoadMapObjects = function shouldLoadMapObjects(global_data, mapRef, points, edges) {
39
40
  return global_data.map !== undefined && mapRef.current !== null && edges !== undefined && points !== undefined;
40
41
  };
41
42
  exports.shouldLoadMapObjects = shouldLoadMapObjects;
42
- const shoudLoadDependentMapObjects = (edges, areas, global, mapRef, points) => {
43
+ var shoudLoadDependentMapObjects = function shoudLoadDependentMapObjects(edges, areas, global, mapRef, points) {
43
44
  return global.map !== undefined && mapRef.current !== null && edges.length >= 0 && areas.length >= 0 && points.length >= 0;
44
45
  };
45
46
  exports.shoudLoadDependentMapObjects = shoudLoadDependentMapObjects;
46
- const findSpecificLayersFromMap = (layersToFind, currentLayer) => {
47
+ var findSpecificLayersFromMap = function findSpecificLayersFromMap(layersToFind, currentLayer) {
47
48
  return layersToFind.includes(currentLayer.kando_object) && currentLayer.kando_point_type !== 'Manhole';
48
49
  };
49
50
  exports.findSpecificLayersFromMap = findSpecificLayersFromMap;
50
- const eventsCounterIcons = (layer, zoomLevel) => {
51
- let icon = layer.options.icon;
51
+ var eventsCounterIcons = function eventsCounterIcons(layer, zoomLevel) {
52
+ var icon = layer.options.icon;
52
53
  icon.options.iconSize = eventsCountIcon(zoomLevel).iconSize;
53
54
  icon.options.iconAnchor = eventsCountIcon(zoomLevel).iconAnchor;
54
55
  layer.setIcon(icon);
55
56
  layer.setOpacity(1);
56
57
  };
57
58
  exports.eventsCounterIcons = eventsCounterIcons;
58
- const multipleLayeredIcons = (layer, zoomLevel) => {
59
- let icon = layer.options.icon;
60
- let isAFewLayerIcon = layer.kando_few_layer_icon;
61
- let miniIcon = {
59
+ var multipleLayeredIcons = function multipleLayeredIcons(layer, zoomLevel) {
60
+ var icon = layer.options.icon;
61
+ var isAFewLayerIcon = layer.kando_few_layer_icon;
62
+ var miniIcon = {
62
63
  present: layer.kando_secondary || layer.kando_third,
63
64
  secondary: layer.kando_secondary,
64
65
  third: layer.kando_third
@@ -83,20 +84,20 @@ const multipleLayeredIcons = (layer, zoomLevel) => {
83
84
  layer.setIcon(icon);
84
85
  };
85
86
  exports.multipleLayeredIcons = multipleLayeredIcons;
86
- const oneLayerIconOptions = zoomLevel => {
87
+ var oneLayerIconOptions = function oneLayerIconOptions(zoomLevel) {
87
88
  return {
88
89
  iconSize: [zoomLevel * 3.3, zoomLevel * 3.3],
89
90
  iconAnchor: [zoomLevel * 1.7, zoomLevel * 3.7]
90
91
  };
91
92
  };
92
- const eventsCountIcon = zoomLevel => {
93
+ var eventsCountIcon = function eventsCountIcon(zoomLevel) {
93
94
  return {
94
95
  iconSize: [zoomLevel * 2.5, zoomLevel * 2.5],
95
96
  iconAnchor: [zoomLevel * 0, zoomLevel * 4]
96
97
  };
97
98
  };
98
99
  exports.eventsCountIcon = eventsCountIcon;
99
- const bubbleIconOptions = (zoomLevel, miniIcon) => {
100
+ var bubbleIconOptions = function bubbleIconOptions(zoomLevel, miniIcon) {
100
101
  if (miniIcon.present) {
101
102
  if (miniIcon.secondary) {
102
103
  return {
@@ -117,7 +118,7 @@ const bubbleIconOptions = (zoomLevel, miniIcon) => {
117
118
  }
118
119
  };
119
120
  exports.bubbleIconOptions = bubbleIconOptions;
120
- const middleIconOptions = (zoomLevel, miniIcon) => {
121
+ var middleIconOptions = function middleIconOptions(zoomLevel, miniIcon) {
121
122
  if (miniIcon.present) {
122
123
  if (miniIcon.secondary) {
123
124
  return {
@@ -138,7 +139,7 @@ const middleIconOptions = (zoomLevel, miniIcon) => {
138
139
  }
139
140
  };
140
141
  exports.middleIconOptions = middleIconOptions;
141
- const topIconOptions = (zoomLevel, miniIcon) => {
142
+ var topIconOptions = function topIconOptions(zoomLevel, miniIcon) {
142
143
  if (miniIcon.present) {
143
144
  if (miniIcon.secondary) {
144
145
  return {
@@ -159,10 +160,10 @@ const topIconOptions = (zoomLevel, miniIcon) => {
159
160
  }
160
161
  };
161
162
  exports.topIconOptions = topIconOptions;
162
- const iconZoomControl = map => {
163
- let layers = map._layers;
164
- let zoomLevel = map._zoom;
165
- for (const property in layers) {
163
+ var iconZoomControl = function iconZoomControl(map) {
164
+ var layers = map._layers;
165
+ var zoomLevel = map._zoom;
166
+ for (var property in layers) {
166
167
  if (findSpecificLayersFromMap(['IconNumber'], layers[property])) {
167
168
  eventsCounterIcons(layers[property], zoomLevel);
168
169
  }
@@ -175,7 +176,7 @@ const iconZoomControl = map => {
175
176
  }
176
177
  };
177
178
  exports.iconZoomControl = iconZoomControl;
178
- const mapStyle = mapBoxStyle => {
179
+ var mapStyle = function mapStyle(mapBoxStyle) {
179
180
  return _leaflet.default.tileLayer("https://api.mapbox.com/styles/v1/nadav-kando/".concat(mapBoxStyle, "/tiles/256/{z}/{x}/{y}@2x?access_token=pk.eyJ1IjoibmFkYXYta2FuZG8iLCJhIjoiY2pveHprdGRxMHlmdDN4bDg0dzJxOXc4dSJ9.J-2ohq7j4yKNbm4N_-P6qw"), {
180
181
  attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
181
182
  maxZoom: 18,
@@ -188,17 +189,15 @@ const mapStyle = mapBoxStyle => {
188
189
  });
189
190
  };
190
191
  exports.mapStyle = mapStyle;
191
- const baseMaps = (mapBoxStyle, mapBoxSatelliteStyle) => {
192
- let defaultMap = _i18n.default.t('map.layers.default');
193
- let satellite = _i18n.default.t('map.layers.satellite');
194
- return {
195
- [defaultMap]: mapStyle(mapBoxStyle),
196
- [satellite]: mapStyle(mapBoxSatelliteStyle)
197
- };
192
+ var baseMaps = function baseMaps(mapBoxStyle, mapBoxSatelliteStyle) {
193
+ var _ref;
194
+ var defaultMap = _i18n.default.t('map.layers.default');
195
+ var satellite = _i18n.default.t('map.layers.satellite');
196
+ return _ref = {}, (0, _defineProperty2.default)(_ref, defaultMap, mapStyle(mapBoxStyle)), (0, _defineProperty2.default)(_ref, satellite, mapStyle(mapBoxSatelliteStyle)), _ref;
198
197
  };
199
198
  exports.baseMaps = baseMaps;
200
- const toggleEdgesVisibility = (visible, map) => {
201
- map.eachLayer(layer => {
199
+ var toggleEdgesVisibility = function toggleEdgesVisibility(visible, map) {
200
+ map.eachLayer(function (layer) {
202
201
  if (layer instanceof _leaflet.default.Polyline && layer.kando_object !== 'Area' || layer instanceof _leaflet.default.Symbol.arrowHead) {
203
202
  layer.setStyle({
204
203
  opacity: visible ? 1 : 0
@@ -215,28 +214,35 @@ const toggleEdgesVisibility = (visible, map) => {
215
214
  // console.warn('toggleMonitoredPointsWithSamplerVisibility', visible);
216
215
  // };
217
216
  exports.toggleEdgesVisibility = toggleEdgesVisibility;
218
- const edgesSpecificLogic = (defaultOn, map) => {
219
- let checkbox = document.querySelector('#edges-checkbox');
217
+ var edgesSpecificLogic = function edgesSpecificLogic(defaultOn, map) {
218
+ var checkbox = document.querySelector('#edges-checkbox');
219
+ if (checkbox == null) return;
220
220
  checkbox.checked = defaultOn;
221
221
  };
222
222
  exports.edgesSpecificLogic = edgesSpecificLogic;
223
- const customControls = map => {
223
+ var customControls = function customControls(map) {
224
224
  return [{
225
225
  label: _i18n.default.t('map.layers.network_lines'),
226
226
  id: 'edges-checkbox',
227
227
  inputType: 'checkbox',
228
228
  denyForWa: [518],
229
- onChange: isChecked => toggleEdgesVisibility(isChecked, map)
229
+ onChange: function onChange(isChecked) {
230
+ return toggleEdgesVisibility(isChecked, map);
231
+ }
230
232
  }, {
231
233
  label: 'Show only monitored points',
232
234
  id: 'monitored-points-checkbox',
233
235
  inputType: 'checkbox',
234
- onChange: isChecked => () => {}
236
+ onChange: function onChange(isChecked) {
237
+ return function () {};
238
+ }
235
239
  }, {
236
240
  label: 'Show samplers',
237
241
  id: 'monitored-points-with-sampler-checkbox',
238
242
  inputType: 'checkbox',
239
- onChange: isChecked => () => {}
243
+ onChange: function onChange(isChecked) {
244
+ return function () {};
245
+ }
240
246
  }
241
247
 
242
248
  // {
@@ -247,7 +253,8 @@ const customControls = map => {
247
253
  // },
248
254
  ];
249
255
  };
250
- const appendCustomCheckboxToLeafletsLayerBox = (leafletsContainer, customContainer) => {
256
+
257
+ var appendCustomCheckboxToLeafletsLayerBox = function appendCustomCheckboxToLeafletsLayerBox(leafletsContainer, customContainer) {
251
258
  _leaflet.default.DomEvent.on(leafletsContainer, 'mouseover', function () {
252
259
  customContainer.style.display = 'block';
253
260
  });
@@ -255,28 +262,28 @@ const appendCustomCheckboxToLeafletsLayerBox = (leafletsContainer, customContain
255
262
  customContainer.style.display = 'none';
256
263
  });
257
264
  };
258
- const createCustomControl = (control, container) => {
259
- let controlContainer = document.createElement('div');
265
+ var createCustomControl = function createCustomControl(control, container) {
266
+ var controlContainer = document.createElement('div');
260
267
  controlContainer.className = 'leaflet-control-layers-overlays';
261
268
  controlContainer.innerHTML = "\n <label>\n <input type=\"".concat(control.inputType, "\" id=\"").concat(control.id, "\" /> ").concat(control.label, "\n </label>\n ");
262
269
  controlContainer.querySelector("#".concat(control.id)).addEventListener('change', function (e) {
263
- const isChecked = e.target.checked;
270
+ var isChecked = e.target.checked;
264
271
  control.onChange(isChecked);
265
272
  });
266
273
  controlContainer.style.display = 'none';
267
274
  container === null || container === void 0 ? void 0 : container.appendChild(controlContainer);
268
275
  appendCustomCheckboxToLeafletsLayerBox(container, controlContainer);
269
276
  };
270
- const customFunctionalityForMapLayers = function (map, mapTypes) {
271
- let defaultOn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
272
- let waId = arguments.length > 3 ? arguments[3] : undefined;
273
- let forWWTPDashboard = arguments.length > 4 ? arguments[4] : undefined;
274
- let controller = _leaflet.default.control.layers(mapTypes, {}, {
277
+ var customFunctionalityForMapLayers = function customFunctionalityForMapLayers(map, mapTypes) {
278
+ var defaultOn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
279
+ var waId = arguments.length > 3 ? arguments[3] : undefined;
280
+ var forWWTPDashboard = arguments.length > 4 ? arguments[4] : undefined;
281
+ var controller = _leaflet.default.control.layers(mapTypes, {}, {
275
282
  position: 'bottomright'
276
283
  }).addTo(map);
277
- let container = controller.getContainer();
284
+ var container = controller.getContainer();
278
285
  if (forWWTPDashboard) {
279
- customControls(map).forEach(control => {
286
+ customControls(map).forEach(function (control) {
280
287
  if (control.denyForWa && control.denyForWa.includes(waId)) return;
281
288
  createCustomControl(control, container);
282
289
  edgesSpecificLogic(defaultOn, map);
@@ -284,8 +291,8 @@ const customFunctionalityForMapLayers = function (map, mapTypes) {
284
291
  }
285
292
  };
286
293
  exports.customFunctionalityForMapLayers = customFunctionalityForMapLayers;
287
- const initializeMap = function (mapZoomLevel, mapBoxStyle, mapBoxSatelliteStyle, mapRef, dispatch, isValidArea, areaToCenterBy, setMapZoomLevel, forWWTPDashboard, showEdgesByDefault) {
288
- let waId = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : 0;
294
+ var initializeMap = function initializeMap(mapZoomLevel, mapBoxStyle, mapBoxSatelliteStyle, mapRef, dispatch, isValidArea, areaToCenterBy, setMapZoomLevel, forWWTPDashboard, showEdgesByDefault) {
295
+ var waId = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : 0;
289
296
  // @ts-ignore
290
297
  mapRef.current = new _leaflet.default.Map('map', {
291
298
  center: [0, 0],
@@ -295,14 +302,14 @@ const initializeMap = function (mapZoomLevel, mapBoxStyle, mapBoxSatelliteStyle,
295
302
  preferCanvas: true
296
303
  });
297
304
  if (forWWTPDashboard) dispatch((0, _WWTPDashboardSlice.setMap)(mapRef.current));
298
- mapRef.current.whenReady(() => {
299
- let map = mapRef.current;
300
- const mapTypes = baseMaps(mapBoxStyle, mapBoxSatelliteStyle);
305
+ mapRef.current.whenReady(function () {
306
+ var map = mapRef.current;
307
+ var mapTypes = baseMaps(mapBoxStyle, mapBoxSatelliteStyle);
301
308
  customFunctionalityForMapLayers(map, mapTypes, showEdgesByDefault, waId, forWWTPDashboard);
302
309
 
303
310
  // The name of the layer changes between languages so there was a need to get to the first layer
304
311
  Object.values(mapTypes)[0].addTo(map);
305
- setTimeout(() => {
312
+ setTimeout(function () {
306
313
  if (!mapRef.current) {
307
314
  return;
308
315
  }
@@ -313,7 +320,7 @@ const initializeMap = function (mapZoomLevel, mapBoxStyle, mapBoxSatelliteStyle,
313
320
  }
314
321
  dispatch((0, _actions.storeMap)(mapRef.current));
315
322
  dispatch((0, _actions.sideNavExpanded)(true));
316
- map.on('keydown', event => {
323
+ map.on('keydown', function (event) {
317
324
  if (event.originalEvent.key === 'Escape') {
318
325
  map.closePopup();
319
326
  document.body.focus();
@@ -328,7 +335,7 @@ const initializeMap = function (mapZoomLevel, mapBoxStyle, mapBoxSatelliteStyle,
328
335
  if (!mapRef.current) {
329
336
  return;
330
337
  }
331
- let zoom = mapRef.current.getZoom();
338
+ var zoom = mapRef.current.getZoom();
332
339
  setMapZoomLevel(zoom);
333
340
  });
334
341
  };
@@ -351,7 +358,7 @@ const initializeMap = function (mapZoomLevel, mapBoxStyle, mapBoxSatelliteStyle,
351
358
  // },
352
359
  // };
353
360
  exports.initializeMap = initializeMap;
354
- const zoomLevels = exports.zoomLevels = {
361
+ var zoomLevels = {
355
362
  1: 'XLarge',
356
363
  2: 'XLarge',
357
364
  3: 'XLarge',
@@ -376,13 +383,13 @@ const zoomLevels = exports.zoomLevels = {
376
383
  // points.filter((point) => point.has_device === hasDevice);
377
384
 
378
385
  // Utility function for filtering points based on options
379
- const filterPoints = function () {
380
- let points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
381
- let {
382
- onlyMonitored,
383
- withSampler
384
- } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
385
- return points.filter(point => {
386
+ exports.zoomLevels = zoomLevels;
387
+ var filterPoints = function filterPoints() {
388
+ var points = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
389
+ var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
390
+ onlyMonitored = _ref2.onlyMonitored,
391
+ withSampler = _ref2.withSampler;
392
+ return points.filter(function (point) {
386
393
  if (onlyMonitored === true && !point.has_device) return false;
387
394
  if (onlyMonitored === false && point.has_device) return false;
388
395
  if (withSampler === true && !point.has_sampler) return false;
@@ -391,23 +398,35 @@ const filterPoints = function () {
391
398
  });
392
399
  };
393
400
  exports.filterPoints = filterPoints;
394
- const findPoint = (points, pointId, hasDeviceCheck) => points.find(point => point.id === pointId && hasDeviceCheck(point));
401
+ var findPoint = function findPoint(points, pointId, hasDeviceCheck) {
402
+ return points.find(function (point) {
403
+ return point.id === pointId && hasDeviceCheck(point);
404
+ });
405
+ };
395
406
  exports.findPoint = findPoint;
396
- const filterEdges = (edges, points, isMonitored) => edges.filter(edge => {
397
- const sourcePoint = findPoint(points, edge.source_point_id, point => isMonitored ? point.has_device || edge.descendants_has_device : !point.descendants_has_device);
398
- const parentPoint = findPoint(points, edge.target_point_id, point => isMonitored ? edge.descendants_has_device || sourcePoint !== undefined : !point.descendants_has_device);
399
- return sourcePoint && parentPoint;
400
- });
407
+ var filterEdges = function filterEdges(edges, points, isMonitored) {
408
+ return edges.filter(function (edge) {
409
+ var sourcePoint = findPoint(points, edge.source_point_id, function (point) {
410
+ return isMonitored ? point.has_device || edge.descendants_has_device : !point.descendants_has_device;
411
+ });
412
+ var parentPoint = findPoint(points, edge.target_point_id, function (point) {
413
+ return isMonitored ? edge.descendants_has_device || sourcePoint !== undefined : !point.descendants_has_device;
414
+ });
415
+ return sourcePoint && parentPoint;
416
+ });
417
+ };
401
418
  exports.filterEdges = filterEdges;
402
- const setupCheckboxListener = (selector, onChange) => {
403
- const checkbox = document.querySelector(selector);
419
+ var setupCheckboxListener = function setupCheckboxListener(selector, onChange) {
420
+ var checkbox = document.querySelector(selector);
404
421
  if (checkbox === null) return;
405
- checkbox.addEventListener('change', () => onChange(checkbox.checked));
422
+ checkbox.addEventListener('change', function () {
423
+ return onChange(checkbox.checked);
424
+ });
406
425
  };
407
426
  exports.setupCheckboxListener = setupCheckboxListener;
408
- const mapGetLayerById = (map, id) => {
409
- let retValue = null;
410
- map === null || map === void 0 ? void 0 : map.eachLayer(layer => {
427
+ var mapGetLayerById = function mapGetLayerById(map, id) {
428
+ var retValue = null;
429
+ map === null || map === void 0 ? void 0 : map.eachLayer(function (layer) {
411
430
  if ((layer === null || layer === void 0 ? void 0 : layer.kando_object_id) === id) {
412
431
  retValue = layer;
413
432
  }
@@ -415,8 +434,8 @@ const mapGetLayerById = (map, id) => {
415
434
  return retValue;
416
435
  };
417
436
  exports.mapGetLayerById = mapGetLayerById;
418
- const mapZoomLayer = function (map, layer) {
419
- let zoomLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 14;
437
+ var mapZoomLayer = function mapZoomLayer(map, layer) {
438
+ var zoomLevel = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 14;
420
439
  if (map && layer) {
421
440
  if (layer instanceof _leaflet.default.Marker) {
422
441
  map.setView(layer.getLatLng(), zoomLevel);
@@ -428,7 +447,7 @@ const mapZoomLayer = function (map, layer) {
428
447
  }
429
448
  };
430
449
  exports.mapZoomLayer = mapZoomLayer;
431
- const mapClickLayer = (map, layer) => {
450
+ var mapClickLayer = function mapClickLayer(map, layer) {
432
451
  if (map && layer && layer.isPopupOpen() === false) {
433
452
  if (layer instanceof _leaflet.default.Marker) {
434
453
  layer.fire('mouseover');
@@ -440,4 +459,4 @@ const mapClickLayer = (map, layer) => {
440
459
  }
441
460
  };
442
461
  exports.mapClickLayer = mapClickLayer;
443
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FjdGlvbnMiLCJfaTE4biIsIl9XV1RQRGFzaGJvYXJkU2xpY2UiLCJhcmVhRm9jdXNMb2dpYyIsIm1hcFJlZiIsImlzVmFsaWRBcmVhIiwiYXJlYVRvQ2VudGVyQnkiLCJtYXBJbnN0YW5jZSIsImN1cnJlbnQiLCJmaXRCb3VuZHMiLCJwYWRkaW5nIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsIl9sYXllcnMiLCJrYW5kb19vYmplY3QiLCJwdXNoIiwiT2JqZWN0Iiwia2V5cyIsIkwiLCJmZWF0dXJlR3JvdXAiLCJnZXRCb3VuZHMiLCJsZW5ndGgiLCJleHBvcnRzIiwiYXJlYSIsInNob3VsZExvYWRNYXBPYmplY3RzIiwiZ2xvYmFsX2RhdGEiLCJwb2ludHMiLCJlZGdlcyIsIm1hcCIsInVuZGVmaW5lZCIsInNob3VkTG9hZERlcGVuZGVudE1hcE9iamVjdHMiLCJhcmVhcyIsImdsb2JhbCIsImZpbmRTcGVjaWZpY0xheWVyc0Zyb21NYXAiLCJsYXllcnNUb0ZpbmQiLCJjdXJyZW50TGF5ZXIiLCJpbmNsdWRlcyIsImthbmRvX3BvaW50X3R5cGUiLCJldmVudHNDb3VudGVySWNvbnMiLCJsYXllciIsInpvb21MZXZlbCIsImljb24iLCJvcHRpb25zIiwiaWNvblNpemUiLCJldmVudHNDb3VudEljb24iLCJpY29uQW5jaG9yIiwic2V0SWNvbiIsInNldE9wYWNpdHkiLCJtdWx0aXBsZUxheWVyZWRJY29ucyIsImlzQUZld0xheWVySWNvbiIsImthbmRvX2Zld19sYXllcl9pY29uIiwibWluaUljb24iLCJwcmVzZW50Iiwia2FuZG9fc2Vjb25kYXJ5Iiwia2FuZG9fdGhpcmQiLCJzZWNvbmRhcnkiLCJ0aGlyZCIsImthbmRvX2luZGV4X29iamVjdCIsImJ1YmJsZUljb25PcHRpb25zIiwib25lTGF5ZXJJY29uT3B0aW9ucyIsIm1pZGRsZUljb25PcHRpb25zIiwidG9wSWNvbk9wdGlvbnMiLCJpY29uWm9vbUNvbnRyb2wiLCJsYXllcnMiLCJfem9vbSIsIm1hcFN0eWxlIiwibWFwQm94U3R5bGUiLCJ0aWxlTGF5ZXIiLCJjb25jYXQiLCJhdHRyaWJ1dGlvbiIsIm1heFpvb20iLCJtaW5ab29tIiwiaWQiLCJ0aWxlU2l6ZSIsInpvb21PZmZzZXQiLCJ1cGRhdGVXaGVuWm9vbWluZyIsInVwZGF0ZVdoZW5JZGxlIiwiYmFzZU1hcHMiLCJtYXBCb3hTYXRlbGxpdGVTdHlsZSIsImRlZmF1bHRNYXAiLCJpMThuIiwidCIsInNhdGVsbGl0ZSIsInRvZ2dsZUVkZ2VzVmlzaWJpbGl0eSIsInZpc2libGUiLCJlYWNoTGF5ZXIiLCJQb2x5bGluZSIsIlN5bWJvbCIsImFycm93SGVhZCIsInNldFN0eWxlIiwib3BhY2l0eSIsImVkZ2VzU3BlY2lmaWNMb2dpYyIsImRlZmF1bHRPbiIsImNoZWNrYm94IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY2hlY2tlZCIsImN1c3RvbUNvbnRyb2xzIiwibGFiZWwiLCJpbnB1dFR5cGUiLCJkZW55Rm9yV2EiLCJvbkNoYW5nZSIsImlzQ2hlY2tlZCIsImFwcGVuZEN1c3RvbUNoZWNrYm94VG9MZWFmbGV0c0xheWVyQm94IiwibGVhZmxldHNDb250YWluZXIiLCJjdXN0b21Db250YWluZXIiLCJEb21FdmVudCIsIm9uIiwic3R5bGUiLCJkaXNwbGF5IiwiY3JlYXRlQ3VzdG9tQ29udHJvbCIsImNvbnRyb2wiLCJjb250YWluZXIiLCJjb250cm9sQ29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImlubmVySFRNTCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwidGFyZ2V0IiwiYXBwZW5kQ2hpbGQiLCJjdXN0b21GdW5jdGlvbmFsaXR5Rm9yTWFwTGF5ZXJzIiwibWFwVHlwZXMiLCJhcmd1bWVudHMiLCJ3YUlkIiwiZm9yV1dUUERhc2hib2FyZCIsImNvbnRyb2xsZXIiLCJwb3NpdGlvbiIsImFkZFRvIiwiZ2V0Q29udGFpbmVyIiwiZm9yRWFjaCIsImluaXRpYWxpemVNYXAiLCJtYXBab29tTGV2ZWwiLCJkaXNwYXRjaCIsInNldE1hcFpvb21MZXZlbCIsInNob3dFZGdlc0J5RGVmYXVsdCIsIk1hcCIsImNlbnRlciIsInpvb21TbmFwIiwiem9vbSIsImF0dHJpYnV0aW9uQ29udHJvbCIsInByZWZlckNhbnZhcyIsInNldE1hcCIsIndoZW5SZWFkeSIsInZhbHVlcyIsInNldFRpbWVvdXQiLCJpbnZhbGlkYXRlU2l6ZSIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3JlTWFwIiwic2lkZU5hdkV4cGFuZGVkIiwiZXZlbnQiLCJvcmlnaW5hbEV2ZW50Iiwia2V5IiwiY2xvc2VQb3B1cCIsImJvZHkiLCJmb2N1cyIsImdldFpvb20iLCJ6b29tTGV2ZWxzIiwiZmlsdGVyUG9pbnRzIiwib25seU1vbml0b3JlZCIsIndpdGhTYW1wbGVyIiwiZmlsdGVyIiwicG9pbnQiLCJoYXNfZGV2aWNlIiwiaGFzX3NhbXBsZXIiLCJmaW5kUG9pbnQiLCJwb2ludElkIiwiaGFzRGV2aWNlQ2hlY2siLCJmaW5kIiwiZmlsdGVyRWRnZXMiLCJpc01vbml0b3JlZCIsImVkZ2UiLCJzb3VyY2VQb2ludCIsInNvdXJjZV9wb2ludF9pZCIsImRlc2NlbmRhbnRzX2hhc19kZXZpY2UiLCJwYXJlbnRQb2ludCIsInRhcmdldF9wb2ludF9pZCIsInNldHVwQ2hlY2tib3hMaXN0ZW5lciIsInNlbGVjdG9yIiwibWFwR2V0TGF5ZXJCeUlkIiwicmV0VmFsdWUiLCJrYW5kb19vYmplY3RfaWQiLCJtYXBab29tTGF5ZXIiLCJNYXJrZXIiLCJzZXRWaWV3IiwiZ2V0TGF0TG5nIiwiUG9seWdvbiIsIm1hcENsaWNrTGF5ZXIiLCJpc1BvcHVwT3BlbiIsImZpcmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvV2lkZ2V0cy9NYXAvTWFwVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEwsIHsgUG9pbnRUdXBsZSB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IHsgc2lkZU5hdkV4cGFuZGVkLCBzdG9yZU1hcCB9IGZyb20gJy4uLy4uL3N0b3JlL2dsb2JhbC9hY3Rpb25zJztcbmltcG9ydCBpMThuIGZyb20gJ3NyYy91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBzZXRNYXAgfSBmcm9tICcuLi8uLi9zdG9yZS9XV1RQRGFzaGJvYXJkL1dXVFBEYXNoYm9hcmRTbGljZSc7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICdzcmMvc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuXG5leHBvcnQgY29uc3QgYXJlYUZvY3VzTG9naWMgPSAobWFwUmVmLCBpc1ZhbGlkQXJlYSwgYXJlYVRvQ2VudGVyQnkpID0+IHtcbiAgbGV0IG1hcEluc3RhbmNlOiBhbnkgPSBtYXBSZWYuY3VycmVudDtcbiAgaWYgKGlzVmFsaWRBcmVhKGFyZWFUb0NlbnRlckJ5KSkge1xuICAgIG1hcEluc3RhbmNlLmZpdEJvdW5kcyhhcmVhVG9DZW50ZXJCeSwgeyBwYWRkaW5nOiBbMCwgMF0gfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZ3JvdXA6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIG1hcEluc3RhbmNlLl9sYXllcnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbWFwSW5zdGFuY2UuX2xheWVyc1twcm9wZXJ0eV0ua2FuZG9fb2JqZWN0ID09PSAnQXJlYScgfHxcbiAgICAgICAgbWFwSW5zdGFuY2UuX2xheWVyc1twcm9wZXJ0eV0ua2FuZG9fb2JqZWN0ID09PSAnUG9pbnQnXG4gICAgICApIHtcbiAgICAgICAgZ3JvdXAucHVzaChtYXBJbnN0YW5jZS5fbGF5ZXJzW3Byb3BlcnR5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKEwuZmVhdHVyZUdyb3VwKGdyb3VwKS5nZXRCb3VuZHMoKSkubGVuZ3RoICE9PSAwKSB7XG4gICAgICBtYXBJbnN0YW5jZS5maXRCb3VuZHMoTC5mZWF0dXJlR3JvdXAoZ3JvdXApLmdldEJvdW5kcygpLCB7XG4gICAgICAgIHBhZGRpbmc6IFsxMDAsIDEwMF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLy8gbWFwSW5zdGFuY2UuaW52YWxpZGF0ZVNpemUodHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZEFyZWEgPSAoYXJlYSkgPT4ge1xuICByZXR1cm4gYXJlYSAmJiBhcmVhLmxlbmd0aCA+IDAgJiYgT2JqZWN0LmtleXMoYXJlYVswXSkubGVuZ3RoID4gMDtcbn07XG5cbmV4cG9ydCBjb25zdCBzaG91bGRMb2FkTWFwT2JqZWN0cyA9IChnbG9iYWxfZGF0YSwgbWFwUmVmLCBwb2ludHMsIGVkZ2VzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgZ2xvYmFsX2RhdGEubWFwICE9PSB1bmRlZmluZWQgJiZcbiAgICBtYXBSZWYuY3VycmVudCAhPT0gbnVsbCAmJlxuICAgIGVkZ2VzICE9PSB1bmRlZmluZWQgJiZcbiAgICBwb2ludHMgIT09IHVuZGVmaW5lZFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3VkTG9hZERlcGVuZGVudE1hcE9iamVjdHMgPSAoXG4gIGVkZ2VzLFxuICBhcmVhcyxcbiAgZ2xvYmFsLFxuICBtYXBSZWYsXG4gIHBvaW50cyxcbikgPT4ge1xuICByZXR1cm4gKFxuICAgIGdsb2JhbC5tYXAgIT09IHVuZGVmaW5lZCAmJlxuICAgIG1hcFJlZi5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgZWRnZXMubGVuZ3RoID49IDAgJiZcbiAgICBhcmVhcy5sZW5ndGggPj0gMCAmJlxuICAgIHBvaW50cy5sZW5ndGggPj0gMFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRTcGVjaWZpY0xheWVyc0Zyb21NYXAgPSAoXG4gIGxheWVyc1RvRmluZDogc3RyaW5nW10sXG4gIGN1cnJlbnRMYXllcixcbikgPT4ge1xuICByZXR1cm4gKFxuICAgIGxheWVyc1RvRmluZC5pbmNsdWRlcyhjdXJyZW50TGF5ZXIua2FuZG9fb2JqZWN0KSAmJlxuICAgIGN1cnJlbnRMYXllci5rYW5kb19wb2ludF90eXBlICE9PSAnTWFuaG9sZSdcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBldmVudHNDb3VudGVySWNvbnMgPSAobGF5ZXIsIHpvb21MZXZlbCkgPT4ge1xuICBsZXQgaWNvbiA9IGxheWVyLm9wdGlvbnMuaWNvbjtcbiAgaWNvbi5vcHRpb25zLmljb25TaXplID0gZXZlbnRzQ291bnRJY29uKHpvb21MZXZlbCkuaWNvblNpemU7XG4gIGljb24ub3B0aW9ucy5pY29uQW5jaG9yID0gZXZlbnRzQ291bnRJY29uKHpvb21MZXZlbCkuaWNvbkFuY2hvcjtcbiAgbGF5ZXIuc2V0SWNvbihpY29uKTtcbiAgbGF5ZXIuc2V0T3BhY2l0eSgxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBtdWx0aXBsZUxheWVyZWRJY29ucyA9IChsYXllciwgem9vbUxldmVsKSA9PiB7XG4gIGxldCBpY29uID0gbGF5ZXIub3B0aW9ucy5pY29uO1xuICBsZXQgaXNBRmV3TGF5ZXJJY29uID0gbGF5ZXIua2FuZG9fZmV3X2xheWVyX2ljb247XG4gIGxldCBtaW5pSWNvbiA9IHtcbiAgICBwcmVzZW50OiBsYXllci5rYW5kb19zZWNvbmRhcnkgfHwgbGF5ZXIua2FuZG9fdGhpcmQsXG4gICAgc2Vjb25kYXJ5OiBsYXllci5rYW5kb19zZWNvbmRhcnksXG4gICAgdGhpcmQ6IGxheWVyLmthbmRvX3RoaXJkLFxuICB9O1xuXG4gIGlmIChsYXllci5rYW5kb19pbmRleF9vYmplY3QgPT09IDApIHtcbiAgICBpZiAoaXNBRmV3TGF5ZXJJY29uKSB7XG4gICAgICBpY29uLm9wdGlvbnMuaWNvblNpemUgPSBidWJibGVJY29uT3B0aW9ucyh6b29tTGV2ZWwsIG1pbmlJY29uKS5pY29uU2l6ZTtcbiAgICAgIGljb24ub3B0aW9ucy5pY29uQW5jaG9yID0gYnViYmxlSWNvbk9wdGlvbnMoXG4gICAgICAgIHpvb21MZXZlbCxcbiAgICAgICAgbWluaUljb24sXG4gICAgICApLmljb25BbmNob3I7XG4gICAgfSBlbHNlIHtcbiAgICAgIGljb24ub3B0aW9ucy5pY29uU2l6ZSA9IG9uZUxheWVySWNvbk9wdGlvbnMoem9vbUxldmVsKS5pY29uU2l6ZTtcbiAgICAgIGljb24ub3B0aW9ucy5pY29uQW5jaG9yID0gb25lTGF5ZXJJY29uT3B0aW9ucyh6b29tTGV2ZWwpLmljb25BbmNob3I7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChsYXllci5rYW5kb19pbmRleF9vYmplY3QgPT09IDEpIHtcbiAgICAgIGljb24ub3B0aW9ucy5pY29uU2l6ZSA9IG1pZGRsZUljb25PcHRpb25zKHpvb21MZXZlbCwgbWluaUljb24pLmljb25TaXplO1xuICAgICAgaWNvbi5vcHRpb25zLmljb25BbmNob3IgPSBtaWRkbGVJY29uT3B0aW9ucyhcbiAgICAgICAgem9vbUxldmVsLFxuICAgICAgICBtaW5pSWNvbixcbiAgICAgICkuaWNvbkFuY2hvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbi5vcHRpb25zLmljb25TaXplID0gdG9wSWNvbk9wdGlvbnMoem9vbUxldmVsLCBtaW5pSWNvbikuaWNvblNpemU7XG4gICAgICBpY29uLm9wdGlvbnMuaWNvbkFuY2hvciA9IHRvcEljb25PcHRpb25zKHpvb21MZXZlbCwgbWluaUljb24pLmljb25BbmNob3I7XG4gICAgfVxuICB9XG5cbiAgbGF5ZXIuc2V0SWNvbihpY29uKTtcbn07XG5cbmNvbnN0IG9uZUxheWVySWNvbk9wdGlvbnMgPSAoem9vbUxldmVsKSA9PiB7XG4gIHJldHVybiB7XG4gICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAzLjMsIHpvb21MZXZlbCAqIDMuM10gYXMgUG9pbnRUdXBsZSxcbiAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogMS43LCB6b29tTGV2ZWwgKiAzLjddIGFzIFBvaW50VHVwbGUsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZXZlbnRzQ291bnRJY29uID0gKHpvb21MZXZlbCkgPT4ge1xuICByZXR1cm4ge1xuICAgIGljb25TaXplOiBbem9vbUxldmVsICogMi41LCB6b29tTGV2ZWwgKiAyLjVdIGFzIFBvaW50VHVwbGUsXG4gICAgaWNvbkFuY2hvcjogW3pvb21MZXZlbCAqIDAsIHpvb21MZXZlbCAqIDRdIGFzIFBvaW50VHVwbGUsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYnViYmxlSWNvbk9wdGlvbnMgPSAoem9vbUxldmVsLCBtaW5pSWNvbikgPT4ge1xuICBpZiAobWluaUljb24ucHJlc2VudCkge1xuICAgIGlmIChtaW5pSWNvbi5zZWNvbmRhcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb25TaXplOiBbem9vbUxldmVsICogMS45OCwgem9vbUxldmVsICogMi4zXSBhcyBQb2ludFR1cGxlLFxuICAgICAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogMCwgem9vbUxldmVsICogNF0gYXMgUG9pbnRUdXBsZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb25TaXplOiBbem9vbUxldmVsICogMS45OCwgem9vbUxldmVsICogMi4zXSBhcyBQb2ludFR1cGxlLFxuICAgICAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogMCwgem9vbUxldmVsICogMl0gYXMgUG9pbnRUdXBsZSxcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uU2l6ZTogW3pvb21MZXZlbCAqIDMuOTgsIHpvb21MZXZlbCAqIDQuM10gYXMgUG9pbnRUdXBsZSxcbiAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAyLCB6b29tTGV2ZWwgKiA0XSBhcyBQb2ludFR1cGxlLFxuICAgIH07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBtaWRkbGVJY29uT3B0aW9ucyA9ICh6b29tTGV2ZWwsIG1pbmlJY29uKSA9PiB7XG4gIGlmIChtaW5pSWNvbi5wcmVzZW50KSB7XG4gICAgaWYgKG1pbmlJY29uLnNlY29uZGFyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAxLjEsIHpvb21MZXZlbCAqIDEuMV0sXG4gICAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAtMC40NSwgem9vbUxldmVsICogMy41XSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb25TaXplOiBbem9vbUxldmVsICogMS4xLCB6b29tTGV2ZWwgKiAxLjFdLFxuICAgICAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogLTAuNDUsIHpvb21MZXZlbCAqIDEuNV0sXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAyLjUsIHpvb21MZXZlbCAqIDIuNV0sXG4gICAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogMS4yOTUsIHpvb21MZXZlbCAqIDMuMzVdLFxuICAgIH07XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0b3BJY29uT3B0aW9ucyA9ICh6b29tTGV2ZWwsIG1pbmlJY29uKSA9PiB7XG4gIGlmIChtaW5pSWNvbi5wcmVzZW50KSB7XG4gICAgaWYgKG1pbmlJY29uLnNlY29uZGFyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAwLjksIHpvb21MZXZlbCAqIDEuOF0sXG4gICAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAtMC41LCB6b29tTGV2ZWwgKiAzLjhdLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAxLjYsIHpvb21MZXZlbCAqIDIuNV0sXG4gICAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAtMC4yLCB6b29tTGV2ZWwgKiAyLjFdLFxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb25TaXplOiBbem9vbUxldmVsICogMy45LCB6b29tTGV2ZWwgKiAzLjhdLFxuICAgICAgaWNvbkFuY2hvcjogW3pvb21MZXZlbCAqIDIsIHpvb21MZXZlbCAqIDMuOF0sXG4gICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGljb25ab29tQ29udHJvbCA9IChtYXApID0+IHtcbiAgbGV0IGxheWVycyA9IG1hcC5fbGF5ZXJzO1xuICBsZXQgem9vbUxldmVsID0gbWFwLl96b29tO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbGF5ZXJzKSB7XG4gICAgaWYgKGZpbmRTcGVjaWZpY0xheWVyc0Zyb21NYXAoWydJY29uTnVtYmVyJ10sIGxheWVyc1twcm9wZXJ0eV0pKSB7XG4gICAgICBldmVudHNDb3VudGVySWNvbnMobGF5ZXJzW3Byb3BlcnR5XSwgem9vbUxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoZmluZFNwZWNpZmljTGF5ZXJzRnJvbU1hcChbJ1BvaW50JywgJ0ljb24nXSwgbGF5ZXJzW3Byb3BlcnR5XSkpIHtcbiAgICAgIG11bHRpcGxlTGF5ZXJlZEljb25zKGxheWVyc1twcm9wZXJ0eV0sIHpvb21MZXZlbCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgZmluZFNwZWNpZmljTGF5ZXJzRnJvbU1hcChbJ1NhbXBsaW5nJywgJ09ic2VydmF0aW9uJ10sIGxheWVyc1twcm9wZXJ0eV0pXG4gICAgKSB7XG4gICAgICBtdWx0aXBsZUxheWVyZWRJY29ucyhsYXllcnNbcHJvcGVydHldLCB6b29tTGV2ZWwpO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG1hcFN0eWxlID0gKG1hcEJveFN0eWxlKSA9PiB7XG4gIHJldHVybiBMLnRpbGVMYXllcihcbiAgICBgaHR0cHM6Ly9hcGkubWFwYm94LmNvbS9zdHlsZXMvdjEvbmFkYXYta2FuZG8vJHttYXBCb3hTdHlsZX0vdGlsZXMvMjU2L3t6fS97eH0ve3l9QDJ4P2FjY2Vzc190b2tlbj1way5leUoxSWpvaWJtRmtZWFl0YTJGdVpHOGlMQ0poSWpvaVkycHZlSHByZEdSeE1IbG1kRE40YkRnMGR6SnhPWGM0ZFNKOS5KLTJvaHE3ajR5S05ibTROXy1QNnF3YCxcbiAgICB7XG4gICAgICBhdHRyaWJ1dGlvbjpcbiAgICAgICAgJ01hcCBkYXRhICZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvXCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzLCA8YSBocmVmPVwiaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC9cIj5DQy1CWS1TQTwvYT4sIEltYWdlcnkgwqkgPGEgaHJlZj1cImh0dHBzOi8vd3d3Lm1hcGJveC5jb20vXCI+TWFwYm94PC9hPicsXG4gICAgICBtYXhab29tOiAxOCxcbiAgICAgIG1pblpvb206IDIsXG4gICAgICBpZDogJ21hcGJveC9zdHJlZXRzLXYxMScsXG4gICAgICB0aWxlU2l6ZTogNTEyLFxuICAgICAgem9vbU9mZnNldDogLTEsXG4gICAgICB1cGRhdGVXaGVuWm9vbWluZzogZmFsc2UsXG4gICAgICB1cGRhdGVXaGVuSWRsZTogdHJ1ZSxcbiAgICB9LFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGJhc2VNYXBzID0gKG1hcEJveFN0eWxlLCBtYXBCb3hTYXRlbGxpdGVTdHlsZSkgPT4ge1xuICBsZXQgZGVmYXVsdE1hcCA9IGkxOG4udCgnbWFwLmxheWVycy5kZWZhdWx0Jyk7XG4gIGxldCBzYXRlbGxpdGUgPSBpMThuLnQoJ21hcC5sYXllcnMuc2F0ZWxsaXRlJyk7XG4gIHJldHVybiB7XG4gICAgW2RlZmF1bHRNYXBdOiBtYXBTdHlsZShtYXBCb3hTdHlsZSksXG4gICAgW3NhdGVsbGl0ZV06IG1hcFN0eWxlKG1hcEJveFNhdGVsbGl0ZVN0eWxlKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVFZGdlc1Zpc2liaWxpdHkgPSAodmlzaWJsZSwgbWFwKSA9PiB7XG4gIG1hcC5lYWNoTGF5ZXIoKGxheWVyKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGxheWVyIGluc3RhbmNlb2YgTC5Qb2x5bGluZSAmJiBsYXllci5rYW5kb19vYmplY3QgIT09ICdBcmVhJykgfHxcbiAgICAgIGxheWVyIGluc3RhbmNlb2YgTC5TeW1ib2wuYXJyb3dIZWFkXG4gICAgKSB7XG4gICAgICBsYXllci5zZXRTdHlsZSh7IG9wYWNpdHk6IHZpc2libGUgPyAxIDogMCB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IHRvZ2dsZU1vbml0b3JlZFBvaW50c1Zpc2liaWxpdHkgPSAodmlzaWJsZSkgPT4ge1xuLy8gICBjb25zb2xlLndhcm4oJ3RvZ2dsZU1vbml0b3JlZFBvaW50c1Zpc2liaWxpdHknLCB2aXNpYmxlKTtcbi8vIH07XG5cbi8vIGV4cG9ydCBjb25zdCB0b2dnbGVNb25pdG9yZWRQb2ludHNXaXRoU2FtcGxlclZpc2liaWxpdHkgPSAodmlzaWJsZSkgPT4ge1xuLy8gICBjb25zb2xlLndhcm4oJ3RvZ2dsZU1vbml0b3JlZFBvaW50c1dpdGhTYW1wbGVyVmlzaWJpbGl0eScsIHZpc2libGUpO1xuLy8gfTtcblxuZXhwb3J0IGNvbnN0IGVkZ2VzU3BlY2lmaWNMb2dpYyA9IChkZWZhdWx0T24sIG1hcCkgPT4ge1xuICBsZXQgY2hlY2tib3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZWRnZXMtY2hlY2tib3gnKTtcbiAgY2hlY2tib3guY2hlY2tlZCA9IGRlZmF1bHRPbjtcbn07XG5cbmNvbnN0IGN1c3RvbUNvbnRyb2xzID0gKG1hcCkgPT4ge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIGxhYmVsOiBpMThuLnQoJ21hcC5sYXllcnMubmV0d29ya19saW5lcycpLFxuICAgICAgaWQ6ICdlZGdlcy1jaGVja2JveCcsXG4gICAgICBpbnB1dFR5cGU6ICdjaGVja2JveCcsXG4gICAgICBkZW55Rm9yV2E6IFs1MThdLFxuICAgICAgb25DaGFuZ2U6IChpc0NoZWNrZWQpID0+IHRvZ2dsZUVkZ2VzVmlzaWJpbGl0eShpc0NoZWNrZWQsIG1hcCksXG4gICAgfSxcblxuICAgIHtcbiAgICAgIGxhYmVsOiAnU2hvdyBvbmx5IG1vbml0b3JlZCBwb2ludHMnLFxuICAgICAgaWQ6ICdtb25pdG9yZWQtcG9pbnRzLWNoZWNrYm94JyxcbiAgICAgIGlucHV0VHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIG9uQ2hhbmdlOiAoaXNDaGVja2VkKSA9PiAoKSA9PiB7fSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgbGFiZWw6ICdTaG93IHNhbXBsZXJzJyxcbiAgICAgIGlkOiAnbW9uaXRvcmVkLXBvaW50cy13aXRoLXNhbXBsZXItY2hlY2tib3gnLFxuICAgICAgaW5wdXRUeXBlOiAnY2hlY2tib3gnLFxuICAgICAgb25DaGFuZ2U6IChpc0NoZWNrZWQpID0+ICgpID0+IHt9LFxuICAgIH0sXG5cbiAgICAvLyB7XG4gICAgLy8gICBsYWJlbDogJ0Fub3RoZXIgY3VzdG9tIGZlYXR1cmUnLFxuICAgIC8vICAgaWQ6ICdjdXN0b20tZmVhdHVyZS1jaGVja2JveCcsXG4gICAgLy8gICBpbnB1dFR5cGU6ICdjaGVja2JveCcsXG4gICAgLy8gICBvbkNoYW5nZTogKGlzQ2hlY2tlZCkgPT4gY29uc29sZS5sb2coYEFub3RoZXIgZmVhdHVyZSBpcyBub3cgJHtpc0NoZWNrZWQgPyAnZW5hYmxlZCcgOiAnZGlzYWJsZWQnfWApLFxuICAgIC8vIH0sXG4gIF07XG59O1xuXG5jb25zdCBhcHBlbmRDdXN0b21DaGVja2JveFRvTGVhZmxldHNMYXllckJveCA9IChcbiAgbGVhZmxldHNDb250YWluZXIsXG4gIGN1c3RvbUNvbnRhaW5lcixcbikgPT4ge1xuICBMLkRvbUV2ZW50Lm9uKGxlYWZsZXRzQ29udGFpbmVyLCAnbW91c2VvdmVyJywgZnVuY3Rpb24gKCkge1xuICAgIGN1c3RvbUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgfSk7XG5cbiAgTC5Eb21FdmVudC5vbihsZWFmbGV0c0NvbnRhaW5lciwgJ21vdXNlb3V0JywgZnVuY3Rpb24gKCkge1xuICAgIGN1c3RvbUNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICB9KTtcbn07XG5cbmNvbnN0IGNyZWF0ZUN1c3RvbUNvbnRyb2wgPSAoY29udHJvbCwgY29udGFpbmVyKSA9PiB7XG4gIGxldCBjb250cm9sQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGNvbnRyb2xDb250YWluZXIuY2xhc3NOYW1lID0gJ2xlYWZsZXQtY29udHJvbC1sYXllcnMtb3ZlcmxheXMnO1xuICBjb250cm9sQ29udGFpbmVyLmlubmVySFRNTCA9IGBcbiAgICAgIDxsYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCIke2NvbnRyb2wuaW5wdXRUeXBlfVwiIGlkPVwiJHtjb250cm9sLmlkfVwiIC8+ICR7Y29udHJvbC5sYWJlbH1cbiAgICAgIDwvbGFiZWw+XG4gICAgYDtcblxuICBjb250cm9sQ29udGFpbmVyXG4gICAgLnF1ZXJ5U2VsZWN0b3IoYCMke2NvbnRyb2wuaWR9YClcbiAgICAuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGUudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICBjb250cm9sLm9uQ2hhbmdlKGlzQ2hlY2tlZCk7XG4gICAgfSk7XG5cbiAgY29udHJvbENvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBjb250YWluZXI/LmFwcGVuZENoaWxkKGNvbnRyb2xDb250YWluZXIpO1xuXG4gIGFwcGVuZEN1c3RvbUNoZWNrYm94VG9MZWFmbGV0c0xheWVyQm94KGNvbnRhaW5lciwgY29udHJvbENvbnRhaW5lcik7XG59O1xuXG5leHBvcnQgY29uc3QgY3VzdG9tRnVuY3Rpb25hbGl0eUZvck1hcExheWVycyA9IChcbiAgbWFwLFxuICBtYXBUeXBlcyxcbiAgZGVmYXVsdE9uID0gdHJ1ZSxcbiAgd2FJZCxcbiAgZm9yV1dUUERhc2hib2FyZCxcbikgPT4ge1xuICBsZXQgY29udHJvbGxlciA9IEwuY29udHJvbFxuICAgIC5sYXllcnMobWFwVHlwZXMsIHt9LCB7IHBvc2l0aW9uOiAnYm90dG9tcmlnaHQnIH0pXG4gICAgLmFkZFRvKG1hcCk7XG4gIGxldCBjb250YWluZXIgPSBjb250cm9sbGVyLmdldENvbnRhaW5lcigpO1xuXG4gIGlmIChmb3JXV1RQRGFzaGJvYXJkKSB7XG4gICAgY3VzdG9tQ29udHJvbHMobWFwKS5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoY29udHJvbC5kZW55Rm9yV2EgJiYgY29udHJvbC5kZW55Rm9yV2EuaW5jbHVkZXMod2FJZCkpIHJldHVybjtcblxuICAgICAgY3JlYXRlQ3VzdG9tQ29udHJvbChjb250cm9sLCBjb250YWluZXIpO1xuICAgICAgZWRnZXNTcGVjaWZpY0xvZ2ljKGRlZmF1bHRPbiwgbWFwKTtcbiAgICB9KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpemVNYXAgPSAoXG4gIG1hcFpvb21MZXZlbCxcbiAgbWFwQm94U3R5bGUsXG4gIG1hcEJveFNhdGVsbGl0ZVN0eWxlLFxuICBtYXBSZWYsXG4gIGRpc3BhdGNoLFxuICBpc1ZhbGlkQXJlYSxcbiAgYXJlYVRvQ2VudGVyQnksXG4gIHNldE1hcFpvb21MZXZlbCxcbiAgZm9yV1dUUERhc2hib2FyZCxcbiAgc2hvd0VkZ2VzQnlEZWZhdWx0LFxuICB3YUlkID0gMCxcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIG1hcFJlZi5jdXJyZW50ID0gbmV3IEwuTWFwKCdtYXAnLCB7XG4gICAgY2VudGVyOiBbMCwgMF0sXG4gICAgem9vbVNuYXA6IDEsXG4gICAgem9vbTogbWFwWm9vbUxldmVsLFxuICAgIGF0dHJpYnV0aW9uQ29udHJvbDogZmFsc2UsXG4gICAgcHJlZmVyQ2FudmFzOiB0cnVlLFxuICB9KTtcblxuICBpZiAoZm9yV1dUUERhc2hib2FyZCkgZGlzcGF0Y2goc2V0TWFwKG1hcFJlZi5jdXJyZW50KSk7XG5cbiAgbWFwUmVmLmN1cnJlbnQud2hlblJlYWR5KCgpID0+IHtcbiAgICBsZXQgbWFwID0gbWFwUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgbWFwVHlwZXMgPSBiYXNlTWFwcyhtYXBCb3hTdHlsZSwgbWFwQm94U2F0ZWxsaXRlU3R5bGUpO1xuXG4gICAgY3VzdG9tRnVuY3Rpb25hbGl0eUZvck1hcExheWVycyhcbiAgICAgIG1hcCxcbiAgICAgIG1hcFR5cGVzLFxuICAgICAgc2hvd0VkZ2VzQnlEZWZhdWx0LFxuICAgICAgd2FJZCxcbiAgICAgIGZvcldXVFBEYXNoYm9hcmQsXG4gICAgKTtcblxuICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBsYXllciBjaGFuZ2VzIGJldHdlZW4gbGFuZ3VhZ2VzIHNvIHRoZXJlIHdhcyBhIG5lZWQgdG8gZ2V0IHRvIHRoZSBmaXJzdCBsYXllclxuICAgIE9iamVjdC52YWx1ZXMobWFwVHlwZXMpWzBdLmFkZFRvKG1hcCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghbWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBtYXBSZWYuY3VycmVudC5pbnZhbGlkYXRlU2l6ZSh0cnVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdlcnInLCBlcnIpO1xuICAgICAgfVxuXG4gICAgICBkaXNwYXRjaChzdG9yZU1hcChtYXBSZWYuY3VycmVudCkpO1xuICAgICAgZGlzcGF0Y2goc2lkZU5hdkV4cGFuZGVkKHRydWUpKTtcblxuICAgICAgbWFwLm9uKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICBtYXAuY2xvc2VQb3B1cCgpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMCk7XG4gICAgaWYgKG1hcFJlZi5jdXJyZW50ICYmIGlzVmFsaWRBcmVhKGFyZWFUb0NlbnRlckJ5KSkge1xuICAgICAgbWFwUmVmLmN1cnJlbnQuZml0Qm91bmRzKGFyZWFUb0NlbnRlckJ5KTtcbiAgICB9XG4gIH0pO1xuXG4gIG1hcFJlZi5jdXJyZW50Lm9uKCd6b29tZW5kJywgZnVuY3Rpb24gKGUpIHtcbiAgICBpZiAoIW1hcFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB6b29tID0gbWFwUmVmLmN1cnJlbnQuZ2V0Wm9vbSgpO1xuICAgIHNldE1hcFpvb21MZXZlbCh6b29tKTtcbiAgfSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgY2x1c3Rlckdyb3VwT3B0aW9ucyA9IHtcbi8vICAgc3BpZGVyZnlPbk1heFpvb206IGZhbHNlLFxuLy8gICBzaG93Q292ZXJhZ2VPbkhvdmVyOiBmYWxzZSxcbi8vICAgem9vbVRvQm91bmRzT25DbGljazogdHJ1ZSxcbi8vICAgYW5pbWF0ZTogdHJ1ZSxcbi8vICAgZGlzYWJsZUNsdXN0ZXJpbmdBdFpvb206IDEwLFxuLy8gICByZW1vdmVPdXRzaWRlVmlzaWJsZUJvdW5kczogZmFsc2UsXG4vLyAgIGNodW5rZWRMb2FkaW5nOiB0cnVlLFxuLy8gICBpY29uQ3JlYXRlRnVuY3Rpb246IChjbHVzdGVyKSA9PiB7XG4vLyAgICAgcmV0dXJuIG5ldyBMLkRpdkljb24oe1xuLy8gICAgICAgaHRtbDogYDxkaXY+PHNwYW4+JHtjbHVzdGVyLl9jaGlsZENvdW50fTwvc3Bhbj48L2Rpdj5cbi8vICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYXJrZXItY2x1c3Rlci1uYW1lJz4ke2kxOG4udCgnaW5kdXN0cmllcycpfTwvZGl2PmAsXG4vLyAgICAgICBjbGFzc05hbWU6ICdtYXJrZXItY2x1c3RlcicsXG4vLyAgICAgICBpY29uU2l6ZTogbmV3IEwuUG9pbnQoNDAsIDQwKSxcbi8vICAgICB9KTtcbi8vICAgfSxcbi8vIH07XG5cbmV4cG9ydCBjb25zdCB6b29tTGV2ZWxzID0ge1xuICAxOiAnWExhcmdlJyxcbiAgMjogJ1hMYXJnZScsXG4gIDM6ICdYTGFyZ2UnLFxuICA0OiAnWExhcmdlJyxcbiAgNTogJ1hMYXJnZScsXG4gIDY6ICdYTGFyZ2UnLFxuICA3OiAnTGFyZ2UnLFxuICA4OiAnTGFyZ2UnLFxuICA5OiAnTGFyZ2UnLFxuICAxMDogJ0xhcmdlJyxcbiAgMTE6ICdNTGFyZ2UnLFxuICAxMjogJ01MYXJnZScsXG4gIDEzOiAnTUxhcmdlJyxcbiAgMTQ6ICdNTGFyZ2UnLFxuICAxNTogJ01lZGl1bScsXG4gIDE2OiAnTWVkaXVtJyxcbiAgMTc6ICdTbWFsbCcsXG4gIDE4OiAnU21hbGwnLFxufTtcblxuLy8gZXhwb3J0IGNvbnN0IGZpbHRlclBvaW50cyA9IChwb2ludHMsIGhhc0RldmljZSkgPT5cbi8vICAgcG9pbnRzLmZpbHRlcigocG9pbnQpID0+IHBvaW50Lmhhc19kZXZpY2UgPT09IGhhc0RldmljZSk7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb24gZm9yIGZpbHRlcmluZyBwb2ludHMgYmFzZWQgb24gb3B0aW9uc1xuZXhwb3J0IGNvbnN0IGZpbHRlclBvaW50cyA9IChcbiAgcG9pbnRzOiBJUG9pbnRbXSA9IFtdLFxuICB7XG4gICAgb25seU1vbml0b3JlZCxcbiAgICB3aXRoU2FtcGxlcixcbiAgfTogeyBvbmx5TW9uaXRvcmVkPzogYm9vbGVhbjsgd2l0aFNhbXBsZXI/OiBib29sZWFuIH0gPSB7fSxcbik6IElQb2ludFtdID0+IHtcbiAgcmV0dXJuIHBvaW50cy5maWx0ZXIoKHBvaW50KSA9PiB7XG4gICAgaWYgKG9ubHlNb25pdG9yZWQgPT09IHRydWUgJiYgIXBvaW50Lmhhc19kZXZpY2UpIHJldHVybiBmYWxzZTtcbiAgICBpZiAob25seU1vbml0b3JlZCA9PT0gZmFsc2UgJiYgcG9pbnQuaGFzX2RldmljZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh3aXRoU2FtcGxlciA9PT0gdHJ1ZSAmJiAhcG9pbnQuaGFzX3NhbXBsZXIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAod2l0aFNhbXBsZXIgPT09IGZhbHNlICYmIHBvaW50Lmhhc19zYW1wbGVyKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRQb2ludCA9IChwb2ludHMsIHBvaW50SWQsIGhhc0RldmljZUNoZWNrKSA9PlxuICBwb2ludHMuZmluZCgocG9pbnQpID0+IHBvaW50LmlkID09PSBwb2ludElkICYmIGhhc0RldmljZUNoZWNrKHBvaW50KSk7XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJFZGdlcyA9IChlZGdlcywgcG9pbnRzLCBpc01vbml0b3JlZCkgPT5cbiAgZWRnZXMuZmlsdGVyKChlZGdlKSA9PiB7XG4gICAgY29uc3Qgc291cmNlUG9pbnQgPSBmaW5kUG9pbnQocG9pbnRzLCBlZGdlLnNvdXJjZV9wb2ludF9pZCwgKHBvaW50KSA9PlxuICAgICAgaXNNb25pdG9yZWRcbiAgICAgICAgPyBwb2ludC5oYXNfZGV2aWNlIHx8IGVkZ2UuZGVzY2VuZGFudHNfaGFzX2RldmljZVxuICAgICAgICA6ICFwb2ludC5kZXNjZW5kYW50c19oYXNfZGV2aWNlLFxuICAgICk7XG5cbiAgICBjb25zdCBwYXJlbnRQb2ludCA9IGZpbmRQb2ludChwb2ludHMsIGVkZ2UudGFyZ2V0X3BvaW50X2lkLCAocG9pbnQpID0+XG4gICAgICBpc01vbml0b3JlZFxuICAgICAgICA/IGVkZ2UuZGVzY2VuZGFudHNfaGFzX2RldmljZSB8fCBzb3VyY2VQb2ludCAhPT0gdW5kZWZpbmVkXG4gICAgICAgIDogIXBvaW50LmRlc2NlbmRhbnRzX2hhc19kZXZpY2UsXG4gICAgKTtcblxuICAgIHJldHVybiBzb3VyY2VQb2ludCAmJiBwYXJlbnRQb2ludDtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBzZXR1cENoZWNrYm94TGlzdGVuZXIgPSAoc2VsZWN0b3IsIG9uQ2hhbmdlKSA9PiB7XG4gIGNvbnN0IGNoZWNrYm94ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gIGlmIChjaGVja2JveCA9PT0gbnVsbCkgcmV0dXJuO1xuICBjaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiBvbkNoYW5nZShjaGVja2JveC5jaGVja2VkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwR2V0TGF5ZXJCeUlkID0gKG1hcCwgaWQpID0+IHtcbiAgbGV0IHJldFZhbHVlID0gbnVsbDtcblxuICBtYXA/LmVhY2hMYXllcigobGF5ZXIpID0+IHtcbiAgICBpZiAobGF5ZXI/LmthbmRvX29iamVjdF9pZCA9PT0gaWQpIHtcbiAgICAgIHJldFZhbHVlID0gbGF5ZXI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJldFZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcFpvb21MYXllciA9IChtYXAsIGxheWVyLCB6b29tTGV2ZWwgPSAxNCkgPT4ge1xuICBpZiAobWFwICYmIGxheWVyKSB7XG4gICAgaWYgKGxheWVyIGluc3RhbmNlb2YgTC5NYXJrZXIpIHtcbiAgICAgIG1hcC5zZXRWaWV3KGxheWVyLmdldExhdExuZygpLCB6b29tTGV2ZWwpO1xuICAgIH0gZWxzZSBpZiAobGF5ZXIgaW5zdGFuY2VvZiBMLlBvbHlnb24pIHtcbiAgICAgIG1hcC5maXRCb3VuZHMobGF5ZXIuZ2V0Qm91bmRzKCksIHsgcGFkZGluZzogWzAsIDBdIH0pO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG1hcENsaWNrTGF5ZXIgPSAobWFwLCBsYXllcikgPT4ge1xuICBpZiAobWFwICYmIGxheWVyICYmIGxheWVyLmlzUG9wdXBPcGVuKCkgPT09IGZhbHNlKSB7XG4gICAgaWYgKGxheWVyIGluc3RhbmNlb2YgTC5NYXJrZXIpIHtcbiAgICAgIGxheWVyLmZpcmUoJ21vdXNlb3ZlcicpO1xuICAgICAgbGF5ZXIuZmlyZSgnY2xpY2snKTtcbiAgICB9IGVsc2UgaWYgKGxheWVyIGluc3RhbmNlb2YgTC5Qb2x5Z29uKSB7XG4gICAgICBsYXllci5maXJlKCdtb3VzZW92ZXInKTtcbiAgICAgIGxheWVyLmZpcmUoJ2NsaWNrLWV2ZW50Jyk7XG4gICAgfVxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUgsT0FBQTtBQUdPLE1BQU1JLGNBQWMsR0FBR0EsQ0FBQ0MsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLGNBQWMsS0FBSztFQUNyRSxJQUFJQyxXQUFnQixHQUFHSCxNQUFNLENBQUNJLE9BQU87RUFDckMsSUFBSUgsV0FBVyxDQUFDQyxjQUFjLENBQUMsRUFBRTtJQUMvQkMsV0FBVyxDQUFDRSxTQUFTLENBQUNILGNBQWMsRUFBRTtNQUFFSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUFFLENBQUMsQ0FBQztFQUM1RCxDQUFDLE1BQU07SUFDTCxNQUFNQyxLQUFZLEdBQUcsRUFBRTtJQUV2QixLQUFLLE1BQU1DLFFBQVEsSUFBSUwsV0FBVyxDQUFDTSxPQUFPLEVBQUU7TUFDMUMsSUFDRU4sV0FBVyxDQUFDTSxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDRSxZQUFZLEtBQUssTUFBTSxJQUNyRFAsV0FBVyxDQUFDTSxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDRSxZQUFZLEtBQUssT0FBTyxFQUN0RDtRQUNBSCxLQUFLLENBQUNJLElBQUksQ0FBQ1IsV0FBVyxDQUFDTSxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDO01BQzNDO0lBQ0Y7SUFFQSxJQUFJSSxNQUFNLENBQUNDLElBQUksQ0FBQ0MsZ0JBQUMsQ0FBQ0MsWUFBWSxDQUFDUixLQUFLLENBQUMsQ0FBQ1MsU0FBUyxDQUFDLENBQUMs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QUFLO0lBQ2xCO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsT0FBTytJLFFBQVE7QUFDakIsQ0FBQztBQUFDaEssT0FBQSxDQUFBK0osZUFBQSxHQUFBQSxlQUFBO0FBRUssTUFBTUcsWUFBWSxHQUFHLFNBQUFBLENBQUM1SixHQUFHLEVBQUVXLEtBQUssRUFBcUI7RUFBQSxJQUFuQkMsU0FBUyxHQUFBbUYsU0FBQSxDQUFBdEcsTUFBQSxRQUFBc0csU0FBQSxRQUFBOUYsU0FBQSxHQUFBOEYsU0FBQSxNQUFHLEVBQUU7RUFDckQsSUFBSS9GLEdBQUcsSUFBSVcsS0FBSyxFQUFFO0lBQ2hCLElBQUlBLEtBQUssWUFBWXJCLGdCQUFDLENBQUN1SyxNQUFNLEVBQUU7TUFDN0I3SixHQUFHLENBQUM4SixPQUFPLENBQUNuSixLQUFLLENBQUNvSixTQUFTLENBQUMsQ0FBQyxFQUFFbkosU0FBUyxDQUFDO0lBQzNDLENBQUMsTUFBTSxJQUFJRCxLQUFLLFlBQVlyQixnQkFBQyxDQUFDMEssT0FBTyxFQUFFO01BQ3JDaEssR0FBRyxDQUFDbkIsU0FBUyxDQUFDOEIsS0FBSyxDQUFDbkIsU0FBUyxDQUFDLENBQUMsRUFBRTtRQUFFVixPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUFFLENBQUMsQ0FBQztJQUN2RDtFQUNGO0FBQ0YsQ0FBQztBQUFDWSxPQUFBLENBQUFrSyxZQUFBLEdBQUFBLFlBQUE7QUFFSyxNQUFNSyxhQUFhLEdBQUdBLENBQUNqSyxHQUFHLEVBQUVXLEtBQUssS0FBSztFQUMzQyxJQUFJWCxHQUFHLElBQUlXLEtBQUssSUFBSUEsS0FBSyxDQUFDdUosV0FBVyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7SUFDakQsSUFBSXZKLEtBQUssWUFBWXJCLGdCQUFDLENBQUN1SyxNQUFNLEVBQUU7TUFDN0JsSixLQUFLLENBQUN3SixJQUFJLENBQUMsV0FBVyxDQUFDO01BQ3ZCeEosS0FBSyxDQUFDd0osSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDLE1BQU0sSUFBSXhKLEtBQUssWUFBWXJCLGdCQUFDLENBQUMwSyxPQUFPLEVBQUU7TUFDckNySixLQUFLLENBQUN3SixJQUFJLENBQUMsV0FBVyxDQUFDO01BQ3ZCeEosS0FBSyxDQUFDd0osSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUMzQjtFQUNGO0FBQ0YsQ0FBQztBQUFDekssT0FBQSxDQUFBdUssYUFBQSxHQUFBQSxhQUFBIiwiaWdub3JlTGlzdCI6W119
462
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FjdGlvbnMiLCJfaTE4biIsIl9XV1RQRGFzaGJvYXJkU2xpY2UiLCJhcmVhRm9jdXNMb2dpYyIsIm1hcFJlZiIsImlzVmFsaWRBcmVhIiwiYXJlYVRvQ2VudGVyQnkiLCJtYXBJbnN0YW5jZSIsImN1cnJlbnQiLCJmaXRCb3VuZHMiLCJwYWRkaW5nIiwiZ3JvdXAiLCJwcm9wZXJ0eSIsIl9sYXllcnMiLCJrYW5kb19vYmplY3QiLCJwdXNoIiwiT2JqZWN0Iiwia2V5cyIsIkwiLCJmZWF0dXJlR3JvdXAiLCJnZXRCb3VuZHMiLCJsZW5ndGgiLCJleHBvcnRzIiwiYXJlYSIsInNob3VsZExvYWRNYXBPYmplY3RzIiwiZ2xvYmFsX2RhdGEiLCJwb2ludHMiLCJlZGdlcyIsIm1hcCIsInVuZGVmaW5lZCIsInNob3VkTG9hZERlcGVuZGVudE1hcE9iamVjdHMiLCJhcmVhcyIsImdsb2JhbCIsImZpbmRTcGVjaWZpY0xheWVyc0Zyb21NYXAiLCJsYXllcnNUb0ZpbmQiLCJjdXJyZW50TGF5ZXIiLCJpbmNsdWRlcyIsImthbmRvX3BvaW50X3R5cGUiLCJldmVudHNDb3VudGVySWNvbnMiLCJsYXllciIsInpvb21MZXZlbCIsImljb24iLCJvcHRpb25zIiwiaWNvblNpemUiLCJldmVudHNDb3VudEljb24iLCJpY29uQW5jaG9yIiwic2V0SWNvbiIsInNldE9wYWNpdHkiLCJtdWx0aXBsZUxheWVyZWRJY29ucyIsImlzQUZld0xheWVySWNvbiIsImthbmRvX2Zld19sYXllcl9pY29uIiwibWluaUljb24iLCJwcmVzZW50Iiwia2FuZG9fc2Vjb25kYXJ5Iiwia2FuZG9fdGhpcmQiLCJzZWNvbmRhcnkiLCJ0aGlyZCIsImthbmRvX2luZGV4X29iamVjdCIsImJ1YmJsZUljb25PcHRpb25zIiwib25lTGF5ZXJJY29uT3B0aW9ucyIsIm1pZGRsZUljb25PcHRpb25zIiwidG9wSWNvbk9wdGlvbnMiLCJpY29uWm9vbUNvbnRyb2wiLCJsYXllcnMiLCJfem9vbSIsIm1hcFN0eWxlIiwibWFwQm94U3R5bGUiLCJ0aWxlTGF5ZXIiLCJjb25jYXQiLCJhdHRyaWJ1dGlvbiIsIm1heFpvb20iLCJtaW5ab29tIiwiaWQiLCJ0aWxlU2l6ZSIsInpvb21PZmZzZXQiLCJ1cGRhdGVXaGVuWm9vbWluZyIsInVwZGF0ZVdoZW5JZGxlIiwiYmFzZU1hcHMiLCJtYXBCb3hTYXRlbGxpdGVTdHlsZSIsIl9yZWYiLCJkZWZhdWx0TWFwIiwiaTE4biIsInQiLCJzYXRlbGxpdGUiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsInRvZ2dsZUVkZ2VzVmlzaWJpbGl0eSIsInZpc2libGUiLCJlYWNoTGF5ZXIiLCJQb2x5bGluZSIsIlN5bWJvbCIsImFycm93SGVhZCIsInNldFN0eWxlIiwib3BhY2l0eSIsImVkZ2VzU3BlY2lmaWNMb2dpYyIsImRlZmF1bHRPbiIsImNoZWNrYm94IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY2hlY2tlZCIsImN1c3RvbUNvbnRyb2xzIiwibGFiZWwiLCJpbnB1dFR5cGUiLCJkZW55Rm9yV2EiLCJvbkNoYW5nZSIsImlzQ2hlY2tlZCIsImFwcGVuZEN1c3RvbUNoZWNrYm94VG9MZWFmbGV0c0xheWVyQm94IiwibGVhZmxldHNDb250YWluZXIiLCJjdXN0b21Db250YWluZXIiLCJEb21FdmVudCIsIm9uIiwic3R5bGUiLCJkaXNwbGF5IiwiY3JlYXRlQ3VzdG9tQ29udHJvbCIsImNvbnRyb2wiLCJjb250YWluZXIiLCJjb250cm9sQ29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImlubmVySFRNTCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwidGFyZ2V0IiwiYXBwZW5kQ2hpbGQiLCJjdXN0b21GdW5jdGlvbmFsaXR5Rm9yTWFwTGF5ZXJzIiwibWFwVHlwZXMiLCJhcmd1bWVudHMiLCJ3YUlkIiwiZm9yV1dUUERhc2hib2FyZCIsImNvbnRyb2xsZXIiLCJwb3NpdGlvbiIsImFkZFRvIiwiZ2V0Q29udGFpbmVyIiwiZm9yRWFjaCIsImluaXRpYWxpemVNYXAiLCJtYXBab29tTGV2ZWwiLCJkaXNwYXRjaCIsInNldE1hcFpvb21MZXZlbCIsInNob3dFZGdlc0J5RGVmYXVsdCIsIk1hcCIsImNlbnRlciIsInpvb21TbmFwIiwiem9vbSIsImF0dHJpYnV0aW9uQ29udHJvbCIsInByZWZlckNhbnZhcyIsInNldE1hcCIsIndoZW5SZWFkeSIsInZhbHVlcyIsInNldFRpbWVvdXQiLCJpbnZhbGlkYXRlU2l6ZSIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3JlTWFwIiwic2lkZU5hdkV4cGFuZGVkIiwiZXZlbnQiLCJvcmlnaW5hbEV2ZW50Iiwia2V5IiwiY2xvc2VQb3B1cCIsImJvZHkiLCJmb2N1cyIsImdldFpvb20iLCJ6b29tTGV2ZWxzIiwiZmlsdGVyUG9pbnRzIiwiX3JlZjIiLCJvbmx5TW9uaXRvcmVkIiwid2l0aFNhbXBsZXIiLCJmaWx0ZXIiLCJwb2ludCIsImhhc19kZXZpY2UiLCJoYXNfc2FtcGxlciIsImZpbmRQb2ludCIsInBvaW50SWQiLCJoYXNEZXZpY2VDaGVjayIsImZpbmQiLCJmaWx0ZXJFZGdlcyIsImlzTW9uaXRvcmVkIiwiZWRnZSIsInNvdXJjZVBvaW50Iiwic291cmNlX3BvaW50X2lkIiwiZGVzY2VuZGFudHNfaGFzX2RldmljZSIsInBhcmVudFBvaW50IiwidGFyZ2V0X3BvaW50X2lkIiwic2V0dXBDaGVja2JveExpc3RlbmVyIiwic2VsZWN0b3IiLCJtYXBHZXRMYXllckJ5SWQiLCJyZXRWYWx1ZSIsImthbmRvX29iamVjdF9pZCIsIm1hcFpvb21MYXllciIsIk1hcmtlciIsInNldFZpZXciLCJnZXRMYXRMbmciLCJQb2x5Z29uIiwibWFwQ2xpY2tMYXllciIsImlzUG9wdXBPcGVuIiwiZmlyZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9NYXBVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTCwgeyBQb2ludFR1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBzaWRlTmF2RXhwYW5kZWQsIHN0b3JlTWFwIH0gZnJvbSAnLi4vLi4vc3RvcmUvZ2xvYmFsL2FjdGlvbnMnO1xuaW1wb3J0IGkxOG4gZnJvbSAnc3JjL3V0aWxpdGllcy9pMThuJztcbmltcG9ydCB7IHNldE1hcCB9IGZyb20gJy4uLy4uL3N0b3JlL1dXVFBEYXNoYm9hcmQvV1dUUERhc2hib2FyZFNsaWNlJztcbmltcG9ydCB7IElQb2ludCB9IGZyb20gJ3NyYy9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5cbmV4cG9ydCBjb25zdCBhcmVhRm9jdXNMb2dpYyA9IChtYXBSZWYsIGlzVmFsaWRBcmVhLCBhcmVhVG9DZW50ZXJCeSkgPT4ge1xuICBsZXQgbWFwSW5zdGFuY2U6IGFueSA9IG1hcFJlZi5jdXJyZW50O1xuICBpZiAoaXNWYWxpZEFyZWEoYXJlYVRvQ2VudGVyQnkpKSB7XG4gICAgbWFwSW5zdGFuY2UuZml0Qm91bmRzKGFyZWFUb0NlbnRlckJ5LCB7IHBhZGRpbmc6IFswLCAwXSB9KTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBncm91cDogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gbWFwSW5zdGFuY2UuX2xheWVycykge1xuICAgICAgaWYgKFxuICAgICAgICBtYXBJbnN0YW5jZS5fbGF5ZXJzW3Byb3BlcnR5XS5rYW5kb19vYmplY3QgPT09ICdBcmVhJyB8fFxuICAgICAgICBtYXBJbnN0YW5jZS5fbGF5ZXJzW3Byb3BlcnR5XS5rYW5kb19vYmplY3QgPT09ICdQb2ludCdcbiAgICAgICkge1xuICAgICAgICBncm91cC5wdXNoKG1hcEluc3RhbmNlLl9sYXllcnNbcHJvcGVydHldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoTC5mZWF0dXJlR3JvdXAoZ3JvdXApLmdldEJvdW5kcygpKS5sZW5ndGggIT09IDApIHtcbiAgICAgIG1hcEluc3RhbmNlLmZpdEJvdW5kcyhMLmZlYXR1cmVHcm91cChncm91cCkuZ2V0Qm91bmRzKCksIHtcbiAgICAgICAgcGFkZGluZzogWzEwMCwgMTAwXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvLyBtYXBJbnN0YW5jZS5pbnZhbGlkYXRlU2l6ZSh0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbGlkQXJlYSA9IChhcmVhKSA9PiB7XG4gIHJldHVybiBhcmVhICYmIGFyZWEubGVuZ3RoID4gMCAmJiBPYmplY3Qua2V5cyhhcmVhWzBdKS5sZW5ndGggPiAwO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3VsZExvYWRNYXBPYmplY3RzID0gKGdsb2JhbF9kYXRhLCBtYXBSZWYsIHBvaW50cywgZWRnZXMpID0+IHtcbiAgcmV0dXJuIChcbiAgICBnbG9iYWxfZGF0YS5tYXAgIT09IHVuZGVmaW5lZCAmJlxuICAgIG1hcFJlZi5jdXJyZW50ICE9PSBudWxsICYmXG4gICAgZWRnZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgIHBvaW50cyAhPT0gdW5kZWZpbmVkXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWRMb2FkRGVwZW5kZW50TWFwT2JqZWN0cyA9IChcbiAgZWRnZXMsXG4gIGFyZWFzLFxuICBnbG9iYWwsXG4gIG1hcFJlZixcbiAgcG9pbnRzLFxuKSA9PiB7XG4gIHJldHVybiAoXG4gICAgZ2xvYmFsLm1hcCAhPT0gdW5kZWZpbmVkICYmXG4gICAgbWFwUmVmLmN1cnJlbnQgIT09IG51bGwgJiZcbiAgICBlZGdlcy5sZW5ndGggPj0gMCAmJlxuICAgIGFyZWFzLmxlbmd0aCA+PSAwICYmXG4gICAgcG9pbnRzLmxlbmd0aCA+PSAwXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFNwZWNpZmljTGF5ZXJzRnJvbU1hcCA9IChcbiAgbGF5ZXJzVG9GaW5kOiBzdHJpbmdbXSxcbiAgY3VycmVudExheWVyLFxuKSA9PiB7XG4gIHJldHVybiAoXG4gICAgbGF5ZXJzVG9GaW5kLmluY2x1ZGVzKGN1cnJlbnRMYXllci5rYW5kb19vYmplY3QpICYmXG4gICAgY3VycmVudExheWVyLmthbmRvX3BvaW50X3R5cGUgIT09ICdNYW5ob2xlJ1xuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2ZW50c0NvdW50ZXJJY29ucyA9IChsYXllciwgem9vbUxldmVsKSA9PiB7XG4gIGxldCBpY29uID0gbGF5ZXIub3B0aW9ucy5pY29uO1xuICBpY29uLm9wdGlvbnMuaWNvblNpemUgPSBldmVudHNDb3VudEljb24oem9vbUxldmVsKS5pY29uU2l6ZTtcbiAgaWNvbi5vcHRpb25zLmljb25BbmNob3IgPSBldmVudHNDb3VudEljb24oem9vbUxldmVsKS5pY29uQW5jaG9yO1xuICBsYXllci5zZXRJY29uKGljb24pO1xuICBsYXllci5zZXRPcGFjaXR5KDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IG11bHRpcGxlTGF5ZXJlZEljb25zID0gKGxheWVyLCB6b29tTGV2ZWwpID0+IHtcbiAgbGV0IGljb24gPSBsYXllci5vcHRpb25zLmljb247XG4gIGxldCBpc0FGZXdMYXllckljb24gPSBsYXllci5rYW5kb19mZXdfbGF5ZXJfaWNvbjtcbiAgbGV0IG1pbmlJY29uID0ge1xuICAgIHByZXNlbnQ6IGxheWVyLmthbmRvX3NlY29uZGFyeSB8fCBsYXllci5rYW5kb190aGlyZCxcbiAgICBzZWNvbmRhcnk6IGxheWVyLmthbmRvX3NlY29uZGFyeSxcbiAgICB0aGlyZDogbGF5ZXIua2FuZG9fdGhpcmQsXG4gIH07XG5cbiAgaWYgKGxheWVyLmthbmRvX2luZGV4X29iamVjdCA9PT0gMCkge1xuICAgIGlmIChpc0FGZXdMYXllckljb24pIHtcbiAgICAgIGljb24ub3B0aW9ucy5pY29uU2l6ZSA9IGJ1YmJsZUljb25PcHRpb25zKHpvb21MZXZlbCwgbWluaUljb24pLmljb25TaXplO1xuICAgICAgaWNvbi5vcHRpb25zLmljb25BbmNob3IgPSBidWJibGVJY29uT3B0aW9ucyhcbiAgICAgICAgem9vbUxldmVsLFxuICAgICAgICBtaW5pSWNvbixcbiAgICAgICkuaWNvbkFuY2hvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWNvbi5vcHRpb25zLmljb25TaXplID0gb25lTGF5ZXJJY29uT3B0aW9ucyh6b29tTGV2ZWwpLmljb25TaXplO1xuICAgICAgaWNvbi5vcHRpb25zLmljb25BbmNob3IgPSBvbmVMYXllckljb25PcHRpb25zKHpvb21MZXZlbCkuaWNvbkFuY2hvcjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxheWVyLmthbmRvX2luZGV4X29iamVjdCA9PT0gMSkge1xuICAgICAgaWNvbi5vcHRpb25zLmljb25TaXplID0gbWlkZGxlSWNvbk9wdGlvbnMoem9vbUxldmVsLCBtaW5pSWNvbikuaWNvblNpemU7XG4gICAgICBpY29uLm9wdGlvbnMuaWNvbkFuY2hvciA9IG1pZGRsZUljb25PcHRpb25zKFxuICAgICAgICB6b29tTGV2ZWwsXG4gICAgICAgIG1pbmlJY29uLFxuICAgICAgKS5pY29uQW5jaG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBpY29uLm9wdGlvbnMuaWNvblNpemUgPSB0b3BJY29uT3B0aW9ucyh6b29tTGV2ZWwsIG1pbmlJY29uKS5pY29uU2l6ZTtcbiAgICAgIGljb24ub3B0aW9ucy5pY29uQW5jaG9yID0gdG9wSWNvbk9wdGlvbnMoem9vbUxldmVsLCBtaW5pSWNvbikuaWNvbkFuY2hvcjtcbiAgICB9XG4gIH1cblxuICBsYXllci5zZXRJY29uKGljb24pO1xufTtcblxuY29uc3Qgb25lTGF5ZXJJY29uT3B0aW9ucyA9ICh6b29tTGV2ZWwpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBpY29uU2l6ZTogW3pvb21MZXZlbCAqIDMuMywgem9vbUxldmVsICogMy4zXSBhcyBQb2ludFR1cGxlLFxuICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAxLjcsIHpvb21MZXZlbCAqIDMuN10gYXMgUG9pbnRUdXBsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBldmVudHNDb3VudEljb24gPSAoem9vbUxldmVsKSA9PiB7XG4gIHJldHVybiB7XG4gICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAyLjUsIHpvb21MZXZlbCAqIDIuNV0gYXMgUG9pbnRUdXBsZSxcbiAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogMCwgem9vbUxldmVsICogNF0gYXMgUG9pbnRUdXBsZSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWJibGVJY29uT3B0aW9ucyA9ICh6b29tTGV2ZWwsIG1pbmlJY29uKSA9PiB7XG4gIGlmIChtaW5pSWNvbi5wcmVzZW50KSB7XG4gICAgaWYgKG1pbmlJY29uLnNlY29uZGFyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAxLjk4LCB6b29tTGV2ZWwgKiAyLjNdIGFzIFBvaW50VHVwbGUsXG4gICAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAwLCB6b29tTGV2ZWwgKiA0XSBhcyBQb2ludFR1cGxlLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAxLjk4LCB6b29tTGV2ZWwgKiAyLjNdIGFzIFBvaW50VHVwbGUsXG4gICAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAwLCB6b29tTGV2ZWwgKiAyXSBhcyBQb2ludFR1cGxlLFxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGljb25TaXplOiBbem9vbUxldmVsICogMy45OCwgem9vbUxldmVsICogNC4zXSBhcyBQb2ludFR1cGxlLFxuICAgICAgaWNvbkFuY2hvcjogW3pvb21MZXZlbCAqIDIsIHpvb21MZXZlbCAqIDRdIGFzIFBvaW50VHVwbGUsXG4gICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG1pZGRsZUljb25PcHRpb25zID0gKHpvb21MZXZlbCwgbWluaUljb24pID0+IHtcbiAgaWYgKG1pbmlJY29uLnByZXNlbnQpIHtcbiAgICBpZiAobWluaUljb24uc2Vjb25kYXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uU2l6ZTogW3pvb21MZXZlbCAqIDEuMSwgem9vbUxldmVsICogMS4xXSxcbiAgICAgICAgaWNvbkFuY2hvcjogW3pvb21MZXZlbCAqIC0wLjQ1LCB6b29tTGV2ZWwgKiAzLjVdLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAxLjEsIHpvb21MZXZlbCAqIDEuMV0sXG4gICAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAtMC40NSwgem9vbUxldmVsICogMS41XSxcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB7XG4gICAgICBpY29uU2l6ZTogW3pvb21MZXZlbCAqIDIuNSwgem9vbUxldmVsICogMi41XSxcbiAgICAgIGljb25BbmNob3I6IFt6b29tTGV2ZWwgKiAxLjI5NSwgem9vbUxldmVsICogMy4zNV0sXG4gICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHRvcEljb25PcHRpb25zID0gKHpvb21MZXZlbCwgbWluaUljb24pID0+IHtcbiAgaWYgKG1pbmlJY29uLnByZXNlbnQpIHtcbiAgICBpZiAobWluaUljb24uc2Vjb25kYXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uU2l6ZTogW3pvb21MZXZlbCAqIDAuOSwgem9vbUxldmVsICogMS44XSxcbiAgICAgICAgaWNvbkFuY2hvcjogW3pvb21MZXZlbCAqIC0wLjUsIHpvb21MZXZlbCAqIDMuOF0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpY29uU2l6ZTogW3pvb21MZXZlbCAqIDEuNiwgem9vbUxldmVsICogMi41XSxcbiAgICAgICAgaWNvbkFuY2hvcjogW3pvb21MZXZlbCAqIC0wLjIsIHpvb21MZXZlbCAqIDIuMV0sXG4gICAgICB9O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvblNpemU6IFt6b29tTGV2ZWwgKiAzLjksIHpvb21MZXZlbCAqIDMuOF0sXG4gICAgICBpY29uQW5jaG9yOiBbem9vbUxldmVsICogMiwgem9vbUxldmVsICogMy44XSxcbiAgICB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaWNvblpvb21Db250cm9sID0gKG1hcCkgPT4ge1xuICBsZXQgbGF5ZXJzID0gbWFwLl9sYXllcnM7XG4gIGxldCB6b29tTGV2ZWwgPSBtYXAuX3pvb207XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllcnMpIHtcbiAgICBpZiAoZmluZFNwZWNpZmljTGF5ZXJzRnJvbU1hcChbJ0ljb25OdW1iZXInXSwgbGF5ZXJzW3Byb3BlcnR5XSkpIHtcbiAgICAgIGV2ZW50c0NvdW50ZXJJY29ucyhsYXllcnNbcHJvcGVydHldLCB6b29tTGV2ZWwpO1xuICAgIH1cblxuICAgIGlmIChmaW5kU3BlY2lmaWNMYXllcnNGcm9tTWFwKFsnUG9pbnQnLCAnSWNvbiddLCBsYXllcnNbcHJvcGVydHldKSkge1xuICAgICAgbXVsdGlwbGVMYXllcmVkSWNvbnMobGF5ZXJzW3Byb3BlcnR5XSwgem9vbUxldmVsKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaW5kU3BlY2lmaWNMYXllcnNGcm9tTWFwKFsnU2FtcGxpbmcnLCAnT2JzZXJ2YXRpb24nXSwgbGF5ZXJzW3Byb3BlcnR5XSlcbiAgICApIHtcbiAgICAgIG11bHRpcGxlTGF5ZXJlZEljb25zKGxheWVyc1twcm9wZXJ0eV0sIHpvb21MZXZlbCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWFwU3R5bGUgPSAobWFwQm94U3R5bGUpID0+IHtcbiAgcmV0dXJuIEwudGlsZUxheWVyKFxuICAgIGBodHRwczovL2FwaS5tYXBib3guY29tL3N0eWxlcy92MS9uYWRhdi1rYW5kby8ke21hcEJveFN0eWxlfS90aWxlcy8yNTYve3p9L3t4fS97eX1AMng/YWNjZXNzX3Rva2VuPXBrLmV5SjFJam9pYm1Ga1lYWXRhMkZ1Wkc4aUxDSmhJam9pWTJwdmVIcHJkR1J4TUhsbWRETjRiRGcwZHpKeE9YYzRkU0o5LkotMm9ocTdqNHlLTmJtNE5fLVA2cXdgLFxuICAgIHtcbiAgICAgIGF0dHJpYnV0aW9uOlxuICAgICAgICAnTWFwIGRhdGEgJmNvcHk7IDxhIGhyZWY9XCJodHRwczovL3d3dy5vcGVuc3RyZWV0bWFwLm9yZy9cIj5PcGVuU3RyZWV0TWFwPC9hPiBjb250cmlidXRvcnMsIDxhIGhyZWY9XCJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi4wL1wiPkNDLUJZLVNBPC9hPiwgSW1hZ2VyeSDCqSA8YSBocmVmPVwiaHR0cHM6Ly93d3cubWFwYm94LmNvbS9cIj5NYXBib3g8L2E+JyxcbiAgICAgIG1heFpvb206IDE4LFxuICAgICAgbWluWm9vbTogMixcbiAgICAgIGlkOiAnbWFwYm94L3N0cmVldHMtdjExJyxcbiAgICAgIHRpbGVTaXplOiA1MTIsXG4gICAgICB6b29tT2Zmc2V0OiAtMSxcbiAgICAgIHVwZGF0ZVdoZW5ab29taW5nOiBmYWxzZSxcbiAgICAgIHVwZGF0ZVdoZW5JZGxlOiB0cnVlLFxuICAgIH0sXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgYmFzZU1hcHMgPSAobWFwQm94U3R5bGUsIG1hcEJveFNhdGVsbGl0ZVN0eWxlKSA9PiB7XG4gIGxldCBkZWZhdWx0TWFwID0gaTE4bi50KCdtYXAubGF5ZXJzLmRlZmF1bHQnKTtcbiAgbGV0IHNhdGVsbGl0ZSA9IGkxOG4udCgnbWFwLmxheWVycy5zYXRlbGxpdGUnKTtcbiAgcmV0dXJuIHtcbiAgICBbZGVmYXVsdE1hcF06IG1hcFN0eWxlKG1hcEJveFN0eWxlKSxcbiAgICBbc2F0ZWxsaXRlXTogbWFwU3R5bGUobWFwQm94U2F0ZWxsaXRlU3R5bGUpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUVkZ2VzVmlzaWJpbGl0eSA9ICh2aXNpYmxlLCBtYXApID0+IHtcbiAgbWFwLmVhY2hMYXllcigobGF5ZXIpID0+IHtcbiAgICBpZiAoXG4gICAgICAobGF5ZXIgaW5zdGFuY2VvZiBMLlBvbHlsaW5lICYmIGxheWVyLmthbmRvX29iamVjdCAhPT0gJ0FyZWEnKSB8fFxuICAgICAgbGF5ZXIgaW5zdGFuY2VvZiBMLlN5bWJvbC5hcnJvd0hlYWRcbiAgICApIHtcbiAgICAgIGxheWVyLnNldFN0eWxlKHsgb3BhY2l0eTogdmlzaWJsZSA/IDEgOiAwIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vLyBleHBvcnQgY29uc3QgdG9nZ2xlTW9uaXRvcmVkUG9pbnRzVmlzaWJpbGl0eSA9ICh2aXNpYmxlKSA9PiB7XG4vLyAgIGNvbnNvbGUud2FybigndG9nZ2xlTW9uaXRvcmVkUG9pbnRzVmlzaWJpbGl0eScsIHZpc2libGUpO1xuLy8gfTtcblxuLy8gZXhwb3J0IGNvbnN0IHRvZ2dsZU1vbml0b3JlZFBvaW50c1dpdGhTYW1wbGVyVmlzaWJpbGl0eSA9ICh2aXNpYmxlKSA9PiB7XG4vLyAgIGNvbnNvbGUud2FybigndG9nZ2xlTW9uaXRvcmVkUG9pbnRzV2l0aFNhbXBsZXJWaXNpYmlsaXR5JywgdmlzaWJsZSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZWRnZXNTcGVjaWZpY0xvZ2ljID0gKGRlZmF1bHRPbiwgbWFwKSA9PiB7XG4gIGxldCBjaGVja2JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNlZGdlcy1jaGVja2JveCcpO1xuICBpZiAoY2hlY2tib3ggPT0gbnVsbCkgcmV0dXJuO1xuICBjaGVja2JveC5jaGVja2VkID0gZGVmYXVsdE9uO1xufTtcblxuY29uc3QgY3VzdG9tQ29udHJvbHMgPSAobWFwKSA9PiB7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgbGFiZWw6IGkxOG4udCgnbWFwLmxheWVycy5uZXR3b3JrX2xpbmVzJyksXG4gICAgICBpZDogJ2VkZ2VzLWNoZWNrYm94JyxcbiAgICAgIGlucHV0VHlwZTogJ2NoZWNrYm94JyxcbiAgICAgIGRlbnlGb3JXYTogWzUxOF0sXG4gICAgICBvbkNoYW5nZTogKGlzQ2hlY2tlZCkgPT4gdG9nZ2xlRWRnZXNWaXNpYmlsaXR5KGlzQ2hlY2tlZCwgbWFwKSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgbGFiZWw6ICdTaG93IG9ubHkgbW9uaXRvcmVkIHBvaW50cycsXG4gICAgICBpZDogJ21vbml0b3JlZC1wb2ludHMtY2hlY2tib3gnLFxuICAgICAgaW5wdXRUeXBlOiAnY2hlY2tib3gnLFxuICAgICAgb25DaGFuZ2U6IChpc0NoZWNrZWQpID0+ICgpID0+IHt9LFxuICAgIH0sXG5cbiAgICB7XG4gICAgICBsYWJlbDogJ1Nob3cgc2FtcGxlcnMnLFxuICAgICAgaWQ6ICdtb25pdG9yZWQtcG9pbnRzLXdpdGgtc2FtcGxlci1jaGVja2JveCcsXG4gICAgICBpbnB1dFR5cGU6ICdjaGVja2JveCcsXG4gICAgICBvbkNoYW5nZTogKGlzQ2hlY2tlZCkgPT4gKCkgPT4ge30sXG4gICAgfSxcblxuICAgIC8vIHtcbiAgICAvLyAgIGxhYmVsOiAnQW5vdGhlciBjdXN0b20gZmVhdHVyZScsXG4gICAgLy8gICBpZDogJ2N1c3RvbS1mZWF0dXJlLWNoZWNrYm94JyxcbiAgICAvLyAgIGlucHV0VHlwZTogJ2NoZWNrYm94JyxcbiAgICAvLyAgIG9uQ2hhbmdlOiAoaXNDaGVja2VkKSA9PiBjb25zb2xlLmxvZyhgQW5vdGhlciBmZWF0dXJlIGlzIG5vdyAke2lzQ2hlY2tlZCA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YCksXG4gICAgLy8gfSxcbiAgXTtcbn07XG5cbmNvbnN0IGFwcGVuZEN1c3RvbUNoZWNrYm94VG9MZWFmbGV0c0xheWVyQm94ID0gKFxuICBsZWFmbGV0c0NvbnRhaW5lcixcbiAgY3VzdG9tQ29udGFpbmVyLFxuKSA9PiB7XG4gIEwuRG9tRXZlbnQub24obGVhZmxldHNDb250YWluZXIsICdtb3VzZW92ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgY3VzdG9tQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICB9KTtcblxuICBMLkRvbUV2ZW50Lm9uKGxlYWZsZXRzQ29udGFpbmVyLCAnbW91c2VvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgY3VzdG9tQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH0pO1xufTtcblxuY29uc3QgY3JlYXRlQ3VzdG9tQ29udHJvbCA9IChjb250cm9sLCBjb250YWluZXIpID0+IHtcbiAgbGV0IGNvbnRyb2xDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgY29udHJvbENvbnRhaW5lci5jbGFzc05hbWUgPSAnbGVhZmxldC1jb250cm9sLWxheWVycy1vdmVybGF5cyc7XG4gIGNvbnRyb2xDb250YWluZXIuaW5uZXJIVE1MID0gYFxuICAgICAgPGxhYmVsPlxuICAgICAgICA8aW5wdXQgdHlwZT1cIiR7Y29udHJvbC5pbnB1dFR5cGV9XCIgaWQ9XCIke2NvbnRyb2wuaWR9XCIgLz4gJHtjb250cm9sLmxhYmVsfVxuICAgICAgPC9sYWJlbD5cbiAgICBgO1xuXG4gIGNvbnRyb2xDb250YWluZXJcbiAgICAucXVlcnlTZWxlY3RvcihgIyR7Y29udHJvbC5pZH1gKVxuICAgIC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgY29uc3QgaXNDaGVja2VkID0gZS50YXJnZXQuY2hlY2tlZDtcbiAgICAgIGNvbnRyb2wub25DaGFuZ2UoaXNDaGVja2VkKTtcbiAgICB9KTtcblxuICBjb250cm9sQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGNvbnRhaW5lcj8uYXBwZW5kQ2hpbGQoY29udHJvbENvbnRhaW5lcik7XG5cbiAgYXBwZW5kQ3VzdG9tQ2hlY2tib3hUb0xlYWZsZXRzTGF5ZXJCb3goY29udGFpbmVyLCBjb250cm9sQ29udGFpbmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjdXN0b21GdW5jdGlvbmFsaXR5Rm9yTWFwTGF5ZXJzID0gKFxuICBtYXAsXG4gIG1hcFR5cGVzLFxuICBkZWZhdWx0T24gPSB0cnVlLFxuICB3YUlkLFxuICBmb3JXV1RQRGFzaGJvYXJkLFxuKSA9PiB7XG4gIGxldCBjb250cm9sbGVyID0gTC5jb250cm9sXG4gICAgLmxheWVycyhtYXBUeXBlcywge30sIHsgcG9zaXRpb246ICdib3R0b21yaWdodCcgfSlcbiAgICAuYWRkVG8obWFwKTtcbiAgbGV0IGNvbnRhaW5lciA9IGNvbnRyb2xsZXIuZ2V0Q29udGFpbmVyKCk7XG5cbiAgaWYgKGZvcldXVFBEYXNoYm9hcmQpIHtcbiAgICBjdXN0b21Db250cm9scyhtYXApLmZvckVhY2goKGNvbnRyb2wpID0+IHtcbiAgICAgIGlmIChjb250cm9sLmRlbnlGb3JXYSAmJiBjb250cm9sLmRlbnlGb3JXYS5pbmNsdWRlcyh3YUlkKSkgcmV0dXJuO1xuXG4gICAgICBjcmVhdGVDdXN0b21Db250cm9sKGNvbnRyb2wsIGNvbnRhaW5lcik7XG4gICAgICBlZGdlc1NwZWNpZmljTG9naWMoZGVmYXVsdE9uLCBtYXApO1xuICAgIH0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbGl6ZU1hcCA9IChcbiAgbWFwWm9vbUxldmVsLFxuICBtYXBCb3hTdHlsZSxcbiAgbWFwQm94U2F0ZWxsaXRlU3R5bGUsXG4gIG1hcFJlZixcbiAgZGlzcGF0Y2gsXG4gIGlzVmFsaWRBcmVhLFxuICBhcmVhVG9DZW50ZXJCeSxcbiAgc2V0TWFwWm9vbUxldmVsLFxuICBmb3JXV1RQRGFzaGJvYXJkLFxuICBzaG93RWRnZXNCeURlZmF1bHQsXG4gIHdhSWQgPSAwLFxuKSA9PiB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgbWFwUmVmLmN1cnJlbnQgPSBuZXcgTC5NYXAoJ21hcCcsIHtcbiAgICBjZW50ZXI6IFswLCAwXSxcbiAgICB6b29tU25hcDogMSxcbiAgICB6b29tOiBtYXBab29tTGV2ZWwsXG4gICAgYXR0cmlidXRpb25Db250cm9sOiBmYWxzZSxcbiAgICBwcmVmZXJDYW52YXM6IHRydWUsXG4gIH0pO1xuXG4gIGlmIChmb3JXV1RQRGFzaGJvYXJkKSBkaXNwYXRjaChzZXRNYXAobWFwUmVmLmN1cnJlbnQpKTtcblxuICBtYXBSZWYuY3VycmVudC53aGVuUmVhZHkoKCkgPT4ge1xuICAgIGxldCBtYXAgPSBtYXBSZWYuY3VycmVudDtcbiAgICBjb25zdCBtYXBUeXBlcyA9IGJhc2VNYXBzKG1hcEJveFN0eWxlLCBtYXBCb3hTYXRlbGxpdGVTdHlsZSk7XG5cbiAgICBjdXN0b21GdW5jdGlvbmFsaXR5Rm9yTWFwTGF5ZXJzKFxuICAgICAgbWFwLFxuICAgICAgbWFwVHlwZXMsXG4gICAgICBzaG93RWRnZXNCeURlZmF1bHQsXG4gICAgICB3YUlkLFxuICAgICAgZm9yV1dUUERhc2hib2FyZCxcbiAgICApO1xuXG4gICAgLy8gVGhlIG5hbWUgb2YgdGhlIGxheWVyIGNoYW5nZXMgYmV0d2VlbiBsYW5ndWFnZXMgc28gdGhlcmUgd2FzIGEgbmVlZCB0byBnZXQgdG8gdGhlIGZpcnN0IGxheWVyXG4gICAgT2JqZWN0LnZhbHVlcyhtYXBUeXBlcylbMF0uYWRkVG8obWFwKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFtYXBSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG1hcFJlZi5jdXJyZW50LmludmFsaWRhdGVTaXplKHRydWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2VycicsIGVycik7XG4gICAgICB9XG5cbiAgICAgIGRpc3BhdGNoKHN0b3JlTWFwKG1hcFJlZi5jdXJyZW50KSk7XG4gICAgICBkaXNwYXRjaChzaWRlTmF2RXhwYW5kZWQodHJ1ZSkpO1xuXG4gICAgICBtYXAub24oJ2tleWRvd24nLCAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgIG1hcC5jbG9zZVBvcHVwKCk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAwKTtcbiAgICBpZiAobWFwUmVmLmN1cnJlbnQgJiYgaXNWYWxpZEFyZWEoYXJlYVRvQ2VudGVyQnkpKSB7XG4gICAgICBtYXBSZWYuY3VycmVudC5maXRCb3VuZHMoYXJlYVRvQ2VudGVyQnkpO1xuICAgIH1cbiAgfSk7XG5cbiAgbWFwUmVmLmN1cnJlbnQub24oJ3pvb21lbmQnLCBmdW5jdGlvbiAoZSkge1xuICAgIGlmICghbWFwUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHpvb20gPSBtYXBSZWYuY3VycmVudC5nZXRab29tKCk7XG4gICAgc2V0TWFwWm9vbUxldmVsKHpvb20pO1xuICB9KTtcbn07XG5cbi8vIGV4cG9ydCBjb25zdCBjbHVzdGVyR3JvdXBPcHRpb25zID0ge1xuLy8gICBzcGlkZXJmeU9uTWF4Wm9vbTogZmFsc2UsXG4vLyAgIHNob3dDb3ZlcmFnZU9uSG92ZXI6IGZhbHNlLFxuLy8gICB6b29tVG9Cb3VuZHNPbkNsaWNrOiB0cnVlLFxuLy8gICBhbmltYXRlOiB0cnVlLFxuLy8gICBkaXNhYmxlQ2x1c3RlcmluZ0F0Wm9vbTogMTAsXG4vLyAgIHJlbW92ZU91dHNpZGVWaXNpYmxlQm91bmRzOiBmYWxzZSxcbi8vICAgY2h1bmtlZExvYWRpbmc6IHRydWUsXG4vLyAgIGljb25DcmVhdGVGdW5jdGlvbjogKGNsdXN0ZXIpID0+IHtcbi8vICAgICByZXR1cm4gbmV3IEwuRGl2SWNvbih7XG4vLyAgICAgICBodG1sOiBgPGRpdj48c3Bhbj4ke2NsdXN0ZXIuX2NoaWxkQ291bnR9PC9zcGFuPjwvZGl2PlxuLy8gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21hcmtlci1jbHVzdGVyLW5hbWUnPiR7aTE4bi50KCdpbmR1c3RyaWVzJyl9PC9kaXY+YCxcbi8vICAgICAgIGNsYXNzTmFtZTogJ21hcmtlci1jbHVzdGVyJyxcbi8vICAgICAgIGljb25TaXplOiBuZXcgTC5Qb2ludCg0MCwgNDApLFxuLy8gICAgIH0pO1xuLy8gICB9LFxuLy8gfTtcblxuZXhwb3J0IGNvbnN0IHpvb21MZXZlbHMgPSB7XG4gIDE6ICdYTGFyZ2UnLFxuICAyOiAnWExhcmdlJyxcbiAgMzogJ1hMYXJnZScsXG4gIDQ6ICdYTGFyZ2UnLFxuICA1OiAnWExhcmdlJyxcbiAgNjogJ1hMYXJnZScsXG4gIDc6ICdMYXJnZScsXG4gIDg6ICdMYXJnZScsXG4gIDk6ICdMYXJnZScsXG4gIDEwOiAnTGFyZ2UnLFxuICAxMTogJ01MYXJnZScsXG4gIDEyOiAnTUxhcmdlJyxcbiAgMTM6ICdNTGFyZ2UnLFxuICAxNDogJ01MYXJnZScsXG4gIDE1OiAnTWVkaXVtJyxcbiAgMTY6ICdNZWRpdW0nLFxuICAxNzogJ1NtYWxsJyxcbiAgMTg6ICdTbWFsbCcsXG59O1xuXG4vLyBleHBvcnQgY29uc3QgZmlsdGVyUG9pbnRzID0gKHBvaW50cywgaGFzRGV2aWNlKSA9PlxuLy8gICBwb2ludHMuZmlsdGVyKChwb2ludCkgPT4gcG9pbnQuaGFzX2RldmljZSA9PT0gaGFzRGV2aWNlKTtcblxuLy8gVXRpbGl0eSBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIHBvaW50cyBiYXNlZCBvbiBvcHRpb25zXG5leHBvcnQgY29uc3QgZmlsdGVyUG9pbnRzID0gKFxuICBwb2ludHM6IElQb2ludFtdID0gW10sXG4gIHtcbiAgICBvbmx5TW9uaXRvcmVkLFxuICAgIHdpdGhTYW1wbGVyLFxuICB9OiB7IG9ubHlNb25pdG9yZWQ/OiBib29sZWFuOyB3aXRoU2FtcGxlcj86IGJvb2xlYW4gfSA9IHt9LFxuKTogSVBvaW50W10gPT4ge1xuICByZXR1cm4gcG9pbnRzLmZpbHRlcigocG9pbnQpID0+IHtcbiAgICBpZiAob25seU1vbml0b3JlZCA9PT0gdHJ1ZSAmJiAhcG9pbnQuaGFzX2RldmljZSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChvbmx5TW9uaXRvcmVkID09PSBmYWxzZSAmJiBwb2ludC5oYXNfZGV2aWNlKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHdpdGhTYW1wbGVyID09PSB0cnVlICYmICFwb2ludC5oYXNfc2FtcGxlcikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh3aXRoU2FtcGxlciA9PT0gZmFsc2UgJiYgcG9pbnQuaGFzX3NhbXBsZXIpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFBvaW50ID0gKHBvaW50cywgcG9pbnRJZCwgaGFzRGV2aWNlQ2hlY2spID0+XG4gIHBvaW50cy5maW5kKChwb2ludCkgPT4gcG9pbnQuaWQgPT09IHBvaW50SWQgJiYgaGFzRGV2aWNlQ2hlY2socG9pbnQpKTtcblxuZXhwb3J0IGNvbnN0IGZpbHRlckVkZ2VzID0gKGVkZ2VzLCBwb2ludHMsIGlzTW9uaXRvcmVkKSA9PlxuICBlZGdlcy5maWx0ZXIoKGVkZ2UpID0+IHtcbiAgICBjb25zdCBzb3VyY2VQb2ludCA9IGZpbmRQb2ludChwb2ludHMsIGVkZ2Uuc291cmNlX3BvaW50X2lkLCAocG9pbnQpID0+XG4gICAgICBpc01vbml0b3JlZFxuICAgICAgICA/IHBvaW50Lmhhc19kZXZpY2UgfHwgZWRnZS5kZXNjZW5kYW50c19oYXNfZGV2aWNlXG4gICAgICAgIDogIXBvaW50LmRlc2NlbmRhbnRzX2hhc19kZXZpY2UsXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmVudFBvaW50ID0gZmluZFBvaW50KHBvaW50cywgZWRnZS50YXJnZXRfcG9pbnRfaWQsIChwb2ludCkgPT5cbiAgICAgIGlzTW9uaXRvcmVkXG4gICAgICAgID8gZWRnZS5kZXNjZW5kYW50c19oYXNfZGV2aWNlIHx8IHNvdXJjZVBvaW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgOiAhcG9pbnQuZGVzY2VuZGFudHNfaGFzX2RldmljZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNvdXJjZVBvaW50ICYmIHBhcmVudFBvaW50O1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHNldHVwQ2hlY2tib3hMaXN0ZW5lciA9IChzZWxlY3Rvciwgb25DaGFuZ2UpID0+IHtcbiAgY29uc3QgY2hlY2tib3ggPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgaWYgKGNoZWNrYm94ID09PSBudWxsKSByZXR1cm47XG4gIGNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IG9uQ2hhbmdlKGNoZWNrYm94LmNoZWNrZWQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBtYXBHZXRMYXllckJ5SWQgPSAobWFwLCBpZCkgPT4ge1xuICBsZXQgcmV0VmFsdWUgPSBudWxsO1xuXG4gIG1hcD8uZWFjaExheWVyKChsYXllcikgPT4ge1xuICAgIGlmIChsYXllcj8ua2FuZG9fb2JqZWN0X2lkID09PSBpZCkge1xuICAgICAgcmV0VmFsdWUgPSBsYXllcjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmV0VmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwWm9vbUxheWVyID0gKG1hcCwgbGF5ZXIsIHpvb21MZXZlbCA9IDE0KSA9PiB7XG4gIGlmIChtYXAgJiYgbGF5ZXIpIHtcbiAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBMLk1hcmtlcikge1xuICAgICAgbWFwLnNldFZpZXcobGF5ZXIuZ2V0TGF0TG5nKCksIHpvb21MZXZlbCk7XG4gICAgfSBlbHNlIGlmIChsYXllciBpbnN0YW5jZW9mIEwuUG9seWdvbikge1xuICAgICAgbWFwLmZpdEJvdW5kcyhsYXllci5nZXRCb3VuZHMoKSwgeyBwYWRkaW5nOiBbMCwgMF0gfSk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgbWFwQ2xpY2tMYXllciA9IChtYXAsIGxheWVyKSA9PiB7XG4gIGlmIChtYXAgJiYgbGF5ZXIgJiYgbGF5ZXIuaXNQb3B1cE9wZW4oKSA9PT0gZmFsc2UpIHtcbiAgICBpZiAobGF5ZXIgaW5zdGFuY2VvZiBMLk1hcmtlcikge1xuICAgICAgbGF5ZXIuZmlyZSgnbW91c2VvdmVyJyk7XG4gICAgICBsYXllci5maXJlKCdjbGljaycpO1xuICAgIH0gZWxzZSBpZiAobGF5ZXIgaW5zdGFuY2VvZiBMLlBvbHlnb24pIHtcbiAgICAgIGxheWVyLmZpcmUoJ21vdXNlb3ZlcicpO1xuICAgICAgbGF5ZXIuZmlyZSgnY2xpY2stZXZlbnQnKTtcbiAgICB9XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsbUJBQUEsR0FBQUgsT0FBQTtBQUdPLElBQU1JLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSUMsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLGNBQWMsRUFBSztFQUNyRSxJQUFJQyxXQUFnQixHQUFHSCxNQUFNLENBQUNJLE9BQU87RUFDckMsSUFBSUgsV0FBVyxDQUFDQyxjQUFjLENBQUMsRUFBRTtJQUMvQkMsV0FBVyxDQUFDRSxTQUFTLENBQUNILGNBQWMsRUFBRTtNQUFFSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUFFLENBQUMsQ0FBQztFQUM1RCxDQUFDLE1BQU07SUFDTCxJQUFNQyxLQUFZLEdBQUcsRUFBRTtJQUV2QixLQUFLLElBQU1DLFFBQVEsSUFBSUwsV0FBVyxDQUFDTSxPQUFPLEVBQUU7TUFDMUMsSUFDRU4sV0FBVyxDQUFDTSxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDRSxZQUFZLEtBQUssTUFBTSxJQUNyRFAsV0FBVyxDQUFDTSxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDRSxZQUFZLEtBQUssT0FBTyxFQUN0RDtRQUNBSCxLQUFLLENBQUNJLElBQUksQ0FBQ1IsV0FBVyxDQUFDTSxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDO01BQzNDO0lB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