@kando-env/kando-ui 1.2.122 → 1.2.123

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.
@@ -2,50 +2,57 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
5
7
  Object.defineProperty(exports, "__esModule", {
6
8
  value: true
7
9
  });
8
10
  exports.PointMarkers = void 0;
9
11
 
10
- var _react = _interopRequireDefault(require("react"));
12
+ var _react = _interopRequireWildcard(require("react"));
11
13
 
12
14
  var _PointMarker = _interopRequireDefault(require("./PointMarker"));
13
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
+
14
20
  var PointMarkers = function PointMarkers(props) {
15
- var L = props.L,
16
- points = props.points,
21
+ var points = props.points,
17
22
  map = props.map,
18
23
  _props$includeUnmonit = props.includeUnmonitoredPoints,
19
24
  includeUnmonitoredPoints = _props$includeUnmonit === void 0 ? false : _props$includeUnmonit,
20
- event = props.event;
25
+ _props$rerender = props.rerender,
26
+ rerender = _props$rerender === void 0 ? false : _props$rerender;
21
27
 
22
28
  var isPointBelongToGroupTypes = function isPointBelongToGroupTypes(point) {
23
- return point.group.type === 'Groups::WastewaterTreatmentPlant' || point.group.type === 'Groups::Collectors' && point.has_device;
24
- };
25
-
26
- var isPointMonitoredAndPartOfPath = function isPointMonitoredAndPartOfPath(point) {
27
- return point.part_of_monitored_path && point.has_device && event;
29
+ return point.group.type === 'Groups::WastewaterTreatmentPlant' || point.group.type === 'Groups::Factory' && point.has_device || point.group.type === 'Groups::Collectors' && point.has_device;
28
30
  };
29
31
 
30
32
  var includeUnmonitoredPointsLogic = function includeUnmonitoredPointsLogic(point) {
31
- return (includeUnmonitoredPoints ? point.part_of_monitored_path : point.has_device) && !point.hide;
33
+ return includeUnmonitoredPoints ? point.part_of_monitored_path : true;
32
34
  };
33
35
 
34
36
  var filterStatement = function filterStatement(point) {
35
- return includeUnmonitoredPointsLogic(point) || isPointBelongToGroupTypes(point) || isPointMonitoredAndPartOfPath(point);
37
+ return includeUnmonitoredPointsLogic(point) && isPointBelongToGroupTypes(point);
38
+ };
39
+
40
+ var filteredPoints = function filteredPoints() {
41
+ return points.filter(function (point) {
42
+ return filterStatement(point);
43
+ });
36
44
  };
37
45
 
38
- return /*#__PURE__*/_react.default.createElement("div", null, points.length !== 0 && points.filter(function (point) {
39
- return filterStatement(point);
40
- }).map(function (point) {
46
+ (0, _react.useEffect)(function () {}, [rerender]);
47
+ return /*#__PURE__*/_react.default.createElement("div", null, points.length !== 0 && filteredPoints().map(function (point) {
41
48
  return point.latitude && point.longitude && /*#__PURE__*/_react.default.createElement(_PointMarker.default, {
42
49
  map: map,
43
- L: L,
44
50
  point: point,
45
- key: point.id
51
+ key: point.id,
52
+ rerender: rerender
46
53
  });
47
54
  }));
48
55
  };
49
56
 
50
57
  exports.PointMarkers = PointMarkers;
51
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRNYXJrZXJzLnRzeCJdLCJuYW1lcyI6WyJQb2ludE1hcmtlcnMiLCJwcm9wcyIsIkwiLCJwb2ludHMiLCJtYXAiLCJpbmNsdWRlVW5tb25pdG9yZWRQb2ludHMiLCJldmVudCIsImlzUG9pbnRCZWxvbmdUb0dyb3VwVHlwZXMiLCJwb2ludCIsImdyb3VwIiwidHlwZSIsImhhc19kZXZpY2UiLCJpc1BvaW50TW9uaXRvcmVkQW5kUGFydE9mUGF0aCIsInBhcnRfb2ZfbW9uaXRvcmVkX3BhdGgiLCJpbmNsdWRlVW5tb25pdG9yZWRQb2ludHNMb2dpYyIsImhpZGUiLCJmaWx0ZXJTdGF0ZW1lbnQiLCJsZW5ndGgiLCJmaWx0ZXIiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImlkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFVTyxJQUFNQSxZQUE2QixHQUFHLFNBQWhDQSxZQUFnQyxDQUFDQyxLQUFELEVBQVc7QUFDdEQsTUFBUUMsQ0FBUixHQUFvRUQsS0FBcEUsQ0FBUUMsQ0FBUjtBQUFBLE1BQVdDLE1BQVgsR0FBb0VGLEtBQXBFLENBQVdFLE1BQVg7QUFBQSxNQUFtQkMsR0FBbkIsR0FBb0VILEtBQXBFLENBQW1CRyxHQUFuQjtBQUFBLDhCQUFvRUgsS0FBcEUsQ0FBd0JJLHdCQUF4QjtBQUFBLE1BQXdCQSx3QkFBeEIsc0NBQW1ELEtBQW5EO0FBQUEsTUFBMERDLEtBQTFELEdBQW9FTCxLQUFwRSxDQUEwREssS0FBMUQ7O0FBQ0EsTUFBTUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUE0QixDQUFDQyxLQUFELEVBQW1CO0FBQ25ELFdBQ0VBLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxJQUFaLEtBQXFCLGtDQUFyQixJQUNDRixLQUFLLENBQUNDLEtBQU4sQ0FBWUMsSUFBWixLQUFxQixvQkFBckIsSUFBNkNGLEtBQUssQ0FBQ0csVUFGdEQ7QUFJRCxHQUxEOztBQU9BLE1BQU1DLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBZ0MsQ0FBQ0osS0FBRCxFQUFtQjtBQUN2RCxXQUFPQSxLQUFLLENBQUNLLHNCQUFOLElBQWdDTCxLQUFLLENBQUNHLFVBQXRDLElBQW9ETCxLQUEzRDtBQUNELEdBRkQ7O0FBSUEsTUFBTVEsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUFnQyxDQUFDTixLQUFELEVBQW1CO0FBQ3ZELFdBQ0UsQ0FBQ0gsd0JBQXdCLEdBQ3JCRyxLQUFLLENBQUNLLHNCQURlLEdBRXJCTCxLQUFLLENBQUNHLFVBRlYsS0FFeUIsQ0FBQ0gsS0FBSyxDQUFDTyxJQUhsQztBQUtELEdBTkQ7O0FBUUEsTUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDUixLQUFELEVBQVc7QUFDakMsV0FDRU0sNkJBQTZCLENBQUNOLEtBQUQsQ0FBN0IsSUFDQUQseUJBQXlCLENBQUNDLEtBQUQsQ0FEekIsSUFFQUksNkJBQTZCLENBQUNKLEtBQUQsQ0FIL0I7QUFLRCxHQU5EOztBQVFBLHNCQUNFLDBDQUNHTCxNQUFNLENBQUNjLE1BQVAsS0FBa0IsQ0FBbEIsSUFDQ2QsTUFBTSxDQUNIZSxNQURILENBQ1UsVUFBQ1YsS0FBRDtBQUFBLFdBQW1CUSxlQUFlLENBQUNSLEtBQUQsQ0FBbEM7QUFBQSxHQURWLEVBRUdKLEdBRkgsQ0FHSSxVQUFDSSxLQUFEO0FBQUEsV0FDRUEsS0FBSyxDQUFDVyxRQUFOLElBQ0FYLEtBQUssQ0FBQ1ksU0FETixpQkFFRSw2QkFBQyxvQkFBRDtBQUFhLE1BQUEsR0FBRyxFQUFFaEIsR0FBbEI7QUFBdUIsTUFBQSxDQUFDLEVBQUVGLENBQTFCO0FBQTZCLE1BQUEsS0FBSyxFQUFFTSxLQUFwQztBQUEyQyxNQUFBLEdBQUcsRUFBRUEsS0FBSyxDQUFDYTtBQUF0RCxNQUhKO0FBQUEsR0FISixDQUZKLENBREY7QUFjRCxDQTNDTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICdzcmMvc3RvcmUvcG9pbnRzL21vZGVscy9JUG9pbnQnO1xuaW1wb3J0IFBvaW50TWFya2VyIGZyb20gJy4vUG9pbnRNYXJrZXInO1xuXG50eXBlIFByb3BzID0ge1xuICBtYXA6IGFueTtcbiAgTDogYW55O1xuICBwb2ludHM6IGFueTtcbiAgaW5jbHVkZVVubW9uaXRvcmVkUG9pbnRzOiBib29sZWFuO1xuICBldmVudD86IGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBQb2ludE1hcmtlcnM6IFJlYWN0LkZDPFByb3BzPiA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IEwsIHBvaW50cywgbWFwLCBpbmNsdWRlVW5tb25pdG9yZWRQb2ludHMgPSBmYWxzZSwgZXZlbnQgfSA9IHByb3BzO1xuICBjb25zdCBpc1BvaW50QmVsb25nVG9Hcm91cFR5cGVzID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JyB8fFxuICAgICAgKHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6OkNvbGxlY3RvcnMnICYmIHBvaW50Lmhhc19kZXZpY2UpXG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBpc1BvaW50TW9uaXRvcmVkQW5kUGFydE9mUGF0aCA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gICAgcmV0dXJuIHBvaW50LnBhcnRfb2ZfbW9uaXRvcmVkX3BhdGggJiYgcG9pbnQuaGFzX2RldmljZSAmJiBldmVudDtcbiAgfTtcblxuICBjb25zdCBpbmNsdWRlVW5tb25pdG9yZWRQb2ludHNMb2dpYyA9IChwb2ludDogSVBvaW50KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIChpbmNsdWRlVW5tb25pdG9yZWRQb2ludHNcbiAgICAgICAgPyBwb2ludC5wYXJ0X29mX21vbml0b3JlZF9wYXRoXG4gICAgICAgIDogcG9pbnQuaGFzX2RldmljZSkgJiYgIXBvaW50LmhpZGVcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlclN0YXRlbWVudCA9IChwb2ludCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICBpbmNsdWRlVW5tb25pdG9yZWRQb2ludHNMb2dpYyhwb2ludCkgfHxcbiAgICAgIGlzUG9pbnRCZWxvbmdUb0dyb3VwVHlwZXMocG9pbnQpIHx8XG4gICAgICBpc1BvaW50TW9uaXRvcmVkQW5kUGFydE9mUGF0aChwb2ludClcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIHtwb2ludHMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgIHBvaW50c1xuICAgICAgICAgIC5maWx0ZXIoKHBvaW50OiBJUG9pbnQpID0+IGZpbHRlclN0YXRlbWVudChwb2ludCkpXG4gICAgICAgICAgLm1hcChcbiAgICAgICAgICAgIChwb2ludDogSVBvaW50KSA9PlxuICAgICAgICAgICAgICBwb2ludC5sYXRpdHVkZSAmJlxuICAgICAgICAgICAgICBwb2ludC5sb25naXR1ZGUgJiYgKFxuICAgICAgICAgICAgICAgIDxQb2ludE1hcmtlciBtYXA9e21hcH0gTD17TH0gcG9pbnQ9e3BvaW50fSBrZXk9e3BvaW50LmlkfSAvPlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuIl19
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRNYXJrZXJzLnRzeCJdLCJuYW1lcyI6WyJQb2ludE1hcmtlcnMiLCJwcm9wcyIsInBvaW50cyIsIm1hcCIsImluY2x1ZGVVbm1vbml0b3JlZFBvaW50cyIsInJlcmVuZGVyIiwiaXNQb2ludEJlbG9uZ1RvR3JvdXBUeXBlcyIsInBvaW50IiwiZ3JvdXAiLCJ0eXBlIiwiaGFzX2RldmljZSIsImluY2x1ZGVVbm1vbml0b3JlZFBvaW50c0xvZ2ljIiwicGFydF9vZl9tb25pdG9yZWRfcGF0aCIsImZpbHRlclN0YXRlbWVudCIsImZpbHRlcmVkUG9pbnRzIiwiZmlsdGVyIiwibGVuZ3RoIiwibGF0aXR1ZGUiLCJsb25naXR1ZGUiLCJpZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7O0FBU08sSUFBTUEsWUFBNkIsR0FBRyxTQUFoQ0EsWUFBZ0MsQ0FBQ0MsS0FBRCxFQUFXO0FBQ3RELE1BQ0VDLE1BREYsR0FLSUQsS0FMSixDQUNFQyxNQURGO0FBQUEsTUFFRUMsR0FGRixHQUtJRixLQUxKLENBRUVFLEdBRkY7QUFBQSw4QkFLSUYsS0FMSixDQUdFRyx3QkFIRjtBQUFBLE1BR0VBLHdCQUhGLHNDQUc2QixLQUg3QjtBQUFBLHdCQUtJSCxLQUxKLENBSUVJLFFBSkY7QUFBQSxNQUlFQSxRQUpGLGdDQUlhLEtBSmI7O0FBT0EsTUFBTUMseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUE0QixDQUFDQyxLQUFELEVBQW1CO0FBQ25ELFdBQ0VBLEtBQUssQ0FBQ0MsS0FBTixDQUFZQyxJQUFaLEtBQXFCLGtDQUFyQixJQUNDRixLQUFLLENBQUNDLEtBQU4sQ0FBWUMsSUFBWixLQUFxQixpQkFBckIsSUFBMENGLEtBQUssQ0FBQ0csVUFEakQsSUFFQ0gsS0FBSyxDQUFDQyxLQUFOLENBQVlDLElBQVosS0FBcUIsb0JBQXJCLElBQTZDRixLQUFLLENBQUNHLFVBSHREO0FBS0QsR0FORDs7QUFRQSxNQUFNQyw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQWdDLENBQUNKLEtBQUQsRUFBbUI7QUFDdkQsV0FBT0gsd0JBQXdCLEdBQUdHLEtBQUssQ0FBQ0ssc0JBQVQsR0FBa0MsSUFBakU7QUFDRCxHQUZEOztBQUlBLE1BQU1DLGVBQWUsR0FBRyxTQUFsQkEsZUFBa0IsQ0FBQ04sS0FBRCxFQUFXO0FBQ2pDLFdBQ0VJLDZCQUE2QixDQUFDSixLQUFELENBQTdCLElBQXdDRCx5QkFBeUIsQ0FBQ0MsS0FBRCxDQURuRTtBQUdELEdBSkQ7O0FBTUEsTUFBTU8sY0FBYyxHQUFHLFNBQWpCQSxjQUFpQixHQUFNO0FBQzNCLFdBQU9aLE1BQU0sQ0FBQ2EsTUFBUCxDQUFjLFVBQUNSLEtBQUQ7QUFBQSxhQUFtQk0sZUFBZSxDQUFDTixLQUFELENBQWxDO0FBQUEsS0FBZCxDQUFQO0FBQ0QsR0FGRDs7QUFJQSx3QkFBVSxZQUFNLENBQUUsQ0FBbEIsRUFBb0IsQ0FBQ0YsUUFBRCxDQUFwQjtBQUVBLHNCQUNFLDBDQUNHSCxNQUFNLENBQUNjLE1BQVAsS0FBa0IsQ0FBbEIsSUFDQ0YsY0FBYyxHQUFHWCxHQUFqQixDQUNFLFVBQUNJLEtBQUQ7QUFBQSxXQUNFQSxLQUFLLENBQUNVLFFBQU4sSUFDQVYsS0FBSyxDQUFDVyxTQUROLGlCQUVFLDZCQUFDLG9CQUFEO0FBQ0UsTUFBQSxHQUFHLEVBQUVmLEdBRFA7QUFFRSxNQUFBLEtBQUssRUFBRUksS0FGVDtBQUdFLE1BQUEsR0FBRyxFQUFFQSxLQUFLLENBQUNZLEVBSGI7QUFJRSxNQUFBLFFBQVEsRUFBRWQ7QUFKWixNQUhKO0FBQUEsR0FERixDQUZKLENBREY7QUFpQkQsQ0FqRE0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgSVBvaW50IH0gZnJvbSAnc3JjL3N0b3JlL3BvaW50cy9tb2RlbHMvSVBvaW50JztcbmltcG9ydCBQb2ludE1hcmtlciBmcm9tICcuL1BvaW50TWFya2VyJztcblxudHlwZSBQcm9wcyA9IHtcbiAgbWFwOiBhbnk7XG4gIHBvaW50czogYW55O1xuICBpbmNsdWRlVW5tb25pdG9yZWRQb2ludHM6IGJvb2xlYW47XG4gIHJlcmVuZGVyOiBib29sZWFuO1xufTtcblxuZXhwb3J0IGNvbnN0IFBvaW50TWFya2VyczogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwb2ludHMsXG4gICAgbWFwLFxuICAgIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50cyA9IGZhbHNlLFxuICAgIHJlcmVuZGVyID0gZmFsc2UsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc1BvaW50QmVsb25nVG9Hcm91cFR5cGVzID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgcG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6V2FzdGV3YXRlclRyZWF0bWVudFBsYW50JyB8fFxuICAgICAgKHBvaW50Lmdyb3VwLnR5cGUgPT09ICdHcm91cHM6OkZhY3RvcnknICYmIHBvaW50Lmhhc19kZXZpY2UpIHx8XG4gICAgICAocG9pbnQuZ3JvdXAudHlwZSA9PT0gJ0dyb3Vwczo6Q29sbGVjdG9ycycgJiYgcG9pbnQuaGFzX2RldmljZSlcbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGluY2x1ZGVVbm1vbml0b3JlZFBvaW50c0xvZ2ljID0gKHBvaW50OiBJUG9pbnQpID0+IHtcbiAgICByZXR1cm4gaW5jbHVkZVVubW9uaXRvcmVkUG9pbnRzID8gcG9pbnQucGFydF9vZl9tb25pdG9yZWRfcGF0aCA6IHRydWU7XG4gIH07XG5cbiAgY29uc3QgZmlsdGVyU3RhdGVtZW50ID0gKHBvaW50KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGluY2x1ZGVVbm1vbml0b3JlZFBvaW50c0xvZ2ljKHBvaW50KSAmJiBpc1BvaW50QmVsb25nVG9Hcm91cFR5cGVzKHBvaW50KVxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgZmlsdGVyZWRQb2ludHMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHBvaW50cy5maWx0ZXIoKHBvaW50OiBJUG9pbnQpID0+IGZpbHRlclN0YXRlbWVudChwb2ludCkpO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7fSwgW3JlcmVuZGVyXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAge3BvaW50cy5sZW5ndGggIT09IDAgJiZcbiAgICAgICAgZmlsdGVyZWRQb2ludHMoKS5tYXAoXG4gICAgICAgICAgKHBvaW50OiBJUG9pbnQpID0+XG4gICAgICAgICAgICBwb2ludC5sYXRpdHVkZSAmJlxuICAgICAgICAgICAgcG9pbnQubG9uZ2l0dWRlICYmIChcbiAgICAgICAgICAgICAgPFBvaW50TWFya2VyXG4gICAgICAgICAgICAgICAgbWFwPXttYXB9XG4gICAgICAgICAgICAgICAgcG9pbnQ9e3BvaW50fVxuICAgICAgICAgICAgICAgIGtleT17cG9pbnQuaWR9XG4gICAgICAgICAgICAgICAgcmVyZW5kZXI9e3JlcmVuZGVyfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0=
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.popupContent = exports.createSamplingIcons = exports.createObservationIconPoint = exports.createSamplingIconPoint = exports.markerBelongsToSource = exports.markerBelongsToSelectedSource = exports.belongsToSourceBackground = exports.selectedBackground = exports.combinedWWTPIcon = exports.combinedCollectorsIcon = exports.combinedPumpStationIcon = exports.combinedFactoryIcon = exports.standardBackground = exports.matchIconToPoint = exports.createManholePoint = exports.createBubblePoint = exports.isCollectorFocused = void 0;
9
+
10
+ var _lineChart = _interopRequireDefault(require("../../../assets/line-chart.svg"));
11
+
12
+ var _leaflet = _interopRequireDefault(require("leaflet"));
13
+
14
+ var _i18n = _interopRequireDefault(require("../../../utilities/i18n"));
15
+
16
+ var _blueCircle = _interopRequireDefault(require("../../../assets/point_icons/blue-circle.svg"));
17
+
18
+ var _samplingIcon = _interopRequireDefault(require("../../../assets/point_icons/sampling-icon.svg"));
19
+
20
+ var _pinkCircle = _interopRequireDefault(require("../../../assets/point_icons/pink-circle.svg"));
21
+
22
+ var _observationIcon = _interopRequireDefault(require("../../../assets/point_icons/observation-icon.svg"));
23
+
24
+ var _redPinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/red-pin-red-shadow.png"));
25
+
26
+ var _whitePinRedShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-red-shadow.png"));
27
+
28
+ var _whitePinBlackShadow = _interopRequireDefault(require("../../../assets/point_icons/white-pin-black-shadow.png"));
29
+
30
+ var _yellowCircle = _interopRequireDefault(require("../../../assets/point_icons/yellow-circle.svg"));
31
+
32
+ var _factoryIcon = _interopRequireDefault(require("../../../assets/point_icons/factory-icon.svg"));
33
+
34
+ var _greenCircle = _interopRequireDefault(require("../../../assets/point_icons/green-circle.svg"));
35
+
36
+ var _pumpStationIcon = _interopRequireDefault(require("../../../assets/point_icons/pump-station-icon.svg"));
37
+
38
+ var _pinWater = _interopRequireDefault(require("../../../assets/map/pin-water.svg"));
39
+
40
+ var _brightBlueCircle = _interopRequireDefault(require("../../../assets/point_icons/bright-blue-circle.svg"));
41
+
42
+ var _WWTPIcon = _interopRequireDefault(require("../../../assets/point_icons/WWTP-icon.svg"));
43
+
44
+ var _waterNoBackground = _interopRequireDefault(require("../../../assets/point_icons/water-no-background.svg"));
45
+
46
+ var _whitePoint = _interopRequireDefault(require("../../../assets/white-point.png"));
47
+
48
+ var isCollectorFocused = function isCollectorFocused(point, event) {
49
+ var _event$observations;
50
+
51
+ 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;
52
+ }; // iconSize: [width, height],
53
+ // IconAnchor: [(-right)(+left), (-down)(+up)]
54
+
55
+
56
+ exports.isCollectorFocused = isCollectorFocused;
57
+
58
+ var createBubblePoint = function createBubblePoint(markerLocation, point, map, hovered) {
59
+ // @ts-ignore
60
+ matchIconToPoint(point) !== null && // @ts-ignore
61
+ matchIconToPoint(point).forEach(function (icon) {
62
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
63
+ icon: icon,
64
+ riseOnHover: false
65
+ }).addTo(map);
66
+
67
+ pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
68
+ pointCustomIcon['kando_object_id'] = point.id;
69
+ pointCustomIcon['kando_object'] = 'Point';
70
+ if (hovered) pointCustomIcon['kando_object'] = 'PointHovered';
71
+ });
72
+
73
+ if (point.relatedEventsAmount) {
74
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
75
+ icon: _leaflet.default.divIcon({
76
+ className: "\n ".concat(point.relatedEventsAmount >= 100 ? 'circle-events-amount circle-events-amount--tridigit' : 'circle-events-amount', " \n ").concat(point.relatedEventsAmount > 2 ? 'alert-color' : '', "\n "),
77
+ html: "<p>".concat(point.relatedEventsAmount, "</p>"),
78
+ iconAnchor: [-5, 42]
79
+ }),
80
+ riseOnHover: false
81
+ }).addTo(map);
82
+
83
+ pointCustomIcon['kando_object_id'] = point.id;
84
+ pointCustomIcon['kando_object'] = 'IconNumber';
85
+ if (hovered) pointCustomIcon['kando_object'] = 'IconNumberHovered';
86
+ }
87
+ };
88
+
89
+ exports.createBubblePoint = createBubblePoint;
90
+
91
+ var createManholePoint = function createManholePoint(markerLocation, point, map, hovered) {
92
+ var pointIcon = _leaflet.default.icon({
93
+ iconUrl: _whitePoint.default,
94
+ iconSize: [9, 9],
95
+ iconAnchor: [4.5, 4.5]
96
+ });
97
+
98
+ var manholeIcon = _leaflet.default.marker(markerLocation, {
99
+ icon: pointIcon,
100
+ riseOnHover: true
101
+ }).addTo(map);
102
+
103
+ manholeIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
104
+ manholeIcon['kando_object_id'] = point.id;
105
+ manholeIcon['kando_object'] = 'Point';
106
+ if (hovered) manholeIcon['kando_object'] = 'PointHovered';
107
+ };
108
+
109
+ exports.createManholePoint = createManholePoint;
110
+
111
+ var matchIconToPoint = function matchIconToPoint(point, event) {
112
+ switch (point.group.type) {
113
+ case 'Groups::Factory':
114
+ if (combinedFactoryIcon.length === 2) {
115
+ if (markerBelongsToSelectedSource(event, point)) {
116
+ combinedFactoryIcon.unshift(selectedBackground());
117
+ } else if (markerBelongsToSource(event, point)) {
118
+ combinedFactoryIcon.unshift(belongsToSourceBackground());
119
+ } else {
120
+ combinedFactoryIcon.unshift(standardBackground());
121
+ }
122
+ }
123
+
124
+ return combinedFactoryIcon;
125
+
126
+ case 'Groups::PumpStation':
127
+ if (combinedPumpStationIcon.length === 2) {
128
+ if (markerBelongsToSelectedSource(event, point)) {
129
+ combinedPumpStationIcon.unshift(selectedBackground());
130
+ } else if (markerBelongsToSource(event, point)) {
131
+ combinedPumpStationIcon.unshift(belongsToSourceBackground());
132
+ } else {
133
+ combinedPumpStationIcon.unshift(standardBackground());
134
+ }
135
+ }
136
+
137
+ return combinedPumpStationIcon;
138
+
139
+ case 'Groups::WastewaterTreatmentPlant':
140
+ if (combinedWWTPIcon.length === 2) {
141
+ if (markerBelongsToSelectedSource(event, point)) {
142
+ combinedWWTPIcon.unshift(selectedBackground());
143
+ } else if (markerBelongsToSource(event, point)) {
144
+ combinedWWTPIcon.unshift(belongsToSourceBackground());
145
+ } else {
146
+ combinedWWTPIcon.unshift(standardBackground());
147
+ }
148
+ }
149
+
150
+ return combinedWWTPIcon;
151
+
152
+ case 'Groups::Collectors':
153
+ if (isCollectorFocused(point, event)) {
154
+ return [_leaflet.default.icon({
155
+ iconUrl: _redPinRedShadow.default,
156
+ iconSize: [62, 62],
157
+ iconAnchor: [30, 52]
158
+ }), _leaflet.default.icon({
159
+ iconUrl: _waterNoBackground.default,
160
+ iconSize: [46, 46],
161
+ iconAnchor: [22, 44],
162
+ popupAnchor: [0, -30]
163
+ })];
164
+ }
165
+
166
+ return combinedCollectorsIcon;
167
+
168
+ default:
169
+ return null;
170
+ }
171
+ };
172
+
173
+ exports.matchIconToPoint = matchIconToPoint;
174
+
175
+ var standardBackground = function standardBackground() {
176
+ var secondary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
177
+ var third = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
178
+ return _leaflet.default.icon({
179
+ iconUrl: _whitePinBlackShadow.default,
180
+ iconSize: secondary ? [20, 20] : [43, 46],
181
+ iconAnchor: secondary && third ? [-2, 19] : secondary ? [-2, 44] : [20, 42],
182
+ popupAnchor: [0, -30]
183
+ });
184
+ };
185
+
186
+ exports.standardBackground = standardBackground;
187
+ var combinedFactoryIcon = [_leaflet.default.icon({
188
+ iconUrl: _yellowCircle.default,
189
+ iconSize: [25, 24],
190
+ iconAnchor: [10.7, 33.7],
191
+ popupAnchor: [0, -30]
192
+ }), _leaflet.default.icon({
193
+ iconUrl: _factoryIcon.default,
194
+ iconSize: [15, 15],
195
+ iconAnchor: [5, 30],
196
+ popupAnchor: [0, -30]
197
+ })];
198
+ exports.combinedFactoryIcon = combinedFactoryIcon;
199
+ var combinedPumpStationIcon = [_leaflet.default.icon({
200
+ iconUrl: _greenCircle.default,
201
+ iconSize: [25, 24],
202
+ iconAnchor: [10.7, 33.7],
203
+ popupAnchor: [0, -30]
204
+ }), _leaflet.default.icon({
205
+ iconUrl: _pumpStationIcon.default,
206
+ iconSize: [20, 20],
207
+ iconAnchor: [7, 32],
208
+ popupAnchor: [0, -30]
209
+ })];
210
+ exports.combinedPumpStationIcon = combinedPumpStationIcon;
211
+ var combinedCollectorsIcon = [_leaflet.default.icon({
212
+ iconUrl: _pinWater.default,
213
+ iconSize: [45, 45],
214
+ iconAnchor: [25, 50],
215
+ popupAnchor: [0, -30]
216
+ })];
217
+ exports.combinedCollectorsIcon = combinedCollectorsIcon;
218
+ var combinedWWTPIcon = [_leaflet.default.icon({
219
+ iconUrl: _brightBlueCircle.default,
220
+ iconSize: [25, 25],
221
+ iconAnchor: [10.7, 33.7],
222
+ popupAnchor: [0, -30]
223
+ }), _leaflet.default.icon({
224
+ iconUrl: _WWTPIcon.default,
225
+ iconSize: [20, 20],
226
+ iconAnchor: [8, 31],
227
+ popupAnchor: [0, -30]
228
+ })];
229
+ exports.combinedWWTPIcon = combinedWWTPIcon;
230
+
231
+ var selectedBackground = function selectedBackground() {
232
+ return _leaflet.default.icon({
233
+ iconUrl: _redPinRedShadow.default,
234
+ iconSize: [67, 70],
235
+ iconAnchor: [32, 54],
236
+ popupAnchor: [0, -30]
237
+ });
238
+ };
239
+
240
+ exports.selectedBackground = selectedBackground;
241
+
242
+ var belongsToSourceBackground = function belongsToSourceBackground() {
243
+ return _leaflet.default.icon({
244
+ iconUrl: _whitePinRedShadow.default,
245
+ iconSize: [67, 70],
246
+ iconAnchor: [32, 54],
247
+ popupAnchor: [0, -30]
248
+ });
249
+ };
250
+
251
+ exports.belongsToSourceBackground = belongsToSourceBackground;
252
+
253
+ var markerBelongsToSelectedSource = function markerBelongsToSelectedSource(event, point) {
254
+ var source;
255
+
256
+ if (event !== null && event !== undefined) {
257
+ source = event.sources.filter(function (source) {
258
+ return source.point_id === point.id;
259
+ })[0];
260
+ }
261
+
262
+ return event !== null && source && event.selected_source === source.point_id;
263
+ };
264
+
265
+ exports.markerBelongsToSelectedSource = markerBelongsToSelectedSource;
266
+
267
+ var markerBelongsToSource = function markerBelongsToSource(event, point) {
268
+ if (event === undefined) return;
269
+ return event !== null && event.sources.filter(function (source) {
270
+ return source.point_id === point.id;
271
+ })[0];
272
+ };
273
+
274
+ exports.markerBelongsToSource = markerBelongsToSource;
275
+
276
+ var createSamplingIconPoint = function createSamplingIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
277
+ // iconSize: [width, height],
278
+ // Icon Anchor: [(-right)(+left), (-down)(+up)]
279
+ var samplingIcon = [_leaflet.default.icon({
280
+ iconUrl: _blueCircle.default,
281
+ iconSize: secondaryIcon ? [10, 10] : [25, 24],
282
+ iconAnchor: secondaryIcon ? [-7, 15] : [10.7, 33.7],
283
+ popupAnchor: [0, -30]
284
+ }), _leaflet.default.icon({
285
+ iconUrl: _samplingIcon.default,
286
+ iconSize: secondaryIcon ? [7, 7] : [13, 15],
287
+ iconAnchor: secondaryIcon ? [-8, 13] : [5, 30],
288
+ popupAnchor: [0, -30]
289
+ })];
290
+
291
+ if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
292
+ samplingIcon.unshift(selectedBackground());
293
+ } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
294
+ samplingIcon.unshift(belongsToSourceBackground());
295
+ } else {
296
+ samplingIcon.unshift(standardBackground(secondaryIcon, true));
297
+ }
298
+
299
+ samplingIcon.forEach(function (icon) {
300
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
301
+ icon: icon,
302
+ riseOnHover: false
303
+ }).addTo(map);
304
+
305
+ pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
306
+ pointCustomIcon['kando_object_id'] = point.id;
307
+ pointCustomIcon['kando_object'] = 'Sampling';
308
+ if (hovered) pointCustomIcon['kando_object'] = 'SamplingHovered';
309
+ });
310
+ };
311
+
312
+ exports.createSamplingIconPoint = createSamplingIconPoint;
313
+
314
+ var createObservationIconPoint = function createObservationIconPoint(markerLocation, secondaryIcon, map, point, event, hovered) {
315
+ // iconSize: [width, height],
316
+ // Icon Anchor: [(-right)(+left), (-down)(+up)]
317
+ var observationIcon = [_leaflet.default.icon({
318
+ iconUrl: _pinkCircle.default,
319
+ iconSize: secondaryIcon ? [10, 10] : [25, 24],
320
+ iconAnchor: secondaryIcon ? [-7, 40] : [10.7, 33.7],
321
+ popupAnchor: [0, -30]
322
+ }), _leaflet.default.icon({
323
+ iconUrl: _observationIcon.default,
324
+ iconSize: secondaryIcon ? [7, 7] : [13, 15],
325
+ iconAnchor: secondaryIcon ? [-8, 38] : [5, 30],
326
+ popupAnchor: [0, -30]
327
+ })];
328
+
329
+ if (markerBelongsToSelectedSource(event, point) && !secondaryIcon) {
330
+ observationIcon.unshift(selectedBackground());
331
+ } else if (markerBelongsToSource(event, point) && !secondaryIcon) {
332
+ observationIcon.unshift(belongsToSourceBackground());
333
+ } else {
334
+ observationIcon.unshift(standardBackground(secondaryIcon));
335
+ }
336
+
337
+ observationIcon.forEach(function (icon) {
338
+ var pointCustomIcon = _leaflet.default.marker(markerLocation, {
339
+ icon: icon,
340
+ riseOnHover: false
341
+ }).addTo(map);
342
+
343
+ pointCustomIcon.bindTooltip("".concat(point.group.name, " (").concat(point.group.sector_name, ")"));
344
+ pointCustomIcon['kando_object_id'] = point.id;
345
+ pointCustomIcon['kando_object'] = 'Observation';
346
+ if (hovered) pointCustomIcon['kando_object'] = 'ObservationHovered';
347
+ });
348
+ };
349
+
350
+ exports.createObservationIconPoint = createObservationIconPoint;
351
+
352
+ var createSamplingIcons = function createSamplingIcons(markerLocation, event, point, map, hovered) {
353
+ var sampledPointIds = event.samplings.map(function (s) {
354
+ return s.point_id;
355
+ });
356
+
357
+ if (event !== null && event.samplings.length !== 0 && sampledPointIds.includes(point.id)) {
358
+ createSamplingIconPoint(markerLocation, matchIconToPoint(point, event) !== null, map, point, event, hovered);
359
+ }
360
+ };
361
+
362
+ exports.createSamplingIcons = createSamplingIcons;
363
+
364
+ var popupContent = function popupContent(obs, point) {
365
+ if (obs === null) {
366
+ 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 ");
367
+ } else {
368
+ 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 ");
369
+ }
370
+ };
371
+
372
+ exports.popupContent = popupContent;
373
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9XaWRnZXRzL01hcC9wb2ludHMvUG9pbnRVdGlscy50cyJdLCJuYW1lcyI6WyJpc0NvbGxlY3RvckZvY3VzZWQiLCJwb2ludCIsImV2ZW50Iiwib2JzZXJ2YXRpb25zIiwibGVuZ3RoIiwiaWQiLCJwb2ludF9pZCIsImNyZWF0ZUJ1YmJsZVBvaW50IiwibWFya2VyTG9jYXRpb24iLCJtYXAiLCJob3ZlcmVkIiwibWF0Y2hJY29uVG9Qb2ludCIsImZvckVhY2giLCJpY29uIiwicG9pbnRDdXN0b21JY29uIiwiTCIsIm1hcmtlciIsInJpc2VPbkhvdmVyIiwiYWRkVG8iLCJiaW5kVG9vbHRpcCIsImdyb3VwIiwibmFtZSIsInNlY3Rvcl9uYW1lIiwicmVsYXRlZEV2ZW50c0Ftb3VudCIsImRpdkljb24iLCJjbGFzc05hbWUiLCJodG1sIiwiaWNvbkFuY2hvciIsImNyZWF0ZU1hbmhvbGVQb2ludCIsInBvaW50SWNvbiIsImljb25VcmwiLCJ3aGl0ZVBvaW50IiwiaWNvblNpemUiLCJtYW5ob2xlSWNvbiIsInR5cGUiLCJjb21iaW5lZEZhY3RvcnlJY29uIiwibWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UiLCJ1bnNoaWZ0Iiwic2VsZWN0ZWRCYWNrZ3JvdW5kIiwibWFya2VyQmVsb25nc1RvU291cmNlIiwiYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCIsInN0YW5kYXJkQmFja2dyb3VuZCIsImNvbWJpbmVkUHVtcFN0YXRpb25JY29uIiwiY29tYmluZWRXV1RQSWNvbiIsInJlZFBpblJlZFNoYWRvdyIsIndhdGVySWNvbk5vQmFja2dyb3VuZCIsInBvcHVwQW5jaG9yIiwiY29tYmluZWRDb2xsZWN0b3JzSWNvbiIsInNlY29uZGFyeSIsInRoaXJkIiwid2hpdGVQaW5CbGFja1NoYWRvdyIsInllbGxvd0NpcmNsZVVSTCIsInBsYW50SWNvblVSTCIsImdyZWVuQ2lyY2xlVVJMIiwicHVtcFN0YXRpb25JY29uVVJMIiwiY29sbGVjdG9ySWNvbiIsImJyaWdodEJsdWVDaXJjbGVVUkwiLCJXV1RQSWNvblVSTCIsIndoaXRlUGluUmVkU2hhZG93Iiwic291cmNlIiwidW5kZWZpbmVkIiwic291cmNlcyIsImZpbHRlciIsInNlbGVjdGVkX3NvdXJjZSIsImNyZWF0ZVNhbXBsaW5nSWNvblBvaW50Iiwic2Vjb25kYXJ5SWNvbiIsInNhbXBsaW5nSWNvbiIsImJsdWVDaXJjbGVVUkwiLCJzYW1wbGluZ0ljb25VUkwiLCJjcmVhdGVPYnNlcnZhdGlvbkljb25Qb2ludCIsIm9ic2VydmF0aW9uSWNvbiIsInBpbmtDaXJjbGVVUkwiLCJvYnNlcnZhdGlvbkljb25VUkwiLCJjcmVhdGVTYW1wbGluZ0ljb25zIiwic2FtcGxlZFBvaW50SWRzIiwic2FtcGxpbmdzIiwicyIsImluY2x1ZGVzIiwicG9wdXBDb250ZW50Iiwib2JzIiwiR3JhcGhJY29uIiwiaTE4biIsInQiLCJzZXZlcml0eSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQU9BOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQTs7QUFFTyxJQUFNQSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLENBQUNDLEtBQUQsRUFBZ0JDLEtBQWhCLEVBQWtDO0FBQUE7O0FBQ2xFLFNBQ0UsQ0FBQUEsS0FBSyxTQUFMLElBQUFBLEtBQUssV0FBTCxtQ0FBQUEsS0FBSyxDQUFFQyxZQUFQLDRFQUFxQkMsTUFBckIsTUFBZ0MsQ0FBaEMsSUFDQUgsS0FBSyxDQUFDSSxFQUFOLEtBQWFILEtBQUssQ0FBQ0MsWUFBTixDQUFtQixDQUFuQixFQUFzQkcsUUFGckM7QUFJRCxDQUxNLEMsQ0FPUDtBQUNBOzs7OztBQUNPLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FDL0JDLGNBRCtCLEVBRS9CUCxLQUYrQixFQUcvQlEsR0FIK0IsRUFJL0JDLE9BSitCLEVBSzVCO0FBQ0g7QUFDQUMsRUFBQUEsZ0JBQWdCLENBQUNWLEtBQUQsQ0FB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K0hBRTREOUUsS0FBSyxDQUFDSSxFQUZsRSxpREFHNEIyRSxrQkFINUIsd0pBTTBEL0UsS0FBSyxDQUFDbUIsS0FBTixDQUFZQyxJQU50RTtBQWFELEdBZEQsTUFjTztBQUNMLCtIQUU0RDBELEdBQUcsQ0FBQzFFLEVBRmhFLGlEQUc0QjJFLGtCQUg1Qix3SkFPa0IvRSxLQUFLLENBQUNtQixLQUFOLENBQVlDLElBUDlCLG9KQVUyRDRELGNBQUtDLENBQUwsNEJBVjNELHlEQWNzQiw4QkFBOEJILEdBQUcsQ0FBQ0ksUUFkeEQsdUhBaUI4QkYsY0FBS0MsQ0FBTCxzQ0FDOEJILEdBQUcsQ0FBQ0ksUUFEbEMsRUFqQjlCLG1XQTRCK0RGLGNBQUtDLENBQUwsOEJBNUIvRCxnT0FrQytERCxjQUFLQyxDQUFMLDZCQWxDL0Q7QUEyQ0Q7QUFDRixDQTVETSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHcmFwaEljb24gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2xpbmUtY2hhcnQuc3ZnJztcbmltcG9ydCBMLCB7IExhdExuZ1R1cGxlIH0gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQgaTE4biBmcm9tICcuLi8uLi8uLi91dGlsaXRpZXMvaTE4bic7XG5pbXBvcnQgeyBJUG9pbnQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9wb2ludHMvbW9kZWxzL0lQb2ludCc7XG5pbXBvcnQgYmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYmx1ZS1jaXJjbGUuc3ZnJztcbmltcG9ydCBzYW1wbGluZ0ljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3NhbXBsaW5nLWljb24uc3ZnJztcbmltcG9ydCBwaW5rQ2lyY2xlVVJMIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9wb2ludF9pY29ucy9waW5rLWNpcmNsZS5zdmcnO1xuaW1wb3J0IG9ic2VydmF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvb2JzZXJ2YXRpb24taWNvbi5zdmcnO1xuaW1wb3J0IHsgSUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvZXZlbnRzL21vZGVscy9JRXZlbnQnO1xuaW1wb3J0IHJlZFBpblJlZFNoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcmVkLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5SZWRTaGFkb3cgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL3doaXRlLXBpbi1yZWQtc2hhZG93LnBuZyc7XG5pbXBvcnQgd2hpdGVQaW5CbGFja1NoYWRvdyBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2hpdGUtcGluLWJsYWNrLXNoYWRvdy5wbmcnO1xuaW1wb3J0IHllbGxvd0NpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMveWVsbG93LWNpcmNsZS5zdmcnO1xuaW1wb3J0IHBsYW50SWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvZmFjdG9yeS1pY29uLnN2Zyc7XG5pbXBvcnQgZ3JlZW5DaXJjbGVVUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL2dyZWVuLWNpcmNsZS5zdmcnO1xuaW1wb3J0IHB1bXBTdGF0aW9uSWNvblVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvcHVtcC1zdGF0aW9uLWljb24uc3ZnJztcbmltcG9ydCBjb2xsZWN0b3JJY29uIGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9tYXAvcGluLXdhdGVyLnN2Zyc7XG5pbXBvcnQgYnJpZ2h0Qmx1ZUNpcmNsZVVSTCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvYnJpZ2h0LWJsdWUtY2lyY2xlLnN2Zyc7XG5pbXBvcnQgV1dUUEljb25VUkwgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3BvaW50X2ljb25zL1dXVFAtaWNvbi5zdmcnO1xuaW1wb3J0IHdhdGVySWNvbk5vQmFja2dyb3VuZCBmcm9tICcuLi8uLi8uLi9hc3NldHMvcG9pbnRfaWNvbnMvd2F0ZXItbm8tYmFja2dyb3VuZC5zdmcnO1xuaW1wb3J0IHdoaXRlUG9pbnQgZnJvbSAnLi4vLi4vLi4vYXNzZXRzL3doaXRlLXBvaW50LnBuZyc7XG5cbmV4cG9ydCBjb25zdCBpc0NvbGxlY3RvckZvY3VzZWQgPSAocG9pbnQ6IElQb2ludCwgZXZlbnQ6IElFdmVudCkgPT4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50Py5vYnNlcnZhdGlvbnM/Lmxlbmd0aCA9PT0gMSAmJlxuICAgIHBvaW50LmlkID09PSBldmVudC5vYnNlcnZhdGlvbnNbMF0ucG9pbnRfaWRcbiAgKTtcbn07XG5cbi8vIGljb25TaXplOiBbd2lkdGgsIGhlaWdodF0sXG4vLyBJY29uQW5jaG9yOiBbKC1yaWdodCkoK2xlZnQpLCAoLWRvd24pKCt1cCldXG5leHBvcnQgY29uc3QgY3JlYXRlQnViYmxlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBAdHMtaWdub3JlXG4gIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpICE9PSBudWxsICYmXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG1hdGNoSWNvblRvUG9pbnQocG9pbnQpLmZvckVhY2goKGljb246IGFueSkgPT4ge1xuICAgICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgICAgaWNvbjogaWNvbixcbiAgICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgICAgfSkuYWRkVG8obWFwKTtcbiAgICAgIHBvaW50Q3VzdG9tSWNvbi5iaW5kVG9vbHRpcChcbiAgICAgICAgYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWAsXG4gICAgICApO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3RfaWQnXSA9IHBvaW50LmlkO1xuICAgICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gICAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludEhvdmVyZWQnO1xuICAgIH0pO1xuXG4gIGlmIChwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50KSB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbiA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBMLmRpdkljb24oe1xuICAgICAgICBjbGFzc05hbWU6IGBcbiAgICAgICAgICAke1xuICAgICAgICAgICAgcG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+PSAxMDBcbiAgICAgICAgICAgICAgPyAnY2lyY2xlLWV2ZW50cy1hbW91bnQgY2lyY2xlLWV2ZW50cy1hbW91bnQtLXRyaWRpZ2l0J1xuICAgICAgICAgICAgICA6ICdjaXJjbGUtZXZlbnRzLWFtb3VudCdcbiAgICAgICAgICB9IFxuICAgICAgICAgICR7cG9pbnQucmVsYXRlZEV2ZW50c0Ftb3VudCA+IDIgPyAnYWxlcnQtY29sb3InIDogJyd9XG4gICAgICAgICAgICBgLFxuICAgICAgICBodG1sOiBgPHA+JHtwb2ludC5yZWxhdGVkRXZlbnRzQW1vdW50fTwvcD5gLFxuICAgICAgICBpY29uQW5jaG9yOiBbLTUsIDQyXSxcbiAgICAgIH0pLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG5cbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVyJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdJY29uTnVtYmVySG92ZXJlZCc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYW5ob2xlUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgcG9pbnQ6IElQb2ludCxcbiAgbWFwLFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICBsZXQgcG9pbnRJY29uID0gTC5pY29uKHtcbiAgICBpY29uVXJsOiB3aGl0ZVBvaW50LFxuICAgIGljb25TaXplOiBbOSwgOV0sXG4gICAgaWNvbkFuY2hvcjogWzQuNSwgNC41XSxcbiAgfSk7XG4gIGxldCBtYW5ob2xlSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICBpY29uOiBwb2ludEljb24sXG4gICAgcmlzZU9uSG92ZXI6IHRydWUsXG4gIH0pLmFkZFRvKG1hcCk7XG4gIG1hbmhvbGVJY29uLmJpbmRUb29sdGlwKGAke3BvaW50Lmdyb3VwLm5hbWV9ICgke3BvaW50Lmdyb3VwLnNlY3Rvcl9uYW1lfSlgKTtcbiAgbWFuaG9sZUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gIG1hbmhvbGVJY29uWydrYW5kb19vYmplY3QnXSA9ICdQb2ludCc7XG4gIGlmIChob3ZlcmVkKSBtYW5ob2xlSWNvblsna2FuZG9fb2JqZWN0J10gPSAnUG9pbnRIb3ZlcmVkJztcbn07XG5cbmV4cG9ydCBjb25zdCBtYXRjaEljb25Ub1BvaW50ID0gKHBvaW50OiBJUG9pbnQsIGV2ZW50OiBJRXZlbnQpID0+IHtcbiAgc3dpdGNoIChwb2ludC5ncm91cC50eXBlKSB7XG4gICAgY2FzZSAnR3JvdXBzOjpGYWN0b3J5JzpcbiAgICAgIGlmIChjb21iaW5lZEZhY3RvcnlJY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkRmFjdG9yeUljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21iaW5lZEZhY3RvcnlJY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZEZhY3RvcnlJY29uO1xuICAgIGNhc2UgJ0dyb3Vwczo6UHVtcFN0YXRpb24nOlxuICAgICAgaWYgKGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSkge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRQdW1wU3RhdGlvbkljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbWJpbmVkUHVtcFN0YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5lZFB1bXBTdGF0aW9uSWNvbjtcbiAgICBjYXNlICdHcm91cHM6Oldhc3Rld2F0ZXJUcmVhdG1lbnRQbGFudCc6XG4gICAgICBpZiAoY29tYmluZWRXV1RQSWNvbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkpIHtcbiAgICAgICAgICBjb21iaW5lZFdXVFBJY29uLnVuc2hpZnQoc2VsZWN0ZWRCYWNrZ3JvdW5kKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKG1hcmtlckJlbG9uZ3NUb1NvdXJjZShldmVudCwgcG9pbnQpKSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tYmluZWRXV1RQSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZCgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluZWRXV1RQSWNvbjtcblxuICAgIGNhc2UgJ0dyb3Vwczo6Q29sbGVjdG9ycyc6XG4gICAgICBpZiAoaXNDb2xsZWN0b3JGb2N1c2VkKHBvaW50LCBldmVudCkpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogcmVkUGluUmVkU2hhZG93LFxuICAgICAgICAgICAgaWNvblNpemU6IFs2MiwgNjJdLFxuICAgICAgICAgICAgaWNvbkFuY2hvcjogWzMwLCA1Ml0sXG4gICAgICAgICAgfSksXG5cbiAgICAgICAgICBMLmljb24oe1xuICAgICAgICAgICAgaWNvblVybDogd2F0ZXJJY29uTm9CYWNrZ3JvdW5kLFxuICAgICAgICAgICAgaWNvblNpemU6IFs0NiwgNDZdLFxuXG4gICAgICAgICAgICBpY29uQW5jaG9yOiBbMjIsIDQ0XSxcbiAgICAgICAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbWJpbmVkQ29sbGVjdG9yc0ljb247XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzdGFuZGFyZEJhY2tncm91bmQgPSAoXG4gIHNlY29uZGFyeTogYm9vbGVhbiA9IGZhbHNlLFxuICB0aGlyZDogYm9vbGVhbiA9IGZhbHNlLFxuKSA9PiB7XG4gIHJldHVybiBMLmljb24oe1xuICAgIGljb25Vcmw6IHdoaXRlUGluQmxhY2tTaGFkb3csXG4gICAgaWNvblNpemU6IHNlY29uZGFyeSA/IFsyMCwgMjBdIDogWzQzLCA0Nl0sXG4gICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5ICYmIHRoaXJkID8gWy0yLCAxOV0gOiBzZWNvbmRhcnkgPyBbLTIsIDQ0XSA6IFsyMCwgNDJdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tYmluZWRGYWN0b3J5SWNvbiA9IFtcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiB5ZWxsb3dDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFsyNSwgMjRdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IHBsYW50SWNvblVSTCxcbiAgICBpY29uU2l6ZTogWzE1LCAxNV0sXG4gICAgaWNvbkFuY2hvcjogWzUsIDMwXSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuXTtcblxuZXhwb3J0IGNvbnN0IGNvbWJpbmVkUHVtcFN0YXRpb25JY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGdyZWVuQ2lyY2xlVVJMLFxuICAgIGljb25TaXplOiBbMjUsIDI0XSxcbiAgICBpY29uQW5jaG9yOiBbMTAuNywgMzMuN10sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbiAgTC5pY29uKHtcbiAgICBpY29uVXJsOiBwdW1wU3RhdGlvbkljb25VUkwsXG4gICAgaWNvblNpemU6IFsyMCwgMjBdLFxuICAgIGljb25BbmNob3I6IFs3LCAzMl0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZENvbGxlY3RvcnNJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGNvbGxlY3Rvckljb24sXG4gICAgaWNvblNpemU6IFs0NSwgNDVdLFxuXG4gICAgaWNvbkFuY2hvcjogWzI1LCA1MF0sXG4gICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICB9KSxcbl07XG5cbmV4cG9ydCBjb25zdCBjb21iaW5lZFdXVFBJY29uID0gW1xuICBMLmljb24oe1xuICAgIGljb25Vcmw6IGJyaWdodEJsdWVDaXJjbGVVUkwsXG4gICAgaWNvblNpemU6IFsyNSwgMjVdLFxuICAgIGljb25BbmNob3I6IFsxMC43LCAzMy43XSxcbiAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gIH0pLFxuICBMLmljb24oe1xuICAgIGljb25Vcmw6IFdXVFBJY29uVVJMLFxuICAgIGljb25TaXplOiBbMjAsIDIwXSxcbiAgICBpY29uQW5jaG9yOiBbOCwgMzFdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSksXG5dO1xuXG5leHBvcnQgY29uc3Qgc2VsZWN0ZWRCYWNrZ3JvdW5kID0gKCkgPT4ge1xuICByZXR1cm4gTC5pY29uKHtcbiAgICBpY29uVXJsOiByZWRQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFs2NywgNzBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYmVsb25nc1RvU291cmNlQmFja2dyb3VuZCA9ICgpID0+IHtcbiAgcmV0dXJuIEwuaWNvbih7XG4gICAgaWNvblVybDogd2hpdGVQaW5SZWRTaGFkb3csXG4gICAgaWNvblNpemU6IFs2NywgNzBdLFxuICAgIGljb25BbmNob3I6IFszMiwgNTRdLFxuICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UgPSAoZXZlbnQ6IElFdmVudCwgcG9pbnQ6IElQb2ludCkgPT4ge1xuICBsZXQgc291cmNlO1xuXG4gIGlmIChldmVudCAhPT0gbnVsbCAmJiBldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgc291cmNlID0gZXZlbnQuc291cmNlcy5maWx0ZXIoKHNvdXJjZSkgPT4gc291cmNlLnBvaW50X2lkID09PSBwb2ludC5pZClbMF07XG4gIH1cblxuICByZXR1cm4gZXZlbnQgIT09IG51bGwgJiYgc291cmNlICYmIGV2ZW50LnNlbGVjdGVkX3NvdXJjZSA9PT0gc291cmNlLnBvaW50X2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IG1hcmtlckJlbG9uZ3NUb1NvdXJjZSA9IChldmVudDogSUV2ZW50LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChldmVudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gIHJldHVybiAoXG4gICAgZXZlbnQgIT09IG51bGwgJiZcbiAgICBldmVudC5zb3VyY2VzLmZpbHRlcigoc291cmNlKSA9PiBzb3VyY2UucG9pbnRfaWQgPT09IHBvaW50LmlkKVswXVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50ID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIHNlY29uZGFyeUljb246IGJvb2xlYW4sXG4gIG1hcCxcbiAgcG9pbnQ6IElQb2ludCxcbiAgZXZlbnQ6IElFdmVudCxcbiAgaG92ZXJlZD8sXG4pID0+IHtcbiAgLy8gaWNvblNpemU6IFt3aWR0aCwgaGVpZ2h0XSxcbiAgLy8gSWNvbiBBbmNob3I6IFsoLXJpZ2h0KSgrbGVmdCksICgtZG93bikoK3VwKV1cbiAgbGV0IHNhbXBsaW5nSWNvbiA9IFtcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogYmx1ZUNpcmNsZVVSTCxcbiAgICAgIGljb25TaXplOiBzZWNvbmRhcnlJY29uID8gWzEwLCAxMF0gOiBbMjUsIDI0XSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTcsIDE1XSA6IFsxMC43LCAzMy43XSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgICBMLmljb24oe1xuICAgICAgaWNvblVybDogc2FtcGxpbmdJY29uVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbNywgN10gOiBbMTMsIDE1XSxcbiAgICAgIGljb25BbmNob3I6IHNlY29uZGFyeUljb24gPyBbLTgsIDEzXSA6IFs1LCAzMF0sXG4gICAgICBwb3B1cEFuY2hvcjogWzAsIC0zMF0sXG4gICAgfSksXG4gIF07XG5cbiAgaWYgKG1hcmtlckJlbG9uZ3NUb1NlbGVjdGVkU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChzZWxlY3RlZEJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSBpZiAobWFya2VyQmVsb25nc1RvU291cmNlKGV2ZW50LCBwb2ludCkgJiYgIXNlY29uZGFyeUljb24pIHtcbiAgICBzYW1wbGluZ0ljb24udW5zaGlmdChiZWxvbmdzVG9Tb3VyY2VCYWNrZ3JvdW5kKCkpO1xuICB9IGVsc2Uge1xuICAgIHNhbXBsaW5nSWNvbi51bnNoaWZ0KHN0YW5kYXJkQmFja2dyb3VuZChzZWNvbmRhcnlJY29uLCB0cnVlKSk7XG4gIH1cblxuICBzYW1wbGluZ0ljb24uZm9yRWFjaCgoaWNvbikgPT4ge1xuICAgIGxldCBwb2ludEN1c3RvbUljb246IGFueSA9IEwubWFya2VyKG1hcmtlckxvY2F0aW9uLCB7XG4gICAgICBpY29uOiBpY29uLFxuICAgICAgcmlzZU9uSG92ZXI6IGZhbHNlLFxuICAgIH0pLmFkZFRvKG1hcCk7XG4gICAgcG9pbnRDdXN0b21JY29uLmJpbmRUb29sdGlwKFxuICAgICAgYCR7cG9pbnQuZ3JvdXAubmFtZX0gKCR7cG9pbnQuZ3JvdXAuc2VjdG9yX25hbWV9KWAsXG4gICAgKTtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdF9pZCddID0gcG9pbnQuaWQ7XG4gICAgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdTYW1wbGluZyc7XG4gICAgaWYgKGhvdmVyZWQpIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0J10gPSAnU2FtcGxpbmdIb3ZlcmVkJztcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlT2JzZXJ2YXRpb25JY29uUG9pbnQgPSAoXG4gIG1hcmtlckxvY2F0aW9uOiBMYXRMbmdUdXBsZSxcbiAgc2Vjb25kYXJ5SWNvbjogYm9vbGVhbixcbiAgbWFwLFxuICBwb2ludDogSVBvaW50LFxuICBldmVudDogSUV2ZW50LFxuICBob3ZlcmVkPyxcbikgPT4ge1xuICAvLyBpY29uU2l6ZTogW3dpZHRoLCBoZWlnaHRdLFxuICAvLyBJY29uIEFuY2hvcjogWygtcmlnaHQpKCtsZWZ0KSwgKC1kb3duKSgrdXApXVxuICBsZXQgb2JzZXJ2YXRpb25JY29uID0gW1xuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBwaW5rQ2lyY2xlVVJMLFxuICAgICAgaWNvblNpemU6IHNlY29uZGFyeUljb24gPyBbMTAsIDEwXSA6IFsyNSwgMjRdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstNywgNDBdIDogWzEwLjcsIDMzLjddLFxuICAgICAgcG9wdXBBbmNob3I6IFswLCAtMzBdLFxuICAgIH0pLFxuICAgIEwuaWNvbih7XG4gICAgICBpY29uVXJsOiBvYnNlcnZhdGlvbkljb25VUkwsXG4gICAgICBpY29uU2l6ZTogc2Vjb25kYXJ5SWNvbiA/IFs3LCA3XSA6IFsxMywgMTVdLFxuICAgICAgaWNvbkFuY2hvcjogc2Vjb25kYXJ5SWNvbiA/IFstOCwgMzhdIDogWzUsIDMwXSxcbiAgICAgIHBvcHVwQW5jaG9yOiBbMCwgLTMwXSxcbiAgICB9KSxcbiAgXTtcblxuICBpZiAobWFya2VyQmVsb25nc1RvU2VsZWN0ZWRTb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KHNlbGVjdGVkQmFja2dyb3VuZCgpKTtcbiAgfSBlbHNlIGlmIChtYXJrZXJCZWxvbmdzVG9Tb3VyY2UoZXZlbnQsIHBvaW50KSAmJiAhc2Vjb25kYXJ5SWNvbikge1xuICAgIG9ic2VydmF0aW9uSWNvbi51bnNoaWZ0KGJlbG9uZ3NUb1NvdXJjZUJhY2tncm91bmQoKSk7XG4gIH0gZWxzZSB7XG4gICAgb2JzZXJ2YXRpb25JY29uLnVuc2hpZnQoc3RhbmRhcmRCYWNrZ3JvdW5kKHNlY29uZGFyeUljb24pKTtcbiAgfVxuXG4gIG9ic2VydmF0aW9uSWNvbi5mb3JFYWNoKChpY29uKSA9PiB7XG4gICAgbGV0IHBvaW50Q3VzdG9tSWNvbjogYW55ID0gTC5tYXJrZXIobWFya2VyTG9jYXRpb24sIHtcbiAgICAgIGljb246IGljb24sXG4gICAgICByaXNlT25Ib3ZlcjogZmFsc2UsXG4gICAgfSkuYWRkVG8obWFwKTtcbiAgICBwb2ludEN1c3RvbUljb24uYmluZFRvb2x0aXAoXG4gICAgICBgJHtwb2ludC5ncm91cC5uYW1lfSAoJHtwb2ludC5ncm91cC5zZWN0b3JfbmFtZX0pYCxcbiAgICApO1xuICAgIHBvaW50Q3VzdG9tSWNvblsna2FuZG9fb2JqZWN0X2lkJ10gPSBwb2ludC5pZDtcbiAgICBwb2ludEN1c3RvbUljb25bJ2thbmRvX29iamVjdCddID0gJ09ic2VydmF0aW9uJztcbiAgICBpZiAoaG92ZXJlZCkgcG9pbnRDdXN0b21JY29uWydrYW5kb19vYmplY3QnXSA9ICdPYnNlcnZhdGlvbkhvdmVyZWQnO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTYW1wbGluZ0ljb25zID0gKFxuICBtYXJrZXJMb2NhdGlvbjogTGF0TG5nVHVwbGUsXG4gIGV2ZW50OiBJRXZlbnQsXG4gIHBvaW50OiBJUG9pbnQsXG4gIG1hcCxcbiAgaG92ZXJlZCxcbikgPT4ge1xuICBsZXQgc2FtcGxlZFBvaW50SWRzID0gZXZlbnQuc2FtcGxpbmdzLm1hcCgocykgPT4gcy5wb2ludF9pZCk7XG4gIGlmIChcbiAgICBldmVudCAhPT0gbnVsbCAmJlxuICAgIGV2ZW50LnNhbXBsaW5ncy5sZW5ndGggIT09IDAgJiZcbiAgICBzYW1wbGVkUG9pbnRJZHMuaW5jbHVkZXMocG9pbnQuaWQpXG4gICkge1xuICAgIGNyZWF0ZVNhbXBsaW5nSWNvblBvaW50KFxuICAgICAgbWFya2VyTG9jYXRpb24sXG4gICAgICBtYXRjaEljb25Ub1BvaW50KHBvaW50LCBldmVudCkgIT09IG51bGwsXG4gICAgICBtYXAsXG4gICAgICBwb2ludCxcbiAgICAgIGV2ZW50LFxuICAgICAgaG92ZXJlZCxcbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcG9wdXBDb250ZW50ID0gKG9iczogYW55LCBwb2ludDogSVBvaW50KSA9PiB7XG4gIGlmIChvYnMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LXBvcHVwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWdyYXBoLWljb24gcG9wdXAtZ3JhcGgtaWNvbi0ke3BvaW50LmlkfVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7R3JhcGhJY29ufVwiLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zaXRlLW5hbWVcIj48Yj4ke3BvaW50Lmdyb3VwLm5hbWV9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxoci8+XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2VjdG9yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1wb3B1cFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1ncmFwaC1pY29uIHBvcHVwLWdyYXBoLWljb24tJHtvYnMuaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtHcmFwaEljb259XCIvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NpdGUtbmFtZVwiPjxiPiR7XG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnQuZ3JvdXAubmFtZVxuICAgICAgICAgICAgICAgICAgICB9PC9iPjwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuc2V2ZXJpdHlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKX08L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIiR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwb3B1cC1jb250ZW50X19zZXZlcml0eS0tJyArIG9icy5zZXZlcml0eVxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiIGNsYXNzPVwicG9wdXAtY29udGVudF9fc2V2ZXJpdHktYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3LnNldmVyaXRpZXMuJHtvYnMuc2V2ZXJpdHl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPGhyIGNsYXNzPVwicG9wdXAtY29udGVudF9faHJcIiAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jb250ZW50X19kaXNjaGFyZ2UtdGltZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInBvcHVwLWNvbnRlbnRfX3NldmVyaXR5LXBcIj4ke2kxOG4udChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBldmVudHNfb3ZlcnZpZXcuZmlyc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwiZmlyc3Qtc2Vlbi1wb3B1cFwiPjwvYj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwb3B1cC1jb250ZW50X19zZXZlcml0eS1wXCI+JHtpMThuLnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZXZlbnRzX292ZXJ2aWV3Lmxhc3Rfc2VlbmAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKX06PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxiIGlkPVwibGFzdC1zZWVuLXBvcHVwXCI+PC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuICB9XG59O1xuIl19