@pie-element/charting 10.1.0 → 10.2.0-mui-update.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.
@@ -1,411 +1,312 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
- exports["default"] = exports.Configure = void 0;
9
-
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
-
12
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
-
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
15
-
16
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
17
-
18
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
19
-
20
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
21
-
7
+ exports.default = exports.Configure = void 0;
22
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
23
-
24
9
  var _react = _interopRequireDefault(require("react"));
25
-
26
- var _styles = require("@material-ui/core/styles");
27
-
10
+ var _styles = require("@mui/material/styles");
28
11
  var _charting = require("@pie-lib/charting");
29
-
30
12
  var _configUi = require("@pie-lib/config-ui");
31
-
32
13
  var _propTypes = _interopRequireDefault(require("prop-types"));
33
-
34
14
  var _debug = _interopRequireDefault(require("debug"));
35
-
36
- var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
37
-
15
+ var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
38
16
  var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
39
-
40
17
  var _chartingConfig = _interopRequireDefault(require("./charting-config"));
41
-
42
18
  var _correctResponse = _interopRequireDefault(require("./correct-response"));
43
-
44
19
  var _utils = require("./utils");
45
-
46
- 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; }
47
-
48
- 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; }
49
-
50
- 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); }; }
51
-
52
- 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; } }
53
-
54
- var log = (0, _debug["default"])('@pie-element:graphing:configure');
55
- var Panel = _configUi.settings.Panel,
56
- toggle = _configUi.settings.toggle,
57
- radio = _configUi.settings.radio,
58
- dropdown = _configUi.settings.dropdown,
59
- textField = _configUi.settings.textField;
60
-
61
- var styles = function styles(theme) {
62
- return {
63
- title: {
64
- fontSize: '1.1rem',
65
- display: 'block',
66
- marginTop: theme.spacing.unit * 2,
67
- marginBottom: theme.spacing.unit
68
- },
69
- promptHolder: {
70
- width: '100%',
71
- paddingTop: theme.spacing.unit * 2,
72
- marginBottom: theme.spacing.unit * 2
73
- },
74
- description: {
75
- marginBottom: theme.spacing.unit * 2.5
76
- },
77
- errorText: {
78
- fontSize: theme.typography.fontSize - 2,
79
- color: theme.palette.error.main,
80
- paddingTop: theme.spacing.unit
81
- }
82
- };
83
- };
84
-
85
- var charts = [_charting.chartTypes.Bar(), _charting.chartTypes.Histogram(), _charting.chartTypes.LineDot(), _charting.chartTypes.LineCross(), _charting.chartTypes.DotPlot(), _charting.chartTypes.LinePlot()];
86
-
87
- var Configure = /*#__PURE__*/function (_React$Component) {
88
- (0, _inherits2["default"])(Configure, _React$Component);
89
-
90
- var _super = _createSuper(Configure);
91
-
92
- function Configure(props) {
93
- var _this;
94
-
95
- (0, _classCallCheck2["default"])(this, Configure);
96
- _this = _super.call(this, props);
97
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onRationaleChange", function (rationale) {
98
- return _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
99
- rationale: rationale
100
- }));
101
- });
102
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onPromptChange", function (prompt) {
103
- return _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
104
- prompt: prompt
105
- }));
106
- });
107
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onTeacherInstructionsChange", function (teacherInstructions) {
108
- return _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
109
- teacherInstructions: teacherInstructions
110
- }));
111
- });
112
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChartTypeChange", function (chartType) {
113
- return _this.props.onModelChanged(_objectSpread(_objectSpread({}, _this.props.model), {}, {
114
- chartType: chartType
115
- }));
116
- });
117
- (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onConfigChange", function (config) {
118
- var _this$props = _this.props,
119
- model = _this$props.model,
120
- onModelChanged = _this$props.onModelChanged;
121
- var _this$state = _this.state,
122
- oldGridValues = _this$state.gridValues,
123
- oldLabelValues = _this$state.labelValues;
124
-
125
- var updatedModel = _objectSpread(_objectSpread({}, model), config);
126
-
127
- var graph = updatedModel.graph,
128
- range = updatedModel.range;
129
- var gridValues = {};
130
- var labelValues = {};
131
- var rangeConstraints = (0, _utils.applyConstraints)(range, graph.height, oldGridValues.range, oldLabelValues.range);
20
+ const log = (0, _debug.default)('@pie-element:graphing:configure');
21
+ const {
22
+ Panel,
23
+ toggle,
24
+ radio,
25
+ dropdown,
26
+ textField
27
+ } = _configUi.settings;
28
+ const PromptHolder = (0, _styles.styled)(_configUi.InputContainer)(({
29
+ theme
30
+ }) => ({
31
+ width: '100%',
32
+ paddingTop: theme.spacing(2),
33
+ marginBottom: theme.spacing(2)
34
+ }));
35
+ const Description = (0, _styles.styled)(_Typography.default)(({
36
+ theme
37
+ }) => ({
38
+ marginBottom: theme.spacing(2.5)
39
+ }));
40
+ const ErrorText = (0, _styles.styled)('div')(({
41
+ theme
42
+ }) => ({
43
+ fontSize: theme.typography.fontSize - 2,
44
+ color: theme.palette.error.main,
45
+ paddingTop: theme.spacing(1)
46
+ }));
47
+ const charts = [_charting.chartTypes.Bar(), _charting.chartTypes.Histogram(), _charting.chartTypes.LineDot(), _charting.chartTypes.LineCross(), _charting.chartTypes.DotPlot(), _charting.chartTypes.LinePlot()];
48
+ class Configure extends _react.default.Component {
49
+ constructor(props) {
50
+ super(props);
51
+ (0, _defineProperty2.default)(this, "onRationaleChange", rationale => this.props.onModelChanged({
52
+ ...this.props.model,
53
+ rationale
54
+ }));
55
+ (0, _defineProperty2.default)(this, "onPromptChange", prompt => this.props.onModelChanged({
56
+ ...this.props.model,
57
+ prompt
58
+ }));
59
+ (0, _defineProperty2.default)(this, "onTeacherInstructionsChange", teacherInstructions => this.props.onModelChanged({
60
+ ...this.props.model,
61
+ teacherInstructions
62
+ }));
63
+ (0, _defineProperty2.default)(this, "onChartTypeChange", chartType => this.props.onModelChanged({
64
+ ...this.props.model,
65
+ chartType
66
+ }));
67
+ (0, _defineProperty2.default)(this, "onConfigChange", config => {
68
+ const {
69
+ model,
70
+ onModelChanged
71
+ } = this.props;
72
+ const {
73
+ gridValues: oldGridValues,
74
+ labelValues: oldLabelValues
75
+ } = this.state;
76
+ const updatedModel = {
77
+ ...model,
78
+ ...config
79
+ };
80
+ const {
81
+ graph,
82
+ range
83
+ } = updatedModel;
84
+ const gridValues = {};
85
+ const labelValues = {};
86
+ const rangeConstraints = (0, _utils.applyConstraints)(range, graph.height, oldGridValues.range, oldLabelValues.range);
132
87
  gridValues.range = rangeConstraints.gridValues;
133
88
  labelValues.range = rangeConstraints.labelValues;
134
-
135
- _this.setState({
136
- gridValues: gridValues,
137
- labelValues: labelValues
89
+ this.setState({
90
+ gridValues,
91
+ labelValues
138
92
  });
139
-
140
93
  onModelChanged(updatedModel);
141
94
  });
142
-
143
- var _ref = props.model || {},
144
- _ref$range = _ref.range,
145
- _range = _ref$range === void 0 ? {} : _ref$range,
146
- _graph = _ref.graph;
147
-
148
- var _gridValues = {
95
+ const {
96
+ range: _range = {},
97
+ graph: _graph
98
+ } = props.model || {};
99
+ const _gridValues = {
149
100
  range: (0, _utils.getGridValues)(_range, _graph.height, true)
150
101
  };
151
- var _labelValues = {
102
+ const _labelValues = {
152
103
  range: (0, _utils.getLabelValues)(_range.step || 1)
153
104
  };
154
- _this.state = {
105
+ this.state = {
155
106
  gridValues: _gridValues,
156
107
  labelValues: _labelValues
157
108
  };
158
- return _this;
159
109
  }
160
-
161
- (0, _createClass2["default"])(Configure, [{
162
- key: "render",
163
- value: function render() {
164
- var _chartingOptions$chan, _chartingOptions$chan2, _chartingOptions$addC;
165
-
166
- var _this$props2 = this.props,
167
- classes = _this$props2.classes,
168
- configuration = _this$props2.configuration,
169
- imageSupport = _this$props2.imageSupport,
170
- model = _this$props2.model,
171
- onConfigurationChanged = _this$props2.onConfigurationChanged,
172
- onModelChanged = _this$props2.onModelChanged,
173
- uploadSoundSupport = _this$props2.uploadSoundSupport;
174
- log('[render] model', model);
175
- var graph = model.graph;
176
-
177
- var _ref2 = configuration || {},
178
- _ref2$baseInputConfig = _ref2.baseInputConfiguration,
179
- baseInputConfiguration = _ref2$baseInputConfig === void 0 ? {} : _ref2$baseInputConfig,
180
- _ref2$contentDimensio = _ref2.contentDimensions,
181
- contentDimensions = _ref2$contentDimensio === void 0 ? {} : _ref2$contentDimensio,
182
- _ref2$chartDimensions = _ref2.chartDimensions,
183
- chartDimensions = _ref2$chartDimensions === void 0 ? {} : _ref2$chartDimensions,
184
- _ref2$authorNewCatego = _ref2.authorNewCategoryDefaults,
185
- authorNewCategoryDefaults = _ref2$authorNewCatego === void 0 ? {} : _ref2$authorNewCatego,
186
- _ref2$labelsPlacehold = _ref2.labelsPlaceholders,
187
- labelsPlaceholders = _ref2$labelsPlacehold === void 0 ? {} : _ref2$labelsPlacehold,
188
- _ref2$instruction = _ref2.instruction,
189
- instruction = _ref2$instruction === void 0 ? {} : _ref2$instruction,
190
- _ref2$maxImageWidth = _ref2.maxImageWidth,
191
- maxImageWidth = _ref2$maxImageWidth === void 0 ? {} : _ref2$maxImageWidth,
192
- _ref2$maxImageHeight = _ref2.maxImageHeight,
193
- maxImageHeight = _ref2$maxImageHeight === void 0 ? {} : _ref2$maxImageHeight,
194
- _ref2$prompt = _ref2.prompt,
195
- prompt = _ref2$prompt === void 0 ? {} : _ref2$prompt,
196
- _ref2$rationale = _ref2.rationale,
197
- rationale = _ref2$rationale === void 0 ? {} : _ref2$rationale,
198
- _ref2$scoringType = _ref2.scoringType,
199
- scoringType = _ref2$scoringType === void 0 ? {} : _ref2$scoringType,
200
- settingsPanelDisabled = _ref2.settingsPanelDisabled,
201
- _ref2$spellCheck = _ref2.spellCheck,
202
- spellCheck = _ref2$spellCheck === void 0 ? {} : _ref2$spellCheck,
203
- _ref2$studentInstruct = _ref2.studentInstructions,
204
- studentInstructions = _ref2$studentInstruct === void 0 ? {} : _ref2$studentInstruct,
205
- _ref2$teacherInstruct = _ref2.teacherInstructions,
206
- teacherInstructions = _ref2$teacherInstruct === void 0 ? {} : _ref2$teacherInstruct,
207
- _ref2$titlePlaceholde = _ref2.titlePlaceholder,
208
- titlePlaceholder = _ref2$titlePlaceholde === void 0 ? {} : _ref2$titlePlaceholde,
209
- _ref2$withRubric = _ref2.withRubric,
210
- withRubric = _ref2$withRubric === void 0 ? {} : _ref2$withRubric,
211
- _ref2$chartingOptions = _ref2.chartingOptions,
212
- chartingOptions = _ref2$chartingOptions === void 0 ? {} : _ref2$chartingOptions,
213
- _ref2$availableChartT = _ref2.availableChartTypes,
214
- availableChartTypes = _ref2$availableChartT === void 0 ? {} : _ref2$availableChartT,
215
- _ref2$mathMlOptions = _ref2.mathMlOptions,
216
- mathMlOptions = _ref2$mathMlOptions === void 0 ? {} : _ref2$mathMlOptions,
217
- chartTypeLabel = _ref2.chartTypeLabel,
218
- _ref2$language = _ref2.language,
219
- language = _ref2$language === void 0 ? {} : _ref2$language,
220
- _ref2$languageChoices = _ref2.languageChoices,
221
- languageChoices = _ref2$languageChoices === void 0 ? {} : _ref2$languageChoices,
222
- labelsCharactersLimit = _ref2.labelsCharactersLimit;
223
-
224
- var _ref3 = model || {},
225
- errors = _ref3.errors,
226
- extraCSSRules = _ref3.extraCSSRules,
227
- promptEnabled = _ref3.promptEnabled,
228
- rationaleEnabled = _ref3.rationaleEnabled,
229
- spellCheckEnabled = _ref3.spellCheckEnabled,
230
- teacherInstructionsEnabled = _ref3.teacherInstructionsEnabled,
231
- studentNewCategoryDefaultLabel = _ref3.studentNewCategoryDefaultLabel;
232
-
233
- var _ref4 = errors || {},
234
- categoryErrors = _ref4.categoryErrors,
235
- correctAnswerErrors = _ref4.correctAnswerErrors,
236
- promptError = _ref4.prompt,
237
- rationaleError = _ref4.rationale,
238
- teacherInstructionsError = _ref4.teacherInstructions;
239
-
240
- var _this$state2 = this.state,
241
- gridValues = _this$state2.gridValues,
242
- labelValues = _this$state2.labelValues;
243
- var showPixeGuides = chartDimensions.showInConfigPanel || true;
244
- var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
245
- var defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
246
- var panelItemType = {
247
- changeInteractiveEnabled: ((_chartingOptions$chan = chartingOptions.changeInteractive) === null || _chartingOptions$chan === void 0 ? void 0 : _chartingOptions$chan.settings) && toggle(chartingOptions.changeInteractive.settingsLabel),
248
- changeEditableEnabled: ((_chartingOptions$chan2 = chartingOptions.changeEditable) === null || _chartingOptions$chan2 === void 0 ? void 0 : _chartingOptions$chan2.settings) && toggle(chartingOptions.changeEditable.settingsLabel),
249
- changeAddCategoryEnabled: ((_chartingOptions$addC = chartingOptions.addCategory) === null || _chartingOptions$addC === void 0 ? void 0 : _chartingOptions$addC.settings) && toggle(chartingOptions.addCategory.settingsLabel)
250
- };
251
- var panelProperties = {
252
- teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
253
- studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),
254
- rationaleEnabled: rationale.settings && toggle(rationale.label),
255
- spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
256
- promptEnabled: prompt.settings && toggle(prompt.label),
257
- scoringType: scoringType.settings && radio(scoringType.label, ['all or nothing', 'partial scoring']),
258
- rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label),
259
- 'language.enabled': language.settings && toggle(language.label, true),
260
- language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),
261
- instruction: instruction.settings && textField(instruction.label)
262
- };
263
-
264
- var getPluginProps = function getPluginProps() {
265
- var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
266
- return _objectSpread(_objectSpread({}, baseInputConfiguration), props);
267
- };
268
-
269
- return /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
270
- extraCSSRules: extraCSSRules,
271
- dimensions: contentDimensions,
272
- hideSettings: settingsPanelDisabled,
273
- settings: /*#__PURE__*/_react["default"].createElement(Panel, {
274
- model: model,
275
- configuration: configuration,
276
- onChangeModel: onModelChanged,
277
- onChangeConfiguration: onConfigurationChanged,
278
- groups: {
279
- Settings: panelItemType,
280
- Properties: panelProperties
281
- }
282
- })
283
- }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
284
- component: "div",
285
- type: "body1",
286
- className: classes.description
287
- }, (instruction === null || instruction === void 0 ? void 0 : instruction.label) || ''), teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
288
- label: teacherInstructions.label,
289
- className: classes.promptHolder
290
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
291
- className: classes.prompt,
292
- markup: model.teacherInstructions || '',
293
- onChange: this.onTeacherInstructionsChange,
294
- imageSupport: imageSupport,
295
- nonEmpty: false,
296
- error: teacherInstructionsError,
297
- spellCheck: spellCheckEnabled,
298
- pluginProps: getPluginProps(teacherInstructions === null || teacherInstructions === void 0 ? void 0 : teacherInstructions.inputConfiguration),
299
- maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
300
- maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
301
- uploadSoundSupport: uploadSoundSupport,
302
- languageCharactersProps: [{
303
- language: 'spanish'
304
- }, {
305
- language: 'special'
306
- }],
307
- mathMlOptions: mathMlOptions
308
- }), teacherInstructionsError && /*#__PURE__*/_react["default"].createElement("div", {
309
- className: classes.errorText
310
- }, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
311
- label: prompt.label,
312
- className: classes.promptHolder
313
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
314
- className: classes.prompt,
315
- markup: model.prompt,
316
- onChange: this.onPromptChange,
317
- imageSupport: imageSupport,
318
- nonEmpty: false,
319
- error: promptError,
320
- spellCheck: spellCheckEnabled,
321
- disableUnderline: true,
322
- pluginProps: getPluginProps(prompt === null || prompt === void 0 ? void 0 : prompt.inputConfiguration),
323
- maxImageWidth: defaultImageMaxWidth,
324
- maxImageHeight: defaultImageMaxHeight,
325
- uploadSoundSupport: uploadSoundSupport,
326
- languageCharactersProps: [{
327
- language: 'spanish'
328
- }, {
329
- language: 'special'
330
- }],
331
- mathMlOptions: mathMlOptions
332
- }), promptError && /*#__PURE__*/_react["default"].createElement("div", {
333
- className: classes.errorText
334
- }, promptError)), /*#__PURE__*/_react["default"].createElement(_charting.ConfigureChartPanel, {
335
- model: model,
336
- onChange: this.onConfigChange,
337
- gridValues: gridValues,
338
- labelValues: labelValues,
339
- chartDimensions: chartDimensions,
340
- charts: charts,
341
- studentNewCategoryDefaultLabel: studentNewCategoryDefaultLabel,
342
- availableChartTypes: availableChartTypes,
343
- chartTypeLabel: chartTypeLabel
344
- }), /*#__PURE__*/_react["default"].createElement(_chartingConfig["default"], {
345
- model: model,
346
- onChange: onModelChanged,
347
- charts: charts,
348
- labelsPlaceholders: labelsPlaceholders,
349
- titlePlaceholder: titlePlaceholder,
350
- showPixelGuides: showPixeGuides,
351
- authorNewCategoryDefaults: authorNewCategoryDefaults,
352
- chartingOptions: chartingOptions,
353
- mathMlOptions: mathMlOptions,
354
- labelsCharactersLimit: labelsCharactersLimit
355
- }), /*#__PURE__*/_react["default"].createElement(_correctResponse["default"], {
356
- config: graph,
110
+ render() {
111
+ const {
112
+ configuration,
113
+ imageSupport,
114
+ model,
115
+ onConfigurationChanged,
116
+ onModelChanged,
117
+ uploadSoundSupport
118
+ } = this.props;
119
+ log('[render] model', model);
120
+ const {
121
+ graph
122
+ } = model;
123
+ const {
124
+ baseInputConfiguration = {},
125
+ contentDimensions = {},
126
+ chartDimensions = {},
127
+ authorNewCategoryDefaults = {},
128
+ labelsPlaceholders = {},
129
+ instruction = {},
130
+ maxImageWidth = {},
131
+ maxImageHeight = {},
132
+ prompt = {},
133
+ rationale = {},
134
+ scoringType = {},
135
+ settingsPanelDisabled,
136
+ spellCheck = {},
137
+ studentInstructions = {},
138
+ teacherInstructions = {},
139
+ titlePlaceholder = {},
140
+ withRubric = {},
141
+ chartingOptions = {},
142
+ availableChartTypes = {},
143
+ mathMlOptions = {},
144
+ chartTypeLabel,
145
+ language = {},
146
+ languageChoices = {},
147
+ labelsCharactersLimit
148
+ } = configuration || {};
149
+ const {
150
+ errors,
151
+ extraCSSRules,
152
+ promptEnabled,
153
+ rationaleEnabled,
154
+ spellCheckEnabled,
155
+ teacherInstructionsEnabled,
156
+ studentNewCategoryDefaultLabel
157
+ } = model || {};
158
+ const {
159
+ categoryErrors,
160
+ correctAnswerErrors,
161
+ prompt: promptError,
162
+ rationale: rationaleError,
163
+ teacherInstructions: teacherInstructionsError
164
+ } = errors || {};
165
+ const {
166
+ gridValues,
167
+ labelValues
168
+ } = this.state;
169
+ const showPixeGuides = chartDimensions.showInConfigPanel || true;
170
+ const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
171
+ const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
172
+ const panelItemType = {
173
+ changeInteractiveEnabled: chartingOptions.changeInteractive?.settings && toggle(chartingOptions.changeInteractive.settingsLabel),
174
+ changeEditableEnabled: chartingOptions.changeEditable?.settings && toggle(chartingOptions.changeEditable.settingsLabel),
175
+ changeAddCategoryEnabled: chartingOptions.addCategory?.settings && toggle(chartingOptions.addCategory.settingsLabel)
176
+ };
177
+ const panelProperties = {
178
+ teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
179
+ studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),
180
+ rationaleEnabled: rationale.settings && toggle(rationale.label),
181
+ spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
182
+ promptEnabled: prompt.settings && toggle(prompt.label),
183
+ scoringType: scoringType.settings && radio(scoringType.label, ['all or nothing', 'partial scoring']),
184
+ rubricEnabled: withRubric?.settings && toggle(withRubric?.label),
185
+ 'language.enabled': language.settings && toggle(language.label, true),
186
+ language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),
187
+ instruction: instruction.settings && textField(instruction.label)
188
+ };
189
+ const getPluginProps = (props = {}) => ({
190
+ ...baseInputConfiguration,
191
+ ...props
192
+ });
193
+ return /*#__PURE__*/_react.default.createElement(_configUi.layout.ConfigLayout, {
194
+ extraCSSRules: extraCSSRules,
195
+ dimensions: contentDimensions,
196
+ hideSettings: settingsPanelDisabled,
197
+ settings: /*#__PURE__*/_react.default.createElement(Panel, {
357
198
  model: model,
358
- onChange: onModelChanged,
359
- charts: charts,
360
- error: categoryErrors,
361
- correctAnswerErrors: correctAnswerErrors,
362
- studentNewCategoryDefaultLabel: studentNewCategoryDefaultLabel,
363
- mathMlOptions: mathMlOptions,
364
- labelsPlaceholders: labelsPlaceholders
365
- }), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
366
- label: rationale.label || 'Rationale',
367
- className: classes.promptHolder
368
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
369
- className: classes.prompt,
370
- markup: model.rationale || '',
371
- onChange: this.onRationaleChange,
372
- imageSupport: imageSupport,
373
- error: rationaleError,
374
- spellCheck: spellCheckEnabled,
375
- pluginProps: getPluginProps(rationale === null || rationale === void 0 ? void 0 : rationale.inputConfiguration),
376
- maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
377
- maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
378
- uploadSoundSupport: uploadSoundSupport,
379
- languageCharactersProps: [{
380
- language: 'spanish'
381
- }, {
382
- language: 'special'
383
- }],
384
- mathMlOptions: mathMlOptions
385
- }), rationaleError && /*#__PURE__*/_react["default"].createElement("div", {
386
- className: classes.errorText
387
- }, rationaleError)));
388
- }
389
- }]);
390
- return Configure;
391
- }(_react["default"].Component);
392
-
199
+ configuration: configuration,
200
+ onChangeModel: onModelChanged,
201
+ onChangeConfiguration: onConfigurationChanged,
202
+ groups: {
203
+ Settings: panelItemType,
204
+ Properties: panelProperties
205
+ }
206
+ })
207
+ }, /*#__PURE__*/_react.default.createElement(Description, {
208
+ component: "div",
209
+ type: "body1"
210
+ }, instruction?.label || ''), teacherInstructionsEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
211
+ label: teacherInstructions.label
212
+ }, /*#__PURE__*/_react.default.createElement(_editableHtml.default, {
213
+ markup: model.teacherInstructions || '',
214
+ onChange: this.onTeacherInstructionsChange,
215
+ imageSupport: imageSupport,
216
+ nonEmpty: false,
217
+ error: teacherInstructionsError,
218
+ spellCheck: spellCheckEnabled,
219
+ pluginProps: getPluginProps(teacherInstructions?.inputConfiguration),
220
+ maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
221
+ maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
222
+ uploadSoundSupport: uploadSoundSupport,
223
+ languageCharactersProps: [{
224
+ language: 'spanish'
225
+ }, {
226
+ language: 'special'
227
+ }],
228
+ mathMlOptions: mathMlOptions
229
+ }), teacherInstructionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
230
+ label: prompt.label
231
+ }, /*#__PURE__*/_react.default.createElement(_editableHtml.default, {
232
+ markup: model.prompt,
233
+ onChange: this.onPromptChange,
234
+ imageSupport: imageSupport,
235
+ nonEmpty: false,
236
+ error: promptError,
237
+ spellCheck: spellCheckEnabled,
238
+ disableUnderline: true,
239
+ pluginProps: getPluginProps(prompt?.inputConfiguration),
240
+ maxImageWidth: defaultImageMaxWidth,
241
+ maxImageHeight: defaultImageMaxHeight,
242
+ uploadSoundSupport: uploadSoundSupport,
243
+ languageCharactersProps: [{
244
+ language: 'spanish'
245
+ }, {
246
+ language: 'special'
247
+ }],
248
+ mathMlOptions: mathMlOptions
249
+ }), promptError && /*#__PURE__*/_react.default.createElement(ErrorText, null, promptError)), /*#__PURE__*/_react.default.createElement(_charting.ConfigureChartPanel, {
250
+ model: model,
251
+ onChange: this.onConfigChange,
252
+ gridValues: gridValues,
253
+ labelValues: labelValues,
254
+ chartDimensions: chartDimensions,
255
+ charts: charts,
256
+ studentNewCategoryDefaultLabel: studentNewCategoryDefaultLabel,
257
+ availableChartTypes: availableChartTypes,
258
+ chartTypeLabel: chartTypeLabel
259
+ }), /*#__PURE__*/_react.default.createElement(_chartingConfig.default, {
260
+ model: model,
261
+ onChange: onModelChanged,
262
+ charts: charts,
263
+ labelsPlaceholders: labelsPlaceholders,
264
+ titlePlaceholder: titlePlaceholder,
265
+ showPixelGuides: showPixeGuides,
266
+ authorNewCategoryDefaults: authorNewCategoryDefaults,
267
+ chartingOptions: chartingOptions,
268
+ mathMlOptions: mathMlOptions,
269
+ labelsCharactersLimit: labelsCharactersLimit
270
+ }), /*#__PURE__*/_react.default.createElement(_correctResponse.default, {
271
+ config: graph,
272
+ model: model,
273
+ onChange: onModelChanged,
274
+ charts: charts,
275
+ error: categoryErrors,
276
+ correctAnswerErrors: correctAnswerErrors,
277
+ studentNewCategoryDefaultLabel: studentNewCategoryDefaultLabel,
278
+ mathMlOptions: mathMlOptions,
279
+ labelsPlaceholders: labelsPlaceholders
280
+ }), rationaleEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
281
+ label: rationale.label || 'Rationale'
282
+ }, /*#__PURE__*/_react.default.createElement(_editableHtml.default, {
283
+ markup: model.rationale || '',
284
+ onChange: this.onRationaleChange,
285
+ imageSupport: imageSupport,
286
+ error: rationaleError,
287
+ spellCheck: spellCheckEnabled,
288
+ pluginProps: getPluginProps(rationale?.inputConfiguration),
289
+ maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
290
+ maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
291
+ uploadSoundSupport: uploadSoundSupport,
292
+ languageCharactersProps: [{
293
+ language: 'spanish'
294
+ }, {
295
+ language: 'special'
296
+ }],
297
+ mathMlOptions: mathMlOptions
298
+ }), rationaleError && /*#__PURE__*/_react.default.createElement(ErrorText, null, rationaleError)));
299
+ }
300
+ }
393
301
  exports.Configure = Configure;
