@pie-lib/editable-html 11.3.0-beta.0 → 11.4.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.
Files changed (127) hide show
  1. package/CHANGELOG.json +12 -3322
  2. package/CHANGELOG.md +116 -100
  3. package/lib/block-tags.js +1 -1
  4. package/lib/block-tags.js.map +1 -0
  5. package/lib/constants.js +1 -1
  6. package/lib/constants.js.map +1 -0
  7. package/lib/editor.js +7 -7
  8. package/lib/editor.js.map +1 -0
  9. package/lib/index.js +1 -1
  10. package/lib/index.js.map +1 -0
  11. package/lib/parse-html.js +1 -1
  12. package/lib/parse-html.js.map +1 -0
  13. package/lib/plugins/characters/custom-popper.js +1 -1
  14. package/lib/plugins/characters/custom-popper.js.map +1 -0
  15. package/lib/plugins/characters/index.js +1 -1
  16. package/lib/plugins/characters/index.js.map +1 -0
  17. package/lib/plugins/characters/utils.js +1 -1
  18. package/lib/plugins/characters/utils.js.map +1 -0
  19. package/lib/plugins/css/icons/index.js +1 -1
  20. package/lib/plugins/css/icons/index.js.map +1 -0
  21. package/lib/plugins/css/index.js +1 -1
  22. package/lib/plugins/css/index.js.map +1 -0
  23. package/lib/plugins/customPlugin/index.js +1 -1
  24. package/lib/plugins/customPlugin/index.js.map +1 -0
  25. package/lib/plugins/html/icons/index.js +1 -1
  26. package/lib/plugins/html/icons/index.js.map +1 -0
  27. package/lib/plugins/html/index.js +1 -1
  28. package/lib/plugins/html/index.js.map +1 -0
  29. package/lib/plugins/image/alt-dialog.js +1 -1
  30. package/lib/plugins/image/alt-dialog.js.map +1 -0
  31. package/lib/plugins/image/component.js +1 -1
  32. package/lib/plugins/image/component.js.map +1 -0
  33. package/lib/plugins/image/image-toolbar.js +1 -1
  34. package/lib/plugins/image/image-toolbar.js.map +1 -0
  35. package/lib/plugins/image/index.js +1 -1
  36. package/lib/plugins/image/index.js.map +1 -0
  37. package/lib/plugins/image/insert-image-handler.js +1 -1
  38. package/lib/plugins/image/insert-image-handler.js.map +1 -0
  39. package/lib/plugins/index.js +1 -1
  40. package/lib/plugins/index.js.map +1 -0
  41. package/lib/plugins/list/index.js +1 -1
  42. package/lib/plugins/list/index.js.map +1 -0
  43. package/lib/plugins/math/index.js +1 -1
  44. package/lib/plugins/math/index.js.map +1 -0
  45. package/lib/plugins/media/index.js +1 -1
  46. package/lib/plugins/media/index.js.map +1 -0
  47. package/lib/plugins/media/media-dialog.js +4 -4
  48. package/lib/plugins/media/media-dialog.js.map +1 -0
  49. package/lib/plugins/media/media-toolbar.js +1 -1
  50. package/lib/plugins/media/media-toolbar.js.map +1 -0
  51. package/lib/plugins/media/media-wrapper.js +1 -1
  52. package/lib/plugins/media/media-wrapper.js.map +1 -0
  53. package/lib/plugins/rendering/index.js +1 -1
  54. package/lib/plugins/rendering/index.js.map +1 -0
  55. package/lib/plugins/respArea/drag-in-the-blank/choice.js +4 -4
  56. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -0
  57. package/lib/plugins/respArea/drag-in-the-blank/index.js +1 -1
  58. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -0
  59. package/lib/plugins/respArea/explicit-constructed-response/index.js +1 -1
  60. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -0
  61. package/lib/plugins/respArea/icons/index.js +1 -1
  62. package/lib/plugins/respArea/icons/index.js.map +1 -0
  63. package/lib/plugins/respArea/index.js +1 -1
  64. package/lib/plugins/respArea/index.js.map +1 -0
  65. package/lib/plugins/respArea/inline-dropdown/index.js +1 -1
  66. package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -0
  67. package/lib/plugins/respArea/math-templated/index.js +1 -1
  68. package/lib/plugins/respArea/math-templated/index.js.map +1 -0
  69. package/lib/plugins/respArea/utils.js +1 -1
  70. package/lib/plugins/respArea/utils.js.map +1 -0
  71. package/lib/plugins/table/CustomTablePlugin.js +1 -1
  72. package/lib/plugins/table/CustomTablePlugin.js.map +1 -0
  73. package/lib/plugins/table/icons/index.js +1 -1
  74. package/lib/plugins/table/icons/index.js.map +1 -0
  75. package/lib/plugins/table/index.js +1 -1
  76. package/lib/plugins/table/index.js.map +1 -0
  77. package/lib/plugins/table/table-toolbar.js +1 -1
  78. package/lib/plugins/table/table-toolbar.js.map +1 -0
  79. package/lib/plugins/textAlign/icons/index.js +1 -1
  80. package/lib/plugins/textAlign/icons/index.js.map +1 -0
  81. package/lib/plugins/textAlign/index.js +1 -1
  82. package/lib/plugins/textAlign/index.js.map +1 -0
  83. package/lib/plugins/toolbar/default-toolbar.js +1 -1
  84. package/lib/plugins/toolbar/default-toolbar.js.map +1 -0
  85. package/lib/plugins/toolbar/done-button.js +1 -1
  86. package/lib/plugins/toolbar/done-button.js.map +1 -0
  87. package/lib/plugins/toolbar/editor-and-toolbar.js +4 -4
  88. package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -0
  89. package/lib/plugins/toolbar/index.js +1 -1
  90. package/lib/plugins/toolbar/index.js.map +1 -0
  91. package/lib/plugins/toolbar/toolbar-buttons.js +1 -1
  92. package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -0
  93. package/lib/plugins/toolbar/toolbar.js +1 -1
  94. package/lib/plugins/toolbar/toolbar.js.map +1 -0
  95. package/lib/plugins/utils.js +1 -1
  96. package/lib/plugins/utils.js.map +1 -0
  97. package/lib/serialization.js +1 -1
  98. package/lib/serialization.js.map +1 -0
  99. package/lib/shared/alert-dialog.js +75 -0
  100. package/lib/shared/index.js +136 -0
  101. package/lib/theme.js +1 -1
  102. package/lib/theme.js.map +1 -0
  103. package/package.json +7 -6
  104. package/src/editor.jsx +3 -3
  105. package/src/plugins/media/media-dialog.js +1 -1
  106. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +1 -1
  107. package/src/plugins/toolbar/default-toolbar.jsx +6 -4
  108. package/src/plugins/toolbar/editor-and-toolbar.jsx +1 -1
  109. package/src/plugins/toolbar/toolbar.jsx +4 -4
  110. package/lib/__tests__/editor.test.js +0 -470
  111. package/lib/__tests__/serialization.test.js +0 -246
  112. package/lib/__tests__/utils.js +0 -106
  113. package/lib/plugins/image/__tests__/component.test.js +0 -51
  114. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +0 -56
  115. package/lib/plugins/image/__tests__/image-toolbar.test.js +0 -26
  116. package/lib/plugins/image/__tests__/index.test.js +0 -98
  117. package/lib/plugins/image/__tests__/insert-image-handler.test.js +0 -125
  118. package/lib/plugins/image/__tests__/mock-change.js +0 -25
  119. package/lib/plugins/list/__tests__/index.test.js +0 -79
  120. package/lib/plugins/math/__tests__/index.test.js +0 -300
  121. package/lib/plugins/media/__tests__/index.test.js +0 -71
  122. package/lib/plugins/table/__tests__/index.test.js +0 -442
  123. package/lib/plugins/table/__tests__/table-toolbar.test.js +0 -54
  124. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +0 -128
  125. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +0 -51
  126. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +0 -54
  127. package/lib/plugins/toolbar/__tests__/toolbar.test.js +0 -120
package/lib/editor.js CHANGED
@@ -63,9 +63,9 @@ var _debug = _interopRequireDefault(require("debug"));
63
63
 
64
64
  var _styles = require("@material-ui/core/styles");
65
65
 
66
- var _renderUi = require("@pie-lib/render-ui");
66
+ var _index = require("./shared/index");
67
67
 
68
- var _configUi = require("@pie-lib/config-ui");
68
+ var _alertDialog = _interopRequireDefault(require("./shared/alert-dialog"));
69
69
 
70
70
  var serialization = _interopRequireWildcard(require("./serialization"));
71
71
 
@@ -419,7 +419,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
419
419
  ref: function ref(_ref2) {
420
420
  return _this.elementRef = _ref2;
421
421
  }
422
- }, /*#__PURE__*/_react["default"].createElement("div", null, "Preview of Edited Html:"), /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
422
+ }, /*#__PURE__*/_react["default"].createElement("div", null, "Preview of Edited Html:"), /*#__PURE__*/_react["default"].createElement(_index.PreviewPrompt, {
423
423
  defaultClassName: classes.previewText,
424
424
  prompt: _this.state.value.document.text
425
425
  }), /*#__PURE__*/_react["default"].createElement("div", null, "Would you like to save these changes ?"));
