@pie-element/inline-dropdown 4.10.16-next.1 → 4.11.2

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +461 -0
  2. package/LICENSE.md +5 -0
  3. package/configure/CHANGELOG.md +405 -0
  4. package/configure/lib/defaults.js +18 -1
  5. package/configure/lib/defaults.js.map +1 -1
  6. package/configure/lib/index.js +15 -1
  7. package/configure/lib/index.js.map +1 -1
  8. package/configure/lib/inline-dropdown-toolbar.js +54 -47
  9. package/configure/lib/inline-dropdown-toolbar.js.map +1 -1
  10. package/configure/lib/main.js +227 -159
  11. package/configure/lib/main.js.map +1 -1
  12. package/configure/lib/markupUtils.js +1 -1
  13. package/configure/lib/markupUtils.js.map +1 -1
  14. package/configure/lib/utils.js +17 -0
  15. package/configure/lib/utils.js.map +1 -0
  16. package/configure/package.json +5 -5
  17. package/controller/CHANGELOG.md +85 -0
  18. package/controller/lib/defaults.js +1 -1
  19. package/controller/lib/index.js +28 -1
  20. package/controller/lib/index.js.map +1 -1
  21. package/controller/lib/utils.js +1 -1
  22. package/controller/lib/utils.js.map +1 -1
  23. package/controller/package.json +2 -2
  24. package/docs/config-schema.json +94 -0
  25. package/docs/config-schema.json.md +73 -1
  26. package/docs/demo/config.js +2 -2
  27. package/docs/demo/generate.js +19 -20
  28. package/docs/pie-schema.json +27 -0
  29. package/docs/pie-schema.json.md +20 -0
  30. package/lib/index.js +4 -1
  31. package/lib/index.js.map +1 -1
  32. package/lib/inline-dropdown.js +31 -21
  33. package/lib/inline-dropdown.js.map +1 -1
  34. package/package.json +6 -6
  35. package/configure/lib/__tests__/inline-dropdown-toolbar.test.js +0 -124
  36. package/configure/lib/__tests__/main.test.js +0 -516
  37. package/configure/lib/__tests__/markupUtils.test.js +0 -108
  38. package/controller/lib/__tests__/index.test.js +0 -942
  39. package/docs/demo/pie.manifest.json +0 -11
  40. package/lib/__tests__/inline-dropdown.test.js +0 -121
@@ -45,15 +45,11 @@ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
45
45
 
46
46
  var _reduce = _interopRequireDefault(require("lodash/reduce"));
47
47
 
48
- var _styles = require("@material-ui/core/styles");
49
-
50
- var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
51
-
52
- var _Dialog = _interopRequireDefault(require("@material-ui/core/Dialog"));
48
+ var _max = _interopRequireDefault(require("lodash/max"));
53
49
 
54
- var _DialogTitle = _interopRequireDefault(require("@material-ui/core/DialogTitle"));
50
+ var _styles = require("@material-ui/core/styles");
55
51
 
56
- var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogActions"));
52
+ var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
57
53
 
58
54
  var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
59
55
 
@@ -65,9 +61,11 @@ var _ExpansionPanelDetails = _interopRequireDefault(require("@material-ui/core/E
65
61
 
66
62
  var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
67
63
 
64
+ var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
65
+
68
66
  var _inlineDropdownToolbar = _interopRequireDefault(require("./inline-dropdown-toolbar"));
69
67
 
70
- var _max = _interopRequireDefault(require("lodash/max"));
68
+ var _utils = require("./utils");
71
69
 
72
70
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
73
71
 
@@ -84,77 +82,55 @@ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Re
84
82
  var toggle = _configUi.settings.toggle,
85
83
  Panel = _configUi.settings.Panel;
86
84
 
87
- var InfoDialog = function InfoDialog(_ref) {
88
- var open = _ref.open,
89
- onCancel = _ref.onCancel,
90
- onOk = _ref.onOk,
91
- title = _ref.title;
92
- return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], {
93
- open: open
94
- }, /*#__PURE__*/_react["default"].createElement(_DialogTitle["default"], null, title), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], null, onOk && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
95
- onClick: onOk,
96
- color: "primary"
97
- }, "OK"), onCancel && /*#__PURE__*/_react["default"].createElement(_Button["default"], {
98
- onClick: onCancel,
99
- color: "primary"
100
- }, "Cancel")));
101
- };
102
-
103
- InfoDialog.propTypes = {
104
- open: _propTypes["default"].bool,
105
- onCancel: _propTypes["default"].func,
106
- onOk: _propTypes["default"].func,
107
- title: _propTypes["default"].string
108
- };
109
-
110
85
  var styles = function styles(theme) {
111
86
  return {
112
87
  promptHolder: {
113
88
  width: '100%',
114
- paddingBottom: theme.spacing.unit * 2,
115
- marginBottom: theme.spacing.unit * 2
116
- },
117
- prompt: {
118
89
  paddingTop: theme.spacing.unit * 2,
119
- width: '100%'
90
+ marginBottom: theme.spacing.unit * 2
120
91
  },
121
92
  markup: {
122
93
  minHeight: '100px',
123
- paddingTop: theme.spacing.unit * 2,
94
+ paddingBottom: theme.spacing.unit * 2.5,
124
95
  width: '100%',
125
96
  '& [data-slate-editor="true"]': {
126
97
  minHeight: '100px'
127
98
  }
128
99
  },
129
- design: {
130
- paddingTop: theme.spacing.unit * 3
131
- },
132
100
  choiceConfiguration: {
133
101
  paddingTop: theme.spacing.unit * 2,
134
102
  paddingBottom: theme.spacing.unit * 2
135
103
  },
136
- switchElement: {
137
- justifyContent: 'space-between',
138
- margin: 0
139
- },
140
- addButton: {
141
- "float": 'right'
142
- },
143
104
  text: {
144
- fontFamily: 'Cerebri Sans',
145
- fontSize: '16px',
146
- lineHeight: '19px',
147
- color: '#495B8F'
105
+ fontSize: theme.typography.fontSize + 2,
106
+ marginRight: theme.spacing.unit
148
107
  },
149
108
  rationaleLabel: {
150
109
  display: 'flex',
151
110
  whiteSpace: 'break-spaces'
152
111
  },
153
112
  rationaleChoices: {
154
- marginTop: '16px'
113
+ marginBottom: theme.spacing.unit * 2.5
155
114
  },
156
115
  panelDetails: {
157
- display: 'block'
116
+ display: 'block',
117
+ paddingTop: 0,
118
+ paddingBottom: 0
119
+ },
120
+ flexContainer: {
121
+ display: 'flex',
122
+ alignItems: 'center',
123
+ marginBottom: theme.spacing.unit
124
+ },
125
+ tooltip: {
126
+ fontSize: theme.typography.fontSize - 2,
127
+ whiteSpace: 'pre',
128
+ maxWidth: '500px'
129
+ },
130
+ errorText: {
131
+ fontSize: theme.typography.fontSize - 2,
132
+ color: theme.palette.error.main,
133
+ paddingTop: theme.spacing.unit
158
134
  }
159
135
  };
160
136
  };
@@ -188,7 +164,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
188
164
 
189
165
  _this = _super.call.apply(_super, [this].concat(args));
190
166
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
191
- dialog: {
167
+ warning: {
192
168
  open: false
193
169
  }
194
170
  });
@@ -226,22 +202,22 @@ var Main = /*#__PURE__*/function (_React$Component) {
226
202
  });
