@kando-env/kando-ui 1.2.122-alpha.8 → 1.2.122

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 (32) hide show
  1. package/lib/Widgets/Map/Map.js +161 -38
  2. package/lib/Widgets/Map/areas/AreaPolygon.js +2 -2
  3. package/lib/Widgets/Map/events/EventIndicator.js +46 -21
  4. package/lib/Widgets/Map/events/EventIndicatorHover.js +252 -0
  5. package/lib/Widgets/Map/events/EventPath.js +37 -16
  6. package/lib/Widgets/Map/events/EventPathHover.js +81 -0
  7. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +117 -3
  8. package/lib/Widgets/Map/points/PointMarker.js +472 -10
  9. package/lib/Widgets/Map/points/PointMarkers.js +17 -24
  10. package/lib/components/Header/Toolbar/Toolbar.js +2 -2
  11. package/lib/components/SevereEvent/SevereEvent.js +2 -2
  12. package/lib/hooks/useInitializeHeaders.js +3 -2
  13. package/lib/i18n/en.json +2 -2
  14. package/lib/macros/getVersion.js +2 -2
  15. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +4 -1
  16. package/lib/pages/EventsPage/events/EventsStyle.scss +0 -1
  17. package/lib/pages/EventsPage/events/event_info/EventDetails.js +2 -2
  18. package/lib/pages/EventsPage/events/events_list/EventUtils.js +1 -1
  19. package/lib/pages/EventsPage/events/events_list/EventsList.js +8 -25
  20. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +2 -2
  21. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +1 -4
  22. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +2 -2
  23. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +4 -4
  24. package/lib/ui-kit/KandoTable/KandoTable.js +5 -5
  25. package/package.json +1 -1
  26. package/lib/Widgets/Map/MapUtils.js +0 -103
  27. package/lib/Widgets/Map/events/Event.js +0 -69
  28. package/lib/Widgets/Map/events/EventUtils.js +0 -245
  29. package/lib/Widgets/Map/events/PointOfEvent.js +0 -131
  30. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +0 -55
  31. package/lib/Widgets/Map/events/Snail.js +0 -60
  32. package/lib/Widgets/Map/points/PointUtils.js +0 -368
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  var _typeof = require("@babel/runtime/helpers/typeof");
4
6
 