@@ -1165,7 +1165,7 @@ var Editor = /*#__PURE__*/function (_React$Component) {
1165
1165
  placeholder: placeholder,
1166
1166
  renderPlaceholder: this.renderPlaceholder,
1167
1167
  onDataChange: this.changeData
1168
- }), /*#__PURE__*/_react["default"].createElement(_configUi.AlertDialog, {
1168
+ }), /*#__PURE__*/_react["default"].createElement(_alertDialog["default"], {
1169
1169
  open: dialog.open,
1170
1170
  title: dialog.title,
1171
1171
  text: dialog.text,
@@ -1302,8 +1302,8 @@ var styles = {
1302
1302
  tableLayout: 'fixed',
1303
1303
  width: '100%',
1304
1304
  borderCollapse: 'collapse',
1305
- color: _renderUi.color.text(),
1306
- backgroundColor: _renderUi.color.background()
1305
+ color: _index.color.text(),
1306
+ backgroundColor: _index.color.background()
1307
1307
  },
1308
1308
  '& table:not([border="1"]) tr': {
1309
1309
  borderTop: '1px solid #dfe2e5' // TODO perhaps secondary color for background, for now disable
@@ -1352,4 +1352,4 @@ var styles = {
1352
1352
  var _default = (0, _styles.withStyles)(styles)(Editor);
1353
1353
 
1354
1354
  exports["default"] = _default;
1355
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9lZGl0b3IuanN4Il0sIm5hbWVzIjpbImxvZyIsImRlZmF1bHRUb29sYmFyT3B0cyIsInBvc2l0aW9uIiwiYWxpZ25tZW50IiwiYWx3YXlzVmlzaWJsZSIsInNob3dEb25lIiwiZG9uZU9uIiwiZGVmYXVsdFJlc3BvbnNlQXJlYVByb3BzIiwib3B0aW9ucyIsInJlc3BBcmVhVG9vbGJhciIsIm9uSGFuZGxlQXJlYUNoYW5nZSIsImRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyIsImNyZWF0ZVRvb2xiYXJPcHRzIiwidG9vbGJhck9wdHMiLCJlcnJvciIsImlzSHRtbE1vZGUiLCJNQVhfQ0hBUkFDVEVSU19MSU1JVCIsIkVkaXRvciIsInByb3BzIiwiaW50ZXJhY3RlZCIsImtleXBhZEludGVyYWN0aW9uRGV0ZWN0ZWQiLCJvcGVuIiwiZXh0cmFEaWFsb2dQcm9wcyIsImNhbGxiYWNrIiwic2V0U3RhdGUiLCJkaWFsb2ciLCJwcmV2U3RhdGUiLCJpc0VkaXRlZEluSHRtbE1vZGUiLCJzdGF0ZSIsIm5ld1Rvb2xiYXJPcHRzIiwibm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzIiwicmVzcG9uc2VBcmVhUHJvcHMiLCJodG1sUGx1Z2luT3B0cyIsImN1cnJlbnRWYWx1ZSIsInZhbHVlIiwidG9nZ2xlSHRtbE1vZGUiLCJoYW5kbGVBbGVydERpYWxvZyIsImhhbmRsZURpYWxvZyIsInBsdWdpblByb3BzIiwiY3VzdG9tUGx1Z2lucyIsInBsdWdpbnMiLCJhY3RpdmVQbHVnaW5zIiwibWF0aCIsIm9uQ2xpY2siLCJvbk1hdGhDbGljayIsIm9uRm9jdXMiLCJvblBsdWdpbkZvY3VzIiwib25CbHVyIiwib25QbHVnaW5CbHVyIiwibWF0aE1sT3B0aW9ucyIsInRleHRBbGlnbiIsImdldFZhbHVlIiwib25DaGFuZ2UiLCJodG1sIiwiZXh0cmFDU1NSdWxlcyIsImltYWdlIiwiZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9ucyIsIm9uRGVsZXRlIiwiaW1hZ2VTdXBwb3J0Iiwibm9kZSIsImRvbmUiLCJzcmMiLCJkYXRhIiwiZ2V0IiwiZSIsIm5ld1BlbmRpbmdJbWFnZXMiLCJwZW5kaW5nSW1hZ2VzIiwiZmlsdGVyIiwiaW1nIiwia2V5Iiwib2xkU2NoZWR1bGVkIiwic2NoZWR1bGVkIiwibmV3U3RhdGUiLCJsZW5ndGgiLCJpbnNlcnRJbWFnZVJlcXVlc3RlZCIsImFkZGVkSW1hZ2UiLCJnZXRIYW5kbGVyIiwib25GaW5pc2giLCJyZXN1bHQiLCJjYiIsIm9uRWRpdGluZ0RvbmUiLCJiaW5kIiwiaGFuZGxlciIsImFkZCIsIm1heEltYWdlV2lkdGgiLCJtYXhJbWFnZUhlaWdodCIsInRvb2xiYXIiLCJkaXNhYmxlU2Nyb2xsYmFyIiwiZGlzYWJsZVVuZGVybGluZSIsImF1dG9XaWR0aCIsImF1dG9XaWR0aFRvb2xiYXIiLCJvbkRvbmUiLCJub25FbXB0eSIsInRvb2xiYXJJbkZvY3VzIiwiZm9jdXNlZE5vZGUiLCJmb2N1c1Rvb2xiYXIiLCJlZGl0b3IiLCJibHVyIiwic3RhcnRUZXh0IiwidGV4dCIsInJlc2V0VmFsdWUiLCJ0aGVuIiwidGFibGUiLCJyZXNwb25zZUFyZWEiLCJ0eXBlIiwibWF4UmVzcG9uc2VBcmVhcyIsImxhbmd1YWdlQ2hhcmFjdGVycyIsImxhbmd1YWdlQ2hhcmFjdGVyc1Byb3BzIiwia2V5UGFkQ2hhcmFjdGVyUmVmIiwic2V0S2V5cGFkSW50ZXJhY3Rpb24iLCJtZWRpYSIsImZvY3VzIiwiY3JlYXRlQ2hhbmdlIiwiY2hhbmdlIiwidXBsb2FkU291bmRTdXBwb3J0IiwibW1sT3V0cHV0IiwibW1sRWRpdGluZyIsInJ1blNlcmlhbGl6YXRpb25Pbk1hcmt1cCIsInJlbGF0ZWRUYXJnZXQiLCJ0YXJnZXQiLCJzdGFzaGVkVmFsdWUiLCJzdGFzaFZhbHVlIiwiYyIsImNvbGxhcHNlVG9TdGFydE9mIiwic2VsZWN0ZWROb2RlIiwiZG9jdW1lbnQiLCJwcmV2aWV3VGV4dCIsInJlbmRlckh0bWxQcmV2aWV3Q29udGVudCIsIm9wZW5IdG1sTW9kZUNvbmZpcm1hdGlvbkRpYWxvZyIsImNsYXNzZXMiLCJyZWYiLCJlbGVtZW50UmVmIiwidGl0bGUiLCJvbkNvbmZpcm1UZXh0Iiwib25DbG9zZVRleHQiLCJvbkNvbmZpcm0iLCJoYW5kbGVIdG1sTW9kZVNhdmVDb25maXJtYXRpb24iLCJvbkNsb3NlIiwiaHRtbE1vZGVDb250aW51ZUVkaXRpbmciLCJyZXNvbHZlIiwiZXZlbnQiLCJ0b29sYmFyRWxlbWVudCIsInRvb2xiYXJSZWYiLCJjbG9zZXN0IiwiY2xhc3NOYW1lIiwiaXNSYXdEb25lQnV0dG9uIiwiZG9uZUJ1dHRvblJlZiIsImN1cnJlbnQiLCJza2lwQmx1ckhhbmRsaW5nIiwiUHJvbWlzZSIsInByZUJsdXJWYWx1ZSIsImhhbmRsZUJsdXIiLCJlZGl0b3JET00iLCJxdWVyeVNlbGVjdG9yIiwic2V0VGltZW91dCIsInN0YXRlVmFsdWUiLCJ3cmFwcGVyUmVmIiwiZWRpdG9yRWxlbWVudCIsImFjdGl2ZUVsZW1lbnQiLCJpc0luQ3VycmVudENvbXBvbmVudCIsImNvbnRhaW5zIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZURvbUJsdXIiLCJpc0ZvY3VzZWQiLCJpc1RvdWNoRGV2aWNlIiwid2luZG93IiwibmF2aWdhdG9yIiwibWF4VG91Y2hQb2ludHMiLCJfX1RFTVBPUkFSWV9DSEFOR0VfREFUQSIsImRvbUVsIiwic2V0Tm9kZUJ5S2V5IiwiYWRkRXZlbnRMaXN0ZW5lciIsInNob3VsZEZvY3VzRWRpdG9yIiwiZm9yY2UiLCJzdG9wUmVzZXQiLCJyZWR1Y2UiLCJzIiwicCIsInRvT2JqZWN0IiwibmV3VmFsdWUiLCJWYWx1ZSIsImZyb21KU09OIiwidG9KU09OIiwibWUiLCJjaGFyYWN0ZXJzTGltaXQiLCJsaW1pdCIsImhhbmRsZVBsdWdpbnMiLCJ2IiwiY2FsY1JlZ2V4IiwiZW5kc1dpdGgiLCJ1bmRlZmluZWQiLCJtYXRjaCIsInBhcnNlSW50IiwiaXNOYU4iLCJvYmplY3QiLCJsYXN0Iiwibm9kZXMiLCJwYXJlbnQiLCJnZXRQYXJlbnQiLCJCbG9jayIsInBvcyIsImRyb3BDb250ZXh0IiwidHJhbnNmZXIiLCJmaWxlIiwiZmlsZXMiLCJmcmFnbWVudCIsImlubGluZSIsIklubGluZSIsImNyZWF0ZSIsImlzVm9pZCIsImxvYWRpbmciLCJyYW5nZSIsInNlbGVjdCIsImNoIiwiaW5zZXJ0SW5saW5lIiwiSW5zZXJ0SW1hZ2VIYW5kbGVyIiwiZmlsZUNob3NlbiIsImluc2VydEZyYWdtZW50Iiwic2VsZWN0aW9uIiwic3RhcnRCbG9jayIsImRlZmF1bHRCbG9jayIsImRlZmF1bHRNYXJrcyIsImdldEluc2VydE1hcmtzQXRSYW5nZSIsImZyYWciLCJQbGFpbiIsImRlc2VyaWFsaXplIiwicGxhY2Vob2xkZXIiLCJzaXplIiwiaXNFbXB0eSIsImRpc3BsYXkiLCJ3aWR0aCIsIm1heFdpZHRoIiwid2hpdGVTcGFjZSIsIm9wYWNpdHkiLCJwb2ludGVyRXZlbnRzIiwidXNlclNlbGVjdCIsIlJlYWN0IiwiY3JlYXRlUmVmIiwiaGFuZGxlVG9vbGJhckZvY3VzIiwiaGFuZGxlVG9vbGJhckJsdXIiLCJvblJlc2l6ZSIsInRvb2xiYXJDb250YWluc0ZvY3VzIiwib25SZWYiLCJpc1Jlc3BvbnNlQXJlYUVkaXRvciIsImluY2x1ZGVzIiwicmVzcG9uc2VBcmVhRWRpdG9yIiwic2V0QXR0cmlidXRlIiwiYXV0b0ZvY3VzIiwibmV4dFByb3BzIiwiZGlmZmVyZW50Q2hhcmFjdGVyUHJvcHMiLCJkaWZmZXJlbnRNYXRoTWxQcm9wcyIsImRpZmZlcmVudEltYWdlTWF4RGltZW5zaW9uc1Byb3BzIiwiZXF1YWxzIiwicHJldlByb3BzIiwiemVyb1dpZHRoRWxzIiwicXVlcnlTZWxlY3RvckFsbCIsIkFycmF5IiwiZnJvbSIsImZvckVhY2giLCJlbCIsInN0eWxlIiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJoZWlnaHQiLCJtYXhIZWlnaHQiLCJ2YWx1ZVRvU2l6ZSIsImRpc2FibGVkIiwic3BlbGxDaGVjayIsImhpZ2hsaWdodFNoYXBlIiwiaXNFZGl0b3IiLCJvbktleURvd24iLCJzaG93UGFyYWdyYXBocyIsInNlcGFyYXRlUGFyYWdyYXBocyIsIm90aGVyUGx1Z2luUHJvcHMiLCJzaXplU3R5bGUiLCJidWlsZFNpemVTdHlsZSIsIm5hbWVzIiwid2l0aEJnIiwidG9vbGJhck9uVG9wIiwidXBsb2FkaW5nIiwiciIsInNsYXRlRWRpdG9yIiwiZWRpdG9yUmVmIiwiZ2V0Rm9jdXNlZFZhbHVlIiwib25Ecm9wUGFzdGUiLCJub3JtYWxpemUiLCJub1BhZGRpbmciLCJzaG93UGFyYWdyYXBoIiwic2VwYXJhdGVQYXJhZ3JhcGgiLCJyZW5kZXJQbGFjZWhvbGRlciIsImNoYW5nZURhdGEiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJib29sIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJhbnkiLCJTbGF0ZVR5cGVzIiwic2hhcGUiLCJudW1iZXIiLCJvbmVPZlR5cGUiLCJzdHJpbmciLCJvbmVPZiIsImFycmF5T2YiLCJydWxlcyIsImxhbmd1YWdlIiwiY2hhcmFjdGVySWNvbiIsImNoYXJhY3RlcnMiLCJ2YWx1ZXMiLCJhbGxWYWxpZCIsImV2ZXJ5IiwiQUxMX1BMVUdJTlMiLCJFcnJvciIsImpvaW4iLCJzdHlsZXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0b3AiLCJsZWZ0IiwidHJhbnNmb3JtIiwiZm9udEZhbWlseSIsInRhYmxlTGF5b3V0IiwiYm9yZGVyQ29sbGFwc2UiLCJjb2xvciIsImJhY2tncm91bmQiLCJib3JkZXJUb3AiLCJwYWRkaW5nIiwiYm9yZGVyIiwiY29udGVudCIsImZvbnRTaXplIiwibWFyZ2luQm90dG9tIiwibWFyZ2luVG9wIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFHQTs7OztBQUNBOztBQUVBOzs7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b3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRWRpdG9yIGFzIFNsYXRlRWRpdG9yLCBmaW5kTm9kZSwgZ2V0RXZlbnRSYW5nZSwgZ2V0RXZlbnRUcmFuc2ZlciB9IGZyb20gJ3NsYXRlLXJlYWN0JztcbmltcG9ydCBTbGF0ZVR5cGVzIGZyb20gJ3NsYXRlLXByb3AtdHlwZXMnO1xuaW1wb3J0IHsgVmFsdWUsIEJsb2NrLCBJbmxpbmUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgUGxhaW4gZnJvbSAnc2xhdGUtcGxhaW4tc2VyaWFsaXplcic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5cbmltcG9ydCB7IGNvbG9yIH0gZnJvbSAnQHBpZS1saWIvcmVuZGVyLXVpJztcbmltcG9ydCB7IEFsZXJ0RGlhbG9nIH0gZnJvbSAnQHBpZS1saWIvY29uZmlnLXVpJztcbmltcG9ydCB7IFByZXZpZXdQcm9tcHQgfSBmcm9tICdAcGllLWxpYi9yZW5kZXItdWknO1xuXG5pbXBvcnQgeyBnZXRCYXNlNjQsIGh0bWxUb1ZhbHVlIH0gZnJvbSAnLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCBJbnNlcnRJbWFnZUhhbmRsZXIgZnJvbSAnLi9wbHVnaW5zL2ltYWdlL2luc2VydC1pbWFnZS1oYW5kbGVyJztcbmltcG9ydCAqIGFzIHNlcmlhbGl6YXRpb24gZnJvbSAnLi9zZXJpYWxpemF0aW9uJztcbmltcG9ydCB7IGJ1aWxkUGx1Z2lucywgQUxMX1BMVUdJTlMsIERFRkFVTFRfUExVR0lOUyB9IGZyb20gJy4vcGx1Z2lucyc7XG5cbmV4cG9ydCB7IEFMTF9QTFVHSU5TLCBERUZBVUxUX1BMVUdJTlMsIHNlcmlhbGl6YXRpb24gfTtcblxuY29uc3QgbG9nID0gZGVidWcoJ2VkaXRhYmxlLWh0bWw6ZWRpdG9yJyk7XG5cbmNvbnN0IGRlZmF1bHRUb29sYmFyT3B0cyA9IHtcbiAgcG9zaXRpb246ICdib3R0b20nLFxuICBhbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgYWx3YXlzVmlzaWJsZTogZmFsc2UsXG4gIHNob3dEb25lOiB0cnVlLFxuICBkb25lT246ICdibHVyJyxcbn07XG5cbmNvbnN0IGRlZmF1bHRSZXNwb25zZUFyZWFQcm9wcyA9IHtcbiAgb3B0aW9uczoge30sXG4gIHJlc3BBcmVhVG9vbGJhcjogKCkgPT4ge30sXG4gIG9uSGFuZGxlQXJlYUNoYW5nZTogKCkgPT4ge30sXG59O1xuXG5jb25zdCBkZWZhdWx0TGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMgPSBbXTtcblxuY29uc3QgY3JlYXRlVG9vbGJhck9wdHMgPSAodG9vbGJhck9wdHMsIGVycm9yLCBpc0h0bWxNb2RlKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uZGVmYXVsdFRvb2xiYXJPcHRzLFxuICAgIC4uLnRvb2xiYXJPcHRzLFxuICAgIGVycm9yLFxuICAgIGlzSHRtbE1vZGUsXG4gIH07XG59O1xuXG4vKipcbiAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoZSBlZGl0b3IgY2FuIHN1cHBvcnRcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE1BWF9DSEFSQUNURVJTX0xJTUlUID0gMTAwMDAwMDtcblxuZXhwb3J0IGNsYXNzIEVkaXRvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBlZGl0b3JSZWY6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgZXJyb3I6IFByb3BUeXBlcy5hbnksXG4gICAgb25SZWY6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvY3VzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBTbGF0ZVR5cGVzLnZhbHVlLmlzUmVxdWlyZWQsXG4gICAgaW1hZ2VTdXBwb3J0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG1hdGhNbE9wdGlvbnM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtbWxPdXRwdXQ6IFByb3BUeXBlcy5ib29sLFxuICAgICAgbW1sRWRpdGluZzogUHJvcFR5cGVzLmJvb2wsXG4gICAgfSksXG4gICAgZGlzYWJsZUltYWdlQWxpZ25tZW50QnV0dG9uczogUHJvcFR5cGVzLmJvb2wsXG4gICAgdXBsb2FkU291bmRTdXBwb3J0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGRlbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgfSksXG4gICAgY2hhcmFjdGVyc0xpbWl0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHdpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgbWluV2lkdGg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSxcbiAgICBtYXhXaWR0aDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIGhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIG1pbkhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIG1heEhlaWdodDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBoaWdobGlnaHRTaGFwZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNwZWxsQ2hlY2s6IFByb3BUeXBlcy5ib29sLFxuICAgIG5vbkVtcHR5OiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlU2Nyb2xsYmFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBhdXRvV2lkdGhUb29sYmFyOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBwbHVnaW5Qcm9wczogUHJvcFR5cGVzLmFueSxcbiAgICAvLyBjdXN0b21QbHVnaW5zIHNob3VsZCBiZSBpbnNpZGUgcGx1Z2luUHJvcHMgKGEgcHJvcGVydHkgaW5zaWRlIHBsdWdpblByb3BzKVxuICAgIC8vICAgY3VzdG9tUGx1Z2luczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgLy8gICAgICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAvLyAgICAgICAgIGV2ZW50OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vICAgICAgICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAvLyAgICAgICAgIGljb25UeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8vICAgICAgICAgaWNvbkFsdDogUHJvcFR5cGVzLnN0cmluZ1xuICAgIC8vICAgICAgIH0pLFxuICAgIC8vICAgKSxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpc0VkaXRvcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgcmVzcG9uc2VBcmVhUHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICB0eXBlOiBQcm9wVHlwZXMub25lT2YoW1xuICAgICAgICAnZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnLFxuICAgICAgICAnaW5saW5lLWRyb3Bkb3duJyxcbiAgICAgICAgJ2RyYWctaW4tdGhlLWJsYW5rJyxcbiAgICAgICAgJ21hdGgtdGVtcGxhdGVkJyxcbiAgICAgIF0pLFxuICAgICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICAgIHJlc3BBcmVhVG9vbGJhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgICBvbkhhbmRsZUFyZWFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgbWF4UmVzcG9uc2VBcmVhczogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGVycm9yOiBQcm9wVHlwZXMuYW55LFxuICAgIH0pLFxuICAgIGV4dHJhQ1NTUnVsZXM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBuYW1lczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgICBydWxlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBsYW5ndWFnZUNoYXJhY3RlcnNQcm9wczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgICBsYW5ndWFnZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgY2hhcmFjdGVySWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgICAgY2hhcmFjdGVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZykpLFxuICAgICAgfSksXG4gICAgKSxcbiAgICBydW5TZXJpYWxpemF0aW9uT25NYXJrdXA6IFByb3BUeXBlcy5mdW5jLFxuICAgIHRvb2xiYXJPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcG9zaXRpb246IFByb3BUeXBlcy5vbmVPZihbJ2JvdHRvbScsICd0b3AnXSksXG4gICAgICBhbGlnbm1lbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2xlZnQnLCAncmlnaHQnXSksXG4gICAgICBhbHdheXNWaXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIHNob3dEb25lOiBQcm9wVHlwZXMuYm9vbCxcbiAgICAgIGRvbmVPbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIG1pbldpZHRoOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSksXG4gICAgfSksXG4gICAgYWN0aXZlUGx1Z2luczogUHJvcFR5cGVzLmFycmF5T2YoKHZhbHVlcykgPT4ge1xuICAgICAgY29uc3QgYWxsVmFsaWQgPSB2YWx1ZXMuZXZlcnkoKHYpID0+IEFMTF9QTFVHSU5TLmluY2x1ZGVzKHYpKTtcblxuICAgICAgcmV0dXJuICFhbGxWYWxpZCAmJiBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWVzOiAke3ZhbHVlc30sIHZhbHVlcyBtdXN0IGJlIG9uZSBvZiBbJHtBTExfUExVR0lOUy5qb2luKCcsJyl9XWApO1xuICAgIH0pLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtYXhJbWFnZVdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG1heEltYWdlSGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlzYWJsZVVuZGVybGluZTogdHJ1ZSxcbiAgICBvbkZvY3VzOiAoKSA9PiB7fSxcbiAgICBvbkJsdXI6ICgpID0+IHt9LFxuICAgIG9uS2V5RG93bjogKCkgPT4ge30sXG4gICAgcnVuU2VyaWFsaXphdGlvbk9uTWFya3VwOiAoKSA9PiB7fSxcbiAgICBtYXRoTWxPcHRpb25zOiB7XG4gICAgICBtbWxPdXRwdXQ6IGZhbHNlLFxuICAgICAgbW1sRWRpdGluZzogZmFsc2UsXG4gICAgfSxcbiAgICB0b29sYmFyT3B0czogZGVmYXVsdFRvb2xiYXJPcHRzLFxuICAgIHJlc3BvbnNlQXJlYVByb3BzOiBkZWZhdWx0UmVzcG9uc2VBcmVhUHJvcHMsXG4gICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHM6IGRlZmF1bHRMYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyxcbiAgICBleHRyYUNTU1J1bGVzOiBudWxsLFxuICAgIGlzRWRpdG9yOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgdG9vbGJhck9wdHM6IGNyZWF0ZVRvb2xiYXJPcHRzKHByb3BzLnRvb2xiYXJPcHRzLCBwcm9wcy5lcnJvciksXG4gICAgICBwZW5kaW5nSW1hZ2VzOiBbXSxcbiAgICAgIGlzSHRtbE1vZGU6IGZhbHNlLFxuICAgICAgaXNFZGl0ZWRJbkh0bWxNb2RlOiBmYWxzZSxcbiAgICAgIGZvY3VzVG9vbGJhcjogZmFsc2UsXG4gICAgICBkaWFsb2c6IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICB0aGlzLmtleVBhZENoYXJhY3RlclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMuZG9uZUJ1dHRvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xuICAgIHRoaXMua2V5cGFkSW50ZXJhY3Rpb25EZXRlY3RlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy50b2dnbGVIdG1sTW9kZSA9IHRoaXMudG9nZ2xlSHRtbE1vZGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZVRvb2xiYXJGb2N1cyA9IHRoaXMuaGFuZGxlVG9vbGJhckZvY3VzLmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVUb29sYmFyQmx1ciA9IHRoaXMuaGFuZGxlVG9vbGJhckJsdXIuYmluZCh0aGlzKTtcblxuICAgIHRoaXMub25SZXNpemUgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuc3RhdGUuaXNIdG1sTW9kZSAmJiBwcm9wcy5vbkNoYW5nZSkge1xuICAgICAgICBwcm9wcy5vbkNoYW5nZSh0aGlzLnN0YXRlLnZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5oYW5kbGVQbHVnaW5zKHRoaXMucHJvcHMpO1xuICB9XG5cbiAgaGFuZGxlVG9vbGJhckZvY3VzKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmZvY3VzVG9vbGJhcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyBmb2N1c1Rvb2xiYXI6IHRydWUgfSk7XG4gIH1cblxuICBzZXRLZXlwYWRJbnRlcmFjdGlvbiA9IChpbnRlcmFjdGVkKSA9PiB7XG4gICAgdGhpcy5rZXlwYWRJbnRlcmFjdGlvbkRldGVjdGVkID0gaW50ZXJhY3RlZDtcbiAgfTtcblxuICBoYW5kbGVUb29sYmFyQmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50b29sYmFyQ29udGFpbnNGb2N1cygpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBmb2N1c1Rvb2xiYXI6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgdG9vbGJhckNvbnRhaW5zRm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLnRvb2xiYXJSZWYpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB0b29sYmFyRWxlbWVudCA9IHRoaXMudG9vbGJhclJlZjtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgIHJldHVybiB0b29sYmFyRWxlbWVudCAmJiB0b29sYmFyRWxlbWVudC5jb250YWlucyhhY3RpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGhhbmRsZURpYWxvZyA9IChvcGVuLCBleHRyYURpYWxvZ1Byb3BzID0ge30sIGNhbGxiYWNrKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgZGlhbG9nOiB7XG4gICAgICAgICAgb3BlbixcbiAgICAgICAgICAuLi5leHRyYURpYWxvZ1Byb3BzLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICk7XG4gIH07XG5cbiAgdG9nZ2xlSHRtbE1vZGUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIGlzSHRtbE1vZGU6ICFwcmV2U3RhdGUuaXNIdG1sTW9kZSxcbiAgICAgICAgaXNFZGl0ZWRJbkh0bWxNb2RlOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGVycm9yIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBjb25zdCB7IHRvb2xiYXJPcHRzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBjb25zdCBuZXdUb29sYmFyT3B0cyA9IGNyZWF0ZVRvb2xiYXJPcHRzKHRvb2xiYXJPcHRzLCBlcnJvciwgdGhpcy5zdGF0ZS5pc0h0bWxNb2RlKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgdG9vbGJhck9wdHM6IG5ld1Rvb2xiYXJPcHRzLFxuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBoYW5kbGVQbHVnaW5zID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzID0ge1xuICAgICAgLi4uZGVmYXVsdFJlc3BvbnNlQXJlYVByb3BzLFxuICAgICAgLi4ucHJvcHMucmVzcG9uc2VBcmVhUHJvcHMsXG4gICAgfTtcblxuICAgIGNvbnN0IGh0bWxQbHVnaW5PcHRzID0ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgaXNIdG1sTW9kZTogdGhpcy5zdGF0ZS5pc0h0bWxNb2RlLFxuICAgICAgaXNFZGl0ZWRJbkh0bWxNb2RlOiB0aGlzLnN0YXRlLmlzRWRpdGVkSW5IdG1sTW9kZSxcbiAgICAgIHRvZ2dsZUh0bWxNb2RlOiB0aGlzLnRvZ2dsZUh0bWxNb2RlLFxuICAgICAgaGFuZGxlQWxlcnREaWFsb2c6IHRoaXMuaGFuZGxlRGlhbG9nLFxuICAgIH07XG4gICAgbGV0IHsgY3VzdG9tUGx1Z2lucyB9ID0gcHJvcHMucGx1Z2luUHJvcHMgfHwge307XG4gICAgY3VzdG9tUGx1Z2lucyA9IGN1c3RvbVBsdWdpbnMgfHwgW107XG5cbiAgICB0aGlzLnBsdWdpbnMgPSBidWlsZFBsdWdpbnMocHJvcHMuYWN0aXZlUGx1Z2lucywgY3VzdG9tUGx1Z2lucywge1xuICAgICAgbWF0aDoge1xuICAgICAgICBvbkNsaWNrOiB0aGlzLm9uTWF0aENsaWNrLFxuICAgICAgICBvbkZvY3VzOiB0aGlzLm9uUGx1Z2luRm9jdXMsXG4gICAgICAgIG9uQmx1cjogdGhpcy5vblBsdWdpbkJsdXIsXG4gICAgICAgIC4uLnByb3BzLm1hdGhNbE9wdGlvbnMsXG4gICAgICB9LFxuICAgICAgdGV4dEFsaWduOiB7XG4gICAgICAgIGdldFZhbHVlOiAoKSA9PiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIH0sXG4gICAgICBodG1sOiBodG1sUGx1Z2luT3B0cyxcbiAgICAgIGV4dHJhQ1NTUnVsZXM6IHByb3BzLmV4dHJhQ1NTUnVsZXMgfHwge30sXG4gICAgICBpbWFnZToge1xuICAgICAgICBkaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zOiBwcm9wcy5kaXNhYmxlSW1hZ2VBbGlnbm1lbnRCdXR0b25zLFxuICAgICAgICBvbkRlbGV0ZTpcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQgJiZcbiAgICAgICAgICBwcm9wcy5pbWFnZVN1cHBvcnQuZGVsZXRlICYmXG4gICAgICAgICAgKChub2RlLCBkb25lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBub2RlLmRhdGEuZ2V0KCdzcmMnKTtcblxuICAgICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmRlbGV0ZShzcmMsIChlKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1BlbmRpbmdJbWFnZXMgPSB0aGlzLnN0YXRlLnBlbmRpbmdJbWFnZXMuZmlsdGVyKChpbWcpID0+IGltZy5rZXkgIT09IG5vZGUua2V5KTtcbiAgICAgICAgICAgICAgY29uc3QgeyBzY2hlZHVsZWQ6IG9sZFNjaGVkdWxlZCB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ0ltYWdlczogbmV3UGVuZGluZ0ltYWdlcyxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZWQ6IG9sZFNjaGVkdWxlZCAmJiBuZXdQZW5kaW5nSW1hZ2VzLmxlbmd0aCA9PT0gMCA/IGZhbHNlIDogb2xkU2NoZWR1bGVkLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+IGRvbmUoZSwgdGhpcy5zdGF0ZS52YWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIGluc2VydEltYWdlUmVxdWVzdGVkOlxuICAgICAgICAgIHByb3BzLmltYWdlU3VwcG9ydCAmJlxuICAgICAgICAgICgoYWRkZWRJbWFnZSwgZ2V0SGFuZGxlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBwZW5kaW5nSW1hZ2VzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgY29uc3Qgb25GaW5pc2ggPSAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjYjtcblxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zY2hlZHVsZWQgJiYgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gZmluaXNoIGVkaXRpbmcgb25seSBvbiBzdWNjZXNzXG4gICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uRWRpdGluZ0RvbmUuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1BlbmRpbmdJbWFnZXMgPSB0aGlzLnN0YXRlLnBlbmRpbmdJbWFnZXMuZmlsdGVyKChpbWcpID0+IGltZy5rZXkgIT09IGFkZGVkSW1hZ2Uua2V5KTtcbiAgICAgICAgICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ0ltYWdlczogbmV3UGVuZGluZ0ltYWdlcyxcbiAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBpZiAobmV3UGVuZGluZ0ltYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdTdGF0ZS5zY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsIGNiKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAqIFRoZSBoYW5kbGVyIGlzIHRoZSBvYmplY3QgdGhyb3VnaCB3aGljaCB0aGUgb3V0ZXIgY29udGV4dFxuICAgICAgICAgICAgICAgKiBjb21tdW5pY2F0ZXMgZmlsZSB1cGxvYWQgZXZlbnRzIGxpa2U6IGZpbGVDaG9zZW4sIGNhbmNlbCwgcHJvZ3Jlc3NcbiAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBnZXRIYW5kbGVyKG9uRmluaXNoLCAoKSA9PiB0aGlzLnN0YXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgcHJvcHMuaW1hZ2VTdXBwb3J0LmFkZChoYW5kbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nSW1hZ2VzOiBbLi4ucGVuZGluZ0ltYWdlcywgYWRkZWRJbWFnZV0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgb25Gb2N1czogdGhpcy5vblBsdWdpbkZvY3VzLFxuICAgICAgICBvbkJsdXI6IHRoaXMub25QbHVnaW5CbHVyLFxuICAgICAgICBtYXhJbWFnZVdpZHRoOiBwcm9wcy5tYXhJbWFnZVdpZHRoLFxuICAgICAgICBtYXhJbWFnZUhlaWdodDogcHJvcHMubWF4SW1hZ2VIZWlnaHQsXG4gICAgICB9LFxuICAgICAgdG9vbGJhcjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogVG8gbWluaW1pemUgY29udmVydGluZyBodG1sIC0+IHN0YXRlIC0+IGh0bWxcbiAgICAgICAgICogV2Ugb25seSBlbWl0IG1hcmt1cCBvbmNlICdkb25lJyBpcyBjbGlja2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgZGlzYWJsZVNjcm9sbGJhcjogISFwcm9wcy5kaXNhYmxlU2Nyb2xsYmFyLFxuICAgICAgICBkaXNhYmxlVW5kZXJsaW5lOiBwcm9wcy5kaXNhYmxlVW5kZXJsaW5lLFxuICAgICAgICBhdXRvV2lkdGg6IHByb3BzLmF1dG9XaWR0aFRvb2xiYXIsXG4gICAgICAgIG9uRG9uZTogKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgbm9uRW1wdHkgfSA9IHByb3BzO1xuXG4gICAgICAgICAgbG9nKCdbb25Eb25lXScpO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0b29sYmFySW5Gb2N1czogZmFsc2UsIGZvY3VzZWROb2RlOiBudWxsLCBmb2N1c1Rvb2xiYXI6IGZhbHNlIH0pO1xuICAgICAgICAgIHRoaXMuZWRpdG9yLmJsdXIoKTtcblxuICAgICAgICAgIGlmIChub25FbXB0eSAmJiB0aGlzLnN0YXRlLnZhbHVlLnN0YXJ0VGV4dD8udGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VmFsdWUodHJ1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMub25FZGl0aW5nRG9uZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25FZGl0aW5nRG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YWJsZToge1xuICAgICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgbG9nKCdbdGFibGU6b25Gb2N1c10uLi4nKTtcbiAgICAgICAgICB0aGlzLm9uUGx1Z2luRm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgbG9nKCdbdGFibGU6b25CbHVyXS4uLicpO1xuICAgICAgICAgIHRoaXMub25QbHVnaW5CbHVyKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVzcG9uc2VBcmVhOiB7XG4gICAgICAgIHR5cGU6IG5vcm1hbGl6ZWRSZXNwb25zZUFyZWFQcm9wcy50eXBlLFxuICAgICAgICBvcHRpb25zOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMub3B0aW9ucyxcbiAgICAgICAgbWF4UmVzcG9uc2VBcmVhczogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLm1heFJlc3BvbnNlQXJlYXMsXG4gICAgICAgIHJlc3BBcmVhVG9vbGJhcjogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLnJlc3BBcmVhVG9vbGJhcixcbiAgICAgICAgb25IYW5kbGVBcmVhQ2hhbmdlOiBub3JtYWxpemVkUmVzcG9uc2VBcmVhUHJvcHMub25IYW5kbGVBcmVhQ2hhbmdlLFxuICAgICAgICBlcnJvcjogbm9ybWFsaXplZFJlc3BvbnNlQXJlYVByb3BzLmVycm9yLFxuICAgICAgICBvbkZvY3VzOiAoKSA9PiB7XG4gICAgICAgICAgbG9nKCdbdGFibGU6b25Gb2N1c10uLi4nKTtcbiAgICAgICAgICB0aGlzLm9uUGx1Z2luRm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgICAgbG9nKCdbdGFibGU6b25CbHVyXS4uLicpO1xuICAgICAgICAgIHRoaXMub25QbHVnaW5CbHVyKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgbGFuZ3VhZ2VDaGFyYWN0ZXJzOiBwcm9wcy5sYW5ndWFnZUNoYXJhY3RlcnNQcm9wcyxcbiAgICAgIGtleVBhZENoYXJhY3RlclJlZjogdGhpcy5rZXlQYWRDaGFyYWN0ZXJSZWYsXG4gICAgICBzZXRLZXlwYWRJbnRlcmFjdGlvbjogdGhpcy5zZXRLZXlwYWRJbnRlcmFjdGlvbixcbiAgICAgIG1lZGlhOiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLmZvY3VzLFxuICAgICAgICBjcmVhdGVDaGFuZ2U6ICgpID0+IHRoaXMuc3RhdGUudmFsdWUuY2hhbmdlKCksXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgICB1cGxvYWRTb3VuZFN1cHBvcnQ6IHByb3BzLnVwbG9hZFNvdW5kU3VwcG9ydCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMubWF0aE1sT3B0aW9ucy5tbWxPdXRwdXQgfHwgcHJvcHMubWF0aE1sT3B0aW9ucy5tbWxFZGl0aW5nKSB7XG4gICAgICB0aGlzLnByb3BzLnJ1blNlcmlhbGl6YXRpb25Pbk1hcmt1cCgpO1xuICAgIH1cbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAvLyBvblJlZiBpcyBuZWVkZWQgdG8gZ2V0IHRoZSByZWYgb2YgdGhlIGNvbXBvbmVudCBiZWNhdXNlIHdlIGV4cG9ydCBpdCB1c2luZyB3aXRoU3R5bGVzXG4gICAgdGhpcy5wcm9wcy5vblJlZih0aGlzKTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLm9uUmVzaXplKTtcblxuICAgIGNvbnN0IGlzUmVzcG9uc2VBcmVhRWRpdG9yID0gdGhpcy5wcm9wcy5jbGFzc05hbWU/LmluY2x1ZGVzKCdyZXNwb25zZS1hcmVhLWVkaXRvcicpO1xuXG4gICAgaWYgKGlzUmVzcG9uc2VBcmVhRWRpdG9yICYmIHRoaXMuZWRpdG9yKSB7XG4gICAgICBjb25zdCByZXNwb25zZUFyZWFFZGl0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1rZXk9XCIke3RoaXMuZWRpdG9yLnZhbHVlLmRvY3VtZW50LmtleX1cIl1gKTtcblxuICAgICAgaWYgKHJlc3BvbnNlQXJlYUVkaXRvcikge1xuICAgICAgICByZXNwb25zZUFyZWFFZGl0b3Iuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0Fuc3dlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLnByb3BzLmF1dG9Gb2N1cykge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgICAgIGNvbnN0IGVkaXRvckRPTSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7dGhpcy5lZGl0b3IudmFsdWUuZG9jdW1lbnQua2V5fVwiXWApO1xuXG4gICAgICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKTtcblxuICAgICAgICAgIGlmIChlZGl0b3JET00pIHtcbiAgICAgICAgICAgIGVkaXRvckRPTS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgY29uc3QgeyBpc0h0bWxNb2RlLCB0b29sYmFyT3B0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBuZXdUb29sYmFyT3B0cyA9IGNyZWF0ZVRvb2xiYXJPcHRzKG5leHRQcm9wcy50b29sYmFyT3B0cywgbmV4dFByb3BzLmVycm9yLCBpc0h0bWxNb2RlKTtcblxuICAgIGlmICghaXNFcXVhbChuZXdUb29sYmFyT3B0cywgdG9vbGJhck9wdHMpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdG9vbGJhck9wdHM6IG5ld1Rvb2xiYXJPcHRzLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlmZmVyZW50Q2hhcmFjdGVyUHJvcHMgPSAhaXNFcXVhbChuZXh0UHJvcHMubGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMsIHRoaXMucHJvcHMubGFuZ3VhZ2VDaGFyYWN0ZXJzUHJvcHMpO1xuICAgIGNvbnN0IGRpZmZlcmVudE1hdGhNbFByb3BzID0gIWlzRXF1YWwobmV4dFByb3BzLm1hdGhNbE9wdGlvbnMsIHRoaXMucHJvcHMubWF0aE1sT3B0aW9ucyk7XG4gICAgY29uc3QgZGlmZmVyZW50SW1hZ2VNYXhEaW1lbnNpb25zUHJvcHMgPVxuICAgICAgIWlzRXF1YWwobmV4dFByb3BzLm1heEltYWdlV2lkdGgsIHRoaXMucHJvcHMubWF4SW1hZ2VXaWR0aCkgfHxcbiAgICAgICFpc0VxdWFsKG5leHRQcm9wcy5tYXhJbWFnZUhlaWdodCwgdGhpcy5wcm9wcy5tYXhJbWFnZUhlaWdodCk7XG5cbiAgICBpZiAoZGlmZmVyZW50Q2hhcmFjdGVyUHJvcHMgfHwgZGlmZmVyZW50TWF0aE1sUHJvcHMgfHwgZGlmZmVyZW50SW1hZ2VNYXhEaW1lbnNpb25zUHJvcHMpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGx1Z2lucyhuZXh0UHJvcHMpO1xuICAgIH1cblxuICAgIGlmICghbmV4dFByb3BzLnZhbHVlPy5kb2N1bWVudD8uZXF1YWxzKHRoaXMucHJvcHMudmFsdWU/LmRvY3VtZW50KSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IG5leHRQcm9wcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgIC8vIFRoZSBjdXJzb3IgaXMgb24gYSB6ZXJvIHdpZHRoIGVsZW1lbnQgYW5kIHdoZW4gdGhhdCBpcyBwbGFjZWQgbmVhciB2b2lkIGVsZW1lbnRzLCBpdCBpcyBub3QgdmlzaWJsZVxuICAgIC8vIHNvIHdlIGluY3JlYXNlIHRoZSB3aWR0aCB0byBhdCBsZWFzdCAycHggaW4gb3JkZXIgZm9yIHRoZSB1c2VyIHRvIHNlZSBpdFxuXG4gICAgLy8gVHJpZ2dlciBwbHVnaW5zIGFuZCBmaW5pc2ggZWRpdGluZyBpZjpcbiAgICAvLyAxLiBUaGUgJ2lzSHRtbE1vZGUnIHN0YXRlIGhhcyBiZWVuIHRvZ2dsZWQuXG4gICAgLy8gMi4gV2UncmUgY3VycmVudGx5IGluICdpc0h0bWxNb2RlJyBhbmQgdGhlIGVkaXRvciB2YWx1ZSBoYXMgYmVlbiBtb2RpZmllZC5cbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlLmlzSHRtbE1vZGUgIT09IHByZXZTdGF0ZS5pc0h0bWxNb2RlIHx8XG4gICAgICAodGhpcy5zdGF0ZS5pc0h0bWxNb2RlICYmICFwcmV2U3RhdGUuaXNFZGl0ZWRJbkh0bWxNb2RlICYmIHRoaXMuc3RhdGUuaXNFZGl0ZWRJbkh0bWxNb2RlKVxuICAgICkge1xuICAgICAgdGhpcy5oYW5kbGVQbHVnaW5zKHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIGNvbnN0IHplcm9XaWR0aEVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXNsYXRlLXplcm8td2lkdGg9XCJ6XCJdJyk7XG5cbiAgICBBcnJheS5mcm9tKHplcm9XaWR0aEVscykuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgIGVsLnN0eWxlLm1pbldpZHRoID0gJzJweCc7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG4gICAgfSk7XG4gIH1cblxuICBvblBsdWdpbkJsdXIgPSAoZSkgPT4ge1xuICAgIGxvZygnW29uUGx1Z2luQmx1cl0nLCBlICYmIGUucmVsYXRlZFRhcmdldCk7XG4gICAgY29uc3QgdGFyZ2V0ID0gZSAmJiBlLnJlbGF0ZWRUYXJnZXQ7XG5cbiAgICBjb25zdCBub2RlID0gdGFyZ2V0ID8gZmluZE5vZGUodGFyZ2V0LCB0aGlzLnN0YXRlLnZhbHVlKSA6IG51bGw7XG4gICAgbG9nKCdbb25QbHVnaW5CbHVyXSBub2RlOiAnLCBub2RlKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgZm9jdXNlZE5vZGU6IG5vZGUgfSwgKCkgPT4ge1xuICAgICAgdGhpcy5yZXNldFZhbHVlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgb25QbHVnaW5Gb2N1cyA9IChlKSA9PiB7XG4gICAgbG9nKCdbb25QbHVnaW5Gb2N1c10nLCBlICYmIGUudGFyZ2V0KTtcbiAgICBjb25zdCB0YXJnZXQgPSBlICYmIGUudGFyZ2V0O1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBmaW5kTm9kZSh0YXJnZXQsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgICAgbG9nKCdbb25QbHVnaW5Gb2N1c10gbm9kZTogJywgbm9kZSk7XG5cbiAgICAgIGNvbnN0IHN0YXNoZWRWYWx1ZSA9IHRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlIHx8IHRoaXMuc3RhdGUudmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZm9jdXNlZE5vZGU6IG5vZGUsIHN0YXNoZWRWYWx1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZvY3VzZWROb2RlOiBudWxsIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXNoVmFsdWUoKTtcbiAgfTtcblxuICBvbk1hdGhDbGljayA9IChub2RlKSA9PiB7XG4gICAgdGhpcy5lZGl0b3IuY2hhbmdlKChjKSA9PiBjLmNvbGxhcHNlVG9TdGFydE9mKG5vZGUpKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgc2VsZWN0ZWROb2RlOiBub2RlIH0pO1xuICB9O1xuXG4gIG9uRWRpdGluZ0RvbmUgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBpc0h0bWxNb2RlLCBkaWFsb2csIHZhbHVlLCBwZW5kaW5nSW1hZ2VzIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgLy8gSGFuZGxpbmcgSFRNTCBtb2RlIGFuZCBkaWFsb2cgc3RhdGVcbiAgICBpZiAoaXNIdG1sTW9kZSkge1xuICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIEhUTUwgbW9kZSBpcyBlbmFibGVkXG4gICAgICBpZiAoZGlhbG9nPy5vcGVuKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGh0bWxUb1ZhbHVlKHZhbHVlLmRvY3VtZW50LnRleHQpO1xuICAgICAgY29uc3QgcHJldmlld1RleHQgPSB0aGlzLnJlbmRlckh0bWxQcmV2aWV3Q29udGVudCgpO1xuXG4gICAgICB0aGlzLm9wZW5IdG1sTW9kZUNvbmZpcm1hdGlvbkRpYWxvZyhjdXJyZW50VmFsdWUsIHByZXZpZXdUZXh0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocGVuZGluZ0ltYWdlcy5sZW5ndGgpIHtcbiAgICAgIC8vIHNjaGVkdWxlIGltYWdlIHByb2Nlc3NpbmdcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzY2hlZHVsZWQ6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRmluYWxpemluZyBlZGl0aW5nXG4gICAgbG9nKCdbb25FZGl0aW5nRG9uZV0nKTtcbiAgICB0aGlzLnNldFN0YXRlKHsgcGVuZGluZ0ltYWdlczogW10sIHN0YXNoZWRWYWx1ZTogbnVsbCwgZm9jdXNlZE5vZGU6IG51bGwgfSk7XG4gICAgbG9nKCdbb25FZGl0aW5nRG9uZV0gdmFsdWU6ICcsIHRoaXMuc3RhdGUudmFsdWUpO1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2UodGhpcy5zdGF0ZS52YWx1ZSwgdHJ1ZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIEhUTUwgcHJldmlldyBjb250ZW50IHRvIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlIGRpYWxvZy5cbiAgICogVGhpcyBjb250ZW50IGluY2x1ZGVzIHRoZSBlZGl0ZWQgSFRNTCBhbmQgYSBwcm9tcHQgZm9yIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVuZGVySHRtbFByZXZpZXdDb250ZW50ID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xhc3NlcyB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiByZWY9eyhyZWYpID0+ICh0aGlzLmVsZW1lbnRSZWYgPSByZWYpfT5cbiAgICAgICAgPGRpdj5QcmV2aWV3IG9mIEVkaXRlZCBIdG1sOjwvZGl2PlxuICAgICAgICA8UHJldmlld1Byb21wdCBkZWZhdWx0Q2xhc3NOYW1lPXtjbGFzc2VzLnByZXZpZXdUZXh0fSBwcm9tcHQ9e3RoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQudGV4dH0gLz5cbiAgICAgICAgPGRpdj5Xb3VsZCB5b3UgbGlrZSB0byBzYXZlIHRoZXNlIGNoYW5nZXMgPzwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcblxuICAvKipcbiAgICogT3BlbnMgYSBjb25maXJtYXRpb24gZGlhbG9nIGluIEhUTUwgbW9kZSwgZGlzcGxheWluZyB0aGUgcHJldmlldyBvZiB0aGUgY3VycmVudCBIVE1MIGNvbnRlbnRcbiAgICogYW5kIG9mZmVyaW5nIG9wdGlvbnMgdG8gc2F2ZSBvciBjb250aW51ZSBlZGl0aW5nLlxuICAgKi9cbiAgb3Blbkh0bWxNb2RlQ29uZmlybWF0aW9uRGlhbG9nID0gKGN1cnJlbnRWYWx1ZSwgcHJldmlld1RleHQpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRpYWxvZzoge1xuICAgICAgICBvcGVuOiB0cnVlLFxuICAgICAgICB0aXRsZTogJ0NvbnRlbnQgUHJldmlldyAmIFNhdmUnLFxuICAgICAgICB0ZXh0OiBwcmV2aWV3VGV4dCxcbiAgICAgICAgb25Db25maXJtVGV4dDogJ1NhdmUgY2hhbmdlcycsXG4gICAgICAgIG9uQ2xvc2VUZXh0OiAnQ29udGludWUgZWRpdGluZycsXG4gICAgICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlSHRtbE1vZGVTYXZlQ29uZmlybWF0aW9uKGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ2xvc2U6IHRoaXMuaHRtbE1vZGVDb250aW51ZUVkaXRpbmcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSBzYXZlIGNvbmZpcm1hdGlvbiBhY3Rpb24gaW4gSFRNTCBtb2RlLiBUaGlzIHVwZGF0ZXMgdGhlIHZhbHVlIHRvIHRoZSBjb25maXJtZWRcbiAgICogY29udGVudCwgdXBkYXRlcyB2YWx1ZSBvbiBwcm9wcywgYW5kIGV4aXRzIHRoZSBIVE1MIG1vZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50VmFsdWUgLSBUaGUgY29uZmlybWVkIHZhbHVlIG9mIHRoZSBIVE1MIGNvbnRlbnQgdG8gc2F2ZS5cbiAgICovXG4gIGhhbmRsZUh0bWxNb2RlU2F2ZUNvbmZpcm1hdGlvbiA9IChjdXJyZW50VmFsdWUpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGN1cnJlbnRWYWx1ZSB9KTtcbiAgICB0aGlzLnByb3BzLm9uQ2hhbmdlKGN1cnJlbnRWYWx1ZSwgdHJ1ZSk7XG4gICAgdGhpcy5oYW5kbGVEaWFsb2coZmFsc2UpO1xuICAgIHRoaXMudG9nZ2xlSHRtbE1vZGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBkaWFsb2cgaW4gSFRNTCBtb2RlIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gY29udGludWUgZWRpdGluZyB0aGUgaHRtbCBjb250ZW50LlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2hlbiB0aGUgdXNlciBvcHRzIHRvIG5vdCBzYXZlIHRoZSBjdXJyZW50IGNoYW5nZXMuXG4gICAqL1xuICBodG1sTW9kZUNvbnRpbnVlRWRpdGluZyA9ICgpID0+IHtcbiAgICB0aGlzLmhhbmRsZURpYWxvZyhmYWxzZSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBvblJlc2l6ZSBldmVudCBsaXN0ZW5lclxuICAgKi9cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMub25SZXNpemUpO1xuICB9XG5cbiAgLy8gQWxsb3dpbmcgdGltZSBmb3Igb25DaGFuZ2UgdG8gdGFrZSBlZmZlY3QgaWYgaXQgaXMgY2FsbGVkXG4gIGhhbmRsZUJsdXIgPSAocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHsgbm9uRW1wdHkgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgdG9vbGJhck9wdHM6IHsgZG9uZU9uIH0sXG4gICAgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgdG9vbGJhckluRm9jdXM6IGZhbHNlLCBmb2N1c2VkTm9kZTogbnVsbCB9KTtcblxuICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgdGhpcy5lZGl0b3IuYmx1cigpO1xuICAgIH1cblxuICAgIGlmIChkb25lT24gPT09ICdibHVyJykge1xuICAgICAgaWYgKG5vbkVtcHR5ICYmIHRoaXMuc3RhdGUudmFsdWUuc3RhcnRUZXh0Py50ZXh0Py5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbHVlKHRydWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMub25FZGl0aW5nRG9uZSgpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uRWRpdGluZ0RvbmUoKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBvbkJsdXIgPSAoZXZlbnQpID0+IHtcbiAgICBsb2coJ1tvbkJsdXJdJyk7XG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgY29uc3QgdG9vbGJhckVsZW1lbnQgPSB0aGlzLnRvb2xiYXJSZWYgJiYgcmVsYXRlZFRhcmdldD8uY2xvc2VzdChgW2NsYXNzKj1cIiR7dGhpcy50b29sYmFyUmVmLmNsYXNzTmFtZX1cIl1gKTtcblxuICAgIC8vIENoZWNrIGlmIHJlbGF0ZWRUYXJnZXQgaXMgYSBkb25lIGJ1dHRvblxuICAgIGNvbnN0IGlzUmF3RG9uZUJ1dHRvbiA9XG4gICAgICB0aGlzLmRvbmVCdXR0b25SZWYgJiYgcmVsYXRlZFRhcmdldD8uY2xvc2VzdChgW2NsYXNzKj1cIiR7dGhpcy5kb25lQnV0dG9uUmVmLmN1cnJlbnQ/LmNsYXNzTmFtZX1cIl1gKTtcblxuICAgIC8vIFNraXAgb25CbHVyIGhhbmRsaW5nIGlmIHJlbGF0ZWRUYXJnZXQgaXMgYSBidXR0b24gZnJvbSB0aGUgS2V5UGFkIGNoYXJhY3RlcnNcbiAgICB0aGlzLnNraXBCbHVySGFuZGxpbmcgPSB0aGlzLmtleXBhZEludGVyYWN0aW9uRGV0ZWN0ZWQgJiYgcmVsYXRlZFRhcmdldCAhPT0gbnVsbDtcblxuICAgIGlmICh0b29sYmFyRWxlbWVudCAmJiAhaXNSYXdEb25lQnV0dG9uICYmICF0aGlzLnN0YXRlLmZvY3VzVG9vbGJhcikge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGZvY3VzVG9vbGJhcjogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSByZWxhdGVkVGFyZ2V0ID8gZmluZE5vZGUocmVsYXRlZFRhcmdldCwgdGhpcy5zdGF0ZS52YWx1ZSkgOiBudWxsO1xuXG4gICAgbG9nKCdbb25CbHVyXSBub2RlOiAnLCBub2RlKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNraXBCbHVySGFuZGxpbmcpIHtcbiAgICAgICAgdGhpcy5zZXRLZXlwYWRJbnRlcmFjdGlvbihmYWxzZSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgeyBwcmVCbHVyVmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsIGZvY3VzZWROb2RlOiAhbm9kZSA/IG51bGwgOiBub2RlIH0sXG4gICAgICAgICAgdGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcywgcmVzb2x2ZSksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVEb21CbHVyID0gKGUpID0+IHtcbiAgICBjb25zdCBlZGl0b3JET00gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1rZXk9XCIke3RoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQua2V5fVwiXWApO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB7IHZhbHVlOiBzdGF0ZVZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoIXRoaXMud3JhcHBlclJlZikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSAhZWRpdG9yRE9NIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xvc2VzdChgW2NsYXNzKj1cIiR7ZWRpdG9yRE9NLmNsYXNzTmFtZX1cIl1gKTtcbiAgICAgIGNvbnN0IHRvb2xiYXJFbGVtZW50ID1cbiAgICAgICAgIXRoaXMudG9vbGJhclJlZiB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmNsb3Nlc3QoYFtjbGFzcyo9XCIke3RoaXMudG9vbGJhclJlZi5jbGFzc05hbWV9XCJdYCk7XG4gICAgICBjb25zdCBpc0luQ3VycmVudENvbXBvbmVudCA9IHRoaXMud3JhcHBlclJlZi5jb250YWlucyhlZGl0b3JFbGVtZW50KSB8fCB0aGlzLndyYXBwZXJSZWYuY29udGFpbnModG9vbGJhckVsZW1lbnQpO1xuXG4gICAgICBpZiAoIWlzSW5DdXJyZW50Q29tcG9uZW50KSB7XG4gICAgICAgIGVkaXRvckRPTS5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5oYW5kbGVEb21CbHVyKTtcblxuICAgICAgICBpZiAoc3RhdGVWYWx1ZS5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICB0aGlzLm9uQmx1cihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDUwKTtcbiAgfTtcblxuICAvKlxuICAgKiBOZWVkcyB0byBiZSB3cmFwcGVkIG90aGVyd2lzZSBpdCBjYXVzZXMgaXNzdWVzIGJlY2F1c2Ugb2YgcmFjZSBjb25kaXRpb25zXG4gICAqIEtub3duIGlzc3VlIGZvciBzbGF0ZWpzLiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9pYW5zdG9ybXRheWxvci9zbGF0ZS9pc3N1ZXMvMjA5N1xuICAgKiBVc2luZyB0aW1lb3V0IEkgd2Fzbid0IGFibGUgdG8gdGVzdCB0aGlzXG4gICAqXG4gICAqIE5vdGU6IFRoZSB1c2Ugb2YgcHJvbWlzZXMgaGFzIGJlZW4gY2F1c2luZyBpc3N1ZXMgd2l0aCBNYXRoUXVpbGxcbiAgICogKi9cbiAgb25Gb2N1cyA9IChldmVudCwgY2hhbmdlKSA9PlxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBjb25zdCBlZGl0b3JET00gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1rZXk9XCIke3RoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQua2V5fVwiXWApO1xuICAgICAgY29uc3QgaXNUb3VjaERldmljZSA9XG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmICgnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yPy5tYXhUb3VjaFBvaW50cyA+IDApO1xuXG4gICAgICBsb2coJ1tvbkZvY3VzXScsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuXG4gICAgICBpZiAodGhpcy5rZXlwYWRJbnRlcmFjdGlvbkRldGVjdGVkICYmIHRoaXMuX19URU1QT1JBUllfQ0hBTkdFX0RBVEEpIHtcbiAgICAgICAgdGhpcy5fX1RFTVBPUkFSWV9DSEFOR0VfREFUQSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyBhIHRlbXBvcmFyeSBoYWNrIC0gQHNlZSBjaGFuZ2VEYXRhIGJlbG93IGZvciBzb21lIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICAgKi9cbiAgICAgIGlmICh0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBKSB7XG4gICAgICAgIGNvbnN0IHsga2V5LCBkYXRhIH0gPSB0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBO1xuICAgICAgICBjb25zdCBkb21FbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWtleT1cIiR7a2V5fVwiXWApO1xuXG4gICAgICAgIGlmIChkb21FbCkge1xuICAgICAgICAgIGxldCBjaGFuZ2UgPSB0aGlzLnN0YXRlLnZhbHVlLmNoYW5nZSgpLnNldE5vZGVCeUtleShrZXksIHsgZGF0YSB9KTtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IGNoYW5nZS52YWx1ZSB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9fVEVNUE9SQVJZX0NIQU5HRV9EQVRBID0gbnVsbDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKipcbiAgICAgICAqIFRoaXMgaXMgbmVlZGVkIGp1c3QgaW4gY2FzZSB0aGUgYnJvd3NlciBkZWNpZGVzIHRvIG1ha2UgdGhlIGVkaXRvclxuICAgICAgICogbG9zZSBmb2N1cyB3aXRob3V0IHRyaWdnZXJpbmcgdGhlIG9uQmx1ciBldmVudCAoY2FuIGhhcHBlbiBpbiBhIGZldyBjYXNlcykuXG4gICAgICAgKiBUaGlzIHdpbGwgYWxzbyB0cmlnZ2VyIG9uQmx1ciBpZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgcGFnZSB3aGVuIHRoZSBlZGl0b3JcbiAgICAgICAqIGlzIGZvY3VzZWQuXG4gICAgICAgKi9cbiAgICAgIGlmIChlZGl0b3JET00gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgZWRpdG9yRE9NLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLmhhbmRsZURvbUJsdXIpO1xuICAgICAgICBlZGl0b3JET00uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMuaGFuZGxlRG9tQmx1cik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3Rhc2hWYWx1ZSgpO1xuICAgICAgdGhpcy5wcm9wcy5vbkZvY3VzKCk7XG5cbiAgICAgIC8vIEFkZGVkIGZvciBhY2Nlc3NpYmlsaXR5OiBFbnN1cmVzIHRoZSBlZGl0b3IgZ2FpbnMgZm9jdXMgd2hlbiB0YWJiZWQgdG8gZm9yIGltcHJvdmVkIGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgIGNvbnN0IHNob3VsZEZvY3VzRWRpdG9yID0gIXRoaXMua2V5cGFkSW50ZXJhY3Rpb25EZXRlY3RlZCAmJiAhaXNUb3VjaERldmljZTtcblxuICAgICAgaWYgKHNob3VsZEZvY3VzRWRpdG9yKSB7XG4gICAgICAgIGNoYW5nZT8uZm9jdXMoKTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuXG4gIHN0YXNoVmFsdWUgPSAoKSA9PiB7XG4gICAgbG9nKCdbc3Rhc2hWYWx1ZV0nKTtcblxuICAgIGlmICghdGhpcy5zdGF0ZS5zdGFzaGVkVmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBzdGFzaGVkVmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgdmFsdWUgaWYgdGhlIHVzZXIgZGlkbid0IGNsaWNrIGRvbmUuXG4gICAqL1xuICByZXNldFZhbHVlID0gKGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyB2YWx1ZSwgZm9jdXNlZE5vZGUgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBjb25zdCBzdG9wUmVzZXQgPSB0aGlzLnBsdWdpbnMucmVkdWNlKChzLCBwKSA9PiB7XG4gICAgICByZXR1cm4gcyB8fCAocC5zdG9wUmVzZXQgJiYgcC5zdG9wUmVzZXQodGhpcy5zdGF0ZS52YWx1ZSkpO1xuICAgIH0sIGZhbHNlKTtcblxuICAgIGxvZygnW3Jlc2V0VmFsdWVdJywgdmFsdWUuaXNGb2N1c2VkLCBmb2N1c2VkTm9kZSwgJ3N0b3BSZXNldDogJywgc3RvcFJlc2V0KTtcbiAgICBpZiAoKHRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlICYmICF2YWx1ZS5pc0ZvY3VzZWQgJiYgIWZvY3VzZWROb2RlICYmICFzdG9wUmVzZXQpIHx8IGZvcmNlKSB7XG4gICAgICBsb2coJ1tyZXNldFZhbHVlXSByZXNldHRpbmcuLi4nKTtcbiAgICAgIGxvZygnc3Rhc2hlZCcsIHRoaXMuc3RhdGUuc3Rhc2hlZFZhbHVlLmRvY3VtZW50LnRvT2JqZWN0KCkpO1xuICAgICAgbG9nKCdjdXJyZW50JywgdGhpcy5zdGF0ZS52YWx1ZS5kb2N1bWVudC50b09iamVjdCgpKTtcblxuICAgICAgY29uc3QgbmV3VmFsdWUgPSBWYWx1ZS5mcm9tSlNPTih0aGlzLnN0YXRlLnN0YXNoZWRWYWx1ZS50b0pTT04oKSk7XG5cbiAgICAgIGxvZygnbmV3VmFsdWU6ICcsIG5ld1ZhbHVlLmRvY3VtZW50KTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IG5ld1ZhbHVlLCBzdGFzaGVkVmFsdWU6IG51bGwgfSwgKCkgPT4ge1xuICAgICAgICAgICAgbG9nKCd2YWx1ZSBub3c6ICcsIHRoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQudG9KU09OKCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQ2hhbmdlID0gKGNoYW5nZSwgZG9uZSkgPT4ge1xuICAgIGxvZygnW29uQ2hhbmdlXScpO1xuICAgIHdpbmRvdy5tZSA9IHRoaXM7XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBjaGFuZ2U7XG4gICAgY29uc3QgeyBjaGFyYWN0ZXJzTGltaXQgfSA9IHRoaXMucHJvcHM7XG4gICAgbGV0IGxpbWl0ID0gY2hhcmFjdGVyc0xpbWl0O1xuICAgIGlmICghbGltaXQgfHwgbGltaXQgPiBNQVhfQ0hBUkFDVEVSU19MSU1JVCkge1xuICAgICAgbGltaXQgPSBNQVhfQ0hBUkFDVEVSU19MSU1JVDtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgJiYgdmFsdWUuZG9jdW1lbnQgJiYgdmFsdWUuZG9jdW1lbnQudGV4dCAmJiB2YWx1ZS5kb2N1bWVudC50ZXh0Lmxlbmd0aCA+IGxpbWl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTWFyayB0aGUgZWRpdG9yIGFzIGVkaXRlZCB3aGVuIGluIEhUTUwgbW9kZSBhbmQgaXRzIGNvbnRlbnQgaGFzIGNoYW5nZWQuXG4gICAgLy8gVGhpcyBzdGF0dXMgd2lsbCBsYXRlciBiZSB1c2VkIHRvIGRlY2lkZSB3aGV0aGVyIHRvIHByb21wdCBhIHdhcm5pbmcgdG8gdGhlIHVzZXIgd2hlbiBleGl0aW5nIEhUTUwgbW9kZS5cbiAgICBjb25zdCBpc0VkaXRlZEluSHRtbE1vZGUgPSAhdGhpcy5zdGF0ZS5pc0h0bWxNb2RlXG4gICAgICA/IGZhbHNlXG4gICAgICA6IHRoaXMuc3RhdGUudmFsdWUuZG9jdW1lbnQudGV4dCAhPT0gdmFsdWUuZG9jdW1lbnQudGV4dFxuICAgICAgPyB0cnVlXG4gICAgICA6IHRoaXMuc3RhdGUuaXNFZGl0ZWRJbkh0bWxNb2RlO1xuXG4gICAgaWYgKGlzRWRpdGVkSW5IdG1sTW9kZSAhPSB0aGlzLnN0YXRlLmlzRWRpdGVkSW5IdG1sTW9kZSkge1xuICAgICAgdGhpcy5oYW5kbGVQbHVnaW5zKHRoaXMucHJvcHMpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZSwgaXNFZGl0ZWRJbkh0bWxNb2RlIH0sICgpID0+IHtcbiAgICAgIGxvZygnW29uQ2hhbmdlXSwgY2FsbCBkb25lKCknKTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGdldEZvY3VzZWRWYWx1ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWx1ZS5pc0ZvY3VzZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YXRlLnByZUJsdXJWYWx1ZTtcbiAgfTtcblxuICB2YWx1ZVRvU2l6ZSA9ICh2KSA9PiB7XG4gICAgaWYgKCF2KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNhbGNSZWdleCA9IC9eY2FsY1xcKCguKilcXCkkLztcblxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh2LmVuZHNXaXRoKCclJykpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHYuZW5kc1dpdGgoJ3B4JykgfHxcbiAgICAgICAgdi5lbmRzV2l0aCgndmgnKSB8fFxuICAgICAgICB2LmVuZHNXaXRoKCd2dycpIHx8XG4gICAgICAgIHYuZW5kc1dpdGgoJ2NoJykgfHxcbiAgICAgICAgdi5lbmRzV2l0aCgnZW0nKSB8fFxuICAgICAgICB2Lm1hdGNoKGNhbGNSZWdleClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodiwgMTApO1xuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpID8gdmFsdWUgOiBgJHt2YWx1ZX1weGA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBgJHt2fXB4YDtcbiAgICB9XG4gIH07XG5cbiAgYnVpbGRTaXplU3R5bGUoKSB7XG4gICAgY29uc3QgeyBtaW5XaWR0aCwgd2lkdGgsIG1heFdpZHRoLCBtaW5IZWlnaHQsIGhlaWdodCwgbWF4SGVpZ2h0IH0gPSB0aGlzLnByb3BzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiB0aGlzLnZhbHVlVG9TaXplKHdpZHRoKSxcbiAgICAgIG1pbldpZHRoOiB0aGlzLnZhbHVlVG9TaXplKG1pbldpZHRoKSxcbiAgICAgIG1heFdpZHRoOiB0aGlzLnZhbHVlVG9TaXplKG1heFdpZHRoKSxcbiAgICAgIGhlaWdodDogdGhpcy52YWx1ZVRvU2l6ZShoZWlnaHQpLFxuICAgICAgbWluSGVpZ2h0OiB0aGlzLnZhbHVlVG9TaXplKG1pbkhlaWdodCksXG4gICAgICBtYXhIZWlnaHQ6IHRoaXMudmFsdWVUb1NpemUobWF4SGVpZ2h0KSxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVOb2RlID0gKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZS5vYmplY3QgIT09ICdibG9jaycpIHJldHVybjtcblxuICAgIGNvbnN0IGxhc3QgPSBub2RlLm5vZGVzLmxhc3QoKTtcbiAgICBpZiAoIWxhc3QpIHJldHVybjtcblxuICAgIGlmIChsYXN0LnR5cGUgIT09ICdpbWFnZScpIHJldHVybjtcblxuICAgIGxvZygnW3ZhbGlkYXRlTm9kZV0gbGFzdCBpcyBpbWFnZS4uJyk7XG5cbiAgICBjb25zdCBwYXJlbnQgPSBsYXN0LmdldFBhcmVudChsYXN0LmtleSk7XG4gICAgY29uc3QgcCA9IEJsb2NrLmdldFBhcmVudChsYXN0LmtleSk7XG4gICAgbG9nKCdbdmFsaWRhdGVOb2RlXSBwYXJlbnQ6JywgcGFyZW50LCBwKTtcblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgY2hhbmdlRGF0YSA9IChrZXksIGRhdGEpID0+IHtcbiAgICBsb2coJ1tjaGFuZ2VEYXRhXS4gLi4gJywga2V5LCBkYXRhKTtcblxuICAgIC8qKlxuICAgICAqIEhBQ0sgQUxFUlQ6IFdlIHNob3VsZCBiZSBjYWxsaW5nIHNldFN0YXRlIGhlcmUgYW5kIHN0b3JpbmcgdGhlIGNoYW5nZSBkYXRhOlxuICAgICAqXG4gICAgICogPGNvZGU+dGhpcy5zZXRTdGF0ZSh7Y2hhbmdlRGF0YTogeyBrZXksIGRhdGF9fSk8L2NvZGU+XG4gICAgICogSG93ZXZlciB0aGlzIGlzIGNhdXNpbmcgaXNzdWVzIHdpdGggdGhlIE1hdGhxdWlsbCBpbnN0YW5jZS4gVGhlICdpbnB1dCcgZXZlbnQgc3RvcHMgZmlyaW5nIG9uIHRoZSBlbGVtZW50IGFuZCBub1xuICAgICAqIG1vcmUgY2hhbmdlcyBnZXQgdGhyb3VnaC4gVGhlIGlzc3VlcyBzZWVtIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIHByb21pc2VzIGluIG9uQmx1ci9vbkZvY3VzLiBCdXQgcmVtb3ZpbmcgdGhlc2VcbiAgICAgKiBicmluZ3MgaXQncyBvd24gcHJvYmxlbXMuIEEgbWFqb3IgY2xlYW4gdXAgaXMgcGxhbm5lZCBmb3IgdGhpcyBjb21wb25lbnQgc28gSSd2ZSBkZWNpZGVkIHRvIHRlbXBvcmFyaWx5IHNldHRsZVxuICAgICAqIG9uIHRoaXMgaGFjayByYXRoZXIgdGhhbiBzcGVuZCBtb3JlIHRpbWUgb24gdGhpcy5cbiAgICAgKi9cblxuICAgIC8vIFVuY29tbWVudCB0aGlzIGxpbmUgdG8gc2VlIHRoZSBidWcgZGVzY3JpYmVkIGFib3ZlLlxuICAgIC8vICAgIHRoaXMuc2V0U3RhdGUoe2NoYW5nZURhdGE6IHtrZXksIGRhdGF9fSlcblxuICAgIHRoaXMuX19URU1QT1JBUllfQ0hBTkdFX0RBVEEgPSB7IGtleSwgZGF0YSB9O1xuICB9O1xuXG4gIGZvY3VzID0gKHBvcywgbm9kZSkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9uID0gcG9zIHx8ICdlbmQnO1xuXG4gICAgdGhpcy5wcm9wcy5mb2N1cyhwb3NpdGlvbiwgbm9kZSk7XG4gIH07XG5cbiAgb25Ecm9wUGFzdGUgPSBhc3luYyAoZXZlbnQsIGNoYW5nZSwgZHJvcENvbnRleHQpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjaGFuZ2UuZWRpdG9yO1xuICAgIGNvbnN0IHRyYW5zZmVyID0gZ2V0RXZlbnRUcmFuc2ZlcihldmVudCk7XG4gICAgY29uc3QgZmlsZSA9IHRyYW5zZmVyLmZpbGVzICYmIHRyYW5zZmVyLmZpbGVzWzBdO1xuXG4gICAgY29uc3QgdHlwZSA9IHRyYW5zZmVyLnR5cGU7XG4gICAgY29uc3QgZnJhZ21lbnQgPSB0cmFuc2Zlci5mcmFnbWVudDtcbiAgICBjb25zdCB0ZXh0ID0gdHJhbnNmZXIudGV4dDtcblxuICAgIGlmIChmaWxlICYmIChmaWxlLnR5cGUgPT09ICdpbWFnZS9qcGVnJyB8fCBmaWxlLnR5cGUgPT09ICdpbWFnZS9qcGcnIHx8IGZpbGUudHlwZSA9PT0gJ2ltYWdlL3BuZycpKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuaW1hZ2VTdXBwb3J0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZygnW29uRHJvcFBhc3RlXScpO1xuICAgICAgICBjb25zdCBzcmMgPSBhd2FpdCBnZXRCYXNlNjQoZmlsZSk7XG4gICAgICAgIGNvbnN0IGlubGluZSA9IElubGluZS5jcmVhdGUoe1xuICAgICAgICAgIHR5cGU6ICdpbWFnZScsXG4gICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgc3JjLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChkcm9wQ29udGV4dCkge1xuICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByYW5nZSA9IGdldEV2ZW50UmFuZ2UoZXZlbnQsIGVkaXRvcik7XG4gICAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgICBjaGFuZ2Uuc2VsZWN0KHJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaCA9IGNoYW5nZS5pbnNlcnRJbmxpbmUoaW5saW5lKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShjaCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKFxuICAgICAgICAgIGlubGluZSxcbiAgICAgICAgICAoKSA9PiB7fSxcbiAgICAgICAgICAoKSA9PiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgICAgIHRoaXMub25DaGFuZ2UsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgICAgaGFuZGxlci5maWxlQ2hvc2VuKGZpbGUpO1xuICAgICAgICB0aGlzLnByb3BzLmltYWdlU3VwcG9ydC5hZGQoaGFuZGxlcik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nKCdbb25Ecm9wUGFzdGVdIGVycm9yOiAnLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2ZyYWdtZW50Jykge1xuICAgICAgY2hhbmdlLmluc2VydEZyYWdtZW50KGZyYWdtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd0ZXh0JyB8fCB0eXBlID09PSAnaHRtbCcpIHtcbiAgICAgIGlmICghdGV4dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiB7IGRvY3VtZW50LCBzZWxlY3Rpb24sIHN0YXJ0QmxvY2sgfSxcbiAgICAgIH0gPSBjaGFuZ2U7XG5cbiAgICAgIGlmIChzdGFydEJsb2NrLmlzVm9pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRCbG9jayA9IHN0YXJ0QmxvY2s7XG4gICAgICBjb25zdCBkZWZhdWx0TWFya3MgPSBkb2N1bWVudC5nZXRJbnNlcnRNYXJrc0F0UmFuZ2Uoc2VsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGZyYWcgPSBQbGFpbi5kZXNlcmlhbGl6ZSh0ZXh0LCB7XG4gICAgICAgIGRlZmF1bHRCbG9jayxcbiAgICAgICAgZGVmYXVsdE1hcmtzLFxuICAgICAgfSkuZG9jdW1lbnQ7XG4gICAgICBjaGFuZ2UuaW5zZXJ0RnJhZ21lbnQoZnJhZyk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlclBsYWNlaG9sZGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBlZGl0b3IgfSA9IHByb3BzO1xuICAgIGNvbnN0IHsgZG9jdW1lbnQgfSA9IGVkaXRvci52YWx1ZTtcblxuICAgIGlmICghZWRpdG9yLnByb3BzLnBsYWNlaG9sZGVyIHx8IGRvY3VtZW50LnRleHQgIT09ICcnIHx8IGRvY3VtZW50Lm5vZGVzLnNpemUgIT09IDEgfHwgIWRvY3VtZW50LmlzRW1wdHkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY29udGVudEVkaXRhYmxlPXtmYWxzZX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJyxcbiAgICAgICAgICB3aWR0aDogJ2ZpdC1jb250ZW50JywgLy8gZm9yIGNlbnRlcmluZyB0aGUgcGxhY2Vob2xkZXIgaWYgdGV4dC1hbGlnbiBpcyBzZXQgdG8gY2VudGVyXG4gICAgICAgICAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm93cmFwJyxcbiAgICAgICAgICBvcGFjaXR5OiAnMC4zMycsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2VkaXRvci5wcm9wcy5wbGFjZWhvbGRlcn1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBkaXNhYmxlZCxcbiAgICAgIHNwZWxsQ2hlY2ssXG4gICAgICBoaWdobGlnaHRTaGFwZSxcbiAgICAgIGNsYXNzZXMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBpc0VkaXRvcixcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcGx1Z2luUHJvcHMsXG4gICAgICBvbktleURvd24sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZW5kIGN1c3RvbVBsdWdpbnMgdG8gc2xhdGUuXG4gICAgLy8gTm90IHN1cmUgaWYgdGhleSB3b3VsZCBkbyBhbnkgaGFybSwgYnV0IEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gbm90IHNlbmQgdGhlbS5cbiAgICAvLyBXZSB1c2UgY3VzdG9tIHBsdWdpbnMgdG8gYmUgYWJsZSB0byBhZGQgY3VzdG9tIGJ1dHRvbnNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7IGN1c3RvbVBsdWdpbnMsIHNob3dQYXJhZ3JhcGhzLCBzZXBhcmF0ZVBhcmFncmFwaHMsIC4uLm90aGVyUGx1Z2luUHJvcHMgfSA9IHBsdWdpblByb3BzIHx8IHt9O1xuXG4gICAgY29uc3QgeyB2YWx1ZSwgZm9jdXNlZE5vZGUsIHRvb2xiYXJPcHRzLCBkaWFsb2csIHNjaGVkdWxlZCB9ID0gdGhpcy5zdGF0ZTtcblxuICAgIGxvZygnW3JlbmRlcl0gdmFsdWU6ICcsIHZhbHVlKTtcbiAgICBjb25zdCBzaXplU3R5bGUgPSB0aGlzLmJ1aWxkU2l6ZVN0eWxlKCk7XG4gICAgY29uc3QgbmFtZXMgPSBjbGFzc05hbWVzKFxuICAgICAge1xuICAgICAgICBbY2xhc3Nlcy53aXRoQmddOiBoaWdobGlnaHRTaGFwZSxcbiAgICAgICAgW2NsYXNzZXMudG9vbGJhck9uVG9wXTogdG9vbGJhck9wdHMuYWx3YXlzVmlzaWJsZSAmJiB0b29sYmFyT3B0cy5wb3NpdGlvbiA9PT0gJ3RvcCcsXG4gICAgICAgIFtjbGFzc2VzLnNjaGVkdWxlZF06IHNjaGVkdWxlZCxcbiAgICAgIH0sXG4gICAgICBjbGFzc05hbWUsXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17KHJlZikgPT4gKHRoaXMud3JhcHBlclJlZiA9IHJlZil9XG4gICAgICAgIHN0eWxlPXt7IHdpZHRoOiBzaXplU3R5bGUud2lkdGgsIG1pbldpZHRoOiBzaXplU3R5bGUubWluV2lkdGgsIG1heFdpZHRoOiBzaXplU3R5bGUubWF4V2lkdGggfX1cbiAgICAgICAgY2xhc3NOYW1lPXtuYW1lc31cbiAgICAgICAgaWQ9e2BlZGl0b3ItJHt2YWx1ZT8uZG9jdW1lbnQ/LmtleX1gfVxuICAgICAgPlxuICAgICAgICB7c2NoZWR1bGVkICYmIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLnVwbG9hZGluZ30+VXBsb2FkaW5nIGltYWdlIGFuZCB0aGVuIHNhdmluZy4uLjwvZGl2Pn1cbiAgICAgICAgPFNsYXRlRWRpdG9yXG4gICAgICAgICAgcGx1Z2lucz17dGhpcy5wbHVnaW5zfVxuICAgICAgICAgIGlubmVyUmVmPXsocikgPT4ge1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zbGF0ZUVkaXRvciA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgICByZWY9eyhyKSA9PiAodGhpcy5lZGl0b3IgPSByICYmIHRoaXMucHJvcHMuZWRpdG9yUmVmKHIpKX1cbiAgICAgICAgICB0b29sYmFyUmVmPXsocikgPT4ge1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgdGhpcy50b29sYmFyUmVmID0gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICAgIGRvbmVCdXR0b25SZWY9e3RoaXMuZG9uZUJ1dHRvblJlZn1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgZm9jdXNUb29sYmFyPXt0aGlzLnN0YXRlLmZvY3VzVG9vbGJhcn1cbiAgICAgICAgICBvblRvb2xiYXJGb2N1cz17dGhpcy5oYW5kbGVUb29sYmFyRm9jdXN9XG4gICAgICAgICAgb25Ub29sYmFyQmx1cj17dGhpcy5oYW5kbGVUb29sYmFyQmx1cn1cbiAgICAgICAgICBmb2N1cz17dGhpcy5mb2N1c31cbiAgICAgICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZX1cbiAgICAgICAgICBnZXRGb2N1c2VkVmFsdWU9e3RoaXMuZ2V0Rm9jdXNlZFZhbHVlfVxuICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgb25Ecm9wPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yLCB0cnVlKX1cbiAgICAgICAgICBvblBhc3RlPXsoZXZlbnQsIGVkaXRvcikgPT4gdGhpcy5vbkRyb3BQYXN0ZShldmVudCwgZWRpdG9yKX1cbiAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgb25FZGl0aW5nRG9uZT17dGhpcy5vbkVkaXRpbmdEb25lfVxuICAgICAgICAgIGZvY3VzZWROb2RlPXtmb2N1c2VkTm9kZX1cbiAgICAgICAgICBub3JtYWxpemU9e3RoaXMubm9ybWFsaXplfVxuICAgICAgICAgIHJlYWRPbmx5PXtkaXNhYmxlZH1cbiAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrfVxuICAgICAgICAgIGF1dG9Db3JyZWN0PXtzcGVsbENoZWNrfVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW2NsYXNzZXMubm9QYWRkaW5nXTogdG9vbGJhck9wdHM/Lm5vUGFkZGluZyxcbiAgICAgICAgICAgICAgW2NsYXNzZXMuc2hvd1BhcmFncmFwaF06IHNob3dQYXJhZ3JhcGhzICYmICFzaG93UGFyYWdyYXBocy5kaXNhYmxlZCxcbiAgICAgICAgICAgICAgW2NsYXNzZXMuc2VwYXJhdGVQYXJhZ3JhcGhdOiBzZXBhcmF0ZVBhcmFncmFwaHMgJiYgIXNlcGFyYXRlUGFyYWdyYXBocy5kaXNhYmxlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGFzc2VzLnNsYXRlRWRpdG9yLFxuICAgICAgICAgICl9XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIG1pbkhlaWdodDogc2l6ZVN0eWxlLm1pbkhlaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogc2l6ZVN0eWxlLmhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodDogc2l6ZVN0eWxlLm1heEhlaWdodCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIHBsdWdpblByb3BzPXtvdGhlclBsdWdpblByb3BzfVxuICAgICAgICAgIHRvb2xiYXJPcHRzPXt0b29sYmFyT3B0c31cbiAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgcmVuZGVyUGxhY2Vob2xkZXI9e3RoaXMucmVuZGVyUGxhY2Vob2xkZXJ9XG4gICAgICAgICAgb25EYXRhQ2hhbmdlPXt0aGlzLmNoYW5nZURhdGF9XG4gICAgICAgIC8+XG4gICAgICAgIDxBbGVydERpYWxvZ1xuICAgICAgICAgIG9wZW49e2RpYWxvZy5vcGVufVxuICAgICAgICAgIHRpdGxlPXtkaWFsb2cudGl0bGV9XG4gICAgICAgICAgdGV4dD17ZGlhbG9nLnRleHR9XG4gICAgICAgICAgb25DbG9zZT17ZGlhbG9nLm9uQ2xvc2V9XG4gICAgICAgICAgb25Db25maXJtPXtkaWFsb2cub25Db25maXJtfVxuICAgICAgICAgIG9uQ29uZmlybVRleHQ9e2RpYWxvZy5vbkNvbmZpcm1UZXh0fVxuICAgICAgICAgIG9uQ2xvc2VUZXh0PXtkaWFsb2cub25DbG9zZVRleHR9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbi8vIFRPRE8gY29sb3IgLSBoYXJkY29kZWQgZ3JheSBiYWNrZ3JvdW5kIGFuZCBrZXlwYWQgY29sb3JzIHdpbGwgbmVlZCB0byBjaGFuZ2UgdG9vXG5jb25zdCBzdHlsZXMgPSB7XG4gIHdpdGhCZzoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC4wNiknLFxuICB9LFxuICBzY2hlZHVsZWQ6IHtcbiAgICBvcGFjaXR5OiAwLjUsXG4gICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9LFxuICB1cGxvYWRpbmc6IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIGxlZnQ6ICc1MCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKScsXG4gIH0sXG4gIHNsYXRlRWRpdG9yOiB7XG4gICAgZm9udEZhbWlseTogJ1JvYm90bywgc2Fucy1zZXJpZicsXG5cbiAgICAnJiB0YWJsZSc6IHtcbiAgICAgIHRhYmxlTGF5b3V0OiAnZml4ZWQnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGJvcmRlckNvbGxhcHNlOiAnY29sbGFwc2UnLFxuICAgICAgY29sb3I6IGNvbG9yLnRleHQoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogY29sb3IuYmFja2dyb3VuZCgpLFxuICAgIH0sXG4gICAgJyYgdGFibGU6bm90KFtib3JkZXI9XCIxXCJdKSB0cic6IHtcbiAgICAgIGJvcmRlclRvcDogJzFweCBzb2xpZCAjZGZlMmU1JyxcbiAgICAgIC8vIFRPRE8gcGVyaGFwcyBzZWNvbmRhcnkgY29sb3IgZm9yIGJhY2tncm91bmQsIGZvciBub3cgZGlzYWJsZVxuICAgICAgLy8gJyY6bnRoLWNoaWxkKDJuKSc6IHtcbiAgICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiAnI2Y2ZjhmYSdcbiAgICAgIC8vIH1cbiAgICB9LFxuICAgICcmIHRkLCB0aCc6IHtcbiAgICAgIHBhZGRpbmc6ICcuNmVtIDFlbScsXG4gICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIH0sXG4gICAgJyYgdGFibGU6bm90KFtib3JkZXI9XCIxXCJdKSB0ZCwgdGgnOiB7XG4gICAgICBib3JkZXI6ICcxcHggc29saWQgI2RmZTJlNScsXG4gICAgfSxcbiAgfSxcbiAgc2hvd1BhcmFncmFwaDoge1xuICAgIC8vIGEgZGl2IHRoYXQgaGFzIGEgZGl2IGFmdGVyIGl0XG4gICAgJyYgPiBkaXY6aGFzKCsgZGl2KTo6YWZ0ZXInOiB7XG4gICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgY29udGVudDogJ1wiwrZcIicsXG4gICAgICBmb250U2l6ZTogJzFlbScsXG4gICAgICBjb2xvcjogJyMxNDZFQjMnLFxuICAgIH0sXG4gIH0sXG4gIHNlcGFyYXRlUGFyYWdyYXBoOiB7XG4gICAgLy8gYSBkaXYgdGhhdCBoYXMgYSBkaXYgYWZ0ZXIgaXRcbiAgICAnJiA+IGRpdjpoYXMoKyBkaXYpJzoge1xuICAgICAgbWFyZ2luQm90dG9tOiAnMWVtJyxcbiAgICB9LFxuICB9LFxuICB0b29sYmFyT25Ub3A6IHtcbiAgICBtYXJnaW5Ub3A6ICc0NXB4JyxcbiAgfSxcbiAgbm9QYWRkaW5nOiB7XG4gICAgcGFkZGluZzogJzAgIWltcG9ydGFudCcsXG4gIH0sXG4gIHByZXZpZXdUZXh0OiB7XG4gICAgbWFyZ2luQm90dG9tOiAnMzZweCcsXG4gICAgbWFyZ2luVG9wOiAnNnB4JyxcbiAgICBwYWRkaW5nOiAnMjBweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLDAsMCwwLjA2KScsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGVzKHN0eWxlcykoRWRpdG9yKTtcbiJdfQ==
1355
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/editor.jsx"],"names":["log","defaultToolbarOpts","position","alignment","alwaysVisible","showDone","doneOn","defaultResponseAreaProps","options","respAreaToolbar","onHandleAreaChange","defaultLanguageCharactersProps","createToolbarOpts","toolbarOpts","error","isHtmlMode","MAX_CHARACTERS_LIMIT","Editor","props","interacted","keypadInteractionDetected","open","extraDialogProps","callback","setState","dialog","prevState","isEditedInHtmlMode","state","newToolbarOpts","normalizedResponseAreaProps","responseAreaProps","htmlPluginOpts","currentValue","value","toggleHtmlMode","handleAlertDialog","handleDialog","pluginProps","customPlugins","plugins","activePlugins","math","onClick","onMathClick","onFocus","onPluginFocus","onBlur","onPluginBlur","mathMlOptions","textAlign","getValue","onChange","html","extraCSSRules","image","disableImageAlignmentButtons","onDelete","imageSupport","node","done","src","data","get","e","newPendingImages","pendingImages","filter","img","key","oldScheduled","scheduled","newState","length","insertImageRequested","addedImage","getHandler","onFinish","result","cb","onEditingDone","bind","handler","add","maxImageWidth","maxImageHeight","toolbar","disableScrollbar","disableUnderline","autoWidth","autoWidthToolbar","onDone","nonEmpty","toolbarInFocus","focusedNode","focusToolbar","editor","blur","startText","text","resetValue","then","table","responseArea","type","maxResponseAreas","languageCharacters","languageCharactersProps","keyPadCharacterRef","setKeypadInteraction","media","focus","createChange","change","uploadSoundSupport","mmlOutput","mmlEditing","runSerializationOnMarkup","relatedTarget","target","stashedValue","stashValue","c","collapseToStartOf","selectedNode","document","previewText","renderHtmlPreviewContent","openHtmlModeConfirmationDialog","classes","ref","elementRef","title","onConfirmText","onCloseText","onConfirm","handleHtmlModeSaveConfirmation","onClose","htmlModeContinueEditing","resolve","event","toolbarElement","toolbarRef","closest","className","isRawDoneButton","doneButtonRef","current","skipBlurHandling","Promise","preBlurValue","handleBlur","editorDOM","querySelector","setTimeout","stateValue","wrapperRef","editorElement","activeElement","isInCurrentComponent","contains","removeEventListener","handleDomBlur","isFocused","isTouchDevice","window","navigator","maxTouchPoints","__TEMPORARY_CHANGE_DATA","domEl","setNodeByKey","addEventListener","shouldFocusEditor","force","stopReset","reduce","s","p","toObject","newValue","Value","fromJSON","toJSON","me","charactersLimit","limit","handlePlugins","v","calcRegex","endsWith","undefined","match","parseInt","isNaN","object","last","nodes","parent","getParent","Block","pos","dropContext","transfer","file","files","fragment","inline","Inline","create","isVoid","loading","range","select","ch","insertInline","InsertImageHandler","fileChosen","insertFragment","selection","startBlock","defaultBlock","defaultMarks","getInsertMarksAtRange","frag","Plain","deserialize","placeholder","size","isEmpty","display","width","maxWidth","whiteSpace","opacity","pointerEvents","userSelect","React","createRef","handleToolbarFocus","handleToolbarBlur","onResize","toolbarContainsFocus","onRef","isResponseAreaEditor","includes","responseAreaEditor","setAttribute","autoFocus","nextProps","differentCharacterProps","differentMathMlProps","differentImageMaxDimensionsProps","equals","prevProps","zeroWidthEls","querySelectorAll","Array","from","forEach","el","style","minWidth","minHeight","height","maxHeight","valueToSize","disabled","spellCheck","highlightShape","isEditor","onKeyDown","showParagraphs","separateParagraphs","otherPluginProps","sizeStyle","buildSizeStyle","names","withBg","toolbarOnTop","uploading","r","slateEditor","editorRef","getFocusedValue","onDropPaste","normalize","noPadding","showParagraph","separateParagraph","renderPlaceholder","changeData","Component","PropTypes","bool","func","isRequired","any","SlateTypes","shape","number","oneOfType","string","oneOf","arrayOf","rules","language","characterIcon","characters","values","allValid","every","ALL_PLUGINS","Error","join","styles","backgroundColor","top","left","transform","fontFamily","tableLayout","borderCollapse","color","background","borderTop","padding","border","content","fontSize","marginBottom","marginTop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;AACA;;AAGA;;;;AACA;;AAEA;;;;;;;;;;;;;;;;AAIA,IAAMA,GAAG,GAAG,uBAAM,sBAAN,CAAZ;AAEA,IAAMC,kBAAkB,GAAG;AACzBC,EAAAA,QAAQ,EAAE,QADe;AAEzBC,EAAAA,SAAS,EAAE,MAFc;AAGzBC,EAAAA,aAAa,EAAE,KAHU;AAIzBC,EAAAA,QAAQ,EAAE,IAJe;AAKzBC,EAAAA,MAAM,EAAE;AALiB,CAA3B;AAQA,IAAMC,wBAAwB,GAAG;AAC/BC,EAAAA,OAAO,EAAE,EADsB;AAE/BC,EAAAA,eAAe,EAAE,2BAAM,CAAE,CAFM;AAG/BC,EAAAA,kBAAkB,EAAE,8BAAM,CAAE;AAHG,CAAjC;AAMA,IAAMC,8BAA8B,GAAG,EAAvC;;AAEA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,WAAD,EAAcC,KAAd,EAAqBC,UAArB,EAAoC;AAC5D,uDACKd,kBADL,GAEKY,WAFL;AAGEC,IAAAA,KAAK,EAALA,KAHF;AAIEC,IAAAA,UAAU,EAAVA;AAJF;AAMD,CAPD;AASA;AACA;AACA;AACA;;;AACA,IAAMC,oBAAoB,GAAG,OAA7B;;IAEaC,M;;;;;AA6GX,kBAAYC,MAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,MAAN;AADiB,6GAuCI,UAACC,UAAD,EAAgB;AACrC,YAAKC,yBAAL,GAAiCD,UAAjC;AACD,KAzCkB;AAAA,qGA2DJ,UAACE,IAAD,EAA2C;AAAA,UAApCC,gBAAoC,uEAAjB,EAAiB;AAAA,UAAbC,QAAa;;AACxD,YAAKC,QAAL,CACE;AACEC,QAAAA,MAAM;AACJJ,UAAAA,IAAI,EAAJA;AADI,WAEDC,gBAFC;AADR,OADF,EAOEC,QAPF;AASD,KArEkB;AAAA,uGAuEF,YAAM;AACrB,YAAKC,QAAL,CACE,UAACE,SAAD;AAAA,eAAgB;AACdX,UAAAA,UAAU,EAAE,CAACW,SAAS,CAACX,UADT;AAEdY,UAAAA,kBAAkB,EAAE;AAFN,SAAhB;AAAA,OADF,EAKE,YAAM;AACJ,YAAQb,KAAR,GAAkB,MAAKI,KAAvB,CAAQJ,KAAR;AACA,YAAQD,WAAR,GAAwB,MAAKe,KAA7B,CAAQf,WAAR;AACA,YAAMgB,cAAc,GAAGjB,iBAAiB,CAACC,WAAD,EAAcC,KAAd,EAAqB,MAAKc,KAAL,CAAWb,UAAhC,CAAxC;;AACA,cAAKS,QAAL,CAAc;AACZX,UAAAA,WAAW,EAAEgB;AADD,SAAd;AAGD,OAZH;AAcD,KAtFkB;AAAA,sGAwFH,UAACX,KAAD,EAAW;AACzB,UAAMY,2BAA2B,mCAC5BvB,wBAD4B,GAE5BW,KAAK,CAACa,iBAFsB,CAAjC;;AAKA,UAAMC,cAAc,GAAG;AACrBC,QAAAA,YAAY,EAAE,MAAKf,KAAL,CAAWgB,KADJ;AAErBnB,QAAAA,UAAU,EAAE,MAAKa,KAAL,CAAWb,UAFF;AAGrBY,QAAAA,kBAAkB,EAAE,MAAKC,KAAL,CAAWD,kBAHV;AAIrBQ,QAAAA,cAAc,EAAE,MAAKA,cAJA;AAKrBC,QAAAA,iBAAiB,EAAE,MAAKC;AALH,OAAvB;;AAOA,iBAAwBnB,KAAK,CAACoB,WAAN,IAAqB,EAA7C;AAAA,UAAMC,aAAN,QAAMA,aAAN;;AACAA,MAAAA,aAAa,GAAGA,aAAa,IAAI,EAAjC;AAEA,YAAKC,OAAL,GAAe,2BAAatB,KAAK,CAACuB,aAAnB,EAAkCF,aAAlC,EAAiD;AAC9DG,QAAAA,IAAI;AACFC,UAAAA,OAAO,EAAE,MAAKC,WADZ;AAEFC,UAAAA,OAAO,EAAE,MAAKC,aAFZ;AAGFC,UAAAA,MAAM,EAAE,MAAKC;AAHX,WAIC9B,KAAK,CAAC+B,aAJP,CAD0D;AAO9DC,QAAAA,SAAS,EAAE;AACTC,UAAAA,QAAQ,EAAE;AAAA,mBAAM,MAAKvB,KAAL,CAAWM,KAAjB;AAAA,WADD;AAETkB,UAAAA,QAAQ,EAAE,MAAKA;AAFN,SAPmD;AAW9DC,QAAAA,IAAI,EAAErB,cAXwD;AAY9DsB,QAAAA,aAAa,EAAEpC,KAAK,CAACoC,aAAN,IAAuB,EAZwB;AAa9DC,QAAAA,KAAK,EAAE;AACLC,UAAAA,4BAA4B,EAAEtC,KAAK,CAACsC,4BAD/B;AAELC,UAAAA,QAAQ,EACNvC,KAAK,CAACwC,YAAN,IACAxC,KAAK,CAACwC,YAAN,UADA,IAEC,UAACC,IAAD,EAAOC,IAAP,EAAgB;AACf,gBAAMC,GAAG,GAAGF,IAAI,CAACG,IAAL,CAAUC,GAAV,CAAc,KAAd,CAAZ;AAEA7C,YAAAA,KAAK,CAACwC,YAAN,WAA0BG,GAA1B,EAA+B,UAACG,CAAD,EAAO;AACpC,kBAAMC,gBAAgB,GAAG,MAAKrC,KAAL,CAAWsC,aAAX,CAAyBC,MAAzB,CAAgC,UAACC,GAAD;AAAA,uBAASA,GAAG,CAACC,GAAJ,KAAYV,IAAI,CAACU,GAA1B;AAAA,eAAhC,CAAzB;;AACA,kBAAmBC,YAAnB,GAAoC,MAAK1C,KAAzC,CAAQ2C,SAAR;AACA,kBAAMC,QAAQ,GAAG;AACfN,gBAAAA,aAAa,EAAED,gBADA;AAEfM,gBAAAA,SAAS,EAAED,YAAY,IAAIL,gBAAgB,CAACQ,MAAjB,KAA4B,CAA5C,GAAgD,KAAhD,GAAwDH;AAFpD,eAAjB;;AAKA,oBAAK9C,QAAL,CAAcgD,QAAd,EAAwB;AAAA,uBAAMZ,IAAI,CAACI,CAAD,EAAI,MAAKpC,KAAL,CAAWM,KAAf,CAAV;AAAA,eAAxB;AACD,aATD;AAUD,WAlBE;AAmBLwC,UAAAA,oBAAoB,EAClBxD,KAAK,CAACwC,YAAN,IACC,UAACiB,UAAD,EAAaC,UAAb,EAA4B;AAC3B,gBAAQV,aAAR,GAA0B,MAAKtC,KAA/B,CAAQsC,aAAR;;AACA,gBAAMW,QAAQ,GAAG,SAAXA,QAAW,CAACC,MAAD,EAAY;AAC3B,kBAAIC,EAAJ;;AAEA,kBAAI,MAAKnD,KAAL,CAAW2C,SAAX,IAAwBO,MAA5B,EAAoC;AAClC;AACAC,gBAAAA,EAAE,GAAG,MAAKC,aAAL,CAAmBC,IAAnB,gDAAL;AACD;;AAED,kBAAMhB,gBAAgB,GAAG,MAAKrC,KAAL,CAAWsC,aAAX,CAAyBC,MAAzB,CAAgC,UAACC,GAAD;AAAA,uBAASA,GAAG,CAACC,GAAJ,KAAYM,UAAU,CAACN,GAAhC;AAAA,eAAhC,CAAzB;;AACA,kBAAMG,QAAQ,GAAG;AACfN,gBAAAA,aAAa,EAAED;AADA,eAAjB;;AAIA,kBAAIA,gBAAgB,CAACQ,MAAjB,KAA4B,CAAhC,EAAmC;AACjCD,gBAAAA,QAAQ,CAACD,SAAT,GAAqB,KAArB;AACD;;AAED,oBAAK/C,QAAL,CAAcgD,QAAd,EAAwBO,EAAxB;AACD,aAlBD;;AAmBA,gBAAMxD,QAAQ,GAAG,SAAXA,QAAW,GAAM;AACrB;AACd;AACA;AACA;AACc,kBAAM2D,OAAO,GAAGN,UAAU,CAACC,QAAD,EAAW;AAAA,uBAAM,MAAKjD,KAAL,CAAWM,KAAjB;AAAA,eAAX,CAA1B;AACAhB,cAAAA,KAAK,CAACwC,YAAN,CAAmByB,GAAnB,CAAuBD,OAAvB;AACD,aAPD;;AASA,kBAAK1D,QAAL,CACE;AACE0C,cAAAA,aAAa,gDAAMA,aAAN,IAAqBS,UAArB;AADf,aADF,EAIEpD,QAJF;AAMD,WAzDE;AA0DLsB,UAAAA,OAAO,EAAE,MAAKC,aA1DT;AA2DLC,UAAAA,MAAM,EAAE,MAAKC,YA3DR;AA4DLoC,UAAAA,aAAa,EAAElE,KAAK,CAACkE,aA5DhB;AA6DLC,UAAAA,cAAc,EAAEnE,KAAK,CAACmE;AA7DjB,SAbuD;AA4E9DC,QAAAA,OAAO,EAAE;AACP;AACR;AACA;AACA;AACQC,UAAAA,gBAAgB,EAAE,CAAC,CAACrE,KAAK,CAACqE,gBALnB;AAMPC,UAAAA,gBAAgB,EAAEtE,KAAK,CAACsE,gBANjB;AAOPC,UAAAA,SAAS,EAAEvE,KAAK,CAACwE,gBAPV;AAQPC,UAAAA,MAAM,EAAE,kBAAM;AAAA;;AACZ,gBAAQC,QAAR,GAAqB1E,KAArB,CAAQ0E,QAAR;AAEA5F,YAAAA,GAAG,CAAC,UAAD,CAAH;;AACA,kBAAKwB,QAAL,CAAc;AAAEqE,cAAAA,cAAc,EAAE,KAAlB;AAAyBC,cAAAA,WAAW,EAAE,IAAtC;AAA4CC,cAAAA,YAAY,EAAE;AAA1D,aAAd;;AACA,kBAAKC,MAAL,CAAYC,IAAZ;;AAEA,gBAAIL,QAAQ,IAAI,gCAAKhE,KAAL,CAAWM,KAAX,CAAiBgE,SAAjB,0GAA4BC,IAA5B,kFAAkC1B,MAAlC,MAA6C,CAA7D,EAAgE;AAC9D,oBAAK2B,UAAL,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,YAAM;AAC/B,sBAAKrB,aAAL;AACD,eAFD;AAGD,aAJD,MAIO;AACL,oBAAKA,aAAL;AACD;AACF;AAtBM,SA5EqD;AAoG9DsB,QAAAA,KAAK,EAAE;AACLzD,UAAAA,OAAO,EAAE,mBAAM;AACb7C,YAAAA,GAAG,CAAC,oBAAD,CAAH;;AACA,kBAAK8C,aAAL;AACD,WAJI;AAKLC,UAAAA,MAAM,EAAE,kBAAM;AACZ/C,YAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,kBAAKgD,YAAL;AACD;AARI,SApGuD;AA8G9DuD,QAAAA,YAAY,EAAE;AACZC,UAAAA,IAAI,EAAE1E,2BAA2B,CAAC0E,IADtB;AAEZhG,UAAAA,OAAO,EAAEsB,2BAA2B,CAACtB,OAFzB;AAGZiG,UAAAA,gBAAgB,EAAE3E,2BAA2B,CAAC2E,gBAHlC;AAIZhG,UAAAA,eAAe,EAAEqB,2BAA2B,CAACrB,eAJjC;AAKZC,UAAAA,kBAAkB,EAAEoB,2BAA2B,CAACpB,kBALpC;AAMZI,UAAAA,KAAK,EAAEgB,2BAA2B,CAAChB,KANvB;AAOZ+B,UAAAA,OAAO,EAAE,mBAAM;AACb7C,YAAAA,GAAG,CAAC,oBAAD,CAAH;;AACA,kBAAK8C,aAAL;AACD,WAVW;AAWZC,UAAAA,MAAM,EAAE,kBAAM;AACZ/C,YAAAA,GAAG,CAAC,mBAAD,CAAH;;AACA,kBAAKgD,YAAL;AACD;AAdW,SA9GgD;AA8H9D0D,QAAAA,kBAAkB,EAAExF,KAAK,CAACyF,uBA9HoC;AA+H9DC,QAAAA,kBAAkB,EAAE,MAAKA,kBA/HqC;AAgI9DC,QAAAA,oBAAoB,EAAE,MAAKA,oBAhImC;AAiI9DC,QAAAA,KAAK,EAAE;AACLC,UAAAA,KAAK,EAAE,MAAKA,KADP;AAELC,UAAAA,YAAY,EAAE;AAAA,mBAAM,MAAKpF,KAAL,CAAWM,KAAX,CAAiB+E,MAAjB,EAAN;AAAA,WAFT;AAGL7D,UAAAA,QAAQ,EAAE,MAAKA,QAHV;AAIL8D,UAAAA,kBAAkB,EAAEhG,KAAK,CAACgG;AAJrB;AAjIuD,OAAjD,CAAf;;AAyIA,UAAIhG,KAAK,CAAC+B,aAAN,CAAoBkE,SAApB,IAAiCjG,KAAK,CAAC+B,aAAN,CAAoBmE,UAAzD,EAAqE;AACnE,cAAKlG,KAAL,CAAWmG,wBAAX;AACD;AACF,KApPkB;AAAA,qGAuUJ,UAACrD,CAAD,EAAO;AACpBhE,MAAAA,GAAG,CAAC,gBAAD,EAAmBgE,CAAC,IAAIA,CAAC,CAACsD,aAA1B,CAAH;AACA,UAAMC,MAAM,GAAGvD,CAAC,IAAIA,CAAC,CAACsD,aAAtB;AAEA,UAAM3D,IAAI,GAAG4D,MAAM,GAAG,0BAASA,MAAT,EAAiB,MAAK3F,KAAL,CAAWM,KAA5B,CAAH,GAAwC,IAA3D;AACAlC,MAAAA,GAAG,CAAC,uBAAD,EAA0B2D,IAA1B,CAAH;;AACA,YAAKnC,QAAL,CAAc;AAAEsE,QAAAA,WAAW,EAAEnC;AAAf,OAAd,EAAqC,YAAM;AACzC,cAAKyC,UAAL;AACD,OAFD;AAGD,KAhVkB;AAAA,sGAkVH,UAACpC,CAAD,EAAO;AACrBhE,MAAAA,GAAG,CAAC,iBAAD,EAAoBgE,CAAC,IAAIA,CAAC,CAACuD,MAA3B,CAAH;AACA,UAAMA,MAAM,GAAGvD,CAAC,IAAIA,CAAC,CAACuD,MAAtB;;AACA,UAAIA,MAAJ,EAAY;AACV,YAAM5D,IAAI,GAAG,0BAAS4D,MAAT,EAAiB,MAAK3F,KAAL,CAAWM,KAA5B,CAAb;AACAlC,QAAAA,GAAG,CAAC,wBAAD,EAA2B2D,IAA3B,CAAH;AAEA,YAAM6D,YAAY,GAAG,MAAK5F,KAAL,CAAW4F,YAAX,IAA2B,MAAK5F,KAAL,CAAWM,KAA3D;;AACA,cAAKV,QAAL,CAAc;AAAEsE,UAAAA,WAAW,EAAEnC,IAAf;AAAqB6D,UAAAA,YAAY,EAAZA;AAArB,SAAd;AACD,OAND,MAMO;AACL,cAAKhG,QAAL,CAAc;AAAEsE,UAAAA,WAAW,EAAE;AAAf,SAAd;AACD;;AACD,YAAK2B,UAAL;AACD,KA/VkB;AAAA,oGAiWL,UAAC9D,IAAD,EAAU;AACtB,YAAKqC,MAAL,CAAYiB,MAAZ,CAAmB,UAACS,CAAD;AAAA,eAAOA,CAAC,CAACC,iBAAF,CAAoBhE,IAApB,CAAP;AAAA,OAAnB;;AACA,YAAKnC,QAAL,CAAc;AAAEoG,QAAAA,YAAY,EAAEjE;AAAhB,OAAd;AACD,KApWkB;AAAA,sGAsWH,YAAM;AACpB,wBAAqD,MAAK/B,KAA1D;AAAA,UAAQb,UAAR,eAAQA,UAAR;AAAA,UAAoBU,MAApB,eAAoBA,MAApB;AAAA,UAA4BS,KAA5B,eAA4BA,KAA5B;AAAA,UAAmCgC,aAAnC,eAAmCA,aAAnC,CADoB,CAGpB;;AACA,UAAInD,UAAJ,EAAgB;AACd;AACA,YAAIU,MAAJ,aAAIA,MAAJ,eAAIA,MAAM,CAAEJ,IAAZ,EAAkB;AAElB,YAAMY,YAAY,GAAG,+BAAYC,KAAK,CAAC2F,QAAN,CAAe1B,IAA3B,CAArB;;AACA,YAAM2B,WAAW,GAAG,MAAKC,wBAAL,EAApB;;AAEA,cAAKC,8BAAL,CAAoC/F,YAApC,EAAkD6F,WAAlD;;AACA;AACD;;AAED,UAAI5D,aAAa,CAACO,MAAlB,EAA0B;AACxB;AACA,cAAKjD,QAAL,CAAc;AAAE+C,UAAAA,SAAS,EAAE;AAAb,SAAd;;AACA;AACD,OAnBmB,CAqBpB;;;AACAvE,MAAAA,GAAG,CAAC,iBAAD,CAAH;;AACA,YAAKwB,QAAL,CAAc;AAAE0C,QAAAA,aAAa,EAAE,EAAjB;AAAqBsD,QAAAA,YAAY,EAAE,IAAnC;AAAyC1B,QAAAA,WAAW,EAAE;AAAtD,OAAd;;AACA9F,MAAAA,GAAG,CAAC,yBAAD,EAA4B,MAAK4B,KAAL,CAAWM,KAAvC,CAAH;;AACA,YAAKhB,KAAL,CAAWkC,QAAX,CAAoB,MAAKxB,KAAL,CAAWM,KAA/B,EAAsC,IAAtC;AACD,KAhYkB;AAAA,iHAsYQ,YAAM;AAC/B,UAAQ+F,OAAR,GAAoB,MAAK/G,KAAzB,CAAQ+G,OAAR;AACA,0BACE;AAAK,QAAA,GAAG,EAAE,aAACC,KAAD;AAAA,iBAAU,MAAKC,UAAL,GAAkBD,KAA5B;AAAA;AAAV,sBACE,uEADF,eAEE,gCAAC,oBAAD;AAAe,QAAA,gBAAgB,EAAED,OAAO,CAACH,WAAzC;AAAsD,QAAA,MAAM,EAAE,MAAKlG,KAAL,CAAWM,KAAX,CAAiB2F,QAAjB,CAA0B1B;AAAxF,QAFF,eAGE,sFAHF,CADF;AAOD,KA/YkB;AAAA,uHAqZc,UAAClE,YAAD,EAAe6F,WAAf,EAA+B;AAC9D,YAAKtG,QAAL,CAAc;AACZC,QAAAA,MAAM,EAAE;AACNJ,UAAAA,IAAI,EAAE,IADA;AAEN+G,UAAAA,KAAK,EAAE,wBAFD;AAGNjC,UAAAA,IAAI,EAAE2B,WAHA;AAINO,UAAAA,aAAa,EAAE,cAJT;AAKNC,UAAAA,WAAW,EAAE,kBALP;AAMNC,UAAAA,SAAS,EAAE,qBAAM;AACf,kBAAKC,8BAAL,CAAoCvG,YAApC;AACD,WARK;AASNwG,UAAAA,OAAO,EAAE,MAAKC;AATR;AADI,OAAd;AAaD,KAnakB;AAAA,uHA0ac,UAACzG,YAAD,EAAkB;AACjD,YAAKT,QAAL,CAAc;AAAEU,QAAAA,KAAK,EAAED;AAAT,OAAd;;AACA,YAAKf,KAAL,CAAWkC,QAAX,CAAoBnB,YAApB,EAAkC,IAAlC;;AACA,YAAKI,YAAL,CAAkB,KAAlB;;AACA,YAAKF,cAAL;AACD,KA/akB;AAAA,gHAqbO,YAAM;AAC9B,YAAKE,YAAL,CAAkB,KAAlB;AACD,KAvbkB;AAAA,mGAicN,UAACsG,OAAD,EAAa;AACxB,UAAQ/C,QAAR,GAAqB,MAAK1E,KAA1B,CAAQ0E,QAAR;AACA,UACiBtF,MADjB,GAEI,MAAKsB,KAFT,CACEf,WADF,CACiBP,MADjB;;AAIA,YAAKkB,QAAL,CAAc;AAAEqE,QAAAA,cAAc,EAAE,KAAlB;AAAyBC,QAAAA,WAAW,EAAE;AAAtC,OAAd;;AAEA,UAAI,MAAKE,MAAT,EAAiB;AACf,cAAKA,MAAL,CAAYC,IAAZ;AACD;;AAED,UAAI3F,MAAM,KAAK,MAAf,EAAuB;AAAA;;AACrB,YAAIsF,QAAQ,IAAI,iCAAKhE,KAAL,CAAWM,KAAX,CAAiBgE,SAAjB,4GAA4BC,IAA5B,kFAAkC1B,MAAlC,MAA6C,CAA7D,EAAgE;AAC9D,gBAAK2B,UAAL,CAAgB,IAAhB,EAAsBC,IAAtB,CAA2B,YAAM;AAC/B,kBAAKrB,aAAL;;AACA2D,YAAAA,OAAO;AACR,WAHD;AAID,SALD,MAKO;AACL,gBAAK3D,aAAL;;AACA2D,UAAAA,OAAO;AACR;AACF;AACF,KAxdkB;AAAA,+FA0dV,UAACC,KAAD,EAAW;AAAA;;AAClB5I,MAAAA,GAAG,CAAC,UAAD,CAAH;AACA,UAAMsH,aAAa,GAAGsB,KAAK,CAACtB,aAA5B;AACA,UAAMuB,cAAc,GAAG,MAAKC,UAAL,KAAmBxB,aAAnB,aAAmBA,aAAnB,uBAAmBA,aAAa,CAAEyB,OAAf,qBAAmC,MAAKD,UAAL,CAAgBE,SAAnD,SAAnB,CAAvB,CAHkB,CAKlB;;AACA,UAAMC,eAAe,GACnB,MAAKC,aAAL,KAAsB5B,aAAtB,aAAsBA,aAAtB,uBAAsBA,aAAa,CAAEyB,OAAf,8CAAmC,MAAKG,aAAL,CAAmBC,OAAtD,0DAAmC,sBAA4BH,SAA/D,SAAtB,CADF,CANkB,CASlB;;AACA,YAAKI,gBAAL,GAAwB,MAAKhI,yBAAL,IAAkCkG,aAAa,KAAK,IAA5E;;AAEA,UAAIuB,cAAc,IAAI,CAACI,eAAnB,IAAsC,CAAC,MAAKrH,KAAL,CAAWmE,YAAtD,EAAoE;AAClE,cAAKvE,QAAL,CAAc;AACZuE,UAAAA,YAAY,EAAE;AADF,SAAd;AAGD;;AAED,UAAMpC,IAAI,GAAG2D,aAAa,GAAG,0BAASA,aAAT,EAAwB,MAAK1F,KAAL,CAAWM,KAAnC,CAAH,GAA+C,IAAzE;AAEAlC,MAAAA,GAAG,CAAC,iBAAD,EAAoB2D,IAApB,CAAH;AAEA,aAAO,IAAI0F,OAAJ,CAAY,UAACV,OAAD,EAAa;AAC9B,YAAI,CAAC,MAAKS,gBAAV,EAA4B;AAC1B,gBAAKvC,oBAAL,CAA0B,KAA1B;;AACA,gBAAKrF,QAAL,CACE;AAAE8H,YAAAA,YAAY,EAAE,MAAK1H,KAAL,CAAWM,KAA3B;AAAkC4D,YAAAA,WAAW,EAAE,CAACnC,IAAD,GAAQ,IAAR,GAAeA;AAA9D,WADF,EAEE,MAAK4F,UAAL,CAAgBtE,IAAhB,iDAA2B0D,OAA3B,CAFF;AAID;;AAED,cAAKzH,KAAL,CAAW6B,MAAX,CAAkB6F,KAAlB;AACD,OAVM,CAAP;AAWD,KA3fkB;AAAA,sGA6fH,UAAC5E,CAAD,EAAO;AACrB,UAAMwF,SAAS,GAAG3B,QAAQ,CAAC4B,aAAT,uBAAqC,MAAK7H,KAAL,CAAWM,KAAX,CAAiB2F,QAAjB,CAA0BxD,GAA/D,SAAlB;AAEAqF,MAAAA,UAAU,CAAC,YAAM;AACf,YAAeC,UAAf,GAA8B,MAAK/H,KAAnC,CAAQM,KAAR;;AAEA,YAAI,CAAC,MAAK0H,UAAV,EAAsB;AACpB;AACD;;AAED,YAAMC,aAAa,GAAG,CAACL,SAAD,IAAc3B,QAAQ,CAACiC,aAAT,CAAuBf,OAAvB,qBAA2CS,SAAS,CAACR,SAArD,SAApC;AACA,YAAMH,cAAc,GAClB,CAAC,MAAKC,UAAN,IAAoBjB,QAAQ,CAACiC,aAAT,CAAuBf,OAAvB,qBAA2C,MAAKD,UAAL,CAAgBE,SAA3D,SADtB;;AAEA,YAAMe,oBAAoB,GAAG,MAAKH,UAAL,CAAgBI,QAAhB,CAAyBH,aAAzB,KAA2C,MAAKD,UAAL,CAAgBI,QAAhB,CAAyBnB,cAAzB,CAAxE;;AAEA,YAAI,CAACkB,oBAAL,EAA2B;AACzBP,UAAAA,SAAS,CAACS,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;;AAEA,cAAIP,UAAU,CAACQ,SAAf,EAA0B;AACxB,kBAAKpH,MAAL,CAAYiB,CAAZ;AACD;AACF;AACF,OAnBS,EAmBP,EAnBO,CAAV;AAoBD,KAphBkB;AAAA,gGA6hBT,UAAC4E,KAAD,EAAQ3B,MAAR;AAAA,aACR,IAAIoC,OAAJ,CAAY,UAACV,OAAD,EAAa;AAAA;;AACvB,YAAMa,SAAS,GAAG3B,QAAQ,CAAC4B,aAAT,uBAAqC,MAAK7H,KAAL,CAAWM,KAAX,CAAiB2F,QAAjB,CAA0BxD,GAA/D,SAAlB;AACA,YAAM+F,aAAa,GACjB,OAAOC,MAAP,KAAkB,WAAlB,KAAkC,kBAAkBA,MAAlB,IAA4B,eAAAC,SAAS,UAAT,gDAAWC,cAAX,IAA4B,CAA1F,CADF;AAGAvK,QAAAA,GAAG,CAAC,WAAD,EAAc6H,QAAQ,CAACiC,aAAvB,CAAH;;AAEA,YAAI,MAAK1I,yBAAL,IAAkC,MAAKoJ,uBAA3C,EAAoE;AAClE,gBAAKA,uBAAL,GAA+B,IAA/B;AACD;AAED;AACN;AACA;;;AACM,YAAI,MAAKA,uBAAT,EAAkC;AAChC,sCAAsB,MAAKA,uBAA3B;AAAA,cAAQnG,GAAR,yBAAQA,GAAR;AAAA,cAAaP,IAAb,yBAAaA,IAAb;AACA,cAAM2G,KAAK,GAAG5C,QAAQ,CAAC4B,aAAT,uBAAqCpF,GAArC,SAAd;;AAEA,cAAIoG,KAAJ,EAAW;AACT,gBAAIxD,OAAM,GAAG,MAAKrF,KAAL,CAAWM,KAAX,CAAiB+E,MAAjB,GAA0ByD,YAA1B,CAAuCrG,GAAvC,EAA4C;AAAEP,cAAAA,IAAI,EAAJA;AAAF,aAA5C,CAAb;;AACA,kBAAKtC,QAAL,CAAc;AAAEU,cAAAA,KAAK,EAAE+E,OAAM,CAAC/E;AAAhB,aAAd,EAAuC,YAAM;AAC3C,oBAAKsI,uBAAL,GAA+B,IAA/B;AACD,aAFD;AAGD;AACF;AAED;AACN;AACA;AACA;AACA;AACA;;;AACM,YAAIhB,SAAS,KAAK3B,QAAQ,CAACiC,aAA3B,EAA0C;AACxCN,UAAAA,SAAS,CAACS,mBAAV,CAA8B,MAA9B,EAAsC,MAAKC,aAA3C;AACAV,UAAAA,SAAS,CAACmB,gBAAV,CAA2B,MAA3B,EAAmC,MAAKT,aAAxC;AACD;;AAED,cAAKzC,UAAL;;AACA,cAAKvG,KAAL,CAAW2B,OAAX,GAtCuB,CAwCvB;;;AACA,YAAM+H,iBAAiB,GAAG,CAAC,MAAKxJ,yBAAN,IAAmC,CAACgJ,aAA9D;;AAEA,YAAIQ,iBAAJ,EAAuB;AACrB3D,UAAAA,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEF,KAAR;AACD;;AAED4B,QAAAA,OAAO;AACR,OAhDD,CADQ;AAAA,KA7hBS;AAAA,mGAglBN,YAAM;AACjB3I,MAAAA,GAAG,CAAC,cAAD,CAAH;;AAEA,UAAI,CAAC,MAAK4B,KAAL,CAAW4F,YAAhB,EAA8B;AAC5B,cAAKhG,QAAL,CAAc;AAAEgG,UAAAA,YAAY,EAAE,MAAK5F,KAAL,CAAWM;AAA3B,SAAd;AACD;AACF,KAtlBkB;AAAA,mGA2lBN,UAAC2I,KAAD,EAAW;AACtB,yBAA+B,MAAKjJ,KAApC;AAAA,UAAQM,KAAR,gBAAQA,KAAR;AAAA,UAAe4D,WAAf,gBAAeA,WAAf;;AAEA,UAAMgF,SAAS,GAAG,MAAKtI,OAAL,CAAauI,MAAb,CAAoB,UAACC,CAAD,EAAIC,CAAJ,EAAU;AAC9C,eAAOD,CAAC,IAAKC,CAAC,CAACH,SAAF,IAAeG,CAAC,CAACH,SAAF,CAAY,MAAKlJ,KAAL,CAAWM,KAAvB,CAA5B;AACD,OAFiB,EAEf,KAFe,CAAlB;;AAIAlC,MAAAA,GAAG,CAAC,cAAD,EAAiBkC,KAAK,CAACiI,SAAvB,EAAkCrE,WAAlC,EAA+C,aAA/C,EAA8DgF,SAA9D,CAAH;;AACA,UAAK,MAAKlJ,KAAL,CAAW4F,YAAX,IAA2B,CAACtF,KAAK,CAACiI,SAAlC,IAA+C,CAACrE,WAAhD,IAA+D,CAACgF,SAAjE,IAA+ED,KAAnF,EAA0F;AACxF7K,QAAAA,GAAG,CAAC,2BAAD,CAAH;AACAA,QAAAA,GAAG,CAAC,SAAD,EAAY,MAAK4B,KAAL,CAAW4F,YAAX,CAAwBK,QAAxB,CAAiCqD,QAAjC,EAAZ,CAAH;AACAlL,QAAAA,GAAG,CAAC,SAAD,EAAY,MAAK4B,KAAL,CAAWM,KAAX,CAAiB2F,QAAjB,CAA0BqD,QAA1B,EAAZ,CAAH;;AAEA,YAAMC,QAAQ,GAAGC,aAAMC,QAAN,CAAe,MAAKzJ,KAAL,CAAW4F,YAAX,CAAwB8D,MAAxB,EAAf,CAAjB;;AAEAtL,QAAAA,GAAG,CAAC,YAAD,EAAemL,QAAQ,CAACtD,QAAxB,CAAH;AACA,eAAO,IAAIwB,OAAJ,CAAY,UAACV,OAAD,EAAa;AAC9Be,UAAAA,UAAU,CAAC,YAAM;AACf,kBAAKlI,QAAL,CAAc;AAAEU,cAAAA,KAAK,EAAEiJ,QAAT;AAAmB3D,cAAAA,YAAY,EAAE;AAAjC,aAAd,EAAuD,YAAM;AAC3DxH,cAAAA,GAAG,CAAC,aAAD,EAAgB,MAAK4B,KAAL,CAAWM,KAAX,CAAiB2F,QAAjB,CAA0ByD,MAA1B,EAAhB,CAAH;AACA3C,cAAAA,OAAO;AACR,aAHD;AAID,WALS,EAKP,EALO,CAAV;AAMD,SAPM,CAAP;AAQD,OAhBD,MAgBO;AACL,eAAOU,OAAO,CAACV,OAAR,CAAgB,EAAhB,CAAP;AACD;AACF,KAtnBkB;AAAA,iGAwnBR,UAAC1B,MAAD,EAASrD,IAAT,EAAkB;AAC3B5D,MAAAA,GAAG,CAAC,YAAD,CAAH;AACAqK,MAAAA,MAAM,CAACkB,EAAP;AAEA,UAAQrJ,KAAR,GAAkB+E,MAAlB,CAAQ/E,KAAR;AACA,UAAQsJ,eAAR,GAA4B,MAAKtK,KAAjC,CAAQsK,eAAR;AACA,UAAIC,KAAK,GAAGD,eAAZ;;AACA,UAAI,CAACC,KAAD,IAAUA,KAAK,GAAGzK,oBAAtB,EAA4C;AAC1CyK,QAAAA,KAAK,GAAGzK,oBAAR;AACD;;AAED,UAAIkB,KAAK,IAAIA,KAAK,CAAC2F,QAAf,IAA2B3F,KAAK,CAAC2F,QAAN,CAAe1B,IAA1C,IAAkDjE,KAAK,CAAC2F,QAAN,CAAe1B,IAAf,CAAoB1B,MAApB,GAA6BgH,KAAnF,EAA0F;AACxF;AACD,OAb0B,CAe3B;AACA;;;AACA,UAAM9J,kBAAkB,GAAG,CAAC,MAAKC,KAAL,CAAWb,UAAZ,GACvB,KADuB,GAEvB,MAAKa,KAAL,CAAWM,KAAX,CAAiB2F,QAAjB,CAA0B1B,IAA1B,KAAmCjE,KAAK,CAAC2F,QAAN,CAAe1B,IAAlD,GACA,IADA,GAEA,MAAKvE,KAAL,CAAWD,kBAJf;;AAMA,UAAIA,kBAAkB,IAAI,MAAKC,KAAL,CAAWD,kBAArC,EAAyD;AACvD,cAAK+J,aAAL,CAAmB,MAAKxK,KAAxB;AACD;;AAED,YAAKM,QAAL,CAAc;AAAEU,QAAAA,KAAK,EAALA,KAAF;AAASP,QAAAA,kBAAkB,EAAlBA;AAAT,OAAd,EAA6C,YAAM;AACjD3B,QAAAA,GAAG,CAAC,yBAAD,CAAH;;AAEA,YAAI4D,IAAJ,EAAU;AACRA,UAAAA,IAAI;AACL;AACF,OAND;AAOD,KA1pBkB;AAAA,wGA4pBD,YAAM;AACtB,UAAI,MAAKhC,KAAL,CAAWM,KAAX,CAAiBiI,SAArB,EAAgC;AAC9B,eAAO,MAAKvI,KAAL,CAAWM,KAAlB;AACD;;AAED,aAAO,MAAKN,KAAL,CAAW0H,YAAlB;AACD,KAlqBkB;AAAA,oGAoqBL,UAACqC,CAAD,EAAO;AACnB,UAAI,CAACA,CAAL,EAAQ;AACN;AACD;;AACD,UAAMC,SAAS,GAAG,gBAAlB;;AAEA,UAAI,OAAOD,CAAP,KAAa,QAAjB,EAA2B;AACzB,YAAIA,CAAC,CAACE,QAAF,CAAW,GAAX,CAAJ,EAAqB;AACnB,iBAAOC,SAAP;AACD,SAFD,MAEO,IACLH,CAAC,CAACE,QAAF,CAAW,IAAX,KACAF,CAAC,CAACE,QAAF,CAAW,IAAX,CADA,IAEAF,CAAC,CAACE,QAAF,CAAW,IAAX,CAFA,IAGAF,CAAC,CAACE,QAAF,CAAW,IAAX,CAHA,IAIAF,CAAC,CAACE,QAAF,CAAW,IAAX,CAJA,IAKAF,CAAC,CAACI,KAAF,CAAQH,SAAR,CANK,EAOL;AACA,iBAAOD,CAAP;AACD,SATM,MASA;AACL,cAAMzJ,KAAK,GAAG8J,QAAQ,CAACL,CAAD,EAAI,EAAJ,CAAtB;AACA,iBAAOM,KAAK,CAAC/J,KAAD,CAAL,GAAeA,KAAf,aAA0BA,KAA1B,OAAP;AACD;AACF;;AACD,UAAI,OAAOyJ,CAAP,KAAa,QAAjB,EAA2B;AACzB,yBAAUA,CAAV;AACD;AACF,KA9rBkB;AAAA,qGA6sBJ,UAAChI,IAAD,EAAU;AACvB,UAAIA,IAAI,CAACuI,MAAL,KAAgB,OAApB,EAA6B;AAE7B,UAAMC,IAAI,GAAGxI,IAAI,CAACyI,KAAL,CAAWD,IAAX,EAAb;AACA,UAAI,CAACA,IAAL,EAAW;AAEX,UAAIA,IAAI,CAAC3F,IAAL,KAAc,OAAlB,EAA2B;AAE3BxG,MAAAA,GAAG,CAAC,gCAAD,CAAH;AAEA,UAAMqM,MAAM,GAAGF,IAAI,CAACG,SAAL,CAAeH,IAAI,CAAC9H,GAApB,CAAf;;AACA,UAAM4G,CAAC,GAAGsB,aAAMD,SAAN,CAAgBH,IAAI,CAAC9H,GAArB,CAAV;;AACArE,MAAAA,GAAG,CAAC,wBAAD,EAA2BqM,MAA3B,EAAmCpB,CAAnC,CAAH;AAEA,aAAOa,SAAP;AACD,KA5tBkB;AAAA,mGA8tBN,UAACzH,GAAD,EAAMP,IAAN,EAAe;AAC1B9D,MAAAA,GAAG,CAAC,mBAAD,EAAsBqE,GAAtB,EAA2BP,IAA3B,CAAH;AAEA;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEI;AACA;;AAEA,YAAK0G,uBAAL,GAA+B;AAAEnG,QAAAA,GAAG,EAAHA,GAAF;AAAOP,QAAAA,IAAI,EAAJA;AAAP,OAA/B;AACD,KA/uBkB;AAAA,8FAivBX,UAAC0I,GAAD,EAAM7I,IAAN,EAAe;AACrB,UAAMzD,QAAQ,GAAGsM,GAAG,IAAI,KAAxB;;AAEA,YAAKtL,KAAL,CAAW6F,KAAX,CAAiB7G,QAAjB,EAA2ByD,IAA3B;AACD,KArvBkB;AAAA;AAAA,gGAuvBL,iBAAOiF,KAAP,EAAc3B,MAAd,EAAsBwF,WAAtB;AAAA;;AAAA;AAAA;AAAA;AAAA;AACNzG,gBAAAA,MADM,GACGiB,MAAM,CAACjB,MADV;AAEN0G,gBAAAA,QAFM,GAEK,kCAAiB9D,KAAjB,CAFL;AAGN+D,gBAAAA,IAHM,GAGCD,QAAQ,CAACE,KAAT,IAAkBF,QAAQ,CAACE,KAAT,CAAe,CAAf,CAHnB;AAKNpG,gBAAAA,IALM,GAKCkG,QAAQ,CAAClG,IALV;AAMNqG,gBAAAA,QANM,GAMKH,QAAQ,CAACG,QANd;AAON1G,gBAAAA,IAPM,GAOCuG,QAAQ,CAACvG,IAPV;;AAAA,sBASRwG,IAAI,KAAKA,IAAI,CAACnG,IAAL,KAAc,YAAd,IAA8BmG,IAAI,CAACnG,IAAL,KAAc,WAA5C,IAA2DmG,IAAI,CAACnG,IAAL,KAAc,WAA9E,CATI;AAAA;AAAA;AAAA;;AAAA,oBAUL,MAAKtF,KAAL,CAAWwC,YAVN;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAcR1D,gBAAAA,GAAG,CAAC,eAAD,CAAH;AAdQ;AAAA,uBAeU,6BAAU2M,IAAV,CAfV;;AAAA;AAeF9I,gBAAAA,GAfE;AAgBFiJ,gBAAAA,MAhBE,GAgBOC,cAAOC,MAAP,CAAc;AAC3BxG,kBAAAA,IAAI,EAAE,OADqB;AAE3ByG,kBAAAA,MAAM,EAAE,IAFmB;AAG3BnJ,kBAAAA,IAAI,EAAE;AACJoJ,oBAAAA,OAAO,EAAE,KADL;AAEJrJ,oBAAAA,GAAG,EAAHA;AAFI;AAHqB,iBAAd,CAhBP;;AAyBR,oBAAI4I,WAAJ,EAAiB;AACf,wBAAK1F,KAAL;AACD,iBAFD,MAEO;AACCoG,kBAAAA,KADD,GACS,+BAAcvE,KAAd,EAAqB5C,MAArB,CADT;;AAEL,sBAAImH,KAAJ,EAAW;AACTlG,oBAAAA,MAAM,CAACmG,MAAP,CAAcD,KAAd;AACD;AACF;;AAEKE,gBAAAA,EAlCE,GAkCGpG,MAAM,CAACqG,YAAP,CAAoBR,MAApB,CAlCH;;AAmCR,sBAAK1J,QAAL,CAAciK,EAAd;;AACMnI,gBAAAA,OApCE,GAoCQ,IAAIqI,8BAAJ,CACdT,MADc,EAEd,YAAM,CAAE,CAFM,EAGd;AAAA,yBAAM,MAAKlL,KAAL,CAAWM,KAAjB;AAAA,iBAHc,EAId,MAAKkB,QAJS,EAKd,IALc,CApCR;AA2CR8B,gBAAAA,OAAO,CAACsI,UAAR,CAAmBb,IAAnB;;AACA,sBAAKzL,KAAL,CAAWwC,YAAX,CAAwByB,GAAxB,CAA4BD,OAA5B;;AA5CQ;AAAA;;AAAA;AAAA;AAAA;AA8CRlF,gBAAAA,GAAG,CAAC,uBAAD,cAAH;;AA9CQ;AAAA;AAAA;;AAAA;AAAA,sBAgDDwG,IAAI,KAAK,UAhDR;AAAA;AAAA;AAAA;;AAiDVS,gBAAAA,MAAM,CAACwG,cAAP,CAAsBZ,QAAtB;AAjDU;AAAA;;AAAA;AAAA,sBAkDDrG,IAAI,KAAK,MAAT,IAAmBA,IAAI,KAAK,MAlD3B;AAAA;AAAA;AAAA;;AAAA,oBAmDLL,IAnDK;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA,gCAwDNc,MAxDM,CAuDR/E,KAvDQ,EAuDC2F,SAvDD,iBAuDCA,QAvDD,EAuDW6F,SAvDX,iBAuDWA,SAvDX,EAuDsBC,UAvDtB,iBAuDsBA,UAvDtB;;AAAA,qBA0DNA,UAAU,CAACV,MA1DL;AAAA;AAAA;AAAA;;AAAA;;AAAA;AA8DJW,gBAAAA,YA9DI,GA8DWD,UA9DX;AA+DJE,gBAAAA,YA/DI,GA+DWhG,SAAQ,CAACiG,qBAAT,CAA+BJ,SAA/B,CA/DX;AAgEJK,gBAAAA,IAhEI,GAgEGC,iCAAMC,WAAN,CAAkB9H,IAAlB,EAAwB;AACnCyH,kBAAAA,YAAY,EAAZA,YADmC;AAEnCC,kBAAAA,YAAY,EAAZA;AAFmC,iBAAxB,EAGVhG,QAnEO;AAoEVZ,gBAAAA,MAAM,CAACwG,cAAP,CAAsBM,IAAtB;;AApEU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAvvBK;;AAAA;AAAA;AAAA;AAAA;AAAA,0GA+zBC,UAAC7M,KAAD,EAAW;AAC7B,UAAQ8E,MAAR,GAAmB9E,KAAnB,CAAQ8E,MAAR;AACA,UAAQ6B,QAAR,GAAqB7B,MAAM,CAAC9D,KAA5B,CAAQ2F,QAAR;;AAEA,UAAI,CAAC7B,MAAM,CAAC9E,KAAP,CAAagN,WAAd,IAA6BrG,QAAQ,CAAC1B,IAAT,KAAkB,EAA/C,IAAqD0B,QAAQ,CAACuE,KAAT,CAAe+B,IAAf,KAAwB,CAA7E,IAAkF,CAACtG,QAAQ,CAACuG,OAAhG,EAAyG;AACvG,eAAO,KAAP;AACD;;AAED,0BACE;AACE,QAAA,eAAe,EAAE,KADnB;AAEE,QAAA,KAAK,EAAE;AACLC,UAAAA,OAAO,EAAE,cADJ;AAELC,UAAAA,KAAK,EAAE,aAFF;AAEiB;AACtBC,UAAAA,QAAQ,EAAE,MAHL;AAILC,UAAAA,UAAU,EAAE,QAJP;AAKLC,UAAAA,OAAO,EAAE,MALJ;AAMLC,UAAAA,aAAa,EAAE,MANV;AAOLC,UAAAA,UAAU,EAAE;AAPP;AAFT,SAYG3I,MAAM,CAAC9E,KAAP,CAAagN,WAZhB,CADF;AAgBD,KAv1BkB;AAEjB,UAAKtM,KAAL,GAAa;AACXM,MAAAA,KAAK,EAAEhB,MAAK,CAACgB,KADF;AAEXrB,MAAAA,WAAW,EAAED,iBAAiB,CAACM,MAAK,CAACL,WAAP,EAAoBK,MAAK,CAACJ,KAA1B,CAFnB;AAGXoD,MAAAA,aAAa,EAAE,EAHJ;AAIXnD,MAAAA,UAAU,EAAE,KAJD;AAKXY,MAAAA,kBAAkB,EAAE,KALT;AAMXoE,MAAAA,YAAY,EAAE,KANH;AAOXtE,MAAAA,MAAM,EAAE;AACNJ,QAAAA,IAAI,EAAE;AADA;AAPG,KAAb;AAYA,UAAKuF,kBAAL,gBAA0BgI,kBAAMC,SAAN,EAA1B;AACA,UAAK3F,aAAL,gBAAqB0F,kBAAMC,SAAN,EAArB;AACA,UAAKzN,yBAAL,GAAiC,KAAjC;AAEA,UAAKe,cAAL,GAAsB,MAAKA,cAAL,CAAoB8C,IAApB,gDAAtB;AACA,UAAK6J,kBAAL,GAA0B,MAAKA,kBAAL,CAAwB7J,IAAxB,gDAA1B;AACA,UAAK8J,iBAAL,GAAyB,MAAKA,iBAAL,CAAuB9J,IAAvB,gDAAzB;;AAEA,UAAK+J,QAAL,GAAgB,YAAM;AACpB,UAAI,CAAC,MAAKpN,KAAL,CAAWb,UAAZ,IAA0BG,MAAK,CAACkC,QAApC,EAA8C;AAC5ClC,QAAAA,MAAK,CAACkC,QAAN,CAAe,MAAKxB,KAAL,CAAWM,KAA1B,EAAiC,IAAjC;AACD;AACF,KAJD;;AAMA,UAAKwJ,aAAL,CAAmB,MAAKxK,KAAxB;;AA5BiB;AA6BlB;;;;WAED,8BAAqB;AACnB,UAAI,KAAKU,KAAL,CAAWmE,YAAf,EAA6B;AAC3B;AACD;;AAED,WAAKvE,QAAL,CAAc;AAAEuE,QAAAA,YAAY,EAAE;AAAhB,OAAd;AACD;;;WAMD,6BAAoB;AAAA;;AAClB2D,MAAAA,UAAU,CAAC,YAAM;AACf,YAAI,CAAC,MAAI,CAACuF,oBAAL,EAAL,EAAkC;AAChC,UAAA,MAAI,CAACzN,QAAL,CAAc;AAAEuE,YAAAA,YAAY,EAAE;AAAhB,WAAd;AACD;AACF,OAJS,EAIP,CAJO,CAAV;AAKD;;;WAED,gCAAuB;AACrB,UAAI,CAAC,KAAK+C,UAAV,EAAsB,OAAO,KAAP;AACtB,UAAMD,cAAc,GAAG,KAAKC,UAA5B;AACA,UAAMgB,aAAa,GAAGjC,QAAQ,CAACiC,aAA/B;AAEA,aAAOjB,cAAc,IAAIA,cAAc,CAACmB,QAAf,CAAwBF,aAAxB,CAAzB;AACD;;;WA6LD,6BAAoB;AAAA;AAAA;;AAClB;AACA,WAAK5I,KAAL,CAAWgO,KAAX,CAAiB,IAAjB;AAEA7E,MAAAA,MAAM,CAACM,gBAAP,CAAwB,QAAxB,EAAkC,KAAKqE,QAAvC;AAEA,UAAMG,oBAAoB,4BAAG,KAAKjO,KAAL,CAAW8H,SAAd,0DAAG,sBAAsBoG,QAAtB,CAA+B,sBAA/B,CAA7B;;AAEA,UAAID,oBAAoB,IAAI,KAAKnJ,MAAjC,EAAyC;AACvC,YAAMqJ,kBAAkB,GAAGxH,QAAQ,CAAC4B,aAAT,uBAAqC,KAAKzD,MAAL,CAAY9D,KAAZ,CAAkB2F,QAAlB,CAA2BxD,GAAhE,SAA3B;;AAEA,YAAIgL,kBAAJ,EAAwB;AACtBA,UAAAA,kBAAkB,CAACC,YAAnB,CAAgC,YAAhC,EAA8C,QAA9C;AACD;AACF;;AAED,UAAI,KAAKtJ,MAAL,IAAe,KAAK9E,KAAL,CAAWqO,SAA9B,EAAyC;AACvClG,QAAAA,OAAO,CAACV,OAAR,GAAkBtC,IAAlB,CAAuB,YAAM;AAC3B,cAAI,MAAI,CAACL,MAAT,EAAiB;AACf,gBAAMwD,SAAS,GAAG3B,QAAQ,CAAC4B,aAAT,uBAAqC,MAAI,CAACzD,MAAL,CAAY9D,KAAZ,CAAkB2F,QAAlB,CAA2BxD,GAAhE,SAAlB;;AAEA,YAAA,MAAI,CAAC2B,MAAL,CAAYe,KAAZ;;AAEA,gBAAIyC,SAAJ,EAAe;AACbA,cAAAA,SAAS,CAACzC,KAAV;AACD;AACF;AACF,SAVD;AAWD;AACF;;;WAED,0CAAiCyI,SAAjC,EAA4C;AAAA;;AAC1C,yBAAoC,KAAK5N,KAAzC;AAAA,UAAQb,UAAR,gBAAQA,UAAR;AAAA,UAAoBF,WAApB,gBAAoBA,WAApB;AACA,UAAMgB,cAAc,GAAGjB,iBAAiB,CAAC4O,SAAS,CAAC3O,WAAX,EAAwB2O,SAAS,CAAC1O,KAAlC,EAAyCC,UAAzC,CAAxC;;AAEA,UAAI,CAAC,yBAAQc,cAAR,EAAwBhB,WAAxB,CAAL,EAA2C;AACzC,aAAKW,QAAL,CAAc;AACZX,UAAAA,WAAW,EAAEgB;AADD,SAAd;AAGD;;AAED,UAAM4N,uBAAuB,GAAG,CAAC,yBAAQD,SAAS,CAAC7I,uBAAlB,EAA2C,KAAKzF,KAAL,CAAWyF,uBAAtD,CAAjC;AACA,UAAM+I,oBAAoB,GAAG,CAAC,yBAAQF,SAAS,CAACvM,aAAlB,EAAiC,KAAK/B,KAAL,CAAW+B,aAA5C,CAA9B;AACA,UAAM0M,gCAAgC,GACpC,CAAC,yBAAQH,SAAS,CAACpK,aAAlB,EAAiC,KAAKlE,KAAL,CAAWkE,aAA5C,CAAD,IACA,CAAC,yBAAQoK,SAAS,CAACnK,cAAlB,EAAkC,KAAKnE,KAAL,CAAWmE,cAA7C,CAFH;;AAIA,UAAIoK,uBAAuB,IAAIC,oBAA3B,IAAmDC,gCAAvD,EAAyF;AACvF,aAAKjE,aAAL,CAAmB8D,SAAnB;AACD;;AAED,UAAI,sBAACA,SAAS,CAACtN,KAAX,sEAAC,iBAAiB2F,QAAlB,kDAAC,sBAA2B+H,MAA3B,sBAAkC,KAAK1O,KAAL,CAAWgB,KAA7C,sDAAkC,kBAAkB2F,QAApD,CAAD,CAAJ,EAAoE;AAClE,aAAKrG,QAAL,CAAc;AACZuF,UAAAA,KAAK,EAAE,KADK;AAEZ7E,UAAAA,KAAK,EAAEsN,SAAS,CAACtN;AAFL,SAAd;AAID;AACF;;;WAED,4BAAmB2N,SAAnB,EAA8BnO,SAA9B,EAAyC;AACvC;AACA;AAEA;AACA;AACA;AACA,UACE,KAAKE,KAAL,CAAWb,UAAX,KAA0BW,SAAS,CAACX,UAApC,IACC,KAAKa,KAAL,CAAWb,UAAX,IAAyB,CAACW,SAAS,CAACC,kBAApC,IAA0D,KAAKC,KAAL,CAAWD,kBAFxE,EAGE;AACA,aAAK+J,aAAL,CAAmB,KAAKxK,KAAxB;AACD;;AAED,UAAM4O,YAAY,GAAGjI,QAAQ,CAACkI,gBAAT,CAA0B,6BAA1B,CAArB;AAEAC,MAAAA,KAAK,CAACC,IAAN,CAAWH,YAAX,EAAyBI,OAAzB,CAAiC,UAACC,EAAD,EAAQ;AACvCA,QAAAA,EAAE,CAACC,KAAH,CAASC,QAAT,GAAoB,KAApB;AACAF,QAAAA,EAAE,CAACC,KAAH,CAAS/B,OAAT,GAAmB,cAAnB;AACD,OAHD;AAID;;;;AAoHD;AACF;AACA;AACE,oCAAuB;AACrBhE,MAAAA,MAAM,CAACJ,mBAAP,CAA2B,QAA3B,EAAqC,KAAK+E,QAA1C;AACD,K,CAED;;;;WAgQA,0BAAiB;AACf,wBAAoE,KAAK9N,KAAzE;AAAA,UAAQmP,QAAR,eAAQA,QAAR;AAAA,UAAkB/B,KAAlB,eAAkBA,KAAlB;AAAA,UAAyBC,QAAzB,eAAyBA,QAAzB;AAAA,UAAmC+B,SAAnC,eAAmCA,SAAnC;AAAA,UAA8CC,MAA9C,eAA8CA,MAA9C;AAAA,UAAsDC,SAAtD,eAAsDA,SAAtD;AAEA,aAAO;AACLlC,QAAAA,KAAK,EAAE,KAAKmC,WAAL,CAAiBnC,KAAjB,CADF;AAEL+B,QAAAA,QAAQ,EAAE,KAAKI,WAAL,CAAiBJ,QAAjB,CAFL;AAGL9B,QAAAA,QAAQ,EAAE,KAAKkC,WAAL,CAAiBlC,QAAjB,CAHL;AAILgC,QAAAA,MAAM,EAAE,KAAKE,WAAL,CAAiBF,MAAjB,CAJH;AAKLD,QAAAA,SAAS,EAAE,KAAKG,WAAL,CAAiBH,SAAjB,CALN;AAMLE,QAAAA,SAAS,EAAE,KAAKC,WAAL,CAAiBD,SAAjB;AANN,OAAP;AAQD;;;WA8ID,kBAAS;AAAA;AAAA;AAAA;AAAA;;AACP,yBAUI,KAAKtP,KAVT;AAAA,UACEwP,QADF,gBACEA,QADF;AAAA,UAEEC,UAFF,gBAEEA,UAFF;AAAA,UAGEC,cAHF,gBAGEA,cAHF;AAAA,UAIE3I,OAJF,gBAIEA,OAJF;AAAA,UAKEe,SALF,gBAKEA,SALF;AAAA,UAME6H,QANF,gBAMEA,QANF;AAAA,UAOE3C,WAPF,gBAOEA,WAPF;AAAA,UAQE5L,WARF,gBAQEA,WARF;AAAA,UASEwO,SATF,gBASEA,SATF,CADO,CAYP;AACA;AACA;AACA;;AACA,kBAAmFxO,WAAW,IAAI,EAAlG;AAAA,UAAQC,aAAR,SAAQA,aAAR;AAAA,UAAuBwO,cAAvB,SAAuBA,cAAvB;AAAA,UAAuCC,kBAAvC,SAAuCA,kBAAvC;AAAA,UAA8DC,gBAA9D;;AAEA,yBAA+D,KAAKrP,KAApE;AAAA,UAAQM,KAAR,gBAAQA,KAAR;AAAA,UAAe4D,WAAf,gBAAeA,WAAf;AAAA,UAA4BjF,WAA5B,gBAA4BA,WAA5B;AAAA,UAAyCY,MAAzC,gBAAyCA,MAAzC;AAAA,UAAiD8C,SAAjD,gBAAiDA,SAAjD;AAEAvE,MAAAA,GAAG,CAAC,kBAAD,EAAqBkC,KAArB,CAAH;AACA,UAAMgP,SAAS,GAAG,KAAKC,cAAL,EAAlB;AACA,UAAMC,KAAK,GAAG,6FAETnJ,OAAO,CAACoJ,MAFC,EAEQT,cAFR,iDAGT3I,OAAO,CAACqJ,YAHC,EAGczQ,WAAW,CAACT,aAAZ,IAA6BS,WAAW,CAACX,QAAZ,KAAyB,KAHpE,iDAIT+H,OAAO,CAAC1D,SAJC,EAIWA,SAJX,iBAMZyE,SANY,CAAd;AASA,0BACE;AACE,QAAA,GAAG,EAAE,aAACd,KAAD;AAAA,iBAAU,MAAI,CAAC0B,UAAL,GAAkB1B,KAA5B;AAAA,SADP;AAEE,QAAA,KAAK,EAAE;AAAEoG,UAAAA,KAAK,EAAE4C,SAAS,CAAC5C,KAAnB;AAA0B+B,UAAAA,QAAQ,EAAEa,SAAS,CAACb,QAA9C;AAAwD9B,UAAAA,QAAQ,EAAE2C,SAAS,CAAC3C;AAA5E,SAFT;AAGE,QAAA,SAAS,EAAE6C,KAHb;AAIE,QAAA,EAAE,mBAAYlP,KAAZ,aAAYA,KAAZ,0CAAYA,KAAK,CAAE2F,QAAnB,oDAAY,gBAAiBxD,GAA7B;AAJJ,SAMGE,SAAS,iBAAI;AAAK,QAAA,SAAS,EAAE0D,OAAO,CAACsJ;AAAxB,8CANhB,eAOE,gCAAC,kBAAD;AACE,QAAA,OAAO,EAAE,KAAK/O,OADhB;AAEE,QAAA,QAAQ,EAAE,kBAACgP,CAAD,EAAO;AACf,cAAIA,CAAJ,EAAO;AACL,YAAA,MAAI,CAACC,WAAL,GAAmBD,CAAnB;AACD;AACF,SANH;AAOE,QAAA,GAAG,EAAE,aAACA,CAAD;AAAA,iBAAQ,MAAI,CAACxL,MAAL,GAAcwL,CAAC,IAAI,MAAI,CAACtQ,KAAL,CAAWwQ,SAAX,CAAqBF,CAArB,CAA3B;AAAA,SAPP;AAQE,QAAA,UAAU,EAAE,oBAACA,CAAD,EAAO;AACjB,cAAIA,CAAJ,EAAO;AACL,YAAA,MAAI,CAAC1I,UAAL,GAAkB0I,CAAlB;AACD;AACF,SAZH;AAaE,QAAA,aAAa,EAAE,KAAKtI,aAbtB;AAcE,QAAA,KAAK,EAAEhH,KAdT;AAeE,QAAA,YAAY,EAAE,KAAKN,KAAL,CAAWmE,YAf3B;AAgBE,QAAA,cAAc,EAAE,KAAK+I,kBAhBvB;AAiBE,QAAA,aAAa,EAAE,KAAKC,iBAjBtB;AAkBE,QAAA,KAAK,EAAE,KAAKhI,KAlBd;AAmBE,QAAA,SAAS,EAAE+J,SAnBb;AAoBE,QAAA,QAAQ,EAAE,KAAK1N,QApBjB;AAqBE,QAAA,eAAe,EAAE,KAAKuO,eArBxB;AAsBE,QAAA,MAAM,EAAE,KAAK5O,MAtBf;AAuBE,QAAA,MAAM,EAAE,gBAAC6F,KAAD,EAAQ5C,MAAR;AAAA,iBAAmB,MAAI,CAAC4L,WAAL,CAAiBhJ,KAAjB,EAAwB5C,MAAxB,EAAgC,IAAhC,CAAnB;AAAA,SAvBV;AAwBE,QAAA,OAAO,EAAE,iBAAC4C,KAAD,EAAQ5C,MAAR;AAAA,iBAAmB,MAAI,CAAC4L,WAAL,CAAiBhJ,KAAjB,EAAwB5C,MAAxB,CAAnB;AAAA,SAxBX;AAyBE,QAAA,OAAO,EAAE,KAAKnD,OAzBhB;AA0BE,QAAA,aAAa,EAAE,KAAKmC,aA1BtB;AA2BE,QAAA,WAAW,EAAEc,WA3Bf;AA4BE,QAAA,SAAS,EAAE,KAAK+L,SA5BlB;AA6BE,QAAA,QAAQ,EAAEnB,QA7BZ;AA8BE,QAAA,UAAU,EAAEC,UA9Bd;AA+BE,QAAA,WAAW,EAAEA,UA/Bf;AAgCE,QAAA,SAAS,EAAE,+FAEN1I,OAAO,CAAC6J,SAFF,EAEcjR,WAFd,aAEcA,WAFd,uBAEcA,WAAW,CAAEiR,SAF3B,kDAGN7J,OAAO,CAAC8J,aAHF,EAGkBhB,cAAc,IAAI,CAACA,cAAc,CAACL,QAHpD,kDAINzI,OAAO,CAAC+J,iBAJF,EAIsBhB,kBAAkB,IAAI,CAACA,kBAAkB,CAACN,QAJhE,kBAMTzI,OAAO,CAACwJ,WANC,CAhCb;AAwCE,QAAA,KAAK,EAAE;AACLnB,UAAAA,SAAS,EAAEY,SAAS,CAACZ,SADhB;AAELC,UAAAA,MAAM,EAAEW,SAAS,CAACX,MAFb;AAGLC,UAAAA,SAAS,EAAEU,SAAS,CAACV;AAHhB,SAxCT;AA6CE,QAAA,WAAW,EAAES,gBA7Cf;AA8CE,QAAA,WAAW,EAAEpQ,WA9Cf;AA+CE,QAAA,WAAW,EAAEqN,WA/Cf;AAgDE,QAAA,iBAAiB,EAAE,KAAK+D,iBAhD1B;AAiDE,QAAA,YAAY,EAAE,KAAKC;AAjDrB,QAPF,eA0DE,gCAAC,uBAAD;AACE,QAAA,IAAI,EAAEzQ,MAAM,CAACJ,IADf;AAEE,QAAA,KAAK,EAAEI,MAAM,CAAC2G,KAFhB;AAGE,QAAA,IAAI,EAAE3G,MAAM,CAAC0E,IAHf;AAIE,QAAA,OAAO,EAAE1E,MAAM,CAACgH,OAJlB;AAKE,QAAA,SAAS,EAAEhH,MAAM,CAAC8G,SALpB;AAME,QAAA,aAAa,EAAE9G,MAAM,CAAC4G,aANxB;AAOE,QAAA,WAAW,EAAE5G,MAAM,CAAC6G;AAPtB,QA1DF,CADF;AAsED;;;EA3iCyBsG,kBAAMuD,S,GA8iClC;;;;iCA9iCalR,M,eACQ;AACjBsO,EAAAA,SAAS,EAAE6C,sBAAUC,IADJ;AAEjBX,EAAAA,SAAS,EAAEU,sBAAUE,IAAV,CAAeC,UAFT;AAGjBzR,EAAAA,KAAK,EAAEsR,sBAAUI,GAHA;AAIjBtD,EAAAA,KAAK,EAAEkD,sBAAUE,IAAV,CAAeC,UAJL;AAKjBnP,EAAAA,QAAQ,EAAEgP,sBAAUE,IAAV,CAAeC,UALR;AAMjB1P,EAAAA,OAAO,EAAEuP,sBAAUE,IANF;AAOjBvP,EAAAA,MAAM,EAAEqP,sBAAUE,IAPD;AAQjBxB,EAAAA,SAAS,EAAEsB,sBAAUE,IARJ;AASjBvL,EAAAA,KAAK,EAAEqL,sBAAUE,IAAV,CAAeC,UATL;AAUjBrQ,EAAAA,KAAK,EAAEuQ,2BAAWvQ,KAAX,CAAiBqQ,UAVP;AAWjB7O,EAAAA,YAAY,EAAE0O,sBAAUlG,MAXP;AAYjBjJ,EAAAA,aAAa,EAAEmP,sBAAUM,KAAV,CAAgB;AAC7BvL,IAAAA,SAAS,EAAEiL,sBAAUC,IADQ;AAE7BjL,IAAAA,UAAU,EAAEgL,sBAAUC;AAFO,GAAhB,CAZE;AAgBjB7O,EAAAA,4BAA4B,EAAE4O,sBAAUC,IAhBvB;AAiBjBnL,EAAAA,kBAAkB,EAAEkL,sBAAUM,KAAV,CAAgB;AAClCvN,IAAAA,GAAG,EAAEiN,sBAAUE,IADmB;AAElC,cAAQF,sBAAUE;AAFgB,GAAhB,CAjBH;AAqBjB9G,EAAAA,eAAe,EAAE4G,sBAAUO,MArBV;AAsBjBrE,EAAAA,KAAK,EAAE8D,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB,CAtBU;AAuBjBtC,EAAAA,QAAQ,EAAE+B,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB,CAvBO;AAwBjBpE,EAAAA,QAAQ,EAAE6D,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB,CAxBO;AAyBjBpC,EAAAA,MAAM,EAAE6B,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB,CAzBS;AA0BjBrC,EAAAA,SAAS,EAAE8B,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB,CA1BM;AA2BjBnC,EAAAA,SAAS,EAAE4B,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB,CA3BM;AA4BjB1K,EAAAA,OAAO,EAAEmK,sBAAUlG,MAAV,CAAiBqG,UA5BT;AA6BjB3B,EAAAA,cAAc,EAAEwB,sBAAUC,IA7BT;AA8BjB3B,EAAAA,QAAQ,EAAE0B,sBAAUC,IA9BH;AA+BjB1B,EAAAA,UAAU,EAAEyB,sBAAUC,IA/BL;AAgCjBzM,EAAAA,QAAQ,EAAEwM,sBAAUC,IAhCH;AAiCjB9M,EAAAA,gBAAgB,EAAE6M,sBAAUC,IAjCX;AAkCjB7M,EAAAA,gBAAgB,EAAE4M,sBAAUC,IAlCX;AAmCjB3M,EAAAA,gBAAgB,EAAE0M,sBAAUC,IAnCX;AAoCjB/P,EAAAA,WAAW,EAAE8P,sBAAUI,GApCN;AAqCjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAtE,EAAAA,WAAW,EAAEkE,sBAAUS,MA9CN;AA+CjBhC,EAAAA,QAAQ,EAAEuB,sBAAUC,IA/CH;AAgDjBtQ,EAAAA,iBAAiB,EAAEqQ,sBAAUM,KAAV,CAAgB;AACjClM,IAAAA,IAAI,EAAE4L,sBAAUU,KAAV,CAAgB,CACpB,+BADoB,EAEpB,iBAFoB,EAGpB,mBAHoB,EAIpB,gBAJoB,CAAhB,CAD2B;AAOjCtS,IAAAA,OAAO,EAAE4R,sBAAUlG,MAPc;AAQjCzL,IAAAA,eAAe,EAAE2R,sBAAUE,IARM;AASjC5R,IAAAA,kBAAkB,EAAE0R,sBAAUE,IATG;AAUjC7L,IAAAA,gBAAgB,EAAE2L,sBAAUO,MAVK;AAWjC7R,IAAAA,KAAK,EAAEsR,sBAAUI;AAXgB,GAAhB,CAhDF;AA6DjBlP,EAAAA,aAAa,EAAE8O,sBAAUM,KAAV,CAAgB;AAC7BtB,IAAAA,KAAK,EAAEgB,sBAAUW,OAAV,CAAkBX,sBAAUS,MAA5B,CADsB;AAE7BG,IAAAA,KAAK,EAAEZ,sBAAUS;AAFY,GAAhB,CA7DE;AAiEjBlM,EAAAA,uBAAuB,EAAEyL,sBAAUW,OAAV,CACvBX,sBAAUM,KAAV,CAAgB;AACdO,IAAAA,QAAQ,EAAEb,sBAAUS,MADN;AAEdK,IAAAA,aAAa,EAAEd,sBAAUS,MAFX;AAGdM,IAAAA,UAAU,EAAEf,sBAAUW,OAAV,CAAkBX,sBAAUW,OAAV,CAAkBX,sBAAUS,MAA5B,CAAlB;AAHE,GAAhB,CADuB,CAjER;AAwEjBxL,EAAAA,wBAAwB,EAAE+K,sBAAUE,IAxEnB;AAyEjBzR,EAAAA,WAAW,EAAEuR,sBAAUM,KAAV,CAAgB;AAC3BxS,IAAAA,QAAQ,EAAEkS,sBAAUU,KAAV,CAAgB,CAAC,QAAD,EAAW,KAAX,CAAhB,CADiB;AAE3B3S,IAAAA,SAAS,EAAEiS,sBAAUU,KAAV,CAAgB,CAAC,MAAD,EAAS,OAAT,CAAhB,CAFgB;AAG3B1S,IAAAA,aAAa,EAAEgS,sBAAUC,IAHE;AAI3BhS,IAAAA,QAAQ,EAAE+R,sBAAUC,IAJO;AAK3B/R,IAAAA,MAAM,EAAE8R,sBAAUS,MALS;AAM3BxC,IAAAA,QAAQ,EAAE+B,sBAAUQ,SAAV,CAAoB,CAACR,sBAAUS,MAAX,EAAmBT,sBAAUO,MAA7B,CAApB;AANiB,GAAhB,CAzEI;AAiFjBlQ,EAAAA,aAAa,EAAE2P,sBAAUW,OAAV,CAAkB,UAACK,MAAD,EAAY;AAC3C,QAAMC,QAAQ,GAAGD,MAAM,CAACE,KAAP,CAAa,UAAC3H,CAAD;AAAA,aAAO4H,qBAAYnE,QAAZ,CAAqBzD,CAArB,CAAP;AAAA,KAAb,CAAjB;AAEA,WAAO,CAAC0H,QAAD,IAAa,IAAIG,KAAJ,2BAA6BJ,MAA7B,sCAA+DG,qBAAYE,IAAZ,CAAiB,GAAjB,CAA/D,OAApB;AACD,GAJc,CAjFE;AAsFjBzK,EAAAA,SAAS,EAAEoJ,sBAAUS,MAtFJ;AAuFjBzN,EAAAA,aAAa,EAAEgN,sBAAUO,MAvFR;AAwFjBtN,EAAAA,cAAc,EAAE+M,sBAAUO;AAxFT,C;iCADR1R,M,kBA4FW;AACpBuE,EAAAA,gBAAgB,EAAE,IADE;AAEpB3C,EAAAA,OAAO,EAAE,mBAAM,CAAE,CAFG;AAGpBE,EAAAA,MAAM,EAAE,kBAAM,CAAE,CAHI;AAIpB+N,EAAAA,SAAS,EAAE,qBAAM,CAAE,CAJC;AAKpBzJ,EAAAA,wBAAwB,EAAE,oCAAM,CAAE,CALd;AAMpBpE,EAAAA,aAAa,EAAE;AACbkE,IAAAA,SAAS,EAAE,KADE;AAEbC,IAAAA,UAAU,EAAE;AAFC,GANK;AAUpBvG,EAAAA,WAAW,EAAEZ,kBAVO;AAWpB8B,EAAAA,iBAAiB,EAAExB,wBAXC;AAYpBoG,EAAAA,uBAAuB,EAAEhG,8BAZL;AAapB2C,EAAAA,aAAa,EAAE,IAbK;AAcpBuN,EAAAA,QAAQ,EAAE;AAdU,C;AAm9BxB,IAAM6C,MAAM,GAAG;AACbrC,EAAAA,MAAM,EAAE;AACNsC,IAAAA,eAAe,EAAE;AADX,GADK;AAIbpP,EAAAA,SAAS,EAAE;AACTkK,IAAAA,OAAO,EAAE,GADA;AAETC,IAAAA,aAAa,EAAE,MAFN;AAGTxO,IAAAA,QAAQ,EAAE;AAHD,GAJE;AASbqR,EAAAA,SAAS,EAAE;AACTrR,IAAAA,QAAQ,EAAE,UADD;AAET0T,IAAAA,GAAG,EAAE,KAFI;AAGTC,IAAAA,IAAI,EAAE,KAHG;AAITC,IAAAA,SAAS,EAAE;AAJF,GATE;AAebrC,EAAAA,WAAW,EAAE;AACXsC,IAAAA,UAAU,EAAE,oBADD;AAGX,eAAW;AACTC,MAAAA,WAAW,EAAE,OADJ;AAET1F,MAAAA,KAAK,EAAE,MAFE;AAGT2F,MAAAA,cAAc,EAAE,UAHP;AAITC,MAAAA,KAAK,EAAEA,aAAM/N,IAAN,EAJE;AAKTwN,MAAAA,eAAe,EAAEO,aAAMC,UAAN;AALR,KAHA;AAUX,oCAAgC;AAC9BC,MAAAA,SAAS,EAAE,mBADmB,CAE9B;AACA;AACA;AACA;;AAL8B,KAVrB;AAiBX,gBAAY;AACVC,MAAAA,OAAO,EAAE,UADC;AAEVnR,MAAAA,SAAS,EAAE;AAFD,KAjBD;AAqBX,wCAAoC;AAClCoR,MAAAA,MAAM,EAAE;AAD0B;AArBzB,GAfA;AAwCbvC,EAAAA,aAAa,EAAE;AACb;AACA,iCAA6B;AAC3B1D,MAAAA,OAAO,EAAE,OADkB;AAE3BkG,MAAAA,OAAO,EAAE,KAFkB;AAG3BC,MAAAA,QAAQ,EAAE,KAHiB;AAI3BN,MAAAA,KAAK,EAAE;AAJoB;AAFhB,GAxCF;AAiDblC,EAAAA,iBAAiB,EAAE;AACjB;AACA,0BAAsB;AACpByC,MAAAA,YAAY,EAAE;AADM;AAFL,GAjDN;AAuDbnD,EAAAA,YAAY,EAAE;AACZoD,IAAAA,SAAS,EAAE;AADC,GAvDD;AA0Db5C,EAAAA,SAAS,EAAE;AACTuC,IAAAA,OAAO,EAAE;AADA,GA1DE;AA6DbvM,EAAAA,WAAW,EAAE;AACX2M,IAAAA,YAAY,EAAE,MADH;AAEXC,IAAAA,SAAS,EAAE,KAFA;AAGXL,IAAAA,OAAO,EAAE,MAHE;AAIXV,IAAAA,eAAe,EAAE;AAJN;AA7DA,CAAf;;eAqEe,wBAAWD,MAAX,EAAmBzS,MAAnB,C","sourcesContent":["import React from 'react';\nimport { Editor as SlateEditor, findNode, getEventRange, getEventTransfer } from 'slate-react';\nimport SlateTypes from 'slate-prop-types';\nimport { Value, Block, Inline } from 'slate';\nimport Plain from 'slate-plain-serializer';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport classNames from 'classnames';\nimport debug from 'debug';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport { color } from '../../render-ui/src/index';\nimport AlertDialog from '../../config-ui/src/alert-dialog';\nimport { PreviewPrompt } from '../../render-ui/src/index';\n\nimport { getBase64, htmlToValue } from './serialization';\nimport InsertImageHandler from './plugins/image/insert-image-handler';\nimport * as serialization from './serialization';\nimport { buildPlugins, ALL_PLUGINS, DEFAULT_PLUGINS } from './plugins';\n\nexport { ALL_PLUGINS, DEFAULT_PLUGINS, serialization };\n\nconst log = debug('editable-html:editor');\n\nconst defaultToolbarOpts = {\n position: 'bottom',\n alignment: 'left',\n alwaysVisible: false,\n showDone: true,\n doneOn: 'blur',\n};\n\nconst defaultResponseAreaProps = {\n options: {},\n respAreaToolbar: () => {},\n onHandleAreaChange: () => {},\n};\n\nconst defaultLanguageCharactersProps = [];\n\nconst createToolbarOpts = (toolbarOpts, error, isHtmlMode) => {\n return {\n ...defaultToolbarOpts,\n ...toolbarOpts,\n error,\n isHtmlMode,\n };\n};\n\n/**\n * The maximum number of characters the editor can support\n * @type {number}\n */\nconst MAX_CHARACTERS_LIMIT = 1000000;\n\nexport class Editor extends React.Component {\n static propTypes = {\n autoFocus: PropTypes.bool,\n editorRef: PropTypes.func.isRequired,\n error: PropTypes.any,\n onRef: PropTypes.func.isRequired,\n onChange: PropTypes.func.isRequired,\n onFocus: PropTypes.func,\n onBlur: PropTypes.func,\n onKeyDown: PropTypes.func,\n focus: PropTypes.func.isRequired,\n value: SlateTypes.value.isRequired,\n imageSupport: PropTypes.object,\n mathMlOptions: PropTypes.shape({\n mmlOutput: PropTypes.bool,\n mmlEditing: PropTypes.bool,\n }),\n disableImageAlignmentButtons: PropTypes.bool,\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func,\n }),\n charactersLimit: PropTypes.number,\n width: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n minHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n maxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n classes: PropTypes.object.isRequired,\n highlightShape: PropTypes.bool,\n disabled: PropTypes.bool,\n spellCheck: PropTypes.bool,\n nonEmpty: PropTypes.bool,\n disableScrollbar: PropTypes.bool,\n disableUnderline: PropTypes.bool,\n autoWidthToolbar: PropTypes.bool,\n pluginProps: PropTypes.any,\n // customPlugins should be inside pluginProps (a property inside pluginProps)\n // customPlugins: PropTypes.arrayOf(\n // PropTypes.shape({\n // event: PropTypes.string,\n // icon: PropTypes.string,\n // iconType: PropTypes.string,\n // iconAlt: PropTypes.string\n // }),\n // ),\n placeholder: PropTypes.string,\n isEditor: PropTypes.bool,\n responseAreaProps: PropTypes.shape({\n type: PropTypes.oneOf([\n 'explicit-constructed-response',\n 'inline-dropdown',\n 'drag-in-the-blank',\n 'math-templated',\n ]),\n options: PropTypes.object,\n respAreaToolbar: PropTypes.func,\n onHandleAreaChange: PropTypes.func,\n maxResponseAreas: PropTypes.number,\n error: PropTypes.any,\n }),\n extraCSSRules: PropTypes.shape({\n names: PropTypes.arrayOf(PropTypes.string),\n rules: PropTypes.string,\n }),\n languageCharactersProps: PropTypes.arrayOf(\n PropTypes.shape({\n language: PropTypes.string,\n characterIcon: PropTypes.string,\n characters: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),\n }),\n ),\n runSerializationOnMarkup: PropTypes.func,\n toolbarOpts: PropTypes.shape({\n position: PropTypes.oneOf(['bottom', 'top']),\n alignment: PropTypes.oneOf(['left', 'right']),\n alwaysVisible: PropTypes.bool,\n showDone: PropTypes.bool,\n doneOn: PropTypes.string,\n minWidth: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n }),\n activePlugins: PropTypes.arrayOf((values) => {\n const allValid = values.every((v) => ALL_PLUGINS.includes(v));\n\n return !allValid && new Error(`Invalid values: ${values}, values must be one of [${ALL_PLUGINS.join(',')}]`);\n }),\n className: PropTypes.string,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n };\n\n static defaultProps = {\n disableUnderline: true,\n onFocus: () => {},\n onBlur: () => {},\n onKeyDown: () => {},\n runSerializationOnMarkup: () => {},\n mathMlOptions: {\n mmlOutput: false,\n mmlEditing: false,\n },\n toolbarOpts: defaultToolbarOpts,\n responseAreaProps: defaultResponseAreaProps,\n languageCharactersProps: defaultLanguageCharactersProps,\n extraCSSRules: null,\n isEditor: false,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n value: props.value,\n toolbarOpts: createToolbarOpts(props.toolbarOpts, props.error),\n pendingImages: [],\n isHtmlMode: false,\n isEditedInHtmlMode: false,\n focusToolbar: false,\n dialog: {\n open: false,\n },\n };\n\n this.keyPadCharacterRef = React.createRef();\n this.doneButtonRef = React.createRef();\n this.keypadInteractionDetected = false;\n\n this.toggleHtmlMode = this.toggleHtmlMode.bind(this);\n this.handleToolbarFocus = this.handleToolbarFocus.bind(this);\n this.handleToolbarBlur = this.handleToolbarBlur.bind(this);\n\n this.onResize = () => {\n if (!this.state.isHtmlMode && props.onChange) {\n props.onChange(this.state.value, true);\n }\n };\n\n this.handlePlugins(this.props);\n }\n\n handleToolbarFocus() {\n if (this.state.focusToolbar) {\n return;\n }\n\n this.setState({ focusToolbar: true });\n }\n\n setKeypadInteraction = (interacted) => {\n this.keypadInteractionDetected = interacted;\n };\n\n handleToolbarBlur() {\n setTimeout(() => {\n if (!this.toolbarContainsFocus()) {\n this.setState({ focusToolbar: false });\n }\n }, 0);\n }\n\n toolbarContainsFocus() {\n if (!this.toolbarRef) return false;\n const toolbarElement = this.toolbarRef;\n const activeElement = document.activeElement;\n\n return toolbarElement && toolbarElement.contains(activeElement);\n }\n\n handleDialog = (open, extraDialogProps = {}, callback) => {\n this.setState(\n {\n dialog: {\n open,\n ...extraDialogProps,\n },\n },\n callback,\n );\n };\n\n toggleHtmlMode = () => {\n this.setState(\n (prevState) => ({\n isHtmlMode: !prevState.isHtmlMode,\n isEditedInHtmlMode: false,\n }),\n () => {\n const { error } = this.props;\n const { toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(toolbarOpts, error, this.state.isHtmlMode);\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n },\n );\n };\n\n handlePlugins = (props) => {\n const normalizedResponseAreaProps = {\n ...defaultResponseAreaProps,\n ...props.responseAreaProps,\n };\n\n const htmlPluginOpts = {\n currentValue: this.props.value,\n isHtmlMode: this.state.isHtmlMode,\n isEditedInHtmlMode: this.state.isEditedInHtmlMode,\n toggleHtmlMode: this.toggleHtmlMode,\n handleAlertDialog: this.handleDialog,\n };\n let { customPlugins } = props.pluginProps || {};\n customPlugins = customPlugins || [];\n\n this.plugins = buildPlugins(props.activePlugins, customPlugins, {\n math: {\n onClick: this.onMathClick,\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n ...props.mathMlOptions,\n },\n textAlign: {\n getValue: () => this.state.value,\n onChange: this.onChange,\n },\n html: htmlPluginOpts,\n extraCSSRules: props.extraCSSRules || {},\n image: {\n disableImageAlignmentButtons: props.disableImageAlignmentButtons,\n onDelete:\n props.imageSupport &&\n props.imageSupport.delete &&\n ((node, done) => {\n const src = node.data.get('src');\n\n props.imageSupport.delete(src, (e) => {\n const newPendingImages = this.state.pendingImages.filter((img) => img.key !== node.key);\n const { scheduled: oldScheduled } = this.state;\n const newState = {\n pendingImages: newPendingImages,\n scheduled: oldScheduled && newPendingImages.length === 0 ? false : oldScheduled,\n };\n\n this.setState(newState, () => done(e, this.state.value));\n });\n }),\n insertImageRequested:\n props.imageSupport &&\n ((addedImage, getHandler) => {\n const { pendingImages } = this.state;\n const onFinish = (result) => {\n let cb;\n\n if (this.state.scheduled && result) {\n // finish editing only on success\n cb = this.onEditingDone.bind(this);\n }\n\n const newPendingImages = this.state.pendingImages.filter((img) => img.key !== addedImage.key);\n const newState = {\n pendingImages: newPendingImages,\n };\n\n if (newPendingImages.length === 0) {\n newState.scheduled = false;\n }\n\n this.setState(newState, cb);\n };\n const callback = () => {\n /**\n * The handler is the object through which the outer context\n * communicates file upload events like: fileChosen, cancel, progress\n */\n const handler = getHandler(onFinish, () => this.state.value);\n props.imageSupport.add(handler);\n };\n\n this.setState(\n {\n pendingImages: [...pendingImages, addedImage],\n },\n callback,\n );\n }),\n onFocus: this.onPluginFocus,\n onBlur: this.onPluginBlur,\n maxImageWidth: props.maxImageWidth,\n maxImageHeight: props.maxImageHeight,\n },\n toolbar: {\n /**\n * To minimize converting html -> state -> html\n * We only emit markup once 'done' is clicked.\n */\n disableScrollbar: !!props.disableScrollbar,\n disableUnderline: props.disableUnderline,\n autoWidth: props.autoWidthToolbar,\n onDone: () => {\n const { nonEmpty } = props;\n\n log('[onDone]');\n this.setState({ toolbarInFocus: false, focusedNode: null, focusToolbar: false });\n this.editor.blur();\n\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n });\n } else {\n this.onEditingDone();\n }\n },\n },\n table: {\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n },\n },\n responseArea: {\n type: normalizedResponseAreaProps.type,\n options: normalizedResponseAreaProps.options,\n maxResponseAreas: normalizedResponseAreaProps.maxResponseAreas,\n respAreaToolbar: normalizedResponseAreaProps.respAreaToolbar,\n onHandleAreaChange: normalizedResponseAreaProps.onHandleAreaChange,\n error: normalizedResponseAreaProps.error,\n onFocus: () => {\n log('[table:onFocus]...');\n this.onPluginFocus();\n },\n onBlur: () => {\n log('[table:onBlur]...');\n this.onPluginBlur();\n },\n },\n languageCharacters: props.languageCharactersProps,\n keyPadCharacterRef: this.keyPadCharacterRef,\n setKeypadInteraction: this.setKeypadInteraction,\n media: {\n focus: this.focus,\n createChange: () => this.state.value.change(),\n onChange: this.onChange,\n uploadSoundSupport: props.uploadSoundSupport,\n },\n });\n\n if (props.mathMlOptions.mmlOutput || props.mathMlOptions.mmlEditing) {\n this.props.runSerializationOnMarkup();\n }\n };\n\n componentDidMount() {\n // onRef is needed to get the ref of the component because we export it using withStyles\n this.props.onRef(this);\n\n window.addEventListener('resize', this.onResize);\n\n const isResponseAreaEditor = this.props.className?.includes('response-area-editor');\n\n if (isResponseAreaEditor && this.editor) {\n const responseAreaEditor = document.querySelector(`[data-key=\"${this.editor.value.document.key}\"]`);\n\n if (responseAreaEditor) {\n responseAreaEditor.setAttribute('aria-label', 'Answer');\n }\n }\n\n if (this.editor && this.props.autoFocus) {\n Promise.resolve().then(() => {\n if (this.editor) {\n const editorDOM = document.querySelector(`[data-key=\"${this.editor.value.document.key}\"]`);\n\n this.editor.focus();\n\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n });\n }\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { isHtmlMode, toolbarOpts } = this.state;\n const newToolbarOpts = createToolbarOpts(nextProps.toolbarOpts, nextProps.error, isHtmlMode);\n\n if (!isEqual(newToolbarOpts, toolbarOpts)) {\n this.setState({\n toolbarOpts: newToolbarOpts,\n });\n }\n\n const differentCharacterProps = !isEqual(nextProps.languageCharactersProps, this.props.languageCharactersProps);\n const differentMathMlProps = !isEqual(nextProps.mathMlOptions, this.props.mathMlOptions);\n const differentImageMaxDimensionsProps =\n !isEqual(nextProps.maxImageWidth, this.props.maxImageWidth) ||\n !isEqual(nextProps.maxImageHeight, this.props.maxImageHeight);\n\n if (differentCharacterProps || differentMathMlProps || differentImageMaxDimensionsProps) {\n this.handlePlugins(nextProps);\n }\n\n if (!nextProps.value?.document?.equals(this.props.value?.document)) {\n this.setState({\n focus: false,\n value: nextProps.value,\n });\n }\n }\n\n componentDidUpdate(prevProps, prevState) {\n // The cursor is on a zero width element and when that is placed near void elements, it is not visible\n // so we increase the width to at least 2px in order for the user to see it\n\n // Trigger plugins and finish editing if:\n // 1. The 'isHtmlMode' state has been toggled.\n // 2. We're currently in 'isHtmlMode' and the editor value has been modified.\n if (\n this.state.isHtmlMode !== prevState.isHtmlMode ||\n (this.state.isHtmlMode && !prevState.isEditedInHtmlMode && this.state.isEditedInHtmlMode)\n ) {\n this.handlePlugins(this.props);\n }\n\n const zeroWidthEls = document.querySelectorAll('[data-slate-zero-width=\"z\"]');\n\n Array.from(zeroWidthEls).forEach((el) => {\n el.style.minWidth = '2px';\n el.style.display = 'inline-block';\n });\n }\n\n onPluginBlur = (e) => {\n log('[onPluginBlur]', e && e.relatedTarget);\n const target = e && e.relatedTarget;\n\n const node = target ? findNode(target, this.state.value) : null;\n log('[onPluginBlur] node: ', node);\n this.setState({ focusedNode: node }, () => {\n this.resetValue();\n });\n };\n\n onPluginFocus = (e) => {\n log('[onPluginFocus]', e && e.target);\n const target = e && e.target;\n if (target) {\n const node = findNode(target, this.state.value);\n log('[onPluginFocus] node: ', node);\n\n const stashedValue = this.state.stashedValue || this.state.value;\n this.setState({ focusedNode: node, stashedValue });\n } else {\n this.setState({ focusedNode: null });\n }\n this.stashValue();\n };\n\n onMathClick = (node) => {\n this.editor.change((c) => c.collapseToStartOf(node));\n this.setState({ selectedNode: node });\n };\n\n onEditingDone = () => {\n const { isHtmlMode, dialog, value, pendingImages } = this.state;\n\n // Handling HTML mode and dialog state\n if (isHtmlMode) {\n // Early return if HTML mode is enabled\n if (dialog?.open) return;\n\n const currentValue = htmlToValue(value.document.text);\n const previewText = this.renderHtmlPreviewContent();\n\n this.openHtmlModeConfirmationDialog(currentValue, previewText);\n return;\n }\n\n if (pendingImages.length) {\n // schedule image processing\n this.setState({ scheduled: true });\n return;\n }\n\n // Finalizing editing\n log('[onEditingDone]');\n this.setState({ pendingImages: [], stashedValue: null, focusedNode: null });\n log('[onEditingDone] value: ', this.state.value);\n this.props.onChange(this.state.value, true);\n };\n\n /**\n * Renders the HTML preview content to be displayed inside the dialog.\n * This content includes the edited HTML and a prompt for the user.\n */\n renderHtmlPreviewContent = () => {\n const { classes } = this.props;\n return (\n <div ref={(ref) => (this.elementRef = ref)}>\n <div>Preview of Edited Html:</div>\n <PreviewPrompt defaultClassName={classes.previewText} prompt={this.state.value.document.text} />\n <div>Would you like to save these changes ?</div>\n </div>\n );\n };\n\n /**\n * Opens a confirmation dialog in HTML mode, displaying the preview of the current HTML content\n * and offering options to save or continue editing.\n */\n openHtmlModeConfirmationDialog = (currentValue, previewText) => {\n this.setState({\n dialog: {\n open: true,\n title: 'Content Preview & Save',\n text: previewText,\n onConfirmText: 'Save changes',\n onCloseText: 'Continue editing',\n onConfirm: () => {\n this.handleHtmlModeSaveConfirmation(currentValue);\n },\n onClose: this.htmlModeContinueEditing,\n },\n });\n };\n\n /**\n * Handles the save confirmation action in HTML mode. This updates the value to the confirmed\n * content, updates value on props, and exits the HTML mode.\n * @param {string} currentValue - The confirmed value of the HTML content to save.\n */\n handleHtmlModeSaveConfirmation = (currentValue) => {\n this.setState({ value: currentValue });\n this.props.onChange(currentValue, true);\n this.handleDialog(false);\n this.toggleHtmlMode();\n };\n\n /**\n * Closes the dialog in HTML mode and allows the user to continue editing the html content.\n * This function is invoked when the user opts to not save the current changes.\n */\n htmlModeContinueEditing = () => {\n this.handleDialog(false);\n };\n\n /**\n * Remove onResize event listener\n */\n componentWillUnmount() {\n window.removeEventListener('resize', this.onResize);\n }\n\n // Allowing time for onChange to take effect if it is called\n handleBlur = (resolve) => {\n const { nonEmpty } = this.props;\n const {\n toolbarOpts: { doneOn },\n } = this.state;\n\n this.setState({ toolbarInFocus: false, focusedNode: null });\n\n if (this.editor) {\n this.editor.blur();\n }\n\n if (doneOn === 'blur') {\n if (nonEmpty && this.state.value.startText?.text?.length === 0) {\n this.resetValue(true).then(() => {\n this.onEditingDone();\n resolve();\n });\n } else {\n this.onEditingDone();\n resolve();\n }\n }\n };\n\n onBlur = (event) => {\n log('[onBlur]');\n const relatedTarget = event.relatedTarget;\n const toolbarElement = this.toolbarRef && relatedTarget?.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n\n // Check if relatedTarget is a done button\n const isRawDoneButton =\n this.doneButtonRef && relatedTarget?.closest(`[class*=\"${this.doneButtonRef.current?.className}\"]`);\n\n // Skip onBlur handling if relatedTarget is a button from the KeyPad characters\n this.skipBlurHandling = this.keypadInteractionDetected && relatedTarget !== null;\n\n if (toolbarElement && !isRawDoneButton && !this.state.focusToolbar) {\n this.setState({\n focusToolbar: true,\n });\n }\n\n const node = relatedTarget ? findNode(relatedTarget, this.state.value) : null;\n\n log('[onBlur] node: ', node);\n\n return new Promise((resolve) => {\n if (!this.skipBlurHandling) {\n this.setKeypadInteraction(false);\n this.setState(\n { preBlurValue: this.state.value, focusedNode: !node ? null : node },\n this.handleBlur.bind(this, resolve),\n );\n }\n\n this.props.onBlur(event);\n });\n };\n\n handleDomBlur = (e) => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n\n setTimeout(() => {\n const { value: stateValue } = this.state;\n\n if (!this.wrapperRef) {\n return;\n }\n\n const editorElement = !editorDOM || document.activeElement.closest(`[class*=\"${editorDOM.className}\"]`);\n const toolbarElement =\n !this.toolbarRef || document.activeElement.closest(`[class*=\"${this.toolbarRef.className}\"]`);\n const isInCurrentComponent = this.wrapperRef.contains(editorElement) || this.wrapperRef.contains(toolbarElement);\n\n if (!isInCurrentComponent) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n\n if (stateValue.isFocused) {\n this.onBlur(e);\n }\n }\n }, 50);\n };\n\n /*\n * Needs to be wrapped otherwise it causes issues because of race conditions\n * Known issue for slatejs. See: https://github.com/ianstormtaylor/slate/issues/2097\n * Using timeout I wasn't able to test this\n *\n * Note: The use of promises has been causing issues with MathQuill\n * */\n onFocus = (event, change) =>\n new Promise((resolve) => {\n const editorDOM = document.querySelector(`[data-key=\"${this.state.value.document.key}\"]`);\n const isTouchDevice =\n typeof window !== 'undefined' && ('ontouchstart' in window || navigator?.maxTouchPoints > 0);\n\n log('[onFocus]', document.activeElement);\n\n if (this.keypadInteractionDetected && this.__TEMPORARY_CHANGE_DATA) {\n this.__TEMPORARY_CHANGE_DATA = null;\n }\n\n /**\n * This is a temporary hack - @see changeData below for some more information.\n */\n if (this.__TEMPORARY_CHANGE_DATA) {\n const { key, data } = this.__TEMPORARY_CHANGE_DATA;\n const domEl = document.querySelector(`[data-key=\"${key}\"]`);\n\n if (domEl) {\n let change = this.state.value.change().setNodeByKey(key, { data });\n this.setState({ value: change.value }, () => {\n this.__TEMPORARY_CHANGE_DATA = null;\n });\n }\n }\n\n /**\n * This is needed just in case the browser decides to make the editor\n * lose focus without triggering the onBlur event (can happen in a few cases).\n * This will also trigger onBlur if the user clicks outside of the page when the editor\n * is focused.\n */\n if (editorDOM === document.activeElement) {\n editorDOM.removeEventListener('blur', this.handleDomBlur);\n editorDOM.addEventListener('blur', this.handleDomBlur);\n }\n\n this.stashValue();\n this.props.onFocus();\n\n // Added for accessibility: Ensures the editor gains focus when tabbed to for improved keyboard navigation\n const shouldFocusEditor = !this.keypadInteractionDetected && !isTouchDevice;\n\n if (shouldFocusEditor) {\n change?.focus();\n }\n\n resolve();\n });\n\n stashValue = () => {\n log('[stashValue]');\n\n if (!this.state.stashedValue) {\n this.setState({ stashedValue: this.state.value });\n }\n };\n\n /**\n * Reset the value if the user didn't click done.\n */\n resetValue = (force) => {\n const { value, focusedNode } = this.state;\n\n const stopReset = this.plugins.reduce((s, p) => {\n return s || (p.stopReset && p.stopReset(this.state.value));\n }, false);\n\n log('[resetValue]', value.isFocused, focusedNode, 'stopReset: ', stopReset);\n if ((this.state.stashedValue && !value.isFocused && !focusedNode && !stopReset) || force) {\n log('[resetValue] resetting...');\n log('stashed', this.state.stashedValue.document.toObject());\n log('current', this.state.value.document.toObject());\n\n const newValue = Value.fromJSON(this.state.stashedValue.toJSON());\n\n log('newValue: ', newValue.document);\n return new Promise((resolve) => {\n setTimeout(() => {\n this.setState({ value: newValue, stashedValue: null }, () => {\n log('value now: ', this.state.value.document.toJSON());\n resolve();\n });\n }, 50);\n });\n } else {\n return Promise.resolve({});\n }\n };\n\n onChange = (change, done) => {\n log('[onChange]');\n window.me = this;\n\n const { value } = change;\n const { charactersLimit } = this.props;\n let limit = charactersLimit;\n if (!limit || limit > MAX_CHARACTERS_LIMIT) {\n limit = MAX_CHARACTERS_LIMIT;\n }\n\n if (value && value.document && value.document.text && value.document.text.length > limit) {\n return;\n }\n\n // Mark the editor as edited when in HTML mode and its content has changed.\n // This status will later be used to decide whether to prompt a warning to the user when exiting HTML mode.\n const isEditedInHtmlMode = !this.state.isHtmlMode\n ? false\n : this.state.value.document.text !== value.document.text\n ? true\n : this.state.isEditedInHtmlMode;\n\n if (isEditedInHtmlMode != this.state.isEditedInHtmlMode) {\n this.handlePlugins(this.props);\n }\n\n this.setState({ value, isEditedInHtmlMode }, () => {\n log('[onChange], call done()');\n\n if (done) {\n done();\n }\n });\n };\n\n getFocusedValue = () => {\n if (this.state.value.isFocused) {\n return this.state.value;\n }\n\n return this.state.preBlurValue;\n };\n\n valueToSize = (v) => {\n if (!v) {\n return;\n }\n const calcRegex = /^calc\\((.*)\\)$/;\n\n if (typeof v === 'string') {\n if (v.endsWith('%')) {\n return undefined;\n } else if (\n v.endsWith('px') ||\n v.endsWith('vh') ||\n v.endsWith('vw') ||\n v.endsWith('ch') ||\n v.endsWith('em') ||\n v.match(calcRegex)\n ) {\n return v;\n } else {\n const value = parseInt(v, 10);\n return isNaN(value) ? value : `${value}px`;\n }\n }\n if (typeof v === 'number') {\n return `${v}px`;\n }\n };\n\n buildSizeStyle() {\n const { minWidth, width, maxWidth, minHeight, height, maxHeight } = this.props;\n\n return {\n width: this.valueToSize(width),\n minWidth: this.valueToSize(minWidth),\n maxWidth: this.valueToSize(maxWidth),\n height: this.valueToSize(height),\n minHeight: this.valueToSize(minHeight),\n maxHeight: this.valueToSize(maxHeight),\n };\n }\n\n validateNode = (node) => {\n if (node.object !== 'block') return;\n\n const last = node.nodes.last();\n if (!last) return;\n\n if (last.type !== 'image') return;\n\n log('[validateNode] last is image..');\n\n const parent = last.getParent(last.key);\n const p = Block.getParent(last.key);\n log('[validateNode] parent:', parent, p);\n\n return undefined;\n };\n\n changeData = (key, data) => {\n log('[changeData]. .. ', key, data);\n\n /**\n * HACK ALERT: We should be calling setState here and storing the change data:\n *\n * <code>this.setState({changeData: { key, data}})</code>\n * However this is causing issues with the Mathquill instance. The 'input' event stops firing on the element and no\n * more changes get through. The issues seem to be related to the promises in onBlur/onFocus. But removing these\n * brings it's own problems. A major clean up is planned for this component so I've decided to temporarily settle\n * on this hack rather than spend more time on this.\n */\n\n // Uncomment this line to see the bug described above.\n // this.setState({changeData: {key, data}})\n\n this.__TEMPORARY_CHANGE_DATA = { key, data };\n };\n\n focus = (pos, node) => {\n const position = pos || 'end';\n\n this.props.focus(position, node);\n };\n\n onDropPaste = async (event, change, dropContext) => {\n const editor = change.editor;\n const transfer = getEventTransfer(event);\n const file = transfer.files && transfer.files[0];\n\n const type = transfer.type;\n const fragment = transfer.fragment;\n const text = transfer.text;\n\n if (file && (file.type === 'image/jpeg' || file.type === 'image/jpg' || file.type === 'image/png')) {\n if (!this.props.imageSupport) {\n return;\n }\n try {\n log('[onDropPaste]');\n const src = await getBase64(file);\n const inline = Inline.create({\n type: 'image',\n isVoid: true,\n data: {\n loading: false,\n src,\n },\n });\n\n if (dropContext) {\n this.focus();\n } else {\n const range = getEventRange(event, editor);\n if (range) {\n change.select(range);\n }\n }\n\n const ch = change.insertInline(inline);\n this.onChange(ch);\n const handler = new InsertImageHandler(\n inline,\n () => {},\n () => this.state.value,\n this.onChange,\n true,\n );\n handler.fileChosen(file);\n this.props.imageSupport.add(handler);\n } catch (err) {\n log('[onDropPaste] error: ', err);\n }\n } else if (type === 'fragment') {\n change.insertFragment(fragment);\n } else if (type === 'text' || type === 'html') {\n if (!text) {\n return;\n }\n const {\n value: { document, selection, startBlock },\n } = change;\n\n if (startBlock.isVoid) {\n return;\n }\n\n const defaultBlock = startBlock;\n const defaultMarks = document.getInsertMarksAtRange(selection);\n const frag = Plain.deserialize(text, {\n defaultBlock,\n defaultMarks,\n }).document;\n change.insertFragment(frag);\n }\n };\n\n renderPlaceholder = (props) => {\n const { editor } = props;\n const { document } = editor.value;\n\n if (!editor.props.placeholder || document.text !== '' || document.nodes.size !== 1 || !document.isEmpty) {\n return false;\n }\n\n return (\n <span\n contentEditable={false}\n style={{\n display: 'inline-block',\n width: 'fit-content', // for centering the placeholder if text-align is set to center\n maxWidth: '100%',\n whiteSpace: 'nowrap',\n opacity: '0.33',\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n >\n {editor.props.placeholder}\n </span>\n );\n };\n\n render() {\n const {\n disabled,\n spellCheck,\n highlightShape,\n classes,\n className,\n isEditor,\n placeholder,\n pluginProps,\n onKeyDown,\n } = this.props;\n // We don't want to send customPlugins to slate.\n // Not sure if they would do any harm, but I think it's better to not send them.\n // We use custom plugins to be able to add custom buttons\n // eslint-disable-next-line no-unused-vars\n const { customPlugins, showParagraphs, separateParagraphs, ...otherPluginProps } = pluginProps || {};\n\n const { value, focusedNode, toolbarOpts, dialog, scheduled } = this.state;\n\n log('[render] value: ', value);\n const sizeStyle = this.buildSizeStyle();\n const names = classNames(\n {\n [classes.withBg]: highlightShape,\n [classes.toolbarOnTop]: toolbarOpts.alwaysVisible && toolbarOpts.position === 'top',\n [classes.scheduled]: scheduled,\n },\n className,\n );\n\n return (\n <div\n ref={(ref) => (this.wrapperRef = ref)}\n style={{ width: sizeStyle.width, minWidth: sizeStyle.minWidth, maxWidth: sizeStyle.maxWidth }}\n className={names}\n id={`editor-${value?.document?.key}`}\n >\n {scheduled && <div className={classes.uploading}>Uploading image and then saving...</div>}\n <SlateEditor\n plugins={this.plugins}\n innerRef={(r) => {\n if (r) {\n this.slateEditor = r;\n }\n }}\n ref={(r) => (this.editor = r && this.props.editorRef(r))}\n toolbarRef={(r) => {\n if (r) {\n this.toolbarRef = r;\n }\n }}\n doneButtonRef={this.doneButtonRef}\n value={value}\n focusToolbar={this.state.focusToolbar}\n onToolbarFocus={this.handleToolbarFocus}\n onToolbarBlur={this.handleToolbarBlur}\n focus={this.focus}\n onKeyDown={onKeyDown}\n onChange={this.onChange}\n getFocusedValue={this.getFocusedValue}\n onBlur={this.onBlur}\n onDrop={(event, editor) => this.onDropPaste(event, editor, true)}\n onPaste={(event, editor) => this.onDropPaste(event, editor)}\n onFocus={this.onFocus}\n onEditingDone={this.onEditingDone}\n focusedNode={focusedNode}\n normalize={this.normalize}\n readOnly={disabled}\n spellCheck={spellCheck}\n autoCorrect={spellCheck}\n className={classNames(\n {\n [classes.noPadding]: toolbarOpts?.noPadding,\n [classes.showParagraph]: showParagraphs && !showParagraphs.disabled,\n [classes.separateParagraph]: separateParagraphs && !separateParagraphs.disabled,\n },\n classes.slateEditor,\n )}\n style={{\n minHeight: sizeStyle.minHeight,\n height: sizeStyle.height,\n maxHeight: sizeStyle.maxHeight,\n }}\n pluginProps={otherPluginProps}\n toolbarOpts={toolbarOpts}\n placeholder={placeholder}\n renderPlaceholder={this.renderPlaceholder}\n onDataChange={this.changeData}\n />\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n onConfirmText={dialog.onConfirmText}\n onCloseText={dialog.onCloseText}\n />\n </div>\n );\n }\n}\n\n// TODO color - hardcoded gray background and keypad colors will need to change too\nconst styles = {\n withBg: {\n backgroundColor: 'rgba(0,0,0,0.06)',\n },\n scheduled: {\n opacity: 0.5,\n pointerEvents: 'none',\n position: 'relative',\n },\n uploading: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n slateEditor: {\n fontFamily: 'Roboto, sans-serif',\n\n '& table': {\n tableLayout: 'fixed',\n width: '100%',\n borderCollapse: 'collapse',\n color: color.text(),\n backgroundColor: color.background(),\n },\n '& table:not([border=\"1\"]) tr': {\n borderTop: '1px solid #dfe2e5',\n // TODO perhaps secondary color for background, for now disable\n // '&:nth-child(2n)': {\n // backgroundColor: '#f6f8fa'\n // }\n },\n '& td, th': {\n padding: '.6em 1em',\n textAlign: 'center',\n },\n '& table:not([border=\"1\"]) td, th': {\n border: '1px solid #dfe2e5',\n },\n },\n showParagraph: {\n // a div that has a div after it\n '& > div:has(+ div)::after': {\n display: 'block',\n content: '\"¶\"',\n fontSize: '1em',\n color: '#146EB3',\n },\n },\n separateParagraph: {\n // a div that has a div after it\n '& > div:has(+ div)': {\n marginBottom: '1em',\n },\n },\n toolbarOnTop: {\n marginTop: '45px',\n },\n noPadding: {\n padding: '0 !important',\n },\n previewText: {\n marginBottom: '36px',\n marginTop: '6px',\n padding: '20px',\n backgroundColor: 'rgba(0,0,0,0.06)',\n },\n};\n\nexport default withStyles(styles)(Editor);\n"],"file":"editor.js"}
package/lib/index.js CHANGED
@@ -266,4 +266,4 @@ exports["default"] = EditableHtml;
266
266
  onDone: function onDone() {},
267
267
  allowValidation: false
268
268
  });
269
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qc3giXSwibmFtZXMiOlsibG9nIiwiRWRpdGFibGVIdG1sIiwicHJvcHMiLCJtYXJrdXAiLCJ2Iiwic2V0U3RhdGUiLCJ2YWx1ZSIsImRvbmUiLCJodG1sIiwiaHRtbFBhcnNlZCIsIm9uQ2hhbmdlIiwib25Eb25lIiwicG9zaXRpb24iLCJub2RlIiwic2VsZWN0IiwiZWRpdG9yUmVmIiwiY2hhbmdlIiwiYyIsImxhc3RUZXh0IiwiZG9jdW1lbnQiLCJnZXROZXh0VGV4dCIsImtleSIsImdldExhc3RUZXh0IiwiZWRpdG9yRE9NIiwicXVlcnlTZWxlY3RvciIsImFjdGl2ZUVsZW1lbnQiLCJibHVyIiwiZm9jdXMiLCJtb3ZlRm9jdXNUbyIsInRleHQiLCJsZW5ndGgiLCJtb3ZlQW5jaG9yVG8iLCJyYW5nZSIsIlJhbmdlIiwiZnJvbUpTT04iLCJhbmNob3JLZXkiLCJhbmNob3JPZmZzZXQiLCJmb2N1c0tleSIsImZvY3VzT2Zmc2V0IiwiaXNGb2N1c2VkIiwiaXNCYWNrd2FyZCIsIm9uRWRpdGluZ0RvbmUiLCJleHRyYUNTU1J1bGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiZXh0cmFDU1NSdWxlc09wdHMiLCJzdGF0ZSIsImFsbG93VmFsaWRhdGlvbiIsImN1cnJlbnQiLCJlcXVhbHMiLCJ0b29sYmFyT3B0cyIsImVycm9yIiwicnVuU2VyaWFsaXphdGlvbk9uTWFya3VwIiwicmVmIiwicm9vdFJlZiIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiYW55IiwiZnVuYyIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJib29sIiwib2JqZWN0Iiwic2hhcGUiLCJuYW1lcyIsImFycmF5T2YiLCJydWxlcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7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RlI7QUFHakJqRCxFQUFBQSxNQUFNLEVBQUU4QyxzQkFBVUUsSUFIRDtBQUlqQnhELEVBQUFBLE1BQU0sRUFBRXNELHNCQUFVSSxNQUFWLENBQWlCRCxVQUpSO0FBS2pCYixFQUFBQSxlQUFlLEVBQUVVLHNCQUFVSyxJQUxWO0FBTWpCWixFQUFBQSxXQUFXLEVBQUVPLHNCQUFVTSxNQU5OO0FBT2pCckIsRUFBQUEsYUFBYSxFQUFFZSxzQkFBVU8sS0FBVixDQUFnQjtBQUM3QkMsSUFBQUEsS0FBSyxFQUFFUixzQkFBVVMsT0FBVixDQUFrQlQsc0JBQVVJLE1BQTVCLENBRHNCO0FBRTdCTSxJQUFBQSxLQUFLLEVBQUVWLHNCQUFVSTtBQUZZLEdBQWhCO0FBUEUsQztpQ0FEQTVELFksa0JBY0c7QUFDcEJVLEVBQUFBLE1BQU0sRUFBRSxrQkFBTSxDQUFFLENBREk7QUFFcEJvQyxFQUFBQSxlQUFlLEVBQUU7QUFGRyxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgRWRpdG9yLCB7IERFRkFVTFRfUExVR0lOUywgQUxMX1BMVUdJTlMgfSBmcm9tICcuL2VkaXRvcic7XG5pbXBvcnQgeyBleHRyYUNTU1J1bGVzT3B0cywgaHRtbFRvVmFsdWUsIHZhbHVlVG9IdG1sLCByZWR1Y2VNdWx0aXBsZUJycyB9IGZyb20gJy4vc2VyaWFsaXphdGlvbic7XG5pbXBvcnQgeyBwYXJzZURlZ3JlZXMgfSBmcm9tICcuL3BhcnNlLWh0bWwnO1xuaW1wb3J0IGNvbnN0YW50cyBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICdzbGF0ZSc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sJyk7XG5cbi8qKlxuICogV3JhcHBlciBhcm91bmQgdGhlIGVkaXRvciB0aGF0IGV4cG9zZXMgYSBgbWFya3VwYCBhbmQgYG9uQ2hhbmdlKG1hcmt1cDpzdHJpbmcpYCBhcGkuXG4gKiBCZWNhdXNlIG9mIHRoZSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBtYXJrdXAgYW5kIHRoZSBgVmFsdWVgIHdlIG5lZWQgdG8gY29udmVydCB0aGUgaW5jb21pbmcgbWFya3VwIHRvIGEgdmFsdWUgYW5kXG4gKiBjb21wYXJlIGl0LiBUT0RPOiBUaGlzIGlzIGFuIGludGVyaW0gZml4LCB3ZSdsbCBuZWVkIHRvIHN0cmlwIGJhY2sgYEVkaXRvcmAgYW5kIGxvb2sgaG93IGJlc3QgdG8gbWFpbnRhaW4gdGhlXG4gKiBgbWFya3VwYCBhcGkgd2hpbHN0IGF2b2lkaW5nIHRoZSBzZXJpYWxpemF0aW9uIG1pc21hdGNoLiBXZSBzaG91bGQgYmUgbWFraW5nIGJldHRlciB1c2Ugb2Ygc2NoZW1hcyB3LyBub3JtYWxpemUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlSHRtbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgZXJyb3I6IFByb3BUeXBlcy5hbnksXG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25Eb25lOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBtYXJrdXA6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhbGxvd1ZhbGlkYXRpb246IFByb3BUeXBlcy5ib29sLFxuICAgIHRvb2xiYXJPcHRzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGV4dHJhQ1NTUnVsZXM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBuYW1lczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgICBydWxlczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9uRG9uZTogKCkgPT4ge30sXG4gICAgYWxsb3dWYWxpZGF0aW9uOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5leHRyYUNTU1J1bGVzKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGV4dHJhQ1NTUnVsZXNPcHRzLCB0aGlzLnByb3BzLmV4dHJhQ1NTUnVsZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHYgPSBodG1sVG9WYWx1ZShwcm9wcy5tYXJrdXApO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogdixcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L25vLWRlcHJlY2F0ZWRcbiAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhwcm9wcykge1xuICAgIGlmICghcHJvcHMuYWxsb3dWYWxpZGF0aW9uICYmIHByb3BzLm1hcmt1cCA9PT0gdGhpcy5wcm9wcy5tYXJrdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2ID0gaHRtbFRvVmFsdWUocHJvcHMubWFya3VwKTtcbiAgICBjb25zdCBjdXJyZW50ID0gaHRtbFRvVmFsdWUodGhpcy5wcm9wcy5tYXJrdXApO1xuXG4gICAgaWYgKHYuZXF1YWxzICYmICF2LmVxdWFscyhjdXJyZW50KSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlOiB2IH0pO1xuICAgIH1cbiAgfVxuXG4gIHJ1blNlcmlhbGl6YXRpb25Pbk1hcmt1cCA9ICgpID0+IHtcbiAgICBpZiAoIXRoaXMucHJvcHMubWFya3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdiA9IGh0bWxUb1ZhbHVlKHJlZHVjZU11bHRpcGxlQnJzKHRoaXMucHJvcHMubWFya3VwKSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHsgdmFsdWU6IHYgfSk7XG4gIH07XG5cbiAgb25DaGFuZ2UgPSAodmFsdWUsIGRvbmUpID0+IHtcbiAgICBjb25zdCBodG1sID0gdmFsdWVUb0h0bWwodmFsdWUpO1xuICAgIGNvbnN0IGh0bWxQYXJzZWQgPSBwYXJzZURlZ3JlZXMoaHRtbCk7XG5cbiAgICBpZiAoaHRtbCAhPT0gdGhpcy5wcm9wcy5tYXJrdXAgJiYgdGhpcy5wcm9wcy5vbkNoYW5nZSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkNoYW5nZShodG1sUGFyc2VkKTtcbiAgICB9XG5cbiAgICBpZiAoZG9uZSAmJiB0aGlzLnByb3BzLm9uRG9uZSkge1xuICAgICAgdGhpcy5wcm9wcy5vbkRvbmUoaHRtbFBhcnNlZCk7XG4gICAgfVxuICB9O1xuXG4gIGZvY3VzID0gKHBvc2l0aW9uLCBub2RlLCBzZWxlY3QgPSBmYWxzZSkgPT4ge1xuICAgIGlmICh0aGlzLmVkaXRvclJlZikge1xuICAgICAgdGhpcy5lZGl0b3JSZWYuY2hhbmdlKChjKSA9PiB7XG4gICAgICAgIGNvbnN0IGxhc3RUZXh0ID0gbm9kZSA/IGMudmFsdWUuZG9jdW1lbnQuZ2V0TmV4dFRleHQobm9kZS5rZXkpIDogYy52YWx1ZS5kb2N1bWVudC5nZXRMYXN0VGV4dCgpO1xuICAgICAgICBjb25zdCBlZGl0b3JET00gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1rZXk9XCIke3RoaXMuZWRpdG9yUmVmLnZhbHVlLmRvY3VtZW50LmtleX1cIl1gKTtcblxuICAgICAgICBpZiAoZWRpdG9yRE9NICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjLmZvY3VzKCk7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAnZW5kJyAmJiBsYXN0VGV4dCkge1xuICAgICAgICAgIGMubW92ZUZvY3VzVG8obGFzdFRleHQua2V5LCBsYXN0VGV4dC50ZXh0Py5sZW5ndGgpLm1vdmVBbmNob3JUbyhsYXN0VGV4dC5rZXksIGxhc3RUZXh0LnRleHQ/Lmxlbmd0aCk7XG4gICAgICAgICAgaWYgKHNlbGVjdCkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBSYW5nZS5mcm9tSlNPTih7XG4gICAgICAgICAgICAgIGFuY2hvcktleTogbGFzdFRleHQua2V5LFxuICAgICAgICAgICAgICBhbmNob3JPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgIGZvY3VzS2V5OiBsYXN0VGV4dC5rZXksXG4gICAgICAgICAgICAgIGZvY3VzT2Zmc2V0OiBsYXN0VGV4dC50ZXh0Py5sZW5ndGgsXG4gICAgICAgICAgICAgIGlzRm9jdXNlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgaXNCYWNrd2FyZDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGMuc2VsZWN0KHJhbmdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zaXRpb24gPT09ICdiZWdpbm5pbmcnICYmIGxhc3RUZXh0KSB7XG4gICAgICAgICAgYy5tb3ZlRm9jdXNUbyhsYXN0VGV4dC5rZXksIDApLm1vdmVBbmNob3JUbyhsYXN0VGV4dC5rZXksIDApO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvckRPTS5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGZpbmlzaEVkaXRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuZWRpdG9yUmVmKSB7XG4gICAgICB0aGlzLmVkaXRvclJlZi5wcm9wcy5vbkVkaXRpbmdEb25lKCk7XG4gICAgfVxuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdG9vbGJhck9wdHMsIGVycm9yIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKHRvb2xiYXJPcHRzKSB7XG4gICAgICB0b29sYmFyT3B0cy5lcnJvciA9IGVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BzID0ge1xuICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICAgIG1hcmt1cDogbnVsbCxcbiAgICAgIHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICBmb2N1czogdGhpcy5mb2N1cyxcbiAgICAgIHJ1blNlcmlhbGl6YXRpb25Pbk1hcmt1cDogdGhpcy5ydW5TZXJpYWxpemF0aW9uT25NYXJrdXAsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8RWRpdG9yXG4gICAgICAgIG9uUmVmPXsocmVmKSA9PiB7XG4gICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgdGhpcy5yb290UmVmID0gcmVmO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgZWRpdG9yUmVmPXsocmVmKSA9PiByZWYgJiYgKHRoaXMuZWRpdG9yUmVmID0gcmVmKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgLz5cbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogRXhwb3J0IGxvd2VyIGxldmVsIEVkaXRvciBhbmQgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCB7IGh0bWxUb1ZhbHVlLCB2YWx1ZVRvSHRtbCwgRWRpdG9yLCBERUZBVUxUX1BMVUdJTlMsIEFMTF9QTFVHSU5TLCBjb25zdGFudHMgfTtcbiJdfQ==
269
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.jsx"],"names":["log","EditableHtml","props","markup","v","setState","value","done","html","htmlParsed","onChange","onDone","position","node","select","editorRef","change","c","lastText","document","getNextText","key","getLastText","editorDOM","querySelector","activeElement","blur","focus","moveFocusTo","text","length","moveAnchorTo","range","Range","fromJSON","anchorKey","anchorOffset","focusKey","focusOffset","isFocused","isBackward","onEditingDone","extraCSSRules","Object","assign","extraCSSRulesOpts","state","allowValidation","current","equals","toolbarOpts","error","runSerializationOnMarkup","ref","rootRef","React","Component","PropTypes","any","func","isRequired","string","bool","object","shape","names","arrayOf","rules"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Editor, { DEFAULT_PLUGINS, ALL_PLUGINS } from './editor';\nimport { extraCSSRulesOpts, htmlToValue, valueToHtml, reduceMultipleBrs } from './serialization';\nimport { parseDegrees } from './parse-html';\nimport constants from './constants';\nimport debug from 'debug';\nimport { Range } from 'slate';\n\nconst log = debug('@pie-lib:editable-html');\n\n/**\n * Wrapper around the editor that exposes a `markup` and `onChange(markup:string)` api.\n * Because of the mismatch between the markup and the `Value` we need to convert the incoming markup to a value and\n * compare it. TODO: This is an interim fix, we'll need to strip back `Editor` and look how best to maintain the\n * `markup` api whilst avoiding the serialization mismatch. We should be making better use of schemas w/ normalize.\n */\nexport default class EditableHtml extends React.Component {\n static propTypes = {\n error: PropTypes.any,\n onChange: PropTypes.func.isRequired,\n onDone: PropTypes.func,\n markup: PropTypes.string.isRequired,\n allowValidation: PropTypes.bool,\n toolbarOpts: PropTypes.object,\n extraCSSRules: PropTypes.shape({\n names: PropTypes.arrayOf(PropTypes.string),\n rules: PropTypes.string,\n }),\n };\n\n static defaultProps = {\n onDone: () => {},\n allowValidation: false,\n };\n\n constructor(props) {\n super(props);\n\n if (props.extraCSSRules) {\n Object.assign(extraCSSRulesOpts, this.props.extraCSSRules);\n }\n\n const v = htmlToValue(props.markup);\n this.state = {\n value: v,\n };\n }\n\n // eslint-disable-next-line react/no-deprecated\n componentWillReceiveProps(props) {\n if (!props.allowValidation && props.markup === this.props.markup) {\n return;\n }\n\n const v = htmlToValue(props.markup);\n const current = htmlToValue(this.props.markup);\n\n if (v.equals && !v.equals(current)) {\n this.setState({ value: v });\n }\n }\n\n runSerializationOnMarkup = () => {\n if (!this.props.markup) {\n return;\n }\n\n const v = htmlToValue(reduceMultipleBrs(this.props.markup));\n\n this.setState({ value: v });\n };\n\n onChange = (value, done) => {\n const html = valueToHtml(value);\n const htmlParsed = parseDegrees(html);\n\n if (html !== this.props.markup && this.props.onChange) {\n this.props.onChange(htmlParsed);\n }\n\n if (done && this.props.onDone) {\n this.props.onDone(htmlParsed);\n }\n };\n\n focus = (position, node, select = false) => {\n if (this.editorRef) {\n this.editorRef.change((c) => {\n const lastText = node ? c.value.document.getNextText(node.key) : c.value.document.getLastText();\n const editorDOM = document.querySelector(`[data-key=\"${this.editorRef.value.document.key}\"]`);\n\n if (editorDOM !== document.activeElement) {\n document.activeElement.blur();\n }\n\n c.focus();\n\n if (position === 'end' && lastText) {\n c.moveFocusTo(lastText.key, lastText.text?.length).moveAnchorTo(lastText.key, lastText.text?.length);\n if (select) {\n const range = Range.fromJSON({\n anchorKey: lastText.key,\n anchorOffset: 0,\n focusKey: lastText.key,\n focusOffset: lastText.text?.length,\n isFocused: true,\n isBackward: false,\n });\n c.select(range);\n }\n }\n\n if (position === 'beginning' && lastText) {\n c.moveFocusTo(lastText.key, 0).moveAnchorTo(lastText.key, 0);\n }\n editorDOM.focus();\n });\n }\n };\n\n finishEditing = () => {\n if (this.editorRef) {\n this.editorRef.props.onEditingDone();\n }\n };\n\n render() {\n const { value } = this.state;\n const { toolbarOpts, error } = this.props;\n\n if (toolbarOpts) {\n toolbarOpts.error = error;\n }\n\n const props = {\n ...this.props,\n markup: null,\n value,\n onChange: this.onChange,\n focus: this.focus,\n runSerializationOnMarkup: this.runSerializationOnMarkup,\n };\n\n return (\n <Editor\n onRef={(ref) => {\n if (ref) {\n this.rootRef = ref;\n }\n }}\n editorRef={(ref) => ref && (this.editorRef = ref)}\n {...props}\n />\n );\n }\n}\n\n/**\n * Export lower level Editor and serialization functions.\n */\nexport { htmlToValue, valueToHtml, Editor, DEFAULT_PLUGINS, ALL_PLUGINS, constants };\n"],"file":"index.js"}
package/lib/parse-html.js CHANGED
@@ -13,4 +13,4 @@ var parseDegrees = function parseDegrees(html) {
13
13
  };
