@pie-lib/editable-html 11.1.1 → 11.3.0-beta.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 (194) hide show
  1. package/CHANGELOG.md +8 -4
  2. package/NEXT.CHANGELOG.json +1 -0
  3. package/lib/__tests__/editor.test.js +470 -0
  4. package/lib/__tests__/serialization.test.js +246 -0
  5. package/lib/__tests__/utils.js +106 -0
  6. package/lib/block-tags.js +25 -0
  7. package/lib/constants.js +16 -0
  8. package/lib/editor.js +349 -88
  9. package/lib/index.js +26 -10
  10. package/lib/parse-html.js +1 -1
  11. package/lib/plugins/characters/custom-popper.js +1 -1
  12. package/lib/plugins/characters/index.js +9 -4
  13. package/lib/plugins/characters/utils.js +13 -13
  14. package/lib/plugins/css/icons/index.js +37 -0
  15. package/lib/plugins/css/index.js +397 -0
  16. package/lib/plugins/customPlugin/index.js +114 -0
  17. package/lib/plugins/html/icons/index.js +1 -1
  18. package/lib/plugins/html/index.js +12 -8
  19. package/lib/plugins/image/__tests__/component.test.js +51 -0
  20. package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +56 -0
  21. package/lib/plugins/image/__tests__/image-toolbar.test.js +26 -0
  22. package/lib/plugins/image/__tests__/index.test.js +98 -0
  23. package/lib/plugins/image/__tests__/insert-image-handler.test.js +125 -0
  24. package/lib/plugins/image/__tests__/mock-change.js +25 -0
  25. package/lib/plugins/image/alt-dialog.js +1 -1
  26. package/lib/plugins/image/component.js +1 -1
  27. package/lib/plugins/image/image-toolbar.js +1 -1
  28. package/lib/plugins/image/index.js +3 -2
  29. package/lib/plugins/image/insert-image-handler.js +14 -5
  30. package/lib/plugins/index.js +271 -12
  31. package/lib/plugins/list/__tests__/index.test.js +79 -0
  32. package/lib/plugins/list/index.js +131 -1
  33. package/lib/plugins/math/__tests__/index.test.js +300 -0
  34. package/lib/plugins/math/index.js +92 -57
  35. package/lib/plugins/media/__tests__/index.test.js +71 -0
  36. package/lib/plugins/media/index.js +6 -3
  37. package/lib/plugins/media/media-dialog.js +99 -58
  38. package/lib/plugins/media/media-toolbar.js +1 -1
  39. package/lib/plugins/media/media-wrapper.js +1 -1
  40. package/lib/plugins/rendering/index.js +46 -0
  41. package/lib/plugins/respArea/drag-in-the-blank/choice.js +6 -3
  42. package/lib/plugins/respArea/drag-in-the-blank/index.js +1 -1
  43. package/lib/plugins/respArea/explicit-constructed-response/index.js +12 -10
  44. package/lib/plugins/respArea/icons/index.js +1 -1
  45. package/lib/plugins/respArea/index.js +70 -22
  46. package/lib/plugins/respArea/inline-dropdown/index.js +11 -6
  47. package/lib/plugins/respArea/math-templated/index.js +130 -0
  48. package/lib/plugins/respArea/utils.js +17 -2
  49. package/lib/plugins/table/CustomTablePlugin.js +133 -0
  50. package/lib/plugins/table/__tests__/index.test.js +442 -0
  51. package/lib/plugins/table/__tests__/table-toolbar.test.js +54 -0
  52. package/lib/plugins/table/icons/index.js +1 -1
  53. package/lib/plugins/table/index.js +44 -60
  54. package/lib/plugins/table/table-toolbar.js +34 -5
  55. package/lib/plugins/textAlign/icons/index.js +226 -0
  56. package/lib/plugins/textAlign/index.js +34 -0
  57. package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +128 -0
  58. package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +51 -0
  59. package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +54 -0
  60. package/lib/plugins/toolbar/__tests__/toolbar.test.js +120 -0
  61. package/lib/plugins/toolbar/default-toolbar.js +83 -28
  62. package/lib/plugins/toolbar/done-button.js +6 -3
  63. package/lib/plugins/toolbar/editor-and-toolbar.js +19 -20
  64. package/lib/plugins/toolbar/index.js +1 -1
  65. package/lib/plugins/toolbar/toolbar-buttons.js +45 -12
  66. package/lib/plugins/toolbar/toolbar.js +36 -12
  67. package/lib/plugins/utils.js +1 -1
  68. package/lib/serialization.js +234 -45
  69. package/lib/theme.js +1 -1
  70. package/package.json +6 -6
  71. package/src/__tests__/editor.test.jsx +363 -0
  72. package/src/__tests__/serialization.test.js +291 -0
  73. package/src/__tests__/utils.js +36 -0
  74. package/src/block-tags.js +17 -0
  75. package/src/constants.js +7 -0
  76. package/src/editor.jsx +303 -49
  77. package/src/index.jsx +19 -10
  78. package/src/plugins/characters/index.jsx +11 -3
  79. package/src/plugins/characters/utils.js +12 -12
  80. package/src/plugins/css/icons/index.jsx +17 -0
  81. package/src/plugins/css/index.jsx +346 -0
  82. package/src/plugins/customPlugin/index.jsx +85 -0
  83. package/src/plugins/html/index.jsx +9 -6
  84. package/src/plugins/image/__tests__/__snapshots__/component.test.jsx.snap +51 -0
  85. package/src/plugins/image/__tests__/__snapshots__/image-toolbar-logic.test.jsx.snap +27 -0
  86. package/src/plugins/image/__tests__/__snapshots__/image-toolbar.test.jsx.snap +44 -0
  87. package/src/plugins/image/__tests__/component.test.jsx +41 -0
  88. package/src/plugins/image/__tests__/image-toolbar-logic.test.jsx +42 -0
  89. package/src/plugins/image/__tests__/image-toolbar.test.jsx +11 -0
  90. package/src/plugins/image/__tests__/index.test.js +95 -0
  91. package/src/plugins/image/__tests__/insert-image-handler.test.js +113 -0
  92. package/src/plugins/image/__tests__/mock-change.js +15 -0
  93. package/src/plugins/image/index.jsx +2 -1
  94. package/src/plugins/image/insert-image-handler.js +13 -6
  95. package/src/plugins/index.jsx +248 -5
  96. package/src/plugins/list/__tests__/index.test.js +54 -0
  97. package/src/plugins/list/index.jsx +130 -0
  98. package/src/plugins/math/__tests__/__snapshots__/index.test.jsx.snap +48 -0
  99. package/src/plugins/math/__tests__/index.test.jsx +245 -0
  100. package/src/plugins/math/index.jsx +87 -56
  101. package/src/plugins/media/__tests__/index.test.js +75 -0
  102. package/src/plugins/media/index.jsx +3 -2
  103. package/src/plugins/media/media-dialog.js +106 -57
  104. package/src/plugins/rendering/index.js +31 -0
  105. package/src/plugins/respArea/drag-in-the-blank/choice.jsx +4 -1
  106. package/src/plugins/respArea/explicit-constructed-response/index.jsx +10 -8
  107. package/src/plugins/respArea/index.jsx +53 -7
  108. package/src/plugins/respArea/inline-dropdown/index.jsx +13 -6
  109. package/src/plugins/respArea/math-templated/index.jsx +104 -0
  110. package/src/plugins/respArea/utils.jsx +11 -0
  111. package/src/plugins/table/CustomTablePlugin.js +113 -0
  112. package/src/plugins/table/__tests__/__snapshots__/table-toolbar.test.jsx.snap +44 -0
  113. package/src/plugins/table/__tests__/index.test.jsx +401 -0
  114. package/src/plugins/table/__tests__/table-toolbar.test.jsx +42 -0
  115. package/src/plugins/table/index.jsx +46 -59
  116. package/src/plugins/table/table-toolbar.jsx +39 -2
  117. package/src/plugins/textAlign/icons/index.jsx +139 -0
  118. package/src/plugins/textAlign/index.jsx +23 -0
  119. package/src/plugins/toolbar/__tests__/__snapshots__/default-toolbar.test.jsx.snap +923 -0
  120. package/src/plugins/toolbar/__tests__/__snapshots__/editor-and-toolbar.test.jsx.snap +20 -0
  121. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar-buttons.test.jsx.snap +36 -0
  122. package/src/plugins/toolbar/__tests__/__snapshots__/toolbar.test.jsx.snap +46 -0
  123. package/src/plugins/toolbar/__tests__/default-toolbar.test.jsx +94 -0
  124. package/src/plugins/toolbar/__tests__/editor-and-toolbar.test.jsx +37 -0
  125. package/src/plugins/toolbar/__tests__/toolbar-buttons.test.jsx +51 -0
  126. package/src/plugins/toolbar/__tests__/toolbar.test.jsx +106 -0
  127. package/src/plugins/toolbar/default-toolbar.jsx +80 -20
  128. package/src/plugins/toolbar/done-button.jsx +3 -1
  129. package/src/plugins/toolbar/editor-and-toolbar.jsx +18 -13
  130. package/src/plugins/toolbar/toolbar-buttons.jsx +52 -11
  131. package/src/plugins/toolbar/toolbar.jsx +31 -8
  132. package/src/serialization.jsx +213 -38
  133. package/README.md +0 -45
  134. package/deploy.sh +0 -16
  135. package/lib/editor.js.map +0 -1
  136. package/lib/index.js.map +0 -1
  137. package/lib/parse-html.js.map +0 -1
  138. package/lib/plugins/characters/custom-popper.js.map +0 -1
  139. package/lib/plugins/characters/index.js.map +0 -1
  140. package/lib/plugins/characters/utils.js.map +0 -1
  141. package/lib/plugins/html/icons/index.js.map +0 -1
  142. package/lib/plugins/html/index.js.map +0 -1
  143. package/lib/plugins/image/alt-dialog.js.map +0 -1
  144. package/lib/plugins/image/component.js.map +0 -1
  145. package/lib/plugins/image/image-toolbar.js.map +0 -1
  146. package/lib/plugins/image/index.js.map +0 -1
  147. package/lib/plugins/image/insert-image-handler.js.map +0 -1
  148. package/lib/plugins/index.js.map +0 -1
  149. package/lib/plugins/list/index.js.map +0 -1
  150. package/lib/plugins/math/index.js.map +0 -1
  151. package/lib/plugins/media/index.js.map +0 -1
  152. package/lib/plugins/media/media-dialog.js.map +0 -1
  153. package/lib/plugins/media/media-toolbar.js.map +0 -1
  154. package/lib/plugins/media/media-wrapper.js.map +0 -1
  155. package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +0 -1
  156. package/lib/plugins/respArea/drag-in-the-blank/index.js.map +0 -1
  157. package/lib/plugins/respArea/explicit-constructed-response/index.js.map +0 -1
  158. package/lib/plugins/respArea/icons/index.js.map +0 -1
  159. package/lib/plugins/respArea/index.js.map +0 -1
  160. package/lib/plugins/respArea/inline-dropdown/index.js.map +0 -1
  161. package/lib/plugins/respArea/utils.js.map +0 -1
  162. package/lib/plugins/table/icons/index.js.map +0 -1
  163. package/lib/plugins/table/index.js.map +0 -1
  164. package/lib/plugins/table/table-toolbar.js.map +0 -1
  165. package/lib/plugins/toolbar/default-toolbar.js.map +0 -1
  166. package/lib/plugins/toolbar/done-button.js.map +0 -1
  167. package/lib/plugins/toolbar/editor-and-toolbar.js.map +0 -1
  168. package/lib/plugins/toolbar/index.js.map +0 -1
  169. package/lib/plugins/toolbar/toolbar-buttons.js.map +0 -1
  170. package/lib/plugins/toolbar/toolbar.js.map +0 -1
  171. package/lib/plugins/utils.js.map +0 -1
  172. package/lib/serialization.js.map +0 -1
  173. package/lib/theme.js.map +0 -1
  174. package/playground/image/data.js +0 -59
  175. package/playground/image/index.html +0 -22
  176. package/playground/image/index.jsx +0 -81
  177. package/playground/index.html +0 -25
  178. package/playground/mathquill/index.html +0 -22
  179. package/playground/mathquill/index.jsx +0 -155
  180. package/playground/package.json +0 -15
  181. package/playground/prod-test/index.html +0 -22
  182. package/playground/prod-test/index.jsx +0 -28
  183. package/playground/schema-override/data.js +0 -29
  184. package/playground/schema-override/image-plugin.jsx +0 -41
  185. package/playground/schema-override/index.html +0 -21
  186. package/playground/schema-override/index.jsx +0 -97
  187. package/playground/serialization/data.js +0 -29
  188. package/playground/serialization/image-plugin.jsx +0 -41
  189. package/playground/serialization/index.html +0 -22
  190. package/playground/serialization/index.jsx +0 -12
  191. package/playground/static.json +0 -3
  192. package/playground/table-examples.html +0 -70
  193. package/playground/webpack.config.js +0 -42
  194. package/static.json +0 -1
@@ -13,8 +13,6 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
 
16
- var _slateEditTable = _interopRequireDefault(require("slate-edit-table"));
17
-
18
16
  var _slate = require("slate");
19
17
 
20
18
  var _debug = _interopRequireDefault(require("debug"));
