@kando-env/kando-ui 1.2.376 → 1.2.378

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 (586) hide show
  1. package/lib/Router.js +73 -36
  2. package/lib/Widgets/EventsCarousel/EventsCarousel.js +35 -25
  3. package/lib/Widgets/EventsRow/EventsRow.js +39 -27
  4. package/lib/Widgets/Map/GraphUtils.js +3 -3
  5. package/lib/Widgets/Map/Map.js +94 -72
  6. package/lib/Widgets/Map/MapUtils.js +61 -64
  7. package/lib/Widgets/Map/areas/AreaPolygon.js +77 -53
  8. package/lib/Widgets/Map/areas/AreaPolygons.js +24 -23
  9. package/lib/Widgets/Map/areas/AreaUtils.js +46 -47
  10. package/lib/Widgets/Map/areas/Patterns.js +4 -4
  11. package/lib/Widgets/Map/edges/Edge.js +35 -31
  12. package/lib/Widgets/Map/edges/Edges.js +23 -19
  13. package/lib/Widgets/Map/edges/arrows/Arrows.js +44 -23
  14. package/lib/Widgets/Map/events/Event.js +17 -17
  15. package/lib/Widgets/Map/events/EventIndicator.js +60 -65
  16. package/lib/Widgets/Map/events/EventPath.js +22 -24
  17. package/lib/Widgets/Map/events/EventUtils.js +80 -60
  18. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +18 -17
  19. package/lib/Widgets/Map/events/PointOfEvent.js +34 -29
  20. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +37 -30
  21. package/lib/Widgets/Map/events/Snail.js +20 -19
  22. package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +86 -93
  23. package/lib/Widgets/Map/map/FloatingGraph.js +18 -22
  24. package/lib/Widgets/Map/map/GraphDateButton.js +17 -25
  25. package/lib/Widgets/Map/matchGraph/MatchGraph.js +12 -13
  26. package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +15 -16
  27. package/lib/Widgets/Map/points/PointIcon.js +15 -22
  28. package/lib/Widgets/Map/points/PointMarker.js +87 -71
  29. package/lib/Widgets/Map/points/PointMarkers.js +66 -45
  30. package/lib/Widgets/Map/points/PointUtils.js +83 -145
  31. package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +48 -30
  32. package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +10 -29
  33. package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +12 -11
  34. package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +3 -3
  35. package/lib/Widgets/MostPolluting/Areas/Areas.js +60 -31
  36. package/lib/Widgets/MostPolluting/Areas/areas.mock.js +3 -3
  37. package/lib/Widgets/MostPolluting/Areas/styles.js +3 -3
  38. package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +8 -11
  39. package/lib/Widgets/MostPolluting/Factories/Factories.js +70 -39
  40. package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +18 -15
  41. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +8 -8
  42. package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +10 -12
  43. package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +3 -3
  44. package/lib/Widgets/MostPolluting/Factories/factories.mock.js +2 -2
  45. package/lib/Widgets/MostPolluting/Factories/styles.js +3 -3
  46. package/lib/Widgets/MostPolluting/MostPolluting.js +42 -23
  47. package/lib/Widgets/MostPolluting/MostPolluting.stories.js +22 -18
  48. package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +4 -6
  49. package/lib/Widgets/MostPolluting/ShowMore/styles.js +4 -6
  50. package/lib/Widgets/MostPolluting/assets/index.js +10 -10
  51. package/lib/Widgets/MostPolluting/components/ChangePercent.js +13 -19
  52. package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +30 -35
  53. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +35 -45
  54. package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +35 -39
  55. package/lib/Widgets/MostPolluting/components/PotentialImpact.js +27 -28
  56. package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +50 -54
  57. package/lib/Widgets/MostPolluting/styles.js +3 -3
  58. package/lib/Widgets/PotentialImpactSummary/Back/Back.js +5 -7
  59. package/lib/Widgets/PotentialImpactSummary/Icon.js +6 -8
  60. package/lib/Widgets/PotentialImpactSummary/index.js +27 -19
  61. package/lib/Widgets/PotentialImpactSummary/index.test.js +52 -47
  62. package/lib/Widgets/PotentialImpactSummary/styles.js +7 -7
  63. package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +7 -9
  64. package/lib/Widgets/QualitySummary/PieChart/PieChart.js +17 -22
  65. package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +32 -35
  66. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +24 -26
  67. package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +37 -35
  68. package/lib/Widgets/QualitySummary/QualitySummary.js +13 -9
  69. package/lib/Widgets/QualitySummary/qualitySummary.mock.js +4 -4
  70. package/lib/Widgets/QualitySummary/styles.js +15 -23
  71. package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +13 -12
  72. package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +26 -27
  73. package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +24 -29
  74. package/lib/Widgets/UtilityInformation/UtilityInformation.js +44 -30
  75. package/lib/Widgets/UtilityInformation/styles.js +25 -34
  76. package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +3 -3
  77. package/lib/assets/icons/TopNavbar/index.js +6 -6
  78. package/lib/assets/icons/TrendSvg.js +6 -6
  79. package/lib/assets/icons/index.js +15 -15
  80. package/lib/assets/icons/kandoStepper/index.js +5 -5
  81. package/lib/assets/icons/siteTypes/index.js +1 -1
  82. package/lib/components/ApplyButton/ApplyButton.js +9 -9
  83. package/lib/components/Backdrop/Backdrop.js +4 -6
  84. package/lib/components/ContentLoader/ContentLoader.js +9 -11
  85. package/lib/components/ContentLoader/index.js +1 -1
  86. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +12 -13
  87. package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +5 -3
  88. package/lib/components/CustomInputs/DoubleTabs/styles.js +12 -20
  89. package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +20 -13
  90. package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +4 -6
  91. package/lib/components/CustomInputs/Search/Search.js +63 -42
  92. package/lib/components/CustomInputs/Select/Select.js +58 -45
  93. package/lib/components/CustomInputs/Select/Select.stories.js +6 -4
  94. package/lib/components/DamageType/DamageType.js +57 -35
  95. package/lib/components/DataLoaderError/DataLoaderError.js +6 -8
  96. package/lib/components/DischargeHeatmap/DischargeHeatmap.js +10 -9
  97. package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +71 -70
  98. package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -27
  99. package/lib/components/DischargeHeatmap/HighchartsOptions.js +12 -10
  100. package/lib/components/DischargeHeatmap/mocks/handlers.js +3 -3
  101. package/lib/components/DischargeHeatmap/popupText.js +10 -10
  102. package/lib/components/DischargeHeatmap/titles.js +3 -3
  103. package/lib/components/ErrorBoundary.js +41 -27
  104. package/lib/components/Events/Events.js +58 -41
  105. package/lib/components/Graph/Graph.js +97 -70
  106. package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +21 -17
  107. package/lib/components/Header/DoubleTabs/DoubleTabs.js +33 -25
  108. package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +5 -3
  109. package/lib/components/Header/DoubleTabs/styles.js +4 -4
  110. package/lib/components/Header/Header.js +2 -2
  111. package/lib/components/Header/Header.stories.js +5 -3
  112. package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +108 -90
  113. package/lib/components/Header/InfoBar/InfoBar.js +103 -74
  114. package/lib/components/Header/InfoBar/Search/Control.js +9 -9
  115. package/lib/components/Header/InfoBar/Search/GroupLabel.js +5 -7
  116. package/lib/components/Header/InfoBar/Search/Search.js +21 -16
  117. package/lib/components/Header/InfoBar/Search/SearchContainer.js +33 -21
  118. package/lib/components/Header/InfoBar/Search/searchStyle.js +49 -41
  119. package/lib/components/Header/InfoBar/TimeFilter.js +14 -11
  120. package/lib/components/Header/KandoNavbar/KandoNavbar.js +89 -64
  121. package/lib/components/Header/Slideshow/Slideshow.js +90 -68
  122. package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +4 -6
  123. package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +23 -21
  124. package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +18 -18
  125. package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +43 -37
  126. package/lib/components/Header/Toolbar/Toolbar.js +74 -55
  127. package/lib/components/InfoBar/InfoBar.js +23 -10
  128. package/lib/components/InfoBar/InfoBar.stories.js +5 -3
  129. package/lib/components/KandoModal/KandoModal.js +41 -27
  130. package/lib/components/Link.js +7 -8
  131. package/lib/components/Links/CustomRedirect/CustomRedirect.js +8 -9
  132. package/lib/components/Links/StyledLink/StyledLink.js +12 -12
  133. package/lib/components/Links/StyledNavLink/StyledNavLink.js +10 -11
  134. package/lib/components/LiveEvents/CarouselSlide.js +7 -9
  135. package/lib/components/LiveEvents/LiveEvents.js +3 -5
  136. package/lib/components/LoaderByPercent/LoaderByPercent.js +29 -37
  137. package/lib/components/Map/Map.js +23 -20
  138. package/lib/components/Modal/Modal.js +9 -9
  139. package/lib/components/NarrowHeader.js +31 -17
  140. package/lib/components/PointInfo/PointInfo.js +17 -19
  141. package/lib/components/PopupModal/PopupModal.js +16 -12
  142. package/lib/components/PopupModal/PopupModal.stories.js +19 -15
  143. package/lib/components/Sector/Sector.js +6 -8
  144. package/lib/components/Sector/Sector.test.js +20 -19
  145. package/lib/components/Sector/sectorIcons.js +2 -2
  146. package/lib/components/SevereEvent/Eta/Eta.js +52 -49
  147. package/lib/components/SevereEvent/Eta/styles.js +6 -10
  148. package/lib/components/SevereEvent/SevereEvent.js +37 -30
  149. package/lib/components/Spinner/Spinner.js +8 -8
  150. package/lib/components/Spinner/Spinner.stories.js +6 -4
  151. package/lib/components/Spinner/styles.js +14 -22
  152. package/lib/components/Tabs/Tabs.js +29 -21
  153. package/lib/components/Tabs/Tabs.stories.js +6 -4
  154. package/lib/components/Tabs/assets/index.js +5 -5
  155. package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +15 -12
  156. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +51 -40
  157. package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +31 -19
  158. package/lib/components/TimeRangeSelector/TimeRangeHelper.js +25 -20
  159. package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +13 -13
  160. package/lib/components/TimeRangeSelector/TimeRangeList.js +24 -23
  161. package/lib/components/TimeRangeSelector/TimeRangeOptions.js +25 -17
  162. package/lib/components/TimeRangeSelector/TimeRangeSelector.js +32 -31
  163. package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +6 -4
  164. package/lib/components/TimeRangeSelector/constants.js +3 -3
  165. package/lib/components/Toggle/Toggle.js +17 -12
  166. package/lib/components/TrendGraph/TrendGraph.js +39 -23
  167. package/lib/components/TrendGraphNVL/TrendGraphNVL.js +33 -27
  168. package/lib/development-environment/index.js +12 -8
  169. package/lib/development-environment/mock/browser.js +4 -2
  170. package/lib/development-environment/mock/get.js +10 -8
  171. package/lib/development-environment/mock/handlers.js +2 -2
  172. package/lib/development-environment/mock/mockBus.js +4 -4
  173. package/lib/development-environment/mock/mockObjects/area-trends-graph.js +2 -2
  174. package/lib/development-environment/mock/mockObjects/areaInformation.js +2 -2
  175. package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +2 -2
  176. package/lib/development-environment/mock/mockObjects/areaSitesData.js +2 -2
  177. package/lib/development-environment/mock/mockObjects/areasJson.js +2 -2
  178. package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +2 -2
  179. package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +2 -2
  180. package/lib/development-environment/mock/mockObjects/data-menuData.js +2 -2
  181. package/lib/development-environment/mock/mockObjects/data-search.js +2 -2
  182. package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +2 -2
  183. package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +2 -2
  184. package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +2 -2
  185. package/lib/development-environment/mock/mockObjects/eventsJson.js +2 -2
  186. package/lib/development-environment/mock/mockObjects/metascore.js +2 -2
  187. package/lib/development-environment/mock/mockObjects/permissionsJson.js +2 -2
  188. package/lib/development-environment/mock/mockObjects/pointsJson.js +2 -2
  189. package/lib/development-environment/mock/mockObjects/site-info.js +2 -2
  190. package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +2 -2
  191. package/lib/development-environment/togly/ToglyDashboard.js +22 -13
  192. package/lib/development-environment/togly/ToglyItem.js +31 -36
  193. package/lib/development-environment/togly/init.js +2 -2
  194. package/lib/development-environment/togly/macro.js +10 -14
  195. package/lib/development-environment/togly/useDoubleKeyDown.js +9 -7
  196. package/lib/development-environment/togly/useLocalStorage.js +18 -13
  197. package/lib/hooks/useApi.js +55 -19
  198. package/lib/hooks/useApiWithDashboardQuery.js +49 -30
  199. package/lib/hooks/useClickOutside.js +3 -3
  200. package/lib/hooks/useInitializeHeaders.js +5 -5
  201. package/lib/hooks/useKandoFetch.js +29 -16
  202. package/lib/hooks/useMap.js +34 -22
  203. package/lib/hooks/useNavContext.js +26 -22
  204. package/lib/hooks/useRemoveExistingLayers.js +6 -6
  205. package/lib/hooks/useUpdateEventBodyTail.js +17 -13
  206. package/lib/hooks/useUserTimeZone.js +30 -33
  207. package/lib/hooks/useUserTimeZone.test.js +22 -19
  208. package/lib/hooks/useWindowSize.js +14 -7
  209. package/lib/i18n/en.json +5 -0
  210. package/lib/i18n/he.json +5 -0
  211. package/lib/index.js +12 -11
  212. package/lib/macros/getVersion.js +3 -3
  213. package/lib/pages/AreaPage/AreaPage.js +67 -34
  214. package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -16
  215. package/lib/pages/AreaPage/Dashboard/Dashboard.js +34 -29
  216. package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +25 -17
  217. package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +4 -4
  218. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
  219. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +11 -11
  220. package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +3 -3
  221. package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +2 -2
  222. package/lib/pages/AreaPage/Dashboard/Sites/styles.js +4 -4
  223. package/lib/pages/AssessmentPage/AssessmentPage.js +46 -40
  224. package/lib/pages/CannyWidget/Feedback.js +13 -13
  225. package/lib/pages/CovidPage/CovidPage.js +13 -8
  226. package/lib/pages/CovidPage/components/Body.js +27 -25
  227. package/lib/pages/CovidPage/components/Map.js +39 -29
  228. package/lib/pages/CovidPage/components/Sidebar.js +15 -16
  229. package/lib/pages/CovidPage/components/Summary.js +27 -20
  230. package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +33 -27
  231. package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +73 -51
  232. package/lib/pages/CovidPage/components/areas/Area.js +40 -29
  233. package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +46 -55
  234. package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +35 -32
  235. package/lib/pages/CovidPage/components/areas/AreasList.js +46 -34
  236. package/lib/pages/CovidPage/components/areas/Sort.js +14 -11
  237. package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
  238. package/lib/pages/DashboardMap/AreaCard.js +28 -28
  239. package/lib/pages/DashboardMap/AssessmentIcon.js +7 -8
  240. package/lib/pages/DashboardMap/Capacity.js +80 -31
  241. package/lib/pages/DashboardMap/FactoryCard.js +29 -33
  242. package/lib/pages/DashboardMap/HighchartsOptions.js +4 -5
  243. package/lib/pages/DashboardMap/List.js +112 -74
  244. package/lib/pages/DashboardMap/ListContext.js +19 -15
  245. package/lib/pages/DashboardMap/Loader.js +2 -2
  246. package/lib/pages/DashboardMap/SeverityBadge.js +18 -10
  247. package/lib/pages/DashboardMap/WWTPMap.js +103 -80
  248. package/lib/pages/DashboardMap/WaterDischarge.js +10 -10
  249. package/lib/pages/DashboardMap/Widget.js +71 -54
  250. package/lib/pages/DashboardMap/utils.js +65 -48
  251. package/lib/pages/EventsPage/Body/Body.js +15 -20
  252. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +19 -17
  253. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +35 -27
  254. package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +6 -8
  255. package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +7 -11
  256. package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +30 -21
  257. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +64 -53
  258. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +31 -19
  259. package/lib/pages/EventsPage/EventsPage.js +10 -7
  260. package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +38 -26
  261. package/lib/pages/EventsPage/events/MoreInfo.js +16 -17
  262. package/lib/pages/EventsPage/events/Sidebar.js +16 -21
  263. package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +7 -7
  264. package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +20 -17
  265. package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +35 -30
  266. package/lib/pages/EventsPage/events/event_info/EventDetails.js +37 -40
  267. package/lib/pages/EventsPage/events/event_info/EventInfo.js +42 -43
  268. package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +4 -4
  269. package/lib/pages/EventsPage/events/event_info/EventSection.js +19 -17
  270. package/lib/pages/EventsPage/events/event_info/EventSection.test.js +38 -43
  271. package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +47 -39
  272. package/lib/pages/EventsPage/events/event_info/Header/Header.js +4 -6
  273. package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +33 -30
  274. package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +6 -6
  275. package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +36 -29
  276. package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +6 -4
  277. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +10 -10
  278. package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +9 -7
  279. package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +21 -22
  280. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +19 -12
  281. package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +3 -5
  282. package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +9 -11
  283. package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +26 -22
  284. package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +8 -12
  285. package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +7 -7
  286. package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +4 -6
  287. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +2 -2
  288. package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +10 -12
  289. package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +8 -10
  290. package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +12 -10
  291. package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +3 -5
  292. package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +5 -7
  293. package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +5 -7
  294. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +4 -6
  295. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +9 -11
  296. package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +15 -15
  297. package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +6 -6
  298. package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +5 -7
  299. package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +15 -17
  300. package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +4 -4
  301. package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +8 -10
  302. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +11 -16
  303. package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +8 -9
  304. package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +2 -2
  305. package/lib/pages/EventsPage/events/event_info/Timelines/style.js +3 -3
  306. package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +38 -25
  307. package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +36 -29
  308. package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +9 -11
  309. package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +17 -15
  310. package/lib/pages/EventsPage/events/event_info/sources/Source.js +30 -27
  311. package/lib/pages/EventsPage/events/event_info/sources/Sources.js +26 -23
  312. package/lib/pages/EventsPage/events/event_info/styles.js +12 -20
  313. package/lib/pages/EventsPage/events/events_list/EventItem.js +19 -18
  314. package/lib/pages/EventsPage/events/events_list/EventUtils.js +10 -10
  315. package/lib/pages/EventsPage/events/events_list/EventsList.js +145 -124
  316. package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +55 -40
  317. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +115 -79
  318. package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +77 -60
  319. package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +41 -38
  320. package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +36 -29
  321. package/lib/pages/EventsPage/events/events_list/Sort.js +16 -13
  322. package/lib/pages/ImportFileWizard/FileUploadRespones.js +20 -13
  323. package/lib/pages/ImportFileWizard/ImportButtomButtons.js +4 -6
  324. package/lib/pages/ImportFileWizard/ImportFile.js +22 -20
  325. package/lib/pages/ImportFileWizard/ResponseBody.js +33 -24
  326. package/lib/pages/ImportFileWizard/ValidationForm.js +22 -23
  327. package/lib/pages/ImportFileWizard/ValidationResponse.js +21 -21
  328. package/lib/pages/ImportFileWizard/importFileUtils.js +1 -1
  329. package/lib/pages/ImportGisPage/ImportGisContainer.js +24 -21
  330. package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +23 -21
  331. package/lib/pages/ImportGisPage/importGisUtils.js +21 -13
  332. package/lib/pages/ImportGisProcess/index.js +15 -12
  333. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +12 -7
  334. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +19 -17
  335. package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +3 -3
  336. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +65 -56
  337. package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +8 -6
  338. package/lib/pages/NotificationsPage/Notification/Notification.js +12 -16
  339. package/lib/pages/NotificationsPage/Notifications.mock.js +2 -2
  340. package/lib/pages/NotificationsPage/Notifications.stories.js +6 -4
  341. package/lib/pages/NotificationsPage/NotificationsPage.js +36 -18
  342. package/lib/pages/NotificationsPage/assets/index.js +9 -9
  343. package/lib/pages/NotificationsPageV2/NotificationsPage.js +97 -71
  344. package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +63 -94
  345. package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +16 -14
  346. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +16 -18
  347. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +21 -17
  348. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +21 -17
  349. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +22 -18
  350. package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +69 -83
  351. package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +22 -18
  352. package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +74 -74
  353. package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +95 -97
  354. package/lib/pages/NotificationsPageV2/notificationUtils.js +48 -54
  355. package/lib/pages/OldSitePage/OldSitePage.js +132 -57
  356. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +5 -5
  357. package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -3
  358. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +6 -8
  359. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +20 -18
  360. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +7 -9
  361. package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +18 -12
  362. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +12 -16
  363. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -3
  364. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -18
  365. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +63 -51
  366. package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +7 -9
  367. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +53 -29
  368. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +4 -4
  369. package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  370. package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +10 -11
  371. package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +11 -10
  372. package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +28 -32
  373. package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +29 -27
  374. package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +4 -4
  375. package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +12 -18
  376. package/lib/pages/ProfilePage/Container.js +2 -2
  377. package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +44 -28
  378. package/lib/pages/ProfilePage/ProfilePage.js +237 -120
  379. package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +33 -25
  380. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +16 -19
  381. package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +30 -28
  382. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +117 -57
  383. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +20 -17
  384. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +10 -12
  385. package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +41 -39
  386. package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +26 -25
  387. package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +16 -16
  388. package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +15 -13
  389. package/lib/pages/SamplingsPage/NavigationDropdown.js +32 -45
  390. package/lib/pages/SamplingsPage/NewSamplingAction.js +100 -76
  391. package/lib/pages/SamplingsPage/SamplingMobileModal.js +101 -129
  392. package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +22 -21
  393. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +22 -34
  394. package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +59 -36
  395. package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +18 -15
  396. package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +7 -9
  397. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +194 -110
  398. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +55 -49
  399. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +43 -47
  400. package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +45 -49
  401. package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +20 -19
  402. package/lib/pages/SamplingsPage/SamplingProperties/styles.js +3 -3
  403. package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +6 -10
  404. package/lib/pages/SamplingsPage/SamplingsMobileItem.js +54 -58
  405. package/lib/pages/SamplingsPage/SamplingsMobileList.js +28 -21
  406. package/lib/pages/SamplingsPage/SamplingsPage.js +33 -27
  407. package/lib/pages/SamplingsPage/SamplingsPageContainer.js +58 -50
  408. package/lib/pages/SamplingsPage/samplingsPageUtils.js +76 -68
  409. package/lib/pages/SitePage/DischargePattern/DischargePattern.js +4 -6
  410. package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +13 -14
  411. package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +13 -10
  412. package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
  413. package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +5 -3
  414. package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +10 -14
  415. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +8 -9
  416. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +23 -26
  417. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +17 -14
  418. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +32 -36
  419. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +7 -9
  420. package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +24 -15
  421. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +12 -16
  422. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +5 -3
  423. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +12 -18
  424. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +70 -58
  425. package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +7 -9
  426. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +26 -15
  427. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +5 -5
  428. package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +12 -10
  429. package/lib/pages/SitePage/SamplingParameters/body/Body.js +9 -9
  430. package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +37 -29
  431. package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +11 -11
  432. package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +11 -10
  433. package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +59 -60
  434. package/lib/pages/SitePage/SamplingParameters/dataParser.js +39 -30
  435. package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +9 -11
  436. package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +4 -4
  437. package/lib/pages/SitePage/SamplingParameters/styles/styles.js +12 -18
  438. package/lib/pages/SitePage/SiteInformation/EmptyState.js +7 -11
  439. package/lib/pages/SitePage/SiteInformation/SiteInformation.js +48 -41
  440. package/lib/pages/SitePage/SitePage.js +84 -41
  441. package/lib/pages/UploadLabResult/index.js +13 -13
  442. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +35 -26
  443. package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +8 -6
  444. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +8 -9
  445. package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +5 -3
  446. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +48 -47
  447. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +6 -10
  448. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +4 -4
  449. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +6 -4
  450. package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +12 -13
  451. package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +12 -15
  452. package/lib/pages/UtilityDashboardPage/TopBar/constants.js +7 -7
  453. package/lib/pages/UtilityDashboardPage/TopBar/styles.js +2 -2
  454. package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +38 -23
  455. package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +30 -26
  456. package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +18 -17
  457. package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +13 -7
  458. package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +31 -27
  459. package/lib/pages/WbeDashboard/ExpandableComponent.js +8 -9
  460. package/lib/pages/WbeDashboard/GraphWrapper.js +36 -30
  461. package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -17
  462. package/lib/pages/WbeDashboard/SearchInput.js +20 -15
  463. package/lib/pages/WbeDashboard/SummaryGraph.js +76 -50
  464. package/lib/pages/WbeDashboard/SummaryGraphModal.js +17 -19
  465. package/lib/pages/WbeDashboard/Tabs.js +11 -11
  466. package/lib/pages/WbeDashboard/WbeDashboardPage.js +213 -151
  467. package/lib/pages/WbeDashboard/WbeSummaryBar.js +48 -40
  468. package/lib/pages/WwtpPage/DashboardCard.js +23 -26
  469. package/lib/pages/WwtpPage/DischargePatternCard.js +23 -14
  470. package/lib/pages/WwtpPage/InletsCard/InletsBar.js +22 -26
  471. package/lib/pages/WwtpPage/InletsCard/InletsCard.js +18 -19
  472. package/lib/pages/WwtpPage/Map.js +3 -5
  473. package/lib/pages/WwtpPage/OrganicCard.js +2 -2
  474. package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +2 -2
  475. package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +6 -8
  476. package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +8 -9
  477. package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +14 -18
  478. package/lib/pages/WwtpPage/PredictionCard.js +2 -2
  479. package/lib/pages/WwtpPage/TrendCard.js +19 -18
  480. package/lib/pages/WwtpPage/UpgradeBox.js +3 -3
  481. package/lib/pages/WwtpPage/WwtpPage.js +8 -8
  482. package/lib/pages/WwtpPage/WwtpPageContainer.js +16 -21
  483. package/lib/providers/Slideshow/SlideshowContext.js +9 -11
  484. package/lib/providers/Slideshow/SlideshowProvider.js +38 -22
  485. package/lib/providers/Slideshow/SlideshowRunner.js +19 -17
  486. package/lib/providers/UrlHistory/UrlHistoryContext.js +4 -6
  487. package/lib/providers/UrlHistory/UrlHistoryProvider.js +11 -12
  488. package/lib/providers/UrlHistory/index.js +2 -2
  489. package/lib/providers/UrlHistory/useLastVisited.js +5 -5
  490. package/lib/store/ImportGis/actionTypes.js +1 -1
  491. package/lib/store/ImportGis/actionsCreator.js +5 -7
  492. package/lib/store/ImportGis/reducer.js +29 -40
  493. package/lib/store/WBE/actionTypes.js +2 -2
  494. package/lib/store/WBE/reducer.js +9 -13
  495. package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +14 -24
  496. package/lib/store/areas/actionTypes.js +4 -4
  497. package/lib/store/areas/actions.js +13 -7
  498. package/lib/store/areas/reducer.js +6 -8
  499. package/lib/store/context/actionTypes.js +3 -3
  500. package/lib/store/context/actions.js +3 -3
  501. package/lib/store/context/contextMiddlewares.js +16 -14
  502. package/lib/store/context/reducer.js +9 -13
  503. package/lib/store/dashboard/dashboardSlice.js +10 -18
  504. package/lib/store/edges/actionTypes.js +5 -5
  505. package/lib/store/edges/actions.js +8 -4
  506. package/lib/store/edges/reducer.js +17 -13
  507. package/lib/store/events/actionTypes.js +17 -17
  508. package/lib/store/events/actions.js +7 -3
  509. package/lib/store/events/reducer.js +49 -42
  510. package/lib/store/global/actionTypes.js +11 -11
  511. package/lib/store/global/actions.js +6 -8
  512. package/lib/store/global/reducer.js +10 -11
  513. package/lib/store/permissions/permissionsSlice.js +8 -12
  514. package/lib/store/points/actionTypes.js +3 -3
  515. package/lib/store/points/actions.js +8 -4
  516. package/lib/store/points/reducer.js +5 -7
  517. package/lib/store/rootActionTypes.js +2 -2
  518. package/lib/store/rootReducer.js +12 -17
  519. package/lib/store/rootStore.js +5 -5
  520. package/lib/store/samplings/actionTypes.js +1 -1
  521. package/lib/store/samplings/reducer.js +14 -16
  522. package/lib/styles/StylesLayout.js +3 -5
  523. package/lib/styles/theme/theme.js +27 -26
  524. package/lib/test/mocks/browser.js +4 -2
  525. package/lib/test/test-utils.js +15 -17
  526. package/lib/ui-kit/Button/Button.js +80 -128
  527. package/lib/ui-kit/Button/Button.test.js +29 -24
  528. package/lib/ui-kit/Checkbox/Checkbox.js +20 -30
  529. package/lib/ui-kit/ContentCard/ContentCard.js +18 -15
  530. package/lib/ui-kit/Dashboard/Dashboard.js +22 -25
  531. package/lib/ui-kit/DropDown/DropDown.js +24 -23
  532. package/lib/ui-kit/DropDown/DropDown.test.js +12 -12
  533. package/lib/ui-kit/DropDown/DropDownItem.js +21 -24
  534. package/lib/ui-kit/DropDown/DropdownToggle.js +8 -12
  535. package/lib/ui-kit/EmptyState/EmptyState.js +4 -6
  536. package/lib/ui-kit/IconAction/IconAction.js +5 -7
  537. package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +64 -48
  538. package/lib/ui-kit/InfoTooltip/InfoTooltip.js +52 -69
  539. package/lib/ui-kit/InletsPie/InletsPie.js +13 -15
  540. package/lib/ui-kit/InletsPie/options.js +6 -6
  541. package/lib/ui-kit/KandoList/KandoList.js +12 -14
  542. package/lib/ui-kit/KandoTable/KandoTable.js +40 -48
  543. package/lib/ui-kit/KandoTable/KandoTable.test.js +22 -16
  544. package/lib/ui-kit/Layout/Layout.js +4 -6
  545. package/lib/ui-kit/MobileInput/MobileInput.js +50 -60
  546. package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +16 -13
  547. package/lib/ui-kit/OrganicEvents/GaugeChart.js +6 -8
  548. package/lib/ui-kit/OrganicEvents/OrganicEvents.js +6 -6
  549. package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +20 -27
  550. package/lib/ui-kit/OrganicEvents/TextInfo.js +10 -15
  551. package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +8 -10
  552. package/lib/ui-kit/SamplingStatus/SamplingStatus.js +17 -14
  553. package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +3 -3
  554. package/lib/ui-kit/ScoreGauge/ScoreGauge.js +20 -20
  555. package/lib/ui-kit/ScoreGauge/constant.js +3 -3
  556. package/lib/ui-kit/TimeLineChart/TrendChart.js +42 -54
  557. package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +7 -8
  558. package/lib/ui-kit/Tooltip/Tooltip.js +8 -14
  559. package/lib/ui-kit/index.js +8 -8
  560. package/lib/ui-kit/kandoStepper/KandoStepper.js +12 -12
  561. package/lib/ui-kit/siteName/SiteName.js +8 -11
  562. package/lib/utilities/ActionUtility.js +7 -7
  563. package/lib/utilities/Alert.js +17 -21
  564. package/lib/utilities/Analytics.js +11 -11
  565. package/lib/utilities/Array.js +5 -4
  566. package/lib/utilities/Enum.js +51 -15
  567. package/lib/utilities/ErrorBoundary.js +41 -27
  568. package/lib/utilities/File.js +69 -40
  569. package/lib/utilities/GetDir.js +7 -8
  570. package/lib/utilities/KandoDate.js +15 -7
  571. package/lib/utilities/KandoModal.js +26 -16
  572. package/lib/utilities/LocalStorage.js +10 -8
  573. package/lib/utilities/ThousandsToK.js +3 -3
  574. package/lib/utilities/TimeFormat.js +20 -21
  575. package/lib/utilities/Truncate.js +25 -17
  576. package/lib/utilities/edgesMath.js +15 -14
  577. package/lib/utilities/i18n.js +3 -3
  578. package/lib/utilities/kql.js +14 -12
  579. package/lib/utilities/map/icons.js +3 -3
  580. package/lib/utilities/polylinedecorator.js +112 -87
  581. package/lib/utilities/scoreToData.js +17 -17
  582. package/lib/utilities/scoreToData.test.js +5 -5
  583. package/lib/utilities/time.js +8 -8
  584. package/lib/utilities/uploadToS3.js +11 -11
  585. package/lib/utilities/urls.js +59 -61
  586. package/package.json +1 -1