14
14
 
15
15
  exports.parseDegrees = parseDegrees;
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJzZS1odG1sLmpzIl0sIm5hbWVzIjpbInBhcnNlRGVncmVlcyIsImh0bWwiLCJyZXBsYWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQU8sSUFBTUEsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0MsSUFBRDtBQUFBLFNBQzFCQSxJQUFJLENBQ0Y7QUFERSxHQUVEQyxPQUZILENBRVcsUUFGWCxFQUVxQixFQUZyQixFQUdFO0FBSEYsR0FJR0EsT0FKSCxDQUlXLFFBSlgsRUFJcUIsRUFKckIsRUFLRTtBQUxGLEdBTUdBLE9BTkgsQ0FNVyxXQU5YLEVBTXdCLE9BTnhCLENBRDBCO0FBQUEsQ0FBckIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcGFyc2VEZWdyZWVzID0gKGh0bWwpID0+XG4gIGh0bWxcbiAgICAvLyByZW1vdmVzIFxcKCAgIHVzZSBjYXNlOiA1MMKwXG4gICAgLnJlcGxhY2UoL1xcXFxbKF0vZywgJycpXG4gICAgLy8gcmVtb3ZlcyBcXCkgICB1c2UgY2FzZTogNTDCsCttPDFcbiAgICAucmVwbGFjZSgvXFxcXFspXS9nLCAnJylcbiAgICAvLyByZW1vdmVzIFxcZGVncmVlICB1c2UgY2FzZTogNTDCsFxuICAgIC5yZXBsYWNlKC9cXFxcZGVncmVlL2csICcmZGVnOycpO1xuIl19
16
+ //# sourceMappingURL=parse-html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/parse-html.js"],"names":["parseDegrees","html","replace"],"mappings":";;;;;;;AAAO,IAAMA,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD;AAAA,SAC1BA,IAAI,CACF;AADE,GAEDC,OAFH,CAEW,QAFX,EAEqB,EAFrB,EAGE;AAHF,GAIGA,OAJH,CAIW,QAJX,EAIqB,EAJrB,EAKE;AALF,GAMGA,OANH,CAMW,WANX,EAMwB,OANxB,CAD0B;AAAA,CAArB","sourcesContent":["export const parseDegrees = (html) =>\n html\n // removes \\( use case: 50°\n .replace(/\\\\[(]/g, '')\n // removes \\) use case: 50°+m<1\n .replace(/\\\\[)]/g, '')\n // removes \\degree use case: 50°\n .replace(/\\\\degree/g, '&deg;');\n"],"file":"parse-html.js"}
@@ -70,4 +70,4 @@ var CustomPopper = (0, _styles.withStyles)(styles)(function (_ref) {
70
70
  });