227
203
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onCheck", function (callback) {
228
204
  _this.setState({
229
- dialog: {
205
+ warning: {
230
206
  open: true,
231
- message: 'Response areas with under 2 options or with no correct answers will be discarded',
232
- onOk: function onOk() {
207
+ text: 'Response areas with under 2 options or with no correct answers will be discarded.',
208
+ onClose: function onClose() {
233
209
  _this.setState({
234
- dialog: {
210
+ warning: {
235
211
  open: false
236
212
  }
237
- }, callback);
213
+ });
238
214
  },
239
- onCancel: function onCancel() {
240
- return _this.setState({
241
- dialog: {
215
+ onConfirm: function onConfirm() {
216
+ _this.setState({
217
+ warning: {
242
218
  open: false
243
219
  }
244
- });
220
+ }, callback);
245
221
  }
246
222
  }
247
223
  });
@@ -279,12 +255,19 @@ var Main = /*#__PURE__*/function (_React$Component) {
279
255
 
280
256
  if (shouldWarn) {
281
257
  _this.setState({
282
- dialog: {
258
+ warning: {
283
259
  open: true,
284
- message: 'Response areas with under 2 options or with no correct answers will be discarded',
285
- onOk: function onOk() {
260
+ text: 'Response areas with under 2 options or with no correct answers will be discarded.',
261
+ onClose: function onClose() {
262
+ _this.setState({
263
+ warning: {
264
+ open: false
265
+ }
266
+ });
267
+ },
268
+ onConfirm: function onConfirm() {
286
269
  _this.setState({
287
- dialog: {
270
+ warning: {
288
271
  open: false
289
272
  }
290
273
  }, function () {
@@ -293,13 +276,6 @@ var Main = /*#__PURE__*/function (_React$Component) {
293
276
  slateMarkup: domMarkup.innerHTML
294
277
  });
295
278
  });
296
- },
297
- onCancel: function onCancel() {
298
- return _this.setState({
299
- dialog: {
300
- open: false
301
- }
302
- });
303
279
  }
304
280
  }
305
281
  });
@@ -312,6 +288,26 @@ var Main = /*#__PURE__*/function (_React$Component) {
312
288
  });
313
289
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onAddChoice", function (index, label) {
314
290
  var respAreaChoices = _this.state.respAreaChoices;
291
+ var maxResponseAreaChoices = _this.props.configuration.maxResponseAreaChoices;
292
+
293
+ if (respAreaChoices[index] && respAreaChoices[index].length >= maxResponseAreaChoices) {
294
+ _this.setState({
295
+ warning: {
296
+ open: true,
297
+ text: "There are only ".concat(maxResponseAreaChoices, " answers allowed per choice."),
298
+ onClose: undefined,
299
+ onConfirm: function onConfirm() {
300
+ _this.setState({
301
+ warning: {
302
+ open: false
303
+ }
304
+ });
305
+ }
306
+ }
307
+ });
308
+
309
+ return;
310
+ }
315
311
 
316
312
  if (!respAreaChoices[index]) {
317
313
  respAreaChoices[index] = [];
@@ -321,12 +317,13 @@ var Main = /*#__PURE__*/function (_React$Component) {
321
317
  return prepareVal(r.label) === prepareVal(label);
322
318
  })) {
323
319
  _this.setState({
324
- dialog: {
320
+ warning: {
325
321
  open: true,
326
- message: 'Duplicate answers are not allowed.',
327
- onOk: function onOk() {
322
+ text: 'Duplicate answers are not allowed.',
323
+ onClose: undefined,
324
+ onConfirm: function onConfirm() {
328
325
  _this.setState({
329
- dialog: {
326
+ warning: {
330
327
  open: false
331
328
  }
332
329
  });
@@ -362,8 +359,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
362
359
  });
363
360
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onSelectChoice", function (respIndex, selectedIndex) {
364
361
  var respAreaChoices = _this.state.respAreaChoices;
365
- respAreaChoices[respIndex] = respAreaChoices[respIndex].map(function (ch, index) {
366
- return _objectSpread(_objectSpread({}, ch), {}, {
362
+ respAreaChoices[respIndex] = respAreaChoices[respIndex].map(function (choice, index) {
363
+ return _objectSpread(_objectSpread({}, choice), {}, {
367
364
  correct: index === selectedIndex
368
365
  });
369
366
  });
@@ -409,40 +406,58 @@ var Main = /*#__PURE__*/function (_React$Component) {
409
406
  value: function render() {
410
407
  var _this2 = this;
411
408
 
412
- var dialog = this.state.dialog;
409
+ var warning = this.state.warning;
413
410
  var _this$props = this.props,
414
411
  classes = _this$props.classes,
415
412
  model = _this$props.model,
416
413
  configuration = _this$props.configuration,
417
414
  onConfigurationChanged = _this$props.onConfigurationChanged,
418
- imageSupport = _this$props.imageSupport;
419
-
420
- var _ref2 = configuration || {},
421
- _ref2$prompt = _ref2.prompt,
422
- prompt = _ref2$prompt === void 0 ? {} : _ref2$prompt,
423
- _ref2$partialScoring = _ref2.partialScoring,
424
- partialScoring = _ref2$partialScoring === void 0 ? {} : _ref2$partialScoring,
425
- _ref2$lockChoiceOrder = _ref2.lockChoiceOrder,
426
- lockChoiceOrder = _ref2$lockChoiceOrder === void 0 ? {} : _ref2$lockChoiceOrder,
427
- _ref2$rationale = _ref2.rationale,
428
- rationale = _ref2$rationale === void 0 ? {} : _ref2$rationale,
429
- _ref2$choiceRationale = _ref2.choiceRationale,
430
- choiceRationale = _ref2$choiceRationale === void 0 ? {} : _ref2$choiceRationale,
431
- _ref2$teacherInstruct = _ref2.teacherInstructions,
432
- teacherInstructions = _ref2$teacherInstruct === void 0 ? {} : _ref2$teacherInstruct,
433
- _ref2$spellCheck = _ref2.spellCheck,
434
- spellCheck = _ref2$spellCheck === void 0 ? {} : _ref2$spellCheck;
435
-
436
- var _ref3 = model || {},
437
- rationaleEnabled = _ref3.rationaleEnabled,
438
- choiceRationaleEnabled = _ref3.choiceRationaleEnabled,
439
- promptEnabled = _ref3.promptEnabled,
440
- teacherInstructionsEnabled = _ref3.teacherInstructionsEnabled,
441
- choices = _ref3.choices,
442
- spellCheckEnabled = _ref3.spellCheckEnabled;
415
+ imageSupport = _this$props.imageSupport,
416
+ uploadSoundSupport = _this$props.uploadSoundSupport;
417
+
418
+ var _ref = configuration || {},
419
+ _ref$choiceRationale = _ref.choiceRationale,
420
+ choiceRationale = _ref$choiceRationale === void 0 ? {} : _ref$choiceRationale,
421
+ _ref$lockChoiceOrder = _ref.lockChoiceOrder,
422
+ lockChoiceOrder = _ref$lockChoiceOrder === void 0 ? {} : _ref$lockChoiceOrder,
423
+ maxResponseAreas = _ref.maxResponseAreas,
424
+ _ref$maxImageWidth = _ref.maxImageWidth,
425
+ maxImageWidth = _ref$maxImageWidth === void 0 ? {} : _ref$maxImageWidth,
426
+ _ref$maxImageHeight = _ref.maxImageHeight,
427
+ maxImageHeight = _ref$maxImageHeight === void 0 ? {} : _ref$maxImageHeight,
428
+ _ref$partialScoring = _ref.partialScoring,
429
+ partialScoring = _ref$partialScoring === void 0 ? {} : _ref$partialScoring,
430
+ _ref$prompt = _ref.prompt,
431
+ prompt = _ref$prompt === void 0 ? {} : _ref$prompt,
432
+ _ref$rationale = _ref.rationale,
433
+ rationale = _ref$rationale === void 0 ? {} : _ref$rationale,
434
+ settingsPanelDisabled = _ref.settingsPanelDisabled,
435
+ _ref$spellCheck = _ref.spellCheck,
436
+ spellCheck = _ref$spellCheck === void 0 ? {} : _ref$spellCheck,
437
+ _ref$teacherInstructi = _ref.teacherInstructions,
438
+ teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
439
+ _ref$withRubric = _ref.withRubric,
440
+ withRubric = _ref$withRubric === void 0 ? {} : _ref$withRubric;
441
+
442
+ var _ref2 = model || {},
443
+ choiceRationaleEnabled = _ref2.choiceRationaleEnabled,
444
+ choices = _ref2.choices,
445
+ errors = _ref2.errors,
446
+ promptEnabled = _ref2.promptEnabled,
447
+ rationaleEnabled = _ref2.rationaleEnabled,
448
+ spellCheckEnabled = _ref2.spellCheckEnabled,
449
+ teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
450
+ toolbarEditorPosition = _ref2.toolbarEditorPosition;
451
+
452
+ var _ref3 = errors || {},
453
+ responseAreasError = _ref3.responseAreasError,
454
+ responseAreaChoicesError = _ref3.responseAreaChoicesError;
455
+
456
+ var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
457
+ var defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
443
458
 
444
459
  var renderChoiceRationale = function renderChoiceRationale() {
445
- return (Object.keys(choices) || []).map(function (key) {
460
+ return (Object.keys(choices) || []).map(function (key, index) {
446
461
  return /*#__PURE__*/_react["default"].createElement("div", {
447
462
  key: key,
448
463
  className: classes.rationaleChoices
@@ -450,7 +465,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
450
465
  expandIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], null)
451
466
  }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
452
467
  className: classes.text
453
- }, "Rationale for response area #".concat(parseInt(key) + 1))), /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], {
468
+ }, "Rationale for response area #".concat(index + 1))), /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], {
454
469
  className: classes.panelDetails
455
470
  }, (choices[key] || []).map(function (choice) {
456
471
  return /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
@@ -471,27 +486,33 @@ var Main = /*#__PURE__*/function (_React$Component) {
471
486
  rationale: c
472
487
  }));
473
488
  },
474
- imageSupport: imageSupport
489
+ imageSupport: imageSupport,
490
+ maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
491
+ maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
492
+ uploadSoundSupport: uploadSoundSupport
475
493
  }));
476
494
  }))));
477
495
  });
478
496
  };
479
497
 
480
- var toolbarOpts = {};
481
-
482
- switch (model.toolbarEditorPosition) {
483
- case 'top':
484
- toolbarOpts.position = 'top';
485
- break;
486
-
487
- default:
488
- toolbarOpts.position = 'bottom';
489
- break;
490
- }
491
-
492
- return /*#__PURE__*/_react["default"].createElement("div", {
493
- className: classes.design
494
- }, /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
498
+ var toolbarOpts = {
499
+ position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
500
+ };
501
+ var validationMessage = (0, _utils.generateValidationMessage)(configuration);
502
+ var panelSettings = {
503
+ partialScoring: partialScoring.settings && toggle(partialScoring.label),
504
+ lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label)
505
+ };
506
+ var panelProperties = {
507
+ teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
508
+ rationaleEnabled: rationale.settings && toggle(rationale.label),
509
+ choiceRationaleEnabled: choiceRationale.settings && toggle(choiceRationale.label),
510
+ promptEnabled: prompt.settings && toggle(prompt.label),
511
+ spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
512
+ rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label)
513
+ };
514
+ return /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
515
+ hideSettings: settingsPanelDisabled,
495
516
  settings: /*#__PURE__*/_react["default"].createElement(Panel, {
496
517
  model: model,
497
518
  configuration: configuration,
@@ -502,20 +523,11 @@ var Main = /*#__PURE__*/function (_React$Component) {
502
523
  return onConfigurationChanged(configuration, true);
503
524
  },
504
525
  groups: {
505
- Settings: {
506
- partialScoring: partialScoring.settings && toggle(partialScoring.label),
507
- lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label)
508
- },
509
- Properties: {
510
- teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
511
- rationaleEnabled: rationale.settings && toggle(rationale.label),
512
- choiceRationaleEnabled: choiceRationale.settings && toggle(choiceRationale.label),
513
- promptEnabled: prompt.settings && toggle(prompt.label),
514
- spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label)
515
- }
526
+ Settings: panelSettings,
527
+ Properties: panelProperties
516
528
  }
517
529
  })