5
7
  Object.defineProperty(exports, "__esModule", {
@@ -7,13 +9,15 @@ Object.defineProperty(exports, "__esModule", {
7
9
  });
8
10
  exports.NetworkForSpecificEvent = void 0;
9
11
 
12
+ var _leaflet = _interopRequireDefault(require("leaflet"));
13
+
10
14
  var _react = _interopRequireWildcard(require("react"));
11
15
 
12
16
  var _reactRedux = require("react-redux");
13
17
 
14
18
  var _actions = require("store/events/actions");
15
19
 
16
- var _EventUtils = require("./EventUtils");
20
+ var _whitePoint = _interopRequireDefault(require("../../../assets/white-point.png"));
17
21
 
18
22
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
19
23
 
@@ -27,6 +31,116 @@ var NetworkForSpecificEvent = function NetworkForSpecificEvent(_ref) {
27
31
  map = _ref.map;
28
32
  var dispatch = (0, _reactRedux.useDispatch)();
29
33
 
34
+ var getFirstEdgeOfEventPath = function getFirstEdgeOfEventPath() {
35
+ return edges.find(function (edge) {
36
+ return edge.id === event.path[0].edge_id;
37
+ });
38
+ };
39
+
40
+ var getUpstreamEdges = function getUpstreamEdges(firstEdge) {
41
+ return edges.filter(function (edge) {
42
+ return edge.target_point_id === firstEdge.source_point_id;
43
+ });
44
+ };
45
+
46
+ var findUpstreamEdgesToDraw = function findUpstreamEdgesToDraw(upstreamEdges, edgesToDraw) {
47
+ upstreamEdges.forEach(function (upstreamEdge) {
48
+ if (upstreamEdge) {
49
+ var sourcePoint = points.find(function (point) {
50
+ return point.id === upstreamEdge.source_point_id;
51
+ });
52
+ if (sourcePoint) edgesToDraw.push(upstreamEdge);
53
+ }
54
+ });
55
+ return edgesToDraw;
56
+ };
57
+
58
+ var findEdgesFromEventPathToDraw = function findEdgesFromEventPathToDraw(edgesToDraw) {
59
+ event.path.forEach(function (part) {
60
+ var matchedPart = edges.find(function (edge) {
61
+ return edge.id === part.edge_id;
62
+ });
63
+ if (matchedPart !== undefined) edgesToDraw.push(matchedPart);
64
+ });
65
+ };
66
+
67
+ var findAndDrawEventNetworkEdges = function findAndDrawEventNetworkEdges() {
68
+ var edgesToDraw = [];
69
+ var firstEdge = getFirstEdgeOfEventPath();
70
+
71
+ if (firstEdge !== undefined) {
72
+ var upstreamEdges = getUpstreamEdges(firstEdge);
73
+ if (upstreamEdges.length !== 0) findUpstreamEdgesToDraw(upstreamEdges, edgesToDraw);
74
+ }
75
+
76
+ findEdgesFromEventPathToDraw(edgesToDraw);
77
+ drawNetwork(edgesToDraw);
78
+ };
79
+
80
+ var drawManholeIcon = function drawManholeIcon(sourcePoint) {
81
+ var pointIcon = _leaflet.default.icon({
82
+ iconUrl: _whitePoint.default,
83
+ iconSize: [9, 9],
84
+ iconAnchor: [4.5, 4.5]
85
+ });
86
+
87
+ var manholeIcon = _leaflet.default.marker([sourcePoint.latitude, sourcePoint.longitude], {
88
+ icon: pointIcon,
89
+ riseOnHover: true
90
+ }).addTo(map);
91
+
92
+ manholeIcon.bindTooltip("".concat(sourcePoint.group.name, " (").concat(sourcePoint.id, ")"));
93
+ manholeIcon['kando_object_id'] = sourcePoint.id;
94
+ manholeIcon['kando_object'] = 'UpstreamPoint';
95
+ };
96
+
97
+ var drawNetwork = function drawNetwork(edges) {
98
+ var latlngs = [];
99
+ edges.forEach(function (edge) {
100
+ edge.shape_data.forEach(function (data) {
101
+ latlngs.push([data.lat, data.lng]);
102
+ });
103
+
104
+ var polylineBack = _leaflet.default.polyline(latlngs, {
105
+ color: 'rgb(227,227,227)',
106
+ weight: 6,
107
+ opacity: 1
108
+ }).addTo(map);
109
+
110
+ if (points.length !== 0) {
111
+ var sourcePoint = points.find(function (point) {
112
+ return point.id === edge.source_point_id;
113
+ });
114
+ var targetPoint = points.find(function (point) {
115
+ return point.id === edge.target_point_id;
116
+ });
117
+
118
+ if (sourcePoint !== undefined && targetPoint !== undefined) {
119
+ polylineBack.bindPopup("Edge ID: ".concat(edge.id, ",<br>\n Source point: ").concat(sourcePoint.group.name, ",<br>\n Target point: ").concat(targetPoint.group.name, ",\n Distance: ").concat(edge.distance));
120
+ }
121
+
122
+ if (sourcePoint) drawManholeIcon(sourcePoint);
123
+ if (targetPoint) drawManholeIcon(targetPoint);
124
+ }
125
+
126
+ polylineBack['kando_object_id'] = edge.id;
127
+ polylineBack['kando_object'] = 'HoveredEdge';
128
+ polylineBack.bringToFront();
129
+
130
+ var polylineFront = _leaflet.default.polyline(latlngs, {
131
+ color: 'rgb(29,29,29)',
132
+ weight: 1,
133
+ opacity: 1
134
+ }).addTo(map);
135
+
136
+ polylineFront['kando_object_id'] = edge.id;
137
+ polylineFront['kando_object'] = 'HoveredEdgeFront';
138
+ polylineFront.bringToFront();
139
+ dispatch((0, _actions.setHoveredEdgePaths)([polylineBack, polylineFront]));
140
+ latlngs = [];
141
+ });
142
+ };
143
+
30
144
  var cleanupLogic = function cleanupLogic() {
31
145
  dispatch((0, _actions.setHoveredEdgePaths)([]));
32
146
  var layers = map._layers;
@@ -39,7 +153,7 @@ var NetworkForSpecificEvent = function NetworkForSpecificEvent(_ref) {
39
153
  };
40
154
 
41
155
  (0, _react.useEffect)(function () {
42
- (0, _EventUtils.findAndDrawEventNetworkEdges)(edges, event, points, dispatch, map);
156
+ findAndDrawEventNetworkEdges();
43
157
  return function cleanup() {
44
158
  cleanupLogic();
45
159
  };
@@ -48,4 +162,4 @@ var NetworkForSpecificEvent = function NetworkForSpecificEvent(_ref) {
48
162
  };
49
163
 
50
164
  exports.NetworkForSpecificEvent = NetworkForSpecificEvent;
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9ldmVudHMvTmV0d29ya0ZvclNwZWNpZmljRXZlbnQudHN4Il0sIm5hbWVzIjpbIk5ldHdvcmtGb3JTcGVjaWZpY0V2ZW50IiwiZXZlbnQiLCJlZGdlcyIsInBvaW50cyIsIm1hcCIsImRpc3BhdGNoIiwiY2xlYW51cExvZ2ljIiwibGF5ZXJzIiwiX2xheWVycyIsInByb3BlcnR5Iiwia2FuZG9fb2JqZWN0IiwidW5kZWZpbmVkIiwicmVtb3ZlTGF5ZXIiLCJjbGVhbnVwIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7QUFDQTs7QUFDQTs7QUFJQTs7Ozs7O0FBUkE7QUFpQk8sSUFBTUEsdUJBQXlDLEdBQUcsU0FBNUNBLHVCQUE0QyxPQUtuRDtBQUFBLE1BSkpDLEtBSUksUUFKSkEsS0FJSTtBQUFBLE1BSEpDLEtBR0ksUUFISkEsS0FHSTtBQUFBLE1BRkpDLE1BRUksUUFGSkEsTUFFSTtBQUFBLE1BREpDLEdBQ0ksUUFESkEsR0FDSTtBQUNKLE1BQU1DLFFBQVEsR0FBRyw4QkFBakI7O0FBQ0EsTUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsR0FBTTtBQUN6QkQsSUFBQUEsUUFBUSxDQUFDLGtDQUFvQixFQUFwQixDQUFELENBQVI7QUFDQSxRQUFJRSxNQUFNLEdBQUdILEdBQUcsQ0FBQ0ksT0FBakI7O0FBQ0EsU0FBSyxJQUFNQyxRQUFYLElBQXVCRixNQUF2QixFQUErQjtBQUM3QixVQUNFQSxNQUFNLENBQUNFLFFBQUQsQ0FBTixDQUFpQkMsWUFBakIsS0FBa0NDLFNBQWxDLElBQ0FKLE1BQU0sQ0FBQ0UsUUFBRCxDQUFOLENBQWlCQyxZQUFqQixLQUFrQyxlQUZwQyxFQUdFO0FBQ0FOLFFBQUFBLEdBQUcsQ0FBQ1EsV0FBSixDQUFnQkwsTUFBTSxDQUFDRSxRQUFELENBQXRCO0FBQ0Q7QUFDRjtBQUNGLEdBWEQ7O0FBYUEsd0JBQVUsWUFBTTtBQUNkLGtEQUE2QlAsS0FBN0IsRUFBb0NELEtBQXBDLEVBQTJDRSxNQUEzQyxFQUFtREUsUUFBbkQsRUFBNkRELEdBQTdEO0FBRUEsV0FBTyxTQUFTUyxPQUFULEdBQW1CO0FBQ3hCUCxNQUFBQSxZQUFZO0FBQ2IsS0FGRDtBQUdELEdBTkQsRUFNRyxDQUFDTCxLQUFELENBTkg7QUFRQSxzQkFBTywyREFBUDtBQUNELENBN0JNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTWFwIGFzIExlYWZsZXRNYXAgfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IHNldEhvdmVyZWRFZGdlUGF0aHMgfSBmcm9tICdzcmMvc3RvcmUvZXZlbnRzL2FjdGlvbnMnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnc3JjL3N0b3JlL2V2ZW50cy9tb2RlbHMvSUV2ZW50JztcbmltcG9ydCB7IElFZGdlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZWRnZXMvbW9kZWxzL0lFZGdlJztcbmltcG9ydCB7IElQb2ludCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCB7IGZpbmRBbmREcmF3RXZlbnROZXR3b3JrRWRnZXMgfSBmcm9tICcuL0V2ZW50VXRpbHMnO1xuXG50eXBlIElQcm9wcyA9IHtcbiAgZXZlbnQ6IElFdmVudDtcbiAgZWRnZXM6IElFZGdlW107XG4gIHBvaW50czogSVBvaW50W107XG4gIG1hcDogTGVhZmxldE1hcCB8IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBOZXR3b3JrRm9yU3BlY2lmaWNFdmVudDogUmVhY3QuRkM8SVByb3BzPiA9ICh7XG4gIGV2ZW50LFxuICBlZGdlcyxcbiAgcG9pbnRzLFxuICBtYXAsXG59KSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgY2xlYW51cExvZ2ljID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFZGdlUGF0aHMoW10pKTtcbiAgICBsZXQgbGF5ZXJzID0gbWFwLl9sYXllcnM7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBsYXllcnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGF5ZXJzW3Byb3BlcnR5XS5rYW5kb19vYmplY3QgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBsYXllcnNbcHJvcGVydHldLmthbmRvX29iamVjdCA9PT0gJ1Vwc3RyZWFtUG9pbnQnXG4gICAgICApIHtcbiAgICAgICAgbWFwLnJlbW92ZUxheWVyKGxheWVyc1twcm9wZXJ0eV0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGZpbmRBbmREcmF3RXZlbnROZXR3b3JrRWRnZXMoZWRnZXMsIGV2ZW50LCBwb2ludHMsIGRpc3BhdGNoLCBtYXApO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICBjbGVhbnVwTG9naWMoKTtcbiAgICB9O1xuICB9LCBbZXZlbnRdKTtcblxuICByZXR1cm4gPD48Lz47XG59O1xuIl19
165
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9ldmVudHMvTmV0d29ya0ZvclNwZWNpZmljRXZlbnQudHN4Il0sIm5hbWVzIjpbIk5ldHdvcmtGb3JTcGVjaWZpY0V2ZW50IiwiZXZlbnQiLCJlZGdlcyIsInBvaW50cyIsIm1hcCIsImRpc3BhdGNoIiwiZ2V0Rmlyc3RFZGdlT2ZFdmVudFBhdGgiLCJmaW5kIiwiZWRnZSIsImlkIiwicGF0aCIsImVkZ2VfaWQiLCJnZXRVcHN0cmVhbUVkZ2VzIiwiZmlyc3RFZGdlIiwiZmlsdGVyIiwidGFyZ2V0X3BvaW50X2lkIiwic291cmNlX3BvaW50X2lkIiwiZmluZFVwc3RyZWFtRWRnZXNUb0RyYXciLCJ1cHN0cmVhbUVkZ2VzIiwiZWRnZXNUb0RyYXciLCJmb3JFYWNoIiwidXBzdHJlYW1FZGdlIiwic291cmNlUG9pbnQiLCJwb2ludCIsInB1c2giLCJmaW5kRWRnZXNGcm9tRXZlbnRQYXRoVG9EcmF3IiwicGFydCIsIm1hdGNoZWRQYXJ0IiwidW5kZWZpbmVkIiwiZmluZEFuZERyYXdFdmVudE5ldHdvcmtFZGdlcyIsImxlbmd0aCIsImRyYXdOZXR3b3JrIiwiZHJhd01hbmhvbGVJY29uIiwicG9pbnRJY29uIiwiTCIsImljb24iLCJpY29uVXJsIiwid2hpdGVQb2ludCIsImljb25TaXplIiwiaWNvbkFuY2hvciIsIm1hbmhvbGVJY29uIiwibWFya2VyIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJyaXNlT25Ib3ZlciIsImFkZFRvIiwiYmluZFRvb2x0aXAiLCJncm91cCIsIm5hbWUiLCJsYXRsbmdzIiwic2hhcGVfZGF0YSIsImRhdGEiLCJsYXQiLCJsbmciLCJwb2x5bGluZUJhY2siLCJwb2x5bGluZSIsImNvbG9yIiwid2VpZ2h0Iiwib3BhY2l0eSIsInRhcmdldFBvaW50IiwiYmluZFBvcHVwIiwiZGlzdGFuY2UiLCJicmluZ1RvRnJvbnQiLCJwb2x5bGluZUZyb250IiwiY2xlYW51cExvZ2ljIiwibGF5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QU5IO0FBUUEsc0JBQU8sMkRBQVA7QUFDRCxDQWxKTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcbmltcG9ydCBMLCB7IE1hcCBhcyBMZWFmbGV0TWFwIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgeyBzZXRIb3ZlcmVkRWRnZVBhdGhzIH0gZnJvbSAnc3JjL3N0b3JlL2V2ZW50cy9hY3Rpb25zJztcbmltcG9ydCB7IElFdmVudCB9IGZyb20gJ3NyYy9zdG9yZS9ldmVudHMvbW9kZWxzL0lFdmVudCc7XG5pbXBvcnQgeyBJRWRnZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2VkZ2VzL21vZGVscy9JRWRnZSc7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgd2hpdGVQb2ludCBmcm9tICcuLi8uLi8uLi9hc3NldHMvd2hpdGUtcG9pbnQucG5nJztcblxudHlwZSBJUHJvcHMgPSB7XG4gIGV2ZW50OiBJRXZlbnQ7XG4gIGVkZ2VzOiBJRWRnZVtdO1xuICBwb2ludHM6IElQb2ludFtdO1xuICBtYXA6IExlYWZsZXRNYXAgfCBhbnk7XG59O1xuXG5leHBvcnQgY29uc3QgTmV0d29ya0ZvclNwZWNpZmljRXZlbnQ6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICBldmVudCxcbiAgZWRnZXMsXG4gIHBvaW50cyxcbiAgbWFwLFxufSkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgY29uc3QgZ2V0Rmlyc3RFZGdlT2ZFdmVudFBhdGggPSAoKSA9PiB7XG4gICAgcmV0dXJuIGVkZ2VzLmZpbmQoKGVkZ2UpID0+IGVkZ2UuaWQgPT09IGV2ZW50LnBhdGhbMF0uZWRnZV9pZCk7XG4gIH07XG5cbiAgY29uc3QgZ2V0VXBzdHJlYW1FZGdlcyA9IChmaXJzdEVkZ2U6IElFZGdlKSA9PiB7XG4gICAgcmV0dXJuIGVkZ2VzLmZpbHRlcihcbiAgICAgIChlZGdlKSA9PiBlZGdlLnRhcmdldF9wb2ludF9pZCA9PT0gZmlyc3RFZGdlIS5zb3VyY2VfcG9pbnRfaWQsXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBmaW5kVXBzdHJlYW1FZGdlc1RvRHJhdyA9IChcbiAgICB1cHN0cmVhbUVkZ2VzOiBJRWRnZVtdLFxuICAgIGVkZ2VzVG9EcmF3OiBJRWRnZVtdLFxuICApID0+IHtcbiAgICB1cHN0cmVhbUVkZ2VzLmZvckVhY2goKHVwc3RyZWFtRWRnZSkgPT4ge1xuICAgICAgaWYgKHVwc3RyZWFtRWRnZSkge1xuICAgICAgICBsZXQgc291cmNlUG9pbnQgPSBwb2ludHMuZmluZChcbiAgICAgICAgICAocG9pbnQpID0+IHBvaW50LmlkID09PSB1cHN0cmVhbUVkZ2UhLnNvdXJjZV9wb2ludF9pZCxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoc291cmNlUG9pbnQpIGVkZ2VzVG9EcmF3LnB1c2godXBzdHJlYW1FZGdlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlZGdlc1RvRHJhdztcbiAgfTtcblxuICBjb25zdCBmaW5kRWRnZXNGcm9tRXZlbnRQYXRoVG9EcmF3ID0gKGVkZ2VzVG9EcmF3OiBJRWRnZVtdKSA9PiB7XG4gICAgZXZlbnQucGF0aC5mb3JFYWNoKChwYXJ0KSA9PiB7XG4gICAgICBsZXQgbWF0Y2hlZFBhcnQgPSBlZGdlcy5maW5kKChlZGdlKSA9PiBlZGdlLmlkID09PSBwYXJ0LmVkZ2VfaWQpO1xuICAgICAgaWYgKG1hdGNoZWRQYXJ0ICE9PSB1bmRlZmluZWQpIGVkZ2VzVG9EcmF3LnB1c2gobWF0Y2hlZFBhcnQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGZpbmRBbmREcmF3RXZlbnROZXR3b3JrRWRnZXMgPSAoKSA9PiB7XG4gICAgbGV0IGVkZ2VzVG9EcmF3OiBJRWRnZVtdID0gW107XG4gICAgbGV0IGZpcnN0RWRnZSA9IGdldEZpcnN0RWRnZU9mRXZlbnRQYXRoKCk7XG5cbiAgICBpZiAoZmlyc3RFZGdlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxldCB1cHN0cmVhbUVkZ2VzID0gZ2V0VXBzdHJlYW1FZGdlcyhmaXJzdEVkZ2UpO1xuICAgICAgaWYgKHVwc3RyZWFtRWRnZXMubGVuZ3RoICE9PSAwKVxuICAgICAgICBmaW5kVXBzdHJlYW1FZGdlc1RvRHJhdyh1cHN0cmVhbUVkZ2VzLCBlZGdlc1RvRHJhdyk7XG4gICAgfVxuXG4gICAgZmluZEVkZ2VzRnJvbUV2ZW50UGF0aFRvRHJhdyhlZGdlc1RvRHJhdyk7XG4gICAgZHJhd05ldHdvcmsoZWRnZXNUb0RyYXcpO1xuICB9O1xuXG4gIGNvbnN0IGRyYXdNYW5ob2xlSWNvbiA9IChzb3VyY2VQb2ludCkgPT4ge1xuICAgIGxldCBwb2ludEljb24gPSBMLmljb24oe1xuICAgICAgaWNvblVybDogd2hpdGVQb2ludCxcbiAgICAgIGljb25TaXplOiBbOSwgOV0sXG4gICAgICBpY29uQW5jaG9yOiBbNC41LCA0LjVdLFxuICAgIH0pO1xuICAgIGxldCBtYW5ob2xlSWNvbjogYW55ID0gTC5tYXJrZXIoXG4gICAgICBbc291cmNlUG9pbnQubGF0aXR1ZGUsIHNvdXJjZVBvaW50LmxvbmdpdHVkZV0sXG4gICAgICB7XG4gICAgICAgIGljb246IHBvaW50SWNvbixcbiAgICAgICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gICAgICB9LFxuICAgICkuYWRkVG8obWFwKTtcbiAgICBtYW5ob2xlSWNvbi5iaW5kVG9vbHRpcChgJHtzb3VyY2VQb2ludC5ncm91cC5uYW1lfSAoJHtzb3VyY2VQb2ludC5pZH0pYCk7XG4gICAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gc291cmNlUG9pbnQuaWQ7XG4gICAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdCddID0gJ1Vwc3RyZWFtUG9pbnQnO1xuICB9O1xuXG4gIGNvbnN0IGRyYXdOZXR3b3JrID0gKGVkZ2VzKSA9PiB7XG4gICAgbGV0IGxhdGxuZ3M6IGFueSA9IFtdO1xuICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHtcbiAgICAgIGVkZ2Uuc2hhcGVfZGF0YS5mb3JFYWNoKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgbGF0bG5ncy5wdXNoKFtkYXRhLmxhdCwgZGF0YS5sbmddKTtcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgcG9seWxpbmVCYWNrOiBhbnkgPSBMLnBvbHlsaW5lKGxhdGxuZ3MsIHtcbiAgICAgICAgY29sb3I6ICdyZ2IoMjI3LDIyNywyMjcpJyxcbiAgICAgICAgd2VpZ2h0OiA2LFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgfSkuYWRkVG8obWFwKTtcbiAgICAgIGlmIChwb2ludHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGxldCBzb3VyY2VQb2ludCA9IHBvaW50cy5maW5kKFxuICAgICAgICAgIChwb2ludDogSVBvaW50KSA9PiBwb2ludC5pZCA9PT0gZWRnZS5zb3VyY2VfcG9pbnRfaWQsXG4gICAgICAgICk7XG4gICAgICAgIGxldCB0YXJnZXRQb2ludCA9IHBvaW50cy5maW5kKFxuICAgICAgICAgIChwb2ludDogSVBvaW50KSA9PiBwb2ludC5pZCA9PT0gZWRnZS50YXJnZXRfcG9pbnRfaWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzb3VyY2VQb2ludCAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFBvaW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb2x5bGluZUJhY2suYmluZFBvcHVwKGBFZGdlIElEOiAke2VkZ2UuaWR9LDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIHBvaW50OiAke3NvdXJjZVBvaW50Lmdyb3VwLm5hbWV9LDxicj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0IHBvaW50OiAke3RhcmdldFBvaW50Lmdyb3VwLm5hbWV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEaXN0YW5jZTogJHtlZGdlLmRpc3RhbmNlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNvdXJjZVBvaW50KSBkcmF3TWFuaG9sZUljb24oc291cmNlUG9pbnQpO1xuICAgICAgICBpZiAodGFyZ2V0UG9pbnQpIGRyYXdNYW5ob2xlSWNvbih0YXJnZXRQb2ludCk7XG4gICAgICB9XG5cbiAgICAgIHBvbHlsaW5lQmFja1sna2FuZG9fb2JqZWN0X2lkJ10gPSBlZGdlLmlkO1xuICAgICAgcG9seWxpbmVCYWNrWydrYW5kb19vYmplY3QnXSA9ICdIb3ZlcmVkRWRnZSc7XG5cbiAgICAgIHBvbHlsaW5lQmFjay5icmluZ1RvRnJvbnQoKTtcblxuICAgICAgbGV0IHBvbHlsaW5lRnJvbnQ6IGFueSA9IEwucG9seWxpbmUobGF0bG5ncywge1xuICAgICAgICBjb2xvcjogJ3JnYigyOSwyOSwyOSknLFxuICAgICAgICB3ZWlnaHQ6IDEsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICB9KS5hZGRUbyhtYXApO1xuXG4gICAgICBwb2x5bGluZUZyb250WydrYW5kb19vYmplY3RfaWQnXSA9IGVkZ2UuaWQ7XG4gICAgICBwb2x5bGluZUZyb250WydrYW5kb19vYmplY3QnXSA9ICdIb3ZlcmVkRWRnZUZyb250JztcblxuICAgICAgcG9seWxpbmVGcm9udC5icmluZ1RvRnJvbnQoKTtcbiAgICAgIGRpc3BhdGNoKHNldEhvdmVyZWRFZGdlUGF0aHMoW3BvbHlsaW5lQmFjaywgcG9seWxpbmVGcm9udF0pKTtcbiAgICAgIGxhdGxuZ3MgPSBbXTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBjbGVhbnVwTG9naWMgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goc2V0SG92ZXJlZEVkZ2VQYXRocyhbXSkpO1xuICAgIGxldCBsYXllcnMgPSBtYXAuX2xheWVycztcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGxheWVycykge1xuICAgICAgaWYgKFxuICAgICAgICBsYXllcnNbcHJvcGVydHldLmthbmRvX29iamVjdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIGxheWVyc1twcm9wZXJ0eV0ua2FuZG9fb2JqZWN0ID09PSAnVXBzdHJlYW1Qb2ludCdcbiAgICAgICkge1xuICAgICAgICBtYXAucmVtb3ZlTGF5ZXIobGF5ZXJzW3Byb3BlcnR5XSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmluZEFuZERyYXdFdmVudE5ldHdvcmtFZGdlcygpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICBjbGVhbnVwTG9naWMoKTtcbiAgICB9O1xuICB9LCBbZXZlbnRdKTtcblxuICByZXR1cm4gPD48Lz47XG59O1xuIl19