@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/chart-setup.js
CHANGED
|
@@ -1,116 +1,141 @@
|
|
|
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.resetValues = exports["default"] = void 0;
|
|
11
|
-
|
|
12
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
|
-
|
|
14
10
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
|
-
|
|
16
11
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
-
|
|
18
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
19
|
-
|
|
20
13
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
21
|
-
|
|
22
14
|
var _renderUi = require("@pie-lib/render-ui");
|
|
23
|
-
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
27
|
-
|
|
15
|
+
var _styles = require("@mui/material/styles");
|
|
16
|
+
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
28
17
|
var _chartType = _interopRequireDefault(require("./chart-type"));
|
|
29
|
-
|
|
30
18
|
var _configUi = require("@pie-lib/config-ui");
|
|
31
|
-
|
|
32
|
-
function
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
37
|
-
|
|
38
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
39
|
-
|
|
40
|
-
var resetValues = function resetValues(data, updateModel, range, onChange, model) {
|
|
19
|
+
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); }
|
|
20
|
+
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; }
|
|
21
|
+
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; }
|
|
22
|
+
var resetValues = exports.resetValues = function resetValues(data, updateModel, range, onChange, model) {
|
|
41
23
|
(data || []).forEach(function (d) {
|
|
42
24
|
var d_value_scaled = Math.round(d.value * 10);
|
|
43
25
|
var range_step_scaled = Math.round(range.step * 10);
|
|
44
26
|
var remainder_scaled = d_value_scaled % range_step_scaled;
|
|
45
27
|
var remainder = remainder_scaled / 10;
|
|
46
|
-
|
|
47
28
|
if (d.value > range.max || remainder !== 0) {
|
|
48
29
|
d.value = 0;
|
|
49
30
|
}
|
|
50
31
|
});
|
|
51
|
-
|
|
52
32
|
if (updateModel) {
|
|
53
33
|
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
54
34
|
data: data
|
|
55
35
|
}));
|
|
56
36
|
}
|
|
57
37
|
};
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
38
|
+
var StyledWrapper = (0, _styles.styled)('div')(function () {
|
|
39
|
+
return {
|
|
40
|
+
width: '450px'
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
var StyledContent = (0, _styles.styled)('div')(function (_ref) {
|
|
44
|
+
var theme = _ref.theme;
|
|
45
|
+
return {
|
|
46
|
+
display: 'flex',
|
|
47
|
+
flexDirection: 'column',
|
|
48
|
+
width: '100%',
|
|
49
|
+
marginTop: theme.spacing(3)
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
var StyledColumnView = (0, _styles.styled)('div')(function () {
|
|
53
|
+
return {
|
|
54
|
+
display: 'flex',
|
|
55
|
+
flexDirection: 'column',
|
|
56
|
+
alignItems: 'center'
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
var StyledRowView = (0, _styles.styled)('div')(function () {
|
|
60
|
+
return {
|
|
61
|
+
display: 'flex',
|
|
62
|
+
justifyContent: 'space-around',
|
|
63
|
+
alignItems: 'center'
|
|
64
|
+
};
|
|
65
|
+
});
|
|
66
|
+
var StyledTextField = (0, _styles.styled)(_configUi.NumberTextFieldCustom)(function (_ref2) {
|
|
67
|
+
var theme = _ref2.theme;
|
|
68
|
+
return {
|
|
69
|
+
width: '130px',
|
|
70
|
+
margin: "".concat(theme.spacing(1), " ").concat(theme.spacing(0.5))
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
var StyledMediumTextField = (0, _styles.styled)(_configUi.NumberTextFieldCustom)(function (_ref3) {
|
|
74
|
+
var theme = _ref3.theme;
|
|
75
|
+
return {
|
|
76
|
+
width: '160px',
|
|
77
|
+
margin: "".concat(theme.spacing(1), " ").concat(theme.spacing(0.5))
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
var StyledDimensions = (0, _styles.styled)('div')(function (_ref4) {
|
|
81
|
+
var theme = _ref4.theme;
|
|
82
|
+
return {
|
|
83
|
+
display: 'flex',
|
|
84
|
+
justifyContent: 'space-between',
|
|
85
|
+
alignItems: 'center',
|
|
86
|
+
margin: "".concat(theme.spacing(3), " 0")
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
var StyledDisabled = (0, _styles.styled)(_Typography["default"])(function () {
|
|
90
|
+
return {
|
|
91
|
+
color: _renderUi.color.disabled()
|
|
92
|
+
};
|
|
93
|
+
});
|
|
61
94
|
var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
62
|
-
var
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
chartTypeLabel = props.chartTypeLabel;
|
|
75
|
-
|
|
95
|
+
var model = props.model,
|
|
96
|
+
onChange = props.onChange,
|
|
97
|
+
chartDimensions = props.chartDimensions,
|
|
98
|
+
_props$gridValues = props.gridValues,
|
|
99
|
+
gridValues = _props$gridValues === void 0 ? {} : _props$gridValues,
|
|
100
|
+
_props$labelValues = props.labelValues,
|
|
101
|
+
labelValues = _props$labelValues === void 0 ? {} : _props$labelValues,
|
|
102
|
+
_props$studentNewCate = props.studentNewCategoryDefaultLabel,
|
|
103
|
+
studentNewCategoryDefaultLabel = _props$studentNewCate === void 0 ? {} : _props$studentNewCate,
|
|
104
|
+
_props$availableChart = props.availableChartTypes,
|
|
105
|
+
availableChartTypes = _props$availableChart === void 0 ? {} : _props$availableChart,
|
|
106
|
+
chartTypeLabel = props.chartTypeLabel;
|
|
76
107
|
var _useState = (0, _react.useState)({
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
108
|
+
open: false,
|
|
109
|
+
title: '',
|
|
110
|
+
text: '',
|
|
111
|
+
onClose: null,
|
|
112
|
+
onConfirm: null
|
|
113
|
+
}),
|
|
114
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
115
|
+
alertDialog = _useState2[0],
|
|
116
|
+
setAlertDialog = _useState2[1];
|
|
87
117
|
var _useState3 = (0, _react.useState)(false),
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
118
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
119
|
+
open = _useState4[0],
|
|
120
|
+
setOpen = _useState4[1];
|
|
92
121
|
var _useState5 = (0, _react.useState)(''),
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
122
|
+
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
|
|
123
|
+
rangeKey = _useState6[0],
|
|
124
|
+
setRangeKey = _useState6[1];
|
|
97
125
|
var _useState7 = (0, _react.useState)(0),
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
126
|
+
_useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
|
|
127
|
+
resetValue = _useState8[0],
|
|
128
|
+
setResetValue = _useState8[1];
|
|
102
129
|
var _model$range = model.range,
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
130
|
+
range = _model$range === void 0 ? {} : _model$range,
|
|
131
|
+
correctAnswer = model.correctAnswer,
|
|
132
|
+
changeInteractiveEnabled = model.changeInteractiveEnabled,
|
|
133
|
+
changeEditableEnabled = model.changeEditableEnabled;
|
|
107
134
|
var size = model.graph;
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
height = _ref.height;
|
|
113
|
-
|
|
135
|
+
var _ref5 = chartDimensions || {},
|
|
136
|
+
showInConfigPanel = _ref5.showInConfigPanel,
|
|
137
|
+
width = _ref5.width,
|
|
138
|
+
height = _ref5.height;
|
|
114
139
|
var widthConstraints = {
|
|
115
140
|
min: width !== null && width !== void 0 && width.min ? Math.max(50, width.min) : 50,
|
|
116
141
|
max: width !== null && width !== void 0 && width.max ? Math.min(700, width.max) : 700,
|
|
@@ -133,19 +158,14 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
133
158
|
min: 0,
|
|
134
159
|
max: 10000
|
|
135
160
|
};
|
|
136
|
-
|
|
137
|
-
var stepConfig = /*#__PURE__*/_react["default"].createElement("div", {
|
|
138
|
-
className: classes.rowView
|
|
139
|
-
}, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, (0, _extends2["default"])({
|
|
140
|
-
className: classes.mediumTextField,
|
|
161
|
+
var stepConfig = /*#__PURE__*/_react["default"].createElement(StyledRowView, null, /*#__PURE__*/_react["default"].createElement(StyledMediumTextField, (0, _extends2["default"])({
|
|
141
162
|
label: "Grid Interval",
|
|
142
163
|
value: range.step,
|
|
143
164
|
variant: "outlined",
|
|
144
165
|
onChange: function onChange(e, v) {
|
|
145
166
|
return onRangeChanged('step', v, e);
|
|
146
167
|
}
|
|
147
|
-
}, gridOptions)), /*#__PURE__*/_react["default"].createElement(
|
|
148
|
-
className: classes.mediumTextField,
|
|
168
|
+
}, gridOptions)), /*#__PURE__*/_react["default"].createElement(StyledMediumTextField, (0, _extends2["default"])({
|
|
149
169
|
label: 'Label Interval',
|
|
150
170
|
value: range.labelStep,
|
|
151
171
|
variant: 'outlined',
|
|
@@ -153,53 +173,40 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
153
173
|
return onRangeChanged('labelStep', v, e);
|
|
154
174
|
}
|
|
155
175
|
}, labelOptions)));
|
|
156
|
-
|
|
157
|
-
var handleAlertDialog = function handleAlertDialog(openStatus, callback) {
|
|
176
|
+
var handleAlertDialog = function handleAlertDialog(openStatus) {
|
|
158
177
|
setAlertDialog(function (prevState) {
|
|
159
178
|
return _objectSpread(_objectSpread({}, prevState), {}, {
|
|
160
179
|
open: openStatus
|
|
161
180
|
});
|
|
162
|
-
}, function () {
|
|
163
|
-
if (callback) {
|
|
164
|
-
callback();
|
|
165
|
-
}
|
|
166
181
|
});
|
|
167
182
|
setOpen(openStatus);
|
|
168
183
|
};
|
|
169
|
-
|
|
170
184
|
var setPropertiesToFalse = function setPropertiesToFalse(data, property) {
|
|
171
185
|
return data.map(function (obj) {
|
|
172
|
-
if (
|
|
186
|
+
if (Object.prototype.hasOwnProperty.call(obj, property)) {
|
|
173
187
|
obj[property] = property == 'interactive' ? true : false;
|
|
174
188
|
}
|
|
175
|
-
|
|
176
189
|
return obj;
|
|
177
190
|
});
|
|
178
191
|
};
|
|
179
|
-
|
|
180
192
|
var removeOutOfRangeValues = function removeOutOfRangeValues(updateModel) {
|
|
181
193
|
var correctAnswer = model.correctAnswer,
|
|
182
|
-
|
|
183
|
-
|
|
194
|
+
data = model.data;
|
|
184
195
|
if (changeInteractiveEnabled === false) {
|
|
185
196
|
setPropertiesToFalse(data, 'interactive');
|
|
186
197
|
}
|
|
187
|
-
|
|
188
198
|
if (changeEditableEnabled === false) {
|
|
189
199
|
setPropertiesToFalse(data, 'editable');
|
|
190
200
|
}
|
|
191
|
-
|
|
192
201
|
resetValues(data, updateModel, range, onChange, model);
|
|
193
202
|
resetValues(correctAnswer.data, false, range, onChange, model);
|
|
194
203
|
};
|
|
195
|
-
|
|
196
204
|
var setCategoryDefaultLabel = function setCategoryDefaultLabel() {
|
|
197
205
|
var studentCategoryDefaultLabel = studentNewCategoryDefaultLabel === null || studentNewCategoryDefaultLabel === void 0 ? void 0 : studentNewCategoryDefaultLabel.label;
|
|
198
206
|
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
199
207
|
studentCategoryDefaultLabel: studentCategoryDefaultLabel
|
|
200
208
|
}));
|
|
201
209
|
};
|
|
202
|
-
|
|
203
210
|
var rangeProps = function rangeProps(chartType) {
|
|
204
211
|
return chartType.includes('Plot') ? {
|
|
205
212
|
min: 3,
|
|
@@ -209,32 +216,26 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
209
216
|
max: 10000
|
|
210
217
|
};
|
|
211
218
|
};
|
|
212
|
-
|
|
213
219
|
var onSizeChanged = function onSizeChanged(key, value) {
|
|
214
220
|
var graph = _objectSpread(_objectSpread({}, size), {}, (0, _defineProperty2["default"])({}, key, value));
|
|
215
|
-
|
|
216
221
|
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
217
222
|
graph: graph
|
|
218
223
|
}));
|
|
219
224
|
};
|
|
220
|
-
|
|
221
225
|
var isOutOfRange = function isOutOfRange(data, range) {
|
|
222
226
|
return (data || []).find(function (d) {
|
|
223
227
|
return d.value > range.max || d.value - range.step * Math.floor(d.value / range.step) !== 0;
|
|
224
228
|
});
|
|
225
229
|
};
|
|
226
|
-
|
|
227
230
|
var onRangeChanged = function onRangeChanged(key, value, e) {
|
|
228
231
|
// use reset values to restore range to initial values
|
|
229
232
|
setResetValue(range[key]);
|
|
230
233
|
setRangeKey(key);
|
|
231
234
|
range[key] = value;
|
|
232
|
-
|
|
233
235
|
if (key === 'max' || key === 'step') {
|
|
234
236
|
// check if current chart values are invalid for given range step/max
|
|
235
237
|
var outOfRange = isOutOfRange(model.data, range) || isOutOfRange(model.correctAnswer.data, range);
|
|
236
|
-
|
|
237
|
-
if (outOfRange && JSON.stringify(e) !== '{}') {
|
|
238
|
+
if (outOfRange && e !== null && e !== void 0 && e.target) {
|
|
238
239
|
setOpen(true);
|
|
239
240
|
} else {
|
|
240
241
|
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
@@ -247,7 +248,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
247
248
|
}));
|
|
248
249
|
}
|
|
249
250
|
};
|
|
250
|
-
|
|
251
251
|
(0, _react.useEffect)(function () {
|
|
252
252
|
removeOutOfRangeValues(true);
|
|
253
253
|
setCategoryDefaultLabel();
|
|
@@ -260,10 +260,11 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
260
260
|
text: 'This change will remove values defined for one or more categories',
|
|
261
261
|
onConfirm: function onConfirm() {
|
|
262
262
|
removeOutOfRangeValues();
|
|
263
|
-
handleAlertDialog(false
|
|
263
|
+
handleAlertDialog(false);
|
|
264
|
+
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
264
265
|
range: range,
|
|
265
266
|
correctAnswer: correctAnswer
|
|
266
|
-
}))
|
|
267
|
+
}));
|
|
267
268
|
},
|
|
268
269
|
onClose: function onClose() {
|
|
269
270
|
range[rangeKey] = resetValue;
|
|
@@ -273,7 +274,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
273
274
|
}
|
|
274
275
|
}, [open]);
|
|
275
276
|
var isValidPlot = range.step === 1 && range.labelStep === 1 && 3 <= range.max && range.max <= 10;
|
|
276
|
-
|
|
277
277
|
var getPlotConfiguration = function getPlotConfiguration() {
|
|
278
278
|
rangeProps.min = 3;
|
|
279
279
|
rangeProps.max = 10;
|
|
@@ -284,7 +284,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
284
284
|
range: range
|
|
285
285
|
}));
|
|
286
286
|
};
|
|
287
|
-
|
|
288
287
|
var onChartTypeChange = function onChartTypeChange(chartType) {
|
|
289
288
|
if (chartType.includes('Plot')) {
|
|
290
289
|
// The selected chart type does not support the current chart configuration
|
|
@@ -296,10 +295,11 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
296
295
|
onConfirm: function onConfirm() {
|
|
297
296
|
getPlotConfiguration();
|
|
298
297
|
removeOutOfRangeValues();
|
|
299
|
-
handleAlertDialog(false
|
|
298
|
+
handleAlertDialog(false);
|
|
299
|
+
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
300
300
|
range: range,
|
|
301
301
|
chartType: chartType
|
|
302
|
-
}))
|
|
302
|
+
}));
|
|
303
303
|
},
|
|
304
304
|
onClose: function onClose() {
|
|
305
305
|
handleAlertDialog(false);
|
|
@@ -307,7 +307,6 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
307
307
|
});
|
|
308
308
|
return;
|
|
309
309
|
}
|
|
310
|
-
|
|
311
310
|
rangeProps.min = 3;
|
|
312
311
|
rangeProps.max = 10;
|
|
313
312
|
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
@@ -315,29 +314,20 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
315
314
|
}));
|
|
316
315
|
return;
|
|
317
316
|
}
|
|
318
|
-
|
|
319
317
|
onChange(_objectSpread(_objectSpread({}, model), {}, {
|
|
320
318
|
chartType: chartType
|
|
321
319
|
}));
|
|
322
320
|
};
|
|
323
|
-
|
|
324
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
325
|
-
className: classes.wrapper
|
|
326
|
-
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
321
|
+
return /*#__PURE__*/_react["default"].createElement(StyledWrapper, null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
327
322
|
variant: 'subtitle1'
|
|
328
|
-
}, "Configure Chart"), /*#__PURE__*/_react["default"].createElement("
|
|
329
|
-
className: classes.content
|
|
330
|
-
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
331
|
-
className: classes.rowView
|
|
332
|
-
}, /*#__PURE__*/_react["default"].createElement(_chartType["default"], {
|
|
323
|
+
}, "Configure Chart"), /*#__PURE__*/_react["default"].createElement(StyledContent, null, /*#__PURE__*/_react["default"].createElement(StyledRowView, null, /*#__PURE__*/_react["default"].createElement(_chartType["default"], {
|
|
333
324
|
value: model.chartType,
|
|
334
325
|
onChange: function onChange(e) {
|
|
335
326
|
return onChartTypeChange(e.target.value);
|
|
336
327
|
},
|
|
337
328
|
availableChartTypes: availableChartTypes,
|
|
338
329
|
chartTypeLabel: chartTypeLabel
|
|
339
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
340
|
-
className: classes.mediumTextField,
|
|
330
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledMediumTextField, {
|
|
341
331
|
label: "Max Value",
|
|
342
332
|
value: range.max,
|
|
343
333
|
min: rangeProps(model.chartType).min,
|
|
@@ -346,12 +336,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
346
336
|
onChange: function onChange(e, v) {
|
|
347
337
|
return onRangeChanged('max', v, e);
|
|
348
338
|
}
|
|
349
|
-
})), !model.chartType.includes('Plot') && stepConfig, showInConfigPanel && /*#__PURE__*/_react["default"].createElement("div", {
|
|
350
|
-
className: classes.dimensions
|
|
351
|
-
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
352
|
-
className: classes.columnView
|
|
353
|
-
}, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
|
|
354
|
-
className: classes.textField,
|
|
339
|
+
})), !model.chartType.includes('Plot') && stepConfig, showInConfigPanel && /*#__PURE__*/_react["default"].createElement(StyledDimensions, null, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], null, "Dimensions(px)")), /*#__PURE__*/_react["default"].createElement(StyledColumnView, null, /*#__PURE__*/_react["default"].createElement(StyledTextField, {
|
|
355
340
|
label: 'Width',
|
|
356
341
|
value: size.width,
|
|
357
342
|
min: widthConstraints.min,
|
|
@@ -361,12 +346,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
361
346
|
onChange: function onChange(e, v) {
|
|
362
347
|
return onSizeChanged('width', v);
|
|
363
348
|
}
|
|
364
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
365
|
-
className: classes.disabled
|
|
366
|
-
}, "Min 50, Max 700")), /*#__PURE__*/_react["default"].createElement("div", {
|
|
367
|
-
className: classes.columnView
|
|
368
|
-
}, /*#__PURE__*/_react["default"].createElement(_configUi.NumberTextFieldCustom, {
|
|
369
|
-
className: classes.textField,
|
|
349
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledDisabled, null, "Min 50, Max 700")), /*#__PURE__*/_react["default"].createElement(StyledColumnView, null, /*#__PURE__*/_react["default"].createElement(StyledTextField, {
|
|
370
350
|
label: 'Height',
|
|
371
351
|
value: size.height,
|
|
372
352
|
min: heightConstraints.min,
|
|
@@ -376,9 +356,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
376
356
|
onChange: function onChange(e, v) {
|
|
377
357
|
return onSizeChanged('height', v);
|
|
378
358
|
}
|
|
379
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
380
|
-
className: classes.disabled
|
|
381
|
-
}, "Min 400, Max 700")))), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
|
|
359
|
+
}), /*#__PURE__*/_react["default"].createElement(StyledDisabled, null, "Min 400, Max 700")))), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
|
|
382
360
|
open: alertDialog.open,
|
|
383
361
|
title: alertDialog.title,
|
|
384
362
|
text: alertDialog.text,
|
|
@@ -386,9 +364,7 @@ var ConfigureChartPanel = function ConfigureChartPanel(props) {
|
|
|
386
364
|
onConfirm: alertDialog.onConfirm
|
|
387
365
|
}));
|
|
388
366
|
};
|
|
389
|
-
|
|
390
367
|
ConfigureChartPanel.propTypes = {
|
|
391
|
-
classes: _propTypes["default"].object,
|
|
392
368
|
chartDimensions: _propTypes["default"].object,
|
|
393
369
|
domain: _propTypes["default"].object,
|
|
394
370
|
gridValues: _propTypes["default"].object,
|
|
@@ -402,57 +378,5 @@ ConfigureChartPanel.propTypes = {
|
|
|
402
378
|
availableChartTypes: _propTypes["default"].object,
|
|
403
379
|
chartTypeLabel: _propTypes["default"].string
|
|
404
380
|
};
|
|
405
|
-
|
|
406
|
-
var styles = function styles(theme) {
|
|
407
|
-
return {
|
|
408
|
-
wrapper: {
|
|
409
|
-
width: '450px'
|
|
410
|
-
},
|
|
411
|
-
content: {
|
|
412
|
-
display: 'flex',
|
|
413
|
-
flexDirection: 'column',
|
|
414
|
-
width: '100%',
|
|
415
|
-
marginTop: theme.spacing.unit * 3
|
|
416
|
-
},
|
|
417
|
-
columnView: {
|
|
418
|
-
display: 'flex',
|
|
419
|
-
flexDirection: 'column',
|
|
420
|
-
alignItems: 'center'
|
|
421
|
-
},
|
|
422
|
-
rowView: {
|
|
423
|
-
display: 'flex',
|
|
424
|
-
justifyContent: 'space-around',
|
|
425
|
-
alignItems: 'center'
|
|
426
|
-
},
|
|
427
|
-
textField: {
|
|
428
|
-
width: '130px',
|
|
429
|
-
margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
|
|
430
|
-
},
|
|
431
|
-
mediumTextField: {
|
|
432
|
-
width: '160px',
|
|
433
|
-
margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
|
|
434
|
-
},
|
|
435
|
-
largeTextField: {
|
|
436
|
-
width: '230px',
|
|
437
|
-
margin: "".concat(theme.spacing.unit, "px ").concat(theme.spacing.unit / 2, "px")
|
|
438
|
-
},
|
|
439
|
-
text: {
|
|
440
|
-
fontStyle: 'italic',
|
|
441
|
-
margin: "".concat(theme.spacing.unit, "px 0")
|
|
442
|
-
},
|
|
443
|
-
dimensions: {
|
|
444
|
-
display: 'flex',
|
|
445
|
-
justifyContent: 'space-between',
|
|
446
|
-
alignItems: 'center',
|
|
447
|
-
margin: "".concat(theme.spacing.unit * 3, "px 0")
|
|
448
|
-
},
|
|
449
|
-
disabled: {
|
|
450
|
-
color: _renderUi.color.disabled()
|
|
451
|
-
}
|
|
452
|
-
};
|
|
453
|
-
};
|
|
454
|
-
|
|
455
|
-
var _default = (0, _styles.withStyles)(styles)(ConfigureChartPanel);
|
|
456
|
-
|
|
457
|
-
exports["default"] = _default;
|
|
458
|
-
//# sourceMappingURL=chart-setup.js.map
|
|
381
|
+
var _default = exports["default"] = ConfigureChartPanel;
|
|
382
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZW5kZXJVaSIsIl9zdHlsZXMiLCJfVHlwb2dyYXBoeSIsIl9jaGFydFR5cGUiLCJfY29uZmlnVWkiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmVzZXRWYWx1ZXMiLCJleHBvcnRzIiwiZGF0YSIsInVwZGF0ZU1vZGVsIiwicmFuZ2UiLCJvbkNoYW5nZSIsIm1vZGVsIiwiZCIsImRfdmFsdWVfc2NhbGVkIiwiTWF0aCIsInJvdW5kIiwidmFsdWUiLCJyYW5nZV9zdGVwX3NjYWxlZCIsInN0ZXAiLCJyZW1haW5kZXJfc2NhbGVkIiwicmVtYWluZGVyIiwibWF4IiwiU3R5bGVkV3JhcHBlciIsInN0eWxlZCIsIndpZHRoIiwiU3R5bGVkQ29udGVudCIsIl9yZWYiLCJ0aGVtZSIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwibWFyZ2luVG9wIiwic3BhY2luZyIsIlN0eWxlZENvbHVtblZpZXciLCJhbGlnbkl0ZW1zIiwiU3R5bGVkUm93VmlldyIsImp1c3RpZnlDb250ZW50IiwiU3R5bGVkVGV4dEZpZWxkIiwiTnVtYmVyVGV4dEZpZWxkQ3VzdG9tIiwiX3JlZjIiLCJtYXJnaW4iLCJjb25jYXQiLCJTdHlsZWRNZWRpdW1UZXh0RmllbGQiLCJfcmVmMyIsIlN0eWxlZERpbWVuc2lvbnMiLCJfcmVmNCIsIlN0eWxlZERpc2FibGVkIiwiVHlwb2dyYXBoeSIsImNvbG9yIiwiZGlzYWJsZWQiLCJDb25maWd1cmVDaGFydFBhbmVsIiwicHJvcHMiLCJjaGFydERpbWVuc2lvbnMiLCJfcHJvcHMkZ3JpZFZhbHVlcyIsImdyaWRWYWx1ZXMiLCJfcHJvcHMkbGFiZWxWYWx1ZXMiLCJsYWJlbFZhbHVlcyIsIl9wcm9wcyRzdHVkZW50TmV3Q2F0ZSIsInN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbCIsIl9wcm9wcyRhdmFpbGFibGVDaGFydCIsImF2YWlsYWJsZUNoYXJ0VHlwZXMiLCJjaGFydFR5cGVMYWJlbCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwib3BlbiIsInRpdGxlIiwidGV4dCIsIm9uQ2xvc2UiLCJvbkNvbmZpcm0iLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiYWxlcnREaWFsb2ciLCJzZXRBbGVydERpYWxvZyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2V0T3BlbiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwicmFuZ2VLZXkiLCJzZXRSYW5nZUtleSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicmVzZXRWYWx1ZSIsInNldFJlc2V0VmFsdWUiLCJfbW9kZWwkcmFuZ2UiLCJjb3JyZWN0QW5zd2VyIiwiY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkIiwiY2hhbmdlRWRpdGFibGVFbmFibGVkIiwic2l6ZSIsImdyYXBoIiwiX3JlZjUiLCJzaG93SW5Db25maWdQYW5lbCIsImhlaWdodCIsIndpZHRoQ29uc3RyYWludHMiLCJtaW4iLCJoZWlnaHRDb25zdHJhaW50cyIsImdyaWRPcHRpb25zIiwiY3VzdG9tVmFsdWVzIiwibGFiZWxPcHRpb25zIiwic3RlcENvbmZpZyIsImNyZWF0ZUVsZW1lbnQiLCJfZXh0ZW5kczIiLCJsYWJlbCIsInZhcmlhbnQiLCJ2Iiwib25SYW5nZUNoYW5nZWQiLCJsYWJlbFN0ZXAiLCJoYW5kbGVBbGVydERpYWxvZyIsIm9wZW5TdGF0dXMiLCJwcmV2U3RhdGUiLCJzZXRQcm9wZXJ0aWVzVG9GYWxzZSIsInByb3BlcnR5IiwibWFwIiwib2JqIiwicHJvdG90eXBlIiwicmVtb3ZlT3V0T2ZSYW5nZVZhbHVlcyIsInNldENhdGVnb3J5RGVmYXVsdExhYmVsIiwic3R1ZGVudENhdGVnb3J5RGVmYXVsdExhYmVsIiwicmFuZ2VQcm9wcyIsImNoYXJ0VHlwZSIsImluY2x1ZGVzIiwib25TaXplQ2hhbmdlZCIsImtleSIsImlzT3V0T2ZSYW5nZSIsImZpbmQiLCJmbG9vciIsIm91dE9mUmFuZ2UiLCJ0YXJnZXQiLCJ1c2VFZmZlY3QiLCJpc1ZhbGlkUGxvdCIsImdldFBsb3RDb25maWd1cmF0aW9uIiwib25DaGFydFR5cGVDaGFuZ2UiLCJBbGVydERpYWxvZyIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9iamVjdCIsImRvbWFpbiIsImZ1bmMiLCJjaGFydERpbWVuc2lvbiIsInN0cmluZyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vc3JjL2NoYXJ0LXNldHVwLmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ0BwaWUtbGliL3JlbmRlci11aSc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuaW1wb3J0IENoYXJ0VHlwZSBmcm9tICcuL2NoYXJ0LXR5cGUnO1xuaW1wb3J0IHsgTnVtYmVyVGV4dEZpZWxkQ3VzdG9tIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCB7IEFsZXJ0RGlhbG9nIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcblxuZXhwb3J0IGNvbnN0IHJlc2V0VmFsdWVzID0gKGRhdGEsIHVwZGF0ZU1vZGVsLCByYW5nZSwgb25DaGFuZ2UsIG1vZGVsKSA9PiB7XG4gIChkYXRhIHx8IFtdKS5mb3JFYWNoKChkKSA9PiB7XG4gICAgY29uc3QgZF92YWx1ZV9zY2FsZWQgPSBNYXRoLnJvdW5kKGQudmFsdWUgKiAxMCk7XG4gICAgY29uc3QgcmFuZ2Vfc3RlcF9zY2FsZWQgPSBNYXRoLnJvdW5kKHJhbmdlLnN0ZXAgKiAxMCk7XG4gICAgY29uc3QgcmVtYWluZGVyX3NjYWxlZCA9IGRfdmFsdWVfc2NhbGVkICUgcmFuZ2Vfc3RlcF9zY2FsZWQ7XG4gICAgY29uc3QgcmVtYWluZGVyID0gcmVtYWluZGVyX3NjYWxlZCAvIDEwO1xuXG4gICAgaWYgKGQudmFsdWUgPiByYW5nZS5tYXggfHwgcmVtYWluZGVyICE9PSAwKSB7XG4gICAgICBkLnZhbHVlID0gMDtcbiAgICB9XG4gIH0pO1xuXG4gIGlmICh1cGRhdGVNb2RlbCkge1xuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIGRhdGEgfSk7XG4gIH1cbn07XG5cbmNvbnN0IFN0eWxlZFdyYXBwZXIgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7XG4gIHdpZHRoOiAnNDUwcHgnLFxufSkpO1xuXG5jb25zdCBTdHlsZWRDb250ZW50ID0gc3R5bGVkKCdkaXYnKSgoeyB0aGVtZSB9KSA9PiAoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB3aWR0aDogJzEwMCUnLFxuICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMyksXG59KSk7XG5cbmNvbnN0IFN0eWxlZENvbHVtblZpZXcgPSBzdHlsZWQoJ2RpdicpKCgpID0+ICh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxufSkpO1xuXG5jb25zdCBTdHlsZWRSb3dWaWV3ID0gc3R5bGVkKCdkaXYnKSgoKSA9PiAoe1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG59KSk7XG5cbmNvbnN0IFN0eWxlZFRleHRGaWVsZCA9IHN0eWxlZChOdW1iZXJUZXh0RmllbGRDdXN0b20pKCh7IHRoZW1lIH0pID0+ICh7XG4gIHdpZHRoOiAnMTMwcHgnLFxuICBtYXJnaW46IGAke3RoZW1lLnNwYWNpbmcoMSl9ICR7dGhlbWUuc3BhY2luZygwLjUpfWAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZE1lZGl1bVRleHRGaWVsZCA9IHN0eWxlZChOdW1iZXJUZXh0RmllbGRDdXN0b20pKCh7IHRoZW1lIH0pID0+ICh7XG4gIHdpZHRoOiAnMTYwcHgnLFxuICBtYXJnaW46IGAke3RoZW1lLnNwYWNpbmcoMSl9ICR7dGhlbWUuc3BhY2luZygwLjUpfWAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZERpbWVuc2lvbnMgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGRpc3BsYXk6ICdmbGV4JyxcbiAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIG1hcmdpbjogYCR7dGhlbWUuc3BhY2luZygzKX0gMGAsXG59KSk7XG5cbmNvbnN0IFN0eWxlZERpc2FibGVkID0gc3R5bGVkKFR5cG9ncmFwaHkpKCgpID0+ICh7XG4gIGNvbG9yOiBjb2xvci5kaXNhYmxlZCgpLFxufSkpO1xuXG5jb25zdCBDb25maWd1cmVDaGFydFBhbmVsID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBtb2RlbCxcbiAgICBvbkNoYW5nZSxcbiAgICBjaGFydERpbWVuc2lvbnMsXG4gICAgZ3JpZFZhbHVlcyA9IHt9LFxuICAgIGxhYmVsVmFsdWVzID0ge30sXG4gICAgc3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsID0ge30sXG4gICAgYXZhaWxhYmxlQ2hhcnRUeXBlcyA9IHt9LFxuICAgIGNoYXJ0VHlwZUxhYmVsLFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFthbGVydERpYWxvZywgc2V0QWxlcnREaWFsb2ddID0gdXNlU3RhdGUoe1xuICAgIG9wZW46IGZhbHNlLFxuICAgIHRpdGxlOiAnJyxcbiAgICB0ZXh0OiAnJyxcbiAgICBvbkNsb3NlOiBudWxsLFxuICAgIG9uQ29uZmlybTogbnVsbCxcbiAgfSk7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3JhbmdlS2V5LCBzZXRSYW5nZUtleV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtyZXNldFZhbHVlLCBzZXRSZXNldFZhbHVlXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHsgcmFuZ2UgPSB7fSwgY29ycmVjdEFuc3dlciwgY2hhbmdlSW50ZXJhY3RpdmVFbmFibGVkLCBjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgfSA9IG1vZGVsO1xuXG4gIGNvbnN0IHNpemUgPSBtb2RlbC5ncmFwaDtcbiAgY29uc3QgeyBzaG93SW5Db25maWdQYW5lbCwgd2lkdGgsIGhlaWdodCB9ID0gY2hhcnREaW1lbnNpb25zIHx8IHt9O1xuXG4gIGNvbnN0IHdpZHRoQ29uc3RyYWludHMgPSB7XG4gICAgbWluOiB3aWR0aD8ubWluID8gTWF0aC5tYXgoNTAsIHdpZHRoLm1pbikgOiA1MCxcbiAgICBtYXg6IHdpZHRoPy5tYXggPyBNYXRoLm1pbig3MDAsIHdpZHRoLm1heCkgOiA3MDAsXG4gICAgc3RlcDogd2lkdGg/LnN0ZXAgPj0gMSA/IE1hdGgubWluKDIwMCwgd2lkdGguc3RlcCkgOiAyMCxcbiAgfTtcbiAgY29uc3QgaGVpZ2h0Q29uc3RyYWludHMgPSB7XG4gICAgbWluOiBoZWlnaHQ/Lm1pbiA/IE1hdGgubWF4KDQwMCwgaGVpZ2h0Lm1pbikgOiA0MDAsXG4gICAgbWF4OiBoZWlnaHQ/Lm1heCA/IE1hdGgubWluKDcwMCwgaGVpZ2h0Lm1heCkgOiA3MDAsXG4gICAgc3RlcDogaGVpZ2h0Py5zdGVwID49IDEgPyBNYXRoLm1pbigyMDAsIGhlaWdodC5zdGVwKSA6IDIwLFxuICB9O1xuXG4gIGNvbnN0IGdyaWRPcHRpb25zID0gZ3JpZFZhbHVlcyAmJiBncmlkVmFsdWVzLnJhbmdlID8geyBjdXN0b21WYWx1ZXM6IGdyaWRWYWx1ZXMucmFuZ2UgfSA6IHsgbWluOiAwLCBtYXg6IDEwMDAwIH07XG4gIGNvbnN0IGxhYmVsT3B0aW9ucyA9IGxhYmVsVmFsdWVzICYmIGxhYmVsVmFsdWVzLnJhbmdlID8geyBjdXN0b21WYWx1ZXM6IGxhYmVsVmFsdWVzLnJhbmdlIH0gOiB7IG1pbjogMCwgbWF4OiAxMDAwMCB9O1xuXG4gIGNvbnN0IHN0ZXBDb25maWcgPSAoXG4gICAgPFN0eWxlZFJvd1ZpZXc+XG4gICAgICA8U3R5bGVkTWVkaXVtVGV4dEZpZWxkXG4gICAgICAgIGxhYmVsPVwiR3JpZCBJbnRlcnZhbFwiXG4gICAgICAgIHZhbHVlPXtyYW5nZS5zdGVwfVxuICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uUmFuZ2VDaGFuZ2VkKCdzdGVwJywgdiwgZSl9XG4gICAgICAgIHsuLi5ncmlkT3B0aW9uc31cbiAgICAgIC8+XG4gICAgICA8U3R5bGVkTWVkaXVtVGV4dEZpZWxkXG4gICAgICAgIGxhYmVsPXsnTGFiZWwgSW50ZXJ2YWwnfVxuICAgICAgICB2YWx1ZT17cmFuZ2UubGFiZWxTdGVwfVxuICAgICAgICB2YXJpYW50PXsnb3V0bGluZWQnfVxuICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uUmFuZ2VDaGFuZ2VkKCdsYWJlbFN0ZXAnLCB2LCBlKX1cbiAgICAgICAgey4uLmxhYmVsT3B0aW9uc31cbiAgICAgIC8+XG4gICAgPC9TdHlsZWRSb3dWaWV3PlxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUFsZXJ0RGlhbG9nID0gKG9wZW5TdGF0dXMpID0+IHtcbiAgICBzZXRBbGVydERpYWxvZyhcbiAgICAgIChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgb3Blbjogb3BlblN0YXR1cyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBzZXRPcGVuKG9wZW5TdGF0dXMpO1xuICB9O1xuXG4gIGNvbnN0IHNldFByb3BlcnRpZXNUb0ZhbHNlID0gKGRhdGEsIHByb3BlcnR5KSA9PiB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChvYmopID0+IHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wZXJ0eSkpIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IHByb3BlcnR5ID09ICdpbnRlcmFjdGl2ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbW92ZU91dE9mUmFuZ2VWYWx1ZXMgPSAodXBkYXRlTW9kZWwpID0+IHtcbiAgICBjb25zdCB7IGNvcnJlY3RBbnN3ZXIsIGRhdGEgfSA9IG1vZGVsO1xuXG4gICAgaWYgKGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldFByb3BlcnRpZXNUb0ZhbHNlKGRhdGEsICdpbnRlcmFjdGl2ZScpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VFZGl0YWJsZUVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICBzZXRQcm9wZXJ0aWVzVG9GYWxzZShkYXRhLCAnZWRpdGFibGUnKTtcbiAgICB9XG5cbiAgICByZXNldFZhbHVlcyhkYXRhLCB1cGRhdGVNb2RlbCwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCk7XG4gICAgcmVzZXRWYWx1ZXMoY29ycmVjdEFuc3dlci5kYXRhLCBmYWxzZSwgcmFuZ2UsIG9uQ2hhbmdlLCBtb2RlbCk7XG4gIH07XG5cbiAgY29uc3Qgc2V0Q2F0ZWdvcnlEZWZhdWx0TGFiZWwgPSAoKSA9PiB7XG4gICAgY29uc3Qgc3R1ZGVudENhdGVnb3J5RGVmYXVsdExhYmVsID0gc3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsPy5sYWJlbDtcblxuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIHN0dWRlbnRDYXRlZ29yeURlZmF1bHRMYWJlbCB9KTtcbiAgfTtcblxuICBjb25zdCByYW5nZVByb3BzID0gKGNoYXJ0VHlwZSkgPT4ge1xuICAgIHJldHVybiBjaGFydFR5cGUuaW5jbHVkZXMoJ1Bsb3QnKSA/IHsgbWluOiAzLCBtYXg6IDEwIH0gOiB7IG1pbjogMC4wNSwgbWF4OiAxMDAwMCB9O1xuICB9O1xuXG4gIGNvbnN0IG9uU2l6ZUNoYW5nZWQgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGdyYXBoID0geyAuLi5zaXplLCBba2V5XTogdmFsdWUgfTtcblxuICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIGdyYXBoIH0pO1xuICB9O1xuXG4gIGNvbnN0IGlzT3V0T2ZSYW5nZSA9IChkYXRhLCByYW5nZSkgPT5cbiAgICAoZGF0YSB8fCBbXSkuZmluZCgoZCkgPT4gZC52YWx1ZSA+IHJhbmdlLm1heCB8fCBkLnZhbHVlIC0gcmFuZ2Uuc3RlcCAqIE1hdGguZmxvb3IoZC52YWx1ZSAvIHJhbmdlLnN0ZXApICE9PSAwKTtcblxuICBjb25zdCBvblJhbmdlQ2hhbmdlZCA9IChrZXksIHZhbHVlLCBlKSA9PiB7XG4gICAgLy8gdXNlIHJlc2V0IHZhbHVlcyB0byByZXN0b3JlIHJhbmdlIHRvIGluaXRpYWwgdmFsdWVzXG4gICAgc2V0UmVzZXRWYWx1ZShyYW5nZVtrZXldKTtcbiAgICBzZXRSYW5nZUtleShrZXkpO1xuXG4gICAgcmFuZ2Vba2V5XSA9IHZhbHVlO1xuXG4gICAgaWYgKGtleSA9PT0gJ21heCcgfHwga2V5ID09PSAnc3RlcCcpIHtcbiAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgY2hhcnQgdmFsdWVzIGFyZSBpbnZhbGlkIGZvciBnaXZlbiByYW5nZSBzdGVwL21heFxuICAgICAgY29uc3Qgb3V0T2ZSYW5nZSA9IGlzT3V0T2ZSYW5nZShtb2RlbC5kYXRhLCByYW5nZSkgfHwgaXNPdXRPZlJhbmdlKG1vZGVsLmNvcnJlY3RBbnN3ZXIuZGF0YSwgcmFuZ2UpO1xuXG4gICAgICBpZiAob3V0T2ZSYW5nZSAmJiBlPy50YXJnZXQpIHtcbiAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uQ2hhbmdlKHsgLi4ubW9kZWwsIHJhbmdlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZW1vdmVPdXRPZlJhbmdlVmFsdWVzKHRydWUpO1xuICAgIHNldENhdGVnb3J5RGVmYXVsdExhYmVsKCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuKSB7XG4gICAgICBzZXRBbGVydERpYWxvZyh7XG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgIHRpdGxlOiAnV2FybmluZycsXG4gICAgICAgIHRleHQ6ICdUaGlzIGNoYW5nZSB3aWxsIHJlbW92ZSB2YWx1ZXMgZGVmaW5lZCBmb3Igb25lIG9yIG1vcmUgY2F0ZWdvcmllcycsXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIHJlbW92ZU91dE9mUmFuZ2VWYWx1ZXMoKTtcbiAgICAgICAgICBoYW5kbGVBbGVydERpYWxvZyhmYWxzZSk7XG4gICAgICAgICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgcmFuZ2UsIGNvcnJlY3RBbnN3ZXIgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICByYW5nZVtyYW5nZUtleV0gPSByZXNldFZhbHVlO1xuICAgICAgICAgIGhhbmRsZUFsZXJ0RGlhbG9nKGZhbHNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW29wZW5dKTtcblxuICBjb25zdCBpc1ZhbGlkUGxvdCA9IHJhbmdlLnN0ZXAgPT09IDEgJiYgcmFuZ2UubGFiZWxTdGVwID09PSAxICYmIDMgPD0gcmFuZ2UubWF4ICYmIHJhbmdlLm1heCA8PSAxMDtcblxuICBjb25zdCBnZXRQbG90Q29uZmlndXJhdGlvbiA9ICgpID0+IHtcbiAgICByYW5nZVByb3BzLm1pbiA9IDM7XG4gICAgcmFuZ2VQcm9wcy5tYXggPSAxMDtcblxuICAgIHJhbmdlLm1heCA9IDEwO1xuICAgIHJhbmdlLnN0ZXAgPSAxO1xuICAgIHJhbmdlLmxhYmVsU3RlcCA9IDE7XG5cbiAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSB9KTtcbiAgfTtcblxuICBjb25zdCBvbkNoYXJ0VHlwZUNoYW5nZSA9IChjaGFydFR5cGUpID0+IHtcbiAgICBpZiAoY2hhcnRUeXBlLmluY2x1ZGVzKCdQbG90JykpIHtcbiAgICAgIC8vIFRoZSBzZWxlY3RlZCBjaGFydCB0eXBlIGRvZXMgbm90IHN1cHBvcnQgdGhlIGN1cnJlbnQgY2hhcnQgY29uZmlndXJhdGlvblxuICAgICAgaWYgKCFpc1ZhbGlkUGxvdCkge1xuICAgICAgICBzZXRBbGVydERpYWxvZyh7XG4gICAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogJ1dhcm5pbmcnLFxuICAgICAgICAgIHRleHQ6ICdUaGUgc2VsZWN0ZWQgY2hhcnQgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXJyZW50IGNoYXJ0IGNvbmZpZ3VyYXRpb24uIFJlc2V0IGNoYXJ0IGNvbmZpZ3VyYXRpb24/JyxcbiAgICAgICAgICBvbkNvbmZpcm06ICgpID0+IHtcbiAgICAgICAgICAgIGdldFBsb3RDb25maWd1cmF0aW9uKCk7XG4gICAgICAgICAgICByZW1vdmVPdXRPZlJhbmdlVmFsdWVzKCk7XG4gICAgICAgICAgICBoYW5kbGVBbGVydERpYWxvZyhmYWxzZSk7XG4gICAgICAgICAgICBvbkNoYW5nZSh7IC4uLm1vZGVsLCByYW5nZSwgY2hhcnRUeXBlIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlQWxlcnREaWFsb2coZmFsc2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmFuZ2VQcm9wcy5taW4gPSAzO1xuICAgICAgcmFuZ2VQcm9wcy5tYXggPSAxMDtcblxuICAgICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgY2hhcnRUeXBlIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoeyAuLi5tb2RlbCwgY2hhcnRUeXBlIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZFdyYXBwZXI+XG4gICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PXsnc3VidGl0bGUxJ30+Q29uZmlndXJlIENoYXJ0PC9UeXBvZ3JhcGh5PlxuICAgICAgPFN0eWxlZENvbnRlbnQ+XG4gICAgICAgIDxTdHlsZWRSb3dWaWV3PlxuICAgICAgICAgIDxDaGFydFR5cGVcbiAgICAgICAgICAgIHZhbHVlPXttb2RlbC5jaGFydFR5cGV9XG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IG9uQ2hhcnRUeXBlQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgIGF2YWlsYWJsZUNoYXJ0VHlwZXM9e2F2YWlsYWJsZUNoYXJ0VHlwZXN9XG4gICAgICAgICAgICBjaGFydFR5cGVMYWJlbD17Y2hhcnRUeXBlTGFiZWx9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U3R5bGVkTWVkaXVtVGV4dEZpZWxkXG4gICAgICAgICAgICBsYWJlbD1cIk1heCBWYWx1ZVwiXG4gICAgICAgICAgICB2YWx1ZT17cmFuZ2UubWF4fVxuICAgICAgICAgICAgbWluPXtyYW5nZVByb3BzKG1vZGVsLmNoYXJ0VHlwZSkubWlufVxuICAgICAgICAgICAgbWF4PXtyYW5nZVByb3BzKG1vZGVsLmNoYXJ0VHlwZSkubWF4fVxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25SYW5nZUNoYW5nZWQoJ21heCcsIHYsIGUpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkUm93Vmlldz5cbiAgICAgICAgeyFtb2RlbC5jaGFydFR5cGUuaW5jbHVkZXMoJ1Bsb3QnKSAmJiBzdGVwQ29uZmlnfVxuXG4gICAgICAgIHtzaG93SW5Db25maWdQYW5lbCAmJiAoXG4gICAgICAgICAgPFN0eWxlZERpbWVuc2lvbnM+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeT5EaW1lbnNpb25zKHB4KTwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8U3R5bGVkQ29sdW1uVmlldz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRleHRGaWVsZFxuICAgICAgICAgICAgICAgIGxhYmVsPXsnV2lkdGgnfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtzaXplLndpZHRofVxuICAgICAgICAgICAgICAgIG1pbj17d2lkdGhDb25zdHJhaW50cy5taW59XG4gICAgICAgICAgICAgICAgbWF4PXt3aWR0aENvbnN0cmFpbnRzLm1heH1cbiAgICAgICAgICAgICAgICBzdGVwPXt3aWR0aENvbnN0cmFpbnRzLnN0ZXB9XG4gICAgICAgICAgICAgICAgdmFyaWFudD17J291dGxpbmVkJ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUsIHYpID0+IG9uU2l6ZUNoYW5nZWQoJ3dpZHRoJywgdil9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxTdHlsZWREaXNhYmxlZD5NaW4gNTAsIE1heCA3MDA8L1N0eWxlZERpc2FibGVkPlxuICAgICAgICAgICAgPC9TdHlsZWRDb2x1bW5WaWV3PlxuXG4gICAgICAgICAgICA8U3R5bGVkQ29sdW1uVmlldz5cbiAgICAgICAgICAgICAgPFN0eWxlZFRleHRGaWVsZFxuICAgICAgICAgICAgICAgIGxhYmVsPXsnSGVpZ2h0J31cbiAgICAgICAgICAgICAgICB2YWx1ZT17c2l6ZS5oZWlnaHR9XG4gICAgICAgICAgICAgICAgbWluPXtoZWlnaHRDb25zdHJhaW50cy5taW59XG4gICAgICAgICAgICAgICAgbWF4PXtoZWlnaHRDb25zdHJhaW50cy5tYXh9XG4gICAgICAgICAgICAgICAgc3RlcD17aGVpZ2h0Q29uc3RyYWludHMuc3RlcH1cbiAgICAgICAgICAgICAgICB2YXJpYW50PXsnb3V0bGluZWQnfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdikgPT4gb25TaXplQ2hhbmdlZCgnaGVpZ2h0Jywgdil9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxTdHlsZWREaXNhYmxlZD5NaW4gNDAwLCBNYXggNzAwPC9TdHlsZWREaXNhYmxlZD5cbiAgICAgICAgICAgIDwvU3R5bGVkQ29sdW1uVmlldz5cbiAgICAgICAgICA8L1N0eWxlZERpbWVuc2lvbnM+XG4gICAgICAgICl9XG4gICAgICA8L1N0eWxlZENvbnRlbnQ+XG5cbiAgICAgIDxBbGVydERpYWxvZ1xuICAgICAgICBvcGVuPXthbGVydERpYWxvZy5vcGVufVxuICAgICAgICB0aXRsZT17YWxlcnREaWFsb2cudGl0bGV9XG4gICAgICAgIHRleHQ9e2FsZXJ0RGlhbG9nLnRleHR9XG4gICAgICAgIG9uQ2xvc2U9e2FsZXJ0RGlhbG9nLm9uQ2xvc2V9XG4gICAgICAgIG9uQ29uZmlybT17YWxlcnREaWFsb2cub25Db25maXJtfVxuICAgICAgLz5cbiAgICA8L1N0eWxlZFdyYXBwZXI+XG4gICk7XG59O1xuXG5Db25maWd1cmVDaGFydFBhbmVsLnByb3BUeXBlcyA9IHtcbiAgY2hhcnREaW1lbnNpb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICBkb21haW46IFByb3BUeXBlcy5vYmplY3QsXG4gIGdyaWRWYWx1ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIGxhYmVsVmFsdWVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtb2RlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICByYW5nZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2hhcnREaW1lbnNpb246IFByb3BUeXBlcy5vYmplY3QsXG4gIHNpemU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbDogUHJvcFR5cGVzLm9iamVjdCxcbiAgYXZhaWxhYmxlQ2hhcnRUeXBlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2hhcnRUeXBlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb25maWd1cmVDaGFydFBhbmVsO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQUEyRCxTQUFBRCx3QkFBQVMsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQVgsdUJBQUEsWUFBQUEsd0JBQUFTLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxtQkFBQVQsQ0FBQSxpQkFBQUEsQ0FBQSxnQkFBQVUsT0FBQSxDQUFBVixDQUFBLDBCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFLLEdBQUEsQ0FBQVgsQ0FBQSxVQUFBTSxDQUFBLENBQUFNLEdBQUEsQ0FBQVosQ0FBQSxHQUFBTSxDQUFBLENBQUFPLEdBQUEsQ0FBQWIsQ0FBQSxFQUFBUSxDQUFBLGNBQUFNLEVBQUEsSUFBQWQsQ0FBQSxnQkFBQWMsRUFBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLElBQUFELENBQUEsR0FBQVcsTUFBQSxDQUFBQyxjQUFBLEtBQUFELE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQWMsRUFBQSxPQUFBUCxDQUFBLENBQUFLLEdBQUEsSUFBQUwsQ0FBQSxDQUFBTSxHQUFBLElBQUFQLENBQUEsQ0FBQUUsQ0FBQSxFQUFBTSxFQUFBLEVBQUFQLENBQUEsSUFBQUMsQ0FBQSxDQUFBTSxFQUFBLElBQUFkLENBQUEsQ0FBQWMsRUFBQSxXQUFBTixDQUFBLEtBQUFSLENBQUEsRUFBQUMsQ0FBQTtBQUFBLFNBQUFtQixRQUFBcEIsQ0FBQSxFQUFBRyxDQUFBLFFBQUFGLENBQUEsR0FBQWdCLE1BQUEsQ0FBQUksSUFBQSxDQUFBckIsQ0FBQSxPQUFBaUIsTUFBQSxDQUFBSyxxQkFBQSxRQUFBaEIsQ0FBQSxHQUFBVyxNQUFBLENBQUFLLHFCQUFBLENBQUF0QixDQUFBLEdBQUFHLENBQUEsS0FBQUcsQ0FBQSxHQUFBQSxDQUFBLENBQUFpQixNQUFBLFdBQUFwQixDQUFBLFdBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQW5CLENBQUEsRUFBQUcsQ0FBQSxFQUFBcUIsVUFBQSxPQUFBdkIsQ0FBQSxDQUFBd0IsSUFBQSxDQUFBQyxLQUFBLENBQUF6QixDQUFBLEVBQUFLLENBQUEsWUFBQUwsQ0FBQTtBQUFBLFNBQUEwQixjQUFBM0IsQ0FBQSxhQUFBRyxDQUFBLE1BQUFBLENBQUEsR0FBQXlCLFNBQUEsQ0FBQUMsTUFBQSxFQUFBMUIsQ0FBQSxVQUFBRixDQUFBLFdBQUEyQixTQUFBLENBQUF6QixDQUFBLElBQUF5QixTQUFBLENBQUF6QixDQUFBLFFBQUFBLENBQUEsT0FBQWlCLE9BQUEsQ0FBQUgsTUFBQSxDQUFBaEIsQ0FBQSxPQUFBNkIsT0FBQSxXQUFBM0IsQ0FBQSxRQUFBNEIsZ0JBQUEsYUFBQS9CLENBQUEsRUFBQUcsQ0FBQSxFQUFBRixDQUFBLENBQUFFLENBQUEsU0FBQWMsTUFBQSxDQUFBZSx5QkFBQSxHQUFBZixNQUFBLENBQUFnQixnQkFBQSxDQUFBakMsQ0FBQSxFQUFBaUIsTUFBQSxDQUFBZSx5QkFBQSxDQUFBL0IsQ0FBQSxLQUFBbUIsT0FBQSxDQUFBSCxNQUFBLENBQUFoQixDQUFBLEdBQUE2QixPQUFBLFdBQUEzQixDQUFBLElBQUFjLE1BQUEsQ0FBQUMsY0FBQSxDQUFBbEIsQ0FBQSxFQUFBRyxDQUFBLEVBQUFjLE1BQUEsQ0FBQUUsd0JBQUEsQ0FBQWxCLENBQUEsRUFBQUUsQ0FBQSxpQkFBQUgsQ0FBQTtBQUdwRCxJQUFNa0MsV0FBVyxHQUFBQyxPQUFBLENBQUFELFdBQUEsR0FBRyxTQUFkQSxXQUFXQSxDQUFJRSxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLEtBQUssRUFBSztFQUN4RSxDQUFDSixJQUFJLElBQUksRUFBRSxFQUFFTixPQUFPLENBQUMsVUFBQ1csQ0FBQyxFQUFLO0lBQzFCLElBQU1DLGNBQWMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILENBQUMsQ0FBQ0ksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUMvQyxJQUFNQyxpQkFBaUIsR0FBR0gsSUFBSSxDQUFDQyxLQUFLLENBQUNOLEtBQUssQ0FBQ1MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNyRCxJQUFNQyxnQkFBZ0IsR0FBR04sY0FBYyxHQUFHSSxpQkFBaUI7SUFDM0QsSUFBTUcsU0FBUyxHQUFHRCxnQkFBZ0IsR0FBRyxFQUFFO0lBRXZDLElBQUlQLENBQUMsQ0FBQ0ksS0FBSyxHQUFHUCxLQUFLLENBQUNZLEdBQUcsSUFBSUQsU0FBUyxLQUFLLENBQUMsRUFBRTtNQUMxQ1IsQ0FBQyxDQUFDSSxLQUFLLEdBQUcsQ0FBQztJQUNiO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBSVIsV0FBVyxFQUFFO0lBQ2ZFLFFBQVEsQ0FBQVosYUFBQSxDQUFBQSxhQUFBLEtBQU1hLEtBQUs7TUFBRUosSUFBSSxFQUFKQTtJQUFJLEVBQUUsQ0FBQztFQUM5QjtBQUNGLENBQUM7QUFFRCxJQUFNZSxhQUFhLEdBQUcsSUFBQUMsY0FBTSxFQUFDLEtBQUssQ0FBQyxDQUFDO0VBQUEsT0FBTztJQUN6Q0MsS0FBSyxFQUFFO0VBQ1QsQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVILElBQU1DLGFBQWEsR0FBRyxJQUFBRixjQUFNLEVBQUMsS0FBSyxDQUFDLENBQUMsVUFBQUcsSUFBQTtFQUFBLElBQUdDLEtBQUssR0FBQUQsSUFBQSxDQUFMQyxLQUFLO0VBQUEsT0FBUTtJQUNsREMsT0FBTyxFQUFFLE1BQU07SUFDZkMsYUFBYSxFQUFFLFFBQVE7SUFDdkJMLEtBQUssRUFBRSxNQUFNO0lBQ2JNLFNBQVMsRUFBRUgsS0FBSyxDQUFDSSxPQUFPLENBQUMsQ0FBQztFQUM1QixDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUgsSUFBTUMsZ0JBQWdCLEdBQUcsSUFBQVQsY0FBTSxFQUFDLEtBQUssQ0FBQyxDQUFDO0VBQUEsT0FBTztJQUM1Q0ssT0FBTyxFQUFFLE1BQU07SUFDZkMsYUFBYSxFQUFFLFFBQVE7SUFDdkJJLFVBQVUsRUFBRTtFQUNkLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxJQUFNQyxhQUFhLEdBQUcsSUFBQVgsY0FBTSxFQUFDLEtBQUssQ0FBQyxDQUFDO0VBQUEsT0FBTztJQUN6Q0ssT0FBTyxFQUFFLE1BQU07SUFDZk8sY0FBYyxFQUFFLGNBQWM7SUFDOUJGLFVBQVUsRUFBRTtFQUNkLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxJQUFNRyxlQUFlLEdBQUcsSUFBQWIsY0FBTSxFQUFDYywrQkFBcUIsQ0FBQyxDQUFDLFVBQUFDLEtBQUE7RUFBQSxJQUFHWCxLQUFLLEdBQUFXLEtBQUEsQ0FBTFgsS0FBSztFQUFBLE9BQVE7SUFDcEVILEtBQUssRUFBRSxPQUFPO0lBQ2RlLE1BQU0sS0FBQUMsTUFBQSxDQUFLYixLQUFLLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBQVMsTUFBQSxDQUFJYixLQUFLLENBQUNJLE9BQU8sQ0FBQyxHQUFHLENBQUM7RUFDbkQsQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVILElBQU1VLHFCQUFxQixHQUFHLElBQUFsQixjQUFNLEVBQUNjLCtCQUFxQixDQUFDLENBQUMsVUFBQUssS0FBQTtFQUFBLElBQUdmLEtBQUssR0FBQWUsS0FBQSxDQUFMZixLQUFLO0VBQUEsT0FBUTtJQUMxRUgsS0FBSyxFQUFFLE9BQU87SUFDZGUsTUFBTSxLQUFBQyxNQUFBLENBQUtiLEtBQUssQ0FBQ0ksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFBUyxNQUFBLENBQUliLEtBQUssQ0FBQ0ksT0FBTyxDQUFDLEdBQUcsQ0FBQztFQUNuRCxDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUgsSUFBTVksZ0JBQWdCLEdBQUcsSUFBQXBCLGNBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQyxVQUFBcUIsS0FBQTtFQUFBLElBQUdqQixLQUFLLEdBQUFpQixLQUFBLENBQUxqQixLQUFLO0VBQUEsT0FBUTtJQUNyREMsT0FBTyxFQUFFLE1BQU07SUFDZk8sY0FBYyxFQUFFLGVBQWU7SUFDL0JGLFVBQVUsRUFBRSxRQUFRO0lBQ3BCTSxNQUFNLEtBQUFDLE1BQUEsQ0FBS2IsS0FBSyxDQUFDSSxPQUFPLENBQUMsQ0FBQyxDQUFDO0VBQzdCLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxJQUFNYyxjQUFjLEdBQUcsSUFBQXRCLGNBQU0sRUFBQ3VCLHNCQUFVLENBQUMsQ0FBQztFQUFBLE9BQU87SUFDL0NDLEtBQUssRUFBRUEsZUFBSyxDQUFDQyxRQUFRLENBQUM7RUFDeEIsQ0FBQztBQUFBLENBQUMsQ0FBQztBQUVILElBQU1DLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlDLEtBQUssRUFBSztFQUNyQyxJQUNFdkMsS0FBSyxHQVFIdUMsS0FBSyxDQVJQdkMsS0FBSztJQUNMRCxRQUFRLEdBT053QyxLQUFLLENBUFB4QyxRQUFRO0lBQ1J5QyxlQUFlLEdBTWJELEtBQUssQ0FOUEMsZUFBZTtJQUFBQyxpQkFBQSxHQU1iRixLQUFLLENBTFBHLFVBQVU7SUFBVkEsVUFBVSxHQUFBRCxpQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxpQkFBQTtJQUFBRSxrQkFBQSxHQUtiSixLQUFLLENBSlBLLFdBQVc7SUFBWEEsV0FBVyxHQUFBRCxrQkFBQSxjQUFHLENBQUMsQ0FBQyxHQUFBQSxrQkFBQTtJQUFBRSxxQkFBQSxHQUlkTixLQUFLLENBSFBPLDhCQUE4QjtJQUE5QkEsOEJBQThCLEdBQUFELHFCQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLHFCQUFBO0lBQUFFLHFCQUFBLEdBR2pDUixLQUFLLENBRlBTLG1CQUFtQjtJQUFuQkEsbUJBQW1CLEdBQUFELHFCQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLHFCQUFBO0lBQ3hCRSxjQUFjLEdBQ1pWLEtBQUssQ0FEUFUsY0FBYztFQUVoQixJQUFBQyxTQUFBLEdBQXNDLElBQUFDLGVBQVEsRUFBQztNQUM3Q0MsSUFBSSxFQUFFLEtBQUs7TUFDWEMsS0FBSyxFQUFFLEVBQUU7TUFDVEMsSUFBSSxFQUFFLEVBQUU7TUFDUkMsT0FBTyxFQUFFLElBQUk7TUFDYkMsU0FBUyxFQUFFO0lBQ2IsQ0FBQyxDQUFDO0lBQUFDLFVBQUEsT0FBQUMsZUFBQSxhQUFBUixTQUFBO0lBTktTLFdBQVcsR0FBQUYsVUFBQTtJQUFFRyxjQUFjLEdBQUFILFVBQUE7RUFPbEMsSUFBQUksVUFBQSxHQUF3QixJQUFBVixlQUFRLEVBQUMsS0FBSyxDQUFDO0lBQUFXLFVBQUEsT0FBQUosZUFBQSxhQUFBRyxVQUFBO0lBQWhDVCxJQUFJLEdBQUFVLFVBQUE7SUFBRUMsT0FBTyxHQUFBRCxVQUFBO0VBQ3BCLElBQUFFLFVBQUEsR0FBZ0MsSUFBQWIsZUFBUSxFQUFDLEVBQUUsQ0FBQztJQUFBYyxVQUFBLE9BQUFQLGVBQUEsYUFBQU0sVUFBQTtJQUFyQ0UsUUFBUSxHQUFBRCxVQUFBO0lBQUVFLFdBQVcsR0FBQUYsVUFBQTtFQUM1QixJQUFBRyxVQUFBLEdBQW9DLElBQUFqQixlQUFRLEVBQUMsQ0FBQyxDQUFDO0lBQUFrQixVQUFBLE9BQUFYLGVBQUEsYUFBQVUsVUFBQTtJQUF4Q0UsVUFBVSxHQUFBRCxVQUFBO0lBQUVFLGFBQWEsR0FBQUYsVUFBQTtFQUVoQyxJQUFBRyxZQUFBLEdBQXVGeEUsS0FBSyxDQUFwRkYsS0FBSztJQUFMQSxLQUFLLEdBQUEwRSxZQUFBLGNBQUcsQ0FBQyxDQUFDLEdBQUFBLFlBQUE7SUFBRUMsYUFBYSxHQUFzRHpFLEtBQUssQ0FBeEV5RSxhQUFhO0lBQUVDLHdCQUF3QixHQUE0QjFFLEtBQUssQ0FBekQwRSx3QkFBd0I7SUFBRUMscUJBQXFCLEdBQUszRSxLQUFLLENBQS9CMkUscUJBQXFCO0VBRWxGLElBQU1DLElBQUksR0FBRzVFLEtBQUssQ0FBQzZFLEtBQUs7RUFDeEIsSUFBQUMsS0FBQSxHQUE2Q3RDLGVBQWUsSUFBSSxDQUFDLENBQUM7SUFBMUR1QyxpQkFBaUIsR0FBQUQsS0FBQSxDQUFqQkMsaUJBQWlCO0lBQUVsRSxLQUFLLEdBQUFpRSxLQUFBLENBQUxqRSxLQUFLO0lBQUVtRSxNQUFNLEdBQUFGLEtBQUEsQ0FBTkUsTUFBTTtFQUV4QyxJQUFNQyxnQkFBZ0IsR0FBRztJQUN2QkMsR0FBRyxFQUFFckUsS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRXFFLEdBQUcsR0FBRy9FLElBQUksQ0FBQ08sR0FBRyxDQUFDLEVBQUUsRUFBRUcsS0FBSyxDQUFDcUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtJQUM5Q3hFLEdBQUcsRUFBRUcsS0FBSyxhQUFMQSxLQUFLLGVBQUxBLEtBQUssQ0FBRUgsR0FBRyxHQUFHUCxJQUFJLENBQUMrRSxHQUFHLENBQUMsR0FBRyxFQUFFckUsS0FBSyxDQUFDSCxHQUFHLENBQUMsR0FBRyxHQUFHO0lBQ2hESCxJQUFJLEVBQUUsQ0FBQU0sS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVOLElBQUksS0FBSSxDQUFDLEdBQUdKLElBQUksQ0FBQytFLEdBQUcsQ0FBQyxHQUFHLEVBQUVyRSxLQUFLLENBQUNOLElBQUksQ0FBQyxHQUFHO0VBQ3ZELENBQUM7RUFDRCxJQUFNNEUsaUJBQWlCLEdBQUc7SUFDeEJELEdBQUcsRUFBRUYsTUFBTSxhQUFOQSxNQUFNLGVBQU5BLE1BQU0sQ0FBRUUsR0FBRyxHQUFHL0UsSUFBSSxDQUFDTyxHQUFHLENBQUMsR0FBRyxFQUFFc0UsTUFBTSxDQUFDRSxHQUFHLENBQUMsR0FBRyxHQUFHO0lBQ2xEeEUsR0FBRyxFQUFFc0UsTUFBTSxhQUFOQSxNQUFNLGVBQU5BLE1BQU0sQ0FBRXRFLEdBQUcsR0FBR1AsSUFBSSxDQUFDK0UsR0FBRyxDQUFDLEdBQUcsRUFBRUYsTUFBTSxDQUFDdEUsR0FBRyxDQUFDLEdBQUcsR0FBRztJQUNsREgsSUFBSSxFQUFFLENBQUF5RSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXpFLElBQUksS0FBSSxDQUFDLEdBQUdKLElBQUksQ0FBQytFLEdBQUcsQ0FBQyxHQUFHLEVBQUVGLE1BQU0sQ0FBQ3pFLElBQUksQ0FBQyxHQUFHO0VBQ3pELENBQUM7RUFFRCxJQUFNNkUsV0FBVyxHQUFHMUMsVUFBVSxJQUFJQSxVQUFVLENBQUM1QyxLQUFLLEdBQUc7SUFBRXVGLFlBQVksRUFBRTNDLFVBQVUsQ0FBQzVDO0VBQU0sQ0FBQyxHQUFHO0lBQUVvRixHQUFHLEVBQUUsQ0FBQztJQUFFeEUsR0FBRyxFQUFFO0VBQU0sQ0FBQztFQUNoSCxJQUFNNEUsWUFBWSxHQUFHMUMsV0FBVyxJQUFJQSxXQUFXLENBQUM5QyxLQUFLLEdBQUc7SUFBRXVGLFlBQVksRUFBRXpDLFdBQVcsQ0FBQzlDO0VBQU0sQ0FBQyxHQUFHO0lBQUVvRixHQUFHLEVBQUUsQ0FBQztJQUFFeEUsR0FBRyxFQUFFO0VBQU0sQ0FBQztFQUVwSCxJQUFNNkUsVUFBVSxnQkFDZHpJLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQ2pFLGFBQWEscUJBQ1p6RSxNQUFBLFlBQUEwSSxhQUFBLENBQUMxRCxxQkFBcUIsTUFBQTJELFNBQUE7SUFDcEJDLEtBQUssRUFBQyxlQUFlO0lBQ3JCckYsS0FBSyxFQUFFUCxLQUFLLENBQUNTLElBQUs7SUFDbEJvRixPQUFPLEVBQUMsVUFBVTtJQUNsQjVGLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHdkMsQ0FBQyxFQUFFb0ksQ0FBQztNQUFBLE9BQUtDLGNBQWMsQ0FBQyxNQUFNLEVBQUVELENBQUMsRUFBRXBJLENBQUMsQ0FBQztJQUFBO0VBQUMsR0FDN0M0SCxXQUFXLENBQ2hCLENBQUMsZUFDRnRJLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQzFELHFCQUFxQixNQUFBMkQsU0FBQTtJQUNwQkMsS0FBSyxFQUFFLGdCQUFpQjtJQUN4QnJGLEtBQUssRUFBRVAsS0FBSyxDQUFDZ0csU0FBVTtJQUN2QkgsT0FBTyxFQUFFLFVBQVc7SUFDcEI1RixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR3ZDLENBQUMsRUFBRW9JLENBQUM7TUFBQSxPQUFLQyxjQUFjLENBQUMsV0FBVyxFQUFFRCxDQUFDLEVBQUVwSSxDQUFDLENBQUM7SUFBQTtFQUFDLEdBQ2xEOEgsWUFBWSxDQUNqQixDQUNZLENBQ2hCO0VBRUQsSUFBTVMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUMsVUFBVSxFQUFLO0lBQ3hDcEMsY0FBYyxDQUNaLFVBQUNxQyxTQUFTO01BQUEsT0FBQTlHLGFBQUEsQ0FBQUEsYUFBQSxLQUNMOEcsU0FBUztRQUNaN0MsSUFBSSxFQUFFNEM7TUFBVTtJQUFBLENBRXBCLENBQUM7SUFFRGpDLE9BQU8sQ0FBQ2lDLFVBQVUsQ0FBQztFQUNyQixDQUFDO0VBRUQsSUFBTUUsb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSXRHLElBQUksRUFBRXVHLFFBQVEsRUFBSztJQUMvQyxPQUFPdkcsSUFBSSxDQUFDd0csR0FBRyxDQUFDLFVBQUNDLEdBQUcsRUFBSztNQUN2QixJQUFJNUgsTUFBTSxDQUFDNkgsU0FBUyxDQUFDL0gsY0FBYyxDQUFDQyxJQUFJLENBQUM2SCxHQUFHLEVBQUVGLFFBQVEsQ0FBQyxFQUFFO1FBQ3ZERSxHQUFHLENBQUNGLFFBQVEsQ0FBQyxHQUFHQSxRQUFRLElBQUksYUFBYSxHQUFHLElBQUksR0FBRyxLQUFLO01BQzFEO01BQ0EsT0FBT0UsR0FBRztJQUNaLENBQUMsQ0FBQztFQUNKLENBQUM7RUFFRCxJQUFNRSxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJMUcsV0FBVyxFQUFLO0lBQzlDLElBQVE0RSxhQUFhLEdBQVd6RSxLQUFLLENBQTdCeUUsYUFBYTtNQUFFN0UsSUFBSSxHQUFLSSxLQUFLLENBQWRKLElBQUk7SUFFM0IsSUFBSThFLHdCQUF3QixLQUFLLEtBQUssRUFBRTtNQUN0Q3dCLG9CQUFvQixDQUFDdEcsSUFBSSxFQUFFLGFBQWEsQ0FBQztJQUMzQztJQUVBLElBQUkrRSxxQkFBcUIsS0FBSyxLQUFLLEVBQUU7TUFDbkN1QixvQkFBb0IsQ0FBQ3RHLElBQUksRUFBRSxVQUFVLENBQUM7SUFDeEM7SUFFQUYsV0FBVyxDQUFDRSxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLEtBQUssQ0FBQztJQUN0RE4sV0FBVyxDQUFDK0UsYUFBYSxDQUFDN0UsSUFBSSxFQUFFLEtBQUssRUFBRUUsS0FBSyxFQUFFQyxRQUFRLEVBQUVDLEtBQUssQ0FBQztFQUNoRSxDQUFDO0VBRUQsSUFBTXdHLHVCQUF1QixHQUFHLFNBQTFCQSx1QkFBdUJBLENBQUEsRUFBUztJQUNwQyxJQUFNQywyQkFBMkIsR0FBRzNELDhCQUE4QixhQUE5QkEsOEJBQThCLHVCQUE5QkEsOEJBQThCLENBQUU0QyxLQUFLO0lBRXpFM0YsUUFBUSxDQUFBWixhQUFBLENBQUFBLGFBQUEsS0FBTWEsS0FBSztNQUFFeUcsMkJBQTJCLEVBQTNCQTtJQUEyQixFQUFFLENBQUM7RUFDckQsQ0FBQztFQUVELElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFJQyxTQUFTLEVBQUs7SUFDaEMsT0FBT0EsU0FBUyxDQUFDQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUc7TUFBRTFCLEdBQUcsRUFBRSxDQUFDO01BQUV4RSxHQUFHLEVBQUU7SUFBRyxDQUFDLEdBQUc7TUFBRXdFLEdBQUcsRUFBRSxJQUFJO01BQUV4RSxHQUFHLEVBQUU7SUFBTSxDQUFDO0VBQ3JGLENBQUM7RUFFRCxJQUFNbUcsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFJQyxHQUFHLEVBQUV6RyxLQUFLLEVBQUs7SUFDcEMsSUFBTXdFLEtBQUssR0FBQTFGLGFBQUEsQ0FBQUEsYUFBQSxLQUFReUYsSUFBSSxXQUFBckYsZ0JBQUEsaUJBQUd1SCxHQUFHLEVBQUd6RyxLQUFLLEVBQUU7SUFFdkNOLFFBQVEsQ0FBQVosYUFBQSxDQUFBQSxhQUFBLEtBQU1hLEtBQUs7TUFBRTZFLEtBQUssRUFBTEE7SUFBSyxFQUFFLENBQUM7RUFDL0IsQ0FBQztFQUVELElBQU1rQyxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSW5ILElBQUksRUFBRUUsS0FBSztJQUFBLE9BQy9CLENBQUNGLElBQUksSUFBSSxFQUFFLEVBQUVvSCxJQUFJLENBQUMsVUFBQy9HLENBQUM7TUFBQSxPQUFLQSxDQUFDLENBQUNJLEtBQUssR0FBR1AsS0FBSyxDQUFDWSxHQUFHLElBQUlULENBQUMsQ0FBQ0ksS0FBSyxHQUFHUCxLQUFLLENBQUNTLElBQUksR0FBR0osSUFBSSxDQUFDOEcsS0FBSyxDQUFDaEgsQ0FBQyxDQUFDSSxLQUFLLEdBQUdQLEtBQUssQ0FBQ1MsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUFBLEVBQUM7RUFBQTtFQUVoSCxJQUFNc0YsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJaUIsR0FBRyxFQUFFekcsS0FBSyxFQUFFN0MsQ0FBQyxFQUFLO0lBQ3hDO0lBQ0ErRyxhQUFhLENBQUN6RSxLQUFLLENBQUNnSCxHQUFHLENBQUMsQ0FBQztJQUN6QjNDLFdBQVcsQ0FBQzJDLEdBQUcsQ0FBQztJQUVoQmhILEtBQUssQ0FBQ2dILEdBQUcsQ0FBQyxHQUFHekcsS0FBSztJQUVsQixJQUFJeUcsR0FBRyxLQUFLLEtBQUssSUFBSUEsR0FBRyxLQUFLLE1BQU0sRUFBRTtNQUNuQztNQUNBLElBQU1JLFVBQVUsR0FBR0gsWUFBWSxDQUFDL0csS0FBSyxDQUFDSixJQUFJLEVBQUVFLEtBQUssQ0FBQyxJQUFJaUgsWUFBWSxDQUFDL0csS0FBSyxDQUFDeUUsYUFBYSxDQUFDN0UsSUFBSSxFQUFFRSxLQUFLLENBQUM7TUFFbkcsSUFBSW9ILFVBQVUsSUFBSTFKLENBQUMsYUFBREEsQ0FBQyxlQUFEQSxDQUFDLENBQUUySixNQUFNLEVBQUU7UUFDM0JwRCxPQUFPLENBQUMsSUFBSSxDQUFDO01BQ2YsQ0FBQyxNQUFNO1FBQ0xoRSxRQUFRLENBQUFaLGFBQUEsQ0FBQUEsYUFBQSxLQUFNYSxLQUFLO1VBQUVGLEtBQUssRUFBTEE7UUFBSyxFQUFFLENBQUM7TUFDL0I7SUFDRixDQUFDLE1BQU07TUFDTEMsUUFBUSxDQUFBWixhQUFBLENBQUFBLGFBQUEsS0FBTWEsS0FBSztRQUFFRixLQUFLLEVBQUxBO01BQUssRUFBRSxDQUFDO0lBQy9CO0VBQ0YsQ0FBQztFQUVELElBQUFzSCxnQkFBUyxFQUFDLFlBQU07SUFDZGIsc0JBQXNCLENBQUMsSUFBSSxDQUFDO0lBQzVCQyx1QkFBdUIsQ0FBQyxDQUFDO0VBQzNCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFBWSxnQkFBUyxFQUFDLFlBQU07SUFDZCxJQUFJaEUsSUFBSSxFQUFFO01BQ1JRLGNBQWMsQ0FBQztRQUNiUixJQUFJLEVBQUUsSUFBSTtRQUNWQyxLQUFLLEVBQUUsU0FBUztRQUNoQkMsSUFBSSxFQUFFLG1FQUFtRTtRQUN6RUUsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUEsRUFBUTtVQUNmK0Msc0JBQXNCLENBQUMsQ0FBQztVQUN4QlIsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1VBQ3hCaEcsUUFBUSxDQUFBWixhQUFBLENBQUFBLGFBQUEsS0FBTWEsS0FBSztZQUFFRixLQUFLLEVBQUxBLEtBQUs7WUFBRTJFLGFBQWEsRUFBYkE7VUFBYSxFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUNEbEIsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtVQUNiekQsS0FBSyxDQUFDb0UsUUFBUSxDQUFDLEdBQUdJLFVBQVU7VUFDNUJ5QixpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDMUI7TUFDRixDQUFDLENBQUM7SUFDSjtFQUNGLENBQUMsRUFBRSxDQUFDM0MsSUFBSSxDQUFDLENBQUM7RUFFVixJQUFNaUUsV0FBVyxHQUFHdkgsS0FBSyxDQUFDUyxJQUFJLEtBQUssQ0FBQyxJQUFJVCxLQUFLLENBQUNnRyxTQUFTLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSWhHLEtBQUssQ0FBQ1ksR0FBRyxJQUFJWixLQUFLLENBQUNZLEdBQUcsSUFBSSxFQUFFO0VBRWxHLElBQU00RyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBLEVBQVM7SUFDakNaLFVBQVUsQ0FBQ3hCLEdBQUcsR0FBRyxDQUFDO0lBQ2xCd0IsVUFBVSxDQUFDaEcsR0FBRyxHQUFHLEVBQUU7SUFFbkJaLEtBQUssQ0FBQ1ksR0FBRyxHQUFHLEVBQUU7SUFDZFosS0FBSyxDQUFDUyxJQUFJLEdBQUcsQ0FBQztJQUNkVCxLQUFLLENBQUNnRyxTQUFTLEdBQUcsQ0FBQztJQUVuQi9GLFFBQVEsQ0FBQVosYUFBQSxDQUFBQSxhQUFBLEtBQU1hLEtBQUs7TUFBRUYsS0FBSyxFQUFMQTtJQUFLLEVBQUUsQ0FBQztFQUMvQixDQUFDO0VBRUQsSUFBTXlILGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlaLFNBQVMsRUFBSztJQUN2QyxJQUFJQSxTQUFTLENBQUNDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtNQUM5QjtNQUNBLElBQUksQ0FBQ1MsV0FBVyxFQUFFO1FBQ2hCekQsY0FBYyxDQUFDO1VBQ2JSLElBQUksRUFBRSxJQUFJO1VBQ1ZDLEtBQUssRUFBRSxTQUFTO1VBQ2hCQyxJQUFJLEVBQUUsc0dBQXNHO1VBQzVHRSxTQUFTLEVBQUUsU0FBWEEsU0FBU0EsQ0FBQSxFQUFRO1lBQ2Y4RCxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3RCZixzQkFBc0IsQ0FBQyxDQUFDO1lBQ3hCUixpQkFBaUIsQ0FBQyxLQUFLLENBQUM7WUFDeEJoRyxRQUFRLENBQUFaLGFBQUEsQ0FBQUEsYUFBQSxLQUFNYSxLQUFLO2NBQUVGLEtBQUssRUFBTEEsS0FBSztjQUFFNkcsU0FBUyxFQUFUQTtZQUFTLEVBQUUsQ0FBQztVQUMxQyxDQUFDO1VBQ0RwRCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFRO1lBQ2J3QyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7VUFDMUI7UUFDRixDQUFDLENBQUM7UUFFRjtNQUNGO01BRUFXLFVBQVUsQ0FBQ3hCLEdBQUcsR0FBRyxDQUFDO01BQ2xCd0IsVUFBVSxDQUFDaEcsR0FBRyxHQUFHLEVBQUU7TUFFbkJYLFFBQVEsQ0FBQVosYUFBQSxDQUFBQSxhQUFBLEtBQU1hLEtBQUs7UUFBRTJHLFNBQVMsRUFBVEE7TUFBUyxFQUFFLENBQUM7TUFFakM7SUFDRjtJQUVBNUcsUUFBUSxDQUFBWixhQUFBLENBQUFBLGFBQUEsS0FBTWEsS0FBSztNQUFFMkcsU0FBUyxFQUFUQTtJQUFTLEVBQUUsQ0FBQztFQUNuQyxDQUFDO0VBRUQsb0JBQ0U3SixNQUFBLFlBQUEwSSxhQUFBLENBQUM3RSxhQUFhLHFCQUNaN0QsTUFBQSxZQUFBMEksYUFBQSxDQUFDbkksV0FBQSxXQUFVO0lBQUNzSSxPQUFPLEVBQUU7RUFBWSxHQUFDLGlCQUEyQixDQUFDLGVBQzlEN0ksTUFBQSxZQUFBMEksYUFBQSxDQUFDMUUsYUFBYSxxQkFDWmhFLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQ2pFLGFBQWEscUJBQ1p6RSxNQUFBLFlBQUEwSSxhQUFBLENBQUNsSSxVQUFBLFdBQVM7SUFDUitDLEtBQUssRUFBRUwsS0FBSyxDQUFDMkcsU0FBVTtJQUN2QjVHLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHdkMsQ0FBQztNQUFBLE9BQUsrSixpQkFBaUIsQ0FBQy9KLENBQUMsQ0FBQzJKLE1BQU0sQ0FBQzlHLEtBQUssQ0FBQztJQUFBLENBQUM7SUFDbkQyQyxtQkFBbUIsRUFBRUEsbUJBQW9CO0lBQ3pDQyxjQUFjLEVBQUVBO0VBQWUsQ0FDaEMsQ0FBQyxlQUNGbkcsTUFBQSxZQUFBMEksYUFBQSxDQUFDMUQscUJBQXFCO0lBQ3BCNEQsS0FBSyxFQUFDLFdBQVc7SUFDakJyRixLQUFLLEVBQUVQLEtBQUssQ0FBQ1ksR0FBSTtJQUNqQndFLEdBQUcsRUFBRXdCLFVBQVUsQ0FBQzFHLEtBQUssQ0FBQzJHLFNBQVMsQ0FBQyxDQUFDekIsR0FBSTtJQUNyQ3hFLEdBQUcsRUFBRWdHLFVBQVUsQ0FBQzFHLEtBQUssQ0FBQzJHLFNBQVMsQ0FBQyxDQUFDakcsR0FBSTtJQUNyQ2lGLE9BQU8sRUFBQyxVQUFVO0lBQ2xCNUYsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUd2QyxDQUFDLEVBQUVvSSxDQUFDO01BQUEsT0FBS0MsY0FBYyxDQUFDLEtBQUssRUFBRUQsQ0FBQyxFQUFFcEksQ0FBQyxDQUFDO0lBQUE7RUFBQyxDQUNqRCxDQUNZLENBQUMsRUFDZixDQUFDd0MsS0FBSyxDQUFDMkcsU0FBUyxDQUFDQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUlyQixVQUFVLEVBRS9DUixpQkFBaUIsaUJBQ2hCakksTUFBQSxZQUFBMEksYUFBQSxDQUFDeEQsZ0JBQWdCLHFCQUNmbEYsTUFBQSxZQUFBMEksYUFBQSwyQkFDRTFJLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQ25JLFdBQUEsV0FBVSxRQUFDLGdCQUEwQixDQUNuQyxDQUFDLGVBRU5QLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQ25FLGdCQUFnQixxQkFDZnZFLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQy9ELGVBQWU7SUFDZGlFLEtBQUssRUFBRSxPQUFRO0lBQ2ZyRixLQUFLLEVBQUV1RSxJQUFJLENBQUMvRCxLQUFNO0lBQ2xCcUUsR0FBRyxFQUFFRCxnQkFBZ0IsQ0FBQ0MsR0FBSTtJQUMxQnhFLEdBQUcsRUFBRXVFLGdCQUFnQixDQUFDdkUsR0FBSTtJQUMxQkgsSUFBSSxFQUFFMEUsZ0JBQWdCLENBQUMxRSxJQUFLO0lBQzVCb0YsT0FBTyxFQUFFLFVBQVc7SUFDcEI1RixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBR3ZDLENBQUMsRUFBRW9JLENBQUM7TUFBQSxPQUFLaUIsYUFBYSxDQUFDLE9BQU8sRUFBRWpCLENBQUMsQ0FBQztJQUFBO0VBQUMsQ0FDL0MsQ0FBQyxlQUNGOUksTUFBQSxZQUFBMEksYUFBQSxDQUFDdEQsY0FBYyxRQUFDLGlCQUErQixDQUMvQixDQUFDLGVBRW5CcEYsTUFBQSxZQUFBMEksYUFBQSxDQUFDbkUsZ0JBQWdCLHFCQUNmdkUsTUFBQSxZQUFBMEksYUFBQSxDQUFDL0QsZUFBZTtJQUNkaUUsS0FBSyxFQUFFLFFBQVM7SUFDaEJyRixLQUFLLEVBQUV1RSxJQUFJLENBQUNJLE1BQU87SUFDbkJFLEdBQUcsRUFBRUMsaUJBQWlCLENBQUNELEdBQUk7SUFDM0J4RSxHQUFHLEVBQUV5RSxpQkFBaUIsQ0FBQ3pFLEdBQUk7SUFDM0JILElBQUksRUFBRTRFLGlCQUFpQixDQUFDNUUsSUFBSztJQUM3Qm9GLE9BQU8sRUFBRSxVQUFXO0lBQ3BCNUYsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUd2QyxDQUFDLEVBQUVvSSxDQUFDO01BQUEsT0FBS2lCLGFBQWEsQ0FBQyxRQUFRLEVBQUVqQixDQUFDLENBQUM7SUFBQTtFQUFDLENBQ2hELENBQUMsZUFDRjlJLE1BQUEsWUFBQTBJLGFBQUEsQ0FBQ3RELGNBQWMsUUFBQyxrQkFBZ0MsQ0FDaEMsQ0FDRixDQUVQLENBQUMsZUFFaEJwRixNQUFBLFlBQUEwSSxhQUFBLENBQUNqSSxTQUFBLENBQUFpSyxXQUFXO0lBQ1ZwRSxJQUFJLEVBQUVPLFdBQVcsQ0FBQ1AsSUFBSztJQUN2QkMsS0FBSyxFQUFFTSxXQUFXLENBQUNOLEtBQU07SUFDekJDLElBQUksRUFBRUssV0FBVyxDQUFDTCxJQUFLO0lBQ3ZCQyxPQUFPLEVBQUVJLFdBQVcsQ0FBQ0osT0FBUTtJQUM3QkMsU0FBUyxFQUFFRyxXQUFXLENBQUNIO0VBQVUsQ0FDbEMsQ0FDWSxDQUFDO0FBRXBCLENBQUM7QUFFRGxCLG1CQUFtQixDQUFDbUYsU0FBUyxHQUFHO0VBQzlCakYsZUFBZSxFQUFFa0YscUJBQVMsQ0FBQ0MsTUFBTTtFQUNqQ0MsTUFBTSxFQUFFRixxQkFBUyxDQUFDQyxNQUFNO0VBQ3hCakYsVUFBVSxFQUFFZ0YscUJBQVMsQ0FBQ0MsTUFBTTtFQUM1Qi9FLFdBQVcsRUFBRThFLHFCQUFTLENBQUNDLE1BQU07RUFDN0IzSCxLQUFLLEVBQUUwSCxxQkFBUyxDQUFDQyxNQUFNO0VBQ3ZCNUgsUUFBUSxFQUFFMkgscUJBQVMsQ0FBQ0csSUFBSTtFQUN4Qi9ILEtBQUssRUFBRTRILHFCQUFTLENBQUNDLE1BQU07RUFDdkJHLGNBQWMsRUFBRUoscUJBQVMsQ0FBQ0MsTUFBTTtFQUNoQy9DLElBQUksRUFBRThDLHFCQUFTLENBQUNDLE1BQU07RUFDdEI3RSw4QkFBOEIsRUFBRTRFLHFCQUFTLENBQUNDLE1BQU07RUFDaEQzRSxtQkFBbUIsRUFBRTBFLHFCQUFTLENBQUNDLE1BQU07RUFDckMxRSxjQUFjLEVBQUV5RSxxQkFBUyxDQUFDSztBQUM1QixDQUFDO0FBQUMsSUFBQUMsUUFBQSxHQUFBckksT0FBQSxjQUVhMkMsbUJBQW1CIiwiaWdub3JlTGlzdCI6W119
|