394
- (0, _defineProperty2["default"])(Configure, "propTypes", {
395
- onModelChanged: _propTypes["default"].func,
396
- onConfigurationChanged: _propTypes["default"].func,
397
- classes: _propTypes["default"].object,
398
- imageSupport: _propTypes["default"].object,
399
- uploadSoundSupport: _propTypes["default"].object,
400
- model: _propTypes["default"].object.isRequired,
401
- configuration: _propTypes["default"].object.isRequired,
402
- chartingOptions: _propTypes["default"].object
302
+ (0, _defineProperty2.default)(Configure, "propTypes", {
303
+ onModelChanged: _propTypes.default.func,
304
+ onConfigurationChanged: _propTypes.default.func,
305
+ imageSupport: _propTypes.default.object,
306
+ uploadSoundSupport: _propTypes.default.object,
307
+ model: _propTypes.default.object.isRequired,
308
+ configuration: _propTypes.default.object.isRequired,
309
+ chartingOptions: _propTypes.default.object
403
310
  });
404
- (0, _defineProperty2["default"])(Configure, "defaultProps", {
405
- classes: {}
406
- });
407
-
408
- var _default = (0, _styles.withStyles)(styles)(Configure);
409
-
410
- exports["default"] = _default;
411
- //# sourceMappingURL=configure.js.map
311
+ var _default = exports.default = Configure;
312
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zdHlsZXMiLCJfY2hhcnRpbmciLCJfY29uZmlnVWkiLCJfcHJvcFR5cGVzIiwiX2RlYnVnIiwiX1R5cG9ncmFwaHkiLCJfZWRpdGFibGVIdG1sIiwiX2NoYXJ0aW5nQ29uZmlnIiwiX2NvcnJlY3RSZXNwb25zZSIsIl91dGlscyIsImxvZyIsImRlYnVnIiwiUGFuZWwiLCJ0b2dnbGUiLCJyYWRpbyIsImRyb3Bkb3duIiwidGV4dEZpZWxkIiwic2V0dGluZ3MiLCJQcm9tcHRIb2xkZXIiLCJzdHlsZWQiLCJJbnB1dENvbnRhaW5lciIsInRoZW1lIiwid2lkdGgiLCJwYWRkaW5nVG9wIiwic3BhY2luZyIsIm1hcmdpbkJvdHRvbSIsIkRlc2NyaXB0aW9uIiwiVHlwb2dyYXBoeSIsIkVycm9yVGV4dCIsImZvbnRTaXplIiwidHlwb2dyYXBoeSIsImNvbG9yIiwicGFsZXR0ZSIsImVycm9yIiwibWFpbiIsImNoYXJ0cyIsImNoYXJ0VHlwZXMiLCJCYXIiLCJIaXN0b2dyYW0iLCJMaW5lRG90IiwiTGluZUNyb3NzIiwiRG90UGxvdCIsIkxpbmVQbG90IiwiQ29uZmlndXJlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJyYXRpb25hbGUiLCJvbk1vZGVsQ2hhbmdlZCIsIm1vZGVsIiwicHJvbXB0IiwidGVhY2hlckluc3RydWN0aW9ucyIsImNoYXJ0VHlwZSIsImNvbmZpZyIsImdyaWRWYWx1ZXMiLCJvbGRHcmlkVmFsdWVzIiwibGFiZWxWYWx1ZXMiLCJvbGRMYWJlbFZhbHVlcyIsInN0YXRlIiwidXBkYXRlZE1vZGVsIiwiZ3JhcGgiLCJyYW5nZSIsInJhbmdlQ29uc3RyYWludHMiLCJhcHBseUNvbnN0cmFpbnRzIiwiaGVpZ2h0Iiwic2V0U3RhdGUiLCJnZXRHcmlkVmFsdWVzIiwiZ2V0TGFiZWxWYWx1ZXMiLCJzdGVwIiwicmVuZGVyIiwiY29uZmlndXJhdGlvbiIsImltYWdlU3VwcG9ydCIsIm9uQ29uZmlndXJhdGlvbkNoYW5nZWQiLCJ1cGxvYWRTb3VuZFN1cHBvcnQiLCJiYXNlSW5wdXRDb25maWd1cmF0aW9uIiwiY29udGVudERpbWVuc2lvbnMiLCJjaGFydERpbWVuc2lvbnMiLCJhdXRob3JOZXdDYXRlZ29yeURlZmF1bHRzIiwibGFiZWxzUGxhY2Vob2xkZXJzIiwiaW5zdHJ1Y3Rpb24iLCJtYXhJbWFnZVdpZHRoIiwibWF4SW1hZ2VIZWlnaHQiLCJzY29yaW5nVHlwZSIsInNldHRpbmdzUGFuZWxEaXNhYmxlZCIsInNwZWxsQ2hlY2siLCJzdHVkZW50SW5zdHJ1Y3Rpb25zIiwidGl0bGVQbGFjZWhvbGRlciIsIndpdGhSdWJyaWMiLCJjaGFydGluZ09wdGlvbnMiLCJhdmFpbGFibGVDaGFydFR5cGVzIiwibWF0aE1sT3B0aW9ucyIsImNoYXJ0VHlwZUxhYmVsIiwibGFuZ3VhZ2UiLCJsYW5ndWFnZUNob2ljZXMiLCJsYWJlbHNDaGFyYWN0ZXJzTGltaXQiLCJlcnJvcnMiLCJleHRyYUNTU1J1bGVzIiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJzcGVsbENoZWNrRW5hYmxlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwic3R1ZGVudE5ld0NhdGVnb3J5RGVmYXVsdExhYmVsIiwiY2F0ZWdvcnlFcnJvcnMiLCJjb3JyZWN0QW5zd2VyRXJyb3JzIiwicHJvbXB0RXJyb3IiLCJyYXRpb25hbGVFcnJvciIsInRlYWNoZXJJbnN0cnVjdGlvbnNFcnJvciIsInNob3dQaXhlR3VpZGVzIiwic2hvd0luQ29uZmlnUGFuZWwiLCJkZWZhdWx0SW1hZ2VNYXhXaWR0aCIsImRlZmF1bHRJbWFnZU1heEhlaWdodCIsInBhbmVsSXRlbVR5cGUiLCJjaGFuZ2VJbnRlcmFjdGl2ZUVuYWJsZWQiLCJjaGFuZ2VJbnRlcmFjdGl2ZSIsInNldHRpbmdzTGFiZWwiLCJjaGFuZ2VFZGl0YWJsZUVuYWJsZWQiLCJjaGFuZ2VFZGl0YWJsZSIsImNoYW5nZUFkZENhdGVnb3J5RW5hYmxlZCIsImFkZENhdGVnb3J5IiwicGFuZWxQcm9wZXJ0aWVzIiwibGFiZWwiLCJzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInJ1YnJpY0VuYWJsZWQiLCJlbmFibGVkIiwib3B0aW9ucyIsImdldFBsdWdpblByb3BzIiwiY3JlYXRlRWxlbWVudCIsImxheW91dCIsIkNvbmZpZ0xheW91dCIsImRpbWVuc2lvbnMiLCJoaWRlU2V0dGluZ3MiLCJvbkNoYW5nZU1vZGVsIiwib25DaGFuZ2VDb25maWd1cmF0aW9uIiwiZ3JvdXBzIiwiU2V0dGluZ3MiLCJQcm9wZXJ0aWVzIiwiY29tcG9uZW50IiwidHlwZSIsIm1hcmt1cCIsIm9uQ2hhbmdlIiwib25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlIiwibm9uRW1wdHkiLCJwbHVnaW5Qcm9wcyIsImlucHV0Q29uZmlndXJhdGlvbiIsImxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzIiwib25Qcm9tcHRDaGFuZ2UiLCJkaXNhYmxlVW5kZXJsaW5lIiwiQ29uZmlndXJlQ2hhcnRQYW5lbCIsIm9uQ29uZmlnQ2hhbmdlIiwic2hvd1BpeGVsR3VpZGVzIiwib25SYXRpb25hbGVDaGFuZ2UiLCJleHBvcnRzIiwiUHJvcFR5cGVzIiwiZnVuYyIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25maWd1cmUuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBzdHlsZWQgfSBmcm9tICdAbXVpL21hdGVyaWFsL3N0eWxlcyc7XG5pbXBvcnQgeyBjaGFydFR5cGVzLCBDb25maWd1cmVDaGFydFBhbmVsIH0gZnJvbSAnQHBpZS1saWIvY2hhcnRpbmcnO1xuaW1wb3J0IHsgc2V0dGluZ3MsIGxheW91dCwgSW5wdXRDb250YWluZXIgfSBmcm9tICdAcGllLWxpYi9jb25maWctdWknO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbXVpL21hdGVyaWFsL1R5cG9ncmFwaHknO1xuaW1wb3J0IEVkaXRhYmxlSHRtbCBmcm9tICdAcGllLWxpYi9lZGl0YWJsZS1odG1sJztcblxuaW1wb3J0IENoYXJ0aW5nQ29uZmlnIGZyb20gJy4vY2hhcnRpbmctY29uZmlnJztcbmltcG9ydCBDb3JyZWN0UmVzcG9uc2UgZnJvbSAnLi9jb3JyZWN0LXJlc3BvbnNlJztcbmltcG9ydCB7IGFwcGx5Q29uc3RyYWludHMsIGdldEdyaWRWYWx1ZXMsIGdldExhYmVsVmFsdWVzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWVsZW1lbnQ6Z3JhcGhpbmc6Y29uZmlndXJlJyk7XG5jb25zdCB7IFBhbmVsLCB0b2dnbGUsIHJhZGlvLCBkcm9wZG93biwgdGV4dEZpZWxkIH0gPSBzZXR0aW5ncztcblxuY29uc3QgUHJvbXB0SG9sZGVyID0gc3R5bGVkKElucHV0Q29udGFpbmVyKSgoeyB0aGVtZSB9KSA9PiAoe1xuICB3aWR0aDogJzEwMCUnLFxuICBwYWRkaW5nVG9wOiB0aGVtZS5zcGFjaW5nKDIpLFxuICBtYXJnaW5Cb3R0b206IHRoZW1lLnNwYWNpbmcoMiksXG59KSk7XG5cbmNvbnN0IERlc2NyaXB0aW9uID0gc3R5bGVkKFR5cG9ncmFwaHkpKCh7IHRoZW1lIH0pID0+ICh7XG4gIG1hcmdpbkJvdHRvbTogdGhlbWUuc3BhY2luZygyLjUpLFxufSkpO1xuXG5jb25zdCBFcnJvclRleHQgPSBzdHlsZWQoJ2RpdicpKCh7IHRoZW1lIH0pID0+ICh7XG4gIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRTaXplIC0gMixcbiAgY29sb3I6IHRoZW1lLnBhbGV0dGUuZXJyb3IubWFpbixcbiAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZygxKSxcbn0pKTtcblxuY29uc3QgY2hhcnRzID0gW1xuICBjaGFydFR5cGVzLkJhcigpLFxuICBjaGFydFR5cGVzLkhpc3RvZ3JhbSgpLFxuICBjaGFydFR5cGVzLkxpbmVEb3QoKSxcbiAgY2hhcnRUeXBlcy5MaW5lQ3Jvc3MoKSxcbiAgY2hhcnRUeXBlcy5Eb3RQbG90KCksXG4gIGNoYXJ0VHlwZXMuTGluZVBsb3QoKSxcbl07XG5cbmV4cG9ydCBjbGFzcyBDb25maWd1cmUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIG9uTW9kZWxDaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpbWFnZVN1cHBvcnQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgdXBsb2FkU291bmRTdXBwb3J0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1vZGVsOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgY29uZmlndXJhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIGNoYXJ0aW5nT3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCB7IHJhbmdlID0ge30sIGdyYXBoIH0gPSBwcm9wcy5tb2RlbCB8fCB7fTtcbiAgICBjb25zdCBncmlkVmFsdWVzID0geyByYW5nZTogZ2V0R3JpZFZhbHVlcyhyYW5nZSwgZ3JhcGguaGVpZ2h0LCB0cnVlKSB9O1xuICAgIGNvbnN0IGxhYmVsVmFsdWVzID0geyByYW5nZTogZ2V0TGFiZWxWYWx1ZXMocmFuZ2Uuc3RlcCB8fCAxKSB9O1xuXG4gICAgdGhpcy5zdGF0ZSA9IHsgZ3JpZFZhbHVlcywgbGFiZWxWYWx1ZXMgfTtcbiAgfVxuXG4gIG9uUmF0aW9uYWxlQ2hhbmdlID0gKHJhdGlvbmFsZSkgPT4gdGhpcy5wcm9wcy5vbk1vZGVsQ2hhbmdlZCh7IC4uLnRoaXMucHJvcHMubW9kZWwsIHJhdGlvbmFsZSB9KTtcblxuICBvblByb21wdENoYW5nZSA9IChwcm9tcHQpID0+IHRoaXMucHJvcHMub25Nb2RlbENoYW5nZWQoeyAuLi50aGlzLnByb3BzLm1vZGVsLCBwcm9tcHQgfSk7XG5cbiAgb25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlID0gKHRlYWNoZXJJbnN0cnVjdGlvbnMpID0+XG4gICAgdGhpcy5wcm9wcy5vbk1vZGVsQ2hhbmdlZCh7IC4uLnRoaXMucHJvcHMubW9kZWwsIHRlYWNoZXJJbnN0cnVjdGlvbnMgfSk7XG5cbiAgb25DaGFydFR5cGVDaGFuZ2UgPSAoY2hhcnRUeXBlKSA9PiB0aGlzLnByb3BzLm9uTW9kZWxDaGFuZ2VkKHsgLi4udGhpcy5wcm9wcy5tb2RlbCwgY2hhcnRUeXBlIH0pO1xuXG4gIG9uQ29uZmlnQ2hhbmdlID0gKGNvbmZpZykgPT4ge1xuICAgIGNvbnN0IHsgbW9kZWwsIG9uTW9kZWxDaGFuZ2VkIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZ3JpZFZhbHVlczogb2xkR3JpZFZhbHVlcywgbGFiZWxWYWx1ZXM6IG9sZExhYmVsVmFsdWVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHVwZGF0ZWRNb2RlbCA9IHsgLi4ubW9kZWwsIC4uLmNvbmZpZyB9O1xuICAgIGNvbnN0IHsgZ3JhcGgsIHJhbmdlIH0gPSB1cGRhdGVkTW9kZWw7XG4gICAgY29uc3QgZ3JpZFZhbHVlcyA9IHt9O1xuICAgIGNvbnN0IGxhYmVsVmFsdWVzID0ge307XG5cbiAgICBjb25zdCByYW5nZUNvbnN0cmFpbnRzID0gYXBwbHlDb25zdHJhaW50cyhyYW5nZSwgZ3JhcGguaGVpZ2h0LCBvbGRHcmlkVmFsdWVzLnJhbmdlLCBvbGRMYWJlbFZhbHVlcy5yYW5nZSk7XG5cbiAgICBncmlkVmFsdWVzLnJhbmdlID0gcmFuZ2VDb25zdHJhaW50cy5ncmlkVmFsdWVzO1xuICAgIGxhYmVsVmFsdWVzLnJhbmdlID0gcmFuZ2VDb25zdHJhaW50cy5sYWJlbFZhbHVlcztcblxuICAgIHRoaXMuc2V0U3RhdGUoeyBncmlkVmFsdWVzLCBsYWJlbFZhbHVlcyB9KTtcbiAgICBvbk1vZGVsQ2hhbmdlZCh1cGRhdGVkTW9kZWwpO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IGNvbmZpZ3VyYXRpb24sIGltYWdlU3VwcG9ydCwgbW9kZWwsIG9uQ29uZmlndXJhdGlvbkNoYW5nZWQsIG9uTW9kZWxDaGFuZ2VkLCB1cGxvYWRTb3VuZFN1cHBvcnQgfSA9XG4gICAgICB0aGlzLnByb3BzO1xuXG4gICAgbG9nKCdbcmVuZGVyXSBtb2RlbCcsIG1vZGVsKTtcblxuICAgIGNvbnN0IHsgZ3JhcGggfSA9IG1vZGVsO1xuICAgIGNvbnN0IHtcbiAgICAgIGJhc2VJbnB1dENvbmZpZ3VyYXRpb24gPSB7fSxcbiAgICAgIGNvbnRlbnREaW1lbnNpb25zID0ge30sXG4gICAgICBjaGFydERpbWVuc2lvbnMgPSB7fSxcbiAgICAgIGF1dGhvck5ld0NhdGVnb3J5RGVmYXVsdHMgPSB7fSxcbiAgICAgIGxhYmVsc1BsYWNlaG9sZGVycyA9IHt9LFxuICAgICAgaW5zdHJ1Y3Rpb24gPSB7fSxcbiAgICAgIG1heEltYWdlV2lkdGggPSB7fSxcbiAgICAgIG1heEltYWdlSGVpZ2h0ID0ge30sXG4gICAgICBwcm9tcHQgPSB7fSxcbiAgICAgIHJhdGlvbmFsZSA9IHt9LFxuICAgICAgc2NvcmluZ1R5cGUgPSB7fSxcbiAgICAgIHNldHRpbmdzUGFuZWxEaXNhYmxlZCxcbiAgICAgIHNwZWxsQ2hlY2sgPSB7fSxcbiAgICAgIHN0dWRlbnRJbnN0cnVjdGlvbnMgPSB7fSxcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnMgPSB7fSxcbiAgICAgIHRpdGxlUGxhY2Vob2xkZXIgPSB7fSxcbiAgICAgIHdpdGhSdWJyaWMgPSB7fSxcbiAgICAgIGNoYXJ0aW5nT3B0aW9ucyA9IHt9LFxuICAgICAgYXZhaWxhYmxlQ2hhcnRUeXBlcyA9IHt9LFxuICAgICAgbWF0aE1sT3B0aW9ucyA9IHt9LFxuICAgICAgY2hhcnRUeXBlTGFiZWwsXG4gICAgICBsYW5ndWFnZSA9IHt9LFxuICAgICAgbGFuZ3VhZ2VDaG9pY2VzID0ge30sXG4gICAgICBsYWJlbHNDaGFyYWN0ZXJzTGltaXQsXG4gICAgfSA9IGNvbmZpZ3VyYXRpb24gfHwge307XG4gICAgY29uc3Qge1xuICAgICAgZXJyb3JzLFxuICAgICAgZXh0cmFDU1NSdWxlcyxcbiAgICAgIHByb21wdEVuYWJsZWQsXG4gICAgICByYXRpb25hbGVFbmFibGVkLFxuICAgICAgc3BlbGxDaGVja0VuYWJsZWQsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCxcbiAgICAgIHN0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbCxcbiAgICB9ID0gbW9kZWwgfHwge307XG4gICAgY29uc3Qge1xuICAgICAgY2F0ZWdvcnlFcnJvcnMsXG4gICAgICBjb3JyZWN0QW5zd2VyRXJyb3JzLFxuICAgICAgcHJvbXB0OiBwcm9tcHRFcnJvcixcbiAgICAgIHJhdGlvbmFsZTogcmF0aW9uYWxlRXJyb3IsXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiB0ZWFjaGVySW5zdHJ1Y3Rpb25zRXJyb3IsXG4gICAgfSA9IGVycm9ycyB8fCB7fTtcbiAgICBjb25zdCB7IGdyaWRWYWx1ZXMsIGxhYmVsVmFsdWVzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHNob3dQaXhlR3VpZGVzID0gY2hhcnREaW1lbnNpb25zLnNob3dJbkNvbmZpZ1BhbmVsIHx8IHRydWU7XG5cbiAgICBjb25zdCBkZWZhdWx0SW1hZ2VNYXhXaWR0aCA9IG1heEltYWdlV2lkdGggJiYgbWF4SW1hZ2VXaWR0aC5wcm9tcHQ7XG4gICAgY29uc3QgZGVmYXVsdEltYWdlTWF4SGVpZ2h0ID0gbWF4SW1hZ2VIZWlnaHQgJiYgbWF4SW1hZ2VIZWlnaHQucHJvbXB0O1xuXG4gICAgY29uc3QgcGFuZWxJdGVtVHlwZSA9IHtcbiAgICAgIGNoYW5nZUludGVyYWN0aXZlRW5hYmxlZDpcbiAgICAgICAgY2hhcnRpbmdPcHRpb25zLmNoYW5nZUludGVyYWN0aXZlPy5zZXR0aW5ncyAmJiB0b2dnbGUoY2hhcnRpbmdPcHRpb25zLmNoYW5nZUludGVyYWN0aXZlLnNldHRpbmdzTGFiZWwpLFxuICAgICAgY2hhbmdlRWRpdGFibGVFbmFibGVkOlxuICAgICAgICBjaGFydGluZ09wdGlvbnMuY2hhbmdlRWRpdGFibGU/LnNldHRpbmdzICYmIHRvZ2dsZShjaGFydGluZ09wdGlvbnMuY2hhbmdlRWRpdGFibGUuc2V0dGluZ3NMYWJlbCksXG4gICAgICBjaGFuZ2VBZGRDYXRlZ29yeUVuYWJsZWQ6XG4gICAgICAgIGNoYXJ0aW5nT3B0aW9ucy5hZGRDYXRlZ29yeT8uc2V0dGluZ3MgJiYgdG9nZ2xlKGNoYXJ0aW5nT3B0aW9ucy5hZGRDYXRlZ29yeS5zZXR0aW5nc0xhYmVsKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFuZWxQcm9wZXJ0aWVzID0ge1xuICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6IHRlYWNoZXJJbnN0cnVjdGlvbnMuc2V0dGluZ3MgJiYgdG9nZ2xlKHRlYWNoZXJJbnN0cnVjdGlvbnMubGFiZWwpLFxuICAgICAgc3R1ZGVudEluc3RydWN0aW9uc0VuYWJsZWQ6IHN0dWRlbnRJbnN0cnVjdGlvbnMuc2V0dGluZ3MgJiYgdG9nZ2xlKHN0dWRlbnRJbnN0cnVjdGlvbnMubGFiZWwpLFxuICAgICAgcmF0aW9uYWxlRW5hYmxlZDogcmF0aW9uYWxlLnNldHRpbmdzICYmIHRvZ2dsZShyYXRpb25hbGUubGFiZWwpLFxuICAgICAgc3BlbGxDaGVja0VuYWJsZWQ6IHNwZWxsQ2hlY2suc2V0dGluZ3MgJiYgdG9nZ2xlKHNwZWxsQ2hlY2subGFiZWwpLFxuICAgICAgcHJvbXB0RW5hYmxlZDogcHJvbXB0LnNldHRpbmdzICYmIHRvZ2dsZShwcm9tcHQubGFiZWwpLFxuICAgICAgc2NvcmluZ1R5cGU6IHNjb3JpbmdUeXBlLnNldHRpbmdzICYmIHJhZGlvKHNjb3JpbmdUeXBlLmxhYmVsLCBbJ2FsbCBvciBub3RoaW5nJywgJ3BhcnRpYWwgc2NvcmluZyddKSxcbiAgICAgIHJ1YnJpY0VuYWJsZWQ6IHdpdGhSdWJyaWM/LnNldHRpbmdzICYmIHRvZ2dsZSh3aXRoUnVicmljPy5sYWJlbCksXG4gICAgICAnbGFuZ3VhZ2UuZW5hYmxlZCc6IGxhbmd1YWdlLnNldHRpbmdzICYmIHRvZ2dsZShsYW5ndWFnZS5sYWJlbCwgdHJ1ZSksXG4gICAgICBsYW5ndWFnZTogbGFuZ3VhZ2Uuc2V0dGluZ3MgJiYgbGFuZ3VhZ2UuZW5hYmxlZCAmJiBkcm9wZG93bihsYW5ndWFnZUNob2ljZXMubGFiZWwsIGxhbmd1YWdlQ2hvaWNlcy5vcHRpb25zKSxcbiAgICAgIGluc3RydWN0aW9uOiBpbnN0cnVjdGlvbi5zZXR0aW5ncyAmJiB0ZXh0RmllbGQoaW5zdHJ1Y3Rpb24ubGFiZWwpLFxuICAgIH07XG5cbiAgICBjb25zdCBnZXRQbHVnaW5Qcm9wcyA9IChwcm9wcyA9IHt9KSA9PiAoe1xuICAgICAgLi4uYmFzZUlucHV0Q29uZmlndXJhdGlvbixcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxsYXlvdXQuQ29uZmlnTGF5b3V0XG4gICAgICAgIGV4dHJhQ1NTUnVsZXM9e2V4dHJhQ1NTUnVsZXN9XG4gICAgICAgIGRpbWVuc2lvbnM9e2NvbnRlbnREaW1lbnNpb25zfVxuICAgICAgICBoaWRlU2V0dGluZ3M9e3NldHRpbmdzUGFuZWxEaXNhYmxlZH1cbiAgICAgICAgc2V0dGluZ3M9e1xuICAgICAgICAgIDxQYW5lbFxuICAgICAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICAgICAgY29uZmlndXJhdGlvbj17Y29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgIG9uQ2hhbmdlTW9kZWw9e29uTW9kZWxDaGFuZ2VkfVxuICAgICAgICAgICAgb25DaGFuZ2VDb25maWd1cmF0aW9uPXtvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkfVxuICAgICAgICAgICAgZ3JvdXBzPXt7XG4gICAgICAgICAgICAgIFNldHRpbmdzOiBwYW5lbEl0ZW1UeXBlLFxuICAgICAgICAgICAgICBQcm9wZXJ0aWVzOiBwYW5lbFByb3BlcnRpZXMsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICAgID5cbiAgICAgICAgPERlc2NyaXB0aW9uIGNvbXBvbmVudD1cImRpdlwiIHR5cGU9XCJib2R5MVwiPlxuICAgICAgICAgIHtpbnN0cnVjdGlvbj8ubGFiZWwgfHwgJyd9XG4gICAgICAgIDwvRGVzY3JpcHRpb24+XG5cbiAgICAgICAge3RlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkICYmIChcbiAgICAgICAgICA8UHJvbXB0SG9sZGVyIGxhYmVsPXt0ZWFjaGVySW5zdHJ1Y3Rpb25zLmxhYmVsfT5cbiAgICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgICAgbWFya3VwPXttb2RlbC50ZWFjaGVySW5zdHJ1Y3Rpb25zIHx8ICcnfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2V9XG4gICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICBub25FbXB0eT17ZmFsc2V9XG4gICAgICAgICAgICAgIGVycm9yPXt0ZWFjaGVySW5zdHJ1Y3Rpb25zRXJyb3J9XG4gICAgICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2tFbmFibGVkfVxuICAgICAgICAgICAgICBwbHVnaW5Qcm9wcz17Z2V0UGx1Z2luUHJvcHModGVhY2hlckluc3RydWN0aW9ucz8uaW5wdXRDb25maWd1cmF0aW9uKX1cbiAgICAgICAgICAgICAgbWF4SW1hZ2VXaWR0aD17KG1heEltYWdlV2lkdGggJiYgbWF4SW1hZ2VXaWR0aC50ZWFjaGVySW5zdHJ1Y3Rpb25zKSB8fCBkZWZhdWx0SW1hZ2VNYXhXaWR0aH1cbiAgICAgICAgICAgICAgbWF4SW1hZ2VIZWlnaHQ9eyhtYXhJbWFnZUhlaWdodCAmJiBtYXhJbWFnZUhlaWdodC50ZWFjaGVySW5zdHJ1Y3Rpb25zKSB8fCBkZWZhdWx0SW1hZ2VNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcz17W3sgbGFuZ3VhZ2U6ICdzcGFuaXNoJyB9LCB7IGxhbmd1YWdlOiAnc3BlY2lhbCcgfV19XG4gICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3RlYWNoZXJJbnN0cnVjdGlvbnNFcnJvciAmJiA8RXJyb3JUZXh0Pnt0ZWFjaGVySW5zdHJ1Y3Rpb25zRXJyb3J9PC9FcnJvclRleHQ+fVxuICAgICAgICAgIDwvUHJvbXB0SG9sZGVyPlxuICAgICAgICApfVxuXG4gICAgICAgIHtwcm9tcHRFbmFibGVkICYmIChcbiAgICAgICAgICA8UHJvbXB0SG9sZGVyIGxhYmVsPXtwcm9tcHQubGFiZWx9PlxuICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICBtYXJrdXA9e21vZGVsLnByb21wdH1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25Qcm9tcHRDaGFuZ2V9XG4gICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICBub25FbXB0eT17ZmFsc2V9XG4gICAgICAgICAgICAgIGVycm9yPXtwcm9tcHRFcnJvcn1cbiAgICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja0VuYWJsZWR9XG4gICAgICAgICAgICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgICAgICAgICAgICAgcGx1Z2luUHJvcHM9e2dldFBsdWdpblByb3BzKHByb21wdD8uaW5wdXRDb25maWd1cmF0aW9uKX1cbiAgICAgICAgICAgICAgbWF4SW1hZ2VXaWR0aD17ZGVmYXVsdEltYWdlTWF4V2lkdGh9XG4gICAgICAgICAgICAgIG1heEltYWdlSGVpZ2h0PXtkZWZhdWx0SW1hZ2VNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcz17W3sgbGFuZ3VhZ2U6ICdzcGFuaXNoJyB9LCB7IGxhbmd1YWdlOiAnc3BlY2lhbCcgfV19XG4gICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3Byb21wdEVycm9yICYmIDxFcnJvclRleHQ+e3Byb21wdEVycm9yfTwvRXJyb3JUZXh0Pn1cbiAgICAgICAgICA8L1Byb21wdEhvbGRlcj5cbiAgICAgICAgKX1cblxuICAgICAgICA8Q29uZmlndXJlQ2hhcnRQYW5lbFxuICAgICAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNvbmZpZ0NoYW5nZX1cbiAgICAgICAgICBncmlkVmFsdWVzPXtncmlkVmFsdWVzfVxuICAgICAgICAgIGxhYmVsVmFsdWVzPXtsYWJlbFZhbHVlc31cbiAgICAgICAgICBjaGFydERpbWVuc2lvbnM9e2NoYXJ0RGltZW5zaW9uc31cbiAgICAgICAgICBjaGFydHM9e2NoYXJ0c31cbiAgICAgICAgICBzdHVkZW50TmV3Q2F0ZWdvcnlEZWZhdWx0TGFiZWw9e3N0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbH1cbiAgICAgICAgICBhdmFpbGFibGVDaGFydFR5cGVzPXthdmFpbGFibGVDaGFydFR5cGVzfVxuICAgICAgICAgIGNoYXJ0VHlwZUxhYmVsPXtjaGFydFR5cGVMYWJlbH1cbiAgICAgICAgLz5cblxuICAgICAgICA8Q2hhcnRpbmdDb25maWdcbiAgICAgICAgICBtb2RlbD17bW9kZWx9XG4gICAgICAgICAgb25DaGFuZ2U9e29uTW9kZWxDaGFuZ2VkfVxuICAgICAgICAgIGNoYXJ0cz17Y2hhcnRzfVxuICAgICAgICAgIGxhYmVsc1BsYWNlaG9sZGVycz17bGFiZWxzUGxhY2Vob2xkZXJzfVxuICAgICAgICAgIHRpdGxlUGxhY2Vob2xkZXI9e3RpdGxlUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgc2hvd1BpeGVsR3VpZGVzPXtzaG93UGl4ZUd1aWRlc31cbiAgICAgICAgICBhdXRob3JOZXdDYXRlZ29yeURlZmF1bHRzPXthdXRob3JOZXdDYXRlZ29yeURlZmF1bHRzfVxuICAgICAgICAgIGNoYXJ0aW5nT3B0aW9ucz17Y2hhcnRpbmdPcHRpb25zfVxuICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgbGFiZWxzQ2hhcmFjdGVyc0xpbWl0PXtsYWJlbHNDaGFyYWN0ZXJzTGltaXR9XG4gICAgICAgIC8+XG5cbiAgICAgICAgPENvcnJlY3RSZXNwb25zZVxuICAgICAgICAgIGNvbmZpZz17Z3JhcGh9XG4gICAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbk1vZGVsQ2hhbmdlZH1cbiAgICAgICAgICBjaGFydHM9e2NoYXJ0c31cbiAgICAgICAgICBlcnJvcj17Y2F0ZWdvcnlFcnJvcnN9XG4gICAgICAgICAgY29ycmVjdEFuc3dlckVycm9ycz17Y29ycmVjdEFuc3dlckVycm9yc31cbiAgICAgICAgICBzdHVkZW50TmV3Q2F0ZWdvcnlEZWZhdWx0TGFiZWw9e3N0dWRlbnROZXdDYXRlZ29yeURlZmF1bHRMYWJlbH1cbiAgICAgICAgICBtYXRoTWxPcHRpb25zPXttYXRoTWxPcHRpb25zfVxuICAgICAgICAgIGxhYmVsc1BsYWNlaG9sZGVycz17bGFiZWxzUGxhY2Vob2xkZXJzfVxuICAgICAgICAvPlxuXG4gICAgICAgIHtyYXRpb25hbGVFbmFibGVkICYmIChcbiAgICAgICAgICA8UHJvbXB0SG9sZGVyIGxhYmVsPXtyYXRpb25hbGUubGFiZWwgfHwgJ1JhdGlvbmFsZSd9PlxuICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICBtYXJrdXA9e21vZGVsLnJhdGlvbmFsZSB8fCAnJ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25SYXRpb25hbGVDaGFuZ2V9XG4gICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICBlcnJvcj17cmF0aW9uYWxlRXJyb3J9XG4gICAgICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2tFbmFibGVkfVxuICAgICAgICAgICAgICBwbHVnaW5Qcm9wcz17Z2V0UGx1Z2luUHJvcHMocmF0aW9uYWxlPy5pbnB1dENvbmZpZ3VyYXRpb24pfVxuICAgICAgICAgICAgICBtYXhJbWFnZVdpZHRoPXsobWF4SW1hZ2VXaWR0aCAmJiBtYXhJbWFnZVdpZHRoLnJhdGlvbmFsZSkgfHwgZGVmYXVsdEltYWdlTWF4V2lkdGh9XG4gICAgICAgICAgICAgIG1heEltYWdlSGVpZ2h0PXsobWF4SW1hZ2VIZWlnaHQgJiYgbWF4SW1hZ2VIZWlnaHQucmF0aW9uYWxlKSB8fCBkZWZhdWx0SW1hZ2VNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIHVwbG9hZFNvdW5kU3VwcG9ydD17dXBsb2FkU291bmRTdXBwb3J0fVxuICAgICAgICAgICAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wcz17W3sgbGFuZ3VhZ2U6ICdzcGFuaXNoJyB9LCB7IGxhbmd1YWdlOiAnc3BlY2lhbCcgfV19XG4gICAgICAgICAgICAgIG1hdGhNbE9wdGlvbnM9e21hdGhNbE9wdGlvbnN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge3JhdGlvbmFsZUVycm9yICYmIDxFcnJvclRleHQ+e3JhdGlvbmFsZUVycm9yfTwvRXJyb3JUZXh0Pn1cbiAgICAgICAgICA8L1Byb21wdEhvbGRlcj5cbiAgICAgICAgKX1cbiAgICAgIDwvbGF5b3V0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