@@ -28,34 +28,34 @@ var _MapUtils = require("../MapUtils");
28
28
  var _PointIcon = require("./PointIcon");
29
29
  var _water_reuse = _interopRequireDefault(require("../../../assets/icons/water_reuse.svg"));
30
30
  var _utils = require("pages/DashboardMap/utils");
31
- const isCollectorFocused = (point, event) => {
31
+ var isCollectorFocused = function isCollectorFocused(point, event) {
32
32
  var _event$observations;
33
33
  return (event === null || event === void 0 ? void 0 : (_event$observations = event.observations) === null || _event$observations === void 0 ? void 0 : _event$observations.length) === 1 && point.id === event.observations[0].point_id;
34
34
  };
35
35
  exports.isCollectorFocused = isCollectorFocused;
36
- const buildManholeTooltipString = point => {
37
- let string = `${point.group.name} `;
36
+ var buildManholeTooltipString = function buildManholeTooltipString(point) {
37
+ var string = "".concat(point.group.name, " ");
38
38
  if (pointIsFactory(point)) {
39
- string += `<br/>Sector: ${point.group.sector_name}`;
40
- string += `<br/>Water Consumption: ${point.group.water_discharge}`;
39
+ string += "<br/>Sector: ".concat(point.group.sector_name);
40
+ string += "<br/>Water Consumption: ".concat(point.group.water_discharge);
41
41
  } else {
42
- string = `${point.name}`;
42
+ string = "".concat(point.name);
43
43
  }
44
44
  return string;
45
45
  };
46
- const bubbleForWWTP = args => {
47
- const pointCustomIcon = _leaflet.default.marker(args.markerLocation, {
46
+ var bubbleForWWTP = function bubbleForWWTP(args) {
47
+ var pointCustomIcon = _leaflet.default.marker(args.markerLocation, {
48
48
  icon: (0, _PointIcon.getPointIconByType)(args.wwtpPoint.group.type, args.wwtpPoint.name, '', false, true),
49
49
  riseOnHover: true
50
50
  });
51
51
  return pointCustomIcon;
52
52
  };
53
53
  exports.bubbleForWWTP = bubbleForWWTP;
54
- const createBubblePoint = function (markerLocation, point, map, hovered, layerGroup) {
55
- let flow_rate_unit = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'gd_us';
56
- let handleClick = arguments.length > 6 ? arguments[6] : undefined;
57
- const subtitle = pointIsFactory(point) ? point.group.sector_name : '';
58
- let pointCustomIcon = _leaflet.default.marker(markerLocation, {
54
+ var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered, layerGroup) {
55
+ var flow_rate_unit = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'gd_us';
56
+ var handleClick = arguments.length > 6 ? arguments[6] : undefined;
57
+ var subtitle = pointIsFactory(point) ? point.group.sector_name : '';
58
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
59
59
  icon: (0, _PointIcon.getPointIconByType)(point.group.type, point.name, subtitle, false, true),
60
60
  riseOnHover: true
61
61
  });
@@ -70,31 +70,28 @@ const createBubblePoint = function (markerLocation, point, map, hovered, layerGr
70
70
  }
71
71
  handleMarkerEvents(map, point, pointCustomIcon, handleClick);
72
72
  if (point.relatedEventsAmount) {
73
- let pointCustomIcon = _leaflet.default.marker(markerLocation, {
73
+ var _pointCustomIcon = _leaflet.default.marker(markerLocation, {
74
74
  icon: _leaflet.default.divIcon({
75
- className: `
76
- ${point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount'}
77
- ${point.relatedEventsAmount > 2 ? 'alert-color' : ''}
78
- `,
79
- html: `<p>${point.relatedEventsAmount}</p>`,
75
+ className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
76
+ html: "<p>".concat(point.relatedEventsAmount, "</p>"),
80
77
  iconAnchor: (0, _MapUtils.eventsCountIcon)(map._zoom).iconAnchor
81
78
  }),
82
79
  riseOnHover: false,
83
80
  opacity: hovered ? 1 : 0
84
81
  });
85
- pointCustomIcon['kando_object_id'] = point.id;
86
- pointCustomIcon['kando_object'] = 'IconNumber';
87
- if (hovered) pointCustomIcon['kando_object'] = 'IconNumberHovered';
82
+ _pointCustomIcon['kando_object_id'] = point.id;
83
+ _pointCustomIcon['kando_object'] = 'IconNumber';
84
+ if (hovered) _pointCustomIcon['kando_object'] = 'IconNumberHovered';
88
85
  }
89
86
  };
90
87
  exports.createBubblePoint = createBubblePoint;
91
- const createManholePoint = (markerLocation, point, map, hovered, layerGroup) => {
92
- let pointIcon = new _leaflet.default.Icon({
88
+ var createManholePoint = function createManholePoint(markerLocation, point, map, hovered, layerGroup) {
89
+ var pointIcon = new _leaflet.default.Icon({
93
90
  iconUrl: _whitePoint.default,
94
91
  iconSize: [9, 9],
95
92
  iconAnchor: [4.5, 4.5]
96
93
  });
97
- let manholeIcon = new _leaflet.default.Marker(markerLocation, {
94
+ var manholeIcon = new _leaflet.default.Marker(markerLocation, {
98
95
  icon: pointIcon,
99
96
  riseOnHover: true
100
97
  });
@@ -106,7 +103,7 @@ const createManholePoint = (markerLocation, point, map, hovered, layerGroup) =>
106
103
  layerGroup.addLayer(manholeIcon);
107
104
  };
108
105
  exports.createManholePoint = createManholePoint;
109
- const matchIconToPoint = (point, event) => {
106
+ var matchIconToPoint = function matchIconToPoint(point, event) {
110
107
  switch (point.group.type) {
111
108
  case 'Groups::Factory':
112
109
  if (combinedFactoryIcon.length === 2) {
@@ -160,9 +157,9 @@ const matchIconToPoint = (point, event) => {
160
157
  }
161
158
  };
162
159
  exports.matchIconToPoint = matchIconToPoint;
163
- const standardBackground = function () {
164
- let secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
165
- let third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
160
+ var standardBackground = function standardBackground() {
161
+ var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
162
+ var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
166
163
  return _leaflet.default.icon({
167
164
  iconUrl: _whitePinBlackShadow.default,
168
165
  iconSize: secondary ? [0, 0] : [0, 0],
@@ -171,7 +168,7 @@ const standardBackground = function () {
171
168
  });
172
169
  };
173
170
  exports.standardBackground = standardBackground;
174
- const combinedFactoryIcon = [_leaflet.default.icon({
171
+ var combinedFactoryIcon = [_leaflet.default.icon({
175
172
  iconUrl: _yellowCircle.default,
176
173
  iconSize: [0, 0],
177
174
  iconAnchor: [10.7, 33.7],
@@ -183,7 +180,7 @@ const combinedFactoryIcon = [_leaflet.default.icon({
183
180
  popupAnchor: [0, -30]
184
181
  })];
185
182
  exports.combinedFactoryIcon = combinedFactoryIcon;
186
- const combinedPumpStationIcon = [_leaflet.default.icon({
183
+ var combinedPumpStationIcon = [_leaflet.default.icon({
187
184
  iconUrl: _greenCircle.default,
188
185
  iconSize: [0, 0],
189
186
  iconAnchor: [10.7, 33.7],
@@ -195,14 +192,14 @@ const combinedPumpStationIcon = [_leaflet.default.icon({
195
192
  popupAnchor: [0, -30]
196
193
  })];
197
194
  exports.combinedPumpStationIcon = combinedPumpStationIcon;
198
- const combinedCollectorsIcon = [_leaflet.default.icon({
195
+ var combinedCollectorsIcon = [_leaflet.default.icon({
199
196
  iconUrl: _pinWater.default,
200
197
  iconSize: [0, 0],
201
198
  iconAnchor: [25, 50],
202
199
  popupAnchor: [0, -30]
203
200
  })];
204
201
  exports.combinedCollectorsIcon = combinedCollectorsIcon;
205
- const combinedWWTPIcon = [_leaflet.default.icon({
202
+ var combinedWWTPIcon = [_leaflet.default.icon({
206
203
  iconUrl: _brightBlueCircle.default,
207
204
  iconSize: [0, 0],
208
205
  iconAnchor: [10.7, 33.7],
@@ -214,7 +211,7 @@ const combinedWWTPIcon = [_leaflet.default.icon({
214
211
  popupAnchor: [0, -30]
215
212
  })];
216
213
  exports.combinedWWTPIcon = combinedWWTPIcon;
217
- const selectedBackground = () => {
214
+ var selectedBackground = function selectedBackground() {
218
215
  return _leaflet.default.icon({
219
216
  iconUrl: _redPinRedShadow.default,
220
217
  iconSize: [0, 0],
@@ -223,7 +220,7 @@ const selectedBackground = () => {
223
220
  });
224
221
  };
225
222
  exports.selectedBackground = selectedBackground;
226
- const belongsToSourceBackground = () => {
223
+ var belongsToSourceBackground = function belongsToSourceBackground() {
227
224
  return _leaflet.default.icon({
228
225
  iconUrl: _whitePinRedShadow.default,
229
226
  iconSize: [0, 0],
@@ -232,23 +229,27 @@ const belongsToSourceBackground = () => {
232
229
  });
233
230
  };
234
231
  exports.belongsToSourceBackground = belongsToSourceBackground;
235
- const markerBelongsToSelectedSource = (event, point) => {
236
- let source;
232
+ var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
233
+ var source;
237
234
  if (event !== null && event !== undefined) {
238
- source = event.sources.filter(source => source.point_id === point.id)[0];
235
+ source = event.sources.filter(function (source) {
236
+ return source.point_id === point.id;
237
+ })[0];
239
238
  }
240
239
  return event !== null && source && event.selected_source === source.point_id;
241
240
  };
242
241
  exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
243
- const markerBelongsToSource = (event, point) => {
242
+ var markerBelongsToSource = function markerBelongsToSource(event, point) {
244
243
  if (event === undefined) return;
245
- return event !== null && event.sources.filter(source => source.point_id === point.id)[0];
244
+ return event !== null && event.sources.filter(function (source) {
245
+ return source.point_id === point.id;
246
+ })[0];
246
247
  };
247
248
  exports.markerBelongsToSource = markerBelongsToSource;
248
- const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) => {
249
+ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
249
250
  // iconSize: [width, height],
250
251
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
251
- let samplingIcon = [_leaflet.default.icon({
252
+ var samplingIcon = [_leaflet.default.icon({
252
253
  iconUrl: _blueCircle.default,
253
254
  iconSize: secondaryIcon ? [0, 0] : [0, 0],
254
255
  iconAnchor: secondaryIcon ? [-7, 15] : [10.7, 33.7],
@@ -259,7 +260,7 @@ const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, even
259
260
  iconAnchor: secondaryIcon ? [-8, 13] : [5, 30],
260
261
  popupAnchor: [0, -30]
261
262
  })];
262
- let thirdIcon = false;
263
+ var thirdIcon = false;
263
264
  if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
264
265
  samplingIcon.unshift(selectedBackground());
265
266
  } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
@@ -268,8 +269,8 @@ const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, even
268
269
  thirdIcon = true;
269
270
  samplingIcon.unshift(standardBackground(secondaryIcon, thirdIcon));
270
271
  }
271
- samplingIcon.forEach((icon, index) => {
272
- let pointCustomIcon = _leaflet.default.marker(markerLocation, {
272
+ samplingIcon.forEach(function (icon, index) {
273
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
273
274
  icon: icon,
274
275
  riseOnHover: false
275
276
  });
@@ -285,10 +286,10 @@ const createSamplingIconPoint = (markerLocation, secondaryIcon, map, point, even
285
286
  });
286
287
  };
287
288
  exports.createSamplingIconPoint = createSamplingIconPoint;
288
- const createObservationIconPoint = (markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) => {
289
+ var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered, layerGroup) {
289
290
  // iconSize: [width, height],
290
291
  // Icon Anchor: [(-right)(+left), (-down)(+up)]
291
- let observationIcon = [_leaflet.default.icon({
292
+ var observationIcon = [_leaflet.default.icon({
292
293
  iconUrl: _pinkCircle.default,
293
294
  iconSize: secondaryIcon ? [0, 0] : [0, 0],
294
295
  iconAnchor: secondaryIcon ? [-7, 40] : [10.7, 33.7],
@@ -306,8 +307,8 @@ const createObservationIconPoint = (markerLocation, secondaryIcon, map, point, e
306
307
  } else {
307
308
  observationIcon.unshift(standardBackground(secondaryIcon));
308
309
  }
309
- observationIcon.forEach((icon, index) => {
310
- let pointCustomIcon = _leaflet.default.marker(markerLocation, {
310
+ observationIcon.forEach(function (icon, index) {
311
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
311
312
  icon: icon,
312
313
  riseOnHover: false
313
314
  });
@@ -323,73 +324,33 @@ const createObservationIconPoint = (markerLocation, secondaryIcon, map, point, e
323
324
  });
324
325
  };
325
326
  exports.createObservationIconPoint = createObservationIconPoint;
326
- const createSamplingIcons = (markerLocation, event, point, map, hovered, layerGroup) => {
327
- let sampledPointIds = event.samplings.map(s => s.point_id);
327
+ var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered, layerGroup) {
328
+ var sampledPointIds = event.samplings.map(function (s) {
329
+ return s.point_id;
330
+ });
328
331
  if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
329
332
  createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered, layerGroup);
330
333
  }
331
334
  };
332
335
  exports.createSamplingIcons = createSamplingIcons;
333
- const popupContent = (obs, point) => {
336
+ var popupContent = function popupContent(obs, point) {
334
337
  if (obs === null) {
335
- return `
336
- <div class="event-popup">
337
- <div class="popup-graph-icon popup-graph-icon-${point.id}">
338
- <img src="${_lineChart.default}"/>
339
- </div>
340
- <div class="popup-content">
341
- <h5 class="popup-content__site-name"><b>${point.group.name}</b></h5>
342
- <hr/>
343
-
344
- <div id="sector"></div>
345
- </div>
346
- </div>
347
- `;
338
+ return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(point.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <hr/>\n \n <div id=\"sector\"></div>\n </div>\n </div>\n ");
348
339
  } else {
349
- return `
350
- <div class="event-popup">
351
- <div class="popup-graph-icon popup-graph-icon-${obs.id}">
352
- <img src="${_lineChart.default}"/>
353
- </div>
354
- <div class="popup-content">
355
- <h5 class="popup-content__site-name"><b>${point.group.name}</b></h5>
356
- <div class="popup-content__severity">
357
- <p class="popup-content__severity-p">${_i18n.default.t(`events_overview.severity`)}</p>
358
- <span class="${'popup-content__severity--' + obs.severity}">
359
- <b class="popup-content__severity-b">
360
- ${_i18n.default.t(`events_overview.severities.${obs.severity}`)}
361
- </b>
362
- </span>
363
- </div>
364
-
365
- <hr class="popup-content__hr" />
366
-
367
- <div class="popup-content__discharge-time">
368
- <div>
369
- <p class="popup-content__severity-p">${_i18n.default.t(`events_overview.first_seen`)}:</p>
370
- <span><b id="first-seen-popup"></b></span>
371
- </div>
372
- <div>
373
- <p class="popup-content__severity-p">${_i18n.default.t(`events_overview.last_seen`)}:</p>
374
- <span><b id="last-seen-popup"></b></span>
375
- </div>
376
- </div>
377
- </div>
378
- </div>
379
- `;
340
+ return "\n <div class=\"event-popup\">\n <div class=\"popup-graph-icon popup-graph-icon-".concat(obs.id, "\">\n <img src=\"").concat(_lineChart.default, "\"/>\n </div>\n <div class=\"popup-content\">\n <h5 class=\"popup-content__site-name\"><b>").concat(point.group.name, "</b></h5>\n <div class=\"popup-content__severity\">\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.severity"), "</p>\n <span class=\"").concat('popup-content__severity--' + obs.severity, "\">\n <b class=\"popup-content__severity-b\">\n ").concat(_i18n.default.t("events_overview.severities.".concat(obs.severity)), "\n </b>\n </span>\n </div>\n \n <hr class=\"popup-content__hr\" />\n\n <div class=\"popup-content__discharge-time\">\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.first_seen"), ":</p>\n <span><b id=\"first-seen-popup\"></b></span>\n </div>\n <div>\n <p class=\"popup-content__severity-p\">").concat(_i18n.default.t("events_overview.last_seen"), ":</p>\n <span><b id=\"last-seen-popup\"></b></span>\n </div> \n </div>\n </div>\n </div>\n ");
380
341
  }
381
342
  };
382
343
  exports.popupContent = popupContent;
383
- const setIcon = (element, clicked, point) => {
344
+ var setIcon = function setIcon(element, clicked, point) {
384
345
  element.setIcon((0, _PointIcon.getPointIconByType)(point.group.type, point.name, point.group.sector_name, clicked, !clicked));
385
346
  };
386
347
 
387
348
  // round to nearest thousand is used when you want to round the water consumption to the nearest thousand
388
349
  // for example: 234,567 -> 235,000
389
350
  exports.setIcon = setIcon;
390
- const calculateWaterConsumption = function (flow_rate_unit, waterConsumption) {
391
- let round_to_nearest_k = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
392
- let calculated = '0';
351
+ var calculateWaterConsumption = function calculateWaterConsumption(flow_rate_unit, waterConsumption) {
352
+ var round_to_nearest_k = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
353
+ var calculated = '0';
393
354
  if (waterConsumption > 0) {
394
355
  switch (flow_rate_unit) {
395
356
  case 'm3d':
@@ -410,7 +371,7 @@ const calculateWaterConsumption = function (flow_rate_unit, waterConsumption) {
410
371
  }
411
372
  };
412
373
  exports.calculateWaterConsumption = calculateWaterConsumption;
413
- const roundToNearestThousand = number => {
374
+ var roundToNearestThousand = function roundToNearestThousand(number) {
414
375
  // if(isAlreadyRounded(number)) {
415
376
  // return number;
416
377
  // }
@@ -418,8 +379,8 @@ const roundToNearestThousand = number => {
418
379
  if (number < 1000) {
419
380
  return Math.round(number);
420
381
  }
421
- const roundedThousands = Math.round(number / 1000);
422
- const roundedValue = roundedThousands * 1000;
382
+ var roundedThousands = Math.round(number / 1000);
383
+ var roundedValue = roundedThousands * 1000;
423
384
  return roundedValue;
424
385
  };
425
386
 
@@ -427,35 +388,35 @@ const roundToNearestThousand = number => {
427
388
  // return number === Math.round(number);
428
389
  // }
429
390
 
430
- const translateFlowRate = flow_rate_unit => {
431
- return _i18n.default.t(`dashboard_v2.profile.flow_rate_unit_options.${flow_rate_unit.includes('gd') ? 'gd' : flow_rate_unit}`);
391
+ var translateFlowRate = function translateFlowRate(flow_rate_unit) {
392
+ return _i18n.default.t("dashboard_v2.profile.flow_rate_unit_options.".concat(flow_rate_unit.includes('gd') ? 'gd' : flow_rate_unit));
432
393
  };
433
394
  exports.translateFlowRate = translateFlowRate;
434
- const handleMarkerEvents = (map, point, pointCustomIcon, handleClick) => {
435
- let tooltipVisible = false;
395
+ var handleMarkerEvents = function handleMarkerEvents(map, point, pointCustomIcon, handleClick) {
396
+ var tooltipVisible = false;
436
397
  map.on('zoomstart', function () {
437
398
  map.closePopup();
438
399
  });
439
- pointCustomIcon.on('popupclose', () => {
400
+ pointCustomIcon.on('popupclose', function () {
440
401
  // setIcon(pointCustomIcon, false, point);
441
402
  tooltipVisible = false;
442
403
  });
443
- pointCustomIcon.on('popupopen', () => {
404
+ pointCustomIcon.on('popupopen', function () {
444
405
  // setIcon(pointCustomIcon, true, point);
445
406
  tooltipVisible = true;
446
407
  });
447
- pointCustomIcon.on('mouseover', () => {
408
+ pointCustomIcon.on('mouseover', function () {
448
409
  if (tooltipVisible) return;
449
410
  setIcon(pointCustomIcon, true, point);
450
411
  tooltipVisible = true;
451
412
  });
452
- pointCustomIcon.on('mouseout', () => {
413
+ pointCustomIcon.on('mouseout', function () {
453
414
  if (pointCustomIcon.isPopupOpen()) return;
454
415
  setIcon(pointCustomIcon, false, point);
455
416
  tooltipVisible = false;
456
417
  });
457
418
  if (typeof handleClick === 'function') {
458
- pointCustomIcon.on('click', () => {
419
+ pointCustomIcon.on('click', function () {
459
420
  handleClick(pointCustomIcon.kando_object_id);
460
421
  if (pointIsFactory(point)) {
461
422
  (0, _utils.sendAnalyticsEvent)('Map View - Factory clicked', 'map', {
@@ -467,31 +428,8 @@ const handleMarkerEvents = (map, point, pointCustomIcon, handleClick) => {
467
428
  }
468
429
  };
469
430
  exports.handleMarkerEvents = handleMarkerEvents;
470
- const bindPopupToMarker = (point, layerGroup, flow_rate_unit) => {
471
- let content = `
472
- <div class='main-content'>
473
- <div class='main-content__header'>
474
- <div class="main-content__header__titles">
475
- <div class='main-content__header__titles__title'>${point.name}</div>
476
- <div class='main-content__header__titles__subtitle'>${point.group.sector_name}</div>
477
- </div>
478
- </div>
479
-
480
- <div class='main-content__body'>
481
- <div class='main-content__body__item'>
482
- <div class='main-content__body__item__icon'>
483
- <img src='${_water_reuse.default}' />
484
- </div>
485
- <div class='main-content__body__item__titles'>
486
- <div class='main-content__body__item__titles__title'>
487
- ${getFlowRate(point.group.water_discharge, flow_rate_unit)}
488
- </div>
489
- <div class='main-content__body__item__titles__subtitle'>${_i18n.default.t('water_discharge')}</div>
490
- </div>
491
- </div>
492
- </div>
493
- </div>
494
- `;
431
+ var bindPopupToMarker = function bindPopupToMarker(point, layerGroup, flow_rate_unit) {
432
+ var content = "\n <div class='main-content'>\n <div class='main-content__header'>\n <div class=\"main-content__header__titles\">\n <div class='main-content__header__titles__title'>".concat(point.name, "</div>\n <div class='main-content__header__titles__subtitle'>").concat(point.group.sector_name, "</div>\n </div>\n </div>\n \n <div class='main-content__body'>\n <div class='main-content__body__item'>\n <div class='main-content__body__item__icon'>\n <img src='").concat(_water_reuse.default, "' />\n </div>\n <div class='main-content__body__item__titles'>\n <div class='main-content__body__item__titles__title'>\n ").concat(getFlowRate(point.group.water_discharge, flow_rate_unit), "\n </div>\n <div class='main-content__body__item__titles__subtitle'>").concat(_i18n.default.t('water_discharge'), "</div>\n </div>\n </div>\n </div>\n </div>\n ");
495
433
  layerGroup.bindPopup(content, {
496
434
  className: 'point-marker-popup',
497
435
  minWidth: '214px',
@@ -500,21 +438,21 @@ const bindPopupToMarker = (point, layerGroup, flow_rate_unit) => {
500
438
  });
501
439
  };
502
440
  exports.bindPopupToMarker = bindPopupToMarker;
503
- const getFlowRate = function (waterConsumption, flowRateUnit) {
504
- let isRound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
441
+ var getFlowRate = function getFlowRate(waterConsumption, flowRateUnit) {
442
+ var isRound = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
505
443
  if (waterConsumption > 0) {
506
444
  return calculateWaterConsumption(flowRateUnit, waterConsumption, isRound) + ' ' + translateFlowRate(flowRateUnit);
507
445
  }
508
446
  return _i18n.default.t('events_overview.severities.unknown');
509
447
  };
510
448
  exports.getFlowRate = getFlowRate;
511
- const removeLayerGroup = (map, layerGroup) => {
449
+ var removeLayerGroup = function removeLayerGroup(map, layerGroup) {
512
450
  if (map.hasLayer(layerGroup)) {
513
451
  map.removeLayer(layerGroup);
514
452
  }
515
453
  };
516
454
  exports.removeLayerGroup = removeLayerGroup;
517
- const addLayerGroup = (map, layerGroup) => {
455
+ var addLayerGroup = function addLayerGroup(map, layerGroup) {
518
456
  if (!map.hasLayer(layerGroup)) {
519
457
  map.addLayer(layerGroup);
520
458
  } else {
@@ -523,16 +461,16 @@ const addLayerGroup = (map, layerGroup) => {
523
461
  }
524
462
  };
525
463
  exports.addLayerGroup = addLayerGroup;
526
- const pointIsWWTP = point => {
464
+ var pointIsWWTP = function pointIsWWTP(point) {
527
465
  return point.group.type === 'Groups::WastewaterTreatmentPlant';
528
466
  };
529
467
  exports.pointIsWWTP = pointIsWWTP;
530
- const pointIsFactory = point => {
468
+ var pointIsFactory = function pointIsFactory(point) {
531
469
  return isFactoryType(point.group.type);
532
470
  };
533
471
  exports.pointIsFactory = pointIsFactory;
534
- const isFactoryType = type => {
472
+ var isFactoryType = function isFactoryType(type) {
535
473
  return type === 'Groups::Factory';
536
474
  };
537
475
  exports.isFactoryType = isFactoryType;
538
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwid3d0cFBvaW50IiwidHlwZSIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImFkZExheWVyIiwiYmluZFBvcHVwVG9NYXJrZXIiLCJoYW5kbGVNYXJrZXJFdmVudHMiLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImZvckVhY2giLCJpbmRleCIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Iiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwiY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbiIsIndhdGVyQ29uc3VtcHRpb24iLCJyb3VuZF90b19uZWFyZXN0X2siLCJjYWxjdWxhdGVkIiwidG9GaXhlZCIsInJvdW5kVG9OZWFyZXN0VGhvdXNhbmQiLCJwYXJzZUZsb2F0IiwidG9Mb2NhbGVTdHJpbmciLCJNYXRoIiwicm91bmQiLCJudW1iZXIiLCJyb3VuZGVkVGhvdXNhbmRzIiwicm91bmRlZFZhbHVlIiwidHJhbnNsYXRlRmxvd1JhdGUiLCJ0b29sdGlwVmlzaWJsZSIsIm9uIiwiY2xvc2VQb3B1cCIsImlzUG9wdXBPcGVuIiwia2FuZG9fb2JqZWN0X2lkIiwic2VuZEFuYWx5dGljc0V2ZW50IiwicG9pbnRfbmFtZSIsImNvbnRlbnQiLCJ3YXRlclJldXNlSWNvbiIsImdldEZsb3dSYXRlIiwiYmluZFBvcHVwIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImNsb3NlQnV0dG9uIiwiZmxvd1JhdGVVbml0IiwiaXNSb3VuZCIsInJlbW92ZUxheWVyR3JvdXAiLCJoYXNMYXllciIsInJlbW92ZUxheWVyIiwiYWRkTGF5ZXJHcm91cCIsInBvaW50SXNXV1RQIiwiaXNGYWN0b3J5VHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JhcGhJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9saW5lLWNoYXJ0LnN2Zyc7XG5pbXBvcnQgTCwgeyBMYXRMbmdUdXBsZSB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgc2FtcGxpbmdJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9zYW1wbGluZy1pY29uLnN2Zyc7XG5pbXBvcnQgcGlua0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcGluay1jaXJjbGUuc3ZnJztcbmltcG9ydCBvYnNlcnZhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL29ic2VydmF0aW9uLWljb24uc3ZnJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCByZWRQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3JlZC1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluUmVkU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93aGl0ZS1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluQmxhY2tTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1ibGFjay1zaGFkb3cucG5nJztcbmltcG9ydCB5ZWxsb3dDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3llbGxvdy1jaXJjbGUuc3ZnJztcbmltcG9ydCBwbGFudEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2ZhY3RvcnktaWNvbi5zdmcnO1xuaW1wb3J0IGdyZWVuQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9ncmVlbi1jaXJjbGUuc3ZnJztcbmltcG9ydCBwdW1wU3RhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3B1bXAtc3RhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgY29sbGVjdG9ySWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IGJyaWdodEJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JyaWdodC1ibHVlLWNpcmNsZS5zdmcnO1xuaW1wb3J0IFdXVFBJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9XV1RQLWljb24uc3ZnJztcbmltcG9ydCB3YXRlckljb25Ob0JhY2tncm91bmQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3dhdGVyLW5vLWJhY2tncm91bmQuc3ZnJztcbmltcG9ydCB3aGl0ZVBvaW50IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy93aGl0ZS1wb2ludC5wbmcnO1xuaW1wb3J0IHsgZXZlbnRzQ291bnRJY29uIH0gZnJvbSAnLi4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgZ2V0UG9pbnRJY29uQnlUeXBlIH0gZnJvbSAnLi9Qb2ludEljb24nO1xuaW1wb3J0IHdhdGVyUmV1c2VJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9pY29ucy93YXRlcl9yZXVzZS5zdmcnO1xuaW1wb3J0IHsgc2VuZEFuYWx5dGljc0V2ZW50IH0gZnJvbSAnc3JjL3BhZ2VzL0Rhc2hib2FyZE1hcC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc3RyaW5nID0gYCR7cG9pbnQuZ3JvdXAubmFtZX0gYDtcblxuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgc3RyaW5nICs9IGA8YnIvPlNlY3RvcjogJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX1gO1xuICAgIHN0cmluZyArPSBgPGJyLz5XYXRlciBDb25zdW1wdGlvbjogJHtwb2ludC5ncm91cC53YXRlcl9kaXNjaGFyZ2V9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHJpbmcgPSBgJHtwb2ludC5uYW1lfWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1YmJsZUZvcldXVFAgPSAoYXJncykgPT4ge1xuICBjb25zdCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIoYXJncy5tYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIGFyZ3Mud3d0cFBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBhcmdzLnd3dHBQb2ludC5uYW1lLFxuICAgICAgJycsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgKSxcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHBvaW50Q3VzdG9tSWNvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCdWJibGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbiAgZmxvd19yYXRlX3VuaXQgPSAnZ2RfdXMnLFxuICBoYW5kbGVDbGljaz8sXG4pID0+IHtcbiAgY29uc3Qgc3VidGl0bGUgPSBwb2ludElzRmFjdG9yeShwb2ludCkgPyBwb2ludC5ncm91cC5zZWN0b3JfbmFtZSA6ICcnO1xuICBsZXQgcG9pbnRDdXN0b21JY29uOiBMLk1hcmtlciA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0UG9pbnRJY29uQnlUeXBlKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSxcbiAgICAgIHBvaW50Lm5hbWUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZSxcbiAgICApLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG5cbiAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgYmluZFBvcHVwVG9NYXJrZXIocG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgZmxvd19yYXRlX3VuaXQpO1xuICB9XG5cbiAgaGFuZGxlTWFya2VyRXZlbnRzKG1hcCwgcG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgaGFuZGxlQ2xpY2spO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBldmVudHNDb3VudEljb24obWFwLl96b29tKS5pY29uQW5jaG9yLFxuICAgICAgfSksXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICBvcGFjaXR5OiBob3ZlcmVkID8gMSA6IDAsXG4gICAgfSk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHBvaW50SWNvbiA9IG5ldyBMLkljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUG9pbnQsXG4gICAgaWNvblNpemU6IFs5LCA5XSxcbiAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICB9KTtcbiAgbGV0IG1hbmhvbGVJY29uOiBhbnkgPSBuZXcgTC5NYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pO1xuICBtYW5ob2xlSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb29sdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG4gIGxheWVyR3JvdXAuYWRkTGF5ZXIobWFuaG9sZUljb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoSWNvblRvUG9pbnQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICBzd2l0Y2ggKHBvaW50Lmdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgaWYgKGNvbWJpbmVkRmFjdG9yeUljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkRmFjdG9yeUljb247XG4gICAgY2FzZSAnR3JvdXBzOjpQdW1wU3RhdGlvbic6XG4gICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICAgIGlmIChjb21iaW5lZFdXVFBJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFdXVFBJY29uO1xuXG4gICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgIGlmIChpc0NvbGxlY3RvckZvY3VzZWQocG9pbnQsIGV2ZW50KSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzIyLCA0NF0sXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZENvbGxlY3RvcnNJY29uO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRCYWNrZ3JvdW5kID0gKFxuICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgdGhpcmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpbkJsYWNrU2hhZG93LFxuICAgIGljb25TaXplOiBzZWNvbmRhcnkgPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwbGFudEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNSwgMzBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogZ3JlZW5DaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRDb2xsZWN0b3JzSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBjb2xsZWN0b3JJY29uLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICBpY29uQW5jaG9yOiBbMjUsIDUwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogYnJpZ2h0Qmx1ZUNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBzYW1wbGluZ0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAxM10gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGxldCB0aGlyZEljb24gPSBmYWxzZTtcbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXJkSWNvbiA9IHRydWU7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRoaXJkSWNvbikpO1xuICB9XG5cbiAgc2FtcGxpbmdJY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gc2Vjb25kYXJ5SWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3RoaXJkJ10gPSBmYWxzZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbic7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb25Ib3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgZXZlbnQ6IElFdmVudCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkLFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICAgIGxheWVyR3JvdXAsXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVwQ29udGVudCA9IChvYnM6IGFueSwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAob2JzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtwb2ludC5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtwb2ludC5ncm91cC5uYW1lfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8aHIvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3RvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7b2JzLmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke1xuICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXR5YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9wdXAtY29udGVudF9fc2V2ZXJpdHktLScgKyBvYnMuc2V2ZXJpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLiR7b2JzLnNldmVyaXR5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2hyXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fZGlzY2hhcmdlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LmZpcnN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImZpcnN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5sYXN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImxhc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEljb24gPSAoZWxlbWVudCwgY2xpY2tlZCwgcG9pbnQpID0+IHtcbiAgZWxlbWVudC5zZXRJY29uKFxuICAgIGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBwb2ludC5uYW1lLFxuICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUsXG4gICAgICBjbGlja2VkLFxuICAgICAgIWNsaWNrZWQsXG4gICAgKSxcbiAgKTtcbn07XG5cbi8vIHJvdW5kIHRvIG5lYXJlc3QgdGhvdXNhbmQgaXMgdXNlZCB3aGVuIHlvdSB3YW50IHRvIHJvdW5kIHRoZSB3YXRlciBjb25zdW1wdGlvbiB0byB0aGUgbmVhcmVzdCB0aG91c2FuZFxuLy8gZm9yIGV4YW1wbGU6IDIzNCw1NjcgLT4gMjM1LDAwMFxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVdhdGVyQ29uc3VtcHRpb24gPSAoXG4gIGZsb3dfcmF0ZV91bml0OiBzdHJpbmcsXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgcm91bmRfdG9fbmVhcmVzdF9rOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgbGV0IGNhbGN1bGF0ZWQgPSAnMCc7XG5cbiAgaWYgKHdhdGVyQ29uc3VtcHRpb24gPiAwKSB7XG4gICAgc3dpdGNoIChmbG93X3JhdGVfdW5pdCkge1xuICAgICAgY2FzZSAnbTNkJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9IHdhdGVyQ29uc3VtcHRpb24udG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnZF91cyc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSAod2F0ZXJDb25zdW1wdGlvbiAqIDI2NC4xNzIpLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdWsnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyMTkuOTY5KS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJvdW5kX3RvX25lYXJlc3Rfaykge1xuICAgIHJldHVybiByb3VuZFRvTmVhcmVzdFRob3VzYW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChjYWxjdWxhdGVkKSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfVxufTtcblxuY29uc3Qgcm91bmRUb05lYXJlc3RUaG91c2FuZCA9IChudW1iZXIpID0+IHtcbiAgLy8gaWYoaXNBbHJlYWR5Um91bmRlZChudW1iZXIpKSB7XG4gIC8vICAgcmV0dXJuIG51bWJlcjtcbiAgLy8gfVxuXG4gIGlmIChudW1iZXIgPCAxMDAwKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgfVxuXG4gIGNvbnN0IHJvdW5kZWRUaG91c2FuZHMgPSBNYXRoLnJvdW5kKG51bWJlciAvIDEwMDApO1xuICBjb25zdCByb3VuZGVkVmFsdWUgPSByb3VuZGVkVGhvdXNhbmRzICogMTAwMDtcblxuICByZXR1cm4gcm91bmRlZFZhbHVlO1xufTtcblxuLy8gY29uc3QgaXNBbHJlYWR5Um91bmRlZCA9IChudW1iZXIpID0+IHtcbi8vICAgcmV0dXJuIG51bWJlciA9PT0gTWF0aC5yb3VuZChudW1iZXIpO1xuLy8gfVxuXG5leHBvcnQgY29uc3QgdHJhbnNsYXRlRmxvd1JhdGUgPSAoZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgcmV0dXJuIGkxOG4udChcbiAgICBgZGFzaGJvYXJkX3YyLnByb2ZpbGUuZmxvd19yYXRlX3VuaXRfb3B0aW9ucy4ke1xuICAgICAgZmxvd19yYXRlX3VuaXQuaW5jbHVkZXMoJ2dkJykgPyAnZ2QnIDogZmxvd19yYXRlX3VuaXRcbiAgICB9YCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVNYXJrZXJFdmVudHMgPSAoXG4gIG1hcCxcbiAgcG9pbnQsXG4gIHBvaW50Q3VzdG9tSWNvbixcbiAgaGFuZGxlQ2xpY2ssXG4pID0+IHtcbiAgbGV0IHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgbWFwLm9uKCd6b29tc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbWFwLmNsb3NlUG9wdXAoKTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdwb3B1cGNsb3NlJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBvcGVuJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICBpZiAodG9vbHRpcFZpc2libGUpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgIGlmIChwb2ludEN1c3RvbUljb24uaXNQb3B1cE9wZW4oKSkgcmV0dXJuO1xuXG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVDbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBvaW50Q3VzdG9tSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICBoYW5kbGVDbGljayhwb2ludEN1c3RvbUljb24ua2FuZG9fb2JqZWN0X2lkKTtcblxuICAgICAgaWYgKHBvaW50SXNGYWN0b3J5KHBvaW50KSkge1xuICAgICAgICBzZW5kQW5hbHl0aWNzRXZlbnQoJ01hcCBWaWV3IC0gRmFjdG9yeSBjbGlja2VkJywgJ21hcCcsIHtcbiAgICAgICAgICBwb2ludF9pZDogcG9pbnQuaWQsXG4gICAgICAgICAgcG9pbnRfbmFtZTogcG9pbnQubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBiaW5kUG9wdXBUb01hcmtlciA9IChwb2ludCwgbGF5ZXJHcm91cCwgZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBgXG4gICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50Jz5cbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXInPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudF9faGVhZGVyX190aXRsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzX190aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgIHBvaW50Lm5hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fc3VidGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZVxuICAgICAgICAgICAgICAgIH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX19pY29uJz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JyR7d2F0ZXJSZXVzZUljb259JyAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX190aXRsZSc+XG4gICAgICAgICAgICAgICAgICAgICR7Z2V0Rmxvd1JhdGUocG9pbnQuZ3JvdXAud2F0ZXJfZGlzY2hhcmdlLCBmbG93X3JhdGVfdW5pdCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX19zdWJ0aXRsZSc+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICd3YXRlcl9kaXNjaGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgO1xuXG4gIGxheWVyR3JvdXAuYmluZFBvcHVwKGNvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6ICdwb2ludC1tYXJrZXItcG9wdXAnLFxuICAgIG1pbldpZHRoOiAnMjE0cHgnLFxuICAgIG1heFdpZHRoOiAnMjE0cHgnLFxuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGbG93UmF0ZSA9IChcbiAgd2F0ZXJDb25zdW1wdGlvbjogbnVtYmVyLFxuICBmbG93UmF0ZVVuaXQ6IHN0cmluZyxcbiAgaXNSb3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uKGZsb3dSYXRlVW5pdCwgd2F0ZXJDb25zdW1wdGlvbiwgaXNSb3VuZCkgK1xuICAgICAgJyAnICtcbiAgICAgIHRyYW5zbGF0ZUZsb3dSYXRlKGZsb3dSYXRlVW5pdClcbiAgICApO1xuICB9XG4gIHJldHVybiBpMThuLnQoJ2V2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLnVua25vd24nKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwID0gKG1hcCwgbGF5ZXJHcm91cCkgPT4ge1xuICBpZiAobWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLnJlbW92ZUxheWVyKGxheWVyR3JvdXApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKCFtYXAuaGFzTGF5ZXIobGF5ZXJHcm91cCkpIHtcbiAgICBtYXAuYWRkTGF5ZXIobGF5ZXJHcm91cCk7XG4gIH0gZWxzZSB7XG4gICAgcmVtb3ZlTGF5ZXJHcm91cChtYXAsIGxheWVyR3JvdXApO1xuICAgIGFkZExheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNXV1RQID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc7XG59O1xuXG5leHBvcnQgY29uc3QgcG9pbnRJc0ZhY3RvcnkgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICByZXR1cm4gaXNGYWN0b3J5VHlwZShwb2ludC5ncm91cC50eXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZhY3RvcnlUeXBlID0gKHR5cGU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeSc7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQyxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSyxnQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBTzNDLElBQUFNLGdCQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RixJQUFBUyxhQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBVSxZQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7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
476
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2kxOG4iLCJfYmx1ZUNpcmNsZSIsIl9zYW1wbGluZ0ljb24iLCJfcGlua0NpcmNsZSIsIl9vYnNlcnZhdGlvbkljb24iLCJfcmVkUGluUmVkU2hhZG93IiwiX3doaXRlUGluUmVkU2hhZG93IiwiX3doaXRlUGluQmxhY2tTaGFkb3ciLCJfeWVsbG93Q2lyY2xlIiwiX2ZhY3RvcnlJY29uIiwiX2dyZWVuQ2lyY2xlIiwiX3B1bXBTdGF0aW9uSWNvbiIsIl9waW5XYXRlciIsIl9icmlnaHRCbHVlQ2lyY2xlIiwiX1dXVFBJY29uIiwiX3dhdGVyTm9CYWNrZ3JvdW5kIiwiX3doaXRlUG9pbnQiLCJfTWFwVXRpbHMiLCJfUG9pbnRJY29uIiwiX3dhdGVyX3JldXNlIiwiX3V0aWxzIiwiaXNDb2xsZWN0b3JGb2N1c2VkIiwicG9pbnQiLCJldmVudCIsIl9ldmVudCRvYnNlcnZhdGlvbnMiLCJvYnNlcnZhdGlvbnMiLCJsZW5ndGgiLCJpZCIsInBvaW50X2lkIiwiZXhwb3J0cyIsImJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmciLCJzdHJpbmciLCJjb25jYXQiLCJncm91cCIsIm5hbWUiLCJwb2ludElzRmFjdG9yeSIsInNlY3Rvcl9uYW1lIiwid2F0ZXJfZGlzY2hhcmdlIiwiYnViYmxlRm9yV1dUUCIsImFyZ3MiLCJwb2ludEN1c3RvbUljb24iLCJMIiwibWFya2VyIiwibWFya2VyTG9jYXRpb24iLCJpY29uIiwiZ2V0UG9pbnRJY29uQnlUeXBlIiwid3d0cFBvaW50IiwidHlwZSIsInJpc2VPbkhvdmVyIiwiY3JlYXRlQnViYmxlUG9pbnQiLCJtYXAiLCJob3ZlcmVkIiwibGF5ZXJHcm91cCIsImZsb3dfcmF0ZV91bml0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaGFuZGxlQ2xpY2siLCJzdWJ0aXRsZSIsImFkZExheWVyIiwiYmluZFBvcHVwVG9NYXJrZXIiLCJoYW5kbGVNYXJrZXJFdmVudHMiLCJyZWxhdGVkRXZlbnRzQW1vdW50IiwiZGl2SWNvbiIsImNsYXNzTmFtZSIsImh0bWwiLCJpY29uQW5jaG9yIiwiZXZlbnRzQ291bnRJY29uIiwiX3pvb20iLCJvcGFjaXR5IiwiY3JlYXRlTWFuaG9sZVBvaW50IiwicG9pbnRJY29uIiwiSWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsIk1hcmtlciIsImJpbmRUb29sdGlwIiwibWF0Y2hJY29uVG9Qb2ludCIsImNvbWJpbmVkRmFjdG9yeUljb24iLCJtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZSIsInVuc2hpZnQiLCJzZWxlY3RlZEJhY2tncm91bmQiLCJtYXJrZXJCZWxvbmdzVG9Tb3VyY2UiLCJiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kIiwic3RhbmRhcmRCYWNrZ3JvdW5kIiwiY29tYmluZWRQdW1wU3RhdGlvbkljb24iLCJjb21iaW5lZFdXVFBJY29uIiwicmVkUGluUmVkU2hhZG93Iiwid2F0ZXJJY29uTm9CYWNrZ3JvdW5kIiwicG9wdXBBbmNob3IiLCJjb21iaW5lZENvbGxlY3RvcnNJY29uIiwic2Vjb25kYXJ5IiwidGhpcmQiLCJ3aGl0ZVBpbkJsYWNrU2hhZG93IiwieWVsbG93Q2lyY2xlVVJMIiwicGxhbnRJY29uVVJMIiwiZ3JlZW5DaXJjbGVVUkwiLCJwdW1wU3RhdGlvbkljb25VUkwiLCJjb2xsZWN0b3JJY29uIiwiYnJpZ2h0Qmx1ZUNpcmNsZVVSTCIsIldXVFBJY29uVVJMIiwid2hpdGVQaW5SZWRTaGFkb3ciLCJzb3VyY2UiLCJzb3VyY2VzIiwiZmlsdGVyIiwic2VsZWN0ZWRfc291cmNlIiwiY3JlYXRlU2FtcGxpbmdJY29uUG9pbnQiLCJzZWNvbmRhcnlJY29uIiwic2FtcGxpbmdJY29uIiwiYmx1ZUNpcmNsZVVSTCIsInNhbXBsaW5nSWNvblVSTCIsInRoaXJkSWNvbiIsImZvckVhY2giLCJpbmRleCIsImNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50Iiwib2JzZXJ2YXRpb25JY29uIiwicGlua0NpcmNsZVVSTCIsIm9ic2VydmF0aW9uSWNvblVSTCIsImNyZWF0ZVNhbXBsaW5nSWNvbnMiLCJzYW1wbGVkUG9pbnRJZHMiLCJzYW1wbGluZ3MiLCJzIiwiaW5jbHVkZXMiLCJwb3B1cENvbnRlbnQiLCJvYnMiLCJHcmFwaEljb24iLCJpMThuIiwidCIsInNldmVyaXR5Iiwic2V0SWNvbiIsImVsZW1lbnQiLCJjbGlja2VkIiwiY2FsY3VsYXRlV2F0ZXJDb25zdW1wdGlvbiIsIndhdGVyQ29uc3VtcHRpb24iLCJyb3VuZF90b19uZWFyZXN0X2siLCJjYWxjdWxhdGVkIiwidG9GaXhlZCIsInJvdW5kVG9OZWFyZXN0VGhvdXNhbmQiLCJwYXJzZUZsb2F0IiwidG9Mb2NhbGVTdHJpbmciLCJNYXRoIiwicm91bmQiLCJudW1iZXIiLCJyb3VuZGVkVGhvdXNhbmRzIiwicm91bmRlZFZhbHVlIiwidHJhbnNsYXRlRmxvd1JhdGUiLCJ0b29sdGlwVmlzaWJsZSIsIm9uIiwiY2xvc2VQb3B1cCIsImlzUG9wdXBPcGVuIiwia2FuZG9fb2JqZWN0X2lkIiwic2VuZEFuYWx5dGljc0V2ZW50IiwicG9pbnRfbmFtZSIsImNvbnRlbnQiLCJ3YXRlclJldXNlSWNvbiIsImdldEZsb3dSYXRlIiwiYmluZFBvcHVwIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImNsb3NlQnV0dG9uIiwiZmxvd1JhdGVVbml0IiwiaXNSb3VuZCIsInJlbW92ZUxheWVyR3JvdXAiLCJoYXNMYXllciIsInJlbW92ZUxheWVyIiwiYWRkTGF5ZXJHcm91cCIsInBvaW50SXNXV1RQIiwiaXNGYWN0b3J5VHlwZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR3JhcGhJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9saW5lLWNoYXJ0LnN2Zyc7XG5pbXBvcnQgTCwgeyBMYXRMbmdUdXBsZSB9IGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi4vLi4vLi4vdXRpbGl0aWVzL2kxOG4nO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IGJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgc2FtcGxpbmdJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9zYW1wbGluZy1pY29uLnN2Zyc7XG5pbXBvcnQgcGlua0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcGluay1jaXJjbGUuc3ZnJztcbmltcG9ydCBvYnNlcnZhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL29ic2VydmF0aW9uLWljb24uc3ZnJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCByZWRQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3JlZC1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluUmVkU2hhZG93IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy93aGl0ZS1waW4tcmVkLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHdoaXRlUGluQmxhY2tTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1ibGFjay1zaGFkb3cucG5nJztcbmltcG9ydCB5ZWxsb3dDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3llbGxvdy1jaXJjbGUuc3ZnJztcbmltcG9ydCBwbGFudEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2ZhY3RvcnktaWNvbi5zdmcnO1xuaW1wb3J0IGdyZWVuQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9ncmVlbi1jaXJjbGUuc3ZnJztcbmltcG9ydCBwdW1wU3RhdGlvbkljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3B1bXAtc3RhdGlvbi1pY29uLnN2Zyc7XG5pbXBvcnQgY29sbGVjdG9ySWNvbiBmcm9tICcuLi8uLi8uLi9hc3NldHMvbWFwL3Bpbi13YXRlci5zdmcnO1xuaW1wb3J0IGJyaWdodEJsdWVDaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2JyaWdodC1ibHVlLWNpcmNsZS5zdmcnO1xuaW1wb3J0IFdXVFBJY29uVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9XV1RQLWljb24uc3ZnJztcbmltcG9ydCB3YXRlckljb25Ob0JhY2tncm91bmQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3dhdGVyLW5vLWJhY2tncm91bmQuc3ZnJztcbmltcG9ydCB3aGl0ZVBvaW50IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy93aGl0ZS1wb2ludC5wbmcnO1xuaW1wb3J0IHsgZXZlbnRzQ291bnRJY29uIH0gZnJvbSAnLi4vTWFwVXRpbHMnO1xuaW1wb3J0IHsgZ2V0UG9pbnRJY29uQnlUeXBlIH0gZnJvbSAnLi9Qb2ludEljb24nO1xuaW1wb3J0IHdhdGVyUmV1c2VJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9pY29ucy93YXRlcl9yZXVzZS5zdmcnO1xuaW1wb3J0IHsgc2VuZEFuYWx5dGljc0V2ZW50IH0gZnJvbSAnc3JjL3BhZ2VzL0Rhc2hib2FyZE1hcC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbmNvbnN0IGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc3RyaW5nID0gYCR7cG9pbnQuZ3JvdXAubmFtZX0gYDtcblxuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgc3RyaW5nICs9IGA8YnIvPlNlY3RvcjogJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX1gO1xuICAgIHN0cmluZyArPSBgPGJyLz5XYXRlciBDb25zdW1wdGlvbjogJHtwb2ludC5ncm91cC53YXRlcl9kaXNjaGFyZ2V9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHJpbmcgPSBgJHtwb2ludC5uYW1lfWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1YmJsZUZvcldXVFAgPSAoYXJncykgPT4ge1xuICBjb25zdCBwb2ludEN1c3RvbUljb246IEwuTWFya2VyID0gTC5tYXJrZXIoYXJncy5tYXJrZXJMb2NhdGlvbiwge1xuICAgIGljb246IGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIGFyZ3Mud3d0cFBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBhcmdzLnd3dHBQb2ludC5uYW1lLFxuICAgICAgJycsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWUsXG4gICAgKSxcbiAgICByaXNlT25Ib3ZlcjogdHJ1ZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHBvaW50Q3VzdG9tSWNvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVCdWJibGVQb2ludCA9IChcbiAgbWFya2VyTG9jYXRpb246IExhdExuZ1R1cGxlLFxuICBwb2ludDogSVBvaW50LFxuICBtYXAsXG4gIGhvdmVyZWQ/LFxuICBsYXllckdyb3VwPyxcbiAgZmxvd19yYXRlX3VuaXQgPSAnZ2RfdXMnLFxuICBoYW5kbGVDbGljaz8sXG4pID0+IHtcbiAgY29uc3Qgc3VidGl0bGUgPSBwb2ludElzRmFjdG9yeShwb2ludCkgPyBwb2ludC5ncm91cC5zZWN0b3JfbmFtZSA6ICcnO1xuICBsZXQgcG9pbnRDdXN0b21JY29uOiBMLk1hcmtlciA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgaWNvbjogZ2V0UG9pbnRJY29uQnlUeXBlKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSxcbiAgICAgIHBvaW50Lm5hbWUsXG4gICAgICBzdWJ0aXRsZSxcbiAgICAgIGZhbHNlLFxuICAgICAgdHJ1ZSxcbiAgICApLFxuICAgIHJpc2VPbkhvdmVyOiB0cnVlLFxuICB9KTtcbiAgLy8gQHRzLWlnbm9yZVxuICAvLyBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoYnVpbGRNYW5ob2xlVG9vdGlwU3RyaW5nKHBvaW50KSk7XG4gIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG5cbiAgbGF5ZXJHcm91cC5hZGRMYXllcihwb2ludEN1c3RvbUljb24pO1xuICBpZiAocG9pbnRJc0ZhY3RvcnkocG9pbnQpKSB7XG4gICAgYmluZFBvcHVwVG9NYXJrZXIocG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgZmxvd19yYXRlX3VuaXQpO1xuICB9XG5cbiAgaGFuZGxlTWFya2VyRXZlbnRzKG1hcCwgcG9pbnQsIHBvaW50Q3VzdG9tSWNvbiwgaGFuZGxlQ2xpY2spO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBldmVudHNDb3VudEljb24obWFwLl96b29tKS5pY29uQW5jaG9yLFxuICAgICAgfSksXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgICBvcGFjaXR5OiBob3ZlcmVkID8gMSA6IDAsXG4gICAgfSk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbiAgbGF5ZXJHcm91cD8sXG4pID0+IHtcbiAgbGV0IHBvaW50SWNvbiA9IG5ldyBMLkljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUG9pbnQsXG4gICAgaWNvblNpemU6IFs5LCA5XSxcbiAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICB9KTtcbiAgbGV0IG1hbmhvbGVJY29uOiBhbnkgPSBuZXcgTC5NYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pO1xuICBtYW5ob2xlSWNvbi5iaW5kVG9vbHRpcChidWlsZE1hbmhvbGVUb29sdGlwU3RyaW5nKHBvaW50KSk7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnQnO1xuICBtYW5ob2xlSWNvblsna2FuZG9fcG9pbnRfdHlwZSddID0gJ01hbmhvbGUnO1xuICBpZiAoaG92ZXJlZCkgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1BvaW50SG92ZXJlZCc7XG4gIGxheWVyR3JvdXAuYWRkTGF5ZXIobWFuaG9sZUljb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hdGNoSWNvblRvUG9pbnQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICBzd2l0Y2ggKHBvaW50Lmdyb3VwLnR5cGUpIHtcbiAgICBjYXNlICdHcm91cHM6OkZhY3RvcnknOlxuICAgICAgaWYgKGNvbWJpbmVkRmFjdG9yeUljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRGYWN0b3J5SWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkRmFjdG9yeUljb247XG4gICAgY2FzZSAnR3JvdXBzOjpQdW1wU3RhdGlvbic6XG4gICAgICBpZiAoY29tYmluZWRQdW1wU3RhdGlvbkljb24ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JzpcbiAgICAgIGlmIChjb21iaW5lZFdXVFBJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkV1dUUEljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFdXVFBJY29uO1xuXG4gICAgY2FzZSAnR3JvdXBzOjpDb2xsZWN0b3JzJzpcbiAgICAgIGlmIChpc0NvbGxlY3RvckZvY3VzZWQocG9pbnQsIGV2ZW50KSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIEwuaWNvbih7XG4gICAgICAgICAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgICAgICAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFswLCAwXSxcblxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzIyLCA0NF0sXG4gICAgICAgICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZENvbGxlY3RvcnNJY29uO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc3RhbmRhcmRCYWNrZ3JvdW5kID0gKFxuICBzZWNvbmRhcnk6IGJvb2xlYW4gPSBmYWxzZSxcbiAgdGhpcmQ6IGJvb2xlYW4gPSBmYWxzZSxcbikgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpbkJsYWNrU2hhZG93LFxuICAgIGljb25TaXplOiBzZWNvbmRhcnkgPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwbGFudEljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNSwgMzBdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRQdW1wU3RhdGlvbkljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogZ3JlZW5DaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFswLCAwXSxcbiAgICBpY29uQW5jaG9yOiBbNywgMzJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRDb2xsZWN0b3JzSWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBjb2xsZWN0b3JJY29uLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG5cbiAgICBpY29uQW5jaG9yOiBbMjUsIDUwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkV1dUUEljb24gPSBbXG4gIEwuaWNvbih7XG4gICAgaWNvblVybDogYnJpZ2h0Qmx1ZUNpcmNsZVVSTCxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzgsIDMxXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdGVkQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgIGljb25TaXplOiBbMCwgMF0sXG4gICAgaWNvbkFuY2hvcjogWzMyLCA1NF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBpblJlZFNoYWRvdyxcbiAgICBpY29uU2l6ZTogWzAsIDBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBzYW1wbGluZ0ljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IGJsdWVDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAxM10gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGxldCB0aGlyZEljb24gPSBmYWxzZTtcbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHRoaXJkSWNvbiA9IHRydWU7XG4gICAgc2FtcGxpbmdJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24sIHRoaXJkSWNvbikpO1xuICB9XG5cbiAgc2FtcGxpbmdJY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gdGhpcmRJY29uID8gZmFsc2UgOiBzZWNvbmRhcnlJY29uO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fdGhpcmQnXSA9IHRoaXJkSWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9ic2VydmF0aW9uSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4gIGxheWVyR3JvdXA/LFxuKSA9PiB7XG4gIC8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4gIC8vIEljb24gQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG4gIGxldCBvYnNlcnZhdGlvbkljb24gPSBbXG4gICAgTC5pY29uKHtcbiAgICAgIGljb25Vcmw6IHBpbmtDaXJjbGVVUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFswLCAwXSA6IFswLCAwXSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDQwXSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogb2JzZXJ2YXRpb25JY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMCwgMF0gOiBbMCwgMF0sXG4gICAgICBpY29uQW5jaG9yOiBzZWNvbmRhcnlJY29uID8gWy04LCAzOF0gOiBbNSwgMzBdLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICBdO1xuXG4gIGlmIChtYXJrZXJCZWxvbmdzVG9TZWxlY3RlZFNvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpICYmICFzZWNvbmRhcnlJY29uKSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIHtcbiAgICBvYnNlcnZhdGlvbkljb24udW5zaGlmdChzdGFuZGFyZEJhY2tncm91bmQoc2Vjb25kYXJ5SWNvbikpO1xuICB9XG5cbiAgb2JzZXJ2YXRpb25JY29uLmZvckVhY2goKGljb24sIGluZGV4KSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKGJ1aWxkTWFuaG9sZVRvb2x0aXBTdHJpbmcocG9pbnQpKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX2luZGV4X29iamVjdCddID0gaW5kZXg7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19mZXdfbGF5ZXJfaWNvbiddID0gdHJ1ZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3NlY29uZGFyeSddID0gc2Vjb25kYXJ5SWNvbjtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX3RoaXJkJ10gPSBmYWxzZTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbic7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnT2JzZXJ2YXRpb25Ib3ZlcmVkJztcbiAgICBsYXllckdyb3VwLmFkZExheWVyKHBvaW50Q3VzdG9tSWNvbik7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvbnMgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgZXZlbnQ6IElFdmVudCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkLFxuICBsYXllckdyb3VwPyxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICAgIGxheWVyR3JvdXAsXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvcHVwQ29udGVudCA9IChvYnM6IGFueSwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBpZiAob2JzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtwb2ludC5pZH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke0dyYXBoSWNvbn1cIi8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2l0ZS1uYW1lXCI+PGI+JHtwb2ludC5ncm91cC5uYW1lfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8aHIvPlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInNlY3RvclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtcG9wdXBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZ3JhcGgtaWNvbiBwb3B1cC1ncmFwaC1pY29uLSR7b2JzLmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke1xuICAgICAgICAgICAgICAgICAgICAgIHBvaW50Lmdyb3VwLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgfTwvYj48L2g1PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXR5YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAncG9wdXAtY29udGVudF9fc2V2ZXJpdHktLScgKyBvYnMuc2V2ZXJpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLiR7b2JzLnNldmVyaXR5fWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX2hyXCIgLz5cblxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudF9fZGlzY2hhcmdlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LmZpcnN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImZpcnN0LXNlZW4tcG9wdXBcIj48L2I+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktcFwiPiR7aTE4bi50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGV2ZW50c19vdmVydmlldy5sYXN0X3NlZW5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICl9OjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj48YiBpZD1cImxhc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgYDtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNldEljb24gPSAoZWxlbWVudCwgY2xpY2tlZCwgcG9pbnQpID0+IHtcbiAgZWxlbWVudC5zZXRJY29uKFxuICAgIGdldFBvaW50SWNvbkJ5VHlwZShcbiAgICAgIHBvaW50Lmdyb3VwLnR5cGUsXG4gICAgICBwb2ludC5uYW1lLFxuICAgICAgcG9pbnQuZ3JvdXAuc2VjdG9yX25hbWUsXG4gICAgICBjbGlja2VkLFxuICAgICAgIWNsaWNrZWQsXG4gICAgKSxcbiAgKTtcbn07XG5cbi8vIHJvdW5kIHRvIG5lYXJlc3QgdGhvdXNhbmQgaXMgdXNlZCB3aGVuIHlvdSB3YW50IHRvIHJvdW5kIHRoZSB3YXRlciBjb25zdW1wdGlvbiB0byB0aGUgbmVhcmVzdCB0aG91c2FuZFxuLy8gZm9yIGV4YW1wbGU6IDIzNCw1NjcgLT4gMjM1LDAwMFxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZVdhdGVyQ29uc3VtcHRpb24gPSAoXG4gIGZsb3dfcmF0ZV91bml0OiBzdHJpbmcsXG4gIHdhdGVyQ29uc3VtcHRpb246IG51bWJlcixcbiAgcm91bmRfdG9fbmVhcmVzdF9rOiBib29sZWFuID0gZmFsc2UsXG4pID0+IHtcbiAgbGV0IGNhbGN1bGF0ZWQgPSAnMCc7XG5cbiAgaWYgKHdhdGVyQ29uc3VtcHRpb24gPiAwKSB7XG4gICAgc3dpdGNoIChmbG93X3JhdGVfdW5pdCkge1xuICAgICAgY2FzZSAnbTNkJzpcbiAgICAgICAgY2FsY3VsYXRlZCA9IHdhdGVyQ29uc3VtcHRpb24udG9GaXhlZCgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdnZF91cyc6XG4gICAgICAgIGNhbGN1bGF0ZWQgPSAod2F0ZXJDb25zdW1wdGlvbiAqIDI2NC4xNzIpLnRvRml4ZWQoMik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2RfdWsnOlxuICAgICAgICBjYWxjdWxhdGVkID0gKHdhdGVyQ29uc3VtcHRpb24gKiAyMTkuOTY5KS50b0ZpeGVkKDIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgaWYgKHJvdW5kX3RvX25lYXJlc3Rfaykge1xuICAgIHJldHVybiByb3VuZFRvTmVhcmVzdFRob3VzYW5kKHBhcnNlRmxvYXQoY2FsY3VsYXRlZCkpLnRvTG9jYWxlU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChjYWxjdWxhdGVkKSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfVxufTtcblxuY29uc3Qgcm91bmRUb05lYXJlc3RUaG91c2FuZCA9IChudW1iZXIpID0+IHtcbiAgLy8gaWYoaXNBbHJlYWR5Um91bmRlZChudW1iZXIpKSB7XG4gIC8vICAgcmV0dXJuIG51bWJlcjtcbiAgLy8gfVxuXG4gIGlmIChudW1iZXIgPCAxMDAwKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgfVxuXG4gIGNvbnN0IHJvdW5kZWRUaG91c2FuZHMgPSBNYXRoLnJvdW5kKG51bWJlciAvIDEwMDApO1xuICBjb25zdCByb3VuZGVkVmFsdWUgPSByb3VuZGVkVGhvdXNhbmRzICogMTAwMDtcblxuICByZXR1cm4gcm91bmRlZFZhbHVlO1xufTtcblxuLy8gY29uc3QgaXNBbHJlYWR5Um91bmRlZCA9IChudW1iZXIpID0+IHtcbi8vICAgcmV0dXJuIG51bWJlciA9PT0gTWF0aC5yb3VuZChudW1iZXIpO1xuLy8gfVxuXG5leHBvcnQgY29uc3QgdHJhbnNsYXRlRmxvd1JhdGUgPSAoZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgcmV0dXJuIGkxOG4udChcbiAgICBgZGFzaGJvYXJkX3YyLnByb2ZpbGUuZmxvd19yYXRlX3VuaXRfb3B0aW9ucy4ke1xuICAgICAgZmxvd19yYXRlX3VuaXQuaW5jbHVkZXMoJ2dkJykgPyAnZ2QnIDogZmxvd19yYXRlX3VuaXRcbiAgICB9YCxcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVNYXJrZXJFdmVudHMgPSAoXG4gIG1hcCxcbiAgcG9pbnQsXG4gIHBvaW50Q3VzdG9tSWNvbixcbiAgaGFuZGxlQ2xpY2ssXG4pID0+IHtcbiAgbGV0IHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG5cbiAgbWFwLm9uKCd6b29tc3RhcnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgbWFwLmNsb3NlUG9wdXAoKTtcbiAgfSk7XG5cbiAgcG9pbnRDdXN0b21JY29uLm9uKCdwb3B1cGNsb3NlJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCBmYWxzZSwgcG9pbnQpO1xuICAgIHRvb2x0aXBWaXNpYmxlID0gZmFsc2U7XG4gIH0pO1xuXG4gIHBvaW50Q3VzdG9tSWNvbi5vbigncG9wdXBvcGVuJywgKCkgPT4ge1xuICAgIC8vIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3ZlcicsICgpID0+IHtcbiAgICBpZiAodG9vbHRpcFZpc2libGUpIHJldHVybjtcblxuICAgIHNldEljb24ocG9pbnRDdXN0b21JY29uLCB0cnVlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSB0cnVlO1xuICB9KTtcblxuICBwb2ludEN1c3RvbUljb24ub24oJ21vdXNlb3V0JywgKCkgPT4ge1xuICAgIGlmIChwb2ludEN1c3RvbUljb24uaXNQb3B1cE9wZW4oKSkgcmV0dXJuO1xuXG4gICAgc2V0SWNvbihwb2ludEN1c3RvbUljb24sIGZhbHNlLCBwb2ludCk7XG4gICAgdG9vbHRpcFZpc2libGUgPSBmYWxzZTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVDbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBvaW50Q3VzdG9tSWNvbi5vbignY2xpY2snLCAoKSA9PiB7XG4gICAgICBoYW5kbGVDbGljayhwb2ludEN1c3RvbUljb24ua2FuZG9fb2JqZWN0X2lkKTtcblxuICAgICAgaWYgKHBvaW50SXNGYWN0b3J5KHBvaW50KSkge1xuICAgICAgICBzZW5kQW5hbHl0aWNzRXZlbnQoJ01hcCBWaWV3IC0gRmFjdG9yeSBjbGlja2VkJywgJ21hcCcsIHtcbiAgICAgICAgICBwb2ludF9pZDogcG9pbnQuaWQsXG4gICAgICAgICAgcG9pbnRfbmFtZTogcG9pbnQubmFtZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBiaW5kUG9wdXBUb01hcmtlciA9IChwb2ludCwgbGF5ZXJHcm91cCwgZmxvd19yYXRlX3VuaXQpID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBgXG4gICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50Jz5cbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXInPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1haW4tY29udGVudF9faGVhZGVyX190aXRsZXNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtYWluLWNvbnRlbnRfX2hlYWRlcl9fdGl0bGVzX190aXRsZSc+JHtcbiAgICAgICAgICAgICAgICAgIHBvaW50Lm5hbWVcbiAgICAgICAgICAgICAgICB9PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19oZWFkZXJfX3RpdGxlc19fc3VidGl0bGUnPiR7XG4gICAgICAgICAgICAgICAgICBwb2ludC5ncm91cC5zZWN0b3JfbmFtZVxuICAgICAgICAgICAgICAgIH08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5Jz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbSc+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbWFpbi1jb250ZW50X19ib2R5X19pdGVtX19pY29uJz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JyR7d2F0ZXJSZXVzZUljb259JyAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzJz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX190aXRsZSc+XG4gICAgICAgICAgICAgICAgICAgICR7Z2V0Rmxvd1JhdGUocG9pbnQuZ3JvdXAud2F0ZXJfZGlzY2hhcmdlLCBmbG93X3JhdGVfdW5pdCl9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21haW4tY29udGVudF9fYm9keV9faXRlbV9fdGl0bGVzX19zdWJ0aXRsZSc+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICd3YXRlcl9kaXNjaGFyZ2UnLFxuICAgICAgICAgICAgICAgICAgKX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBgO1xuXG4gIGxheWVyR3JvdXAuYmluZFBvcHVwKGNvbnRlbnQsIHtcbiAgICBjbGFzc05hbWU6ICdwb2ludC1tYXJrZXItcG9wdXAnLFxuICAgIG1pbldpZHRoOiAnMjE0cHgnLFxuICAgIG1heFdpZHRoOiAnMjE0cHgnLFxuICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGbG93UmF0ZSA9IChcbiAgd2F0ZXJDb25zdW1wdGlvbjogbnVtYmVyLFxuICBmbG93UmF0ZVVuaXQ6IHN0cmluZyxcbiAgaXNSb3VuZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIGlmICh3YXRlckNvbnN1bXB0aW9uID4gMCkge1xuICAgIHJldHVybiAoXG4gICAgICBjYWxjdWxhdGVXYXRlckNvbnN1bXB0aW9uKGZsb3dSYXRlVW5pdCwgd2F0ZXJDb25zdW1wdGlvbiwgaXNSb3VuZCkgK1xuICAgICAgJyAnICtcbiAgICAgIHRyYW5zbGF0ZUZsb3dSYXRlKGZsb3dSYXRlVW5pdClcbiAgICApO1xuICB9XG4gIHJldHVybiBpMThuLnQoJ2V2ZW50c19vdmVydmlldy5zZXZlcml0aWVzLnVua25vd24nKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMYXllckdyb3VwID0gKG1hcCwgbGF5ZXJHcm91cCkgPT4ge1xuICBpZiAobWFwLmhhc0xheWVyKGxheWVyR3JvdXApKSB7XG4gICAgbWFwLnJlbW92ZUxheWVyKGxheWVyR3JvdXApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkTGF5ZXJHcm91cCA9IChtYXAsIGxheWVyR3JvdXApID0+IHtcbiAgaWYgKCFtYXAuaGFzTGF5ZXIobGF5ZXJHcm91cCkpIHtcbiAgICBtYXAuYWRkTGF5ZXIobGF5ZXJHcm91cCk7XG4gIH0gZWxzZSB7XG4gICAgcmVtb3ZlTGF5ZXJHcm91cChtYXAsIGxheWVyR3JvdXApO1xuICAgIGFkZExheWVyR3JvdXAobWFwLCBsYXllckdyb3VwKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBvaW50SXNXV1RQID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgcmV0dXJuIHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc7XG59O1xuXG5leHBvcnQgY29uc3QgcG9pbnRJc0ZhY3RvcnkgPSAocG9pbnQ6IElQb2ludCkgPT4ge1xuICByZXR1cm4gaXNGYWN0b3J5VHlwZShwb2ludC5ncm91cC50eXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0ZhY3RvcnlUeXBlID0gKHR5cGU6IHN0cmluZykgPT4ge1xuICByZXR1cm4gdHlwZSA9PT0gJ0dyb3Vwczo6RmFjdG9yeSc7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUEyQyxJQUFBRSxXQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBSyxnQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBTzNDLElBQUFNLGdCQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RixJQUFBUyxhQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBVSxZQUFBLEdBQUFYLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBVyxZQUFBLEdBQUFaLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBWSxnQkFBQSxHQUFBYixzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQWEsU0FBQSxHQUFBZCxzQkFBQSxDQUFBQyxPQUFBO0FBQUEsSUFBQWMsaUJBQUEsR0FBQWYsc0JBQUEsQ0FBQUMsT0FBQTtBQUFBLElBQUFlLFNBQUEsR0FBQWhCLHNCQUFBLENBQUFDLE9BQUE7QUFBQSxJQUFBZ0Isa0JBQUEsR0FBQWpCLHNCQUFBLENBQUFDLE9BQUE7QUFTekYsSUFBQWlCLFdBQUEsR0FBQWxCLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBa0IsU0FBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixVQUFBLEdBQUFuQixPQUFBO0FBQWlELElBQUFvQixZQUFBLEdBQUFyQixzQkFBQSxDQUFBQyxPQUFBO0FBRWpELElBQUFxQixNQUFBLEdBQUFyQixPQUFBO0FBRU8sSUFBTXNCLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUlDLEtBQWEsRUFBRUMsS0FBYSxFQUFLO0VBQUEsSUFBQUMsbUJBQUE7RUFDbEUsT0FDRSxDQUFBRCxLQUFLLGFBQUxBLEtBQUssd0JBQUFDLG1CQUFBLEdBQUxELEtBQUssQ0FBRUUsWUFBWSxjQUFBRCxtQkFBQSx1QkFBbkJBLG1CQUFBLENBQXFCRSxNQUFNLE1BQUssQ0FBQyxJQUNqQ0osS0FBSyxDQUFDSyxFQUFFLEtBQUtKLEtBQUssQ0FBQ0UsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDRyxRQUFRO0FBRS9DLENBQUM7QUFBQ0MsT0FBQSxDQUFBUixrQkFBQSxHQUFBQSxrQkFBQTtBQUVGLElBQU1TLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUlSLEtBQWEsRUFBSztFQUNuRCxJQUFJUyxNQUFNLE1BQUFDLE1BQUEsQ0FBTVYsS0FBSyxDQUFDVyxLQUFLLENBQUNDLElBQUksTUFBRztFQUVuQyxJQUFJQyxjQUFjLENBQUNiLEtBQUssQ0FBQyxFQUFFO0lBQ3pCUyxNQUFNLG9CQUFBQyxNQUFBLENBQW9CVixLQUFLLENBQUNXLEtBQUssQ0FBQ0csV0FBVyxDQUFFO0lBQ25ETCxNQUFNLCtCQUFBQyxNQUFBLENBQStCVixLQUFLLENBQUNXLEtBQUssQ0FBQ0ksZUFBZSxDQUFFO0VBQ3BFLENBQUMsTUFBTTtJQUNMTixNQUFNLE1BQUFDLE1BQUEsQ0FBTVYsS0FBSyxDQUFDWSxJQUFJLENBQUU7RUFDMUI7RUFFQSxPQUFPSCxNQUFNO0FBQ2YsQ0FBQztBQUVNLElBQU1PLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSUMsSUFBSSxFQUFLO0VBQ3JDLElBQU1DLGVBQXlCLEdBQUdDLGdCQUFDLENBQUNDLE1BQU0sQ0FBQ0gsSUFBSSxDQUFDSSxjQUFjLEVBQUU7SUFDOURDLElBQUksRUFBRSxJQUFBQyw2QkFBa0IsRUFDdEJOLElBQUksQ0FBQ08sU0FBUyxDQUFDYixLQUFLLENBQUNjLElBQUksRUFDekJSLElBQUksQ0FBQ08sU0FBUyxDQUFDWixJQUFJLEVBQ25CLEVBQUUsRUFDRixLQUFLLEVBQ0wsSUFDRixDQUFDO0lBQ0RjLFdBQVcsRUFBRTtFQUNmLENBQUMsQ0FBQztFQUVGLE9BQU9SLGVBQWU7QUFDeEIsQ0FBQztBQUFDWCxPQUFBLENBQUFTLGFBQUEsR0FBQUEsYUFBQTtBQUVLLElBQU1XLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQzVCTixjQUEyQixFQUMzQnJCLEtBQWEsRUFDYjRCLEdBQUcsRUFDSEMsT0FBUSxFQUNSQyxVQUFXLEVBR1I7RUFBQSxJQUZIQyxjQUFjLEdBQUFDLFNBQUEsQ0FBQTVCLE1BQUEsUUFBQTRCLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsT0FBTztFQUFBLElBQ3hCRSxXQUFZLEdBQUFGLFNBQUEsQ0FBQTVCLE1BQUEsT0FBQTRCLFNBQUEsTUFBQUMsU0FBQTtFQUVaLElBQU1FLFFBQVEsR0FBR3RCLGNBQWMsQ0FBQ2IsS0FBSyxDQUFDLEdBQUdBLEtBQUssQ0FBQ1csS0FBSyxDQUFDRyxXQUFXLEdBQUcsRUFBRTtFQUNyRSxJQUFJSSxlQUF5QixHQUFHQyxnQkFBQyxDQUFDQyxNQUFNLENBQUNDLGNBQWMsRUFBRTtJQUN2REMsSUFBSSxFQUFFLElBQUFDLDZCQUFrQixFQUN0QnZCLEtBQUssQ0FBQ1csS0FBSyxDQUFDYyxJQUFJLEVBQ2hCekIsS0FBSyxDQUFDWSxJQUFJLEVBQ1Z1QixRQUFRLEVBQ1IsS0FBSyxFQUNMLElBQ0YsQ0FBQztJQUNEVCxXQUFXLEVBQUU7RUFDZixDQUFDLENBQUM7RUFDRjtFQUNBO0VBQ0FSLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHbEIsS0FBSyxDQUFDSyxFQUFFO0VBQzdDYSxlQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTztFQUN6QyxJQUFJVyxPQUFPLEVBQUVYLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxjQUFjO0VBRTdEWSxVQUFVLENBQUNNLFFBQVEsQ0FBQ2xCLGVBQWUsQ0FBQztFQUNwQyxJQUFJTCxjQUFjLENBQUNiLEtBQUssQ0FBQyxFQUFFO0lBQ3pCcUMsaUJBQWlCLENBQUNyQyxLQUFLLEVBQUVrQixlQUFlLEVBQUVhLGNBQWMsQ0FBQztFQUMzRDtFQUVBTyxrQkFBa0IsQ0FBQ1YsR0FBRyxFQUFFNUIsS0FBSyxFQUFFa0IsZUFBZSxFQUFFZ0IsV0FBVyxDQUFDO0VBRTVELElBQUlsQyxLQUFLLENBQUN1QyxtQkFBbUIsRUFBRTtJQUM3QixJQUFJckIsZ0JBQWUsR0FBR0MsZ0JBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLEVBQUU7TUFDN0NDLElBQUksRUFBRUgsZ0JBQUMsQ0FBQ3FCLE9BQU8sQ0FBQztRQUNkQyxTQUFTLGlCQUFBL0IsTUFBQSxDQUVMVixLQUFLLENBQUN1QyxtQkFBbUIsSUFBSSxHQUFHLEdBQzVCLHFEQUFxRCxHQUNyRCxzQkFBc0IsbUJBQUE3QixNQUFBLENBRTFCVixLQUFLLENBQUN1QyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsYUFBYSxHQUFHLEVBQUUsbUJBQ2pEO1FBQ0xHLElBQUksUUFBQWhDLE1BQUEsQ0FBUVYsS0FBSyxDQUFDdUMsbUJBQW1CLFNBQU07UUFDM0NJLFVBQVUsRUFBRSxJQUFBQyx5QkFBZSxFQUFDaEIsR0FBRyxDQUFDaUIsS0FBSyxDQUFDLENBQUNGO01BQ3pDLENBQUMsQ0FBQztNQUNGakIsV0FBVyxFQUFFLEtBQUs7TUFDbEJvQixPQUFPLEVBQUVqQixPQUFPLEdBQUcsQ0FBQyxHQUFHO0lBQ3pCLENBQUMsQ0FBQztJQUVGWCxnQkFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUdsQixLQUFLLENBQUNLLEVBQUU7SUFDN0NhLGdCQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsWUFBWTtJQUM5QyxJQUFJVyxPQUFPLEVBQUVYLGdCQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsbUJBQW1CO0VBQ3BFO0FBQ0YsQ0FBQztBQUFDWCxPQUFBLENBQUFvQixpQkFBQSxHQUFBQSxpQkFBQTtBQUVLLElBQU1vQixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3QjFCLGNBQTJCLEVBQzNCckIsS0FBYSxFQUNiNEIsR0FBRyxFQUNIQyxPQUFRLEVBQ1JDLFVBQVcsRUFDUjtFQUNILElBQUlrQixTQUFTLEdBQUcsSUFBSTdCLGdCQUFDLENBQUM4QixJQUFJLENBQUM7SUFDekJDLE9BQU8sRUFBRUMsbUJBQVU7SUFDbkJDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEJULFVBQVUsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0VBQ3ZCLENBQUMsQ0FBQztFQUNGLElBQUlVLFdBQWdCLEdBQUcsSUFBSWxDLGdCQUFDLENBQUNtQyxNQUFNLENBQUNqQyxjQUFjLEVBQUU7SUFDbERDLElBQUksRUFBRTBCLFNBQVM7SUFDZnRCLFdBQVcsRUFBRTtFQUNmLENBQUMsQ0FBQztFQUNGMkIsV0FBVyxDQUFDRSxXQUFXLENBQUMvQyx5QkFBeUIsQ0FBQ1IsS0FBSyxDQUFDLENBQUM7RUFDekRxRCxXQUFXLENBQUMsaUJBQWlCLENBQUMsR0FBR3JELEtBQUssQ0FBQ0ssRUFBRTtFQUN6Q2dELFdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPO0VBQ3JDQSxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxTQUFTO0VBQzNDLElBQUl4QixPQUFPLEVBQUV3QixXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsY0FBYztFQUN6RHZCLFVBQVUsQ0FBQ00sUUFBUSxDQUFDaUIsV0FBVyxDQUFDO0FBQ2xDLENBQUM7QUFBQzlDLE9BQUEsQ0FBQXdDLGtCQUFBLEdBQUFBLGtCQUFBO0FBRUssSUFBTVMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBSXhELEtBQWEsRUFBRUMsS0FBYSxFQUFLO0VBQ2hFLFFBQVFELEtBQUssQ0FBQ1csS0FBSyxDQUFDYyxJQUFJO0lBQ3RCLEtBQUssaUJBQWlCO01BQ3BCLElBQUlnQyxtQkFBbUIsQ0FBQ3JELE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDcEMsSUFBSXNELDZCQUE2QixDQUFDekQsS0FBSyxFQUFFRCxLQUFLLENBQUMsRUFBRTtVQUMvQ3lELG1CQUFtQixDQUFDRSxPQUFPLENBQUNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNuRCxDQUFDLE1BQU0sSUFBSUMscUJBQXFCLENBQUM1RCxLQUFLLEVBQUVELEtBQUssQ0FBQyxFQUFFO1VBQzlDeUQsbUJBQW1CLENBQUNFLE9BQU8sQ0FBQ0cseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsTUFBTTtVQUNMTCxtQkFBbUIsQ0FBQ0UsT0FBTyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDbkQ7TUFDRjtNQUVBLE9BQU9OLG1CQUFtQjtJQUM1QixLQUFLLHFCQUFxQjtNQUN4QixJQUFJTyx1QkFBdUIsQ0FBQzVELE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDeEMsSUFBSXNELDZCQUE2QixDQUFDekQsS0FBSyxFQUFFRCxLQUFLLENBQUMsRUFBRTtVQUMvQ2dFLHVCQUF1QixDQUFDTCxPQUFPLENBQUNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLE1BQU0sSUFBSUMscUJBQXFCLENBQUM1RCxLQUFLLEVBQUVELEtBQUssQ0FBQyxFQUFFO1VBQzlDZ0UsdUJBQXVCLENBQUNMLE9BQU8sQ0FBQ0cseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUMsTUFBTTtVQUNMRSx1QkFBdUIsQ0FBQ0wsT0FBTyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDdkQ7TUFDRjtNQUVBLE9BQU9DLHVCQUF1QjtJQUNoQyxLQUFLLGtDQUFrQztNQUNyQyxJQUFJQyxnQkFBZ0IsQ0FBQzdELE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDakMsSUFBSXNELDZCQUE2QixDQUFDekQsS0FBSyxFQUFFRCxLQUFLLENBQUMsRUFBRTtVQUMvQ2lFLGdCQUFnQixDQUFDTixPQUFPLENBQUNDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDLE1BQU0sSUFBSUMscUJBQXFCLENBQUM1RCxLQUFLLEVBQUVELEtBQUssQ0FBQyxFQUFFO1VBQzlDaUUsZ0JBQWdCLENBQUNOLE9BQU8sQ0FBQ0cseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsTUFBTTtVQUNMRyxnQkFBZ0IsQ0FBQ04sT0FBTyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDaEQ7TUFDRjtNQUVBLE9BQU9FLGdCQUFnQjtJQUV6QixLQUFLLG9CQUFvQjtNQUN2QixJQUFJbEUsa0JBQWtCLENBQUNDLEtBQUssRUFBRUMsS0FBSyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxDQUNMa0IsZ0JBQUMsQ0FBQ0csSUFBSSxDQUFDO1VBQ0w0QixPQUFPLEVBQUVnQix3QkFBZTtVQUN4QmQsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUNoQlQsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7UUFDckIsQ0FBQyxDQUFDLEVBRUZ4QixnQkFBQyxDQUFDRyxJQUFJLENBQUM7VUFDTDRCLE9BQU8sRUFBRWlCLDBCQUFxQjtVQUM5QmYsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztVQUVoQlQsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztVQUNwQnlCLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDdEIsQ0FBQyxDQUFDLENBQ0g7TUFDSDtNQUVBLE9BQU9DLHNCQUFzQjtJQUUvQjtNQUNFLE9BQU8sSUFBSTtFQUNmO0FBQ0YsQ0FBQztBQUFDOUQsT0FBQSxDQUFBaUQsZ0JBQUEsR0FBQUEsZ0JBQUE7QUFFSyxJQUFNTyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBRzFCO0VBQUEsSUFGSE8sU0FBa0IsR0FBQXRDLFNBQUEsQ0FBQTVCLE1BQUEsUUFBQTRCLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsS0FBSztFQUFBLElBQzFCdUMsS0FBYyxHQUFBdkMsU0FBQSxDQUFBNUIsTUFBQSxRQUFBNEIsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxLQUFLO0VBRXRCLE9BQU9iLGdCQUFDLENBQUNHLElBQUksQ0FBQztJQUNaNEIsT0FBTyxFQUFFc0IsNEJBQW1CO0lBQzVCcEIsUUFBUSxFQUFFa0IsU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQzNCLFVBQVUsRUFBRTJCLFNBQVMsSUFBSUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUdELFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUMzRUYsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixDQUFDLENBQUM7QUFDSixDQUFDO0FBQUM3RCxPQUFBLENBQUF3RCxrQkFBQSxHQUFBQSxrQkFBQTtBQUVLLElBQU1OLG1CQUFtQixHQUFHLENBQ2pDdEMsZ0JBQUMsQ0FBQ0csSUFBSSxDQUFDO0VBQ0w0QixPQUFPLEVBQUV1QixxQkFBZTtFQUN4QnJCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEJULFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7RUFDeEJ5QixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxFQUNGakQsZ0JBQUMsQ0FBQ0csSUFBSSxDQUFDO0VBQ0w0QixPQUFPLEVBQUV3QixvQkFBWTtFQUNyQnRCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEJULFVBQVUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDbkJ5QixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxDQUNIO0FBQUM3RCxPQUFBLENBQUFrRCxtQkFBQSxHQUFBQSxtQkFBQTtBQUVLLElBQU1PLHVCQUF1QixHQUFHLENBQ3JDN0MsZ0JBQUMsQ0FBQ0csSUFBSSxDQUFDO0VBQ0w0QixPQUFPLEVBQUV5QixvQkFBYztFQUN2QnZCLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7RUFDaEJULFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7RUFDeEJ5QixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxFQUNGakQsZ0JBQUMsQ0FBQ0csSUFBSSxDQUFDO0VBQ0w0QixPQUFPLEVBQUUwQix3QkFBa0I7RUFDM0J4QixRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQ2hCVCxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBQ25CeUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FDSDtBQUFDN0QsT0FBQSxDQUFBeUQsdUJBQUEsR0FBQUEsdUJBQUE7QUFFSyxJQUFNSyxzQkFBc0IsR0FBRyxDQUNwQ2xELGdCQUFDLENBQUNHLElBQUksQ0FBQztFQUNMNEIsT0FBTyxFQUFFMkIsaUJBQWE7RUFDdEJ6QixRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBRWhCVCxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0VBQ3BCeUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FDSDtBQUFDN0QsT0FBQSxDQUFBOEQsc0JBQUEsR0FBQUEsc0JBQUE7QUFFSyxJQUFNSixnQkFBZ0IsR0FBRyxDQUM5QjlDLGdCQUFDLENBQUNHLElBQUksQ0FBQztFQUNMNEIsT0FBTyxFQUFFNEIseUJBQW1CO0VBQzVCMUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQlQsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztFQUN4QnlCLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLEVBQ0ZqRCxnQkFBQyxDQUFDRyxJQUFJLENBQUM7RUFDTDRCLE9BQU8sRUFBRTZCLGlCQUFXO0VBQ3BCM0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUNoQlQsVUFBVSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUNuQnlCLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQ0g7QUFBQzdELE9BQUEsQ0FBQTBELGdCQUFBLEdBQUFBLGdCQUFBO0FBRUssSUFBTUwsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFTO0VBQ3RDLE9BQU96QyxnQkFBQyxDQUFDRyxJQUFJLENBQUM7SUFDWjRCLE9BQU8sRUFBRWdCLHdCQUFlO0lBQ3hCZCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCVCxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3BCeUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixDQUFDLENBQUM7QUFDSixDQUFDO0FBQUM3RCxPQUFBLENBQUFxRCxrQkFBQSxHQUFBQSxrQkFBQTtBQUVLLElBQU1FLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUEsRUFBUztFQUM3QyxPQUFPM0MsZ0JBQUMsQ0FBQ0csSUFBSSxDQUFDO0lBQ1o0QixPQUFPLEVBQUU4QiwwQkFBaUI7SUFDMUI1QixRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCVCxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3BCeUIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixDQUFDLENBQUM7QUFDSixDQUFDO0FBQUM3RCxPQUFBLENBQUF1RCx5QkFBQSxHQUFBQSx5QkFBQTtBQUVLLElBQU1KLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQUl6RCxLQUFhLEVBQUVELEtBQWEsRUFBSztFQUM3RSxJQUFJaUYsTUFBTTtFQUVWLElBQUloRixLQUFLLEtBQUssSUFBSSxJQUFJQSxLQUFLLEtBQUtnQyxTQUFTLEVBQUU7SUFDekNnRCxNQUFNLEdBQUdoRixLQUFLLENBQUNpRixPQUFPLENBQUNDLE1BQU0sQ0FBQyxVQUFDRixNQUFNO01BQUEsT0FBS0EsTUFBTSxDQUFDM0UsUUFBUSxLQUFLTixLQUFLLENBQUNLLEVBQUU7SUFBQSxFQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVFO0VBRUEsT0FBT0osS0FBSyxLQUFLLElBQUksSUFBSWdGLE1BQU0sSUFBSWhGLEtBQUssQ0FBQ21GLGVBQWUsS0FBS0gsTUFBTSxDQUFDM0UsUUFBUTtBQUM5RSxDQUFDO0FBQUNDLE9BQUEsQ0FBQW1ELDZCQUFBLEdBQUFBLDZCQUFBO0FBRUssSUFBTUcscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBSTVELEtBQWEsRUFBRUQsS0FBYSxFQUFLO0VBQ3JFLElBQUlDLEtBQUssS0FBS2dDLFNBQVMsRUFBRTtFQUN6QixPQUNFaEMsS0FBSyxLQUFLLElBQUksSUFDZEEsS0FBSyxDQUFDaUYsT0FBTyxDQUFDQyxNQUFNLENBQUMsVUFBQ0YsTUFBTTtJQUFBLE9BQUtBLE1BQU0sQ0FBQzNFLFFBQVEsS0FBS04sS0FBSyxDQUFDSyxFQUFFO0VBQUEsRUFBQyxDQUFDLENBQUMsQ0FBQztBQUVyRSxDQUFDO0FBQUNFLE9BQUEsQ0FBQXNELHFCQUFBLEdBQUFBLHFCQUFBO0FBRUssSUFBTXdCLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQ2xDaEUsY0FBMkIsRUFDM0JpRSxhQUFzQixFQUN0QjFELEdBQUcsRUFDSDVCLEtBQWEsRUFDYkMsS0FBYSxFQUNiNEIsT0FBUSxFQUNSQyxVQUFXLEVBQ1I7RUFDSDtFQUNBO0VBQ0EsSUFBSXlELFlBQVksR0FBRyxDQUNqQnBFLGdCQUFDLENBQUNHLElBQUksQ0FBQztJQUNMNEIsT0FBTyxFQUFFc0MsbUJBQWE7SUFDdEJwQyxRQUFRLEVBQUVrQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDM0MsVUFBVSxFQUFFMkMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0lBQ25EbEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixDQUFDLENBQUMsRUFDRmpELGdCQUFDLENBQUNHLElBQUksQ0FBQztJQUNMNEIsT0FBTyxFQUFFdUMscUJBQWU7SUFDeEJyQyxRQUFRLEVBQUVrQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDM0MsVUFBVSxFQUFFMkMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQzlDbEIsV0FBVyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtFQUN0QixDQUFDLENBQUMsQ0FDSDtFQUVELElBQUlzQixTQUFTLEdBQUcsS0FBSztFQUNyQixJQUFJaEMsNkJBQTZCLENBQUN6RCxLQUFLLEVBQUVELEtBQUssQ0FBQyxJQUFJLENBQUNzRixhQUFhLEVBQUU7SUFDakVDLFlBQVksQ0FBQzVCLE9BQU8sQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0VBQzVDLENBQUMsTUFBTSxJQUFJQyxxQkFBcUIsQ0FBQzVELEtBQUssRUFBRUQsS0FBSyxDQUFDLElBQUksQ0FBQ3NGLGFBQWEsRUFBRTtJQUNoRUMsWUFBWSxDQUFDNUIsT0FBTyxDQUFDRyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7RUFDbkQsQ0FBQyxNQUFNO0lBQ0w0QixTQUFTLEdBQUcsSUFBSTtJQUNoQkgsWUFBWSxDQUFDNUIsT0FBTyxDQUFDSSxrQkFBa0IsQ0FBQ3VCLGFBQWEsRUFBRUksU0FBUyxDQUFDLENBQUM7RUFDcEU7RUFFQUgsWUFBWSxDQUFDSSxPQUFPLENBQUMsVUFBQ3JFLElBQUksRUFBRXNFLEtBQUssRUFBSztJQUNwQyxJQUFJMUUsZUFBb0IsR0FBR0MsZ0JBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLEVBQUU7TUFDbERDLElBQUksRUFBRUEsSUFBSTtNQUNWSSxXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFDRlIsZUFBZSxDQUFDcUMsV0FBVyxDQUFDL0MseUJBQXlCLENBQUNSLEtBQUssQ0FBQyxDQUFDO0lBQzdEa0IsZUFBZSxDQUFDLG9CQUFvQixDQUFDLEdBQUcwRSxLQUFLO0lBQzdDMUUsZUFBZSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSTtJQUM5Q0EsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUd3RSxTQUFTLEdBQUcsS0FBSyxHQUFHSixhQUFhO0lBQ3RFcEUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHd0UsU0FBUztJQUMxQ3hFLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHbEIsS0FBSyxDQUFDSyxFQUFFO0lBQzdDYSxlQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVTtJQUM1QyxJQUFJVyxPQUFPLEVBQUVYLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxpQkFBaUI7SUFDaEVZLFVBQVUsQ0FBQ00sUUFBUSxDQUFDbEIsZUFBZSxDQUFDO0VBQ3RDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFBQ1gsT0FBQSxDQUFBOEUsdUJBQUEsR0FBQUEsdUJBQUE7QUFFSyxJQUFNUSwwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTBCQSxDQUNyQ3hFLGNBQTJCLEVBQzNCaUUsYUFBc0IsRUFDdEIxRCxHQUFHLEVBQ0g1QixLQUFhLEVBQ2JDLEtBQWEsRUFDYjRCLE9BQVEsRUFDUkMsVUFBVyxFQUNSO0VBQ0g7RUFDQTtFQUNBLElBQUlnRSxlQUFlLEdBQUcsQ0FDcEIzRSxnQkFBQyxDQUFDRyxJQUFJLENBQUM7SUFDTDRCLE9BQU8sRUFBRTZDLG1CQUFhO0lBQ3RCM0MsUUFBUSxFQUFFa0MsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QzNDLFVBQVUsRUFBRTJDLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztJQUNuRGxCLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7RUFDdEIsQ0FBQyxDQUFDLEVBQ0ZqRCxnQkFBQyxDQUFDRyxJQUFJLENBQUM7SUFDTDRCLE9BQU8sRUFBRThDLHdCQUFrQjtJQUMzQjVDLFFBQVEsRUFBRWtDLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMzQyxVQUFVLEVBQUUyQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDOUNsQixXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQ3RCLENBQUMsQ0FBQyxDQUNIO0VBRUQsSUFBSVYsNkJBQTZCLENBQUN6RCxLQUFLLEVBQUVELEtBQUssQ0FBQyxJQUFJLENBQUNzRixhQUFhLEVBQUU7SUFDakVRLGVBQWUsQ0FBQ25DLE9BQU8sQ0FBQ0Msa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0VBQy9DLENBQUMsTUFBTSxJQUFJQyxxQkFBcUIsQ0FBQzVELEtBQUssRUFBRUQsS0FBSyxDQUFDLElBQUksQ0FBQ3NGLGFBQWEsRUFBRTtJQUNoRVEsZUFBZSxDQUFDbkMsT0FBTyxDQUFDRyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7RUFDdEQsQ0FBQyxNQUFNO0lBQ0xnQyxlQUFlLENBQUNuQyxPQUFPLENBQUNJLGtCQUFrQixDQUFDdUIsYUFBYSxDQUFDLENBQUM7RUFDNUQ7RUFFQVEsZUFBZSxDQUFDSCxPQUFPLENBQUMsVUFBQ3JFLElBQUksRUFBRXNFLEtBQUssRUFBSztJQUN2QyxJQUFJMUUsZUFBb0IsR0FBR0MsZ0JBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLEVBQUU7TUFDbERDLElBQUksRUFBRUEsSUFBSTtNQUNWSSxXQUFXLEVBQUU7SUFDZixDQUFDLENBQUM7SUFDRlIsZUFBZSxDQUFDcUMsV0FBVyxDQUFDL0MseUJBQXlCLENBQUNSLEtBQUssQ0FBQyxDQUFDO0lBQzdEa0IsZUFBZSxDQUFDLG9CQUFvQixDQUFDLEdBQUcwRSxLQUFLO0lBQzdDMUUsZUFBZSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSTtJQUM5Q0EsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEdBQUdvRSxhQUFhO0lBQ2xEcEUsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUs7SUFDdENBLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHbEIsS0FBSyxDQUFDSyxFQUFFO0lBQzdDYSxlQUFlLENBQUMsY0FBYyxDQUFDLEdBQUcsYUFBYTtJQUMvQyxJQUFJVyxPQUFPLEVBQUVYLGVBQWUsQ0FBQyxjQUFjLENBQUMsR0FBRyxvQkFBb0I7SUFDbkVZLFVBQVUsQ0FBQ00sUUFBUSxDQUFDbEIsZUFBZSxDQUFDO0VBQ3RDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFBQ1gsT0FBQSxDQUFBc0YsMEJBQUEsR0FBQUEsMEJBQUE7QUFFSyxJQUFNSSxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUM5QjVFLGNBQTJCLEVBQzNCcEIsS0FBYSxFQUNiRCxLQUFhLEVBQ2I0QixHQUFHLEVBQ0hDLE9BQU8sRUFDUEMsVUFBVyxFQUNSO0VBQ0gsSUFBSW9FLGVBQWUsR0FBR2pHLEtBQUssQ0FBQ2tHLFNBQVMsQ0FBQ3ZFLEdBQUcsQ0FBQyxVQUFDd0UsQ0FBQztJQUFBLE9BQUtBLENBQUMsQ0FBQzlGLFFBQVE7RUFBQSxFQUFDO0VBQzVELElBQ0VMLEtBQUssS0FBSyxJQUFJLElBQ2RBLEtBQUssQ0FBQ2tHLFNBQVMsQ0FBQy9GLE1BQU0sS0FBSyxDQUFDLElBQzVCOEYsZUFBZSxDQUFDRyxRQUFRLENBQUNyRyxLQUFLLENBQUNLLEVBQUUsQ0FBQyxFQUNsQztJQUNBZ0YsdUJBQXVCLENBQ3JCaEUsY0FBYyxFQUNkbUMsZ0JBQWdCLENBQUN4RCxLQUFLLEVBQUVDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFDdkMyQixHQUFHLEVBQ0g1QixLQUFLLEVBQ0xDLEtBQUssRUFDTDRCLE9BQU8sRUFDUEMsVUFDRixDQUFDO0VBQ0g7QUFDRixDQUFDO0FBQUN2QixPQUFBLENBQUEwRixtQkFBQSxHQUFBQSxtQkFBQTtBQUVLLElBQU1LLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFJQyxHQUFRLEVBQUV2RyxLQUFhLEVBQUs7RUFDdkQsSUFBSXVHLEdBQUcsS0FBSyxJQUFJLEVBQUU7SUFDaEIsb0hBQUE3RixNQUFBLENBRTREVixLQUFLLENBQUNLLEVBQUUsMENBQUFLLE1BQUEsQ0FDeEM4RixrQkFBUyxpSkFBQTlGLE1BQUEsQ0FHcUJWLEtBQUssQ0FBQ1csS0FBSyxDQUFDQyxJQUFJO0VBTzVFLENBQUMsTUFBTTtJQUNMLG9IQUFBRixNQUFBLENBRTRENkYsR0FBRyxDQUFDbEcsRUFBRSwwQ0FBQUssTUFBQSxDQUN0QzhGLGtCQUFTLGlKQUFBOUYsTUFBQSxDQUluQlYsS0FBSyxDQUFDVyxLQUFLLENBQUNDLElBQUksNklBQUFGLE1BQUEsQ0FHeUIrRixhQUFJLENBQUNDLENBQUMsMkJBRTdDLENBQUMsa0RBQUFoRyxNQUFBLENBRUMsMkJBQTJCLEdBQUc2RixHQUFHLENBQUNJLFFBQVEsZ0hBQUFqRyxNQUFBLENBR2xDK0YsYUFBSSxDQUFDQyxDQUFDLCtCQUFBaEcsTUFBQSxDQUN3QjZGLEdBQUcsQ0FBQ0ksUUFBUSxDQUM1QyxDQUFDLDRWQUFBakcsTUFBQSxDQVNrQytGLGFBQUksQ0FBQ0MsQ0FBQyw2QkFFN0MsQ0FBQyx5TkFBQWhHLE1BQUEsQ0FJc0MrRixhQUFJLENBQUNDLENBQUMsNEJBRTdDLENBQUM7RUFPM0I7QUFDRixDQUFDO0FBQUNuRyxPQUFBLENBQUErRixZQUFBLEdBQUFBLFlBQUE7QUFFSyxJQUFNTSxPQUFPLEdBQUcsU0FBVkEsT0FBT0EsQ0FBSUMsT0FBTyxFQUFFQyxPQUFPLEVBQUU5RyxLQUFLLEVBQUs7RUFDbEQ2RyxPQUFPLENBQUNELE9BQU8sQ0FDYixJQUFBckYsNkJBQWtCLEVBQ2hCdkIsS0FBSyxDQUFDVyxLQUFLLENBQUNjLElBQUksRUFDaEJ6QixLQUFLLENBQUNZLElBQUksRUFDVlosS0FBSyxDQUFDVyxLQUFLLENBQUNHLFdBQVcsRUFDdkJnRyxPQUFPLEVBQ1AsQ0FBQ0EsT0FDSCxDQUNGLENBQUM7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFBQXZHLE9BQUEsQ0FBQXFHLE9BQUEsR0FBQUEsT0FBQTtBQUNPLElBQU1HLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQ3BDaEYsY0FBc0IsRUFDdEJpRixnQkFBd0IsRUFFckI7RUFBQSxJQURIQyxrQkFBMkIsR0FBQWpGLFNBQUEsQ0FBQTVCLE1BQUEsUUFBQTRCLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsS0FBSztFQUVuQyxJQUFJa0YsVUFBVSxHQUFHLEdBQUc7RUFFcEIsSUFBSUYsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO0lBQ3hCLFFBQVFqRixjQUFjO01BQ3BCLEtBQUssS0FBSztRQUNSbUYsVUFBVSxHQUFHRixnQkFBZ0IsQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN4QztNQUNGLEtBQUssT0FBTztRQUNWRCxVQUFVLEdBQUcsQ0FBQ0YsZ0JBQWdCLEdBQUcsT0FBTyxFQUFFRyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BEO01BQ0YsS0FBSyxPQUFPO1FBQ1ZELFVBQVUsR0FBRyxDQUFDRixnQkFBZ0IsR0FBRyxPQUFPLEVBQUVHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEQ7SUFDSjtFQUNGO0VBQ0EsSUFBSUYsa0JBQWtCLEVBQUU7SUFDdEIsT0FBT0csc0JBQXNCLENBQUNDLFVBQVUsQ0FBQ0gsVUFBVSxDQUFDLENBQUMsQ0FBQ0ksY0FBYyxDQUFDLENBQUM7RUFDeEUsQ0FBQyxNQUFNO0lBQ0wsT0FBT0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILFVBQVUsQ0FBQ0gsVUFBVSxDQUFDLENBQUMsQ0FBQ0ksY0FBYyxDQUFDLENBQUM7RUFDNUQ7QUFDRixDQUFDO0FBQUMvRyxPQUFBLENBQUF3Ryx5QkFBQSxHQUFBQSx5QkFBQTtBQUVGLElBQU1LLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlLLE1BQU0sRUFBSztFQUN6QztFQUNBO0VBQ0E7O0VBRUEsSUFBSUEsTUFBTSxHQUFHLElBQUksRUFBRTtJQUNqQixPQUFPRixJQUFJLENBQUNDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDO0VBQzNCO0VBRUEsSUFBTUMsZ0JBQWdCLEdBQUdILElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0VBQ2xELElBQU1FLFlBQVksR0FBR0QsZ0JBQWdCLEdBQUcsSUFBSTtFQUU1QyxPQUFPQyxZQUFZO0FBQ3JCLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUk3RixjQUFjLEVBQUs7RUFDbkQsT0FBTzBFLGFBQUksQ0FBQ0MsQ0FBQyxnREFBQWhHLE1BQUEsQ0FFVHFCLGNBQWMsQ0FBQ3NFLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUd0RSxjQUFjLENBRXpELENBQUM7QUFDSCxDQUFDO0FBQUN4QixPQUFBLENBQUFxSCxpQkFBQSxHQUFBQSxpQkFBQTtBQUVLLElBQU10RixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUM3QlYsR0FBRyxFQUNINUIsS0FBSyxFQUNMa0IsZUFBZSxFQUNmZ0IsV0FBVyxFQUNSO0VBQ0gsSUFBSTJGLGNBQWMsR0FBRyxLQUFLO0VBRTFCakcsR0FBRyxDQUFDa0csRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZO0lBQzlCbEcsR0FBRyxDQUFDbUcsVUFBVSxDQUFDLENBQUM7RUFDbEIsQ0FBQyxDQUFDO0VBRUY3RyxlQUFlLENBQUM0RyxFQUFFLENBQUMsWUFBWSxFQUFFLFlBQU07SUFDckM7SUFDQUQsY0FBYyxHQUFHLEtBQUs7RUFDeEIsQ0FBQyxDQUFDO0VBRUYzRyxlQUFlLENBQUM0RyxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQU07SUFDcEM7SUFDQUQsY0FBYyxHQUFHLElBQUk7RUFDdkIsQ0FBQyxDQUFDO0VBRUYzRyxlQUFlLENBQUM0RyxFQUFFLENBQUMsV0FBVyxFQUFFLFlBQU07SUFDcEMsSUFBSUQsY0FBYyxFQUFFO0lBRXBCakIsT0FBTyxDQUFDMUYsZUFBZSxFQUFFLElBQUksRUFBRWxCLEtBQUssQ0FBQztJQUNyQzZILGNBQWMsR0FBRyxJQUFJO0VBQ3ZCLENBQUMsQ0FBQztFQUVGM0csZUFBZSxDQUFDNEcsRUFBRSxDQUFDLFVBQVUsRUFBRSxZQUFNO0lBQ25DLElBQUk1RyxlQUFlLENBQUM4RyxXQUFXLENBQUMsQ0FBQyxFQUFFO0lBRW5DcEIsT0FBTyxDQUFDMUYsZUFBZSxFQUFFLEtBQUssRUFBRWxCLEtBQUssQ0FBQztJQUN0QzZILGNBQWMsR0FBRyxLQUFLO0VBQ3hCLENBQUMsQ0FBQztFQUVGLElBQUksT0FBTzNGLFdBQVcsS0FBSyxVQUFVLEVBQUU7SUFDckNoQixlQUFlLENBQUM0RyxFQUFFLENBQUMsT0FBTyxFQUFFLFlBQU07TUFDaEM1RixXQUFXLENBQUNoQixlQUFlLENBQUMrRyxlQUFlLENBQUM7TUFFNUMsSUFBSXBILGNBQWMsQ0FBQ2IsS0FBSyxDQUFDLEVBQUU7UUFDekIsSUFBQWtJLHlCQUFrQixFQUFDLDRCQUE0QixFQUFFLEtBQUssRUFBRTtVQUN0RDVILFFBQVEsRUFBRU4sS0FBSyxDQUFDSyxFQUFFO1VBQ2xCOEgsVUFBVSxFQUFFbkksS0FBSyxDQUFDWTtRQUNwQixDQUFDLENBQUM7TUFDSjtJQUNGLENBQUMsQ0FBQztFQUNKO0FBQ0YsQ0FBQztBQUFDTCxPQUFBLENBQUErQixrQkFBQSxHQUFBQSxrQkFBQTtBQUVLLElBQU1ELGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlyQyxLQUFLLEVBQUU4QixVQUFVLEVBQUVDLGNBQWMsRUFBSztFQUN0RSxJQUFJcUcsT0FBTywrTUFBQTFILE1BQUEsQ0FLS1YsS0FBSyxDQUFDWSxJQUFJLGtGQUFBRixNQUFBLENBR1ZWLEtBQUssQ0FBQ1csS0FBSyxDQUFDRyxXQUFXLHFQQUFBSixNQUFBLENBUVQySCxvQkFBYyxpTUFBQTNILE1BQUEsQ0FJeEI0SCxXQUFXLENBQUN0SSxLQUFLLENBQUNXLEtBQUssQ0FBQ0ksZUFBZSxFQUFFZ0IsY0FBYyxDQUFDLDRHQUFBckIsTUFBQSxDQUVGK0YsYUFBSSxDQUFDQyxDQUFDLENBQzlELGlCQUNGLENBQUMseUZBS2Q7RUFFSDVFLFVBQVUsQ0FBQ3lHLFNBQVMsQ0FBQ0gsT0FBTyxFQUFFO0lBQzVCM0YsU0FBUyxFQUFFLG9CQUFvQjtJQUMvQitGLFFBQVEsRUFBRSxPQUFPO0lBQ2pCQyxRQUFRLEVBQUUsT0FBTztJQUNqQkMsV0FBVyxFQUFFO0VBQ2YsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUFDbkksT0FBQSxDQUFBOEIsaUJBQUEsR0FBQUEsaUJBQUE7QUFFSyxJQUFNaUcsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQ3RCdEIsZ0JBQXdCLEVBQ3hCMkIsWUFBb0IsRUFFakI7RUFBQSxJQURIQyxPQUFnQixHQUFBNUcsU0FBQSxDQUFBNUIsTUFBQSxRQUFBNEIsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxLQUFLO0VBRXhCLElBQUlnRixnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7SUFDeEIsT0FDRUQseUJBQXlCLENBQUM0QixZQUFZLEVBQUUzQixnQkFBZ0IsRUFBRTRCLE9BQU8sQ0FBQyxHQUNsRSxHQUFHLEdBQ0hoQixpQkFBaUIsQ0FBQ2UsWUFBWSxDQUFDO0VBRW5DO0VBQ0EsT0FBT2xDLGFBQUksQ0FBQ0MsQ0FBQyxDQUFDLG9DQUFvQyxDQUFDO0FBQ3JELENBQUM7QUFBQ25HLE9BQUEsQ0FBQStILFdBQUEsR0FBQUEsV0FBQTtBQUVLLElBQU1PLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUlqSCxHQUFHLEVBQUVFLFVBQVUsRUFBSztFQUNuRCxJQUFJRixHQUFHLENBQUNrSCxRQUFRLENBQUNoSCxVQUFVLENBQUMsRUFBRTtJQUM1QkYsR0FBRyxDQUFDbUgsV0FBVyxDQUFDakgsVUFBVSxDQUFDO0VBQzdCO0FBQ0YsQ0FBQztBQUFDdkIsT0FBQSxDQUFBc0ksZ0JBQUEsR0FBQUEsZ0JBQUE7QUFFSyxJQUFNRyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlwSCxHQUFHLEVBQUVFLFVBQVUsRUFBSztFQUNoRCxJQUFJLENBQUNGLEdBQUcsQ0FBQ2tILFFBQVEsQ0FBQ2hILFVBQVUsQ0FBQyxFQUFFO0lBQzdCRixHQUFHLENBQUNRLFFBQVEsQ0FBQ04sVUFBVSxDQUFDO0VBQzFCLENBQUMsTUFBTTtJQUNMK0csZ0JBQWdCLENBQUNqSCxHQUFHLEVBQUVFLFVBQVUsQ0FBQztJQUNqQ2tILGFBQWEsQ0FBQ3BILEdBQUcsRUFBRUUsVUFBVSxDQUFDO0VBQ2hDO0FBQ0YsQ0FBQztBQUFDdkIsT0FBQSxDQUFBeUksYUFBQSxHQUFBQSxhQUFBO0FBRUssSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlqSixLQUFhLEVBQUs7RUFDNUMsT0FBT0EsS0FBSyxDQUFDVyxLQUFLLENBQUNjLElBQUksS0FBSyxrQ0FBa0M7QUFDaEUsQ0FBQztBQUFDbEIsT0FBQSxDQUFBMEksV0FBQSxHQUFBQSxXQUFBO0FBRUssSUFBTXBJLGNBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSWIsS0FBYSxFQUFLO0VBQy9DLE9BQU9rSixhQUFhLENBQUNsSixLQUFLLENBQUNXLEtBQUssQ0FBQ2MsSUFBSSxDQUFDO0FBQ3hDLENBQUM7QUFBQ2xCLE9BQUEsQ0FBQU0sY0FBQSxHQUFBQSxjQUFBO0FBRUssSUFBTXFJLGFBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSXpILElBQVksRUFBSztFQUM3QyxPQUFPQSxJQUFJLEtBQUssaUJBQWlCO0FBQ25DLENBQUM7QUFBQ2xCLE9BQUEsQ0FBQTJJLGFBQUEsR0FBQUEsYUFBQSJ9