518
- }, /*#__PURE__*/_react["default"].createElement("div", null, teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
530
+ }, teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
519
531
  label: teacherInstructions.label,
520
532
  className: classes.promptHolder
521
533
  }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
@@ -525,7 +537,15 @@ var Main = /*#__PURE__*/function (_React$Component) {
525
537
  imageSupport: imageSupport,
526
538
  nonEmpty: false,
527
539
  toolbarOpts: toolbarOpts,
528
- spellCheck: spellCheckEnabled
540
+ spellCheck: spellCheckEnabled,
541
+ maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
542
+ maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
543
+ uploadSoundSupport: uploadSoundSupport,
544
+ languageCharactersProps: [{
545
+ language: 'spanish'
546
+ }, {
547
+ language: 'special'
548
+ }]
529
549
  })), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
530
550
  label: prompt.label,
531
551
  className: classes.promptHolder
@@ -537,25 +557,31 @@ var Main = /*#__PURE__*/function (_React$Component) {
537
557
  nonEmpty: false,
538
558
  disableUnderline: true,
539
559
  toolbarOpts: toolbarOpts,
540
- spellCheck: spellCheckEnabled
541
- })), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
542
- label: rationale.label,
543
- className: classes.promptHolder
544
- }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
545
- className: classes.prompt,
546
- markup: model.rationale || '',
547
- onChange: this.onRationaleChanged,
548
- imageSupport: imageSupport,
549
- toolbarOpts: toolbarOpts,
550
- spellCheck: spellCheckEnabled
551
- })), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
560
+ spellCheck: spellCheckEnabled,
561
+ maxImageWidth: defaultImageMaxWidth,
562
+ maxImageHeight: defaultImageMaxHeight,
563
+ uploadSoundSupport: uploadSoundSupport,
564
+ languageCharactersProps: [{
565
+ language: 'spanish'
566
+ }, {
567
+ language: 'special'
568
+ }]
569
+ })), /*#__PURE__*/_react["default"].createElement("div", {
570
+ className: classes.flexContainer
571
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
552
572
  className: classes.text
553
- }, "Define Template, Choices, and Correct Responses"), /*#__PURE__*/_react["default"].createElement(InfoDialog, {
554
- open: dialog.open,
555
- title: dialog.message,
556
- onCancel: dialog.onCancel,
557
- onOk: dialog.onOk
558
- }), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
573
+ }, "Define Template, Choices, and Correct Responses"), /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
574
+ classes: {
575
+ tooltip: classes.tooltip
576
+ },
577
+ disableFocusListener: true,
578
+ disableTouchListener: true,
579
+ placement: 'right',
580
+ title: validationMessage
581
+ }, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
582
+ fontSize: 'small',
583
+ color: 'primary'
584
+ }))), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
559
585
  activePlugins: _editableHtml.ALL_PLUGINS,
560
586
  toolbarOpts: {
561
587
  position: 'top'
@@ -565,6 +591,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
565
591
  options: {
566
592
  duplicates: true
567
593
  },
594
+ maxResponseAreas: maxResponseAreas,
568
595
  respAreaToolbar: function respAreaToolbar(node, value, onToolbarDone) {
569
596
  var respAreaChoices = _this2.state.respAreaChoices;
570
597
  return function () {
@@ -581,7 +608,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
581
608
  value: value,
582
609
  onToolbarDone: onToolbarDone,
583
610
  choices: respAreaChoices[node.data.get('index')],
584
- spellCheck: spellCheckEnabled
611
+ spellCheck: spellCheckEnabled,
612
+ uploadSoundSupport: uploadSoundSupport
585
613
  });
586
614
  };
587
615
  }