@@ -33,6 +31,8 @@ var _reactAttrConverter = _interopRequireDefault(require("react-attr-converter")
33
31
 
34
32
  var _toStyle = require("to-style");
35
33
 
34
+ var _CustomTablePlugin = _interopRequireDefault(require("./CustomTablePlugin"));
35
+
36
36
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
37
37
 
38
38
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -114,9 +114,7 @@ exports.moveFocusToBeginningOfTable = moveFocusToBeginningOfTable;
114
114
  var _default = function _default(opts, toolbarPlugins
115
115
  /* : {toolbar: {}}[] */
116
116
  ) {
117
- var core = (0, _slateEditTable["default"])({
118
- typeContent: 'div'
119
- }); // fix outdated schema
117
+ var core = (0, _CustomTablePlugin["default"])(opts); // fix outdated schema
120
118
 
121
119
  if (core.schema && core.schema.blocks) {
122
120
  Object.keys(core.schema.blocks).forEach(function (key) {
@@ -163,7 +161,9 @@ var _default = function _default(opts, toolbarPlugins
163
161
  };
164
162
 
165
163
  core.toolbar = {
164
+ type: 'table',
166
165
  icon: /*#__PURE__*/_react["default"].createElement(_GridOn["default"], null),
166
+ ariaLabel: 'Insert Table',
167
167
  onClick: function onClick(value, onChange) {
168
168
  log('insert table');
169
169
  var change = value.change();
@@ -184,7 +184,7 @@ var _default = function _default(opts, toolbarPlugins
184
184
  /**
185
185
  * Note - the node may not be a table node - it may be a node inside a table.
186
186
  */
187
- customToolbar: function customToolbar(node, value, onToolbarDone) {
187
+ customToolbar: function customToolbar(node, value, onToolbarDone, getFocusedValue) {
188
188
  log('[customToolbar] node.data: ', node.data);
189
189
  var tableBlock = core.utils.getTableBlock(value.document, node === null || node === void 0 ? void 0 : node.key);
190
190
  log('[customToolbar] tableBlock: ', tableBlock);
@@ -235,6 +235,7 @@ var _default = function _default(opts, toolbarPlugins
235
235
 
236
236
  var Tb = function Tb() {
237
237
  return /*#__PURE__*/_react["default"].createElement(_tableToolbar["default"], {
238
+ getFocusedValue: getFocusedValue,
238
239
  plugins: toolbarPlugins,
239
240
  onChange: function onChange(c) {
240
241
  return onToolbarDone(c, false);
@@ -282,73 +283,56 @@ var _default = function _default(opts, toolbarPlugins
282
283
  };
283
284
 
284
285
  core.normalizeNode = function (node) {
285
- if (node.object !== 'document') {
286
- return;
287
- }
288
-
289
- var tableAdded = node.findDescendant(function (d) {
290
- return d.data && d.data.get('newTable');
286
+ var addNodeBeforeArray = [];
287
+ if (node.object !== 'document') return;
288
+ node.findDescendant(function (d) {
289
+ if (d.type === 'table') {
290
+ var tablePath = node.getPath(d.key);
291
+ var prevNode = node.getPreviousNode(tablePath);
292
+ var nextNode = node.getNextNode(tablePath);
293
+
294
+ if (!prevNode || !nextNode) {
295
+ addNodeBeforeArray.push({
296
+ node: d,
297
+ prevNode: prevNode,
298
+ nextNode: nextNode
299
+ });
300
+ }
301
+ }
291
302
  });
292
303
 
293
- if (!tableAdded) {
294
- return;
295
- }
296
-
297
- var nodeToSearch = node.getParent(tableAdded.key) || node;
298
- var shouldAddTextAfterNode = false;
299
- var indexToNotHaveTableOn = nodeToSearch.nodes.size - 1;
300
- var indexOfLastTable = nodeToSearch.nodes.findLastIndex(function (d) {
301
- return d.type === 'table';
302
- }); // if the last table in the document is of type table, we need to do the change
303
-
304
- if (indexOfLastTable === indexToNotHaveTableOn) {
305
- shouldAddTextAfterNode = true;
306
- }
307
-
308
- if (!shouldAddTextAfterNode) {
304
+ if (!addNodeBeforeArray.length) {
309
305
  return;
310
306
  }
311
307
 
312
308
  return function (change) {
313
- if (shouldAddTextAfterNode) {
314
- var tableJSON = tableAdded.toJSON(); // we remove the table node because otherwise we can't add the empty block after it
315
- // we need a block that contains text in order to do it
316
-
317
- change.removeNodeByKey(tableAdded.key);
318
-
319
- var newBlock = _slate.Block.create({
320
- object: 'block',
321
- type: 'div'
322
- }); // we add an empty block but that it's going to be normalized
323
- // because it will add the empty text to it like it should
324
-
325
-
326
- change.insertBlock(newBlock);
327
- change.withoutNormalization(function () {
328
- // we do these changes without normalization
329
- // we get the text previous to the new block added
330
- var prevText = change.value.document.getPreviousText(newBlock.key);
309
+ var newBlock = {
310
+ object: 'block',
311
+ type: 'div'
312
+ };
313
+ addNodeBeforeArray.forEach(function (n) {
314
+ var tablePath = change.value.document.getPath(n.node.key).toJSON(); // removing tableIndex
331
315
 
332
- if (prevText) {
333
- var _prevText$text, _prevText$text2;
316
+ var indexToAdd = tablePath.splice(-1)[0];
334
317
 
335
- // we move focus to the previous text
336
- change.moveFocusTo(prevText.key, (_prevText$text = prevText.text) === null || _prevText$text === void 0 ? void 0 : _prevText$text.length).moveAnchorTo(prevText.key, (_prevText$text2 = prevText.text) === null || _prevText$text2 === void 0 ? void 0 : _prevText$text2.length);
337
- } // we insert the table block between the first block with text and the last block with text
318
+ if (!n.prevNode) {
319
+ // inserting block key before table
320
+ change.insertNodeByPath(tablePath, indexToAdd, newBlock); // this will trigger another normalization, which will figure out if there's not
321
+ // a block after the table and add it, so we exit for now
338
322
 
323
+ return;
324
+ }
339
325
 
340
- change.insertBlock(_objectSpread(_objectSpread({}, tableJSON), {}, {
341
- data: _objectSpread(_objectSpread({}, tableJSON.data), {}, {
342
- newTable: true
343
- })
344
- }));
345
- moveFocusToBeginningOfTable(change);
346
- });
347
- }
326
+ if (!n.nextNode) {
327
+ // inserting block key after table
328
+ change.insertNodeByPath(tablePath, indexToAdd + 1, newBlock);
329
+ }
330
+ });
348
331
  };
349
332
  };
350
333
 
351
334
  core.renderNode = Node;
335
+ core.name = 'table';
352
336
  return core;
353
337
  };
354
338
 
@@ -496,4 +480,4 @@ var serialization = {
496
480
  }
497
481
  };
498
482
  exports.serialization = serialization;
499
- //# sourceMappingURL=index.js.map
483
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL2luZGV4LmpzeCJdLCJuYW1lcyI6WyJsb2ciLCJUYWJsZSIsInRhYmxlIiwicHJvcHMiLCJub2RlQXR0cmlidXRlcyIsImRhdGFUb0F0dHJpYnV0ZXMiLCJub2RlIiwiZGF0YSIsImNsYXNzZXMiLCJhdHRyaWJ1dGVzIiwib25Gb2N1cyIsIm9uQmx1ciIsImNoaWxkcmVuIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiZnVuYyIsIlNsYXRlUHJvcFR5cGVzIiwib25lT2ZUeXBlIiwiYXJyYXlPZiIsImlzUmVxdWlyZWQiLCJUYWJsZVJvdyIsIlRhYmxlQ2VsbCIsInRkIiwibWluV2lkdGgiLCJUYWciLCJnZXQiLCJoZWFkZXIiLCJtb3ZlRm9jdXNUb0JlZ2lubmluZ09mVGFibGUiLCJjaGFuZ2UiLCJhZGRlZFRhYmxlIiwidmFsdWUiLCJkb2N1bWVudCIsImZpbmREZXNjZW5kYW50IiwiZCIsImNvbGxhcHNlVG9TdGFydE9mIiwidXBkYXRlIiwicmVtb3ZlIiwic2V0Tm9kZUJ5S2V5Iiwia2V5Iiwib3B0cyIsInRvb2xiYXJQbHVnaW5zIiwiY29yZSIsInNjaGVtYSIsImJsb2NrcyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYmxvY2siLCJwYXJlbnQiLCJub2RlcyIsInR5cGVzIiwidHlwZSIsIm9iamVjdHMiLCJ1dGlscyIsImdldFRhYmxlQmxvY2siLCJjb250YWluZXJOb2RlIiwiZ2V0RGVzY2VuZGFudCIsImFuY2VzdG9ycyIsImdldEFuY2VzdG9ycyIsInB1c2giLCJmaW5kTGFzdCIsInAiLCJjcmVhdGVUYWJsZVdpdGhPcHRpb25zIiwicm93IiwiY29sdW1ucyIsImV4dHJhIiwiY3JlYXRlZFRhYmxlIiwiY3JlYXRlVGFibGUiLCJuZXdUYWJsZSIsIkJsb2NrIiwiY3JlYXRlIiwidG9KU09OIiwidG9vbGJhciIsImljb24iLCJhcmlhTGFiZWwiLCJvbkNsaWNrIiwib25DaGFuZ2UiLCJib3JkZXIiLCJpbnNlcnRCbG9jayIsInN1cHBvcnRzIiwiaXNTZWxlY3Rpb25JblRhYmxlIiwiY3VzdG9tVG9vbGJhciIsIm9uVG9vbGJhckRvbmUiLCJnZXRGb2N1c2VkVmFsdWUiLCJ0YWJsZUJsb2NrIiwiaGFzQm9yZGVyIiwiYWRkUm93IiwiY2hhbmdlcyIsImluc2VydFJvdyIsImFkZENvbHVtbiIsImluc2VydENvbHVtbiIsInJlbW92ZVJvdyIsInJlbW92ZUNvbHVtbiIsInJlbW92ZVRhYmxlIiwidG9nZ2xlQm9yZGVyIiwic2V0Iiwib25Eb25lIiwiVGIiLCJjIiwiTm9kZSIsIm5vcm1hbGl6ZU5vZGUiLCJhZGROb2RlQmVmb3JlQXJyYXkiLCJ0YWJsZVBhdGgiLCJnZXRQYXRoIiwicHJldk5vZGUiLCJnZXRQcmV2aW91c05vZGUiLCJuZXh0Tm9kZSIsImdldE5leHROb2RlIiwibGVuZ3RoIiwibmV3QmxvY2siLCJuIiwiaW5kZXhUb0FkZCIsInNwbGljZSIsImluc2VydE5vZGVCeVBhdGgiLCJyZW5kZXJOb2RlIiwibmFtZSIsInBhcnNlU3R5bGVTdHJpbmciLCJzIiwicmVnZXgiLCJtYXRjaCIsInJlc3VsdCIsImV4ZWMiLCJ0cmltIiwicmVhY3RBdHRyaWJ1dGVzIiwibyIsImNhbWVsaXplIiwiYWRkVW5pdHMiLCJhdHRyaWJ1dGVzVG9NYXAiLCJlbCIsImFjYyIsImF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsInN0eWxlU3RyaW5nIiwicmVhY3RTdHlsZU9iamVjdCIsInJlZHVjZSIsInYiLCJjZWxsQXR0cmlidXRlcyIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsIm5leHQiLCJ0YWciLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJBcnJheSIsImZyb20iLCJjaGlsZE5vZGVzIiwic2VyaWFsaXplIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLEdBQUcsR0FBRyx1QkFBTSxzQ0FBTixDQUFaO0FBRUEsSUFBTUMsS0FBSyxHQUFHLHdCQUFXO0FBQUEsU0FBTztBQUM5QkMsSUFBQUEsS0FBSyxFQUFFO0FBRHVCLEdBQVA7QUFBQSxDQUFYLEVBRVYsVUFBQ0MsS0FBRCxFQUFXO0FBQ2IsTUFBTUMsY0FBYyxHQUFHQyxnQkFBZ0IsQ0FBQ0YsS0FBSyxDQUFDRyxJQUFOLENBQVdDLElBQVosQ0FBdkM7QUFFQSxzQkFDRTtBQUNFLElBQUEsU0FBUyxFQUFFSixLQUFLLENBQUNLLE9BQU4sQ0FBY047QUFEM0IsS0FFTUMsS0FBSyxDQUFDTSxVQUZaLEVBR01MLGNBSE47QUFJRSxJQUFBLE9BQU8sRUFBRUQsS0FBSyxDQUFDTyxPQUpqQjtBQUtFLElBQUEsTUFBTSxFQUFFUCxLQUFLLENBQUNRO0FBTGhCLG1CQU9FLCtDQUFRUixLQUFLLENBQUNTLFFBQWQsQ0FQRixDQURGO0FBV0QsQ0FoQmEsQ0FBZDtBQWtCQVgsS0FBSyxDQUFDWSxTQUFOLEdBQWtCO0FBQ2hCSixFQUFBQSxVQUFVLEVBQUVLLHNCQUFVQyxNQUROO0FBRWhCTCxFQUFBQSxPQUFPLEVBQUVJLHNCQUFVRSxJQUZIO0FBR2hCTCxFQUFBQSxNQUFNLEVBQUVHLHNCQUFVRSxJQUhGO0FBSWhCVixFQUFBQSxJQUFJLEVBQUVXLDJCQUFlWCxJQUpMO0FBS2hCTSxFQUFBQSxRQUFRLEVBQUVFLHNCQUFVSSxTQUFWLENBQW9CLENBQUNKLHNCQUFVSyxPQUFWLENBQWtCTCxzQkFBVVIsSUFBNUIsQ0FBRCxFQUFvQ1Esc0JBQVVSLElBQTlDLENBQXBCLEVBQXlFYztBQUxuRSxDQUFsQjs7QUFRQSxJQUFNQyxRQUFRLEdBQUcsU0FBWEEsUUFBVyxDQUFDbEIsS0FBRDtBQUFBLHNCQUFXLHNDQUFRQSxLQUFLLENBQUNNLFVBQWQsRUFBMkJOLEtBQUssQ0FBQ1MsUUFBakMsQ0FBWDtBQUFBLENBQWpCOztBQUVBUyxRQUFRLENBQUNSLFNBQVQsR0FBcUI7QUFDbkJKLEVBQUFBLFVBQVUsRUFBRUssc0JBQVVDLE1BREg7QUFFbkJMLEVBQUFBLE9BQU8sRUFBRUksc0JBQVVFLElBRkE7QUFHbkJMLEVBQUFBLE1BQU0sRUFBRUcsc0JBQVVFLElBSEM7QUFJbkJKLEVBQUFBLFFBQVEsRUFBRUUsc0JBQVVJLFNBQVYsQ0FBb0IsQ0FBQ0osc0JBQVVLLE9BQVYsQ0FBa0JMLHNCQUFVUixJQUE1QixDQUFELEVBQW9DUSxzQkFBVVIsSUFBOUMsQ0FBcEIsRUFBeUVjO0FBSmhFLENBQXJCO0FBT0EsSUFBTUUsU0FBUyxHQUFHLHdCQUFXO0FBQUEsU0FBTztBQUNsQ0MsSUFBQUEsRUFBRSxFQUFFO0FBQ0ZDLE1BQUFBLFFBQVEsRUFBRTtBQURSO0FBRDhCLEdBQVA7QUFBQSxDQUFYLEVBSWQsVUFBQ3JCLEtBQUQsRUFBVztBQUNiLE1BQU1zQixHQUFHLEdBQUd0QixLQUFLLENBQUNHLElBQU4sQ0FBV0MsSUFBWCxDQUFnQm1CLEdBQWhCLENBQW9CLFFBQXBCLElBQWdDLElBQWhDLEdBQXVDLElBQW5EO0FBRUEsTUFBTXRCLGNBQWMsR0FBR0MsZ0JBQWdCLENBQUNGLEtBQUssQ0FBQ0csSUFBTixDQUFXQyxJQUFaLENBQXZDO0FBQ0EsU0FBT0gsY0FBYyxDQUFDdUIsTUFBdEI7QUFFQSxzQkFDRSxnQ0FBQyxHQUFELGdDQUNNeEIsS0FBSyxDQUFDTSxVQURaLEVBRU1MLGNBRk47QUFHRSxJQUFBLE9BQU8sRUFBRUQsS0FBSyxDQUFDRyxJQUFOLENBQVdDLElBQVgsQ0FBZ0JtQixHQUFoQixDQUFvQixTQUFwQixDQUhYO0FBSUUsSUFBQSxTQUFTLEVBQUV2QixLQUFLLENBQUNLLE9BQU4sQ0FBY2lCLEdBQWQsQ0FKYjtBQUtFLElBQUEsT0FBTyxFQUFFdEIsS0FBSyxDQUFDTyxPQUxqQjtBQU1FLElBQUEsTUFBTSxFQUFFUCxLQUFLLENBQUNRO0FBTmhCLE1BUUdSLEtBQUssQ0FBQ1MsUUFSVCxDQURGO0FBWUQsQ0F0QmlCLENBQWxCO0FBd0JBVSxTQUFTLENBQUNULFNBQVYsR0FBc0I7QUFDcEJKLEVBQUFBLFVBQVUsRUFBRUssc0JBQVVDLE1BREY7QUFFcEJMLEVBQUFBLE9BQU8sRUFBRUksc0JBQVVFLElBRkM7QUFHcEJMLEVBQUFBLE1BQU0sRUFBRUcsc0JBQVVFLElBSEU7QUFJcEJKLEVBQUFBLFFBQVEsRUFBRUUsc0JBQVVJLFNBQVYsQ0FBb0IsQ0FBQ0osc0JBQVVLLE9BQVYsQ0FBa0JMLHNCQUFVUixJQUE1QixDQUFELEVBQW9DUSxzQkFBVVIsSUFBOUMsQ0FBcEIsRUFBeUVjO0FBSi9ELENBQXRCOztBQU9PLElBQU1RLDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBOEIsQ0FBQ0MsTUFBRCxFQUFZO0FBQ3JELE1BQU1DLFVBQVUsR0FBR0QsTUFBTSxDQUFDRSxLQUFQLENBQWFDLFFBQWIsQ0FBc0JDLGNBQXRCLENBQXFDLFVBQUNDLENBQUQ7QUFBQSxXQUFPLENBQUMsQ0FBQ0EsQ0FBQyxDQUFDM0IsSUFBSixJQUFZLENBQUMsQ0FBQzJCLENBQUMsQ0FBQzNCLElBQUYsQ0FBT21CLEdBQVAsQ0FBVyxVQUFYLENBQXJCO0FBQUEsR0FBckMsQ0FBbkI7O0FBRUEsTUFBSSxDQUFDSSxVQUFMLEVBQWlCO0FBQ2Y7QUFDRDs7QUFFREQsRUFBQUEsTUFBTSxDQUFDTSxpQkFBUCxDQUF5QkwsVUFBekI7QUFFQSxNQUFNTSxNQUFNLEdBQUdOLFVBQVUsQ0FBQ3ZCLElBQVgsQ0FBZ0I4QixNQUFoQixDQUF1QixVQUF2QixDQUFmO0FBRUFSLEVBQUFBLE1BQU0sQ0FBQ1MsWUFBUCxDQUFvQlIsVUFBVSxDQUFDUyxHQUEvQixFQUFvQztBQUFFaEMsSUFBQUEsSUFBSSxFQUFFNkI7QUFBUixHQUFwQztBQUNELENBWk07Ozs7ZUFjUSxrQkFBQ0ksSUFBRCxFQUFPQztBQUFlO0FBQXRCLEVBQW1EO0FBQ2hFLE1BQU1DLElBQUksR0FBRyxtQ0FBa0JGLElBQWxCLENBQWIsQ0FEZ0UsQ0FHaEU7O0FBRUEsTUFBSUUsSUFBSSxDQUFDQyxNQUFMLElBQWVELElBQUksQ0FBQ0MsTUFBTCxDQUFZQyxNQUEvQixFQUF1QztBQUNyQ0MsSUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlKLElBQUksQ0FBQ0MsTUFBTCxDQUFZQyxNQUF4QixFQUFnQ0csT0FBaEMsQ0FBd0MsVUFBQ1IsR0FBRCxFQUFTO0FBQy9DLFVBQU1TLEtBQUssR0FBR04sSUFBSSxDQUFDQyxNQUFMLENBQVlDLE1BQVosQ0FBbUJMLEdBQW5CLENBQWQ7O0FBRUEsVUFBSVMsS0FBSyxDQUFDQyxNQUFWLEVBQWtCO0FBQ2hCLFlBQUlELEtBQUssQ0FBQ0UsS0FBTixDQUFZLENBQVosRUFBZUMsS0FBbkIsRUFBMEI7QUFDeEJILFVBQUFBLEtBQUssQ0FBQ0UsS0FBTixDQUFZLENBQVosSUFBaUI7QUFDZkUsWUFBQUEsSUFBSSxFQUFFSixLQUFLLENBQUNFLEtBQU4sQ0FBWSxDQUFaLEVBQWVDLEtBQWYsQ0FBcUIsQ0FBckI7QUFEUyxXQUFqQjtBQUdEOztBQUVELFlBQUlILEtBQUssQ0FBQ0UsS0FBTixDQUFZLENBQVosRUFBZUcsT0FBbkIsRUFBNEI7QUFDMUJMLFVBQUFBLEtBQUssQ0FBQ0UsS0FBTixDQUFZLENBQVosSUFBaUI7QUFDZm5DLFlBQUFBLE1BQU0sRUFBRWlDLEtBQUssQ0FBQ0UsS0FBTixDQUFZLENBQVosRUFBZUcsT0FBZixDQUF1QixDQUF2QjtBQURPLFdBQWpCO0FBR0Q7O0FBRURMLFFBQUFBLEtBQUssQ0FBQ0MsTUFBTixHQUFlO0FBQ2JHLFVBQUFBLElBQUksRUFBRUosS0FBSyxDQUFDQyxNQUFOLENBQWFFLEtBQWIsQ0FBbUIsQ0FBbkI7QUFETyxTQUFmO0FBR0QsT0FoQkQsTUFnQk87QUFDTEgsUUFBQUEsS0FBSyxDQUFDRSxLQUFOLENBQVksQ0FBWixJQUFpQjtBQUFFRSxVQUFBQSxJQUFJLEVBQUVKLEtBQUssQ0FBQ0UsS0FBTixDQUFZLENBQVosRUFBZUMsS0FBZixDQUFxQixDQUFyQjtBQUFSLFNBQWpCO0FBQ0Q7QUFDRixLQXRCRDtBQXVCRDs7QUFFRFQsRUFBQUEsSUFBSSxDQUFDWSxLQUFMLENBQVdDLGFBQVgsR0FBMkIsVUFBQ0MsYUFBRCxFQUFnQmpCLEdBQWhCLEVBQXdCO0FBQ2pELFFBQU1qQyxJQUFJLEdBQUdrRCxhQUFhLENBQUNDLGFBQWQsQ0FBNEJsQixHQUE1QixDQUFiO0FBQ0EsUUFBTW1CLFNBQVMsR0FBR0YsYUFBYSxDQUFDRyxZQUFkLENBQTJCcEIsR0FBM0IsRUFBZ0NxQixJQUFoQyxDQUFxQ3RELElBQXJDLENBQWxCO0FBQ0EsV0FBT29ELFNBQVMsQ0FBQ0csUUFBVixDQUFtQixVQUFDQyxDQUFEO0FBQUEsYUFBT0EsQ0FBQyxDQUFDVixJQUFGLEtBQVcsT0FBbEI7QUFBQSxLQUFuQixDQUFQO0FBQ0QsR0FKRDs7QUFNQVYsRUFBQUEsSUFBSSxDQUFDWSxLQUFMLENBQVdTLHNCQUFYLEdBQW9DLFVBQUNDLEdBQUQsRUFBTUMsT0FBTixFQUFlQyxLQUFmLEVBQXlCO0FBQzNELFFBQU1DLFlBQVksR0FBR3pCLElBQUksQ0FBQ1ksS0FBTCxDQUFXYyxXQUFYLENBQXVCSixHQUF2QixFQUE0QkMsT0FBNUIsQ0FBckI7O0FBQ0EsUUFBTUksUUFBUSxHQUFHQyxhQUFNQyxNQUFOLGlDQUNaSixZQUFZLENBQUNLLE1BQWIsRUFEWSxHQUVaTixLQUZZLEVBQWpCOztBQUtBLFdBQU9HLFFBQVA7QUFDRCxHQVJEOztBQVVBM0IsRUFBQUEsSUFBSSxDQUFDK0IsT0FBTCxHQUFlO0FBQ2JyQixJQUFBQSxJQUFJLEVBQUUsT0FETztBQUVic0IsSUFBQUEsSUFBSSxlQUFFLGdDQUFDLGtCQUFELE9BRk87QUFHYkMsSUFBQUEsU0FBUyxFQUFFLGNBSEU7QUFJYkMsSUFBQUEsT0FBTyxFQUFFLGlCQUFDN0MsS0FBRCxFQUFROEMsUUFBUixFQUFxQjtBQUM1QjdFLE1BQUFBLEdBQUcsQ0FBQyxjQUFELENBQUg7QUFDQSxVQUFNNkIsTUFBTSxHQUFHRSxLQUFLLENBQUNGLE1BQU4sRUFBZjtBQUNBLFVBQU13QyxRQUFRLEdBQUczQixJQUFJLENBQUNZLEtBQUwsQ0FBV1Msc0JBQVgsQ0FBa0MsQ0FBbEMsRUFBcUMsQ0FBckMsRUFBd0M7QUFDdkR4RCxRQUFBQSxJQUFJLEVBQUU7QUFDSnVFLFVBQUFBLE1BQU0sRUFBRSxHQURKO0FBRUpULFVBQUFBLFFBQVEsRUFBRTtBQUZOO0FBRGlELE9BQXhDLENBQWpCO0FBT0F4QyxNQUFBQSxNQUFNLENBQUNrRCxXQUFQLENBQW1CVixRQUFuQjtBQUVBekMsTUFBQUEsMkJBQTJCLENBQUNDLE1BQUQsQ0FBM0I7QUFDQWdELE1BQUFBLFFBQVEsQ0FBQ2hELE1BQUQsQ0FBUjtBQUNELEtBbEJZO0FBbUJibUQsSUFBQUEsUUFBUSxFQUFFLGtCQUFDMUUsSUFBRCxFQUFPeUIsS0FBUDtBQUFBLGFBQWlCekIsSUFBSSxJQUFJQSxJQUFJLENBQUNTLE1BQUwsS0FBZ0IsT0FBeEIsSUFBbUMyQixJQUFJLENBQUNZLEtBQUwsQ0FBVzJCLGtCQUFYLENBQThCbEQsS0FBOUIsQ0FBcEQ7QUFBQSxLQW5CRzs7QUFvQmI7QUFDSjtBQUNBO0FBQ0ltRCxJQUFBQSxhQUFhLEVBQUUsdUJBQUM1RSxJQUFELEVBQU95QixLQUFQLEVBQWNvRCxhQUFkLEVBQTZCQyxlQUE3QixFQUFpRDtBQUM5RHBGLE1BQUFBLEdBQUcsQ0FBQyw2QkFBRCxFQUFnQ00sSUFBSSxDQUFDQyxJQUFyQyxDQUFIO0FBRUEsVUFBTThFLFVBQVUsR0FBRzNDLElBQUksQ0FBQ1ksS0FBTCxDQUFXQyxhQUFYLENBQXlCeEIsS0FBSyxDQUFDQyxRQUEvQixFQUF5QzFCLElBQXpDLGFBQXlDQSxJQUF6Qyx1QkFBeUNBLElBQUksQ0FBRWlDLEdBQS9DLENBQW5CO0FBQ0F2QyxNQUFBQSxHQUFHLENBQUMsOEJBQUQsRUFBaUNxRixVQUFqQyxDQUFIOztBQUVBLFVBQU1DLFNBQVMsR0FBRyxTQUFaQSxTQUFZO0FBQUEsZUFBTUQsVUFBVSxDQUFDOUUsSUFBWCxDQUFnQm1CLEdBQWhCLENBQW9CLFFBQXBCLEtBQWlDMkQsVUFBVSxDQUFDOUUsSUFBWCxDQUFnQm1CLEdBQWhCLENBQW9CLFFBQXBCLE1BQWtDLEdBQXpFO0FBQUEsT0FBbEI7O0FBQ0EsVUFBTTZELE1BQU0sR0FBRyxTQUFUQSxNQUFTLEdBQU07QUFDbkIsWUFBTTFELE1BQU0sR0FBR2EsSUFBSSxDQUFDOEMsT0FBTCxDQUFhQyxTQUFiLENBQXVCMUQsS0FBSyxDQUFDRixNQUFOLEVBQXZCLENBQWY7QUFDQXNELFFBQUFBLGFBQWEsQ0FBQ3RELE1BQUQsRUFBUyxLQUFULENBQWI7QUFDRCxPQUhEOztBQUtBLFVBQU02RCxTQUFTLEdBQUcsU0FBWkEsU0FBWSxHQUFNO0FBQ3RCLFlBQU03RCxNQUFNLEdBQUdhLElBQUksQ0FBQzhDLE9BQUwsQ0FBYUcsWUFBYixDQUEwQjVELEtBQUssQ0FBQ0YsTUFBTixFQUExQixDQUFmO0FBQ0FzRCxRQUFBQSxhQUFhLENBQUN0RCxNQUFELEVBQVMsS0FBVCxDQUFiO0FBQ0QsT0FIRDs7QUFLQSxVQUFNK0QsU0FBUyxHQUFHLFNBQVpBLFNBQVksR0FBTTtBQUN0QixZQUFNL0QsTUFBTSxHQUFHYSxJQUFJLENBQUM4QyxPQUFMLENBQWFJLFNBQWIsQ0FBdUI3RCxLQUFLLENBQUNGLE1BQU4sRUFBdkIsQ0FBZjtBQUNBc0QsUUFBQUEsYUFBYSxDQUFDdEQsTUFBRCxFQUFTLEtBQVQsQ0FBYjtBQUNELE9BSEQ7O0FBS0EsVUFBTWdFLFlBQVksR0FBRyxTQUFmQSxZQUFlLEdBQU07QUFDekIsWUFBTWhFLE1BQU0sR0FBR2EsSUFBSSxDQUFDOEMsT0FBTCxDQUFhSyxZQUFiLENBQTBCOUQsS0FBSyxDQUFDRixNQUFOLEVBQTFCLENBQWY7QUFDQXNELFFBQUFBLGFBQWEsQ0FBQ3RELE1BQUQsRUFBUyxLQUFULENBQWI7QUFDRCxPQUhEOztBQUtBLFVBQU1pRSxXQUFXLEdBQUcsU0FBZEEsV0FBYyxHQUFNO0FBQ3hCLFlBQU1qRSxNQUFNLEdBQUdhLElBQUksQ0FBQzhDLE9BQUwsQ0FBYU0sV0FBYixDQUF5Qi9ELEtBQUssQ0FBQ0YsTUFBTixFQUF6QixDQUFmO0FBQ0FzRCxRQUFBQSxhQUFhLENBQUN0RCxNQUFELEVBQVMsS0FBVCxDQUFiO0FBQ0QsT0FIRDs7QUFLQSxVQUFNa0UsWUFBWSxHQUFHLFNBQWZBLFlBQWUsR0FBTTtBQUN6QixZQUFReEYsSUFBUixHQUFpQjhFLFVBQWpCLENBQVE5RSxJQUFSO0FBQ0EsWUFBTTZCLE1BQU0sR0FBRzdCLElBQUksQ0FBQ3lGLEdBQUwsQ0FBUyxRQUFULEVBQW1CVixTQUFTLEtBQUssR0FBTCxHQUFXLEdBQXZDLENBQWY7QUFDQXRGLFFBQUFBLEdBQUcsQ0FBQyx5QkFBRCxFQUE0Qm9DLE1BQTVCLENBQUg7QUFDQSxZQUFNUCxNQUFNLEdBQUdFLEtBQUssQ0FBQ0YsTUFBTixHQUFlUyxZQUFmLENBQTRCK0MsVUFBVSxDQUFDOUMsR0FBdkMsRUFBNEM7QUFBRWhDLFVBQUFBLElBQUksRUFBRTZCO0FBQVIsU0FBNUMsQ0FBZjtBQUNBK0MsUUFBQUEsYUFBYSxDQUFDdEQsTUFBRCxFQUFTLEtBQVQsQ0FBYjtBQUNELE9BTkQ7O0FBUUEsVUFBTW9FLE1BQU0sR0FBRyxTQUFUQSxNQUFTLEdBQU07QUFDbkJqRyxRQUFBQSxHQUFHLENBQUMsZ0NBQUQsQ0FBSDtBQUNBbUYsUUFBQUEsYUFBYSxDQUFDLElBQUQsRUFBTyxJQUFQLENBQWI7QUFDRCxPQUhEOztBQUtBLFVBQU1lLEVBQUUsR0FBRyxTQUFMQSxFQUFLO0FBQUEsNEJBQ1QsZ0NBQUMsd0JBQUQ7QUFDRSxVQUFBLGVBQWUsRUFBRWQsZUFEbkI7QUFFRSxVQUFBLE9BQU8sRUFBRTNDLGNBRlg7QUFHRSxVQUFBLFFBQVEsRUFBRSxrQkFBQzBELENBQUQ7QUFBQSxtQkFBT2hCLGFBQWEsQ0FBQ2dCLENBQUQsRUFBSSxLQUFKLENBQXBCO0FBQUEsV0FIWjtBQUlFLFVBQUEsS0FBSyxFQUFFcEUsS0FKVDtBQUtFLFVBQUEsUUFBUSxFQUFFd0QsTUFMWjtBQU1FLFVBQUEsV0FBVyxFQUFFSyxTQU5mO0FBT0UsVUFBQSxXQUFXLEVBQUVGLFNBUGY7QUFRRSxVQUFBLGNBQWMsRUFBRUcsWUFSbEI7QUFTRSxVQUFBLGFBQWEsRUFBRUMsV0FUakI7QUFVRSxVQUFBLFNBQVMsRUFBRVIsU0FBUyxFQVZ0QjtBQVdFLFVBQUEsY0FBYyxFQUFFUyxZQVhsQjtBQVlFLFVBQUEsTUFBTSxFQUFFRTtBQVpWLFVBRFM7QUFBQSxPQUFYOztBQWlCQSxhQUFPQyxFQUFQO0FBQ0Q7QUF0RlksR0FBZjs7QUF5RkEsTUFBTUUsSUFBSSxHQUFHLFNBQVBBLElBQU8sQ0FBQ2pHLEtBQUQsRUFBVztBQUN0QixZQUFRQSxLQUFLLENBQUNHLElBQU4sQ0FBVzhDLElBQW5CO0FBQ0UsV0FBSyxPQUFMO0FBQ0UsNEJBQU8sZ0NBQUMsS0FBRCxnQ0FBV2pELEtBQVg7QUFBa0IsVUFBQSxPQUFPLEVBQUVxQyxJQUFJLENBQUM5QixPQUFoQztBQUF5QyxVQUFBLE1BQU0sRUFBRThCLElBQUksQ0FBQzdCO0FBQXRELFdBQVA7O0FBQ0YsV0FBSyxXQUFMO0FBQ0UsNEJBQU8sZ0NBQUMsUUFBRCxFQUFjUixLQUFkLENBQVA7O0FBQ0YsV0FBSyxZQUFMO0FBQ0UsNEJBQU8sZ0NBQUMsU0FBRCxnQ0FBZUEsS0FBZjtBQUFzQixVQUFBLE9BQU8sRUFBRXFDLElBQUksQ0FBQzlCLE9BQXBDO0FBQTZDLFVBQUEsTUFBTSxFQUFFOEIsSUFBSSxDQUFDN0I7QUFBMUQsV0FBUDs7QUFDRjtBQUNFLGVBQU8sSUFBUDtBQVJKO0FBVUQsR0FYRDs7QUFZQXlGLEVBQUFBLElBQUksQ0FBQ3ZGLFNBQUwsR0FBaUI7QUFDZlAsSUFBQUEsSUFBSSxFQUFFUSxzQkFBVUM7QUFERCxHQUFqQjs7QUFJQTJCLEVBQUFBLElBQUksQ0FBQzJELGFBQUwsR0FBcUIsVUFBQy9GLElBQUQsRUFBVTtBQUM3QixRQUFNZ0csa0JBQWtCLEdBQUcsRUFBM0I7QUFFQSxRQUFJaEcsSUFBSSxDQUFDUyxNQUFMLEtBQWdCLFVBQXBCLEVBQWdDO0FBRWhDVCxJQUFBQSxJQUFJLENBQUMyQixjQUFMLENBQW9CLFVBQUNDLENBQUQsRUFBTztBQUN6QixVQUFJQSxDQUFDLENBQUNrQixJQUFGLEtBQVcsT0FBZixFQUF3QjtBQUN0QixZQUFNbUQsU0FBUyxHQUFHakcsSUFBSSxDQUFDa0csT0FBTCxDQUFhdEUsQ0FBQyxDQUFDSyxHQUFmLENBQWxCO0FBQ0EsWUFBTWtFLFFBQVEsR0FBR25HLElBQUksQ0FBQ29HLGVBQUwsQ0FBcUJILFNBQXJCLENBQWpCO0FBQ0EsWUFBTUksUUFBUSxHQUFHckcsSUFBSSxDQUFDc0csV0FBTCxDQUFpQkwsU0FBakIsQ0FBakI7O0FBRUEsWUFBSSxDQUFDRSxRQUFELElBQWEsQ0FBQ0UsUUFBbEIsRUFBNEI7QUFDMUJMLFVBQUFBLGtCQUFrQixDQUFDMUMsSUFBbkIsQ0FBd0I7QUFDdEJ0RCxZQUFBQSxJQUFJLEVBQUU0QixDQURnQjtBQUV0QnVFLFlBQUFBLFFBQVEsRUFBUkEsUUFGc0I7QUFHdEJFLFlBQUFBLFFBQVEsRUFBUkE7QUFIc0IsV0FBeEI7QUFLRDtBQUNGO0FBQ0YsS0FkRDs7QUFnQkEsUUFBSSxDQUFDTCxrQkFBa0IsQ0FBQ08sTUFBeEIsRUFBZ0M7QUFDOUI7QUFDRDs7QUFFRCxXQUFPLFVBQUNoRixNQUFELEVBQVk7QUFDakIsVUFBTWlGLFFBQVEsR0FBRztBQUNmL0YsUUFBQUEsTUFBTSxFQUFFLE9BRE87QUFFZnFDLFFBQUFBLElBQUksRUFBRTtBQUZTLE9BQWpCO0FBS0FrRCxNQUFBQSxrQkFBa0IsQ0FBQ3ZELE9BQW5CLENBQTJCLFVBQUNnRSxDQUFELEVBQU87QUFDaEMsWUFBTVIsU0FBUyxHQUFHMUUsTUFBTSxDQUFDRSxLQUFQLENBQWFDLFFBQWIsQ0FBc0J3RSxPQUF0QixDQUE4Qk8sQ0FBQyxDQUFDekcsSUFBRixDQUFPaUMsR0FBckMsRUFBMENpQyxNQUExQyxFQUFsQixDQURnQyxDQUVoQzs7QUFDQSxZQUFJd0MsVUFBVSxHQUFHVCxTQUFTLENBQUNVLE1BQVYsQ0FBaUIsQ0FBQyxDQUFsQixFQUFxQixDQUFyQixDQUFqQjs7QUFFQSxZQUFJLENBQUNGLENBQUMsQ0FBQ04sUUFBUCxFQUFpQjtBQUNmO0FBQ0E1RSxVQUFBQSxNQUFNLENBQUNxRixnQkFBUCxDQUF3QlgsU0FBeEIsRUFBbUNTLFVBQW5DLEVBQStDRixRQUEvQyxFQUZlLENBR2Y7QUFDQTs7QUFDQTtBQUNEOztBQUVELFlBQUksQ0FBQ0MsQ0FBQyxDQUFDSixRQUFQLEVBQWlCO0FBQ2Y7QUFDQTlFLFVBQUFBLE1BQU0sQ0FBQ3FGLGdCQUFQLENBQXdCWCxTQUF4QixFQUFtQ1MsVUFBVSxHQUFHLENBQWhELEVBQW1ERixRQUFuRDtBQUNEO0FBQ0YsT0FqQkQ7QUFrQkQsS0F4QkQ7QUF5QkQsR0FsREQ7O0FBb0RBcEUsRUFBQUEsSUFBSSxDQUFDeUUsVUFBTCxHQUFrQmYsSUFBbEI7QUFDQTFELEVBQUFBLElBQUksQ0FBQzBFLElBQUwsR0FBWSxPQUFaO0FBRUEsU0FBTzFFLElBQVA7QUFDRCxDOzs7O0FBRU0sSUFBTTJFLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ0MsQ0FBRCxFQUFPO0FBQ3JDLE1BQU1DLEtBQUssR0FBRyx5QkFBZDtBQUNBLE1BQUlDLEtBQUo7QUFDQSxNQUFNQyxNQUFNLEdBQUcsRUFBZjs7QUFDQSxTQUFRRCxLQUFLLEdBQUdELEtBQUssQ0FBQ0csSUFBTixDQUFXSixDQUFYLENBQWhCLEVBQWdDO0FBQzlCRyxJQUFBQSxNQUFNLENBQUNELEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBTixHQUFtQkEsS0FBSyxDQUFDLENBQUQsQ0FBTCxDQUFTRyxJQUFULEVBQW5CO0FBQ0Q7O0FBQ0QsU0FBT0YsTUFBUDtBQUNELENBUk07Ozs7QUFVQSxJQUFNRyxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUNDLENBQUQ7QUFBQSxTQUFPLHFCQUFjQSxDQUFkLEVBQWlCO0FBQUVDLElBQUFBLFFBQVEsRUFBRSxJQUFaO0FBQWtCQyxJQUFBQSxRQUFRLEVBQUU7QUFBNUIsR0FBakIsQ0FBUDtBQUFBLENBQXhCOzs7O0FBRVAsSUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDQyxFQUFEO0FBQUEsU0FBUSxVQUFDQyxHQUFELEVBQU1DLFNBQU4sRUFBb0I7QUFDbEQsUUFBTXBHLEtBQUssR0FBR2tHLEVBQUUsQ0FBQ0csWUFBSCxDQUFnQkQsU0FBaEIsQ0FBZDs7QUFDQSxRQUFJcEcsS0FBSixFQUFXO0FBQ1QsVUFBSW9HLFNBQVMsS0FBSyxPQUFsQixFQUEyQjtBQUN6QixZQUFNRSxXQUFXLEdBQUdKLEVBQUUsQ0FBQ0csWUFBSCxDQUFnQkQsU0FBaEIsQ0FBcEI7QUFDQSxZQUFNRyxnQkFBZ0IsR0FBR1YsZUFBZSxDQUFDUCxnQkFBZ0IsQ0FBQ2dCLFdBQUQsQ0FBakIsQ0FBeEM7QUFDQUgsUUFBQUEsR0FBRyxDQUFDLE9BQUQsQ0FBSCxHQUFlSSxnQkFBZjtBQUNELE9BSkQsTUFJTztBQUNMSixRQUFBQSxHQUFHLENBQUNDLFNBQUQsQ0FBSCxHQUFpQkYsRUFBRSxDQUFDRyxZQUFILENBQWdCRCxTQUFoQixDQUFqQjtBQUNEO0FBQ0Y7O0FBQ0QsV0FBT0QsR0FBUDtBQUNELEdBWnVCO0FBQUEsQ0FBeEI7O0FBY0EsSUFBTTdILGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ0UsSUFBRCxFQUFVO0FBQ2pDLE1BQUksQ0FBQ0EsSUFBRCxJQUFTLENBQUNBLElBQUksQ0FBQ21CLEdBQW5CLEVBQXdCO0FBQ3RCLFdBQU8sRUFBUDtBQUNEOztBQUVELFNBQU9uQixJQUFJLENBQUNnSSxNQUFMLENBQVksVUFBQ0wsR0FBRCxFQUFNTSxDQUFOLEVBQVNwQixJQUFULEVBQWtCO0FBQ25DLFFBQUlvQixDQUFKLEVBQU87QUFDTE4sTUFBQUEsR0FBRyxDQUFDLG9DQUFRZCxJQUFSLENBQUQsQ0FBSCxHQUFxQm9CLENBQXJCO0FBQ0Q7O0FBQ0QsV0FBT04sR0FBUDtBQUNELEdBTE0sRUFLSixFQUxJLENBQVA7QUFNRCxDQVhEOztBQWFBLElBQU16SCxVQUFVLEdBQUcsQ0FBQyxRQUFELEVBQVcsYUFBWCxFQUEwQixhQUExQixFQUF5QyxPQUF6QyxFQUFrRCxPQUFsRCxDQUFuQjtBQUVBLElBQU1nSSxjQUFjLEdBQUcsQ0FBQyxTQUFELEVBQVksU0FBWixFQUF1QixPQUF2QixFQUFnQyxPQUFoQyxDQUF2QjtBQUVPLElBQU1DLGFBQWEsR0FBRztBQUMzQkMsRUFBQUEsV0FEMkIsdUJBQ2ZWLEVBRGUsRUFDWFcsSUFEVyxFQUNMO0FBQ3BCLFFBQU1DLEdBQUcsR0FBR1osRUFBRSxDQUFDYSxPQUFILENBQVdDLFdBQVgsRUFBWjs7QUFFQSxZQUFRRixHQUFSO0FBQ0UsV0FBSyxPQUFMO0FBQWM7QUFDWixjQUFNakksUUFBUSxHQUNacUgsRUFBRSxDQUFDckgsUUFBSCxDQUFZaUcsTUFBWixLQUF1QixDQUF2QixJQUE0Qm9CLEVBQUUsQ0FBQ3JILFFBQUgsQ0FBWSxDQUFaLEVBQWVrSSxPQUFmLENBQXVCQyxXQUF2QixPQUF5QyxPQUFyRSxHQUNJZCxFQUFFLENBQUNySCxRQUFILENBQVksQ0FBWixFQUFlQSxRQURuQixHQUVJcUgsRUFBRSxDQUFDckgsUUFIVDtBQUlBLGNBQU11RixDQUFDLEdBQUc2QyxLQUFLLENBQUNDLElBQU4sQ0FBV3JJLFFBQVgsQ0FBVjtBQUVBLGlCQUFPO0FBQ0xHLFlBQUFBLE1BQU0sRUFBRSxPQURIO0FBRUxxQyxZQUFBQSxJQUFJLEVBQUUsT0FGRDtBQUdMRixZQUFBQSxLQUFLLEVBQUUwRixJQUFJLENBQUN6QyxDQUFELENBSE47QUFJTDVGLFlBQUFBLElBQUksRUFBRUUsVUFBVSxDQUFDOEgsTUFBWCxDQUFrQlAsZUFBZSxDQUFDQyxFQUFELENBQWpDLEVBQXVDLEVBQXZDO0FBSkQsV0FBUDtBQU1EOztBQUVELFdBQUssSUFBTDtBQUFXO0FBQ1QsaUJBQU87QUFDTGxILFlBQUFBLE1BQU0sRUFBRSxPQURIO0FBRUxxQyxZQUFBQSxJQUFJLEVBQUUsWUFGRDtBQUdMRixZQUFBQSxLQUFLLEVBQUUwRixJQUFJLENBQUNYLEVBQUUsQ0FBQ2lCLFVBQUosQ0FITjtBQUlMM0ksWUFBQUEsSUFBSSxFQUFFa0ksY0FBYyxDQUFDRixNQUFmLENBQXNCUCxlQUFlLENBQUNDLEVBQUQsQ0FBckMsRUFBMkM7QUFBRXRHLGNBQUFBLE1BQU0sRUFBRTtBQUFWLGFBQTNDO0FBSkQsV0FBUDtBQU1EOztBQUVELFdBQUssSUFBTDtBQUFXO0FBQ1QsaUJBQU87QUFDTFosWUFBQUEsTUFBTSxFQUFFLE9BREg7QUFFTHFDLFlBQUFBLElBQUksRUFBRSxXQUZEO0FBR0xGLFlBQUFBLEtBQUssRUFBRTBGLElBQUksQ0FBQ0ksS0FBSyxDQUFDQyxJQUFOLENBQVdoQixFQUFFLENBQUNySCxRQUFkLENBQUQ7QUFITixXQUFQO0FBS0Q7O0FBRUQsV0FBSyxJQUFMO0FBQVc7QUFDVCxpQkFBTztBQUNMRyxZQUFBQSxNQUFNLEVBQUUsT0FESDtBQUVMcUMsWUFBQUEsSUFBSSxFQUFFLFlBRkQ7QUFHTEYsWUFBQUEsS0FBSyxFQUFFMEYsSUFBSSxDQUFDSSxLQUFLLENBQUNDLElBQU4sQ0FBV2hCLEVBQUUsQ0FBQ2lCLFVBQWQsQ0FBRCxDQUhOO0FBSUwzSSxZQUFBQSxJQUFJLEVBQUVrSSxjQUFjLENBQUNGLE1BQWYsQ0FBc0JQLGVBQWUsQ0FBQ0MsRUFBRCxDQUFyQyxFQUEyQztBQUFFdEcsY0FBQUEsTUFBTSxFQUFFO0FBQVYsYUFBM0M7QUFKRCxXQUFQO0FBTUQ7QUF4Q0g7QUEwQ0QsR0E5QzBCO0FBK0MzQndILEVBQUFBLFNBL0MyQixxQkErQ2pCcEksTUEvQ2lCLEVBK0NUSCxRQS9DUyxFQStDQztBQUMxQixRQUFJRyxNQUFNLENBQUNBLE1BQVAsS0FBa0IsT0FBdEIsRUFBK0I7QUFDN0I7QUFDRDs7QUFFRCxZQUFRQSxNQUFNLENBQUNxQyxJQUFmO0FBQ0UsV0FBSyxPQUFMO0FBQWM7QUFDWixjQUFNM0MsV0FBVSxHQUFHSixnQkFBZ0IsQ0FBQ1UsTUFBTSxDQUFDUixJQUFSLENBQW5DOztBQUVBLDhCQUNFLHlDQUFXRSxXQUFYLGVBQ0UsK0NBQVFHLFFBQVIsQ0FERixDQURGO0FBS0Q7O0FBRUQsV0FBSyxXQUFMO0FBQWtCO0FBQ2hCLDhCQUFPLDRDQUFLQSxRQUFMLENBQVA7QUFDRDs7QUFFRCxXQUFLLFlBQUw7QUFBbUI7QUFDakIsY0FBTUgsWUFBVSxHQUFHSixnQkFBZ0IsQ0FBQ1UsTUFBTSxDQUFDUixJQUFSLENBQW5DOztBQUNBLGlCQUFPRSxZQUFVLENBQUNrQixNQUFsQjs7QUFFQSxjQUFJWixNQUFNLENBQUNSLElBQVAsQ0FBWW1CLEdBQVosQ0FBZ0IsUUFBaEIsQ0FBSixFQUErQjtBQUM3QixnQ0FBTyxzQ0FBUWpCLFlBQVIsRUFBcUJHLFFBQXJCLENBQVA7QUFDRCxXQUZELE1BRU87QUFDTCxnQ0FBTyxzQ0FBUUgsWUFBUixFQUFxQkcsUUFBckIsQ0FBUDtBQUNEO0FBQ0Y7QUF4Qkg7QUEwQkQ7QUE5RTBCLENBQXRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEJsb2NrIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IGRlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBHcmlkT24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL0dyaWRPbic7XG5pbXBvcnQgVGFibGVUb29sYmFyIGZyb20gJy4vdGFibGUtdG9vbGJhcic7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFNsYXRlUHJvcFR5cGVzIGZyb20gJ3NsYXRlLXByb3AtdHlwZXMnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgY29udmVydCBmcm9tICdyZWFjdC1hdHRyLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBvYmplY3QgYXMgdG9TdHlsZU9iamVjdCB9IGZyb20gJ3RvLXN0eWxlJztcbmltcG9ydCBDdXN0b21UYWJsZVBsdWdpbiBmcm9tICcuL0N1c3RvbVRhYmxlUGx1Z2luJztcblxuY29uc3QgbG9nID0gZGVidWcoJ0BwaWUtbGliOmVkaXRhYmxlLWh0bWw6cGx1Z2luczp0YWJsZScpO1xuXG5jb25zdCBUYWJsZSA9IHdpdGhTdHlsZXMoKCkgPT4gKHtcbiAgdGFibGU6IHt9LFxufSkpKChwcm9wcykgPT4ge1xuICBjb25zdCBub2RlQXR0cmlidXRlcyA9IGRhdGFUb0F0dHJpYnV0ZXMocHJvcHMubm9kZS5kYXRhKTtcblxuICByZXR1cm4gKFxuICAgIDx0YWJsZVxuICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc2VzLnRhYmxlfVxuICAgICAgey4uLnByb3BzLmF0dHJpYnV0ZXN9XG4gICAgICB7Li4ubm9kZUF0dHJpYnV0ZXN9XG4gICAgICBvbkZvY3VzPXtwcm9wcy5vbkZvY3VzfVxuICAgICAgb25CbHVyPXtwcm9wcy5vbkJsdXJ9XG4gICAgPlxuICAgICAgPHRib2R5Pntwcm9wcy5jaGlsZHJlbn08L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gICk7XG59KTtcblxuVGFibGUucHJvcFR5cGVzID0ge1xuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgbm9kZTogU2xhdGVQcm9wVHlwZXMubm9kZSxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5ub2RlKSwgUHJvcFR5cGVzLm5vZGVdKS5pc1JlcXVpcmVkLFxufTtcblxuY29uc3QgVGFibGVSb3cgPSAocHJvcHMpID0+IDx0ciB7Li4ucHJvcHMuYXR0cmlidXRlc30+e3Byb3BzLmNoaWxkcmVufTwvdHI+O1xuXG5UYWJsZVJvdy5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWQsXG59O1xuXG5jb25zdCBUYWJsZUNlbGwgPSB3aXRoU3R5bGVzKCgpID0+ICh7XG4gIHRkOiB7XG4gICAgbWluV2lkdGg6ICcyNXB4JyxcbiAgfSxcbn0pKSgocHJvcHMpID0+IHtcbiAgY29uc3QgVGFnID0gcHJvcHMubm9kZS5kYXRhLmdldCgnaGVhZGVyJykgPyAndGgnIDogJ3RkJztcblxuICBjb25zdCBub2RlQXR0cmlidXRlcyA9IGRhdGFUb0F0dHJpYnV0ZXMocHJvcHMubm9kZS5kYXRhKTtcbiAgZGVsZXRlIG5vZGVBdHRyaWJ1dGVzLmhlYWRlcjtcblxuICByZXR1cm4gKFxuICAgIDxUYWdcbiAgICAgIHsuLi5wcm9wcy5hdHRyaWJ1dGVzfVxuICAgICAgey4uLm5vZGVBdHRyaWJ1dGVzfVxuICAgICAgY29sU3Bhbj17cHJvcHMubm9kZS5kYXRhLmdldCgnY29sc3BhbicpfVxuICAgICAgY2xhc3NOYW1lPXtwcm9wcy5jbGFzc2VzW1RhZ119XG4gICAgICBvbkZvY3VzPXtwcm9wcy5vbkZvY3VzfVxuICAgICAgb25CbHVyPXtwcm9wcy5vbkJsdXJ9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvVGFnPlxuICApO1xufSk7XG5cblRhYmxlQ2VsbC5wcm9wVHlwZXMgPSB7XG4gIGF0dHJpYnV0ZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm5vZGUpLCBQcm9wVHlwZXMubm9kZV0pLmlzUmVxdWlyZWQsXG59O1xuXG5leHBvcnQgY29uc3QgbW92ZUZvY3VzVG9CZWdpbm5pbmdPZlRhYmxlID0gKGNoYW5nZSkgPT4ge1xuICBjb25zdCBhZGRlZFRhYmxlID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmZpbmREZXNjZW5kYW50KChkKSA9PiAhIWQuZGF0YSAmJiAhIWQuZGF0YS5nZXQoJ25ld1RhYmxlJykpO1xuXG4gIGlmICghYWRkZWRUYWJsZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNoYW5nZS5jb2xsYXBzZVRvU3RhcnRPZihhZGRlZFRhYmxlKTtcblxuICBjb25zdCB1cGRhdGUgPSBhZGRlZFRhYmxlLmRhdGEucmVtb3ZlKCduZXdUYWJsZScpO1xuXG4gIGNoYW5nZS5zZXROb2RlQnlLZXkoYWRkZWRUYWJsZS5rZXksIHsgZGF0YTogdXBkYXRlIH0pO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgKG9wdHMsIHRvb2xiYXJQbHVnaW5zIC8qIDogIHt0b29sYmFyOiB7fX1bXSAqLykgPT4ge1xuICBjb25zdCBjb3JlID0gQ3VzdG9tVGFibGVQbHVnaW4ob3B0cyk7XG5cbiAgLy8gZml4IG91dGRhdGVkIHNjaGVtYVxuXG4gIGlmIChjb3JlLnNjaGVtYSAmJiBjb3JlLnNjaGVtYS5ibG9ja3MpIHtcbiAgICBPYmplY3Qua2V5cyhjb3JlLnNjaGVtYS5ibG9ja3MpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgYmxvY2sgPSBjb3JlLnNjaGVtYS5ibG9ja3Nba2V5XTtcblxuICAgICAgaWYgKGJsb2NrLnBhcmVudCkge1xuICAgICAgICBpZiAoYmxvY2subm9kZXNbMF0udHlwZXMpIHtcbiAgICAgICAgICBibG9jay5ub2Rlc1swXSA9IHtcbiAgICAgICAgICAgIHR5cGU6IGJsb2NrLm5vZGVzWzBdLnR5cGVzWzBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmxvY2subm9kZXNbMF0ub2JqZWN0cykge1xuICAgICAgICAgIGJsb2NrLm5vZGVzWzBdID0ge1xuICAgICAgICAgICAgb2JqZWN0OiBibG9jay5ub2Rlc1swXS5vYmplY3RzWzBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBibG9jay5wYXJlbnQgPSB7XG4gICAgICAgICAgdHlwZTogYmxvY2sucGFyZW50LnR5cGVzWzBdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmxvY2subm9kZXNbMF0gPSB7IHR5cGU6IGJsb2NrLm5vZGVzWzBdLnR5cGVzWzBdIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb3JlLnV0aWxzLmdldFRhYmxlQmxvY2sgPSAoY29udGFpbmVyTm9kZSwga2V5KSA9PiB7XG4gICAgY29uc3Qgbm9kZSA9IGNvbnRhaW5lck5vZGUuZ2V0RGVzY2VuZGFudChrZXkpO1xuICAgIGNvbnN0IGFuY2VzdG9ycyA9IGNvbnRhaW5lck5vZGUuZ2V0QW5jZXN0b3JzKGtleSkucHVzaChub2RlKTtcbiAgICByZXR1cm4gYW5jZXN0b3JzLmZpbmRMYXN0KChwKSA9PiBwLnR5cGUgPT09ICd0YWJsZScpO1xuICB9O1xuXG4gIGNvcmUudXRpbHMuY3JlYXRlVGFibGVXaXRoT3B0aW9ucyA9IChyb3csIGNvbHVtbnMsIGV4dHJhKSA9PiB7XG4gICAgY29uc3QgY3JlYXRlZFRhYmxlID0gY29yZS51dGlscy5jcmVhdGVUYWJsZShyb3csIGNvbHVtbnMpO1xuICAgIGNvbnN0IG5ld1RhYmxlID0gQmxvY2suY3JlYXRlKHtcbiAgICAgIC4uLmNyZWF0ZWRUYWJsZS50b0pTT04oKSxcbiAgICAgIC4uLmV4dHJhLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ld1RhYmxlO1xuICB9O1xuXG4gIGNvcmUudG9vbGJhciA9IHtcbiAgICB0eXBlOiAndGFibGUnLFxuICAgIGljb246IDxHcmlkT24gLz4sXG4gICAgYXJpYUxhYmVsOiAnSW5zZXJ0IFRhYmxlJyxcbiAgICBvbkNsaWNrOiAodmFsdWUsIG9uQ2hhbmdlKSA9PiB7XG4gICAgICBsb2coJ2luc2VydCB0YWJsZScpO1xuICAgICAgY29uc3QgY2hhbmdlID0gdmFsdWUuY2hhbmdlKCk7XG4gICAgICBjb25zdCBuZXdUYWJsZSA9IGNvcmUudXRpbHMuY3JlYXRlVGFibGVXaXRoT3B0aW9ucygyLCAyLCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBib3JkZXI6ICcxJyxcbiAgICAgICAgICBuZXdUYWJsZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjaGFuZ2UuaW5zZXJ0QmxvY2sobmV3VGFibGUpO1xuXG4gICAgICBtb3ZlRm9jdXNUb0JlZ2lubmluZ09mVGFibGUoY2hhbmdlKTtcbiAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgfSxcbiAgICBzdXBwb3J0czogKG5vZGUsIHZhbHVlKSA9PiBub2RlICYmIG5vZGUub2JqZWN0ID09PSAnYmxvY2snICYmIGNvcmUudXRpbHMuaXNTZWxlY3Rpb25JblRhYmxlKHZhbHVlKSxcbiAgICAvKipcbiAgICAgKiBOb3RlIC0gdGhlIG5vZGUgbWF5IG5vdCBiZSBhIHRhYmxlIG5vZGUgLSBpdCBtYXkgYmUgYSBub2RlIGluc2lkZSBhIHRhYmxlLlxuICAgICAqL1xuICAgIGN1c3RvbVRvb2xiYXI6IChub2RlLCB2YWx1ZSwgb25Ub29sYmFyRG9uZSwgZ2V0Rm9jdXNlZFZhbHVlKSA9PiB7XG4gICAgICBsb2coJ1tjdXN0b21Ub29sYmFyXSBub2RlLmRhdGE6ICcsIG5vZGUuZGF0YSk7XG5cbiAgICAgIGNvbnN0IHRhYmxlQmxvY2sgPSBjb3JlLnV0aWxzLmdldFRhYmxlQmxvY2sodmFsdWUuZG9jdW1lbnQsIG5vZGU/LmtleSk7XG4gICAgICBsb2coJ1tjdXN0b21Ub29sYmFyXSB0YWJsZUJsb2NrOiAnLCB0YWJsZUJsb2NrKTtcblxuICAgICAgY29uc3QgaGFzQm9yZGVyID0gKCkgPT4gdGFibGVCbG9jay5kYXRhLmdldCgnYm9yZGVyJykgJiYgdGFibGVCbG9jay5kYXRhLmdldCgnYm9yZGVyJykgIT09ICcwJztcbiAgICAgIGNvbnN0IGFkZFJvdyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gY29yZS5jaGFuZ2VzLmluc2VydFJvdyh2YWx1ZS5jaGFuZ2UoKSk7XG4gICAgICAgIG9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBhZGRDb2x1bW4gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZSA9IGNvcmUuY2hhbmdlcy5pbnNlcnRDb2x1bW4odmFsdWUuY2hhbmdlKCkpO1xuICAgICAgICBvblRvb2xiYXJEb25lKGNoYW5nZSwgZmFsc2UpO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVtb3ZlUm93ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSBjb3JlLmNoYW5nZXMucmVtb3ZlUm93KHZhbHVlLmNoYW5nZSgpKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShjaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlbW92ZUNvbHVtbiA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gY29yZS5jaGFuZ2VzLnJlbW92ZUNvbHVtbih2YWx1ZS5jaGFuZ2UoKSk7XG4gICAgICAgIG9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZW1vdmVUYWJsZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gY29yZS5jaGFuZ2VzLnJlbW92ZVRhYmxlKHZhbHVlLmNoYW5nZSgpKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShjaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRvZ2dsZUJvcmRlciA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSB0YWJsZUJsb2NrO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSBkYXRhLnNldCgnYm9yZGVyJywgaGFzQm9yZGVyKCkgPyAnMCcgOiAnMScpO1xuICAgICAgICBsb2coJ1t0b2dnbGVCb3JkZXJdIHVwZGF0ZTogJywgdXBkYXRlKTtcbiAgICAgICAgY29uc3QgY2hhbmdlID0gdmFsdWUuY2hhbmdlKCkuc2V0Tm9kZUJ5S2V5KHRhYmxlQmxvY2sua2V5LCB7IGRhdGE6IHVwZGF0ZSB9KTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShjaGFuZ2UsIGZhbHNlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uRG9uZSA9ICgpID0+IHtcbiAgICAgICAgbG9nKCdbb25Eb25lXSBjYWxsIG9uVG9vbGJhckRvbmUuLi4nKTtcbiAgICAgICAgb25Ub29sYmFyRG9uZShudWxsLCB0cnVlKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IFRiID0gKCkgPT4gKFxuICAgICAgICA8VGFibGVUb29sYmFyXG4gICAgICAgICAgZ2V0Rm9jdXNlZFZhbHVlPXtnZXRGb2N1c2VkVmFsdWV9XG4gICAgICAgICAgcGx1Z2lucz17dG9vbGJhclBsdWdpbnN9XG4gICAgICAgICAgb25DaGFuZ2U9eyhjKSA9PiBvblRvb2xiYXJEb25lKGMsIGZhbHNlKX1cbiAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgb25BZGRSb3c9e2FkZFJvd31cbiAgICAgICAgICBvblJlbW92ZVJvdz17cmVtb3ZlUm93fVxuICAgICAgICAgIG9uQWRkQ29sdW1uPXthZGRDb2x1bW59XG4gICAgICAgICAgb25SZW1vdmVDb2x1bW49e3JlbW92ZUNvbHVtbn1cbiAgICAgICAgICBvblJlbW92ZVRhYmxlPXtyZW1vdmVUYWJsZX1cbiAgICAgICAgICBoYXNCb3JkZXI9e2hhc0JvcmRlcigpfVxuICAgICAgICAgIG9uVG9nZ2xlQm9yZGVyPXt0b2dnbGVCb3JkZXJ9XG4gICAgICAgICAgb25Eb25lPXtvbkRvbmV9XG4gICAgICAgIC8+XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gVGI7XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBOb2RlID0gKHByb3BzKSA9PiB7XG4gICAgc3dpdGNoIChwcm9wcy5ub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZSB7Li4ucHJvcHN9IG9uRm9jdXM9e29wdHMub25Gb2N1c30gb25CbHVyPXtvcHRzLm9uQmx1cn0gLz47XG4gICAgICBjYXNlICd0YWJsZV9yb3cnOlxuICAgICAgICByZXR1cm4gPFRhYmxlUm93IHsuLi5wcm9wc30gLz47XG4gICAgICBjYXNlICd0YWJsZV9jZWxsJzpcbiAgICAgICAgcmV0dXJuIDxUYWJsZUNlbGwgey4uLnByb3BzfSBvbkZvY3VzPXtvcHRzLm9uRm9jdXN9IG9uQmx1cj17b3B0cy5vbkJsdXJ9IC8+O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICBOb2RlLnByb3BUeXBlcyA9IHtcbiAgICBub2RlOiBQcm9wVHlwZXMub2JqZWN0LFxuICB9O1xuXG4gIGNvcmUubm9ybWFsaXplTm9kZSA9IChub2RlKSA9PiB7XG4gICAgY29uc3QgYWRkTm9kZUJlZm9yZUFycmF5ID0gW107XG5cbiAgICBpZiAobm9kZS5vYmplY3QgIT09ICdkb2N1bWVudCcpIHJldHVybjtcblxuICAgIG5vZGUuZmluZERlc2NlbmRhbnQoKGQpID0+IHtcbiAgICAgIGlmIChkLnR5cGUgPT09ICd0YWJsZScpIHtcbiAgICAgICAgY29uc3QgdGFibGVQYXRoID0gbm9kZS5nZXRQYXRoKGQua2V5KTtcbiAgICAgICAgY29uc3QgcHJldk5vZGUgPSBub2RlLmdldFByZXZpb3VzTm9kZSh0YWJsZVBhdGgpO1xuICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IG5vZGUuZ2V0TmV4dE5vZGUodGFibGVQYXRoKTtcblxuICAgICAgICBpZiAoIXByZXZOb2RlIHx8ICFuZXh0Tm9kZSkge1xuICAgICAgICAgIGFkZE5vZGVCZWZvcmVBcnJheS5wdXNoKHtcbiAgICAgICAgICAgIG5vZGU6IGQsXG4gICAgICAgICAgICBwcmV2Tm9kZSxcbiAgICAgICAgICAgIG5leHROb2RlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIWFkZE5vZGVCZWZvcmVBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNoYW5nZSkgPT4ge1xuICAgICAgY29uc3QgbmV3QmxvY2sgPSB7XG4gICAgICAgIG9iamVjdDogJ2Jsb2NrJyxcbiAgICAgICAgdHlwZTogJ2RpdicsXG4gICAgICB9O1xuXG4gICAgICBhZGROb2RlQmVmb3JlQXJyYXkuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZVBhdGggPSBjaGFuZ2UudmFsdWUuZG9jdW1lbnQuZ2V0UGF0aChuLm5vZGUua2V5KS50b0pTT04oKTtcbiAgICAgICAgLy8gcmVtb3ZpbmcgdGFibGVJbmRleFxuICAgICAgICBsZXQgaW5kZXhUb0FkZCA9IHRhYmxlUGF0aC5zcGxpY2UoLTEpWzBdO1xuXG4gICAgICAgIGlmICghbi5wcmV2Tm9kZSkge1xuICAgICAgICAgIC8vIGluc2VydGluZyBibG9jayBrZXkgYmVmb3JlIHRhYmxlXG4gICAgICAgICAgY2hhbmdlLmluc2VydE5vZGVCeVBhdGgodGFibGVQYXRoLCBpbmRleFRvQWRkLCBuZXdCbG9jayk7XG4gICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgYW5vdGhlciBub3JtYWxpemF0aW9uLCB3aGljaCB3aWxsIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBub3RcbiAgICAgICAgICAvLyBhIGJsb2NrIGFmdGVyIHRoZSB0YWJsZSBhbmQgYWRkIGl0LCBzbyB3ZSBleGl0IGZvciBub3dcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW4ubmV4dE5vZGUpIHtcbiAgICAgICAgICAvLyBpbnNlcnRpbmcgYmxvY2sga2V5IGFmdGVyIHRhYmxlXG4gICAgICAgICAgY2hhbmdlLmluc2VydE5vZGVCeVBhdGgodGFibGVQYXRoLCBpbmRleFRvQWRkICsgMSwgbmV3QmxvY2spO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuICB9O1xuXG4gIGNvcmUucmVuZGVyTm9kZSA9IE5vZGU7XG4gIGNvcmUubmFtZSA9ICd0YWJsZSc7XG5cbiAgcmV0dXJuIGNvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VTdHlsZVN0cmluZyA9IChzKSA9PiB7XG4gIGNvbnN0IHJlZ2V4ID0gLyhbXFx3LV0qKVxccyo6XFxzKihbXjtdKikvZztcbiAgbGV0IG1hdGNoO1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMocykpKSB7XG4gICAgcmVzdWx0W21hdGNoWzFdXSA9IG1hdGNoWzJdLnRyaW0oKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlYWN0QXR0cmlidXRlcyA9IChvKSA9PiB0b1N0eWxlT2JqZWN0KG8sIHsgY2FtZWxpemU6IHRydWUsIGFkZFVuaXRzOiBmYWxzZSB9KTtcblxuY29uc3QgYXR0cmlidXRlc1RvTWFwID0gKGVsKSA9PiAoYWNjLCBhdHRyaWJ1dGUpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKGF0dHJpYnV0ZSA9PT0gJ3N0eWxlJykge1xuICAgICAgY29uc3Qgc3R5bGVTdHJpbmcgPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIGNvbnN0IHJlYWN0U3R5bGVPYmplY3QgPSByZWFjdEF0dHJpYnV0ZXMocGFyc2VTdHlsZVN0cmluZyhzdHlsZVN0cmluZykpO1xuICAgICAgYWNjWydzdHlsZSddID0gcmVhY3RTdHlsZU9iamVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWNjW2F0dHJpYnV0ZV0gPSBlbC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFjYztcbn07XG5cbmNvbnN0IGRhdGFUb0F0dHJpYnV0ZXMgPSAoZGF0YSkgPT4ge1xuICBpZiAoIWRhdGEgfHwgIWRhdGEuZ2V0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcmV0dXJuIGRhdGEucmVkdWNlKChhY2MsIHYsIG5hbWUpID0+IHtcbiAgICBpZiAodikge1xuICAgICAgYWNjW2NvbnZlcnQobmFtZSldID0gdjtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufTtcblxuY29uc3QgYXR0cmlidXRlcyA9IFsnYm9yZGVyJywgJ2NlbGxwYWRkaW5nJywgJ2NlbGxzcGFjaW5nJywgJ2NsYXNzJywgJ3N0eWxlJ107XG5cbmNvbnN0IGNlbGxBdHRyaWJ1dGVzID0gWydjb2xzcGFuJywgJ3Jvd3NwYW4nLCAnY2xhc3MnLCAnc3R5bGUnXTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsLCBuZXh0KSB7XG4gICAgY29uc3QgdGFnID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9XG4gICAgICAgICAgZWwuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIGVsLmNoaWxkcmVuWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3Rib2R5J1xuICAgICAgICAgICAgPyBlbC5jaGlsZHJlblswXS5jaGlsZHJlblxuICAgICAgICAgICAgOiBlbC5jaGlsZHJlbjtcbiAgICAgICAgY29uc3QgYyA9IEFycmF5LmZyb20oY2hpbGRyZW4pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICd0YWJsZScsXG4gICAgICAgICAgbm9kZXM6IG5leHQoYyksXG4gICAgICAgICAgZGF0YTogYXR0cmlidXRlcy5yZWR1Y2UoYXR0cmlidXRlc1RvTWFwKGVsKSwge30pLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjYXNlICd0aCc6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvYmplY3Q6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ3RhYmxlX2NlbGwnLFxuICAgICAgICAgIG5vZGVzOiBuZXh0KGVsLmNoaWxkTm9kZXMpLFxuICAgICAgICAgIGRhdGE6IGNlbGxBdHRyaWJ1dGVzLnJlZHVjZShhdHRyaWJ1dGVzVG9NYXAoZWwpLCB7IGhlYWRlcjogdHJ1ZSB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndHInOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICd0YWJsZV9yb3cnLFxuICAgICAgICAgIG5vZGVzOiBuZXh0KEFycmF5LmZyb20oZWwuY2hpbGRyZW4pKSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAndGQnOiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnYmxvY2snLFxuICAgICAgICAgIHR5cGU6ICd0YWJsZV9jZWxsJyxcbiAgICAgICAgICBub2RlczogbmV4dChBcnJheS5mcm9tKGVsLmNoaWxkTm9kZXMpKSxcbiAgICAgICAgICBkYXRhOiBjZWxsQXR0cmlidXRlcy5yZWR1Y2UoYXR0cmlidXRlc1RvTWFwKGVsKSwgeyBoZWFkZXI6IGZhbHNlIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCwgY2hpbGRyZW4pIHtcbiAgICBpZiAob2JqZWN0Lm9iamVjdCAhPT0gJ2Jsb2NrJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAob2JqZWN0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ3RhYmxlJzoge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZGF0YVRvQXR0cmlidXRlcyhvYmplY3QuZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8dGFibGUgey4uLmF0dHJpYnV0ZXN9PlxuICAgICAgICAgICAgPHRib2R5PntjaGlsZHJlbn08L3Rib2R5PlxuICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYmxlX3Jvdyc6IHtcbiAgICAgICAgcmV0dXJuIDx0cj57Y2hpbGRyZW59PC90cj47XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RhYmxlX2NlbGwnOiB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBkYXRhVG9BdHRyaWJ1dGVzKG9iamVjdC5kYXRhKTtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXMuaGVhZGVyO1xuXG4gICAgICAgIGlmIChvYmplY3QuZGF0YS5nZXQoJ2hlYWRlcicpKSB7XG4gICAgICAgICAgcmV0dXJuIDx0aCB7Li4uYXR0cmlidXRlc30+e2NoaWxkcmVufTwvdGg+O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiA8dGQgey4uLmF0dHJpYnV0ZXN9PntjaGlsZHJlbn08L3RkPjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbn07XG4iXX0=
@@ -9,6 +9,8 @@ exports["default"] = exports.TableToolbar = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
12
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
13
+
12
14
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
13
15
 
14
16
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
@@ -41,6 +43,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
41
43
 
42
44
  var _debug = _interopRequireDefault(require("debug"));
43
45
 
46
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
47
+
48
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
49
+
44
50
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
51
 
46
52
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -74,6 +80,7 @@ var TableToolbar = /*#__PURE__*/function (_React$Component) {
74
80
  key: "render",
75
81
  value: function render() {
76
82
  var _this$props = this.props,
83
+ getFocusedValue = _this$props.getFocusedValue,
77
84
  plugins = _this$props.plugins,
78
85
  value = _this$props.value,
79
86
  onChange = _this$props.onChange,
@@ -85,7 +92,22 @@ var TableToolbar = /*#__PURE__*/function (_React$Component) {
85
92
  onToggleBorder = _this$props.onToggleBorder,
86
93
  hasBorder = _this$props.hasBorder,
87
94
  classes = _this$props.classes;
88
- log('[render] hasBorder:', hasBorder);
95
+ log('[render] hasBorder:', hasBorder); // we're separating the response area plugin because we want to display it next to the done button
96
+
97
+ var filteredPlugins = (plugins || []).reduce(function (acc, plugin) {
98
+ if (plugin.name === 'response_area') {
99
+ return _objectSpread(_objectSpread({}, acc), {}, {
100
+ respAreaPlugin: plugin
101
+ });
102
+ }
103
+
104
+ return _objectSpread(_objectSpread({}, acc), {}, {
105
+ otherPlugins: [].concat((0, _toConsumableArray2["default"])(acc.otherPlugins), [plugin])
106
+ });
107
+ }, {
108
+ respAreaPlugin: null,
109
+ otherPlugins: []
110
+ });
89
111
  return /*#__PURE__*/_react["default"].createElement("div", {
90
112
  className: classes.tableToolbar
91
113
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -100,17 +122,24 @@ var TableToolbar = /*#__PURE__*/function (_React$Component) {
100
122
  onClick: onRemoveColumn
101
123
  }, /*#__PURE__*/_react["default"].createElement(_icons.RemoveColumn, null)), /*#__PURE__*/_react["default"].createElement(_toolbarButtons.Button, {
102
124
  onClick: onRemoveTable
103
- }, /*#__PURE__*/_react["default"].createElement(_icons.RemoveTable, null)), plugins.map(function (p, index) {
125
+ }, /*#__PURE__*/_react["default"].createElement(_icons.RemoveTable, null)), (filteredPlugins.otherPlugins || []).map(function (p, index) {
104
126
  return /*#__PURE__*/_react["default"].createElement(_defaultToolbar.ToolbarButton, (0, _extends2["default"])({
105
127
  key: "plugin-".concat(index)
106
128
  }, p.toolbar, {
107
129
  value: value,
108
- onChange: onChange
130
+ onChange: onChange,
131
+ getFocusedValue: getFocusedValue
109
132
  }));
110
133
  }), /*#__PURE__*/_react["default"].createElement(_toolbarButtons.Button, {
111
134
  onClick: onToggleBorder,
112
135
  active: hasBorder
113
- }, /*#__PURE__*/_react["default"].createElement(_BorderAll["default"], null))), /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
136
+ }, /*#__PURE__*/_react["default"].createElement(_BorderAll["default"], null))), filteredPlugins.respAreaPlugin && /*#__PURE__*/_react["default"].createElement(_defaultToolbar.ToolbarButton, (0, _extends2["default"])({
137
+ key: 'plugin-response-area'
138
+ }, filteredPlugins.respAreaPlugin.toolbar, {
139
+ value: value,
140
+ onChange: onChange,
141
+ getFocusedValue: getFocusedValue
142
+ })), /*#__PURE__*/_react["default"].createElement(_doneButton.DoneButton, {
114
143
  onClick: this.onDone
115
144
  }));
116
145
  }
@@ -155,4 +184,4 @@ var styles = function styles() {
155
184
  var _default = (0, _styles.withStyles)(styles)(TableToolbar);
156
185
 
157
186
  exports["default"] = _default;
158
- //# sourceMappingURL=table-toolbar.js.map
187
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL3RhYmxlL3RhYmxlLXRvb2xiYXIuanN4Il0sIm5hbWVzIjpbImxvZyIsIlRhYmxlVG9vbGJhciIsImUiLCJvbkRvbmUiLCJwcm9wcyIsInByZXZlbnREZWZhdWx0IiwiZ2V0Rm9jdXNlZFZhbHVlIiwicGx1Z2lucyIsInZhbHVlIiwib25DaGFuZ2UiLCJvbkFkZFJvdyIsIm9uUmVtb3ZlUm93Iiwib25BZGRDb2x1bW4iLCJvblJlbW92ZUNvbHVtbiIsIm9uUmVtb3ZlVGFibGUiLCJvblRvZ2dsZUJvcmRlciIsImhhc0JvcmRlciIsImNsYXNzZXMiLCJmaWx0ZXJlZFBsdWdpbnMiLCJyZWR1Y2UiLCJhY2MiLCJwbHVnaW4iLCJuYW1lIiwicmVzcEFyZWFQbHVnaW4iLCJvdGhlclBsdWdpbnMiLCJ0YWJsZVRvb2xiYXIiLCJ0b29sYmFyQnV0dG9ucyIsIm1hcCIsInAiLCJpbmRleCIsInRvb2xiYXIiLCJSZWFjdCIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsImFycmF5IiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsImZ1bmMiLCJib29sIiwic3R5bGVzIiwid2lkdGgiLCJkaXNwbGF5IiwianVzdGlmeUNvbnRlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7Ozs7O0FBRUEsSUFBTUEsR0FBRyxHQUFHLHVCQUFNLDhDQUFOLENBQVo7O0lBRWFDLFk7Ozs7Ozs7Ozs7Ozs7OzsrRkFzQkYsVUFBQ0MsQ0FBRCxFQUFPO0FBQ2QsVUFBUUMsTUFBUixHQUFtQixNQUFLQyxLQUF4QixDQUFRRCxNQUFSO0FBQ0FELE1BQUFBLENBQUMsQ0FBQ0csY0FBRjtBQUNBRixNQUFBQSxNQUFNO0FBQ1AsSzs7Ozs7O1dBRUQsa0JBQVM7QUFDUCx3QkFhSSxLQUFLQyxLQWJUO0FBQUEsVUFDRUUsZUFERixlQUNF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QUFFO0FBQ2RlLE1BQUFBLE9BQU8sRUFBRTtBQURLO0FBTkksR0FBUDtBQUFBLENBQWY7O2VBVWUsd0JBQVdGLE1BQVgsRUFBbUJ0QyxZQUFuQixDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi4vdG9vbGJhci90b29sYmFyLWJ1dHRvbnMnO1xuaW1wb3J0IHsgRG9uZUJ1dHRvbiB9IGZyb20gJy4uL3Rvb2xiYXIvZG9uZS1idXR0b24nO1xuaW1wb3J0IEJvcmRlckFsbCBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvQm9yZGVyQWxsJztcbmltcG9ydCB7IFRvb2xiYXJCdXR0b24gfSBmcm9tICcuLi90b29sYmFyL2RlZmF1bHQtdG9vbGJhcic7XG5cbmltcG9ydCB7IEFkZFJvdywgQWRkQ29sdW1uLCBSZW1vdmVDb2x1bW4sIFJlbW92ZVJvdywgUmVtb3ZlVGFibGUgfSBmcm9tICcuL2ljb25zJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOnRhYmxlLXRvb2xiYXInKTtcblxuZXhwb3J0IGNsYXNzIFRhYmxlVG9vbGJhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgcGx1Z2luczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZFJvdzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZVJvdzogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkFkZENvbHVtbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZUNvbHVtbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZVRhYmxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uVG9nZ2xlQm9yZGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGhhc0JvcmRlcjogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25Eb25lOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIHBsdWdpbnM6IFtdLFxuICAgIHZhbHVlOiB7fSxcbiAgICBvbkNoYW5nZTogKCkgPT4ge30sXG4gIH07XG5cbiAgb25Eb25lID0gKGUpID0+IHtcbiAgICBjb25zdCB7IG9uRG9uZSB9ID0gdGhpcy5wcm9wcztcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgb25Eb25lKCk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGdldEZvY3VzZWRWYWx1ZSxcbiAgICAgIHBsdWdpbnMsXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25BZGRSb3csXG4gICAgICBvblJlbW92ZVJvdyxcbiAgICAgIG9uQWRkQ29sdW1uLFxuICAgICAgb25SZW1vdmVDb2x1bW4sXG4gICAgICBvblJlbW92ZVRhYmxlLFxuICAgICAgb25Ub2dnbGVCb3JkZXIsXG4gICAgICBoYXNCb3JkZXIsXG4gICAgICBjbGFzc2VzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGxvZygnW3JlbmRlcl0gaGFzQm9yZGVyOicsIGhhc0JvcmRlcik7XG5cbiAgICAvLyB3ZSdyZSBzZXBhcmF0aW5nIHRoZSByZXNwb25zZSBhcmVhIHBsdWdpbiBiZWNhdXNlIHdlIHdhbnQgdG8gZGlzcGxheSBpdCBuZXh0IHRvIHRoZSBkb25lIGJ1dHRvblxuICAgIGNvbnN0IGZpbHRlcmVkUGx1Z2lucyA9IChwbHVnaW5zIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAoYWNjLCBwbHVnaW4pID0+IHtcbiAgICAgICAgaWYgKHBsdWdpbi5uYW1lID09PSAncmVzcG9uc2VfYXJlYScpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYWNjLFxuICAgICAgICAgICAgcmVzcEFyZWFQbHVnaW46IHBsdWdpbixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgb3RoZXJQbHVnaW5zOiBbLi4uYWNjLm90aGVyUGx1Z2lucywgcGx1Z2luXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHJlc3BBcmVhUGx1Z2luOiBudWxsLFxuICAgICAgICBvdGhlclBsdWdpbnM6IFtdLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLnRhYmxlVG9vbGJhcn0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLnRvb2xiYXJCdXR0b25zfT5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uQWRkUm93fT5cbiAgICAgICAgICAgIDxBZGRSb3cgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uUmVtb3ZlUm93fT5cbiAgICAgICAgICAgIDxSZW1vdmVSb3cgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uQWRkQ29sdW1ufT5cbiAgICAgICAgICAgIDxBZGRDb2x1bW4gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uUmVtb3ZlQ29sdW1ufT5cbiAgICAgICAgICAgIDxSZW1vdmVDb2x1bW4gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e29uUmVtb3ZlVGFibGV9PlxuICAgICAgICAgICAgPFJlbW92ZVRhYmxlIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgeyhmaWx0ZXJlZFBsdWdpbnMub3RoZXJQbHVnaW5zIHx8IFtdKS5tYXAoKHAsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8VG9vbGJhckJ1dHRvblxuICAgICAgICAgICAgICBrZXk9e2BwbHVnaW4tJHtpbmRleH1gfVxuICAgICAgICAgICAgICB7Li4ucC50b29sYmFyfVxuICAgICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgZ2V0Rm9jdXNlZFZhbHVlPXtnZXRGb2N1c2VkVmFsdWV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17b25Ub2dnbGVCb3JkZXJ9IGFjdGl2ZT17aGFzQm9yZGVyfT5cbiAgICAgICAgICAgIDxCb3JkZXJBbGwgLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtmaWx0ZXJlZFBsdWdpbnMucmVzcEFyZWFQbHVnaW4gJiYgKFxuICAgICAgICAgIDxUb29sYmFyQnV0dG9uXG4gICAgICAgICAgICBrZXk9eydwbHVnaW4tcmVzcG9uc2UtYXJlYSd9XG4gICAgICAgICAgICB7Li4uZmlsdGVyZWRQbHVnaW5zLnJlc3BBcmVhUGx1Z2luLnRvb2xiYXJ9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgICBnZXRGb2N1c2VkVmFsdWU9e2dldEZvY3VzZWRWYWx1ZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICA8RG9uZUJ1dHRvbiBvbkNsaWNrPXt0aGlzLm9uRG9uZX0gLz5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gKCkgPT4gKHtcbiAgdGFibGVUb29sYmFyOiB7XG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyxcbiAgfSxcbiAgdG9vbGJhckJ1dHRvbnM6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gIH0sXG59KTtcbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoc3R5bGVzKShUYWJsZVRvb2xiYXIpO1xuIl19
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports["default"] = exports.AlignRight = exports.AlignLeft = exports.AlignJustify = exports.AlignCenter = void 0;
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _react = _interopRequireWildcard(require("react"));
17
+
18
+ var _Collapse = _interopRequireDefault(require("@material-ui/core/Collapse"));
19
+
20
+ var _List = _interopRequireDefault(require("@material-ui/core/List"));
21
+
22
+ var _ListItem = _interopRequireDefault(require("@material-ui/core/ListItem"));
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
29
+
30
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
31
+
32
+ var AlignLeft = function AlignLeft() {
33
+ return /*#__PURE__*/_react["default"].createElement("svg", {
34
+ width: "20",
35
+ height: "20",
36
+ viewBox: "0 0 66 66",
37
+ fill: "none",
38
+ xmlns: "http://www.w3.org/2000/svg"
39
+ }, /*#__PURE__*/_react["default"].createElement("path", {
40
+ d: "M42.1875 4.75C42.1875 7.38672 39.9902 9.4375 37.5 9.4375H4.6875C2.05078 9.4375 0 7.38672 0 4.75C0 2.25977 2.05078 0.0625 4.6875 0.0625H37.5C39.9902 0.0625 42.1875 2.25977 42.1875 4.75ZM42.1875 42.25C42.1875 44.8867 39.9902 46.9375 37.5 46.9375H4.6875C2.05078 46.9375 0 44.8867 0 42.25C0 39.7598 2.05078 37.5625 4.6875 37.5625H37.5C39.9902 37.5625 42.1875 39.7598 42.1875 42.25ZM0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5ZM65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61Z",
41
+ fill: "currentColor"
42
+ }));
43
+ };
44
+
45
+ exports.AlignLeft = AlignLeft;
46
+
47
+ var AlignRight = function AlignRight() {
48
+ return /*#__PURE__*/_react["default"].createElement("svg", {
49
+ width: "20",
50
+ height: "20",
51
+ viewBox: "0 0 66 66",
52
+ fill: "none",
53
+ xmlns: "http://www.w3.org/2000/svg"
54
+ }, /*#__PURE__*/_react["default"].createElement("path", {
55
+ d: "M65.625 4.75C65.625 7.38672 63.4277 9.4375 60.9375 9.4375H28.125C25.4883 9.4375 23.4375 7.38672 23.4375 4.75C23.4375 2.25977 25.4883 0.0625 28.125 0.0625H60.9375C63.4277 0.0625 65.625 2.25977 65.625 4.75ZM65.625 42.25C65.625 44.8867 63.4277 46.9375 60.9375 46.9375H28.125C25.4883 46.9375 23.4375 44.8867 23.4375 42.25C23.4375 39.7598 25.4883 37.5625 28.125 37.5625H60.9375C63.4277 37.5625 65.625 39.7598 65.625 42.25ZM0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5ZM65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61Z",
56
+ fill: "currentColor"
57
+ }));
58
+ };
59
+
60
+ exports.AlignRight = AlignRight;
61
+
62
+ var AlignCenter = function AlignCenter() {
63
+ return /*#__PURE__*/_react["default"].createElement("svg", {
64
+ width: "20",
65
+ height: "20",
66
+ viewBox: "0 0 66 66",
67
+ fill: "none",
68
+ xmlns: "http://www.w3.org/2000/svg"
69
+ }, /*#__PURE__*/_react["default"].createElement("path", {
70
+ d: "M51.5625 4.75C51.5625 7.38672 49.3652 9.4375 46.875 9.4375H18.75C16.1133 9.4375 14.0625 7.38672 14.0625 4.75C14.0625 2.25977 16.1133 0.0625 18.75 0.0625H46.875C49.3652 0.0625 51.5625 2.25977 51.5625 4.75ZM65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5ZM0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61ZM51.5625 42.25C51.5625 44.8867 49.3652 46.9375 46.875 46.9375H18.75C16.1133 46.9375 14.0625 44.8867 14.0625 42.25C14.0625 39.7598 16.1133 37.5625 18.75 37.5625H46.875C49.3652 37.5625 51.5625 39.7598 51.5625 42.25Z",
71
+ fill: "currentColor"
72
+ }));
73
+ };
74
+
75
+ exports.AlignCenter = AlignCenter;
76
+
77
+ var AlignJustify = function AlignJustify() {
78
+ return /*#__PURE__*/_react["default"].createElement("svg", {
79
+ width: "20",
80
+ height: "20",
81
+ viewBox: "0 0 66 66",
82
+ fill: "none",
83
+ xmlns: "http://www.w3.org/2000/svg"
84
+ }, /*#__PURE__*/_react["default"].createElement("path", {
85
+ d: "M65.625 4.75C65.625 7.38672 63.4277 9.4375 60.9375 9.4375H4.6875C2.05078 9.4375 0 7.38672 0 4.75C0 2.25977 2.05078 0.0625 4.6875 0.0625H60.9375C63.4277 0.0625 65.625 2.25977 65.625 4.75ZM65.625 42.25C65.625 44.8867 63.4277 46.9375 60.9375 46.9375H4.6875C2.05078 46.9375 0 44.8867 0 42.25C0 39.7598 2.05078 37.5625 4.6875 37.5625H60.9375C63.4277 37.5625 65.625 39.7598 65.625 42.25ZM0 23.5C0 21.0098 2.05078 18.8125 4.6875 18.8125H60.9375C63.4277 18.8125 65.625 21.0098 65.625 23.5C65.625 26.1367 63.4277 28.1875 60.9375 28.1875H4.6875C2.05078 28.1875 0 26.1367 0 23.5ZM65.625 61C65.625 63.6367 63.4277 65.6875 60.9375 65.6875H4.6875C2.05078 65.6875 0 63.6367 0 61C0 58.5098 2.05078 56.3125 4.6875 56.3125H60.9375C63.4277 56.3125 65.625 58.5098 65.625 61Z",
86
+ fill: "currentColor"
87
+ }));
88
+ };
89
+
90
+ exports.AlignJustify = AlignJustify;
91
+
92
+ var _default = function _default(_ref) {
93
+ var getValue = _ref.getValue,
94
+ onChange = _ref.onChange;
95
+
96
+ var _useState = (0, _react.useState)(false),
97
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
98
+ open = _useState2[0],
99
+ setOpen = _useState2[1];
100
+
101
+ var value = getValue();
102
+ var text = value.texts.get(0);
103
+ var type;
104
+
105
+ if (text) {
106
+ var _data$attributes;
107
+
108
+ var blockParent = value.document.getParent(text.key);
109
+ var data = blockParent.data.toJSON();
110
+
111
+ if (data !== null && data !== void 0 && (_data$attributes = data.attributes) !== null && _data$attributes !== void 0 && _data$attributes.align) {
112
+ var _data$attributes2;
113
+
114
+ type = data === null || data === void 0 ? void 0 : (_data$attributes2 = data.attributes) === null || _data$attributes2 === void 0 ? void 0 : _data$attributes2.align;
115
+ }
116
+ }
117
+
118
+ var icon;
119
+
120
+ switch (type) {
121
+ case 'right':
122
+ icon = /*#__PURE__*/_react["default"].createElement(AlignRight, null);
123
+ break;
124
+
125
+ case 'center':
126
+ icon = /*#__PURE__*/_react["default"].createElement(AlignCenter, null);
127
+ break;
128
+
129
+ case 'justify':
130
+ icon = /*#__PURE__*/_react["default"].createElement(AlignJustify, null);
131
+ break;
132
+
133
+ default:
134
+ icon = /*#__PURE__*/_react["default"].createElement(AlignLeft, null);
135
+ break;
136
+ }
137
+
138
+ var applyAlignment = function applyAlignment(event) {
139
+ if (value.texts.size) {
140
+ var _event$target, _event$target$closest;
141
+
142
+ var alignType = (_event$target = event.target) === null || _event$target === void 0 ? void 0 : (_event$target$closest = _event$target.closest('div')) === null || _event$target$closest === void 0 ? void 0 : _event$target$closest.getAttribute('value');
143
+
144
+ if (alignType) {
145
+ var c = value.change();
146
+ value.texts.forEach(function (text) {
147
+ var _blockParent$data;
148
+
149
+ var blockParent = value.document.getParent(text.key);
150
+ c = c.setNodeByKey(blockParent.key, {
151
+ data: _objectSpread(_objectSpread({}, blockParent.data), {}, {
152
+ attributes: _objectSpread(_objectSpread({}, (_blockParent$data = blockParent.data) === null || _blockParent$data === void 0 ? void 0 : _blockParent$data.attributes), {}, {
153
+ align: alignType
154
+ })
155
+ })
156
+ });
157
+ });
158
+ onChange(c);
159
+ }
160
+ }
161
+
162
+ setOpen(false);
163
+ };
164
+
165
+ var onMouseDown = function onMouseDown(event) {
166
+ event.preventDefault();
167
+ event.stopPropagation();
168
+ setOpen(!open);
169
+ };
170
+
171
+ return /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
172
+ style: {
173
+ display: 'flex',
174
+ alignItems: 'center'
175
+ },
176
+ onClick: onMouseDown
177
+ }, icon, /*#__PURE__*/_react["default"].createElement("span", {
178
+ style: {
179
+ marginLeft: '5px',
180
+ fontSize: '8px'
181
+ }
182
+ }, "\u25BC")), /*#__PURE__*/_react["default"].createElement(_Collapse["default"], {
183
+ "in": open,
184
+ timeout: "auto",
185
+ unmountOnExit: true,
186
+ style: {
187
+ position: 'absolute'
188
+ }
189
+ }, /*#__PURE__*/_react["default"].createElement(_List["default"], {
190
+ component: "div",
191
+ disablePadding: true,
192
+ style: {
193
+ background: '#fff',
194
+ display: 'flex',
195
+ flexDirection: 'row',
196
+ padding: 0
197
+ }
198
+ }, /*#__PURE__*/_react["default"].createElement(_ListItem["default"], {
199
+ button: true,
200
+ type: "submit",
201
+ value: "left",
202
+ "aria-label": "Align text left",
203
+ onClick: applyAlignment
204
+ }, /*#__PURE__*/_react["default"].createElement(AlignLeft, null)), /*#__PURE__*/_react["default"].createElement(_ListItem["default"], {
205
+ button: true,
206
+ type: "submit",
207
+ value: "center",
208
+ "aria-label": "Align text center",
209
+ onClick: applyAlignment
210
+ }, /*#__PURE__*/_react["default"].createElement(AlignCenter, null)), /*#__PURE__*/_react["default"].createElement(_ListItem["default"], {
211
+ button: true,
212
+ type: "submit",
213
+ value: "right",
214
+ "aria-label": "Align text right",
215
+ onClick: applyAlignment
216
+ }, /*#__PURE__*/_react["default"].createElement(AlignRight, null)), /*#__PURE__*/_react["default"].createElement(_ListItem["default"], {
217
+ button: true,
218
+ type: "submit",
219
+ value: "justify",
220
+ "aria-label": "Justify text",
221
+ onClick: applyAlignment
222
+ }, /*#__PURE__*/_react["default"].createElement(AlignJustify, null)))));
223
+ };
224
+
225
+ exports["default"] = _default;
226
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wbHVnaW5zL3RleHRBbGlnbi9pY29ucy9pbmRleC5qc3giXSwibmFtZXMiOlsiQWxpZ25MZWZ0IiwiQWxpZ25SaWdodCIsIkFsaWduQ2VudGVyIiwiQWxpZ25KdXN0aWZ5IiwiZ2V0VmFsdWUiLCJvbkNoYW5nZSIsIm9wZW4iLCJzZXRPcGVuIiwidmFsdWUiLCJ0ZXh0IiwidGV4dHMiLCJnZXQiLCJ0eXBlIiwiYmxvY2tQYXJlbnQiLCJkb2N1bWVudCIsImdldFBhcmVudCIsImtleSIsImRhdGEiLCJ0b0pTT04iLCJhdHRyaWJ1dGVzIiwiYWxpZ24iLCJpY29uIiwiYXBwbHlBbGlnbm1lbnQiLCJldmVudCIsInNpemUiLCJhbGlnblR5cGUiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiZ2V0QXR0cmlidXRlIiwiYyIsImNoYW5nZSIsImZvckVhY2giLCJzZXROb2RlQnlLZXkiLCJvbk1vdXNlRG93biIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJtYXJnaW5MZWZ0IiwiZm9udFNpemUiLCJwb3NpdGlvbiIsImJhY2tncm91bmQiLCJmbGV4RGlyZWN0aW9uIiwicGFkZGluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFTyxJQUFNQSxTQUFTLEdBQUcsU0FBWkEsU0FBWTtBQUFBLHNCQUN2QjtBQUFLLElBQUEsS0FBSyxFQUFDLElBQVg7QUFBZ0IsSUFBQSxNQUFNLEVBQUMsSUFBdkI7QUFBNEIsSUFBQSxPQUFPLEVBQUMsV0FBcEM7QUFBZ0QsSUFBQSxJQUFJLEVBQUMsTUFBckQ7QUFBNEQsSUFBQSxLQUFLLEVBQUM7QUFBbEUsa0JBQ0U7QUFDRSxJQUFBLENBQUMsRUFBQyxndkJBREo7QUFFRSxJQUFBLElBQUksRUFBQztBQUZQLElBREYsQ0FEdUI7QUFBQSxDQUFsQjs7OztBQVNBLElBQU1DLFVBQVUs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QUQsT0FERixDQWxCRixlQXNCRSxnQ0FBQyxvQkFBRDtBQUFVLElBQUEsTUFBTSxNQUFoQjtBQUFpQixJQUFBLElBQUksRUFBQyxRQUF0QjtBQUErQixJQUFBLEtBQUssRUFBQyxTQUFyQztBQUErQyxrQkFBVyxjQUExRDtBQUF5RSxJQUFBLE9BQU8sRUFBRUE7QUFBbEYsa0JBQ0UsZ0NBQUMsWUFBRCxPQURGLENBdEJGLENBREYsQ0FMRixDQURGO0FBb0NELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvQ29sbGFwc2UnO1xuaW1wb3J0IExpc3QgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvTGlzdCc7XG5pbXBvcnQgTGlzdEl0ZW0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvTGlzdEl0ZW0nO1xuXG5leHBvcnQgY29uc3QgQWxpZ25MZWZ0ID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgNjYgNjZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cGF0aFxuICAgICAgZD1cIk00Mi4xODc1IDQuNzVDNDIuMTg3NSA3LjM4NjcyIDM5Ljk5MDIgOS40Mzc1IDM3LjUgOS40Mzc1SDQuNjg3NUMyLjA1MDc4IDkuNDM3NSAwIDcuMzg2NzIgMCA0Ljc1QzAgMi4yNTk3NyAyLjA1MDc4IDAuMDYyNSA0LjY4NzUgMC4wNjI1SDM3LjVDMzkuOTkwMiAwLjA2MjUgNDIuMTg3NSAyLjI1OTc3IDQyLjE4NzUgNC43NVpNNDIuMTg3NSA0Mi4yNUM0Mi4xODc1IDQ0Ljg4NjcgMzkuOTkwMiA0Ni45Mzc1IDM3LjUgNDYuOTM3NUg0LjY4NzVDMi4wNTA3OCA0Ni45Mzc1IDAgNDQuODg2NyAwIDQyLjI1QzAgMzkuNzU5OCAyLjA1MDc4IDM3LjU2MjUgNC42ODc1IDM3LjU2MjVIMzcuNUMzOS45OTAyIDM3LjU2MjUgNDIuMTg3NSAzOS43NTk4IDQyLjE4NzUgNDIuMjVaTTAgMjMuNUMwIDIxLjAwOTggMi4wNTA3OCAxOC44MTI1IDQuNjg3NSAxOC44MTI1SDYwLjkzNzVDNjMuNDI3NyAxOC44MTI1IDY1LjYyNSAyMS4wMDk4IDY1LjYyNSAyMy41QzY1LjYyNSAyNi4xMzY3IDYzLjQyNzcgMjguMTg3NSA2MC45Mzc1IDI4LjE4NzVINC42ODc1QzIuMDUwNzggMjguMTg3NSAwIDI2LjEzNjcgMCAyMy41Wk02NS42MjUgNjFDNjUuNjI1IDYzLjYzNjcgNjMuNDI3NyA2NS42ODc1IDYwLjkzNzUgNjUuNjg3NUg0LjY4NzVDMi4wNTA3OCA2NS42ODc1IDAgNjMuNjM2NyAwIDYxQzAgNTguNTA5OCAyLjA1MDc4IDU2LjMxMjUgNC42ODc1IDU2LjMxMjVINjAuOTM3NUM2My40Mjc3IDU2LjMxMjUgNjUuNjI1IDU4LjUwOTggNjUuNjI1IDYxWlwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmV4cG9ydCBjb25zdCBBbGlnblJpZ2h0ID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgNjYgNjZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICA8cGF0aFxuICAgICAgZD1cIk02NS42MjUgNC43NUM2NS42MjUgNy4zODY3MiA2My40Mjc3IDkuNDM3NSA2MC45Mzc1IDkuNDM3NUgyOC4xMjVDMjUuNDg4MyA5LjQzNzUgMjMuNDM3NSA3LjM4NjcyIDIzLjQzNzUgNC43NUMyMy40Mzc1IDIuMjU5NzcgMjUuNDg4MyAwLjA2MjUgMjguMTI1IDAuMDYyNUg2MC45Mzc1QzYzLjQyNzcgMC4wNjI1IDY1LjYyNSAyLjI1OTc3IDY1LjYyNSA0Ljc1Wk02NS42MjUgNDIuMjVDNjUuNjI1IDQ0Ljg4NjcgNjMuNDI3NyA0Ni45Mzc1IDYwLjkzNzUgNDYuOTM3NUgyOC4xMjVDMjUuNDg4MyA0Ni45Mzc1IDIzLjQzNzUgNDQuODg2NyAyMy40Mzc1IDQyLjI1QzIzLjQzNzUgMzkuNzU5OCAyNS40ODgzIDM3LjU2MjUgMjguMTI1IDM3LjU2MjVINjAuOTM3NUM2My40Mjc3IDM3LjU2MjUgNjUuNjI1IDM5Ljc1OTggNjUuNjI1IDQyLjI1Wk0wIDIzLjVDMCAyMS4wMDk4IDIuMDUwNzggMTguODEyNSA0LjY4NzUgMTguODEyNUg2MC45Mzc1QzYzLjQyNzcgMTguODEyNSA2NS42MjUgMjEuMDA5OCA2NS42MjUgMjMuNUM2NS42MjUgMjYuMTM2NyA2My40Mjc3IDI4LjE4NzUgNjAuOTM3NSAyOC4xODc1SDQuNjg3NUMyLjA1MDc4IDI4LjE4NzUgMCAyNi4xMzY3IDAgMjMuNVpNNjUuNjI1IDYxQzY1LjYyNSA2My42MzY3IDYzLjQyNzcgNjUuNjg3NSA2MC45Mzc1IDY1LjY4NzVINC42ODc1QzIuMDUwNzggNjUuNjg3NSAwIDYzLjYzNjcgMCA2MUMwIDU4LjUwOTggMi4wNTA3OCA1Ni4zMTI1IDQuNjg3NSA1Ni4zMTI1SDYwLjkzNzVDNjMuNDI3NyA1Ni4zMTI1IDY1LjYyNSA1OC41MDk4IDY1LjYyNSA2MVpcIlxuICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgLz5cbiAgPC9zdmc+XG4pO1xuXG5leHBvcnQgY29uc3QgQWxpZ25DZW50ZXIgPSAoKSA9PiAoXG4gIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCA2NiA2NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTUxLjU2MjUgNC43NUM1MS41NjI1IDcuMzg2NzIgNDkuMzY1MiA5LjQzNzUgNDYuODc1IDkuNDM3NUgxOC43NUMxNi4xMTMzIDkuNDM3NSAxNC4wNjI1IDcuMzg2NzIgMTQuMDYyNSA0Ljc1QzE0LjA2MjUgMi4yNTk3NyAxNi4xMTMzIDAuMDYyNSAxOC43NSAwLjA2MjVINDYuODc1QzQ5LjM2NTIgMC4wNjI1IDUxLjU2MjUgMi4yNTk3NyA1MS41NjI1IDQuNzVaTTY1LjYyNSAyMy41QzY1LjYyNSAyNi4xMzY3IDYzLjQyNzcgMjguMTg3NSA2MC45Mzc1IDI4LjE4NzVINC42ODc1QzIuMDUwNzggMjguMTg3NSAwIDI2LjEzNjcgMCAyMy41QzAgMjEuMDA5OCAyLjA1MDc4IDE4LjgxMjUgNC42ODc1IDE4LjgxMjVINjAuOTM3NUM2My40Mjc3IDE4LjgxMjUgNjUuNjI1IDIxLjAwOTggNjUuNjI1IDIzLjVaTTAgNjFDMCA1OC41MDk4IDIuMDUwNzggNTYuMzEyNSA0LjY4NzUgNTYuMzEyNUg2MC45Mzc1QzYzLjQyNzcgNTYuMzEyNSA2NS42MjUgNTguNTA5OCA2NS42MjUgNjFDNjUuNjI1IDYzLjYzNjcgNjMuNDI3NyA2NS42ODc1IDYwLjkzNzUgNjUuNjg3NUg0LjY4NzVDMi4wNTA3OCA2NS42ODc1IDAgNjMuNjM2NyAwIDYxWk01MS41NjI1IDQyLjI1QzUxLjU2MjUgNDQuODg2NyA0OS4zNjUyIDQ2LjkzNzUgNDYuODc1IDQ2LjkzNzVIMTguNzVDMTYuMTEzMyA0Ni45Mzc1IDE0LjA2MjUgNDQuODg2NyAxNC4wNjI1IDQyLjI1QzE0LjA2MjUgMzkuNzU5OCAxNi4xMTMzIDM3LjU2MjUgMTguNzUgMzcuNTYyNUg0Ni44NzVDNDkuMzY1MiAzNy41NjI1IDUxLjU2MjUgMzkuNzU5OCA1MS41NjI1IDQyLjI1WlwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmV4cG9ydCBjb25zdCBBbGlnbkp1c3RpZnkgPSAoKSA9PiAoXG4gIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCA2NiA2NlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTY1LjYyNSA0Ljc1QzY1LjYyNSA3LjM4NjcyIDYzLjQyNzcgOS40Mzc1IDYwLjkzNzUgOS40Mzc1SDQuNjg3NUMyLjA1MDc4IDkuNDM3NSAwIDcuMzg2NzIgMCA0Ljc1QzAgMi4yNTk3NyAyLjA1MDc4IDAuMDYyNSA0LjY4NzUgMC4wNjI1SDYwLjkzNzVDNjMuNDI3NyAwLjA2MjUgNjUuNjI1IDIuMjU5NzcgNjUuNjI1IDQuNzVaTTY1LjYyNSA0Mi4yNUM2NS42MjUgNDQuODg2NyA2My40Mjc3IDQ2LjkzNzUgNjAuOTM3NSA0Ni45Mzc1SDQuNjg3NUMyLjA1MDc4IDQ2LjkzNzUgMCA0NC44ODY3IDAgNDIuMjVDMCAzOS43NTk4IDIuMDUwNzggMzcuNTYyNSA0LjY4NzUgMzcuNTYyNUg2MC45Mzc1QzYzLjQyNzcgMzcuNTYyNSA2NS42MjUgMzkuNzU5OCA2NS42MjUgNDIuMjVaTTAgMjMuNUMwIDIxLjAwOTggMi4wNTA3OCAxOC44MTI1IDQuNjg3NSAxOC44MTI1SDYwLjkzNzVDNjMuNDI3NyAxOC44MTI1IDY1LjYyNSAyMS4wMDk4IDY1LjYyNSAyMy41QzY1LjYyNSAyNi4xMzY3IDYzLjQyNzcgMjguMTg3NSA2MC45Mzc1IDI4LjE4NzVINC42ODc1QzIuMDUwNzggMjguMTg3NSAwIDI2LjEzNjcgMCAyMy41Wk02NS42MjUgNjFDNjUuNjI1IDYzLjYzNjcgNjMuNDI3NyA2NS42ODc1IDYwLjkzNzUgNjUuNjg3NUg0LjY4NzVDMi4wNTA3OCA2NS42ODc1IDAgNjMuNjM2NyAwIDYxQzAgNTguNTA5OCAyLjA1MDc4IDU2LjMxMjUgNC42ODc1IDU2LjMxMjVINjAuOTM3NUM2My40Mjc3IDU2LjMxMjUgNjUuNjI1IDU4LjUwOTggNjUuNjI1IDYxWlwiXG4gICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAvPlxuICA8L3N2Zz5cbik7XG5cbmV4cG9ydCBkZWZhdWx0ICh7IGdldFZhbHVlLCBvbkNoYW5nZSB9KSA9PiB7XG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZSgpO1xuICBjb25zdCB0ZXh0ID0gdmFsdWUudGV4dHMuZ2V0KDApO1xuXG4gIGxldCB0eXBlO1xuXG4gIGlmICh0ZXh0KSB7XG4gICAgY29uc3QgYmxvY2tQYXJlbnQgPSB2YWx1ZS5kb2N1bWVudC5nZXRQYXJlbnQodGV4dC5rZXkpO1xuICAgIGNvbnN0IGRhdGEgPSBibG9ja1BhcmVudC5kYXRhLnRvSlNPTigpO1xuXG4gICAgaWYgKGRhdGE/LmF0dHJpYnV0ZXM/LmFsaWduKSB7XG4gICAgICB0eXBlID0gZGF0YT8uYXR0cmlidXRlcz8uYWxpZ247XG4gICAgfVxuICB9XG5cbiAgbGV0IGljb247XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgaWNvbiA9IDxBbGlnblJpZ2h0IC8+O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIGljb24gPSA8QWxpZ25DZW50ZXIgLz47XG4gICAgICBicmVhaztcbiAgICBjYXNlICdqdXN0aWZ5JzpcbiAgICAgIGljb24gPSA8QWxpZ25KdXN0aWZ5IC8+O1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGljb24gPSA8QWxpZ25MZWZ0IC8+O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBjb25zdCBhcHBseUFsaWdubWVudCA9IChldmVudCkgPT4ge1xuICAgIGlmICh2YWx1ZS50ZXh0cy5zaXplKSB7XG4gICAgICBjb25zdCBhbGlnblR5cGUgPSBldmVudC50YXJnZXQ/LmNsb3Nlc3QoJ2RpdicpPy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICAgIGlmIChhbGlnblR5cGUpIHtcbiAgICAgICAgbGV0IGMgPSB2YWx1ZS5jaGFuZ2UoKTtcblxuICAgICAgICB2YWx1ZS50ZXh0cy5mb3JFYWNoKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tQYXJlbnQgPSB2YWx1ZS5kb2N1bWVudC5nZXRQYXJlbnQodGV4dC5rZXkpO1xuXG4gICAgICAgICAgYyA9IGMuc2V0Tm9kZUJ5S2V5KGJsb2NrUGFyZW50LmtleSwge1xuICAgICAgICAgICAgZGF0YTogeyAuLi5ibG9ja1BhcmVudC5kYXRhLCBhdHRyaWJ1dGVzOiB7IC4uLmJsb2NrUGFyZW50LmRhdGE/LmF0dHJpYnV0ZXMsIGFsaWduOiBhbGlnblR5cGUgfSB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBvbkNoYW5nZShjKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRPcGVuKGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCBvbk1vdXNlRG93biA9IChldmVudCkgPT4ge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2V0T3Blbighb3Blbik7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19IG9uQ2xpY2s9e29uTW91c2VEb3dufT5cbiAgICAgICAge2ljb259XG4gICAgICAgIDxzcGFuIHN0eWxlPXt7IG1hcmdpbkxlZnQ6ICc1cHgnLCBmb250U2l6ZTogJzhweCcgfX0+JiM5NjYwOzwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPENvbGxhcHNlIGluPXtvcGVufSB0aW1lb3V0PVwiYXV0b1wiIHVubW91bnRPbkV4aXQgc3R5bGU9e3sgcG9zaXRpb246ICdhYnNvbHV0ZScgfX0+XG4gICAgICAgIDxMaXN0XG4gICAgICAgICAgY29tcG9uZW50PVwiZGl2XCJcbiAgICAgICAgICBkaXNhYmxlUGFkZGluZ1xuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAnI2ZmZicsXG4gICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxMaXN0SXRlbSBidXR0b24gdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwibGVmdFwiIGFyaWEtbGFiZWw9XCJBbGlnbiB0ZXh0IGxlZnRcIiBvbkNsaWNrPXthcHBseUFsaWdubWVudH0+XG4gICAgICAgICAgICA8QWxpZ25MZWZ0IC8+XG4gICAgICAgICAgPC9MaXN0SXRlbT5cblxuICAgICAgICAgIDxMaXN0SXRlbSBidXR0b24gdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiY2VudGVyXCIgYXJpYS1sYWJlbD1cIkFsaWduIHRleHQgY2VudGVyXCIgb25DbGljaz17YXBwbHlBbGlnbm1lbnR9PlxuICAgICAgICAgICAgPEFsaWduQ2VudGVyIC8+XG4gICAgICAgICAgPC9MaXN0SXRlbT5cblxuICAgICAgICAgIDxMaXN0SXRlbSBidXR0b24gdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwicmlnaHRcIiBhcmlhLWxhYmVsPVwiQWxpZ24gdGV4dCByaWdodFwiIG9uQ2xpY2s9e2FwcGx5QWxpZ25tZW50fT5cbiAgICAgICAgICAgIDxBbGlnblJpZ2h0IC8+XG4gICAgICAgICAgPC9MaXN0SXRlbT5cblxuICAgICAgICAgIDxMaXN0SXRlbSBidXR0b24gdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwianVzdGlmeVwiIGFyaWEtbGFiZWw9XCJKdXN0aWZ5IHRleHRcIiBvbkNsaWNrPXthcHBseUFsaWdubWVudH0+XG4gICAgICAgICAgICA8QWxpZ25KdXN0aWZ5IC8+XG4gICAgICAgICAgPC9MaXN0SXRlbT5cbiAgICAgICAgPC9MaXN0PlxuICAgICAgPC9Db2xsYXBzZT5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG4iXX0=