@kando-env/kando-ui 1.2.122 → 1.2.123-alpha.0

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 (30) hide show
  1. package/lib/Widgets/Map/Map.js +40 -163
  2. package/lib/Widgets/Map/MapUtils.js +102 -0
  3. package/lib/Widgets/Map/areas/AreaPolygon.js +2 -2
  4. package/lib/Widgets/Map/events/Event.js +69 -0
  5. package/lib/Widgets/Map/events/EventIndicator.js +21 -46
  6. package/lib/Widgets/Map/events/EventPath.js +16 -38
  7. package/lib/Widgets/Map/events/EventUtils.js +245 -0
  8. package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +3 -117
  9. package/lib/Widgets/Map/events/PointOfEvent.js +142 -0
  10. package/lib/Widgets/Map/events/PointsForSpecificEvent.js +66 -0
  11. package/lib/Widgets/Map/events/Snail.js +60 -0
  12. package/lib/Widgets/Map/points/PointMarker.js +10 -472
  13. package/lib/Widgets/Map/points/PointMarkers.js +24 -17
  14. package/lib/Widgets/Map/points/PointUtils.js +373 -0
  15. package/lib/components/Header/Toolbar/Toolbar.js +2 -2
  16. package/lib/hooks/useInitializeHeaders.js +2 -3
  17. package/lib/i18n/en.json +2 -2
  18. package/lib/i18n/he.json +2 -2
  19. package/lib/macros/getVersion.js +2 -2
  20. package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +1 -4
  21. package/lib/pages/EventsPage/events/EventsStyle.scss +1 -0
  22. package/lib/pages/EventsPage/events/events_list/EventsList.js +25 -8
  23. package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +2 -2
  24. package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +4 -1
  25. package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +2 -2
  26. package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +4 -4
  27. package/lib/ui-kit/KandoTable/KandoTable.js +5 -5
  28. package/package.json +1 -1
  29. package/lib/Widgets/Map/events/EventIndicatorHover.js +0 -252
  30. package/lib/Widgets/Map/events/EventPathHover.js +0 -81
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.PointsForSpecificEvent = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _EventUtils = require("./EventUtils");
13
+
14
+ var _PointOfEvent = require("./PointOfEvent");
15
+
16
+ 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); }
17
+
18
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
19
+
20
+ var PointsForSpecificEvent = function PointsForSpecificEvent(_ref) {
21
+ var points = _ref.points,
22
+ event = _ref.event,
23
+ edges = _ref.edges,
24
+ map = _ref.map;
25
+
26
+ var findPointsToDraw = function findPointsToDraw() {
27
+ if (event.path.length !== 0) {
28
+ var relevantEdges = [];
29
+ var releventPoints = [];
30
+ (0, _EventUtils.findEdgesFromEventPathToDraw)(relevantEdges, event, edges);
31
+ relevantEdges.forEach(function (edge) {
32
+ var pointToDraw = points.find(function (p) {
33
+ return p.part_of_monitored_path && p.id === edge.source_point_id;
34
+ });
35
+ if (pointToDraw !== undefined) releventPoints.push(pointToDraw);
36
+ });
37
+ var lastPointOfHierarchy = undefined;
38
+ if (relevantEdges.length > 1) lastPointOfHierarchy = points.find(function (p) {
39
+ return p.id === relevantEdges[relevantEdges.length - 1].target_point_id && p.part_of_monitored_path;
40
+ });
41
+ if (lastPointOfHierarchy !== undefined && !releventPoints.includes(lastPointOfHierarchy)) releventPoints.push(lastPointOfHierarchy);
42
+ return releventPoints;
43
+ } else {
44
+ var _releventPoints = [];
45
+ event.observations.forEach(function (obs) {
46
+ var findPoint = points.find(function (p) {
47
+ return p.id === obs.point_id;
48
+ });
49
+ if (findPoint) _releventPoints.push(findPoint);
50
+ });
51
+ return _releventPoints;
52
+ }
53
+ };
54
+
55
+ (0, _react.useEffect)(function () {}, [event.focused, event.hovered]);
56
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, findPointsToDraw().map(function (point) {
57
+ return /*#__PURE__*/_react.default.createElement(_PointOfEvent.PointOfEvent, {
58
+ map: map,
59
+ point: point,
60
+ event: event
61
+ });
62
+ }));
63
+ };
64
+
65
+ exports.PointsForSpecificEvent = PointsForSpecificEvent;
66
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9ldmVudHMvUG9pbnRzRm9yU3BlY2lmaWNFdmVudC50c3giXSwibmFtZXMiOlsiUG9pbnRzRm9yU3BlY2lmaWNFdmVudCIsInBvaW50cyIsImV2ZW50IiwiZWRnZXMiLCJtYXAiLCJmaW5kUG9pbnRzVG9EcmF3IiwicGF0aCIsImxlbmd0aCIsInJlbGV2YW50RWRnZXMiLCJyZWxldmVudFBvaW50cyIsImZvckVhY2giLCJlZGdlIiwicG9pbnRUb0RyYXciLCJmaW5kIiwicCIsInBhcnRfb2ZfbW9uaXRvcmVkX3BhdGgiLCJpZCIsInNvdXJjZV9wb2ludF9pZCIsInVuZGVmaW5lZCIsInB1c2giLCJsYXN0UG9pbnRPZkhpZXJhcmNoeSIsInRhcmdldF9wb2ludF9pZCIsImluY2x1ZGVzIiwib2JzZXJ2YXRpb25zIiwib2JzIiwiZmluZFBvaW50IiwicG9pbnRfaWQiLCJmb2N1c2VkIiwiaG92ZXJlZCIsInBvaW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFHQTs7Ozs7O0FBU08sSUFBTUEsc0JBQXdDLEdBQUcsU0FBM0NBLHNCQUEyQyxPQUtsRDtBQUFBLE1BSkpDLE1BSUksUUFKSkEsTUFJSTtBQUFBLE1BSEpDLEtBR0ksUUFISkEsS0FHSTtBQUFBLE1BRkpDLEtBRUksUUFGSkEsS0FFSTtBQUFBLE1BREpDLEdBQ0ksUUFESkEsR0FDSTs7QUFDSixNQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLEdBQU07QUFDN0IsUUFBSUgsS0FBSyxDQUFDSSxJQUFOLENBQVdDLE1BQVgsS0FBc0IsQ0FBMUIsRUFBNkI7QUFDM0IsVUFBSUMsYUFBc0IsR0FBRyxFQUE3QjtBQUNBLFVBQUlDLGNBQXdCLEdBQUcsRUFBL0I7QUFDQSxvREFBNkJELGFBQTdCLEVBQTRDTixLQUE1QyxFQUFtREMsS0FBbkQ7QUFFQUssTUFBQUEsYUFBYSxDQUFDRSxPQUFkLENBQXNCLFVBQUNDLElBQUQsRUFBaUI7QUFDckMsWUFBSUMsV0FBVyxHQUFHWCxNQUFNLENBQUNZLElBQVAsQ0FDaEIsVUFBQ0MsQ0FBRDtBQUFBLGlCQUNFQSxDQUFDLENBQUNDLHNCQUFGLElBQTRCRCxDQUFDLENBQUNFLEVBQUYsS0FBU0wsSUFBSSxDQUFDTSxlQUQ1QztBQUFBLFNBRGdCLENBQWxCO0FBSUEsWUFBSUwsV0FBVyxLQUFLTSxTQUFwQixFQUErQlQsY0FBYyxDQUFDVSxJQUFmLENBQW9CUCxXQUFwQjtBQUNoQyxPQU5EO0FBUUEsVUFBSVEsb0JBQXdDLEdBQUdGLFNBQS9DO0FBQ0EsVUFBSVYsYUFBYSxDQUFDRCxNQUFkLEdBQXVCLENBQTNCLEVBQ0VhLG9CQUFvQixHQUFHbkIsTUFBTSxDQUFDWSxJQUFQLENBQ3JCLFVBQUNDLENBQUQ7QUFBQSxlQUNFQSxDQUFDLENBQUNFLEVBQUYsS0FBU1IsYUFBYSxDQUFDQSxhQUFhLENBQUNELE1BQWQsR0FBdUIsQ0FBeEIsQ0FBYixDQUF3Q2MsZUFBakQsSUFDQVAsQ0FBQyxDQUFDQyxzQkFGSjtBQUFBLE9BRHFCLENBQXZCO0FBS0YsVUFDRUssb0JBQW9CLEtBQUtGLFNBQXpCLElBQ0EsQ0FBQ1QsY0FBYyxDQUFDYSxRQUFmLENBQXdCRixvQkFBeEIsQ0FGSCxFQUlFWCxjQUFjLENBQUNVLElBQWYsQ0FBb0JDLG9CQUFwQjtBQUVGLGFBQU9YLGNBQVA7QUFDRCxLQTNCRCxNQTJCTztBQUNMLFVBQUlBLGVBQXdCLEdBQUcsRUFBL0I7QUFDQVAsTUFBQUEsS0FBSyxDQUFDcUIsWUFBTixDQUFtQmIsT0FBbkIsQ0FBMkIsVUFBQ2MsR0FBRCxFQUFTO0FBQ2xDLFlBQUlDLFNBQVMsR0FBR3hCLE1BQU0sQ0FBQ1ksSUFBUCxDQUFZLFVBQUNDLENBQUQ7QUFBQSxpQkFBT0EsQ0FBQyxDQUFDRSxFQUFGLEtBQVNRLEdBQUcsQ0FBQ0UsUUFBcEI7QUFBQSxTQUFaLENBQWhCO0FBQ0EsWUFBSUQsU0FBSixFQUFlaEIsZUFBYyxDQUFDVSxJQUFmLENBQW9CTSxTQUFwQjtBQUNoQixPQUhEO0FBS0EsYUFBT2hCLGVBQVA7QUFDRDtBQUNGLEdBckNEOztBQXVDQSx3QkFBVSxZQUFNLENBQUUsQ0FBbEIsRUFBb0IsQ0FBQ1AsS0FBSyxDQUFDeUIsT0FBUCxFQUFnQnpCLEtBQUssQ0FBQzBCLE9BQXRCLENBQXBCO0FBRUEsc0JBQ0UsNERBQ0d2QixnQkFBZ0IsR0FBR0QsR0FBbkIsQ0FBdUIsVUFBQ3lCLEtBQUQ7QUFBQSx3QkFDdEIsNkJBQUMsMEJBQUQ7QUFBYyxNQUFBLEdBQUcsRUFBRXpCLEdBQW5CO0FBQXdCLE1BQUEsS0FBSyxFQUFFeUIsS0FBL0I7QUFBc0MsTUFBQSxLQUFLLEVBQUUzQjtBQUE3QyxNQURzQjtBQUFBLEdBQXZCLENBREgsQ0FERjtBQU9ELENBdERNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IElQb2ludCB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCB7IGZpbmRFZGdlc0Zyb21FdmVudFBhdGhUb0RyYXcgfSBmcm9tICcuL0V2ZW50VXRpbHMnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHsgSUVkZ2UgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9lZGdlcy9tb2RlbHMvSUVkZ2UnO1xuaW1wb3J0IHsgUG9pbnRPZkV2ZW50IH0gZnJvbSAnLi9Qb2ludE9mRXZlbnQnO1xuXG50eXBlIElQcm9wcyA9IHtcbiAgcG9pbnRzOiBJUG9pbnRbXTtcbiAgZXZlbnQ6IElFdmVudDtcbiAgZWRnZXM6IElFZGdlW107XG4gIG1hcDogYW55O1xufTtcblxuZXhwb3J0IGNvbnN0IFBvaW50c0ZvclNwZWNpZmljRXZlbnQ6IFJlYWN0LkZDPElQcm9wcz4gPSAoe1xuICBwb2ludHMsXG4gIGV2ZW50LFxuICBlZGdlcyxcbiAgbWFwLFxufSkgPT4ge1xuICBjb25zdCBmaW5kUG9pbnRzVG9EcmF3ID0gKCkgPT4ge1xuICAgIGlmIChldmVudC5wYXRoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgbGV0IHJlbGV2YW50RWRnZXM6IElFZGdlW10gPSBbXTtcbiAgICAgIGxldCByZWxldmVudFBvaW50czogSVBvaW50W10gPSBbXTtcbiAgICAgIGZpbmRFZGdlc0Zyb21FdmVudFBhdGhUb0RyYXcocmVsZXZhbnRFZGdlcywgZXZlbnQsIGVkZ2VzKTtcblxuICAgICAgcmVsZXZhbnRFZGdlcy5mb3JFYWNoKChlZGdlOiBJRWRnZSkgPT4ge1xuICAgICAgICBsZXQgcG9pbnRUb0RyYXcgPSBwb2ludHMuZmluZChcbiAgICAgICAgICAocDogSVBvaW50KSA9PlxuICAgICAgICAgICAgcC5wYXJ0X29mX21vbml0b3JlZF9wYXRoICYmIHAuaWQgPT09IGVkZ2Uuc291cmNlX3BvaW50X2lkLFxuICAgICAgICApO1xuICAgICAgICBpZiAocG9pbnRUb0RyYXcgIT09IHVuZGVmaW5lZCkgcmVsZXZlbnRQb2ludHMucHVzaChwb2ludFRvRHJhdyk7XG4gICAgICB9KTtcblxuICAgICAgbGV0IGxhc3RQb2ludE9mSGllcmFyY2h5OiBJUG9pbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAocmVsZXZhbnRFZGdlcy5sZW5ndGggPiAxKVxuICAgICAgICBsYXN0UG9pbnRPZkhpZXJhcmNoeSA9IHBvaW50cy5maW5kKFxuICAgICAgICAgIChwOiBJUG9pbnQpID0+XG4gICAgICAgICAgICBwLmlkID09PSByZWxldmFudEVkZ2VzW3JlbGV2YW50RWRnZXMubGVuZ3RoIC0gMV0udGFyZ2V0X3BvaW50X2lkICYmXG4gICAgICAgICAgICBwLnBhcnRfb2ZfbW9uaXRvcmVkX3BhdGgsXG4gICAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIGxhc3RQb2ludE9mSGllcmFyY2h5ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgIXJlbGV2ZW50UG9pbnRzLmluY2x1ZGVzKGxhc3RQb2ludE9mSGllcmFyY2h5KVxuICAgICAgKVxuICAgICAgICByZWxldmVudFBvaW50cy5wdXNoKGxhc3RQb2ludE9mSGllcmFyY2h5KTtcblxuICAgICAgcmV0dXJuIHJlbGV2ZW50UG9pbnRzO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVsZXZlbnRQb2ludHM6IElQb2ludFtdID0gW107XG4gICAgICBldmVudC5vYnNlcnZhdGlvbnMuZm9yRWFjaCgob2JzKSA9PiB7XG4gICAgICAgIGxldCBmaW5kUG9pbnQgPSBwb2ludHMuZmluZCgocCkgPT4gcC5pZCA9PT0gb2JzLnBvaW50X2lkKTtcbiAgICAgICAgaWYgKGZpbmRQb2ludCkgcmVsZXZlbnRQb2ludHMucHVzaChmaW5kUG9pbnQpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZWxldmVudFBvaW50cztcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHt9LCBbZXZlbnQuZm9jdXNlZCwgZXZlbnQuaG92ZXJlZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtmaW5kUG9pbnRzVG9EcmF3KCkubWFwKChwb2ludDogSVBvaW50KSA9PiAoXG4gICAgICAgIDxQb2ludE9mRXZlbnQgbWFwPXttYXB9IHBvaW50PXtwb2ludH0gZXZlbnQ9e2V2ZW50fSAvPlxuICAgICAgKSl9XG4gICAgPC8+XG4gICk7XG59O1xuIl19
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.Snail = void 0;
11
+
12
+ var _react = _interopRequireWildcard(require("react"));
13
+
14
+ var _EventPath = _interopRequireDefault(require("./EventPath"));
15
+
16
+ var _EventIndicator = _interopRequireDefault(require("./EventIndicator"));
17
+
18
+ var _leaflet = _interopRequireDefault(require("leaflet"));
19
+
20
+ var _reactRedux = require("react-redux");
21
+
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); }
23
+
24
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
+
26
+ // @ts-ignore
27
+ var Snail = function Snail(_ref) {
28
+ var event = _ref.event;
29
+ var state = (0, _reactRedux.useSelector)(function (state) {
30
+ return state;
31
+ });
32
+
33
+ var _useSelector = (0, _reactRedux.useSelector)(function (state) {
34
+ return state;
35
+ }),
36
+ global_data = _useSelector.global_data;
37
+
38
+ var _state$events_data = state.events_data,
39
+ hoveredEventPaths = _state$events_data.hoveredEventPaths,
40
+ focusedEventPaths = _state$events_data.focusedEventPaths;
41
+ var map = global_data.map;
42
+ var memoizedIndicator = (0, _react.useMemo)(function () {
43
+ var paths = focusedEventPaths.length !== 0 ? focusedEventPaths : hoveredEventPaths;
44
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_EventIndicator.default, {
45
+ map: map,
46
+ paths: paths,
47
+ event: event,
48
+ L: _leaflet.default
49
+ }));
50
+ }, [hoveredEventPaths, focusedEventPaths]);
51
+ (0, _react.useEffect)(function () {}, [event]);
52
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_EventPath.default, {
53
+ event: event,
54
+ global_data: global_data,
55
+ eventPaths: focusedEventPaths || hoveredEventPaths
56
+ }), memoizedIndicator);
57
+ };
58
+
59
+ exports.Snail = Snail;
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9ldmVudHMvU25haWwudHN4Il0sIm5hbWVzIjpbIlNuYWlsIiwiZXZlbnQiLCJzdGF0ZSIsImdsb2JhbF9kYXRhIiwiZXZlbnRzX2RhdGEiLCJob3ZlcmVkRXZlbnRQYXRocyIsImZvY3VzZWRFdmVudFBhdGhzIiwibWFwIiwibWVtb2l6ZWRJbmRpY2F0b3IiLCJwYXRocyIsImxlbmd0aCIsIkwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7Ozs7OztBQU5BO0FBYU8sSUFBTUEsS0FBdUIsR0FBRyxTQUExQkEsS0FBMEIsT0FBZTtBQUFBLE1BQVpDLEtBQVksUUFBWkEsS0FBWTtBQUNwRCxNQUFNQyxLQUFLLEdBQUcsNkJBQVksVUFBQ0EsS0FBRDtBQUFBLFdBQXNCQSxLQUF0QjtBQUFBLEdBQVosQ0FBZDs7QUFDQSxxQkFBd0IsNkJBQVksVUFBQ0EsS0FBRDtBQUFBLFdBQXNCQSxLQUF0QjtBQUFBLEdBQVosQ0FBeEI7QUFBQSxNQUFRQyxXQUFSLGdCQUFRQSxXQUFSOztBQUNBLDJCQUFpREQsS0FBSyxDQUFDRSxXQUF2RDtBQUFBLE1BQVFDLGlCQUFSLHNCQUFRQSxpQkFBUjtBQUFBLE1BQTJCQyxpQkFBM0Isc0JBQTJCQSxpQkFBM0I7QUFDQSxNQUFNQyxHQUFHLEdBQUdKLFdBQVcsQ0FBQ0ksR0FBeEI7QUFFQSxNQUFNQyxpQkFBaUIsR0FBRyxvQkFBUSxZQUFNO0FBQ3RDLFFBQUlDLEtBQUssR0FDUEgsaUJBQWlCLENBQUNJLE1BQWxCLEtBQTZCLENBQTdCLEdBQWlDSixpQkFBakMsR0FBcURELGlCQUR2RDtBQUVBLHdCQUNFLHlFQUNFLDZCQUFDLHVCQUFEO0FBQWdCLE1BQUEsR0FBRyxFQUFFRSxHQUFyQjtBQUEwQixNQUFBLEtBQUssRUFBRUUsS0FBakM7QUFBd0MsTUFBQSxLQUFLLEVBQUVSLEtBQS9DO0FBQXNELE1BQUEsQ0FBQyxFQUFFVTtBQUF6RCxNQURGLENBREY7QUFLRCxHQVJ5QixFQVF2QixDQUFDTixpQkFBRCxFQUFvQkMsaUJBQXBCLENBUnVCLENBQTFCO0FBVUEsd0JBQVUsWUFBTSxDQUFFLENBQWxCLEVBQW9CLENBQUNMLEtBQUQsQ0FBcEI7QUFFQSxzQkFDRSx5RUFDRSw2QkFBQyxrQkFBRDtBQUNFLElBQUEsS0FBSyxFQUFFQSxLQURUO0FBRUUsSUFBQSxXQUFXLEVBQUVFLFdBRmY7QUFHRSxJQUFBLFVBQVUsRUFBRUcsaUJBQWlCLElBQUlEO0FBSG5DLElBREYsRUFNR0csaUJBTkgsQ0FERjtBQVVELENBNUJNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWlnbm9yZVxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBFdmVudFBhdGggZnJvbSAnLi9FdmVudFBhdGgnO1xuaW1wb3J0IEV2ZW50SW5kaWNhdG9yIGZyb20gJy4vRXZlbnRJbmRpY2F0b3InO1xuaW1wb3J0IEwgZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgeyBJRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9ldmVudHMvbW9kZWxzL0lFdmVudCc7XG5pbXBvcnQgeyB1c2VTZWxlY3RvciB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7IElBcHBTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9JQXBwU3RhdGUnO1xuXG50eXBlIElQcm9wcyA9IHtcbiAgZXZlbnQ6IElFdmVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBTbmFpbDogUmVhY3QuRkM8SVByb3BzPiA9ICh7IGV2ZW50IH0pID0+IHtcbiAgY29uc3Qgc3RhdGUgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IElBcHBTdGF0ZSkgPT4gc3RhdGUpO1xuICBjb25zdCB7IGdsb2JhbF9kYXRhIH0gPSB1c2VTZWxlY3Rvcigoc3RhdGU6IElBcHBTdGF0ZSkgPT4gc3RhdGUpO1xuICBjb25zdCB7IGhvdmVyZWRFdmVudFBhdGhzLCBmb2N1c2VkRXZlbnRQYXRocyB9ID0gc3RhdGUuZXZlbnRzX2RhdGE7XG4gIGNvbnN0IG1hcCA9IGdsb2JhbF9kYXRhLm1hcDtcblxuICBjb25zdCBtZW1vaXplZEluZGljYXRvciA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGxldCBwYXRocyA9XG4gICAgICBmb2N1c2VkRXZlbnRQYXRocy5sZW5ndGggIT09IDAgPyBmb2N1c2VkRXZlbnRQYXRocyA6IGhvdmVyZWRFdmVudFBhdGhzO1xuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8RXZlbnRJbmRpY2F0b3IgbWFwPXttYXB9IHBhdGhzPXtwYXRoc30gZXZlbnQ9e2V2ZW50fSBMPXtMfSAvPlxuICAgICAgPC8+XG4gICAgKTtcbiAgfSwgW2hvdmVyZWRFdmVudFBhdGhzLCBmb2N1c2VkRXZlbnRQYXRoc10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7fSwgW2V2ZW50XSk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPEV2ZW50UGF0aFxuICAgICAgICBldmVudD17ZXZlbnR9XG4gICAgICAgIGdsb2JhbF9kYXRhPXtnbG9iYWxfZGF0YX1cbiAgICAgICAgZXZlbnRQYXRocz17Zm9jdXNlZEV2ZW50UGF0aHMgfHwgaG92ZXJlZEV2ZW50UGF0aHN9XG4gICAgICAvPlxuICAgICAge21lbW9pemVkSW5kaWNhdG9yfVxuICAgIDwvPlxuICApO1xufTtcbiJdfQ==