@pie-lib/graphing 2.34.3-next.2 → 2.34.4-next.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.
- package/CHANGELOG.md +6 -76
- package/lib/__tests__/graph-with-controls.test.js +226 -0
- package/lib/__tests__/graph.test.js +187 -0
- package/lib/__tests__/grid.test.js +29 -0
- package/lib/__tests__/labels.test.js +61 -0
- package/lib/__tests__/mark-label.test.js +133 -0
- package/lib/__tests__/toggle-bar.test.js +150 -0
- package/lib/__tests__/tool-menu.test.js +101 -0
- package/lib/__tests__/undo-redo.test.js +31 -0
- package/lib/__tests__/use-debounce.test.js +24 -0
- package/lib/__tests__/utils.js +70 -0
- package/lib/__tests__/utils.test.js +123 -0
- package/lib/axis/__tests__/arrow.test.js +60 -0
- package/lib/axis/__tests__/axes.test.js +195 -0
- package/lib/axis/arrow.js +20 -56
- package/lib/axis/arrow.js.map +1 -1
- package/lib/axis/axes.js +107 -195
- package/lib/axis/axes.js.map +1 -1
- package/lib/axis/index.js +2 -7
- package/lib/axis/index.js.map +1 -1
- package/lib/bg.js +22 -50
- package/lib/bg.js.map +1 -1
- package/lib/container/actions.js +3 -9
- package/lib/container/actions.js.map +1 -1
- package/lib/container/index.js +15 -60
- package/lib/container/index.js.map +1 -1
- package/lib/container/marks.js +2 -7
- package/lib/container/marks.js.map +1 -1
- package/lib/container/middleware.js +3 -9
- package/lib/container/middleware.js.map +1 -1
- package/lib/container/reducer.js +2 -9
- package/lib/container/reducer.js.map +1 -1
- package/lib/coordinates-label.js +25 -55
- package/lib/coordinates-label.js.map +1 -1
- package/lib/graph-with-controls.js +121 -185
- package/lib/graph-with-controls.js.map +1 -1
- package/lib/graph.js +60 -117
- package/lib/graph.js.map +1 -1
- package/lib/grid-setup.js +169 -225
- package/lib/grid-setup.js.map +1 -1
- package/lib/grid.js +30 -75
- package/lib/grid.js.map +1 -1
- package/lib/index.js +2 -14
- package/lib/index.js.map +1 -1
- package/lib/key-legend.js +41 -86
- package/lib/key-legend.js.map +1 -1
- package/lib/label-svg-icon.js +2 -8
- package/lib/label-svg-icon.js.map +1 -1
- package/lib/labels.js +66 -122
- package/lib/labels.js.map +1 -1
- package/lib/mark-label.js +121 -164
- package/lib/mark-label.js.map +1 -1
- package/lib/toggle-bar.js +156 -244
- package/lib/toggle-bar.js.map +1 -1
- package/lib/tool-menu.js +17 -51
- package/lib/tool-menu.js.map +1 -1
- package/lib/tools/absolute/__tests__/component.test.js +67 -0
- package/lib/tools/absolute/component.js +5 -11
- package/lib/tools/absolute/component.js.map +1 -1
- package/lib/tools/absolute/index.js +4 -17
- package/lib/tools/absolute/index.js.map +1 -1
- package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
- package/lib/tools/circle/__tests__/component.test.js +68 -0
- package/lib/tools/circle/bg-circle.js +43 -93
- package/lib/tools/circle/bg-circle.js.map +1 -1
- package/lib/tools/circle/component.js +79 -166
- package/lib/tools/circle/component.js.map +1 -1
- package/lib/tools/circle/index.js +4 -14
- package/lib/tools/circle/index.js.map +1 -1
- package/lib/tools/exponential/__tests__/component.test.js +66 -0
- package/lib/tools/exponential/component.js +5 -11
- package/lib/tools/exponential/component.js.map +1 -1
- package/lib/tools/exponential/index.js +4 -19
- package/lib/tools/exponential/index.js.map +1 -1
- package/lib/tools/index.js +4 -17
- package/lib/tools/index.js.map +1 -1
- package/lib/tools/line/__tests__/component.test.js +45 -0
- package/lib/tools/line/component.js +28 -49
- package/lib/tools/line/component.js.map +1 -1
- package/lib/tools/line/index.js +2 -7
- package/lib/tools/line/index.js.map +1 -1
- package/lib/tools/parabola/__tests__/component.test.js +66 -0
- package/lib/tools/parabola/component.js +5 -11
- package/lib/tools/parabola/component.js.map +1 -1
- package/lib/tools/parabola/index.js +4 -17
- package/lib/tools/parabola/index.js.map +1 -1
- package/lib/tools/point/__tests__/component.test.js +50 -0
- package/lib/tools/point/component.js +25 -72
- package/lib/tools/point/component.js.map +1 -1
- package/lib/tools/point/index.js +4 -12
- package/lib/tools/point/index.js.map +1 -1
- package/lib/tools/polygon/__tests__/component.test.js +85 -0
- package/lib/tools/polygon/__tests__/index.test.js +92 -0
- package/lib/tools/polygon/__tests__/line.test.js +29 -0
- package/lib/tools/polygon/__tests__/polygon.test.js +59 -0
- package/lib/tools/polygon/component.js +84 -185
- package/lib/tools/polygon/component.js.map +1 -1
- package/lib/tools/polygon/index.js +7 -24
- package/lib/tools/polygon/index.js.map +1 -1
- package/lib/tools/polygon/line.js +49 -92
- package/lib/tools/polygon/line.js.map +1 -1
- package/lib/tools/polygon/polygon.js +66 -99
- package/lib/tools/polygon/polygon.js.map +1 -1
- package/lib/tools/ray/__tests__/component.test.js +35 -0
- package/lib/tools/ray/component.js +42 -61
- package/lib/tools/ray/component.js.map +1 -1
- package/lib/tools/ray/index.js +2 -7
- package/lib/tools/ray/index.js.map +1 -1
- package/lib/tools/segment/__tests__/component.test.js +35 -0
- package/lib/tools/segment/component.js +26 -44
- package/lib/tools/segment/component.js.map +1 -1
- package/lib/tools/segment/index.js +2 -7
- package/lib/tools/segment/index.js.map +1 -1
- package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
- package/lib/tools/shared/arrow-head.js +70 -29
- package/lib/tools/shared/arrow-head.js.map +1 -1
- package/lib/tools/shared/icons/CorrectSVG.js +13 -9
- package/lib/tools/shared/icons/CorrectSVG.js.map +1 -1
- package/lib/tools/shared/icons/IncorrectSVG.js +13 -9
- package/lib/tools/shared/icons/IncorrectSVG.js.map +1 -1
- package/lib/tools/shared/icons/MissingSVG.js +13 -9
- package/lib/tools/shared/icons/MissingSVG.js.map +1 -1
- package/lib/tools/shared/line/__tests__/index.test.js +124 -0
- package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
- package/lib/tools/shared/line/__tests__/with-root-edge.test.js +91 -0
- package/lib/tools/shared/line/index.js +141 -194
- package/lib/tools/shared/line/index.js.map +1 -1
- package/lib/tools/shared/line/line-path.js +71 -102
- package/lib/tools/shared/line/line-path.js.map +1 -1
- package/lib/tools/shared/line/with-root-edge.js +23 -57
- package/lib/tools/shared/line/with-root-edge.js.map +1 -1
- package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
- package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
- package/lib/tools/shared/point/arrow-point.js +22 -63
- package/lib/tools/shared/point/arrow-point.js.map +1 -1
- package/lib/tools/shared/point/arrow.js +24 -53
- package/lib/tools/shared/point/arrow.js.map +1 -1
- package/lib/tools/shared/point/base-point.js +55 -73
- package/lib/tools/shared/point/base-point.js.map +1 -1
- package/lib/tools/shared/point/index.js +23 -58
- package/lib/tools/shared/point/index.js.map +1 -1
- package/lib/tools/shared/styles.js +11 -39
- package/lib/tools/shared/styles.js.map +1 -1
- package/lib/tools/shared/types.js +3 -10
- package/lib/tools/shared/types.js.map +1 -1
- package/lib/tools/sine/__tests__/component.test.js +72 -0
- package/lib/tools/sine/component.js +9 -20
- package/lib/tools/sine/component.js.map +1 -1
- package/lib/tools/sine/index.js +4 -17
- package/lib/tools/sine/index.js.map +1 -1
- package/lib/tools/vector/__tests__/component.test.js +32 -0
- package/lib/tools/vector/component.js +25 -45
- package/lib/tools/vector/component.js.map +1 -1
- package/lib/tools/vector/index.js +2 -7
- package/lib/tools/vector/index.js.map +1 -1
- package/lib/undo-redo.js +30 -70
- package/lib/undo-redo.js.map +1 -1
- package/lib/use-debounce.js +5 -12
- package/lib/use-debounce.js.map +1 -1
- package/lib/utils.js +52 -129
- package/lib/utils.js.map +1 -1
- package/package.json +25 -29
- package/src/__tests__/graph-with-controls.test.jsx +28 -11
- package/src/__tests__/graph.test.jsx +104 -168
- package/src/__tests__/grid.test.jsx +8 -6
- package/src/__tests__/labels.test.jsx +25 -8
- package/src/__tests__/mark-label.test.jsx +12 -17
- package/src/__tests__/toggle-bar.test.jsx +92 -17
- package/src/__tests__/tool-menu.test.jsx +61 -12
- package/src/__tests__/undo-redo.test.jsx +7 -8
- package/src/__tests__/utils.js +3 -0
- package/src/axis/__tests__/arrow.test.jsx +16 -17
- package/src/axis/__tests__/axes.test.jsx +118 -122
- package/src/axis/arrow.jsx +7 -12
- package/src/axis/axes.jsx +45 -55
- package/src/coordinates-label.jsx +14 -18
- package/src/graph-with-controls.jsx +52 -59
- package/src/grid-setup.jsx +210 -206
- package/src/grid.jsx +2 -4
- package/src/key-legend.jsx +52 -56
- package/src/labels.jsx +23 -30
- package/src/mark-label.jsx +92 -81
- package/src/toggle-bar.jsx +135 -164
- package/src/tool-menu.jsx +1 -1
- package/src/tools/circle/__tests__/bg-circle.test.jsx +7 -9
- package/src/tools/circle/__tests__/component.test.jsx +17 -189
- package/src/tools/circle/bg-circle.jsx +20 -28
- package/src/tools/circle/component.jsx +28 -63
- package/src/tools/line/__tests__/component.test.jsx +7 -7
- package/src/tools/line/component.jsx +22 -15
- package/src/tools/point/__tests__/component.test.jsx +18 -43
- package/src/tools/point/component.jsx +1 -1
- package/src/tools/polygon/__tests__/component.test.jsx +18 -162
- package/src/tools/polygon/__tests__/line.test.jsx +7 -10
- package/src/tools/polygon/__tests__/polygon.test.jsx +7 -8
- package/src/tools/polygon/component.jsx +3 -4
- package/src/tools/polygon/line.jsx +30 -33
- package/src/tools/polygon/polygon.jsx +52 -45
- package/src/tools/ray/__tests__/component.test.jsx +7 -8
- package/src/tools/ray/component.jsx +38 -25
- package/src/tools/segment/__tests__/component.test.jsx +7 -8
- package/src/tools/segment/component.jsx +19 -18
- package/src/tools/shared/__tests__/arrow-head.test.jsx +14 -17
- package/src/tools/shared/arrow-head.jsx +60 -7
- package/src/tools/shared/icons/CorrectSVG.jsx +10 -0
- package/src/tools/shared/icons/IncorrectSVG.jsx +10 -0
- package/src/tools/shared/icons/MissingSVG.jsx +10 -0
- package/src/tools/shared/line/__tests__/index.test.jsx +19 -165
- package/src/tools/shared/line/__tests__/line-path.test.jsx +8 -8
- package/src/tools/shared/line/__tests__/with-root-edge.test.jsx +22 -22
- package/src/tools/shared/line/index.jsx +52 -7
- package/src/tools/shared/line/line-path.jsx +55 -59
- package/src/tools/shared/line/with-root-edge.jsx +1 -1
- package/src/tools/shared/point/__tests__/arrow-point.test.jsx +15 -11
- package/src/tools/shared/point/__tests__/base-point.test.jsx +14 -11
- package/src/tools/shared/point/arrow-point.jsx +10 -24
- package/src/tools/shared/point/arrow.jsx +5 -11
- package/src/tools/shared/point/base-point.jsx +42 -19
- package/src/tools/shared/point/index.jsx +27 -44
- package/src/tools/vector/__tests__/component.test.jsx +7 -8
- package/src/tools/vector/component.jsx +11 -16
- package/src/undo-redo.jsx +19 -21
- package/esm/index.css +0 -847
- package/esm/index.js +0 -239949
- package/esm/index.js.map +0 -1
- package/esm/package.json +0 -3
- package/src/__tests__/__snapshots__/graph-with-controls.test.jsx.snap +0 -237
- package/src/__tests__/__snapshots__/graph.test.jsx.snap +0 -211
- package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -54
- package/src/__tests__/__snapshots__/labels.test.jsx.snap +0 -30
- package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -45
- package/src/__tests__/__snapshots__/toggle-bar.test.jsx.snap +0 -7
- package/src/__tests__/__snapshots__/tool-menu.test.jsx.snap +0 -13
- package/src/__tests__/__snapshots__/undo-redo.test.jsx.snap +0 -14
- package/src/axis/__tests__/__snapshots__/arrow.test.jsx.snap +0 -33
- package/src/axis/__tests__/__snapshots__/axes.test.jsx.snap +0 -122
- package/src/tools/circle/__tests__/__snapshots__/bg-circle.test.jsx.snap +0 -46
- package/src/tools/circle/__tests__/__snapshots__/component.test.jsx.snap +0 -293
- package/src/tools/line/__tests__/__snapshots__/component.test.jsx.snap +0 -20
- package/src/tools/point/__tests__/__snapshots__/component.test.jsx.snap +0 -40
- package/src/tools/polygon/__tests__/__snapshots__/component.test.jsx.snap +0 -415
- package/src/tools/polygon/__tests__/__snapshots__/line.test.jsx.snap +0 -45
- package/src/tools/polygon/__tests__/__snapshots__/polygon.test.jsx.snap +0 -52
- package/src/tools/ray/__tests__/__snapshots__/component.test.jsx.snap +0 -23
- package/src/tools/segment/__tests__/__snapshots__/component.test.jsx.snap +0 -14
- package/src/tools/shared/__tests__/__snapshots__/arrow-head.test.jsx.snap +0 -27
- package/src/tools/shared/line/__tests__/__snapshots__/index.test.jsx.snap +0 -360
- package/src/tools/shared/line/__tests__/__snapshots__/line-path.test.jsx.snap +0 -58
- package/src/tools/shared/line/__tests__/__snapshots__/with-root-edge.test.jsx.snap +0 -63
- package/src/tools/shared/point/__tests__/__snapshots__/arrow-point.test.jsx.snap +0 -56
- package/src/tools/shared/point/__tests__/__snapshots__/base-point.test.jsx.snap +0 -44
- package/src/tools/vector/__tests__/__snapshots__/component.test.jsx.snap +0 -12
package/lib/axis/axes.js
CHANGED
|
@@ -1,59 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.sharedValues = exports.firstNegativeValue = exports["default"] = exports.RawYAxis = exports.RawXAxis = exports.AxisPropTypes = void 0;
|
|
9
|
-
|
|
10
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
-
|
|
12
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
13
|
-
|
|
14
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
-
|
|
16
9
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
17
|
-
|
|
18
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
11
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
12
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
26
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
27
|
-
|
|
28
15
|
var _react = _interopRequireDefault(require("react"));
|
|
29
|
-
|
|
30
|
-
var _axis = require("@vx/axis");
|
|
31
|
-
|
|
16
|
+
var _axis = require("@visx/axis");
|
|
32
17
|
var _plot = require("@pie-lib/plot");
|
|
33
|
-
|
|
34
18
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
35
|
-
|
|
36
19
|
var _arrow = _interopRequireDefault(require("./arrow"));
|
|
37
|
-
|
|
38
|
-
var _core = require("@material-ui/core");
|
|
39
|
-
|
|
20
|
+
var _styles = require("@mui/material/styles");
|
|
40
21
|
var _utils = require("../utils");
|
|
41
|
-
|
|
42
22
|
var _renderUi = require("@pie-lib/render-ui");
|
|
43
|
-
|
|
44
|
-
function
|
|
45
|
-
|
|
46
|
-
function
|
|
47
|
-
|
|
48
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
49
|
-
|
|
50
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
51
|
-
|
|
52
|
-
var AxisPropTypes = {
|
|
23
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
25
|
+
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
26
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
27
|
+
var AxisPropTypes = exports.AxisPropTypes = {
|
|
53
28
|
includeArrows: _propTypes["default"].object,
|
|
54
29
|
graphProps: _propTypes["default"].object
|
|
55
30
|
};
|
|
56
|
-
exports.AxisPropTypes = AxisPropTypes;
|
|
57
31
|
var AxisDefaultProps = {
|
|
58
32
|
includeArrows: {
|
|
59
33
|
left: true,
|
|
@@ -62,191 +36,157 @@ var AxisDefaultProps = {
|
|
|
62
36
|
down: true
|
|
63
37
|
}
|
|
64
38
|
};
|
|
65
|
-
|
|
66
|
-
var axisStyles = function axisStyles(theme) {
|
|
39
|
+
var StyledArrow = (0, _styles.styled)(_arrow["default"])(function () {
|
|
67
40
|
return {
|
|
68
|
-
|
|
41
|
+
fill: _renderUi.color.defaults.PRIMARY
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
var StyledLabel = (0, _styles.styled)('div')(function (_ref) {
|
|
45
|
+
var theme = _ref.theme;
|
|
46
|
+
return {
|
|
47
|
+
fontSize: theme.typography.fontSize
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
var StyledAxisLabelHolder = (0, _styles.styled)('div')(function (_ref2) {
|
|
51
|
+
var theme = _ref2.theme;
|
|
52
|
+
return {
|
|
53
|
+
padding: 0,
|
|
54
|
+
margin: 0,
|
|
55
|
+
textAlign: 'center',
|
|
56
|
+
'* > *': {
|
|
57
|
+
margin: 0,
|
|
58
|
+
padding: 0
|
|
59
|
+
},
|
|
60
|
+
fontSize: theme.typography.fontSize
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
var StyledAxesGroup = (0, _styles.styled)('g')(function () {
|
|
64
|
+
return {
|
|
65
|
+
'& .visx-axis-line': {
|
|
69
66
|
stroke: _renderUi.color.defaults.PRIMARY,
|
|
70
67
|
strokeWidth: 3
|
|
71
68
|
},
|
|
72
|
-
|
|
73
|
-
fill: _renderUi.color.defaults.PRIMARY
|
|
74
|
-
},
|
|
75
|
-
tick: {
|
|
69
|
+
'& .visx-axis-tick': {
|
|
76
70
|
fill: _renderUi.color.defaults.PRIMARY,
|
|
77
|
-
'&
|
|
71
|
+
'& line': {
|
|
78
72
|
stroke: _renderUi.color.defaults.PRIMARY
|
|
79
73
|
}
|
|
80
|
-
},
|
|
81
|
-
labelFontSize: {
|
|
82
|
-
fontSize: theme.typography.fontSize
|
|
83
|
-
},
|
|
84
|
-
axisLabelHolder: {
|
|
85
|
-
padding: 0,
|
|
86
|
-
margin: 0,
|
|
87
|
-
textAlign: 'center',
|
|
88
|
-
'* > *': {
|
|
89
|
-
margin: 0,
|
|
90
|
-
padding: 0
|
|
91
|
-
},
|
|
92
|
-
fontSize: theme.typography.fontSize
|
|
93
74
|
}
|
|
94
75
|
};
|
|
95
|
-
};
|
|
96
|
-
|
|
76
|
+
});
|
|
97
77
|
var tickLabelStyles = {
|
|
98
78
|
fontFamily: 'Roboto',
|
|
99
79
|
fontSize: '14px',
|
|
100
80
|
cursor: 'inherit'
|
|
101
81
|
};
|
|
102
|
-
|
|
103
|
-
var sharedValues = function sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy) {
|
|
82
|
+
var sharedValues = exports.sharedValues = function sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy) {
|
|
104
83
|
var result = [];
|
|
105
|
-
|
|
106
84
|
if (firstNegativeX === firstNegativeY && distanceFromOriginToFirstNegativeX - deltaAllowance < distanceFromOriginToFirstNegativeY && distanceFromOriginToFirstNegativeY < distanceFromOriginToFirstNegativeX + deltaAllowance && distanceFromOriginToFirstNegativeX - deltaAllowance < dy && dy < distanceFromOriginToFirstNegativeX + deltaAllowance) {
|
|
107
85
|
result.push(firstNegativeX);
|
|
108
86
|
}
|
|
109
|
-
|
|
110
87
|
return result;
|
|
111
88
|
};
|
|
112
|
-
|
|
113
|
-
exports.sharedValues = sharedValues;
|
|
114
|
-
|
|
115
|
-
var firstNegativeValue = function firstNegativeValue(interval) {
|
|
89
|
+
var firstNegativeValue = exports.firstNegativeValue = function firstNegativeValue(interval) {
|
|
116
90
|
return (interval || []).find(function (element) {
|
|
117
91
|
return element < 0;
|
|
118
92
|
});
|
|
119
93
|
};
|
|
120
|
-
|
|
121
|
-
exports.firstNegativeValue = firstNegativeValue;
|
|
122
|
-
|
|
123
|
-
var RawXAxis = /*#__PURE__*/function (_React$Component) {
|
|
124
|
-
(0, _inherits2["default"])(RawXAxis, _React$Component);
|
|
125
|
-
|
|
126
|
-
var _super = _createSuper(RawXAxis);
|
|
127
|
-
|
|
94
|
+
var RawXAxis = exports.RawXAxis = /*#__PURE__*/function (_React$Component) {
|
|
128
95
|
function RawXAxis() {
|
|
129
96
|
(0, _classCallCheck2["default"])(this, RawXAxis);
|
|
130
|
-
return
|
|
97
|
+
return _callSuper(this, RawXAxis, arguments);
|
|
131
98
|
}
|
|
132
|
-
|
|
133
|
-
(0, _createClass2["default"])(RawXAxis, [{
|
|
99
|
+
(0, _inherits2["default"])(RawXAxis, _React$Component);
|
|
100
|
+
return (0, _createClass2["default"])(RawXAxis, [{
|
|
134
101
|
key: "render",
|
|
135
102
|
value: function render() {
|
|
136
103
|
var _this$props = this.props,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
size = _ref.size,
|
|
149
|
-
range = _ref.range; // Having 0 as a number in columnTicksValues does not make 0 to show up
|
|
150
|
-
// so we use this trick, by defining it as a string:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
var tickValues = (domain.labelStep || range.labelStep) && domain.min <= 0 ? ['0'].concat((0, _toConsumableArray2["default"])(columnTicksValues)) : columnTicksValues; // However, the '0' has to be displayed only if other tick labels (y-axis or x-axis) are displayed
|
|
154
|
-
|
|
104
|
+
includeArrows = _this$props.includeArrows,
|
|
105
|
+
graphProps = _this$props.graphProps,
|
|
106
|
+
columnTicksValues = _this$props.columnTicksValues,
|
|
107
|
+
skipValues = _this$props.skipValues,
|
|
108
|
+
distanceFromOriginToFirstNegativeY = _this$props.distanceFromOriginToFirstNegativeY,
|
|
109
|
+
dy = _this$props.dy;
|
|
110
|
+
var _ref3 = graphProps || {},
|
|
111
|
+
scale = _ref3.scale,
|
|
112
|
+
domain = _ref3.domain,
|
|
113
|
+
size = _ref3.size,
|
|
114
|
+
range = _ref3.range;
|
|
155
115
|
var labelProps = function labelProps(label) {
|
|
156
116
|
var y = skipValues && skipValues[0] === label ? distanceFromOriginToFirstNegativeY + 4 : dy;
|
|
157
117
|
return _objectSpread(_objectSpread({}, tickLabelStyles), {}, {
|
|
158
118
|
textAnchor: 'middle',
|
|
159
119
|
y: y,
|
|
160
|
-
dx: label ===
|
|
161
|
-
dy: label ===
|
|
120
|
+
dx: label === 0 ? -10 : 0,
|
|
121
|
+
dy: label === 0 ? -7 : 0
|
|
162
122
|
});
|
|
163
123
|
};
|
|
164
|
-
|
|
165
124
|
var necessaryRows = (0, _utils.countWords)(domain.axisLabel);
|
|
166
125
|
var longestWord = (0, _utils.findLongestWord)(domain.axisLabel);
|
|
167
126
|
var necessaryWidth = (0, _utils.amountToIncreaseWidth)(longestWord) + 2;
|
|
168
|
-
return /*#__PURE__*/_react["default"].createElement(
|
|
169
|
-
axisLineClassName: classes.line,
|
|
127
|
+
return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
|
|
170
128
|
scale: scale.x,
|
|
171
129
|
top: scale.y(0),
|
|
172
130
|
left: 0,
|
|
173
131
|
label: domain.label,
|
|
174
132
|
rangePadding: 8,
|
|
175
|
-
tickClassName: classes.tick,
|
|
176
133
|
tickFormat: function tickFormat(value) {
|
|
177
134
|
return value;
|
|
178
135
|
},
|
|
179
136
|
tickLabelProps: labelProps,
|
|
180
|
-
tickValues:
|
|
181
|
-
|
|
137
|
+
tickValues: columnTicksValues,
|
|
138
|
+
hideZero: !(domain.labelStep || range.labelStep) && domain.min <= 0
|
|
139
|
+
}), includeArrows && includeArrows.left && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
|
|
182
140
|
direction: "left",
|
|
183
141
|
x: domain.min,
|
|
184
142
|
y: 0,
|
|
185
|
-
className: classes.arrow,
|
|
186
143
|
scale: scale
|
|
187
|
-
}), includeArrows && includeArrows.right && /*#__PURE__*/_react["default"].createElement(
|
|
144
|
+
}), includeArrows && includeArrows.right && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
|
|
188
145
|
direction: "right",
|
|
189
146
|
x: domain.max,
|
|
190
147
|
y: 0,
|
|
191
|
-
className: classes.arrow,
|
|
192
148
|
scale: scale
|
|
193
149
|
}), domain.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
|
|
194
150
|
x: size.width + 17,
|
|
195
151
|
y: scale.y(0) - 9,
|
|
196
152
|
width: necessaryWidth,
|
|
197
153
|
height: 20 * necessaryRows
|
|
198
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
154
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledLabel, {
|
|
199
155
|
dangerouslySetInnerHTML: {
|
|
200
156
|
__html: domain.axisLabel
|
|
201
|
-
}
|
|
202
|
-
className: classes.labelFontSize
|
|
157
|
+
}
|
|
203
158
|
})));
|
|
204
159
|
}
|
|
205
160
|
}]);
|
|
206
|
-
return RawXAxis;
|
|
207
161
|
}(_react["default"].Component);
|
|
208
|
-
|
|
209
|
-
exports.RawXAxis = RawXAxis;
|
|
210
162
|
(0, _defineProperty2["default"])(RawXAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
|
|
211
|
-
classes: _propTypes["default"].object,
|
|
212
163
|
graphProps: _plot.types.GraphPropsType.isRequired
|
|
213
164
|
}));
|
|
214
165
|
(0, _defineProperty2["default"])(RawXAxis, "defaultProps", AxisDefaultProps);
|
|
215
|
-
var XAxis =
|
|
216
|
-
|
|
217
|
-
var RawYAxis = /*#__PURE__*/function (_React$Component2) {
|
|
218
|
-
(0, _inherits2["default"])(RawYAxis, _React$Component2);
|
|
219
|
-
|
|
220
|
-
var _super2 = _createSuper(RawYAxis);
|
|
221
|
-
|
|
166
|
+
var XAxis = RawXAxis;
|
|
167
|
+
var RawYAxis = exports.RawYAxis = /*#__PURE__*/function (_React$Component2) {
|
|
222
168
|
function RawYAxis() {
|
|
223
169
|
(0, _classCallCheck2["default"])(this, RawYAxis);
|
|
224
|
-
return
|
|
170
|
+
return _callSuper(this, RawYAxis, arguments);
|
|
225
171
|
}
|
|
226
|
-
|
|
227
|
-
(0, _createClass2["default"])(RawYAxis, [{
|
|
172
|
+
(0, _inherits2["default"])(RawYAxis, _React$Component2);
|
|
173
|
+
return (0, _createClass2["default"])(RawYAxis, [{
|
|
228
174
|
key: "render",
|
|
229
175
|
value: function render() {
|
|
230
176
|
var _this$props2 = this.props,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
range = _ref2.range,
|
|
240
|
-
size = _ref2.size;
|
|
241
|
-
|
|
177
|
+
includeArrows = _this$props2.includeArrows,
|
|
178
|
+
graphProps = _this$props2.graphProps,
|
|
179
|
+
skipValues = _this$props2.skipValues,
|
|
180
|
+
rowTickValues = _this$props2.rowTickValues;
|
|
181
|
+
var _ref4 = graphProps || {},
|
|
182
|
+
scale = _ref4.scale,
|
|
183
|
+
range = _ref4.range,
|
|
184
|
+
size = _ref4.size;
|
|
242
185
|
var necessaryWidth = range.axisLabel ? (0, _utils.amountToIncreaseWidth)(range.axisLabel.length) : 0;
|
|
243
|
-
|
|
244
186
|
var customTickFormat = function customTickFormat(value) {
|
|
245
187
|
return skipValues && skipValues.indexOf(value) >= 0 ? '' : value;
|
|
246
188
|
};
|
|
247
|
-
|
|
248
|
-
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
|
|
249
|
-
axisLineClassName: classes.line,
|
|
189
|
+
return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, /*#__PURE__*/_react["default"].createElement(_axis.Axis, {
|
|
250
190
|
orientation: 'left',
|
|
251
191
|
scale: scale.y,
|
|
252
192
|
top: 0,
|
|
@@ -258,7 +198,6 @@ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
|
|
|
258
198
|
},
|
|
259
199
|
rangePadding: 8,
|
|
260
200
|
tickLength: 10,
|
|
261
|
-
tickClassName: classes.tick,
|
|
262
201
|
tickFormat: customTickFormat,
|
|
263
202
|
tickLabelProps: function tickLabelProps(value) {
|
|
264
203
|
var digits = value.toLocaleString().replace(/[.-]/g, '').length || 1;
|
|
@@ -271,17 +210,15 @@ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
|
|
|
271
210
|
hideZero: true,
|
|
272
211
|
tickTextAnchor: 'bottom',
|
|
273
212
|
tickValues: rowTickValues
|
|
274
|
-
}), includeArrows && includeArrows.down && /*#__PURE__*/_react["default"].createElement(
|
|
213
|
+
}), includeArrows && includeArrows.down && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
|
|
275
214
|
direction: "down",
|
|
276
215
|
x: 0,
|
|
277
216
|
y: range.min,
|
|
278
|
-
className: classes.arrow,
|
|
279
217
|
scale: scale
|
|
280
|
-
}), includeArrows && includeArrows.up && /*#__PURE__*/_react["default"].createElement(
|
|
218
|
+
}), includeArrows && includeArrows.up && /*#__PURE__*/_react["default"].createElement(StyledArrow, {
|
|
281
219
|
direction: "up",
|
|
282
220
|
x: 0,
|
|
283
221
|
y: range.max,
|
|
284
|
-
className: classes.arrow,
|
|
285
222
|
scale: scale
|
|
286
223
|
}), range.axisLabel && /*#__PURE__*/_react["default"].createElement("foreignObject", {
|
|
287
224
|
x: scale.x(0) - necessaryWidth / 2,
|
|
@@ -290,50 +227,35 @@ var RawYAxis = /*#__PURE__*/function (_React$Component2) {
|
|
|
290
227
|
height: "20"
|
|
291
228
|
}, /*#__PURE__*/_react["default"].createElement(_renderUi.Readable, {
|
|
292
229
|
"false": true
|
|
293
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
230
|
+
}, /*#__PURE__*/_react["default"].createElement(StyledAxisLabelHolder, {
|
|
294
231
|
dangerouslySetInnerHTML: {
|
|
295
232
|
__html: range.axisLabel
|
|
296
|
-
}
|
|
297
|
-
className: classes.axisLabelHolder
|
|
233
|
+
}
|
|
298
234
|
}))));
|
|
299
235
|
}
|
|
300
236
|
}]);
|
|
301
|
-
return RawYAxis;
|
|
302
237
|
}(_react["default"].Component);
|
|
303
|
-
|
|
304
|
-
exports.RawYAxis = RawYAxis;
|
|
305
238
|
(0, _defineProperty2["default"])(RawYAxis, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
|
|
306
239
|
graphProps: _plot.types.GraphPropsType.isRequired
|
|
307
240
|
}));
|
|
308
241
|
(0, _defineProperty2["default"])(RawYAxis, "defaultProps", AxisDefaultProps);
|
|
309
|
-
var YAxis =
|
|
310
|
-
|
|
311
|
-
var Axes = /*#__PURE__*/function (_React$Component3) {
|
|
312
|
-
(0, _inherits2["default"])(Axes, _React$Component3);
|
|
313
|
-
|
|
314
|
-
var _super3 = _createSuper(Axes);
|
|
315
|
-
|
|
242
|
+
var YAxis = RawYAxis;
|
|
243
|
+
var Axes = exports["default"] = /*#__PURE__*/function (_React$Component3) {
|
|
316
244
|
function Axes() {
|
|
317
245
|
var _this;
|
|
318
|
-
|
|
319
246
|
(0, _classCallCheck2["default"])(this, Axes);
|
|
320
|
-
|
|
321
247
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
322
248
|
args[_key] = arguments[_key];
|
|
323
249
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "xValues", function () {
|
|
250
|
+
_this = _callSuper(this, Axes, [].concat(args));
|
|
251
|
+
(0, _defineProperty2["default"])(_this, "xValues", function () {
|
|
327
252
|
var graphProps = _this.props.graphProps;
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
domain = _ref3.domain;
|
|
332
|
-
|
|
253
|
+
var _ref5 = graphProps || {},
|
|
254
|
+
scale = _ref5.scale,
|
|
255
|
+
domain = _ref5.domain;
|
|
333
256
|
if (!domain || !scale) {
|
|
334
257
|
return;
|
|
335
258
|
}
|
|
336
|
-
|
|
337
259
|
var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, domain), {}, {
|
|
338
260
|
step: domain.labelStep
|
|
339
261
|
}));
|
|
@@ -344,17 +266,14 @@ var Axes = /*#__PURE__*/function (_React$Component3) {
|
|
|
344
266
|
distanceFromOriginToFirstNegativeX: Math.abs(scale.y(0) - scale.y(negative))
|
|
345
267
|
};
|
|
346
268
|
});
|
|
347
|
-
(0, _defineProperty2["default"])(
|
|
269
|
+
(0, _defineProperty2["default"])(_this, "yValues", function () {
|
|
348
270
|
var graphProps = _this.props.graphProps;
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
range = _ref4.range;
|
|
353
|
-
|
|
271
|
+
var _ref6 = graphProps || {},
|
|
272
|
+
scale = _ref6.scale,
|
|
273
|
+
range = _ref6.range;
|
|
354
274
|
if (!range || !scale) {
|
|
355
275
|
return;
|
|
356
276
|
}
|
|
357
|
-
|
|
358
277
|
var ticks = (0, _utils.getTickValues)(_objectSpread(_objectSpread({}, range), {}, {
|
|
359
278
|
step: range.labelStep
|
|
360
279
|
}));
|
|
@@ -367,31 +286,28 @@ var Axes = /*#__PURE__*/function (_React$Component3) {
|
|
|
367
286
|
});
|
|
368
287
|
return _this;
|
|
369
288
|
}
|
|
370
|
-
|
|
371
|
-
(0, _createClass2["default"])(Axes, [{
|
|
289
|
+
(0, _inherits2["default"])(Axes, _React$Component3);
|
|
290
|
+
return (0, _createClass2["default"])(Axes, [{
|
|
372
291
|
key: "render",
|
|
373
292
|
value: function render() {
|
|
374
293
|
var graphProps = this.props.graphProps;
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
range = _ref5.range;
|
|
379
|
-
|
|
294
|
+
var _ref7 = graphProps || {},
|
|
295
|
+
domain = _ref7.domain,
|
|
296
|
+
range = _ref7.range;
|
|
380
297
|
var _this$xValues = this.xValues(),
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
298
|
+
columnTicksValues = _this$xValues.columnTicksValues,
|
|
299
|
+
firstNegativeX = _this$xValues.firstNegativeX,
|
|
300
|
+
distanceFromOriginToFirstNegativeX = _this$xValues.distanceFromOriginToFirstNegativeX;
|
|
385
301
|
var _this$yValues = this.yValues(),
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
302
|
+
rowTickValues = _this$yValues.rowTickValues,
|
|
303
|
+
firstNegativeY = _this$yValues.firstNegativeY,
|
|
304
|
+
distanceFromOriginToFirstNegativeY = _this$yValues.distanceFromOriginToFirstNegativeY;
|
|
390
305
|
var deltaAllowance = 6;
|
|
391
306
|
var dy = 25;
|
|
392
|
-
var skipValues = sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy);
|
|
307
|
+
var skipValues = sharedValues(firstNegativeX, firstNegativeY, distanceFromOriginToFirstNegativeX, distanceFromOriginToFirstNegativeY, deltaAllowance, dy);
|
|
393
308
|
|
|
394
|
-
|
|
309
|
+
// each axis has to be displayed only if the domain & range include it
|
|
310
|
+
return /*#__PURE__*/_react["default"].createElement(StyledAxesGroup, null, range.min <= 0 ? /*#__PURE__*/_react["default"].createElement(XAxis, (0, _extends2["default"])({}, this.props, {
|
|
395
311
|
skipValues: skipValues,
|
|
396
312
|
columnTicksValues: columnTicksValues,
|
|
397
313
|
distanceFromOriginToFirstNegativeY: distanceFromOriginToFirstNegativeY,
|
|
@@ -403,13 +319,9 @@ var Axes = /*#__PURE__*/function (_React$Component3) {
|
|
|
403
319
|
})) : null);
|
|
404
320
|
}
|
|
405
321
|
}]);
|
|
406
|
-
return Axes;
|
|
407
322
|
}(_react["default"].Component);
|
|
408
|
-
|
|
409
|
-
exports["default"] = Axes;
|
|
410
323
|
(0, _defineProperty2["default"])(Axes, "propTypes", _objectSpread(_objectSpread({}, AxisPropTypes), {}, {
|
|
411
|
-
classes: _propTypes["default"].object,
|
|
412
324
|
graphProps: _plot.types.GraphPropsType.isRequired
|
|
413
325
|
}));
|
|
414
326
|
(0, _defineProperty2["default"])(Axes, "defaultProps", AxisDefaultProps);
|
|
415
|
-
//# sourceMappingURL=axes.js.map
|
|
327
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9heGlzIiwiX3Bsb3QiLCJfcHJvcFR5cGVzIiwiX2Fycm93IiwiX3N0eWxlcyIsIl91dGlscyIsIl9yZW5kZXJVaSIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiQXhpc1Byb3BUeXBlcyIsImV4cG9ydHMiLCJpbmNsdWRlQXJyb3dzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiZ3JhcGhQcm9wcyIsIkF4aXNEZWZhdWx0UHJvcHMiLCJsZWZ0IiwicmlnaHQiLCJ1cCIsImRvd24iLCJTdHlsZWRBcnJvdyIsInN0eWxlZCIsIkFycm93IiwiZmlsbCIsImNvbG9yIiwiZGVmYXVsdHMiLCJQUklNQVJZIiwiU3R5bGVkTGFiZWwiLCJfcmVmIiwidGhlbWUiLCJmb250U2l6ZSIsInR5cG9ncmFwaHkiLCJTdHlsZWRBeGlzTGFiZWxIb2xkZXIiLCJfcmVmMiIsInBhZGRpbmciLCJtYXJnaW4iLCJ0ZXh0QWxpZ24iLCJTdHlsZWRBeGVzR3JvdXAiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInRpY2tMYWJlbFN0eWxlcyIsImZvbnRGYW1pbHkiLCJjdXJzb3IiLCJzaGFyZWRWYWx1ZXMiLCJmaXJzdE5lZ2F0aXZlWCIsImZpcnN0TmVnYXRpdmVZIiwiZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCIsImRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkiLCJkZWx0YUFsbG93YW5jZSIsImR5IiwicmVzdWx0IiwiZmlyc3ROZWdhdGl2ZVZhbHVlIiwiaW50ZXJ2YWwiLCJmaW5kIiwiZWxlbWVudCIsIlJhd1hBeGlzIiwiX1JlYWN0JENvbXBvbmVudCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJwcm9wcyIsImNvbHVtblRpY2tzVmFsdWVzIiwic2tpcFZhbHVlcyIsIl9yZWYzIiwic2NhbGUiLCJkb21haW4iLCJzaXplIiwicmFuZ2UiLCJsYWJlbFByb3BzIiwibGFiZWwiLCJ5IiwidGV4dEFuY2hvciIsImR4IiwibmVjZXNzYXJ5Um93cyIsImNvdW50V29yZHMiLCJheGlzTGFiZWwiLCJsb25nZXN0V29yZCIsImZpbmRMb25nZXN0V29yZCIsIm5lY2Vzc2FyeVdpZHRoIiwiYW1vdW50VG9JbmNyZWFzZVdpZHRoIiwiY3JlYXRlRWxlbWVudCIsIkF4aXMiLCJ4IiwidG9wIiwicmFuZ2VQYWRkaW5nIiwidGlja0Zvcm1hdCIsInRpY2tMYWJlbFByb3BzIiwidGlja1ZhbHVlcyIsImhpZGVaZXJvIiwibGFiZWxTdGVwIiwibWluIiwiZGlyZWN0aW9uIiwibWF4Iiwid2lkdGgiLCJoZWlnaHQiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsIlJlYWN0IiwiQ29tcG9uZW50IiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSIsImlzUmVxdWlyZWQiLCJYQXhpcyIsIlJhd1lBeGlzIiwiX1JlYWN0JENvbXBvbmVudDIiLCJfdGhpcyRwcm9wczIiLCJyb3dUaWNrVmFsdWVzIiwiX3JlZjQiLCJjdXN0b21UaWNrRm9ybWF0IiwiaW5kZXhPZiIsIm9yaWVudGF0aW9uIiwidGlja0xlbmd0aCIsImRpZ2l0cyIsInRvTG9jYWxlU3RyaW5nIiwicmVwbGFjZSIsInRpY2tUZXh0QW5jaG9yIiwiUmVhZGFibGUiLCJZQXhpcyIsIkF4ZXMiLCJfUmVhY3QkQ29tcG9uZW50MyIsIl90aGlzIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJfcmVmNSIsInRpY2tzIiwiZ2V0VGlja1ZhbHVlcyIsInN0ZXAiLCJuZWdhdGl2ZSIsIk1hdGgiLCJhYnMiLCJfcmVmNiIsIl9yZWY3IiwiX3RoaXMkeFZhbHVlcyIsInhWYWx1ZXMiLCJfdGhpcyR5VmFsdWVzIiwieVZhbHVlcyIsIl9leHRlbmRzMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9heGlzL2F4ZXMuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBeGlzIH0gZnJvbSAnQHZpc3gvYXhpcyc7XG5pbXBvcnQgeyB0eXBlcyB9IGZyb20gJ0BwaWUtbGliL3Bsb3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBBcnJvdyBmcm9tICcuL2Fycm93JztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IGNvdW50V29yZHMsIGZpbmRMb25nZXN0V29yZCwgYW1vdW50VG9JbmNyZWFzZVdpZHRoLCBnZXRUaWNrVmFsdWVzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgY29sb3IsIFJlYWRhYmxlIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcblxuZXhwb3J0IGNvbnN0IEF4aXNQcm9wVHlwZXMgPSB7XG4gIGluY2x1ZGVBcnJvd3M6IFByb3BUeXBlcy5vYmplY3QsXG4gIGdyYXBoUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG59O1xuXG5jb25zdCBBeGlzRGVmYXVsdFByb3BzID0ge1xuICBpbmNsdWRlQXJyb3dzOiB7XG4gICAgbGVmdDogdHJ1ZSxcbiAgICByaWdodDogdHJ1ZSxcbiAgICB1cDogdHJ1ZSxcbiAgICBkb3duOiB0cnVlLFxuICB9LFxufTtcblxuY29uc3QgU3R5bGVkQXJyb3cgPSBzdHlsZWQoQXJyb3cpKCgpID0+ICh7XG4gIGZpbGw6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUlksXG59KSk7XG5cbmNvbnN0IFN0eWxlZExhYmVsID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5mb250U2l6ZSxcbn0pKTtcblxuY29uc3QgU3R5bGVkQXhpc0xhYmVsSG9sZGVyID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBwYWRkaW5nOiAwLFxuICBtYXJnaW46IDAsXG4gIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICcqID4gKic6IHtcbiAgICBtYXJnaW46IDAsXG4gICAgcGFkZGluZzogMCxcbiAgfSxcbiAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkuZm9udFNpemUsXG59KSk7XG5cbmNvbnN0IFN0eWxlZEF4ZXNHcm91cCA9IHN0eWxlZCgnZycpKCgpID0+ICh7XG4gICcmIC52aXN4LWF4aXMtbGluZSc6IHtcbiAgICBzdHJva2U6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUlksXG4gICAgc3Ryb2tlV2lkdGg6IDMsXG4gIH0sXG4gICcmIC52aXN4LWF4aXMtdGljayc6IHtcbiAgICBmaWxsOiBjb2xvci5kZWZhdWx0cy5QUklNQVJZLFxuICAgICcmIGxpbmUnOiB7XG4gICAgICBzdHJva2U6IGNvbG9yLmRlZmF1bHRzLlBSSU1BUlksXG4gICAgfSxcbiAgfSxcbn0pKTtcblxuY29uc3QgdGlja0xhYmVsU3R5bGVzID0ge1xuICBmb250RmFtaWx5OiAnUm9ib3RvJyxcbiAgZm9udFNpemU6ICcxNHB4JyxcbiAgY3Vyc29yOiAnaW5oZXJpdCcsXG59O1xuXG5leHBvcnQgY29uc3Qgc2hhcmVkVmFsdWVzID0gKFxuICBmaXJzdE5lZ2F0aXZlWCxcbiAgZmlyc3ROZWdhdGl2ZVksXG4gIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgsXG4gIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVksXG4gIGRlbHRhQWxsb3dhbmNlLFxuICBkeSxcbikgPT4ge1xuICBsZXQgcmVzdWx0ID0gW107XG5cbiAgaWYgKFxuICAgIGZpcnN0TmVnYXRpdmVYID09PSBmaXJzdE5lZ2F0aXZlWSAmJlxuICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVggLSBkZWx0YUFsbG93YW5jZSA8IGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVkgJiZcbiAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZIDwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCArIGRlbHRhQWxsb3dhbmNlICYmXG4gICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCAtIGRlbHRhQWxsb3dhbmNlIDwgZHkgJiZcbiAgICBkeSA8IGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVggKyBkZWx0YUFsbG93YW5jZVxuICApIHtcbiAgICByZXN1bHQucHVzaChmaXJzdE5lZ2F0aXZlWCk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpcnN0TmVnYXRpdmVWYWx1ZSA9IChpbnRlcnZhbCkgPT4gKGludGVydmFsIHx8IFtdKS5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50IDwgMCk7XG5cbmV4cG9ydCBjbGFzcyBSYXdYQXhpcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgLi4uQXhpc1Byb3BUeXBlcyxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICB9O1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gQXhpc0RlZmF1bHRQcm9wcztcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgaW5jbHVkZUFycm93cyxcbiAgICAgIGdyYXBoUHJvcHMsXG4gICAgICBjb2x1bW5UaWNrc1ZhbHVlcyxcbiAgICAgIHNraXBWYWx1ZXMsXG4gICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZLFxuICAgICAgZHksXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgeyBzY2FsZSwgZG9tYWluLCBzaXplLCByYW5nZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGNvbnN0IGxhYmVsUHJvcHMgPSAobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IHkgPSBza2lwVmFsdWVzICYmIHNraXBWYWx1ZXNbMF0gPT09IGxhYmVsID8gZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSArIDQgOiBkeTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGlja0xhYmVsU3R5bGVzLFxuICAgICAgICB0ZXh0QW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgeTogeSxcbiAgICAgICAgZHg6IGxhYmVsID09PSAwID8gLTEwIDogMCxcbiAgICAgICAgZHk6IGxhYmVsID09PSAwID8gLTcgOiAwLFxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgbmVjZXNzYXJ5Um93cyA9IGNvdW50V29yZHMoZG9tYWluLmF4aXNMYWJlbCk7XG4gICAgY29uc3QgbG9uZ2VzdFdvcmQgPSBmaW5kTG9uZ2VzdFdvcmQoZG9tYWluLmF4aXNMYWJlbCk7XG4gICAgY29uc3QgbmVjZXNzYXJ5V2lkdGggPSBhbW91bnRUb0luY3JlYXNlV2lkdGgobG9uZ2VzdFdvcmQpICsgMjtcblxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQXhlc0dyb3VwPlxuICAgICAgICA8QXhpc1xuICAgICAgICAgIHNjYWxlPXtzY2FsZS54fVxuICAgICAgICAgIHRvcD17c2NhbGUueSgwKX1cbiAgICAgICAgICBsZWZ0PXswfVxuICAgICAgICAgIGxhYmVsPXtkb21haW4ubGFiZWx9XG4gICAgICAgICAgcmFuZ2VQYWRkaW5nPXs4fVxuICAgICAgICAgIHRpY2tGb3JtYXQ9eyh2YWx1ZSkgPT4gdmFsdWV9XG4gICAgICAgICAgdGlja0xhYmVsUHJvcHM9e2xhYmVsUHJvcHN9XG4gICAgICAgICAgdGlja1ZhbHVlcz17Y29sdW1uVGlja3NWYWx1ZXN9XG4gICAgICAgICAgaGlkZVplcm89eyEoZG9tYWluLmxhYmVsU3RlcCB8fCByYW5nZS5sYWJlbFN0ZXApICYmIGRvbWFpbi5taW4gPD0gMH1cbiAgICAgICAgLz5cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5sZWZ0ICYmIChcbiAgICAgICAgICA8U3R5bGVkQXJyb3cgZGlyZWN0aW9uPVwibGVmdFwiIHg9e2RvbWFpbi5taW59IHk9ezB9IHNjYWxlPXtzY2FsZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5yaWdodCAmJiAoXG4gICAgICAgICAgPFN0eWxlZEFycm93IGRpcmVjdGlvbj1cInJpZ2h0XCIgeD17ZG9tYWluLm1heH0geT17MH0gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7ZG9tYWluLmF4aXNMYWJlbCAmJiAoXG4gICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD17c2l6ZS53aWR0aCArIDE3fSB5PXtzY2FsZS55KDApIC0gOX0gd2lkdGg9e25lY2Vzc2FyeVdpZHRofSBoZWlnaHQ9ezIwICogbmVjZXNzYXJ5Um93c30+XG4gICAgICAgICAgICA8U3R5bGVkTGFiZWwgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBkb21haW4uYXhpc0xhYmVsIH19IC8+XG4gICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgICApfVxuICAgICAgPC9TdHlsZWRBeGVzR3JvdXA+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBYQXhpcyA9IFJhd1hBeGlzO1xuXG5leHBvcnQgY2xhc3MgUmF3WUF4aXMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIC4uLkF4aXNQcm9wVHlwZXMsXG4gICAgZ3JhcGhQcm9wczogdHlwZXMuR3JhcGhQcm9wc1R5cGUuaXNSZXF1aXJlZCxcbiAgfTtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IEF4aXNEZWZhdWx0UHJvcHM7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgaW5jbHVkZUFycm93cywgZ3JhcGhQcm9wcywgc2tpcFZhbHVlcywgcm93VGlja1ZhbHVlcyB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNjYWxlLCByYW5nZSwgc2l6ZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGNvbnN0IG5lY2Vzc2FyeVdpZHRoID0gcmFuZ2UuYXhpc0xhYmVsID8gYW1vdW50VG9JbmNyZWFzZVdpZHRoKHJhbmdlLmF4aXNMYWJlbC5sZW5ndGgpIDogMDtcblxuICAgIGNvbnN0IGN1c3RvbVRpY2tGb3JtYXQgPSAodmFsdWUpID0+IChza2lwVmFsdWVzICYmIHNraXBWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPj0gMCA/ICcnIDogdmFsdWUpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTdHlsZWRBeGVzR3JvdXA+XG4gICAgICAgIDxBeGlzXG4gICAgICAgICAgb3JpZW50YXRpb249eydsZWZ0J31cbiAgICAgICAgICBzY2FsZT17c2NhbGUueX1cbiAgICAgICAgICB0b3A9ezB9XG4gICAgICAgICAgaGVpZ2h0PXtzaXplLmhlaWdodH1cbiAgICAgICAgICBsZWZ0PXtzY2FsZS54KDApfVxuICAgICAgICAgIGxhYmVsPXtyYW5nZS5sYWJlbH1cbiAgICAgICAgICBsYWJlbFByb3BzPXt7ICdkYXRhLXBpZS1yZWFkYWJsZSc6IGZhbHNlIH19XG4gICAgICAgICAgcmFuZ2VQYWRkaW5nPXs4fVxuICAgICAgICAgIHRpY2tMZW5ndGg9ezEwfVxuICAgICAgICAgIHRpY2tGb3JtYXQ9e2N1c3RvbVRpY2tGb3JtYXR9XG4gICAgICAgICAgdGlja0xhYmVsUHJvcHM9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IGRpZ2l0cyA9IHZhbHVlLnRvTG9jYWxlU3RyaW5nKCkucmVwbGFjZSgvWy4tXS9nLCAnJykubGVuZ3RoIHx8IDE7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnRpY2tMYWJlbFN0eWxlcyxcbiAgICAgICAgICAgICAgZHk6IDQsXG4gICAgICAgICAgICAgIGR4OiAtMTAgLSBkaWdpdHMgKiA5LFxuICAgICAgICAgICAgICAnZGF0YS1waWUtcmVhZGFibGUnOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfX1cbiAgICAgICAgICBoaWRlWmVybz17dHJ1ZX1cbiAgICAgICAgICB0aWNrVGV4dEFuY2hvcj17J2JvdHRvbSd9XG4gICAgICAgICAgdGlja1ZhbHVlcz17cm93VGlja1ZhbHVlc31cbiAgICAgICAgLz5cbiAgICAgICAge2luY2x1ZGVBcnJvd3MgJiYgaW5jbHVkZUFycm93cy5kb3duICYmIChcbiAgICAgICAgICA8U3R5bGVkQXJyb3cgZGlyZWN0aW9uPVwiZG93blwiIHg9ezB9IHk9e3JhbmdlLm1pbn0gc2NhbGU9e3NjYWxlfSAvPlxuICAgICAgICApfVxuICAgICAgICB7aW5jbHVkZUFycm93cyAmJiBpbmNsdWRlQXJyb3dzLnVwICYmIChcbiAgICAgICAgICA8U3R5bGVkQXJyb3cgZGlyZWN0aW9uPVwidXBcIiB4PXswfSB5PXtyYW5nZS5tYXh9IHNjYWxlPXtzY2FsZX0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3JhbmdlLmF4aXNMYWJlbCAmJiAoXG4gICAgICAgICAgPGZvcmVpZ25PYmplY3QgeD17c2NhbGUueCgwKSAtIG5lY2Vzc2FyeVdpZHRoIC8gMn0geT17LTMzfSB3aWR0aD17bmVjZXNzYXJ5V2lkdGh9IGhlaWdodD1cIjIwXCI+XG4gICAgICAgICAgICA8UmVhZGFibGUgZmFsc2U+XG4gICAgICAgICAgICAgIDxTdHlsZWRBeGlzTGFiZWxIb2xkZXIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiByYW5nZS5heGlzTGFiZWwgfX0gLz5cbiAgICAgICAgICAgIDwvUmVhZGFibGU+XG4gICAgICAgICAgPC9mb3JlaWduT2JqZWN0PlxuICAgICAgICApfVxuICAgICAgPC9TdHlsZWRBeGVzR3JvdXA+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBZQXhpcyA9IFJhd1lBeGlzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBeGVzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAuLi5BeGlzUHJvcFR5cGVzLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gIH07XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSBBeGlzRGVmYXVsdFByb3BzO1xuXG4gIHhWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIGRvbWFpbiB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcblxuICAgIGlmICghZG9tYWluIHx8ICFzY2FsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRpY2tzID0gZ2V0VGlja1ZhbHVlcyh7IC4uLmRvbWFpbiwgc3RlcDogZG9tYWluLmxhYmVsU3RlcCB9KTtcbiAgICBjb25zdCBuZWdhdGl2ZSA9IGZpcnN0TmVnYXRpdmVWYWx1ZSh0aWNrcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29sdW1uVGlja3NWYWx1ZXM6IHRpY2tzLFxuICAgICAgZmlyc3ROZWdhdGl2ZVg6IG5lZ2F0aXZlLFxuICAgICAgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWDogTWF0aC5hYnMoc2NhbGUueSgwKSAtIHNjYWxlLnkobmVnYXRpdmUpKSxcbiAgICB9O1xuICB9O1xuXG4gIHlWYWx1ZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgc2NhbGUsIHJhbmdlIH0gPSBncmFwaFByb3BzIHx8IHt9O1xuXG4gICAgaWYgKCFyYW5nZSB8fCAhc2NhbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0aWNrcyA9IGdldFRpY2tWYWx1ZXMoeyAuLi5yYW5nZSwgc3RlcDogcmFuZ2UubGFiZWxTdGVwIH0pO1xuICAgIGNvbnN0IG5lZ2F0aXZlID0gZmlyc3ROZWdhdGl2ZVZhbHVlKHRpY2tzKTtcblxuICAgIHJldHVybiB7XG4gICAgICByb3dUaWNrVmFsdWVzOiB0aWNrcyxcbiAgICAgIGZpcnN0TmVnYXRpdmVZOiBuZWdhdGl2ZSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVk6IE1hdGguYWJzKHNjYWxlLngoMCkgLSBzY2FsZS54KG5lZ2F0aXZlKSksXG4gICAgfTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgeyBncmFwaFByb3BzIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZG9tYWluLCByYW5nZSB9ID0gZ3JhcGhQcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IGNvbHVtblRpY2tzVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWCwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWCB9ID0gdGhpcy54VmFsdWVzKCk7XG4gICAgY29uc3QgeyByb3dUaWNrVmFsdWVzLCBmaXJzdE5lZ2F0aXZlWSwgZGlzdGFuY2VGcm9tT3JpZ2luVG9GaXJzdE5lZ2F0aXZlWSB9ID0gdGhpcy55VmFsdWVzKCk7XG4gICAgY29uc3QgZGVsdGFBbGxvd2FuY2UgPSA2O1xuICAgIGNvbnN0IGR5ID0gMjU7XG5cbiAgICBjb25zdCBza2lwVmFsdWVzID0gc2hhcmVkVmFsdWVzKFxuICAgICAgZmlyc3ROZWdhdGl2ZVgsXG4gICAgICBmaXJzdE5lZ2F0aXZlWSxcbiAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVgsXG4gICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZLFxuICAgICAgZGVsdGFBbGxvd2FuY2UsXG4gICAgICBkeSxcbiAgICApO1xuXG4gICAgLy8gZWFjaCBheGlzIGhhcyB0byBiZSBkaXNwbGF5ZWQgb25seSBpZiB0aGUgZG9tYWluICYgcmFuZ2UgaW5jbHVkZSBpdFxuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkQXhlc0dyb3VwPlxuICAgICAgICB7cmFuZ2UubWluIDw9IDAgPyAoXG4gICAgICAgICAgPFhBeGlzXG4gICAgICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgICAgICAgIHNraXBWYWx1ZXM9e3NraXBWYWx1ZXN9XG4gICAgICAgICAgICBjb2x1bW5UaWNrc1ZhbHVlcz17Y29sdW1uVGlja3NWYWx1ZXN9XG4gICAgICAgICAgICBkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZPXtkaXN0YW5jZUZyb21PcmlnaW5Ub0ZpcnN0TmVnYXRpdmVZfVxuICAgICAgICAgICAgZHk9e2R5fVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7ZG9tYWluLm1pbiA8PSAwID8gKFxuICAgICAgICAgIDxZQXhpc1xuICAgICAgICAgICAgey4uLnRoaXMucHJvcHN9XG4gICAgICAgICAgICBza2lwVmFsdWVzPXtza2lwVmFsdWVzfVxuICAgICAgICAgICAgcm93VGlja1ZhbHVlcz17cm93VGlja1ZhbHVlc31cbiAgICAgICAgICAgIGRpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVg9e2Rpc3RhbmNlRnJvbU9yaWdpblRvRmlyc3ROZWdhdGl2ZVh9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8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
|