@@ -591,10 +619,46 @@ var Main = /*#__PURE__*/function (_React$Component) {
591
619
  markup: model.slateMarkup || '',
592
620
  onChange: this.onChange,
593
621
  imageSupport: imageSupport,
622
+ disableImageAlignmentButtons: true,
594
623
  onBlur: this.onBlur,
595
624
  disabled: false,
596
- highlightShape: false
597
- }), /*#__PURE__*/_react["default"].createElement("br", null), choiceRationaleEnabled && renderChoiceRationale())));
625
+ highlightShape: false,
626
+ error: responseAreasError,
627
+ uploadSoundSupport: uploadSoundSupport,
628
+ languageCharactersProps: [{
629
+ language: 'spanish'
630
+ }, {
631
+ language: 'special'
632
+ }]
633
+ }), responseAreasError && /*#__PURE__*/_react["default"].createElement("div", {
634
+ className: classes.errorText
635
+ }, responseAreasError), responseAreaChoicesError && /*#__PURE__*/_react["default"].createElement("div", {
636
+ className: classes.errorText
637
+ }, responseAreaChoicesError), choiceRationaleEnabled && renderChoiceRationale(), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
638
+ label: rationale.label,
639
+ className: classes.promptHolder
640
+ }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
641
+ className: classes.prompt,
642
+ markup: model.rationale || '',
643
+ onChange: this.onRationaleChanged,
644
+ imageSupport: imageSupport,
645
+ toolbarOpts: toolbarOpts,
646
+ spellCheck: spellCheckEnabled,
647
+ maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
648
+ maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
649
+ uploadSoundSupport: uploadSoundSupport,
650
+ languageCharactersProps: [{
651
+ language: 'spanish'
652
+ }, {
653
+ language: 'special'
654
+ }]
655
+ })), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
656
+ open: warning.open,
657
+ title: "Warning",
658
+ text: warning.text,
659
+ onClose: warning.onClose,
660
+ onConfirm: warning.onConfirm
661
+ }));
598
662
  }
599
663
  }]);
600
664
  return Main;
@@ -611,9 +675,13 @@ exports.Main = Main;
611
675
  imageSupport: _propTypes["default"].shape({
612
676
  add: _propTypes["default"].func.isRequired,
613
677
  "delete": _propTypes["default"].func.isRequired
678
+ }),
679
+ uploadSoundSupport: _propTypes["default"].shape({
680
+ add: _propTypes["default"].func.isRequired,
681
+ "delete": _propTypes["default"].func.isRequired
614
682
  })
615
683
  });
616
684
  var Styled = (0, _styles.withStyles)(styles)(Main);
617
685
  var _default = Styled;
618
686
  exports["default"] = _default;