71
71
  var _default = CustomPopper;
72
72
  exports["default"] = _default;
73
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL2NoYXJhY3RlcnMvY3VzdG9tLXBvcHBlci5qcyJdLCJuYW1lcyI6WyJzdHlsZXMiLCJwb3BvdmVyIiwiYmFja2dyb3VuZCIsInBhZGRpbmciLCJwb2ludGVyRXZlbnRzIiwiekluZGV4IiwicGFwZXIiLCJoZWlnaHQiLCJ3aWR0aCIsInR5cG9ncmFwaHkiLCJmb250U2l6ZSIsInRleHRBbGlnbiIsIkN1c3RvbVBvcHBlciIsImNsYXNzZXMiLCJjaGlsZHJlbiIsInByb3BzIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwicm9vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsSUFBTUEsTUFBTSxHQUFHLFNBQVRBLE1BQVM7QUFBQSxTQUFPO0FBQ3BCQyxJQUFBQSxPQUFPLEVBQUU7QUFDUEMsTUFBQUEsVUFBVSxFQUFFLE1BREw7QUFFUEMsTUFBQUEsT0FBTyxFQUFFLE1BRkY7QUFHUEMsTUFBQUEsYUFBYSxFQUFFLE1BSFI7QUFJUEMsTUFBQUEsTUFBTSxFQUFFO0FBSkQsS0FEVztBQU9wQkMsSUFBQUEsS0FBSyxFQUFFO0FBQ0xILE1BQUFBLE9BQU8sRUFBRSxFQURKO0FBRUxJLE1BQUFBLE1BQU0sRUFBRSxNQUZIO0FBR0xDLE1BQUFBLEtBQUssRUFBRTtBQUhGLEtBUGE7QUFZcEJDLElBQUFBLFVBQVUsRUFBRTtBQUNWQyxNQUFBQSxRQUFRLEVBQUUsRUFEQTtBQUVWQyxNQUFBQSxTQUFTLEVBQUU7QUFGRDtBQVpRLEdBQVA7QUFBQSxDQUFmOztBQWtCQSxJQUFNQyxZQUFZLEdBQUcsd0JBQVdaLE1BQVgsRUFBbUI7QUFBQSxNQUFHYSxPQUFILFFBQUdBLE9BQUg7QUFBQSxNQUFZQyxRQUFaLFFBQVlBLFFBQVo7QUFBQSxNQUF5QkMsS0FBekI7QUFBQSxzQkFDdEMsZ0NBQUMsa0JBQUQ7QUFDRSxJQUFBLEVBQUUsRUFBQyxvQkFETDtBQUVFLElBQUEsSUFBSSxNQUZOO0FBR0UsSUFBQSxTQUFTLEVBQUVGLE9BQU8sQ0FBQ1osT0FIckI7QUFJRSxJQUFBLE9BQU8sRUFBRTtBQUNQSyxNQUFBQSxLQUFLLEVBQUVPLE9BQU8sQ0FBQ1A7QUFEUixLQUpYO0FBT0UsSUFBQSxZQUFZLEVBQUU7QUFDWlUsTUFBQUEsUUFBUSxFQUFFLFFBREU7QUFFWkMsTUFBQUEsVUFBVSxFQUFFO0FBRkEsS0FQaEI7QUFXRSxJQUFBLGVBQWUsRUFBRTtBQUNmRCxNQUFBQSxRQUFRLEVBQUUsS0FESztBQUVmQyxNQUFBQSxVQUFVLEVBQUU7QUFGRyxLQVhuQjtBQWVFLElBQUEsbUJBQW1CLE1BZnJCO0FBZ0JFLElBQUEsZ0JBQWdCO0FBaEJsQixLQWlCTUYsS0FqQk4sZ0JBbUJFLGdDQUFDLHNCQUFEO0FBQVksSUFBQSxPQUFPLEVBQUU7QUFBRUcsTUFBQUEsSUFBSSxFQUFFTCxPQUFPLENBQUNKO0FBQWhCO0FBQXJCLEtBQW9ESyxRQUFwRCxDQW5CRixDQURzQztBQUFBLENBQW5CLENBQXJCO2VBd0JlRixZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IFBvcHBlciBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9Qb3BwZXInO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvVHlwb2dyYXBoeSc7XG5cbmNvbnN0IHN0eWxlcyA9ICgpID0+ICh7XG4gIHBvcG92ZXI6IHtcbiAgICBiYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgICB6SW5kZXg6IDk5OTk5LFxuICB9LFxuICBwYXBlcjoge1xuICAgIHBhZGRpbmc6IDIwLFxuICAgIGhlaWdodDogJ2F1dG8nLFxuICAgIHdpZHRoOiAnYXV0bycsXG4gIH0sXG4gIHR5cG9ncmFwaHk6IHtcbiAgICBmb250U2l6ZTogNTAsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgfSxcbn0pO1xuXG5jb25zdCBDdXN0b21Qb3BwZXIgPSB3aXRoU3R5bGVzKHN0eWxlcykoKHsgY2xhc3NlcywgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IChcbiAgPFBvcHBlclxuICAgIGlkPVwibW91c2Utb3Zlci1wb3BvdmVyXCJcbiAgICBvcGVuXG4gICAgY2xhc3NOYW1lPXtjbGFzc2VzLnBvcG92ZXJ9XG4gICAgY2xhc3Nlcz17e1xuICAgICAgcGFwZXI6IGNsYXNzZXMucGFwZXIsXG4gICAgfX1cbiAgICBhbmNob3JPcmlnaW49e3tcbiAgICAgIHZlcnRpY2FsOiAnYm90dG9tJyxcbiAgICAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICB9fVxuICAgIHRyYW5zZm9ybU9yaWdpbj17e1xuICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgIH19XG4gICAgZGlzYWJsZVJlc3RvcmVGb2N1c1xuICAgIGRpc2FibGVBdXRvRm9jdXNcbiAgICB7Li4ucHJvcHN9XG4gID5cbiAgICA8VHlwb2dyYXBoeSBjbGFzc2VzPXt7IHJvb3Q6IGNsYXNzZXMudHlwb2dyYXBoeSB9fT57Y2hpbGRyZW59PC9UeXBvZ3JhcGh5PlxuICA8L1BvcHBlcj5cbikpO1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21Qb3BwZXI7XG4iXX0=
73
+ //# sourceMappingURL=custom-popper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/plugins/characters/custom-popper.js"],"names":["styles","popover","background","padding","pointerEvents","zIndex","paper","height","width","typography","fontSize","textAlign","CustomPopper","classes","children","props","vertical","horizontal","root"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO;AACpBC,IAAAA,OAAO,EAAE;AACPC,MAAAA,UAAU,EAAE,MADL;AAEPC,MAAAA,OAAO,EAAE,MAFF;AAGPC,MAAAA,aAAa,EAAE,MAHR;AAIPC,MAAAA,MAAM,EAAE;AAJD,KADW;AAOpBC,IAAAA,KAAK,EAAE;AACLH,MAAAA,OAAO,EAAE,EADJ;AAELI,MAAAA,MAAM,EAAE,MAFH;AAGLC,MAAAA,KAAK,EAAE;AAHF,KAPa;AAYpBC,IAAAA,UAAU,EAAE;AACVC,MAAAA,QAAQ,EAAE,EADA;AAEVC,MAAAA,SAAS,EAAE;AAFD;AAZQ,GAAP;AAAA,CAAf;;AAkBA,IAAMC,YAAY,GAAG,wBAAWZ,MAAX,EAAmB;AAAA,MAAGa,OAAH,QAAGA,OAAH;AAAA,MAAYC,QAAZ,QAAYA,QAAZ;AAAA,MAAyBC,KAAzB;AAAA,sBACtC,gCAAC,kBAAD;AACE,IAAA,EAAE,EAAC,oBADL;AAEE,IAAA,IAAI,MAFN;AAGE,IAAA,SAAS,EAAEF,OAAO,CAACZ,OAHrB;AAIE,IAAA,OAAO,EAAE;AACPK,MAAAA,KAAK,EAAEO,OAAO,CAACP;AADR,KAJX;AAOE,IAAA,YAAY,EAAE;AACZU,MAAAA,QAAQ,EAAE,QADE;AAEZC,MAAAA,UAAU,EAAE;AAFA,KAPhB;AAWE,IAAA,eAAe,EAAE;AACfD,MAAAA,QAAQ,EAAE,KADK;AAEfC,MAAAA,UAAU,EAAE;AAFG,KAXnB;AAeE,IAAA,mBAAmB,MAfrB;AAgBE,IAAA,gBAAgB;AAhBlB,KAiBMF,KAjBN,gBAmBE,gCAAC,sBAAD;AAAY,IAAA,OAAO,EAAE;AAAEG,MAAAA,IAAI,EAAEL,OAAO,CAACJ;AAAhB;AAArB,KAAoDK,QAApD,CAnBF,CADsC;AAAA,CAAnB,CAArB;eAwBeF,Y","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport Popper from '@material-ui/core/Popper';\nimport Typography from '@material-ui/core/Typography';\n\nconst styles = () => ({\n popover: {\n background: '#fff',\n padding: '10px',\n pointerEvents: 'none',\n zIndex: 99999,\n },\n paper: {\n padding: 20,\n height: 'auto',\n width: 'auto',\n },\n typography: {\n fontSize: 50,\n textAlign: 'center',\n },\n});\n\nconst CustomPopper = withStyles(styles)(({ classes, children, ...props }) => (\n <Popper\n id=\"mouse-over-popover\"\n open\n className={classes.popover}\n classes={{\n paper: classes.paper,\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n disableRestoreFocus\n disableAutoFocus\n {...props}\n >\n <Typography classes={{ root: classes.typography }}>{children}</Typography>\n </Popper>\n));\n\nexport default CustomPopper;\n"],"file":"custom-popper.js"}