@pie-lib/charting 5.36.3-next.2 → 5.36.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 +17 -96
- package/lib/__tests__/axes.test.js +129 -0
- package/lib/__tests__/chart-setup.test.js +57 -0
- package/lib/__tests__/chart-type.test.js +25 -0
- package/lib/__tests__/chart.test.js +103 -0
- package/lib/__tests__/grid.test.js +39 -0
- package/lib/__tests__/mark-label.test.js +46 -0
- package/lib/__tests__/utils.js +56 -0
- package/lib/__tests__/utils.test.js +186 -0
- package/lib/actions-button.js +61 -91
- package/lib/actions-button.js.map +1 -1
- package/lib/axes.js +163 -239
- package/lib/axes.js.map +1 -1
- package/lib/bars/__tests__/bar.test.js +53 -0
- package/lib/bars/__tests__/histogram.test.js +53 -0
- package/lib/bars/__tests__/utils.js +50 -0
- package/lib/bars/bar.js +14 -42
- package/lib/bars/bar.js.map +1 -1
- package/lib/bars/common/__tests__/bars.test.js +76 -0
- package/lib/bars/common/__tests__/utils.js +50 -0
- package/lib/bars/common/bars.js +62 -138
- package/lib/bars/common/bars.js.map +1 -1
- package/lib/bars/common/correct-check-icon.js +6 -7
- package/lib/bars/common/correct-check-icon.js.map +1 -1
- package/lib/bars/histogram.js +14 -42
- package/lib/bars/histogram.js.map +1 -1
- package/lib/chart-setup.js +120 -196
- package/lib/chart-setup.js.map +1 -1
- package/lib/chart-type.js +53 -44
- package/lib/chart-type.js.map +1 -1
- package/lib/chart-types.js +2 -11
- package/lib/chart-types.js.map +1 -1
- package/lib/chart.js +74 -152
- package/lib/chart.js.map +1 -1
- package/lib/common/__tests__/drag-handle.test.js +74 -0
- package/lib/common/__tests__/utils.js +50 -0
- package/lib/common/correctness-indicators.js +110 -53
- package/lib/common/correctness-indicators.js.map +1 -1
- package/lib/common/drag-handle.js +66 -109
- package/lib/common/drag-handle.js.map +1 -1
- package/lib/common/drag-icon.js +13 -13
- package/lib/common/drag-icon.js.map +1 -1
- package/lib/common/styles.js +7 -25
- package/lib/common/styles.js.map +1 -1
- package/lib/grid.js +44 -84
- package/lib/grid.js.map +1 -1
- package/lib/index.js +1 -7
- package/lib/index.js.map +1 -1
- package/lib/key-legend.js +64 -88
- package/lib/key-legend.js.map +1 -1
- package/lib/line/__tests__/line-cross.test.js +47 -0
- package/lib/line/__tests__/line-dot.test.js +47 -0
- package/lib/line/__tests__/utils.js +56 -0
- package/lib/line/common/__tests__/drag-handle.test.js +74 -0
- package/lib/line/common/__tests__/line.test.js +92 -0
- package/lib/line/common/__tests__/utils.js +50 -0
- package/lib/line/common/drag-handle.js +73 -101
- package/lib/line/common/drag-handle.js.map +1 -1
- package/lib/line/common/line.js +51 -97
- package/lib/line/common/line.js.map +1 -1
- package/lib/line/line-cross.js +80 -90
- package/lib/line/line-cross.js.map +1 -1
- package/lib/line/line-dot.js +59 -77
- package/lib/line/line-dot.js.map +1 -1
- package/lib/mark-label.js +85 -120
- package/lib/mark-label.js.map +1 -1
- package/lib/plot/__tests__/dot.test.js +53 -0
- package/lib/plot/__tests__/line.test.js +53 -0
- package/lib/plot/__tests__/utils.js +50 -0
- package/lib/plot/common/__tests__/plot.test.js +79 -0
- package/lib/plot/common/__tests__/utils.js +50 -0
- package/lib/plot/common/plot.js +91 -149
- package/lib/plot/common/plot.js.map +1 -1
- package/lib/plot/dot.js +33 -59
- package/lib/plot/dot.js.map +1 -1
- package/lib/plot/line.js +40 -65
- package/lib/plot/line.js.map +1 -1
- package/lib/tool-menu.js +48 -84
- package/lib/tool-menu.js.map +1 -1
- package/lib/utils.js +32 -87
- package/lib/utils.js.map +1 -1
- package/package.json +22 -24
- package/src/__tests__/axes.test.jsx +85 -100
- package/src/__tests__/chart-type.test.jsx +5 -11
- package/src/__tests__/chart.test.jsx +41 -50
- package/src/__tests__/grid.test.jsx +23 -11
- package/src/__tests__/mark-label.test.jsx +13 -11
- package/src/__tests__/utils.js +8 -2
- package/src/actions-button.jsx +44 -39
- package/src/axes.jsx +67 -81
- package/src/bars/__tests__/bar.test.jsx +19 -11
- package/src/bars/__tests__/histogram.test.jsx +19 -12
- package/src/bars/common/__tests__/bars.test.jsx +23 -24
- package/src/bars/common/bars.jsx +42 -69
- package/src/bars/common/correct-check-icon.jsx +5 -0
- package/src/chart-setup.jsx +75 -88
- package/src/chart-type.js +45 -22
- package/src/chart.jsx +19 -34
- package/src/common/__tests__/drag-handle.test.jsx +16 -45
- package/src/common/correctness-indicators.jsx +91 -13
- package/src/common/drag-handle.jsx +44 -64
- package/src/common/drag-icon.jsx +9 -2
- package/src/common/styles.js +1 -1
- package/src/grid.jsx +10 -14
- package/src/key-legend.jsx +62 -60
- package/src/line/__tests__/line-cross.test.jsx +16 -13
- package/src/line/__tests__/line-dot.test.jsx +16 -13
- package/src/line/__tests__/utils.js +8 -2
- package/src/line/common/__tests__/drag-handle.test.jsx +20 -45
- package/src/line/common/__tests__/line.test.jsx +27 -30
- package/src/line/common/drag-handle.jsx +61 -55
- package/src/line/common/line.jsx +21 -11
- package/src/line/line-cross.js +39 -14
- package/src/line/line-dot.js +27 -32
- package/src/mark-label.jsx +51 -47
- package/src/plot/__tests__/dot.test.jsx +19 -12
- package/src/plot/__tests__/line.test.jsx +19 -12
- package/src/plot/common/__tests__/plot.test.jsx +23 -24
- package/src/plot/common/plot.jsx +29 -24
- package/src/plot/dot.js +11 -4
- package/src/plot/line.js +16 -8
- package/src/tool-menu.jsx +26 -30
- package/src/utils.js +13 -9
- package/esm/index.css +0 -847
- package/esm/index.js +0 -231130
- package/esm/index.js.map +0 -1
- package/esm/package.json +0 -3
- package/src/__tests__/__snapshots__/axes.test.jsx.snap +0 -569
- package/src/__tests__/__snapshots__/chart-type.test.jsx.snap +0 -14
- package/src/__tests__/__snapshots__/chart.test.jsx.snap +0 -595
- package/src/__tests__/__snapshots__/grid.test.jsx.snap +0 -72
- package/src/__tests__/__snapshots__/mark-label.test.jsx.snap +0 -73
- package/src/bars/__tests__/__snapshots__/bar.test.jsx.snap +0 -43
- package/src/bars/__tests__/__snapshots__/histogram.test.jsx.snap +0 -45
- package/src/bars/common/__tests__/__snapshots__/bars.test.jsx.snap +0 -110
- package/src/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -48
- package/src/line/__tests__/__snapshots__/line-cross.test.jsx.snap +0 -45
- package/src/line/__tests__/__snapshots__/line-dot.test.jsx.snap +0 -45
- package/src/line/common/__tests__/__snapshots__/drag-handle.test.jsx.snap +0 -49
- package/src/line/common/__tests__/__snapshots__/line.test.jsx.snap +0 -143
- package/src/plot/__tests__/__snapshots__/dot.test.jsx.snap +0 -45
- package/src/plot/__tests__/__snapshots__/line.test.jsx.snap +0 -45
- package/src/plot/common/__tests__/__snapshots__/plot.test.jsx.snap +0 -97
package/lib/plot/common/plot.js
CHANGED
|
@@ -1,129 +1,88 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
5
|
Object.defineProperty(exports, "__esModule", {
|
|
8
6
|
value: true
|
|
9
7
|
});
|
|
10
8
|
exports["default"] = exports.RawPlot = exports.Plot = void 0;
|
|
11
|
-
|
|
12
9
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
13
|
-
|
|
14
10
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
15
|
-
|
|
16
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
17
|
-
|
|
18
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
19
|
-
|
|
20
11
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
21
|
-
|
|
22
12
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
23
|
-
|
|
13
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
24
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
25
|
-
|
|
26
15
|
var _react = _interopRequireDefault(require("react"));
|
|
27
|
-
|
|
28
16
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
|
-
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
var _Check = _interopRequireDefault(require("@material-ui/icons/Check"));
|
|
33
|
-
|
|
34
|
-
var _index = require("@material-ui/core/styles/index");
|
|
35
|
-
|
|
36
|
-
var _group = require("@vx/group");
|
|
37
|
-
|
|
17
|
+
var _Check = _interopRequireDefault(require("@mui/icons-material/Check"));
|
|
18
|
+
var _styles = require("@mui/material/styles");
|
|
19
|
+
var _group = require("@visx/group");
|
|
38
20
|
var _debug = _interopRequireDefault(require("debug"));
|
|
39
|
-
|
|
40
21
|
var _plot = require("@pie-lib/plot");
|
|
41
|
-
|
|
42
22
|
var _dragHandle = _interopRequireWildcard(require("../../common/drag-handle"));
|
|
43
|
-
|
|
44
23
|
var _renderUi = require("@pie-lib/render-ui");
|
|
45
|
-
|
|
46
24
|
var _utils = require("../../utils");
|
|
47
|
-
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
function
|
|
51
|
-
|
|
52
|
-
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; }
|
|
53
|
-
|
|
54
|
-
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); }; }
|
|
55
|
-
|
|
56
|
-
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; } }
|
|
57
|
-
|
|
25
|
+
var _styles2 = require("../../common/styles");
|
|
26
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
27
|
+
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)); }
|
|
28
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
58
29
|
var log = (0, _debug["default"])('pie-lib:chart:bars');
|
|
59
30
|
var ICON_SIZE = 16; // 10px icon + 2px padding on all sides + 1px border
|
|
60
|
-
|
|
61
|
-
var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
62
|
-
(0, _inherits2["default"])(RawPlot, _React$Component);
|
|
63
|
-
|
|
64
|
-
var _super = _createSuper(RawPlot);
|
|
65
|
-
|
|
31
|
+
var RawPlot = exports.RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
66
32
|
function RawPlot(props) {
|
|
67
33
|
var _this;
|
|
68
|
-
|
|
69
34
|
(0, _classCallCheck2["default"])(this, RawPlot);
|
|
70
|
-
_this =
|
|
71
|
-
(0, _defineProperty2["default"])(
|
|
35
|
+
_this = _callSuper(this, RawPlot, [props]);
|
|
36
|
+
(0, _defineProperty2["default"])(_this, "handleMouseEnter", function () {
|
|
72
37
|
_this.setState({
|
|
73
38
|
isHovered: true
|
|
74
39
|
});
|
|
75
40
|
});
|
|
76
|
-
(0, _defineProperty2["default"])(
|
|
41
|
+
(0, _defineProperty2["default"])(_this, "handleMouseLeave", function () {
|
|
77
42
|
_this.setState({
|
|
78
43
|
isHovered: false
|
|
79
44
|
});
|
|
80
45
|
});
|
|
81
|
-
(0, _defineProperty2["default"])(
|
|
46
|
+
(0, _defineProperty2["default"])(_this, "setDragValue", function (dragValue) {
|
|
82
47
|
return _this.setState({
|
|
83
48
|
dragValue: dragValue
|
|
84
49
|
});
|
|
85
50
|
});
|
|
86
|
-
(0, _defineProperty2["default"])(
|
|
51
|
+
(0, _defineProperty2["default"])(_this, "dragStop", function () {
|
|
87
52
|
var _this$props = _this.props,
|
|
88
|
-
|
|
89
|
-
|
|
53
|
+
label = _this$props.label,
|
|
54
|
+
onChangeCategory = _this$props.onChangeCategory;
|
|
90
55
|
var dragValue = _this.state.dragValue;
|
|
91
56
|
log('[dragStop]', dragValue);
|
|
92
|
-
|
|
93
57
|
if (dragValue !== undefined) {
|
|
94
58
|
onChangeCategory({
|
|
95
59
|
label: label,
|
|
96
60
|
value: dragValue
|
|
97
61
|
});
|
|
98
62
|
}
|
|
99
|
-
|
|
100
63
|
_this.setDragValue(undefined);
|
|
101
64
|
});
|
|
102
|
-
(0, _defineProperty2["default"])(
|
|
65
|
+
(0, _defineProperty2["default"])(_this, "dragValue", function (existing, next) {
|
|
103
66
|
log('[dragValue] next:', next);
|
|
104
|
-
|
|
105
67
|
_this.setDragValue(next);
|
|
106
68
|
});
|
|
107
|
-
(0, _defineProperty2["default"])(
|
|
69
|
+
(0, _defineProperty2["default"])(_this, "renderCorrectnessIcon", function (barX, barWidth, correctVal, correctness, scale, pointHeight, pointDiameter) {
|
|
108
70
|
var iconY;
|
|
109
|
-
|
|
110
71
|
if (correctVal === 0) {
|
|
111
72
|
// if correct value is 0, position icon on the horizontal axis
|
|
112
73
|
iconY = scale.y(0) - ICON_SIZE / 2;
|
|
113
74
|
} else {
|
|
114
75
|
var shapeIndex = correctVal - 1; // the index of the shape representing the correct value
|
|
115
|
-
|
|
116
76
|
var shapeCenterY = scale.y(shapeIndex) - (pointHeight - pointDiameter) / 2 - pointDiameter / 2;
|
|
117
77
|
iconY = shapeCenterY - ICON_SIZE / 2; // center the icon
|
|
118
78
|
}
|
|
119
|
-
|
|
120
79
|
return /*#__PURE__*/_react["default"].createElement("foreignObject", {
|
|
121
80
|
x: barX + barWidth / 2 - ICON_SIZE / 2,
|
|
122
81
|
y: iconY,
|
|
123
82
|
width: ICON_SIZE,
|
|
124
83
|
height: ICON_SIZE
|
|
125
84
|
}, /*#__PURE__*/_react["default"].createElement(_Check["default"], {
|
|
126
|
-
className:
|
|
85
|
+
className: "correctnessIcon correctIcon smallIcon",
|
|
127
86
|
title: correctness.label
|
|
128
87
|
}));
|
|
129
88
|
});
|
|
@@ -133,34 +92,31 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
|
133
92
|
};
|
|
134
93
|
return _this;
|
|
135
94
|
}
|
|
136
|
-
|
|
137
|
-
(0, _createClass2["default"])(RawPlot, [{
|
|
95
|
+
(0, _inherits2["default"])(RawPlot, _React$Component);
|
|
96
|
+
return (0, _createClass2["default"])(RawPlot, [{
|
|
138
97
|
key: "render",
|
|
139
98
|
value: function render() {
|
|
140
99
|
var _this2 = this;
|
|
141
|
-
|
|
142
100
|
var _this$props2 = this.props,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
101
|
+
graphProps = _this$props2.graphProps,
|
|
102
|
+
value = _this$props2.value,
|
|
103
|
+
label = _this$props2.label,
|
|
104
|
+
xBand = _this$props2.xBand,
|
|
105
|
+
index = _this$props2.index,
|
|
106
|
+
CustomBarElement = _this$props2.CustomBarElement,
|
|
107
|
+
interactive = _this$props2.interactive,
|
|
108
|
+
correctness = _this$props2.correctness,
|
|
109
|
+
defineChart = _this$props2.defineChart,
|
|
110
|
+
correctData = _this$props2.correctData,
|
|
111
|
+
className = _this$props2.className;
|
|
154
112
|
var scale = graphProps.scale,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
113
|
+
range = graphProps.range,
|
|
114
|
+
size = graphProps.size;
|
|
158
115
|
var _ref = range || {},
|
|
159
|
-
|
|
160
|
-
|
|
116
|
+
max = _ref.max;
|
|
161
117
|
var _this$state = this.state,
|
|
162
|
-
|
|
163
|
-
|
|
118
|
+
dragValue = _this$state.dragValue,
|
|
119
|
+
isHovered = _this$state.isHovered;
|
|
164
120
|
var v = Number.isFinite(dragValue) ? dragValue : value;
|
|
165
121
|
var barWidth = xBand.bandwidth();
|
|
166
122
|
var barHeight = scale.y(range.max - v);
|
|
@@ -169,16 +125,15 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
|
169
125
|
}, index));
|
|
170
126
|
log('label:', label, 'barX:', barX, 'v: ', v, 'barHeight:', barHeight, 'barWidth: ', barWidth);
|
|
171
127
|
var values = [];
|
|
172
|
-
|
|
173
128
|
for (var i = 0; i < v; i++) {
|
|
174
129
|
values.push(i);
|
|
175
130
|
}
|
|
176
|
-
|
|
177
131
|
var pointHeight = size.height / max;
|
|
178
132
|
var pointDiameter = (pointHeight > barWidth ? barWidth : pointHeight) * 0.8;
|
|
179
133
|
var Component = interactive ? _dragHandle["default"] : _dragHandle.DragHandle;
|
|
180
134
|
var allowRolloverEvent = interactive && !correctness;
|
|
181
135
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("g", {
|
|
136
|
+
className: className,
|
|
182
137
|
onMouseEnter: this.handleMouseEnter,
|
|
183
138
|
onMouseLeave: this.handleMouseLeave,
|
|
184
139
|
onTouchStart: this.handleMouseEnter,
|
|
@@ -200,39 +155,31 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
|
200
155
|
pointHeight: pointHeight,
|
|
201
156
|
label: label,
|
|
202
157
|
value: value,
|
|
203
|
-
classes: classes,
|
|
204
158
|
scale: scale
|
|
205
159
|
});
|
|
206
160
|
}), correctness && correctness.value === 'incorrect' && function () {
|
|
207
161
|
var correctVal = parseFloat(correctData[index] && correctData[index].value);
|
|
208
162
|
if (isNaN(correctVal)) return null;
|
|
209
|
-
var selectedVal = v;
|
|
163
|
+
var selectedVal = v;
|
|
210
164
|
|
|
165
|
+
// special case: if correct value is 0, only show the icon on the axis
|
|
211
166
|
if (correctVal === 0) {
|
|
212
|
-
return _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness,
|
|
167
|
+
return _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness, scale, pointHeight, pointDiameter);
|
|
213
168
|
}
|
|
214
|
-
|
|
215
169
|
if (selectedVal > correctVal) {
|
|
216
170
|
// selected is higher than correct: overlay the correct last segment
|
|
217
171
|
var overlayValues = [];
|
|
218
|
-
|
|
219
172
|
for (var _i = 0; _i < correctVal; _i++) {
|
|
220
173
|
overlayValues.push(_i);
|
|
221
174
|
}
|
|
222
|
-
|
|
223
175
|
var lastIndexOfOverlay = overlayValues.length - 1;
|
|
224
176
|
var lastOverlayValue = overlayValues[lastIndexOfOverlay];
|
|
225
|
-
|
|
226
177
|
var _barX = xBand((0, _utils.bandKey)({
|
|
227
178
|
label: label
|
|
228
179
|
}, index));
|
|
229
|
-
|
|
230
180
|
var _barWidth = xBand.bandwidth();
|
|
231
|
-
|
|
232
181
|
var _pointHeight = size.height / max;
|
|
233
|
-
|
|
234
182
|
var _pointDiameter = (_pointHeight > _barWidth ? _barWidth : _pointHeight) * 0.8;
|
|
235
|
-
|
|
236
183
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(CustomBarElement, {
|
|
237
184
|
index: lastOverlayValue,
|
|
238
185
|
pointDiameter: _pointDiameter + 10 // increase point diameter for dotted line
|
|
@@ -242,19 +189,15 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
|
242
189
|
pointHeight: _pointHeight,
|
|
243
190
|
label: label,
|
|
244
191
|
value: value,
|
|
245
|
-
classes: classes,
|
|
246
192
|
scale: scale,
|
|
247
193
|
dottedOverline: true
|
|
248
|
-
}), _this2.renderCorrectnessIcon(_barX, _barWidth, correctVal, correctness,
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
194
|
+
}), _this2.renderCorrectnessIcon(_barX, _barWidth, correctVal, correctness, scale, _pointHeight, _pointDiameter));
|
|
195
|
+
}
|
|
196
|
+
// selected is lower than correct, render missing segment below the correct bar
|
|
252
197
|
var valuesToRender = [];
|
|
253
|
-
|
|
254
198
|
for (var _i2 = selectedVal; _i2 < correctVal; _i2++) {
|
|
255
199
|
valuesToRender.push(_i2);
|
|
256
200
|
}
|
|
257
|
-
|
|
258
201
|
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, valuesToRender.map(function (idx) {
|
|
259
202
|
return CustomBarElement({
|
|
260
203
|
index: idx,
|
|
@@ -264,11 +207,10 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
|
264
207
|
pointHeight: pointHeight,
|
|
265
208
|
label: label,
|
|
266
209
|
value: value,
|
|
267
|
-
classes: classes,
|
|
268
210
|
scale: scale,
|
|
269
211
|
dottedOverline: true
|
|
270
212
|
});
|
|
271
|
-
}), _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness,
|
|
213
|
+
}), _this2.renderCorrectnessIcon(barX, barWidth, correctVal, correctness, scale, pointHeight, pointDiameter));
|
|
272
214
|
}(), /*#__PURE__*/_react["default"].createElement(Component, {
|
|
273
215
|
x: barX,
|
|
274
216
|
y: v,
|
|
@@ -287,14 +229,10 @@ var RawPlot = /*#__PURE__*/function (_React$Component) {
|
|
|
287
229
|
})));
|
|
288
230
|
}
|
|
289
231
|
}]);
|
|
290
|
-
return RawPlot;
|
|
291
232
|
}(_react["default"].Component);
|
|
292
|
-
|
|
293
|
-
exports.RawPlot = RawPlot;
|
|
294
233
|
(0, _defineProperty2["default"])(RawPlot, "propTypes", {
|
|
295
234
|
onChangeCategory: _propTypes["default"].func,
|
|
296
235
|
value: _propTypes["default"].number,
|
|
297
|
-
classes: _propTypes["default"].object,
|
|
298
236
|
label: _propTypes["default"].string,
|
|
299
237
|
xBand: _propTypes["default"].func,
|
|
300
238
|
index: _propTypes["default"].number.isRequired,
|
|
@@ -304,33 +242,40 @@ exports.RawPlot = RawPlot;
|
|
|
304
242
|
correctness: _propTypes["default"].shape({
|
|
305
243
|
value: _propTypes["default"].string,
|
|
306
244
|
label: _propTypes["default"].string
|
|
307
|
-
})
|
|
245
|
+
}),
|
|
246
|
+
defineChart: _propTypes["default"].bool,
|
|
247
|
+
correctData: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
248
|
+
value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
249
|
+
label: _propTypes["default"].string
|
|
250
|
+
})),
|
|
251
|
+
className: _propTypes["default"].string
|
|
308
252
|
});
|
|
309
|
-
var Bar = (0,
|
|
253
|
+
var Bar = (0, _styles.styled)(RawPlot)(function (_ref2) {
|
|
254
|
+
var theme = _ref2.theme;
|
|
310
255
|
return {
|
|
311
|
-
dot: {
|
|
256
|
+
'& .dot': {
|
|
312
257
|
fill: _renderUi.color.visualElementsColors.PLOT_FILL_COLOR,
|
|
313
|
-
'&.correct': (0,
|
|
314
|
-
'&.incorrect': (0,
|
|
258
|
+
'&.correct': (0, _styles2.correct)('stroke'),
|
|
259
|
+
'&.incorrect': (0, _styles2.incorrect)('stroke')
|
|
315
260
|
},
|
|
316
|
-
dotColor: {
|
|
261
|
+
'& .dotColor': {
|
|
317
262
|
fill: _renderUi.color.visualElementsColors.PLOT_FILL_COLOR,
|
|
318
|
-
'&.correct': (0,
|
|
319
|
-
'&.incorrect': (0,
|
|
263
|
+
'&.correct': (0, _styles2.correct)('fill'),
|
|
264
|
+
'&.incorrect': (0, _styles2.incorrect)('fill')
|
|
320
265
|
},
|
|
321
|
-
line: {
|
|
266
|
+
'& .line': {
|
|
322
267
|
stroke: _renderUi.color.visualElementsColors.PLOT_FILL_COLOR,
|
|
323
|
-
'&.correct': (0,
|
|
324
|
-
'&.incorrect': (0,
|
|
268
|
+
'&.correct': (0, _styles2.correct)('stroke'),
|
|
269
|
+
'&.incorrect': (0, _styles2.incorrect)('stroke')
|
|
325
270
|
},
|
|
326
|
-
correctIcon: {
|
|
271
|
+
'& .correctIcon': {
|
|
327
272
|
backgroundColor: _renderUi.color.correct()
|
|
328
273
|
},
|
|
329
|
-
incorrectIcon: {
|
|
274
|
+
'& .incorrectIcon': {
|
|
330
275
|
backgroundColor: _renderUi.color.incorrectWithIcon()
|
|
331
276
|
},
|
|
332
|
-
correctnessIcon: {
|
|
333
|
-
borderRadius: theme.spacing
|
|
277
|
+
'& .correctnessIcon': {
|
|
278
|
+
borderRadius: theme.spacing(2),
|
|
334
279
|
color: _renderUi.color.defaults.WHITE,
|
|
335
280
|
fontSize: '16px',
|
|
336
281
|
width: '16px',
|
|
@@ -338,38 +283,34 @@ var Bar = (0, _index.withStyles)(function (theme) {
|
|
|
338
283
|
padding: '2px',
|
|
339
284
|
border: "1px solid ".concat(_renderUi.color.defaults.WHITE),
|
|
340
285
|
stroke: 'initial',
|
|
341
|
-
boxSizing: 'unset'
|
|
342
|
-
|
|
286
|
+
boxSizing: 'unset',
|
|
287
|
+
// to override the default border-box in IBX
|
|
288
|
+
display: 'block'
|
|
343
289
|
},
|
|
344
|
-
smallIcon: {
|
|
290
|
+
'& .smallIcon': {
|
|
345
291
|
fontSize: '10px',
|
|
346
292
|
width: '10px',
|
|
347
293
|
height: '10px'
|
|
348
294
|
}
|
|
349
295
|
};
|
|
350
|
-
})
|
|
351
|
-
|
|
352
|
-
var Plot = /*#__PURE__*/function (_React$Component2) {
|
|
353
|
-
(0, _inherits2["default"])(Plot, _React$Component2);
|
|
354
|
-
|
|
355
|
-
var _super2 = _createSuper(Plot);
|
|
356
|
-
|
|
296
|
+
});
|
|
297
|
+
var Plot = exports.Plot = /*#__PURE__*/function (_React$Component2) {
|
|
357
298
|
function Plot() {
|
|
358
299
|
(0, _classCallCheck2["default"])(this, Plot);
|
|
359
|
-
return
|
|
300
|
+
return _callSuper(this, Plot, arguments);
|
|
360
301
|
}
|
|
361
|
-
|
|
362
|
-
(0, _createClass2["default"])(Plot, [{
|
|
302
|
+
(0, _inherits2["default"])(Plot, _React$Component2);
|
|
303
|
+
return (0, _createClass2["default"])(Plot, [{
|
|
363
304
|
key: "render",
|
|
364
305
|
value: function render() {
|
|
365
306
|
var _this$props3 = this.props,
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
307
|
+
data = _this$props3.data,
|
|
308
|
+
graphProps = _this$props3.graphProps,
|
|
309
|
+
xBand = _this$props3.xBand,
|
|
310
|
+
CustomBarElement = _this$props3.CustomBarElement,
|
|
311
|
+
_onChangeCategory = _this$props3.onChangeCategory,
|
|
312
|
+
defineChart = _this$props3.defineChart,
|
|
313
|
+
correctData = _this$props3.correctData;
|
|
373
314
|
return /*#__PURE__*/_react["default"].createElement(_group.Group, null, (data || []).map(function (d, index) {
|
|
374
315
|
return /*#__PURE__*/_react["default"].createElement(Bar, {
|
|
375
316
|
value: d.value,
|
|
@@ -390,18 +331,19 @@ var Plot = /*#__PURE__*/function (_React$Component2) {
|
|
|
390
331
|
}));
|
|
391
332
|
}
|
|
392
333
|
}]);
|
|
393
|
-
return Plot;
|
|
394
334
|
}(_react["default"].Component);
|
|
395
|
-
|
|
396
|
-
exports.Plot = Plot;
|
|
397
335
|
(0, _defineProperty2["default"])(Plot, "propTypes", {
|
|
398
336
|
data: _propTypes["default"].array,
|
|
399
337
|
onChangeCategory: _propTypes["default"].func,
|
|
400
338
|
xBand: _propTypes["default"].func,
|
|
401
339
|
graphProps: _plot.types.GraphPropsType.isRequired,
|
|
402
340
|
defineChart: _propTypes["default"].bool,
|
|
403
|
-
CustomBarElement: _propTypes["default"].func
|
|
341
|
+
CustomBarElement: _propTypes["default"].func,
|
|
342
|
+
correctData: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
343
|
+
value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].number]),
|
|
344
|
+
label: _propTypes["default"].string
|
|
345
|
+
})),
|
|
346
|
+
className: _propTypes["default"].string
|
|
404
347
|
});
|
|
405
|
-
var _default = Plot;
|
|
406
|
-
exports["default"] = _default;
|
|
407
|
-
//# sourceMappingURL=plot.js.map
|
|
348
|
+
var _default = exports["default"] = Plot;
|
|
349
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfQ2hlY2siLCJfc3R5bGVzIiwiX2dyb3VwIiwiX2RlYnVnIiwiX3Bsb3QiLCJfZHJhZ0hhbmRsZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3JlbmRlclVpIiwiX3V0aWxzIiwiX3N0eWxlczIiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsImFwcGx5IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJsb2ciLCJkZWJ1ZyIsIklDT05fU0laRSIsIlJhd1Bsb3QiLCJleHBvcnRzIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsInNldFN0YXRlIiwiaXNIb3ZlcmVkIiwiZHJhZ1ZhbHVlIiwiX3RoaXMkcHJvcHMiLCJsYWJlbCIsIm9uQ2hhbmdlQ2F0ZWdvcnkiLCJzdGF0ZSIsInVuZGVmaW5lZCIsInZhbHVlIiwic2V0RHJhZ1ZhbHVlIiwiZXhpc3RpbmciLCJuZXh0IiwiYmFyWCIsImJhcldpZHRoIiwiY29ycmVjdFZhbCIsImNvcnJlY3RuZXNzIiwic2NhbGUiLCJwb2ludEhlaWdodCIsInBvaW50RGlhbWV0ZXIiLCJpY29uWSIsInkiLCJzaGFwZUluZGV4Iiwic2hhcGVDZW50ZXJZIiwiY3JlYXRlRWxlbWVudCIsIngiLCJ3aWR0aCIsImhlaWdodCIsImNsYXNzTmFtZSIsInRpdGxlIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJyZW5kZXIiLCJfdGhpczIiLCJfdGhpcyRwcm9wczIiLCJncmFwaFByb3BzIiwieEJhbmQiLCJpbmRleCIsIkN1c3RvbUJhckVsZW1lbnQiLCJpbnRlcmFjdGl2ZSIsImRlZmluZUNoYXJ0IiwiY29ycmVjdERhdGEiLCJyYW5nZSIsInNpemUiLCJfcmVmIiwibWF4IiwiX3RoaXMkc3RhdGUiLCJ2IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJiYW5kd2lkdGgiLCJiYXJIZWlnaHQiLCJiYW5kS2V5IiwidmFsdWVzIiwicHVzaCIsIkNvbXBvbmVudCIsIkRyYWdnYWJsZUhhbmRsZSIsIkRyYWdIYW5kbGUiLCJhbGxvd1JvbGxvdmVyRXZlbnQiLCJGcmFnbWVudCIsIm9uTW91c2VFbnRlciIsImhhbmRsZU1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJoYW5kbGVNb3VzZUxlYXZlIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaEVuZCIsImxlbmd0aCIsInN0cm9rZSIsImNvbG9yIiwiZGVmYXVsdHMiLCJCT1JERVJfR1JBWSIsInN0cm9rZVdpZHRoIiwiZmlsbCIsIm1hcCIsInBhcnNlRmxvYXQiLCJpc05hTiIsInNlbGVjdGVkVmFsIiwicmVuZGVyQ29ycmVjdG5lc3NJY29uIiwib3ZlcmxheVZhbHVlcyIsImxhc3RJbmRleE9mT3ZlcmxheSIsImxhc3RPdmVybGF5VmFsdWUiLCJkb3R0ZWRPdmVybGluZSIsInZhbHVlc1RvUmVuZGVyIiwiaWR4Iiwib25EcmFnIiwib25EcmFnU3RvcCIsImRyYWdTdG9wIiwicHJpbWFyeURhcmsiLCJpc1Bsb3QiLCJSZWFjdCIsIlByb3BUeXBlcyIsImZ1bmMiLCJudW1iZXIiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwidHlwZXMiLCJHcmFwaFByb3BzVHlwZSIsImJvb2wiLCJzaGFwZSIsImFycmF5T2YiLCJvbmVPZlR5cGUiLCJCYXIiLCJzdHlsZWQiLCJfcmVmMiIsInRoZW1lIiwidmlzdWFsRWxlbWVudHNDb2xvcnMiLCJQTE9UX0ZJTExfQ09MT1IiLCJjb3JyZWN0IiwiaW5jb3JyZWN0IiwiYmFja2dyb3VuZENvbG9yIiwiaW5jb3JyZWN0V2l0aEljb24iLCJib3JkZXJSYWRpdXMiLCJzcGFjaW5nIiwiV0hJVEUiLCJmb250U2l6ZSIsInBhZGRpbmciLCJib3JkZXIiLCJjb25jYXQiLCJib3hTaXppbmciLCJkaXNwbGF5IiwiUGxvdCIsIl9SZWFjdCRDb21wb25lbnQyIiwiYXJndW1lbnRzIiwiX3RoaXMkcHJvcHMzIiwiZGF0YSIsIkdyb3VwIiwiZCIsImNhdGVnb3J5IiwiYXJyYXkiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbG90L2NvbW1vbi9wbG90LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBDaGVjayBmcm9tICdAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrJztcbmltcG9ydCB7IHN0eWxlZCB9IGZyb20gJ0BtdWkvbWF0ZXJpYWwvc3R5bGVzJztcbmltcG9ydCB7IEdyb3VwIH0gZnJvbSAnQHZpc3gvZ3JvdXAnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgdHlwZXMgfSBmcm9tICdAcGllLWxpYi9wbG90JztcbmltcG9ydCBEcmFnZ2FibGVIYW5kbGUsIHsgRHJhZ0hhbmRsZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9kcmFnLWhhbmRsZSc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyBiYW5kS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgY29ycmVjdCwgaW5jb3JyZWN0IH0gZnJvbSAnLi4vLi4vY29tbW9uL3N0eWxlcyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdwaWUtbGliOmNoYXJ0OmJhcnMnKTtcbmNvbnN0IElDT05fU0laRSA9IDE2OyAvLyAxMHB4IGljb24gKyAycHggcGFkZGluZyBvbiBhbGwgc2lkZXMgKyAxcHggYm9yZGVyXG5cbmV4cG9ydCBjbGFzcyBSYXdQbG90IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBvbkNoYW5nZUNhdGVnb3J5OiBQcm9wVHlwZXMuZnVuYyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB4QmFuZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBncmFwaFByb3BzOiB0eXBlcy5HcmFwaFByb3BzVHlwZS5pc1JlcXVpcmVkLFxuICAgIEN1c3RvbUJhckVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGludGVyYWN0aXZlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb3JyZWN0bmVzczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvcnJlY3REYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyYWdWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgaXNIb3ZlcmVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgaGFuZGxlTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaXNIb3ZlcmVkOiB0cnVlIH0pO1xuICB9O1xuXG4gIGhhbmRsZU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGlzSG92ZXJlZDogZmFsc2UgfSk7XG4gIH07XG5cbiAgc2V0RHJhZ1ZhbHVlID0gKGRyYWdWYWx1ZSkgPT4gdGhpcy5zZXRTdGF0ZSh7IGRyYWdWYWx1ZSB9KTtcblxuICBkcmFnU3RvcCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCBvbkNoYW5nZUNhdGVnb3J5IH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZHJhZ1ZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGxvZygnW2RyYWdTdG9wXScsIGRyYWdWYWx1ZSk7XG5cbiAgICBpZiAoZHJhZ1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9uQ2hhbmdlQ2F0ZWdvcnkoeyBsYWJlbCwgdmFsdWU6IGRyYWdWYWx1ZSB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnNldERyYWdWYWx1ZSh1bmRlZmluZWQpO1xuICB9O1xuXG4gIGRyYWdWYWx1ZSA9IChleGlzdGluZywgbmV4dCkgPT4ge1xuICAgIGxvZygnW2RyYWdWYWx1ZV0gbmV4dDonLCBuZXh0KTtcblxuICAgIHRoaXMuc2V0RHJhZ1ZhbHVlKG5leHQpO1xuICB9O1xuXG4gIHJlbmRlckNvcnJlY3RuZXNzSWNvbiA9IChiYXJYLCBiYXJXaWR0aCwgY29ycmVjdFZhbCwgY29ycmVjdG5lc3MsIHNjYWxlLCBwb2ludEhlaWdodCwgcG9pbnREaWFtZXRlcikgPT4ge1xuICAgIGxldCBpY29uWTtcblxuICAgIGlmIChjb3JyZWN0VmFsID09PSAwKSB7XG4gICAgICAvLyBpZiBjb3JyZWN0IHZhbHVlIGlzIDAsIHBvc2l0aW9uIGljb24gb24gdGhlIGhvcml6b250YWwgYXhpc1xuICAgICAgaWNvblkgPSBzY2FsZS55KDApIC0gSUNPTl9TSVpFIC8gMjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2hhcGVJbmRleCA9IGNvcnJlY3RWYWwgLSAxOyAvLyB0aGUgaW5kZXggb2YgdGhlIHNoYXBlIHJlcHJlc2VudGluZyB0aGUgY29ycmVjdCB2YWx1ZVxuICAgICAgY29uc3Qgc2hhcGVDZW50ZXJZID0gc2NhbGUueShzaGFwZUluZGV4KSAtIChwb2ludEhlaWdodCAtIHBvaW50RGlhbWV0ZXIpIC8gMiAtIHBvaW50RGlhbWV0ZXIgLyAyO1xuICAgICAgaWNvblkgPSBzaGFwZUNlbnRlclkgLSBJQ09OX1NJWkUgLyAyOyAvLyBjZW50ZXIgdGhlIGljb25cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGZvcmVpZ25PYmplY3QgeD17YmFyWCArIGJhcldpZHRoIC8gMiAtIElDT05fU0laRSAvIDJ9IHk9e2ljb25ZfSB3aWR0aD17SUNPTl9TSVpFfSBoZWlnaHQ9e0lDT05fU0laRX0+XG4gICAgICAgIDxDaGVja1xuICAgICAgICAgIGNsYXNzTmFtZT1cImNvcnJlY3RuZXNzSWNvbiBjb3JyZWN0SWNvbiBzbWFsbEljb25cIlxuICAgICAgICAgIHRpdGxlPXtjb3JyZWN0bmVzcy5sYWJlbH1cbiAgICAgICAgLz5cbiAgICAgIDwvZm9yZWlnbk9iamVjdD5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBncmFwaFByb3BzLFxuICAgICAgdmFsdWUsXG4gICAgICBsYWJlbCxcbiAgICAgIHhCYW5kLFxuICAgICAgaW5kZXgsXG4gICAgICBDdXN0b21CYXJFbGVtZW50LFxuICAgICAgaW50ZXJhY3RpdmUsXG4gICAgICBjb3JyZWN0bmVzcyxcbiAgICAgIGRlZmluZUNoYXJ0LFxuICAgICAgY29ycmVjdERhdGEsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IHsgc2NhbGUsIHJhbmdlLCBzaXplIH0gPSBncmFwaFByb3BzO1xuICAgIGNvbnN0IHsgbWF4IH0gPSByYW5nZSB8fCB7fTtcbiAgICBjb25zdCB7IGRyYWdWYWx1ZSwgaXNIb3ZlcmVkIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgY29uc3QgdiA9IE51bWJlci5pc0Zpbml0ZShkcmFnVmFsdWUpID8gZHJhZ1ZhbHVlIDogdmFsdWU7XG4gICAgY29uc3QgYmFyV2lkdGggPSB4QmFuZC5iYW5kd2lkdGgoKTtcbiAgICBjb25zdCBiYXJIZWlnaHQgPSBzY2FsZS55KHJhbmdlLm1heCAtIHYpO1xuICAgIGNvbnN0IGJhclggPSB4QmFuZChiYW5kS2V5KHsgbGFiZWwgfSwgaW5kZXgpKTtcblxuICAgIGxvZygnbGFiZWw6JywgbGFiZWwsICdiYXJYOicsIGJhclgsICd2OiAnLCB2LCAnYmFySGVpZ2h0OicsIGJhckhlaWdodCwgJ2JhcldpZHRoOiAnLCBiYXJXaWR0aCk7XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdjsgaSsrKSB7XG4gICAgICB2YWx1ZXMucHVzaChpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2ludEhlaWdodCA9IHNpemUuaGVpZ2h0IC8gbWF4O1xuICAgIGNvbnN0IHBvaW50RGlhbWV0ZXIgPSAocG9pbnRIZWlnaHQgPiBiYXJXaWR0aCA/IGJhcldpZHRoIDogcG9pbnRIZWlnaHQpICogMC44O1xuICAgIGNvbnN0IENvbXBvbmVudCA9IGludGVyYWN0aXZlID8gRHJhZ2dhYmxlSGFuZGxlIDogRHJhZ0hhbmRsZTtcbiAgICBjb25zdCBhbGxvd1JvbGxvdmVyRXZlbnQgPSBpbnRlcmFjdGl2ZSAmJiAhY29ycmVjdG5lc3M7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8Z1xuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgIG9uTW91c2VFbnRlcj17dGhpcy5oYW5kbGVNb3VzZUVudGVyfVxuICAgICAgICAgIG9uTW91c2VMZWF2ZT17dGhpcy5oYW5kbGVNb3VzZUxlYXZlfVxuICAgICAgICAgIG9uVG91Y2hTdGFydD17dGhpcy5oYW5kbGVNb3VzZUVudGVyfVxuICAgICAgICAgIG9uVG91Y2hFbmQ9e3RoaXMuaGFuZGxlTW91c2VMZWF2ZX1cbiAgICAgICAgPlxuICAgICAgICAgIHtpc0hvdmVyZWQgJiYgYWxsb3dSb2xsb3ZlckV2ZW50ICYmIChcbiAgICAgICAgICAgIDxyZWN0XG4gICAgICAgICAgICAgIHg9e2Jhclh9XG4gICAgICAgICAgICAgIHk9e3NjYWxlLnkodil9XG4gICAgICAgICAgICAgIHdpZHRoPXtiYXJXaWR0aH1cbiAgICAgICAgICAgICAgaGVpZ2h0PXt2YWx1ZXM/Lmxlbmd0aCA/IHBvaW50SGVpZ2h0ICogdmFsdWVzLmxlbmd0aCA6IDB9XG4gICAgICAgICAgICAgIHN0cm9rZT17Y29sb3IuZGVmYXVsdHMuQk9SREVSX0dSQVl9XG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoPXsnNHB4J31cbiAgICAgICAgICAgICAgZmlsbD17J3RyYW5zcGFyZW50J31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7dmFsdWVzLm1hcCgoaW5kZXgpID0+XG4gICAgICAgICAgICBDdXN0b21CYXJFbGVtZW50KHtcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIHBvaW50RGlhbWV0ZXIsXG4gICAgICAgICAgICAgIGJhclgsXG4gICAgICAgICAgICAgIGJhcldpZHRoLFxuICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICl9XG4gICAgICAgICAge2NvcnJlY3RuZXNzICYmXG4gICAgICAgICAgICBjb3JyZWN0bmVzcy52YWx1ZSA9PT0gJ2luY29ycmVjdCcgJiZcbiAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RWYWwgPSBwYXJzZUZsb2F0KGNvcnJlY3REYXRhW2luZGV4XSAmJiBjb3JyZWN0RGF0YVtpbmRleF0udmFsdWUpO1xuICAgICAgICAgICAgICBpZiAoaXNOYU4oY29ycmVjdFZhbCkpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IHY7XG5cbiAgICAgICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBpZiBjb3JyZWN0IHZhbHVlIGlzIDAsIG9ubHkgc2hvdyB0aGUgaWNvbiBvbiB0aGUgYXhpc1xuICAgICAgICAgICAgICBpZiAoY29ycmVjdFZhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvcnJlY3RuZXNzSWNvbihcbiAgICAgICAgICAgICAgICAgIGJhclgsXG4gICAgICAgICAgICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgIGNvcnJlY3RWYWwsXG4gICAgICAgICAgICAgICAgICBjb3JyZWN0bmVzcyxcbiAgICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICAgcG9pbnRIZWlnaHQsXG4gICAgICAgICAgICAgICAgICBwb2ludERpYW1ldGVyLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWwgPiBjb3JyZWN0VmFsKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQgaXMgaGlnaGVyIHRoYW4gY29ycmVjdDogb3ZlcmxheSB0aGUgY29ycmVjdCBsYXN0IHNlZ21lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5VmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JyZWN0VmFsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgIG92ZXJsYXlWYWx1ZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluZGV4T2ZPdmVybGF5ID0gb3ZlcmxheVZhbHVlcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RPdmVybGF5VmFsdWUgPSBvdmVybGF5VmFsdWVzW2xhc3RJbmRleE9mT3ZlcmxheV07XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyWCA9IHhCYW5kKGJhbmRLZXkoeyBsYWJlbCB9LCBpbmRleCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhcldpZHRoID0geEJhbmQuYmFuZHdpZHRoKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRIZWlnaHQgPSBzaXplLmhlaWdodCAvIG1heDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludERpYW1ldGVyID0gKHBvaW50SGVpZ2h0ID4gYmFyV2lkdGggPyBiYXJXaWR0aCA6IHBvaW50SGVpZ2h0KSAqIDAuODtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPEN1c3RvbUJhckVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleD17bGFzdE92ZXJsYXlWYWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICBwb2ludERpYW1ldGVyPXtwb2ludERpYW1ldGVyICsgMTB9IC8vIGluY3JlYXNlIHBvaW50IGRpYW1ldGVyIGZvciBkb3R0ZWQgbGluZVxuICAgICAgICAgICAgICAgICAgICAgIGJhclg9e2Jhclh9XG4gICAgICAgICAgICAgICAgICAgICAgYmFyV2lkdGg9e2JhcldpZHRofVxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50SGVpZ2h0PXtwb2ludEhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbD17bGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgICAgICAgICAgICAgIHNjYWxlPXtzY2FsZX1cbiAgICAgICAgICAgICAgICAgICAgICBkb3R0ZWRPdmVybGluZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29ycmVjdG5lc3NJY29uKFxuICAgICAgICAgICAgICAgICAgICAgIGJhclgsXG4gICAgICAgICAgICAgICAgICAgICAgYmFyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgY29ycmVjdFZhbCxcbiAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0bmVzcyxcbiAgICAgICAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludERpYW1ldGVyLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBzZWxlY3RlZCBpcyBsb3dlciB0aGFuIGNvcnJlY3QsIHJlbmRlciBtaXNzaW5nIHNlZ21lbnQgYmVsb3cgdGhlIGNvcnJlY3QgYmFyXG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlc1RvUmVuZGVyID0gW107XG4gICAgICAgICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZFZhbDsgaSA8IGNvcnJlY3RWYWw7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhbHVlc1RvUmVuZGVyLnB1c2goaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge3ZhbHVlc1RvUmVuZGVyLm1hcCgoaWR4KSA9PlxuICAgICAgICAgICAgICAgICAgICBDdXN0b21CYXJFbGVtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaWR4LFxuICAgICAgICAgICAgICAgICAgICAgIHBvaW50RGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgYmFyWCxcbiAgICAgICAgICAgICAgICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICBkb3R0ZWRPdmVybGluZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAge3RoaXMucmVuZGVyQ29ycmVjdG5lc3NJY29uKFxuICAgICAgICAgICAgICAgICAgICBiYXJYLFxuICAgICAgICAgICAgICAgICAgICBiYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdFZhbCxcbiAgICAgICAgICAgICAgICAgICAgY29ycmVjdG5lc3MsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlLFxuICAgICAgICAgICAgICAgICAgICBwb2ludEhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnREaWFtZXRlcixcbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSgpfVxuICAgICAgICAgIDxDb21wb25lbnRcbiAgICAgICAgICAgIHg9e2Jhclh9XG4gICAgICAgICAgICB5PXt2fVxuICAgICAgICAgICAgaW50ZXJhY3RpdmU9e2ludGVyYWN0aXZlfVxuICAgICAgICAgICAgd2lkdGg9e2JhcldpZHRofVxuICAgICAgICAgICAgb25EcmFnPXsodikgPT4gdGhpcy5kcmFnVmFsdWUodmFsdWUsIHYpfVxuICAgICAgICAgICAgb25EcmFnU3RvcD17dGhpcy5kcmFnU3RvcH1cbiAgICAgICAgICAgIGdyYXBoUHJvcHM9e2dyYXBoUHJvcHN9XG4gICAgICAgICAgICBjb3JyZWN0bmVzcz17Y29ycmVjdG5lc3N9XG4gICAgICAgICAgICBpc0hvdmVyZWQ9e2lzSG92ZXJlZH1cbiAgICAgICAgICAgIGRlZmluZUNoYXJ0PXtkZWZpbmVDaGFydH1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvci5wcmltYXJ5RGFyaygpfVxuICAgICAgICAgICAgaXNQbG90XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9nPlxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IEJhciA9IHN0eWxlZChSYXdQbG90KSgoeyB0aGVtZSB9KSA9PiAoe1xuICAnJiAuZG90Jzoge1xuICAgIGZpbGw6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLlBMT1RfRklMTF9DT0xPUixcbiAgICAnJi5jb3JyZWN0JzogY29ycmVjdCgnc3Ryb2tlJyksXG4gICAgJyYuaW5jb3JyZWN0JzogaW5jb3JyZWN0KCdzdHJva2UnKSxcbiAgfSxcbiAgJyYgLmRvdENvbG9yJzoge1xuICAgIGZpbGw6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLlBMT1RfRklMTF9DT0xPUixcbiAgICAnJi5jb3JyZWN0JzogY29ycmVjdCgnZmlsbCcpLFxuICAgICcmLmluY29ycmVjdCc6IGluY29ycmVjdCgnZmlsbCcpLFxuICB9LFxuICAnJiAubGluZSc6IHtcbiAgICBzdHJva2U6IGNvbG9yLnZpc3VhbEVsZW1lbnRzQ29sb3JzLlBMT1RfRklMTF9DT0xPUixcbiAgICAnJi5jb3JyZWN0JzogY29ycmVjdCgnc3Ryb2tlJyksXG4gICAgJyYuaW5jb3JyZWN0JzogaW5jb3JyZWN0KCdzdHJva2UnKSxcbiAgfSxcbiAgJyYgLmNvcnJlY3RJY29uJzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuY29ycmVjdCgpLFxuICB9LFxuICAnJiAuaW5jb3JyZWN0SWNvbic6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmluY29ycmVjdFdpdGhJY29uKCksXG4gIH0sXG4gICcmIC5jb3JyZWN0bmVzc0ljb24nOiB7XG4gICAgYm9yZGVyUmFkaXVzOiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgIGNvbG9yOiBjb2xvci5kZWZhdWx0cy5XSElURSxcbiAgICBmb250U2l6ZTogJzE2cHgnLFxuICAgIHdpZHRoOiAnMTZweCcsXG4gICAgaGVpZ2h0OiAnMTZweCcsXG4gICAgcGFkZGluZzogJzJweCcsXG4gICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7Y29sb3IuZGVmYXVsdHMuV0hJVEV9YCxcbiAgICBzdHJva2U6ICdpbml0aWFsJyxcbiAgICBib3hTaXppbmc6ICd1bnNldCcsIC8vIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJvcmRlci1ib3ggaW4gSUJYXG4gICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgfSxcbiAgJyYgLnNtYWxsSWNvbic6IHtcbiAgICBmb250U2l6ZTogJzEwcHgnLFxuICAgIHdpZHRoOiAnMTBweCcsXG4gICAgaGVpZ2h0OiAnMTBweCcsXG4gIH0sXG59KSk7XG5cbmV4cG9ydCBjbGFzcyBQbG90IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgb25DaGFuZ2VDYXRlZ29yeTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgeEJhbmQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdyYXBoUHJvcHM6IHR5cGVzLkdyYXBoUHJvcHNUeXBlLmlzUmVxdWlyZWQsXG4gICAgZGVmaW5lQ2hhcnQ6IFByb3BUeXBlcy5ib29sLFxuICAgIEN1c3RvbUJhckVsZW1lbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGNvcnJlY3REYXRhOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgdmFsdWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgICAgIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pKSxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGF0YSwgZ3JhcGhQcm9wcywgeEJhbmQsIEN1c3RvbUJhckVsZW1lbnQsIG9uQ2hhbmdlQ2F0ZWdvcnksIGRlZmluZUNoYXJ0LCBjb3JyZWN0RGF0YSB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8R3JvdXA+XG4gICAgICAgIHsoZGF0YSB8fCBbXSkubWFwKChkLCBpbmRleCkgPT4gKFxuICAgICAgICAgIDxCYXJcbiAgICAgICAgICAgIHZhbHVlPXtkLnZhbHVlfVxuICAgICAgICAgICAgbGFiZWw9e2QubGFiZWx9XG4gICAgICAgICAgICBpbnRlcmFjdGl2ZT17ZGVmaW5lQ2hhcnQgfHwgZC5pbnRlcmFjdGl2ZX1cbiAgICAgICAgICAgIGRlZmluZUNoYXJ0PXtkZWZpbmVDaGFydH1cbiAgICAgICAgICAgIHhCYW5kPXt4QmFuZH1cbiAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgIGtleT17YGJhci0ke2QubGFiZWx9LSR7ZC52YWx1ZX0tJHtpbmRleH1gfVxuICAgICAgICAgICAgb25DaGFuZ2VDYXRlZ29yeT17KGNhdGVnb3J5KSA9PiBvbkNoYW5nZUNhdGVnb3J5KGluZGV4LCBjYXRlZ29yeSl9XG4gICAgICAgICAgICBncmFwaFByb3BzPXtncmFwaFByb3BzfVxuICAgICAgICAgICAgQ3VzdG9tQmFyRWxlbWVudD17Q3VzdG9tQmFyRWxlbWVudH1cbiAgICAgICAgICAgIGNvcnJlY3RuZXNzPXtkLmNvcnJlY3RuZXNzfVxuICAgICAgICAgICAgY29ycmVjdERhdGE9e2NvcnJlY3REYXRhfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9Hcm91cD5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBk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
|