619
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzeCJdLCJuYW1lcyI6WyJ0b2dnbGUiLCJzZXR0aW5ncyIsIlBhbmVsIiwiSW5mb0RpYWxvZyIsIm9wZW4iLCJvbkNhbmNlbCIsIm9uT2siLCJ0aXRsZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImJvb2wiLCJmdW5jIiwic3RyaW5nIiwic3R5bGVzIiwidGhlbWUiLCJwcm9tcHRIb2xkZXIiLCJ3aWR0aCIsInBhZGRpbmdCb3R0b20iLCJzcGFjaW5nIiwidW5pdCIsIm1hcmdpbkJvdHRvbSIsInByb21wdCIsInBhZGRpbmdUb3AiLCJtYXJrdXAiLCJtaW5IZWlnaHQiLCJkZXNpZ24iLCJjaG9pY2VDb25maWd1cmF0aW9uIiwic3dpdGNoRWxlbWVudCIsImp1c3RpZnlDb250ZW50IiwibWFyZ2luIiwiYWRkQnV0dG9uIiwidGV4dCIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJjb2xvciIsInJhdGlvbmFsZUxhYmVsIiwiZGlzcGxheSIsIndoaXRlU3BhY2UiLCJyYXRpb25hbGVDaG9pY2VzIiwibWFyZ2luVG9wIiwicGFuZWxEZXRhaWxzIiwiY3JlYXRlRWxlbWVudEZyb21IVE1MIiwiaHRtbFN0cmluZyIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRyaW0iLCJwcmVwYXJlVmFsIiwiaHRtbCIsInRtcCIsInZhbHVlIiwidGV4dENvbnRlbnQiLCJpbm5lclRleHQiLCJNYWluIiwiZGlhbG9nIiwibmV3VmFsIiwicHJvcHMiLCJvbk1vZGVsQ2hhbmdlZCIsIm1vZGVsIiwib25Nb2RlbENoYW5nZSIsInJhdGlvbmFsZSIsImluZGV4IiwiY2hvaWNlIiwiaW5kZXhPZkNob2ljZSIsImNob2ljZXMiLCJmaW5kSW5kZXgiLCJlbGVtIiwibGFiZWwiLCJzcGxpY2UiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zIiwic2xhdGVNYXJrdXAiLCJjYWxsYmFjayIsInNldFN0YXRlIiwibWVzc2FnZSIsInJlc3BBcmVhQ2hvaWNlcyIsInN0YXRlIiwiZG9tTWFya3VwIiwiYWxsUmVzcEFyZWFzIiwicXVlcnlTZWxlY3RvckFsbCIsImFsbENob2ljZXMiLCJmb3JFYWNoIiwiZWwiLCJkYXRhc2V0IiwiZXhpc3RpbmdSZXNwQXJlYUNob2ljZXMiLCJvYmoiLCJrZXkiLCJuZXdSZXNwQXJlYUNob2ljZXMiLCJzaG91bGRXYXJuIiwibmV3Q2hvaWNlcyIsImxlbmd0aCIsImZpbmQiLCJjIiwiY29ycmVjdCIsInJlbW92ZSIsInIiLCJtYXAiLCJwYXJzZUludCIsImZpbHRlciIsInZhbCIsImlzTmFOIiwicHVzaCIsInJlc3BJbmRleCIsInNlbGVjdGVkSW5kZXgiLCJjaCIsIm5Qcm9wcyIsIm5ld1N0YXRlIiwiZG9tTm9kZSIsIlJlYWN0RE9NIiwiZmluZERPTU5vZGUiLCJjbGFzc2VzIiwiY29uZmlndXJhdGlvbiIsIm9uQ29uZmlndXJhdGlvbkNoYW5nZWQiLCJpbWFnZVN1cHBvcnQiLCJwYXJ0aWFsU2NvcmluZyIsImxvY2tDaG9pY2VPcmRlciIsImNob2ljZVJhdGlvbmFsZSIsInNwZWxsQ2hlY2siLCJyYXRpb25hbGVFbmFibGVkIiwiY2hvaWNlUmF0aW9uYWxlRW5hYmxlZCIsInByb21wdEVuYWJsZWQiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInNwZWxsQ2hlY2tFbmFibGVkIiwicmVuZGVyQ2hvaWNlUmF0aW9uYWxlIiwiT2JqZWN0Iiwia2V5cyIsIl9faHRtbCIsIm9uQ2hvaWNlUmF0aW9uYWxlQ2hhbmdlZCIsInRvb2xiYXJPcHRzIiwidG9vbGJhckVkaXRvclBvc2l0aW9uIiwicG9zaXRpb24iLCJTZXR0aW5ncyIsIlByb3BlcnRpZXMiLCJvblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkIiwib25Qcm9tcHRDaGFuZ2VkIiwib25SYXRpb25hbGVDaGFuZ2VkIiwiQUxMX1BMVUdJTlMiLCJ0eXBlIiwib3B0aW9ucyIsImR1cGxpY2F0ZXMiLCJyZXNwQXJlYVRvb2xiYXIiLCJub2RlIiwib25Ub29sYmFyRG9uZSIsIm9uQWRkQ2hvaWNlIiwib25DaGVjayIsIm9uUmVtb3ZlQ2hvaWNlIiwiZGF0YSIsImdldCIsIm9uU2VsZWN0Q2hvaWNlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsIm9iamVjdCIsImlzUmVxdWlyZWQiLCJkaXNhYmxlU2lkZVBhbmVsIiwic2hhcGUiLCJhZGQiLCJTdHlsZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFRQSxNQUFSLEdBQTBCQyxrQkFBMUIsQ0FBUUQsTUFBUjtBQUFBLElBQWdCRSxLQUFoQixHQUEwQkQsa0JBQTFCLENBQWdCQyxLQUFoQjs7QUFFQSxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYTtBQUFBLE1BQUdDLElBQUgsUUFBR0EsSUFBSDtBQUFBLE1BQVNDLFFBQVQsUUFBU0EsUUFBVDtBQUFBLE1BQW1CQyxJQUFuQixRQUFtQkEsSUFBbkI7QUFBQSxNQUF5QkMsS0FBekIsUUFBeUJBLEtBQXpCO0FBQUEsc0JBQ2pCLGdDQUFDLGtCQUFEO0FBQVEsSUFBQSxJQUFJLEVBQUVIO0FBQWQsa0JBQ0UsZ0NBQUMsdUJBQUQsUUFBY0csS0FBZCxDQURGLGVBRUUsZ0NBQUMseUJBQUQsUUFDR0QsSUFBSSxpQkFDSCxnQ0FBQyxrQkFBRDtBQUFRLElBQUEsT0FBTyxFQUFFQSxJQUFqQjtBQUF1QixJQUFBLEtBQUssRUFBQztBQUE3QixVQUZKLEVBTUdELFFBQVEsaUJBQ1AsZ0NBQUMsa0JBQUQ7QUFBUSxJQUFBLE9BQU8sRUFBRUEsUUFBakI7QUFBMkIsSUFBQSxLQUFLLEVBQUM7QUFBakMsY0FQ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O2lDQUFuQmxHLEksZUFDUTtBQUNqQnlELEVBQUFBLGFBQWEsRUFBRXZHLHNCQUFVaUosTUFBVixDQUFpQkMsVUFEZjtBQUVqQi9GLEVBQUFBLEtBQUssRUFBRW5ELHNCQUFVaUosTUFBVixDQUFpQkMsVUFGUDtBQUdqQkMsRUFBQUEsZ0JBQWdCLEVBQUVuSixzQkFBVUMsSUFIWDtBQUlqQmlELEVBQUFBLGNBQWMsRUFBRWxELHNCQUFVRSxJQUFWLENBQWVnSixVQUpkO0FBS2pCMUMsRUFBQUEsc0JBQXNCLEVBQUV4RyxzQkFBVUUsSUFBVixDQUFlZ0osVUFMdEI7QUFNakI1QyxFQUFBQSxPQUFPLEVBQUV0RyxzQkFBVWlKLE1BQVYsQ0FBaUJDLFVBTlQ7QUFPakJ6QyxFQUFBQSxZQUFZLEVBQUV6RyxzQkFBVW9KLEtBQVYsQ0FBZ0I7QUFDNUJDLElBQUFBLEdBQUcsRUFBRXJKLHNCQUFVRSxJQUFWLENBQWVnSixVQURRO0FBRTVCLGNBQVFsSixzQkFBVUUsSUFBVixDQUFlZ0o7QUFGSyxHQUFoQjtBQVBHLEM7QUFtZHJCLElBQU1JLE1BQU0sR0FBRyx3QkFBV2xKLE1BQVgsRUFBbUIwQyxJQUFuQixDQUFmO2VBRWV3RyxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBFZGl0YWJsZUh0bWwsIHsgQUxMX1BMVUdJTlMgfSBmcm9tICdAcGllLWxpYi9lZGl0YWJsZS1odG1sJztcbmltcG9ydCB7IElucHV0Q29udGFpbmVyLCBsYXlvdXQsIHNldHRpbmdzIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCB7IHJlbmRlck1hdGggfSBmcm9tICdAcGllLWxpYi9tYXRoLXJlbmRlcmluZyc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJ2xvZGFzaC9pc1VuZGVmaW5lZCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgcmVkdWNlIGZyb20gJ2xvZGFzaC9yZWR1Y2UnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0J1dHRvbic7XG5pbXBvcnQgRGlhbG9nIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0RpYWxvZyc7XG5pbXBvcnQgRGlhbG9nVGl0bGUgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvRGlhbG9nVGl0bGUnO1xuaW1wb3J0IERpYWxvZ0FjdGlvbnMgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvRGlhbG9nQWN0aW9ucyc7XG5pbXBvcnQgVHlwb2dyYXBoeSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9UeXBvZ3JhcGh5JztcbmltcG9ydCBFeHBhbnNpb25QYW5lbCBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9FeHBhbnNpb25QYW5lbCc7XG5pbXBvcnQgRXhwYW5zaW9uUGFuZWxTdW1tYXJ5IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0V4cGFuc2lvblBhbmVsU3VtbWFyeSc7XG5pbXBvcnQgRXhwYW5zaW9uUGFuZWxEZXRhaWxzIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0V4cGFuc2lvblBhbmVsRGV0YWlscyc7XG5pbXBvcnQgRXhwYW5kTW9yZUljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0V4cGFuZE1vcmUnO1xuaW1wb3J0IElubGluZURyb3Bkb3duVG9vbGJhciBmcm9tICcuL2lubGluZS1kcm9wZG93bi10b29sYmFyJztcbmltcG9ydCBtYXggZnJvbSAnbG9kYXNoL21heCc7XG5cbmNvbnN0IHsgdG9nZ2xlLCBQYW5lbCB9ID0gc2V0dGluZ3M7XG5cbmNvbnN0IEluZm9EaWFsb2cgPSAoeyBvcGVuLCBvbkNhbmNlbCwgb25PaywgdGl0bGUgfSkgPT4gKFxuICA8RGlhbG9nIG9wZW49e29wZW59PlxuICAgIDxEaWFsb2dUaXRsZT57dGl0bGV9PC9EaWFsb2dUaXRsZT5cbiAgICA8RGlhbG9nQWN0aW9ucz5cbiAgICAgIHtvbk9rICYmIChcbiAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXtvbk9rfSBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICBPS1xuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICl9XG4gICAgICB7b25DYW5jZWwgJiYgKFxuICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uQ2FuY2VsfSBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICBDYW5jZWxcbiAgICAgICAgPC9CdXR0b24+XG4gICAgICApfVxuICAgIDwvRGlhbG9nQWN0aW9ucz5cbiAgPC9EaWFsb2c+XG4pO1xuXG5JbmZvRGlhbG9nLnByb3BUeXBlcyA9IHtcbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25PazogUHJvcFR5cGVzLmZ1bmMsXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5jb25zdCBzdHlsZXMgPSB0aGVtZSA9PiAoe1xuICBwcm9tcHRIb2xkZXI6IHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIHBhZGRpbmdCb3R0b206IHRoZW1lLnNwYWNpbmcudW5pdCAqIDIsXG4gICAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiAyXG4gIH0sXG4gIHByb21wdDoge1xuICAgIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcudW5pdCAqIDIsXG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9LFxuICBtYXJrdXA6IHtcbiAgICBtaW5IZWlnaHQ6ICcxMDBweCcsXG4gICAgcGFkZGluZ1RvcDogdGhlbWUuc3BhY2luZy51bml0ICogMixcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgICcmIFtkYXRhLXNsYXRlLWVkaXRvcj1cInRydWVcIl0nOiB7XG4gICAgICBtaW5IZWlnaHQ6ICcxMDBweCdcbiAgICB9XG4gIH0sXG4gIGRlc2lnbjoge1xuICAgIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcudW5pdCAqIDNcbiAgfSxcbiAgY2hvaWNlQ29uZmlndXJhdGlvbjoge1xuICAgIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcudW5pdCAqIDIsXG4gICAgcGFkZGluZ0JvdHRvbTogdGhlbWUuc3BhY2luZy51bml0ICogMlxuICB9LFxuICBzd2l0Y2hFbGVtZW50OiB7XG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgICBtYXJnaW46IDBcbiAgfSxcbiAgYWRkQnV0dG9uOiB7XG4gICAgZmxvYXQ6ICdyaWdodCdcbiAgfSxcbiAgdGV4dDoge1xuICAgIGZvbnRGYW1pbHk6ICdDZXJlYnJpIFNhbnMnLFxuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgbGluZUhlaWdodDogJzE5cHgnLFxuICAgIGNvbG9yOiAnIzQ5NUI4RidcbiAgfSxcbiAgcmF0aW9uYWxlTGFiZWw6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgd2hpdGVTcGFjZTogJ2JyZWFrLXNwYWNlcydcbiAgfSxcbiAgcmF0aW9uYWxlQ2hvaWNlczoge1xuICAgIG1hcmdpblRvcDogJzE2cHgnXG4gIH0sXG4gIHBhbmVsRGV0YWlsczoge1xuICAgZGlzcGxheTogJ2Jsb2NrJ1xuICB9XG59KTtcblxuY29uc3QgY3JlYXRlRWxlbWVudEZyb21IVE1MID0gaHRtbFN0cmluZyA9PiB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIGRpdi5pbm5lckhUTUwgPSAoaHRtbFN0cmluZyB8fCAnJykudHJpbSgpO1xuXG4gIHJldHVybiBkaXY7XG59O1xuXG5jb25zdCBwcmVwYXJlVmFsID0gaHRtbCA9PiB7XG4gIGNvbnN0IHRtcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpO1xuXG4gIHRtcC5pbm5lckhUTUwgPSBodG1sO1xuXG4gIGNvbnN0IHZhbHVlID0gdG1wLnRleHRDb250ZW50IHx8IHRtcC5pbm5lclRleHQgfHwgJyc7XG5cbiAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBNYWluIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjb25maWd1cmF0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBkaXNhYmxlU2lkZVBhbmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbk1vZGVsQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBpbWFnZVN1cHBvcnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBhZGQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBkZWxldGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbiAgICB9KVxuICB9O1xuXG4gIHN0YXRlID0ge1xuICAgIGRpYWxvZzoge1xuICAgICAgb3BlbjogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbW9kZWw6IHsgY2hvaWNlcyB9XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgcmVzcEFyZWFDaG9pY2VzOiBjbG9uZURlZXAoY2hvaWNlcykgfSk7XG4gIH1cblxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuUHJvcHMpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHt9O1xuXG4gICAgaWYgKFxuICAgICAgIWlzRXF1YWwoblByb3BzLm1vZGVsLmNob2ljZXMsIHRoaXMucHJvcHMubW9kZWwuY2hvaWNlcykgfHxcbiAgICAgICFpc0VxdWFsKG5Qcm9wcy5tb2RlbC5jaG9pY2VzLCB0aGlzLnN0YXRlLnJlc3BBcmVhQ2hvaWNlcylcbiAgICApIHtcbiAgICAgIG5ld1N0YXRlLnJlc3BBcmVhQ2hvaWNlcyA9IGNsb25lRGVlcChuUHJvcHMubW9kZWwuY2hvaWNlcyk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0VtcHR5KG5ld1N0YXRlKSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgIC8vZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc3QgZG9tTm9kZSA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuXG4gICAgcmVuZGVyTWF0aChkb21Ob2RlKTtcbiAgfVxuXG4gIG9uTW9kZWxDaGFuZ2UgPSBuZXdWYWwgPT4ge1xuICAgIHRoaXMucHJvcHMub25Nb2RlbENoYW5nZWQoe1xuICAgICAgLi4udGhpcy5wcm9wcy5tb2RlbCxcbiAgICAgIC4uLm5ld1ZhbFxuICAgIH0pO1xuICB9O1xuXG4gIG9uUHJvbXB0Q2hhbmdlZCA9IHByb21wdCA9PiB7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHsgcHJvbXB0IH0pO1xuICB9O1xuXG4gIG9uUmF0aW9uYWxlQ2hhbmdlZCA9IHJhdGlvbmFsZSA9PiB7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHsgcmF0aW9uYWxlIH0pO1xuICB9O1xuXG4gIG9uQ2hvaWNlUmF0aW9uYWxlQ2hhbmdlZCA9IChpbmRleCwgY2hvaWNlKSA9PiB7XG4gICAgY29uc3QgeyBtb2RlbCB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBpbmRleE9mQ2hvaWNlID0gbW9kZWwuY2hvaWNlcyAmJiBtb2RlbC5jaG9pY2VzW2luZGV4XSAmJiBtb2RlbC5jaG9pY2VzW2luZGV4XVxuICAgICAgLmZpbmRJbmRleChlbGVtID0+IGVsZW0ubGFiZWwgPT09IGNob2ljZS5sYWJlbCAmJiBlbGVtLnZhbHVlID09PSBjaG9pY2UudmFsdWUpO1xuXG4gICAgbW9kZWwuY2hvaWNlc1tpbmRleF0gJiYgbW9kZWwuY2hvaWNlc1tpbmRleF0uc3BsaWNlKGluZGV4T2ZDaG9pY2UsIDEsIGNob2ljZSk7XG5cbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UobW9kZWwpO1xuICB9O1xuXG4gIG9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQgPSB0ZWFjaGVySW5zdHJ1Y3Rpb25zID0+IHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoeyB0ZWFjaGVySW5zdHJ1Y3Rpb25zIH0pO1xuICB9O1xuXG4gIG9uTWFya3VwQ2hhbmdlZCA9IHNsYXRlTWFya3VwID0+IHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UoeyBzbGF0ZU1hcmt1cCB9KTtcbiAgfTtcblxuICBvbkNoZWNrID0gY2FsbGJhY2sgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZGlhbG9nOiB7XG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ1Jlc3BvbnNlIGFyZWFzIHdpdGggdW5kZXIgMiBvcHRpb25zIG9yIHdpdGggbm8gY29ycmVjdCBhbnN3ZXJzIHdpbGwgYmUgZGlzY2FyZGVkJyxcbiAgICAgICAgb25PazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgICAgICAgIG9wZW46IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2FuY2VsOiAoKSA9PlxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgZGlhbG9nOiB7XG4gICAgICAgICAgICAgIG9wZW46IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBvbkNoYW5nZSA9IG1hcmt1cCA9PiB7XG4gICAgY29uc3QgeyByZXNwQXJlYUNob2ljZXMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3QgZG9tTWFya3VwID0gY3JlYXRlRWxlbWVudEZyb21IVE1MKG1hcmt1cCk7XG4gICAgY29uc3QgYWxsUmVzcEFyZWFzID0gZG9tTWFya3VwLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAnW2RhdGEtdHlwZT1cImlubGluZV9kcm9wZG93blwiXSdcbiAgICApO1xuXG4gICAgY29uc3QgYWxsQ2hvaWNlcyA9IHt9O1xuXG4gICAgYWxsUmVzcEFyZWFzLmZvckVhY2goZWwgPT4ge1xuICAgICAgYWxsQ2hvaWNlc1tlbC5kYXRhc2V0LmluZGV4XSA9IGVsLmRhdGFzZXQudmFsdWUgfHwgJyc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGlzdGluZ1Jlc3BBcmVhQ2hvaWNlcyA9IHJlZHVjZShcbiAgICAgIHJlc3BBcmVhQ2hvaWNlcyxcbiAgICAgIChvYmosIGNob2ljZXMsIGtleSkgPT4ge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFsbENob2ljZXNba2V5XSkpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJlc3BBcmVhQ2hvaWNlc1trZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG5cbiAgICBjb25zdCBuZXdSZXNwQXJlYUNob2ljZXMgPSB7fTtcbiAgICBsZXQgc2hvdWxkV2FybiA9IGZhbHNlO1xuXG4gICAgYWxsUmVzcEFyZWFzLmZvckVhY2goKGVsLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3Q2hvaWNlcyA9IGV4aXN0aW5nUmVzcEFyZWFDaG9pY2VzW2VsLmRhdGFzZXQuaW5kZXhdIHx8IFtdO1xuXG4gICAgICBpZiAobmV3Q2hvaWNlcy5sZW5ndGggPCAyIHx8ICFuZXdDaG9pY2VzLmZpbmQoYyA9PiBjLmNvcnJlY3QpKSB7XG4gICAgICAgIGVsLnJlbW92ZSgpO1xuICAgICAgICBzaG91bGRXYXJuID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1Jlc3BBcmVhQ2hvaWNlc1tpbmRleF0gPVxuICAgICAgICAgIGV4aXN0aW5nUmVzcEFyZWFDaG9pY2VzW2VsLmRhdGFzZXQuaW5kZXhdIHx8IFtdO1xuICAgICAgICBlbC5kYXRhc2V0LmluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc2hvdWxkV2Fybikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgICdSZXNwb25zZSBhcmVhcyB3aXRoIHVuZGVyIDIgb3B0aW9ucyBvciB3aXRoIG5vIGNvcnJlY3QgYW5zd2VycyB3aWxsIGJlIGRpc2NhcmRlZCcsXG4gICAgICAgICAgb25PazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgICAgICAgICAgb3BlbjogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHtcbiAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGNsb25lRGVlcChuZXdSZXNwQXJlYUNob2ljZXMpLFxuICAgICAgICAgICAgICAgICAgc2xhdGVNYXJrdXA6IGRvbU1hcmt1cC5pbm5lckhUTUxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgICAgICAgIG9wZW46IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uoe1xuICAgICAgICBjaG9pY2VzOiBjbG9uZURlZXAobmV3UmVzcEFyZWFDaG9pY2VzKSxcbiAgICAgICAgc2xhdGVNYXJrdXA6IGRvbU1hcmt1cC5pbm5lckhUTUxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBvbkFkZENob2ljZSA9IChpbmRleCwgbGFiZWwpID0+IHtcbiAgICBjb25zdCB7IHJlc3BBcmVhQ2hvaWNlcyB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGlmICghcmVzcEFyZWFDaG9pY2VzW2luZGV4XSkge1xuICAgICAgcmVzcEFyZWFDaG9pY2VzW2luZGV4XSA9IFtdO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChyZXNwQXJlYUNob2ljZXNbaW5kZXhdIHx8IFtdKS5maW5kKFxuICAgICAgICByID0+IHByZXBhcmVWYWwoci5sYWJlbCkgPT09IHByZXBhcmVWYWwobGFiZWwpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGlhbG9nOiB7XG4gICAgICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgICAgICBtZXNzYWdlOiAnRHVwbGljYXRlIGFuc3dlcnMgYXJlIG5vdCBhbGxvd2VkLicsXG4gICAgICAgICAgb25PazogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICAgIGRpYWxvZzoge1xuICAgICAgICAgICAgICAgIG9wZW46IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChyZXNwQXJlYUNob2ljZXNbaW5kZXhdICYmIG1heChyZXNwQXJlYUNob2ljZXNbaW5kZXhdLm1hcChjID0+IHBhcnNlSW50KGMudmFsdWUpKS5maWx0ZXIodmFsID0+ICFpc05hTih2YWwpKSkpIHx8IDA7XG5cbiAgICByZXNwQXJlYUNob2ljZXNbaW5kZXhdLnB1c2goe1xuICAgICAgbGFiZWwsXG4gICAgICB2YWx1ZTogYCR7dmFsdWUgKyAxfWAsXG4gICAgICBjb3JyZWN0OiBmYWxzZVxuICAgIH0pO1xuXG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHsgY2hvaWNlczogY2xvbmVEZWVwKHJlc3BBcmVhQ2hvaWNlcykgfSk7XG4gIH07XG5cbiAgb25SZW1vdmVDaG9pY2UgPSAocmVzcEluZGV4LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgcmVzcEFyZWFDaG9pY2VzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmVzcEFyZWFDaG9pY2VzW3Jlc3BJbmRleF0uc3BsaWNlKGluZGV4LCAxKTtcblxuICAgIHRoaXMub25Nb2RlbENoYW5nZSh7IGNob2ljZXM6IGNsb25lRGVlcChyZXNwQXJlYUNob2ljZXMpIH0pO1xuICB9O1xuXG4gIG9uU2VsZWN0Q2hvaWNlID0gKHJlc3BJbmRleCwgc2VsZWN0ZWRJbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgcmVzcEFyZWFDaG9pY2VzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgcmVzcEFyZWFDaG9pY2VzW3Jlc3BJbmRleF0gPSByZXNwQXJlYUNob2ljZXNbcmVzcEluZGV4XS5tYXAoXG4gICAgICAoY2gsIGluZGV4KSA9PiAoeyAuLi5jaCwgY29ycmVjdDogaW5kZXggPT09IHNlbGVjdGVkSW5kZXggfSlcbiAgICApO1xuXG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHsgY2hvaWNlczogY2xvbmVEZWVwKHJlc3BBcmVhQ2hvaWNlcykgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgZGlhbG9nIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzZXMsXG4gICAgICBtb2RlbCxcbiAgICAgIGNvbmZpZ3VyYXRpb24sXG4gICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgaW1hZ2VTdXBwb3J0XG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgcHJvbXB0ID0ge30sXG4gICAgICBwYXJ0aWFsU2NvcmluZyA9IHt9LFxuICAgICAgbG9ja0Nob2ljZU9yZGVyID0ge30sXG4gICAgICByYXRpb25hbGUgPSB7fSxcbiAgICAgIGNob2ljZVJhdGlvbmFsZSA9IHt9LFxuICAgICAgdGVhY2hlckluc3RydWN0aW9ucyA9IHt9LFxuICAgICAgc3BlbGxDaGVjayA9IHt9LFxuICAgIH0gPSBjb25maWd1cmF0aW9uIHx8IHt9O1xuICAgIGNvbnN0IHtcbiAgICAgIHJhdGlvbmFsZUVuYWJsZWQsXG4gICAgICBjaG9pY2VSYXRpb25hbGVFbmFibGVkLFxuICAgICAgcHJvbXB0RW5hYmxlZCxcbiAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkLFxuICAgICAgY2hvaWNlcyxcbiAgICAgIHNwZWxsQ2hlY2tFbmFibGVkXG4gICAgfSA9XG4gICAgbW9kZWwgfHwge307XG5cbiAgICBjb25zdCByZW5kZXJDaG9pY2VSYXRpb25hbGUgPSAoKSA9PiAoT2JqZWN0LmtleXMoY2hvaWNlcykgfHwgW10pLm1hcChrZXkgPT5cbiAgICAgIDxkaXYga2V5PXtrZXl9IGNsYXNzTmFtZT17Y2xhc3Nlcy5yYXRpb25hbGVDaG9pY2VzfT5cbiAgICAgICAgPEV4cGFuc2lvblBhbmVsPlxuICAgICAgICAgIDxFeHBhbnNpb25QYW5lbFN1bW1hcnkgZXhwYW5kSWNvbj17PEV4cGFuZE1vcmVJY29uLz59PlxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPXtjbGFzc2VzLnRleHR9PlxuICAgICAgICAgICAgICB7YFJhdGlvbmFsZSBmb3IgcmVzcG9uc2UgYXJlYSAjJHtwYXJzZUludChrZXkpICsgMX1gfVxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgIDwvRXhwYW5zaW9uUGFuZWxTdW1tYXJ5PlxuICAgICAgICAgIDxFeHBhbnNpb25QYW5lbERldGFpbHMgY2xhc3NOYW1lPXtjbGFzc2VzLnBhbmVsRGV0YWlsc30+XG4gICAgICAgICAgICB7KGNob2ljZXNba2V5XSB8fCBbXSkubWFwKGNob2ljZSA9PlxuICAgICAgICAgICAgICA8SW5wdXRDb250YWluZXJcbiAgICAgICAgICAgICAgICBrZXk9e2Nob2ljZS5sYWJlbH1cbiAgICAgICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMucmF0aW9uYWxlTGFiZWx9XG4gICAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgICAgICAgX19odG1sOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCR7cmF0aW9uYWxlLmxhYmVsfSBmb3IgJHtjaG9pY2UubGFiZWx9ICgke2Nob2ljZS5jb3JyZWN0ID8gJ2NvcnJlY3QnIDogJ2luY29ycmVjdCd9KWBcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5wcm9tcHRIb2xkZXJ9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8RWRpdGFibGVIdG1sXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMucHJvbXB0fVxuICAgICAgICAgICAgICAgICAgbWFya3VwPXtjaG9pY2UucmF0aW9uYWxlIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17YyA9PlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hvaWNlUmF0aW9uYWxlQ2hhbmdlZChrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5jaG9pY2UsXG4gICAgICAgICAgICAgICAgICAgICAgcmF0aW9uYWxlOiBjXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpbWFnZVN1cHBvcnQ9e2ltYWdlU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0lucHV0Q29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0V4cGFuc2lvblBhbmVsRGV0YWlscz5cbiAgICAgICAgPC9FeHBhbnNpb25QYW5lbD5cbiAgICAgIDwvZGl2PlxuICAgIClcblxuICAgIGNvbnN0IHRvb2xiYXJPcHRzID0ge307XG5cbiAgICBzd2l0Y2ggKG1vZGVsLnRvb2xiYXJFZGl0b3JQb3NpdGlvbikge1xuICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgdG9vbGJhck9wdHMucG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0b29sYmFyT3B0cy5wb3NpdGlvbiA9ICdib3R0b20nO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuZGVzaWdufT5cbiAgICAgICAgPGxheW91dC5Db25maWdMYXlvdXRcbiAgICAgICAgICBzZXR0aW5ncz17XG4gICAgICAgICAgICA8UGFuZWxcbiAgICAgICAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICAgICAgICBjb25maWd1cmF0aW9uPXtjb25maWd1cmF0aW9ufVxuICAgICAgICAgICAgICBvbkNoYW5nZU1vZGVsPXttb2RlbCA9PiB0aGlzLm9uTW9kZWxDaGFuZ2UobW9kZWwpfVxuICAgICAgICAgICAgICBvbkNoYW5nZUNvbmZpZ3VyYXRpb249e2NvbmZpZ3VyYXRpb24gPT5cbiAgICAgICAgICAgICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkKGNvbmZpZ3VyYXRpb24sIHRydWUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZ3JvdXBzPXt7XG4gICAgICAgICAgICAgICAgU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nOlxuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU2NvcmluZy5zZXR0aW5ncyAmJiB0b2dnbGUocGFydGlhbFNjb3JpbmcubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgbG9ja0Nob2ljZU9yZGVyOlxuICAgICAgICAgICAgICAgICAgICBsb2NrQ2hvaWNlT3JkZXIuc2V0dGluZ3MgJiYgdG9nZ2xlKGxvY2tDaG9pY2VPcmRlci5sYWJlbClcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOlxuICAgICAgICAgICAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zLnNldHRpbmdzICYmXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZSh0ZWFjaGVySW5zdHJ1Y3Rpb25zLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgIHJhdGlvbmFsZUVuYWJsZWQ6XG4gICAgICAgICAgICAgICAgICAgIHJhdGlvbmFsZS5zZXR0aW5ncyAmJiB0b2dnbGUocmF0aW9uYWxlLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgIGNob2ljZVJhdGlvbmFsZUVuYWJsZWQ6XG4gICAgICAgICAgICAgICAgICAgIGNob2ljZVJhdGlvbmFsZS5zZXR0aW5ncyAmJiB0b2dnbGUoY2hvaWNlUmF0aW9uYWxlLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgIHByb21wdEVuYWJsZWQ6IHByb21wdC5zZXR0aW5ncyAmJiB0b2dnbGUocHJvbXB0LmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2tFbmFibGVkOlxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVjay5zZXR0aW5ncyAmJiB0b2dnbGUoc3BlbGxDaGVjay5sYWJlbClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICB7dGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8SW5wdXRDb250YWluZXJcbiAgICAgICAgICAgICAgICBsYWJlbD17dGVhY2hlckluc3RydWN0aW9ucy5sYWJlbH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMucHJvbXB0SG9sZGVyfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLnByb21wdH1cbiAgICAgICAgICAgICAgICAgIG1hcmt1cD17bW9kZWwudGVhY2hlckluc3RydWN0aW9ucyB8fCAnJ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWR9XG4gICAgICAgICAgICAgICAgICBpbWFnZVN1cHBvcnQ9e2ltYWdlU3VwcG9ydH1cbiAgICAgICAgICAgICAgICAgIG5vbkVtcHR5PXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2s9e3NwZWxsQ2hlY2tFbmFibGVkfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvSW5wdXRDb250YWluZXI+XG4gICAgICAgICAgICApfVxuXG4gICAgICAgICAgICB7cHJvbXB0RW5hYmxlZCAmJiAoXG4gICAgICAgICAgICAgIDxJbnB1dENvbnRhaW5lclxuICAgICAgICAgICAgICAgIGxhYmVsPXtwcm9tcHQubGFiZWx9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLnByb21wdEhvbGRlcn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5wcm9tcHR9XG4gICAgICAgICAgICAgICAgICBtYXJrdXA9e21vZGVsLnByb21wdH1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICAgICAgbm9uRW1wdHk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZVVuZGVybGluZVxuICAgICAgICAgICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9JbnB1dENvbnRhaW5lcj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtyYXRpb25hbGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgPElucHV0Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgbGFiZWw9e3JhdGlvbmFsZS5sYWJlbH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMucHJvbXB0SG9sZGVyfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLnByb21wdH1cbiAgICAgICAgICAgICAgICAgIG1hcmt1cD17bW9kZWwucmF0aW9uYWxlIHx8ICcnfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25SYXRpb25hbGVDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgaW1hZ2VTdXBwb3J0PXtpbWFnZVN1cHBvcnR9XG4gICAgICAgICAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0lucHV0Q29udGFpbmVyPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPXtjbGFzc2VzLnRleHR9PlxuICAgICAgICAgICAgICBEZWZpbmUgVGVtcGxhdGUsIENob2ljZXMsIGFuZCBDb3JyZWN0IFJlc3BvbnNlc1xuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgPEluZm9EaWFsb2dcbiAgICAgICAgICAgICAgb3Blbj17ZGlhbG9nLm9wZW59XG4gICAgICAgICAgICAgIHRpdGxlPXtkaWFsb2cubWVzc2FnZX1cbiAgICAgICAgICAgICAgb25DYW5jZWw9e2RpYWxvZy5vbkNhbmNlbH1cbiAgICAgICAgICAgICAgb25Paz17ZGlhbG9nLm9uT2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICBhY3RpdmVQbHVnaW5zPXtBTExfUExVR0lOU31cbiAgICAgICAgICAgICAgdG9vbGJhck9wdHM9e3sgcG9zaXRpb246ICd0b3AnIH19XG4gICAgICAgICAgICAgIHJlc3BvbnNlQXJlYVByb3BzPXt7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2lubGluZS1kcm9wZG93bicsXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgZHVwbGljYXRlczogdHJ1ZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzcEFyZWFUb29sYmFyOiAobm9kZSwgdmFsdWUsIG9uVG9vbGJhckRvbmUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVzcEFyZWFDaG9pY2VzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8SW5saW5lRHJvcGRvd25Ub29sYmFyXG4gICAgICAgICAgICAgICAgICAgICAgb25BZGRDaG9pY2U9e3RoaXMub25BZGRDaG9pY2V9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGVjaz17dGhpcy5vbkNoZWNrfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUmVtb3ZlQ2hvaWNlPXtpbmRleCA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJlbW92ZUNob2ljZShub2RlLmRhdGEuZ2V0KCdpbmRleCcpLCBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3RDaG9pY2U9e2luZGV4ID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hvaWNlKG5vZGUuZGF0YS5nZXQoJ2luZGV4JyksIGluZGV4KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBub2RlPXtub2RlfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvb2xiYXJEb25lPXtvblRvb2xiYXJEb25lfVxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9e3Jlc3BBcmVhQ2hvaWNlc1tub2RlLmRhdGEuZ2V0KCdpbmRleCcpXX1cbiAgICAgICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrRW5hYmxlZH1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzLm1hcmt1cH1cbiAgICAgICAgICAgICAgbWFya3VwPXttb2RlbC5zbGF0ZU1hcmt1cCB8fCAnJ31cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2V9XG4gICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICBvbkJsdXI9e3RoaXMub25CbHVyfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodFNoYXBlPXtmYWxzZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgIHtjaG9pY2VSYXRpb25hbGVFbmFibGVkICYmIHJlbmRlckNob2ljZVJhdGlvbmFsZSgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xheW91dC5Db25maWdMYXlvdXQ+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IFN0eWxlZCA9IHdpdGhTdHlsZXMoc3R5bGVzKShNYWluKTtcblxuZXhwb3J0IGRlZmF1bHQgU3R5bGVkO1xuIl19
687
+ //# sourceMappingURL=main.js.map