easy-richtextarea 3.0.145 → 3.0.147

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.
@@ -22,8 +22,9 @@ var View = function(properties) {
22
22
  onScroll: scrollHandler,
23
23
  onFocus: focusHandler,
24
24
  onBlur: blurHandler,
25
+ readOnly: true,
25
26
  active: true
26
- }));
27
+ }, "Rule (blah)\n Conclusion\n A"));
27
28
  };
28
29
  var _default = View;
29
30
  function changeHandler(event, element) {
@@ -41,4 +42,4 @@ function blurHandler(event, element) {
41
42
  console.log("blur");
42
43
  }
43
44
 
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5cbmNvbnN0IFZpZXcgPSAocHJvcGVydGllcykgPT5cblxuICA8ZGl2IGNsYXNzTmFtZT1cInZpZXdcIj5cbiAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e3Njcm9sbEhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZvY3VzPXtmb2N1c0hhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICBvbkJsdXI9e2JsdXJIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgYWN0aXZlXG4gICAgLz5cbiAgPC9kaXY+XG5cbjtcblxuZXhwb3J0IGRlZmF1bHQgVmlldztcblxuZnVuY3Rpb24gY2hhbmdlSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zdCBjb250ZW50Q2hhbmdlZCA9IGVsZW1lbnQuaGFzQ29udGVudENoYW5nZWQoKSxcbiAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IGVsZW1lbnQuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpO1xuXG4gIGNvbnNvbGUubG9nKGNvbnRlbnRDaGFuZ2VkLCBzZWxlY3Rpb25DaGFuZ2VkKVxufVxuXG5mdW5jdGlvbiBzY3JvbGxIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IHNjcm9sbFRvcCA9IGVsZW1lbnQuZ2V0U2Nyb2xsVG9wKCksXG4gICAgICAgIHNjcm9sbExlZnQgPSBlbGVtZW50LmdldFNjcm9sbExlZnQoKTtcblxuICBjb25zb2xlLmxvZyhzY3JvbGxUb3AsIHNjcm9sbExlZnQpXG59XG5cbmZ1bmN0aW9uIGZvY3VzSGFuZGxlcihldmVudCwgZWxlbWVudCkge1xuICBjb25zb2xlLmxvZyhcImZvY3VzXCIpXG59XG5cbmZ1bmN0aW9uIGJsdXJIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnNvbGUubG9nKFwiYmx1clwiKVxufVxuIl0sIm5hbWVzIjpbIlZpZXciLCJwcm9wZXJ0aWVzIiwiZGl2IiwiY2xhc3NOYW1lIiwiUmljaFRleHRhcmVhIiwib25DaGFuZ2UiLCJjaGFuZ2VIYW5kbGVyIiwib25TY3JvbGwiLCJzY3JvbGxIYW5kbGVyIiwib25Gb2N1cyIsImZvY3VzSGFuZGxlciIsIm9uQmx1ciIsImJsdXJIYW5kbGVyIiwiYWN0aXZlIiwiZXZlbnQiLCJlbGVtZW50IiwiY29udGVudENoYW5nZWQiLCJoYXNDb250ZW50Q2hhbmdlZCIsInNlbGVjdGlvbkNoYW5nZWQiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwiY29uc29sZSIsImxvZyIsInNjcm9sbFRvcCIsImdldFNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJnZXRTY3JvbGxMZWZ0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7aUVBZnlCOzs7Ozs7QUFFekIsSUFBTUEsT0FBTyxTQUFDQzt5QkFFWixvQkFBQ0M7UUFBSUMsV0FBVTtxQkFDYixvQkFBQ0MscUJBQVk7UUFBQ0MsVUFBVUM7UUFDVkMsVUFBVUM7UUFDVkMsU0FBU0M7UUFDVEMsUUFBUUM7UUFDUkMsUUFBQUEsSUFBTTs7O0lBTXhCLFdBQWViO0FBRWYsU0FBU00sY0FBY1EsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDckMsSUFBTUMsaUJBQWlCRCxRQUFRRSxpQkFBaUIsSUFDMUNDLG1CQUFtQkgsUUFBUUksbUJBQW1CO0lBRXBEQyxRQUFRQyxHQUFHLENBQUNMLGdCQUFnQkU7QUFDOUI7QUFFQSxTQUFTVixjQUFjTSxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNyQyxJQUFNTyxZQUFZUCxRQUFRUSxZQUFZLElBQ2hDQyxhQUFhVCxRQUFRVSxhQUFhO0lBRXhDTCxRQUFRQyxHQUFHLENBQUNDLFdBQVdFO0FBQ3pCO0FBRUEsU0FBU2QsYUFBYUksS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDcENLLFFBQVFDLEdBQUcsQ0FBQztBQUNkO0FBRUEsU0FBU1QsWUFBWUUsS0FBSyxFQUFFQyxPQUFPLEVBQUU7SUFDbkNLLFFBQVFDLEdBQUcsQ0FBQztBQUNkIn0=
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGFtcGxlL3ZpZXcuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBSaWNoVGV4dGFyZWEgZnJvbSBcIi4vcmljaFRleHRhcmVhXCI7XG5cbmNvbnN0IFZpZXcgPSAocHJvcGVydGllcykgPT5cblxuICA8ZGl2IGNsYXNzTmFtZT1cInZpZXdcIj5cbiAgICA8UmljaFRleHRhcmVhIG9uQ2hhbmdlPXtjaGFuZ2VIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e3Njcm9sbEhhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZvY3VzPXtmb2N1c0hhbmRsZXJ9XG4gICAgICAgICAgICAgICAgICBvbkJsdXI9e2JsdXJIYW5kbGVyfVxuICAgICAgICAgICAgICAgICAgcmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZVxuICAgID5cbntgUnVsZSAoYmxhaClcbiAgQ29uY2x1c2lvblxuICAgIEFgfVxuICAgIDwvUmljaFRleHRhcmVhPlxuICA8L2Rpdj5cblxuO1xuXG5leHBvcnQgZGVmYXVsdCBWaWV3O1xuXG5mdW5jdGlvbiBjaGFuZ2VIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gZWxlbWVudC5oYXNDb250ZW50Q2hhbmdlZCgpLFxuICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gZWxlbWVudC5oYXNTZWxlY3Rpb25DaGFuZ2VkKCk7XG5cbiAgY29uc29sZS5sb2coY29udGVudENoYW5nZWQsIHNlbGVjdGlvbkNoYW5nZWQpXG59XG5cbmZ1bmN0aW9uIHNjcm9sbEhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc3Qgc2Nyb2xsVG9wID0gZWxlbWVudC5nZXRTY3JvbGxUb3AoKSxcbiAgICAgICAgc2Nyb2xsTGVmdCA9IGVsZW1lbnQuZ2V0U2Nyb2xsTGVmdCgpO1xuXG4gIGNvbnNvbGUubG9nKHNjcm9sbFRvcCwgc2Nyb2xsTGVmdClcbn1cblxuZnVuY3Rpb24gZm9jdXNIYW5kbGVyKGV2ZW50LCBlbGVtZW50KSB7XG4gIGNvbnNvbGUubG9nKFwiZm9jdXNcIilcbn1cblxuZnVuY3Rpb24gYmx1ckhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpIHtcbiAgY29uc29sZS5sb2coXCJibHVyXCIpXG59XG4iXSwibmFtZXMiOlsiVmlldyIsInByb3BlcnRpZXMiLCJkaXYiLCJjbGFzc05hbWUiLCJSaWNoVGV4dGFyZWEiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvblNjcm9sbCIsInNjcm9sbEhhbmRsZXIiLCJvbkZvY3VzIiwiZm9jdXNIYW5kbGVyIiwib25CbHVyIiwiYmx1ckhhbmRsZXIiLCJyZWFkT25seSIsImFjdGl2ZSIsImV2ZW50IiwiZWxlbWVudCIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImNvbnNvbGUiLCJsb2ciLCJzY3JvbGxUb3AiLCJnZXRTY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiZ2V0U2Nyb2xsTGVmdCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBc0JBOzs7ZUFBQTs7O2lFQXBCeUI7Ozs7OztBQUV6QixJQUFNQSxPQUFPLFNBQUNDO3lCQUVaLG9CQUFDQztRQUFJQyxXQUFVO3FCQUNiLG9CQUFDQyxxQkFBWTtRQUFDQyxVQUFVQztRQUNWQyxVQUFVQztRQUNWQyxTQUFTQztRQUNUQyxRQUFRQztRQUNSQyxVQUFBQSxJQUFRO1FBQ1JDLFFBQUFBLElBQU07T0FFdEI7O0lBUUYsV0FBZWQ7QUFFZixTQUFTTSxjQUFjUyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNyQyxJQUFNQyxpQkFBaUJELFFBQVFFLGlCQUFpQixJQUMxQ0MsbUJBQW1CSCxRQUFRSSxtQkFBbUI7SUFFcERDLFFBQVFDLEdBQUcsQ0FBQ0wsZ0JBQWdCRTtBQUM5QjtBQUVBLFNBQVNYLGNBQWNPLEtBQUssRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElBQU1PLFlBQVlQLFFBQVFRLFlBQVksSUFDaENDLGFBQWFULFFBQVFVLGFBQWE7SUFFeENMLFFBQVFDLEdBQUcsQ0FBQ0MsV0FBV0U7QUFDekI7QUFFQSxTQUFTZixhQUFhSyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNwQ0ssUUFBUUMsR0FBRyxDQUFDO0FBQ2Q7QUFFQSxTQUFTVixZQUFZRyxLQUFLLEVBQUVDLE9BQU8sRUFBRTtJQUNuQ0ssUUFBUUMsR0FBRyxDQUFDO0FBQ2QifQ==
@@ -207,18 +207,19 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
207
207
  var _this;
208
208
  _this = _super.apply(this, arguments);
209
209
  _defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element, eventType, forced) {
210
+ var readOnly = _this.isReadOnly();
211
+ if (readOnly) {
212
+ var previousContent = _this.getPreviousContent(), content = previousContent; ///
213
+ _this.setContent(content);
214
+ }
210
215
  var changed = _this.hasChanged();
211
216
  if (changed || forced) {
212
217
  _this.callHandlers(eventType, event, element);
213
218
  }
214
- var content = _this.getContent(), selection = _this.getSelection(), previousContent = content, previousSelection = selection; ///
215
- _this.setPreviousContent(previousContent);
219
+ var content1 = _this.getContent(), selection = _this.getSelection(), previousContent1 = content1, previousSelection = selection; ///
220
+ _this.setPreviousContent(previousContent1);
216
221
  _this.setPreviousSelection(previousSelection);
217
222
  });
218
- _defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function(event, element) {
219
- var mouseDown = false;
220
- _this.setMouseDown(mouseDown);
221
- });
222
223
  _defineProperty(_assertThisInitialized(_this), "mouseDownHandler", function(event, element) {
223
224
  var forced = false, mouseDown = true, eventType = CHANGE_EVENT_TYPE;
224
225
  _this.setMouseDown(mouseDown);
@@ -232,6 +233,10 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
232
233
  _this.intermediateHandler(event, element, eventTYpe, forced);
233
234
  }
234
235
  });
236
+ _defineProperty(_assertThisInitialized(_this), "mouseUpHandler", function(event, element) {
237
+ var mouseDown = false;
238
+ _this.setMouseDown(mouseDown);
239
+ });
235
240
  _defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
236
241
  var forced = false, eventType = CHANGE_EVENT_TYPE;
237
242
  defer(function() {
@@ -266,13 +271,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
266
271
  return active;
267
272
  }
268
273
  },
269
- {
270
- key: "isReadOnly",
271
- value: function isReadOnly() {
272
- var domElement = this.getDOMElement(), readOnly = domElement.readOnly;
273
- return readOnly;
274
- }
275
- },
276
274
  {
277
275
  key: "getContent",
278
276
  value: function getContent() {
@@ -287,15 +285,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
287
285
  return selection;
288
286
  }
289
287
  },
290
- {
291
- key: "setReadOnly",
292
- value: function setReadOnly(readOnly) {
293
- var domElement = this.getDOMElement();
294
- Object.assign(domElement, {
295
- readOnly: readOnly
296
- });
297
- }
298
- },
299
288
  {
300
289
  key: "setContent",
301
290
  value: function setContent(content) {
@@ -317,13 +306,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
317
306
  this.setPreviousSelection(previousSelection);
318
307
  }
319
308
  },
320
- {
321
- key: "isMouseDown",
322
- value: function isMouseDown() {
323
- var state = this.getState(), mouseDown = state.mouseDown;
324
- return mouseDown;
325
- }
326
- },
327
309
  {
328
310
  key: "hasChanged",
329
311
  value: function hasChanged() {
@@ -454,20 +436,42 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
454
436
  });
455
437
  }
456
438
  },
439
+ {
440
+ key: "isReadOnly",
441
+ value: function isReadOnly() {
442
+ var readOnly = this.getState().readOnly;
443
+ return readOnly;
444
+ }
445
+ },
446
+ {
447
+ key: "isMouseDown",
448
+ value: function isMouseDown() {
449
+ var mouseDown = this.getState().mouseDown;
450
+ return mouseDown;
451
+ }
452
+ },
457
453
  {
458
454
  key: "getPreviousContent",
459
455
  value: function getPreviousContent() {
460
- var state = this.getState(), previousContent = state.previousContent;
456
+ var previousContent = this.getState().previousContent;
461
457
  return previousContent;
462
458
  }
463
459
  },
464
460
  {
465
461
  key: "getPreviousSelection",
466
462
  value: function getPreviousSelection() {
467
- var state = this.getState(), previousSelection = state.previousSelection;
463
+ var previousSelection = this.getState().previousSelection;
468
464
  return previousSelection;
469
465
  }
470
466
  },
467
+ {
468
+ key: "setReadOnly",
469
+ value: function setReadOnly(readOnly) {
470
+ this.updateState({
471
+ readOnly: readOnly
472
+ });
473
+ }
474
+ },
471
475
  {
472
476
  key: "setMouseDown",
473
477
  value: function setMouseDown(mouseDown) {
@@ -495,8 +499,9 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
495
499
  {
496
500
  key: "setInitialState",
497
501
  value: function setInitialState() {
498
- var mouseDown = false, previousContent = null, previousSelection = null;
502
+ var readOnly = false, mouseDown = false, previousContent = null, previousSelection = null;
499
503
  this.setState({
504
+ readOnly: readOnly,
500
505
  mouseDown: mouseDown,
501
506
  previousContent: previousContent,
502
507
  previousSelection: previousSelection
@@ -506,11 +511,15 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
506
511
  {
507
512
  key: "didMount",
508
513
  value: function didMount() {
509
- var _this_properties = this.properties, active = _this_properties.active, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, onFocus = _this_properties.onFocus, onBlur = _this_properties.onBlur, changeHandler = onChange, scrollHandler = onScroll, focusHandler = onFocus, blurHandler = onBlur; ///
514
+ var _this_properties = this.properties, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, onFocus = _this_properties.onFocus, onBlur = _this_properties.onBlur, _this_properties_readOnly = _this_properties.readOnly, readOnly = _this_properties_readOnly === void 0 ? false : _this_properties_readOnly, _this_properties_active = _this_properties.active, active = _this_properties_active === void 0 ? false : _this_properties_active, changeHandler = onChange, scrollHandler = onScroll, focusHandler = onFocus, blurHandler = onBlur; ///
510
515
  changeHandler && this.onChange(changeHandler, this);
511
516
  scrollHandler && this.onScroll(scrollHandler, this);
512
517
  focusHandler && this.onFocus(focusHandler, this);
513
518
  blurHandler && this.onBlur(blurHandler, this);
519
+ var content = this.getContent(), selection = this.getSelection(), previousContent = content, previousSelection = selection; ///
520
+ this.setPreviousSelection(previousSelection);
521
+ this.setPreviousContent(previousContent);
522
+ this.setReadOnly(readOnly);
514
523
  if (active) {
515
524
  this.activate();
516
525
  }
@@ -524,6 +533,10 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
524
533
  scrollHandler && this.offScroll(scrollHandler, this);
525
534
  focusHandler && this.offFocus(focusHandler, this);
526
535
  blurHandler && this.offBlur(blurHandler, this);
536
+ var active = this.isActive();
537
+ if (active) {
538
+ this.deactivate();
539
+ }
527
540
  }
528
541
  },
529
542
  {
@@ -541,10 +554,11 @@ _defineProperty(RichTextarea, "ignoredProperties", [
541
554
  "onScroll",
542
555
  "onFocus",
543
556
  "onBlur",
544
- "active"
557
+ "active",
558
+ "readOnly"
545
559
  ]);
546
560
  _defineProperty(RichTextarea, "defaultProperties", {
547
561
  className: "rich"
548
562
  });
549
563
 
550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyB3aW5kb3csIEVsZW1lbnQsIGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xyXG5cclxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIlxyXG5cclxuY29uc3QgeyBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRVVQX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcztcclxuXHJcbmNvbnN0IGRlZmVyID0gKGZ1bmMpID0+IHNldFRpbWVvdXQoZnVuYywgMSk7IC8vL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmljaFRleHRhcmVhIGV4dGVuZHMgRWxlbWVudCB7XHJcbiAgaW50ZXJtZWRpYXRlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpID0+IHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLmhhc0NoYW5nZWQoKTtcclxuXHJcbiAgICBpZiAoY2hhbmdlZCB8fCBmb3JjZWQpIHtcclxuICAgICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQsICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgbW91c2VVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IG1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcbiAgfTtcclxuXHJcbiAgbW91c2VEb3duSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZSxcclxuICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIG1vdXNlTW92ZUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgIG1vdXNlRG93biA9IHRoaXMuaXNNb3VzZURvd24oKSxcclxuICAgICAgICBldmVudFRZcGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBpZiAobW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUWXBlLCBmb3JjZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGlucHV0SGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gdHJ1ZSxcclxuICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSB0cnVlLFxyXG4gICAgICAgIGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIGV2ZW50VHlwZSwgZm9yY2VkKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCkge1xyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5oYXNDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgaXNSZWFkT25seSgpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHsgcmVhZE9ubHkgfSA9IGRvbUVsZW1lbnQ7XHJcbiAgICBcclxuICAgIHJldHVybiByZWFkT25seTsgXHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seShyZWFkT25seSkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICByZWFkT25seVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxyXG4gICAgICBzZWxlY3Rpb25FbmRcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgaXNNb3VzZURvd24oKSB7XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKSxcclxuICAgICAgICAgIHsgbW91c2VEb3duIH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gbW91c2VEb3duO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRoaXMuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICByZXR1cm4gY2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc0NvbnRlbnRDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudCA9IChjb250ZW50ICE9PSBwcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSBjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLmdldFByZXZpb3VzU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRGlmZmVyZW50VG8ocHJldmlvdXNTZWxlY3Rpb24pLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vbihgJHtCTFVSX0VWRU5UX1RZUEV9ICR7TU9VU0VVUF9FVkVOVF9UWVBFfSAke0NPTlRFWFRNRU5VX0VWRU5UX1RZUEV9YCwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7IC8vL1xyXG5cclxuICAgIHRoaXMub24oTU9VU0VET1dOX0VWRU5UX1RZUEUsIHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vZmYoYCR7QkxVUl9FVkVOVF9UWVBFfSAke01PVVNFVVBfRVZFTlRfVFlQRX0gJHtDT05URVhUTUVOVV9FVkVOVF9UWVBFfWAsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgdGhpcy5tb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzQ29udGVudCB9ID0gc3RhdGU7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdldFN0YXRlKCksXHJcbiAgICAgICAgICB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSBzdGF0ZTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNTZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRNb3VzZURvd24obW91c2VEb3duKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgbW91c2VEb3duXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IG51bGwsXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIG1vdXNlRG93bixcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgYWN0aXZlLCBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2UsIC8vL1xyXG4gICAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXI7IC8vL1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9uRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSwgb25TY3JvbGwsIG9uRm9jdXMsIG9uQmx1ciB9ID0gdGhpcy5wcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGJsdXJIYW5kbGVyID0gb25CbHVyOyAvLy9cclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuICAgIGZvY3VzSGFuZGxlciAmJiB0aGlzLm9mZkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcbiAgICBibHVySGFuZGxlciAmJiB0aGlzLm9mZkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGlzZSgpIHtcclxuICAgIHRoaXMuc2V0SW5pdGlhbFN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgdGFnTmFtZSA9IFwidGV4dGFyZWFcIjtcclxuXHJcbiAgc3RhdGljIGlnbm9yZWRQcm9wZXJ0aWVzID0gW1xyXG4gICAgXCJvbkNoYW5nZVwiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQmx1clwiLFxyXG4gICAgXCJhY3RpdmVcIlxyXG4gIF07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydGllcyA9IHtcclxuICAgIGNsYXNzTmFtZTogXCJyaWNoXCJcclxuICB9O1xyXG59XHJcbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiUmljaFRleHRhcmVhIiwiQkxVUl9FVkVOVF9UWVBFIiwiZXZlbnRUeXBlcyIsIklOUFVUX0VWRU5UX1RZUEUiLCJGT0NVU19FVkVOVF9UWVBFIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJTQ1JPTExfRVZFTlRfVFlQRSIsIktFWURPV05fRVZFTlRfVFlQRSIsIk1PVVNFVVBfRVZFTlRfVFlQRSIsIk1PVVNFRE9XTl9FVkVOVF9UWVBFIiwiTU9VU0VNT1ZFX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiZGVmZXIiLCJmdW5jIiwic2V0VGltZW91dCIsImludGVybWVkaWF0ZUhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJldmVudFR5cGUiLCJmb3JjZWQiLCJjaGFuZ2VkIiwiaGFzQ2hhbmdlZCIsImNhbGxIYW5kbGVycyIsImNvbnRlbnQiLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwicHJldmlvdXNDb250ZW50IiwicHJldmlvdXNTZWxlY3Rpb24iLCJzZXRQcmV2aW91c0NvbnRlbnQiLCJzZXRQcmV2aW91c1NlbGVjdGlvbiIsIm1vdXNlVXBIYW5kbGVyIiwibW91c2VEb3duIiwic2V0TW91c2VEb3duIiwibW91c2VEb3duSGFuZGxlciIsIm1vdXNlTW92ZUhhbmRsZXIiLCJpc01vdXNlRG93biIsImV2ZW50VFlwZSIsImtleURvd25IYW5kbGVyIiwiaW5wdXRIYW5kbGVyIiwic2Nyb2xsSGFuZGxlciIsImZvY3VzSGFuZGxlciIsImJsdXJIYW5kbGVyIiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImlzUmVhZE9ubHkiLCJkb21FbGVtZW50IiwiZ2V0RE9NRWxlbWVudCIsInJlYWRPbmx5IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsInNldFJlYWRPbmx5IiwiT2JqZWN0IiwiYXNzaWduIiwic2V0Q29udGVudCIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJnZXRTdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJnZXRFbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic3RhdGUiLCJnZXRTdGF0ZSIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJzZWxlY3Rpb25DaGFuZ2VkIiwiaGFzU2VsZWN0aW9uQ2hhbmdlZCIsImdldFByZXZpb3VzQ29udGVudCIsImNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudCIsImdldFByZXZpb3VzU2VsZWN0aW9uIiwic2VsZWN0aW9uRGlmZmVyZW50VG9QcmV2aW91c1NlbGVjdGlvbiIsImlzRGlmZmVyZW50VG8iLCJhY3RpdmF0ZSIsIndpbmRvdyIsIm9uIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkJsdXIiLCJoYW5kbGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9mZkJsdXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwib25Gb2N1cyIsIm9mZkZvY3VzIiwib25TY3JvbGwiLCJvZmZTY3JvbGwiLCJvbkNoYW5nZSIsImNoYW5nZUhhbmRsZXIiLCJvZmZDaGFuZ2UiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlckVsZW1lbnQiLCJjYWxsIiwidXBkYXRlU3RhdGUiLCJzZXRJbml0aWFsU3RhdGUiLCJzZXRTdGF0ZSIsImRpZE1vdW50IiwicHJvcGVydGllcyIsIndpbGxVbm1vdW50IiwiaW5pdGlhbGlzZSIsIkVsZW1lbnQiLCJ0YWdOYW1lIiwiaWdub3JlZFByb3BlcnRpZXMiLCJkZWZhdWx0UHJvcGVydGllcyIsImNsYXNzTmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFtQnFCQTs7O29CQWpCdUI7OERBRXRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEIsSUFBUUMsa0JBUzRCQyxnQkFBVSxDQVR0Q0QsaUJBQ0NFLG1CQVEyQkQsZ0JBQVUsQ0FSckNDLGtCQUNBQyxtQkFPMkJGLGdCQUFVLENBUHJDRSxrQkFDQUMsb0JBTTJCSCxnQkFBVSxDQU5yQ0csbUJBQ0FDLG9CQUsyQkosZ0JBQVUsQ0FMckNJLG1CQUNBQyxxQkFJMkJMLGdCQUFVLENBSnJDSyxvQkFD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
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyB3aW5kb3csIEVsZW1lbnQsIGV2ZW50VHlwZXMgfSBmcm9tIFwiZWFzeVwiO1xyXG5cclxuaW1wb3J0IFNlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb25cIlxyXG5cclxuY29uc3QgeyBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRVVQX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIE1PVVNFRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBNT1VTRU1PVkVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSB9ID0gZXZlbnRUeXBlcztcclxuXHJcbmNvbnN0IGRlZmVyID0gKGZ1bmMpID0+IHNldFRpbWVvdXQoZnVuYywgMSk7IC8vL1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmljaFRleHRhcmVhIGV4dGVuZHMgRWxlbWVudCB7XHJcbiAgaW50ZXJtZWRpYXRlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpID0+IHtcclxuICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRPbmx5KCk7XHJcblxyXG4gICAgaWYgKHJlYWRPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwcmV2aW91c0NvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5oYXNDaGFuZ2VkKCk7XHJcblxyXG4gICAgaWYgKGNoYW5nZWQgfHwgZm9yY2VkKSB7XHJcbiAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcbiAgICB0aGlzLnNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIG1vdXNlRG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgbW91c2VEb3duID0gdHJ1ZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgbW91c2VNb3ZlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZm9yY2VkID0gZmFsc2UsXHJcbiAgICAgICAgICBtb3VzZURvd24gPSB0aGlzLmlzTW91c2VEb3duKCksXHJcbiAgICAgICAgICBldmVudFRZcGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICBpZiAobW91c2VEb3duKSB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUWXBlLCBmb3JjZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbW91c2VVcEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IG1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0TW91c2VEb3duKG1vdXNlRG93bik7XHJcbiAgfTtcclxuXHJcbiAga2V5RG93bkhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgZGVmZXIoKCkgPT4gdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCBldmVudFR5cGUsIGZvcmNlZCkpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gU0NST0xMX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c0hhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGZvcmNlZCA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpKTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBmb3JjZWQgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgZXZlbnRUeXBlLCBmb3JjZWQpO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIHJldHVybiBhY3RpdmU7XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZW50KCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgeyB2YWx1ZSB9ID0gZG9tRWxlbWVudCxcclxuICAgICAgICAgIGNvbnRlbnQgPSB2YWx1ZTsgIC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21ET01FbGVtZW50KGRvbUVsZW1lbnQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KTtcclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGlvbihzZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxyXG4gICAgICBzZWxlY3Rpb25FbmRcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgaGFzQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VkID0gdGhpcy5oYXNDb250ZW50Q2hhbmdlZCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRoaXMuaGFzU2VsZWN0aW9uQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgY2hhbmdlZCA9IChjb250ZW50Q2hhbmdlZCB8fCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuXHJcbiAgICByZXR1cm4gY2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc0NvbnRlbnRDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnREaWZmZXJlbnRUb1ByZXZpb3VzQ29udGVudCA9IChjb250ZW50ICE9PSBwcmV2aW91c0NvbnRlbnQpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSBjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHJldHVybiBjb250ZW50Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLmdldFByZXZpb3VzU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25EaWZmZXJlbnRUb1ByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRGlmZmVyZW50VG8ocHJldmlvdXNTZWxlY3Rpb24pLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIHJldHVybiBzZWxlY3Rpb25DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vbihgJHtCTFVSX0VWRU5UX1RZUEV9ICR7TU9VU0VVUF9FVkVOVF9UWVBFfSAke0NPTlRFWFRNRU5VX0VWRU5UX1RZUEV9YCwgdGhpcy5tb3VzZVVwSGFuZGxlciwgdGhpcyk7IC8vL1xyXG5cclxuICAgIHRoaXMub24oTU9VU0VET1dOX0VWRU5UX1RZUEUsIHRoaXMubW91c2VEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICBjb25zdCBtb3VzZURvd24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldE1vdXNlRG93bihtb3VzZURvd24pO1xyXG5cclxuICAgIHdpbmRvdy5vZmYoYCR7QkxVUl9FVkVOVF9UWVBFfSAke01PVVNFVVBfRVZFTlRfVFlQRX0gJHtDT05URVhUTUVOVV9FVkVOVF9UWVBFfWAsIHRoaXMubW91c2VVcEhhbmRsZXIsIHRoaXMpOyAvLy9cclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRURPV05fRVZFTlRfVFlQRSwgdGhpcy5tb3VzZURvd25IYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihNT1VTRU1PVkVfRVZFTlRfVFlQRSwgdGhpcy5tb3VzZU1vdmVIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBjb25zdCB7IGhhbmRsZXIsIGVsZW1lbnQ6IGhhbmRsZXJFbGVtZW50IH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNSZWFkT25seSgpIHtcclxuICAgIGNvbnN0IHsgcmVhZE9ubHkgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcmVhZE9ubHk7XHJcbiAgfVxyXG5cclxuICBpc01vdXNlRG93bigpIHtcclxuICAgIGNvbnN0IHsgbW91c2VEb3duIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIG1vdXNlRG93bjtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzQ29udGVudCgpIHtcclxuICAgIGNvbnN0IHsgcHJldmlvdXNDb250ZW50IH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzQ29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFByZXZpb3VzU2VsZWN0aW9uKCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c1NlbGVjdGlvbiB9ID0gdGhpcy5nZXRTdGF0ZSgpO1xyXG5cclxuICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgcmVhZE9ubHlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0TW91c2VEb3duKG1vdXNlRG93bikge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIG1vdXNlRG93blxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2aW91c0NvbnRlbnQocHJldmlvdXNDb250ZW50KSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgcHJldmlvdXNDb250ZW50XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFByZXZpb3VzU2VsZWN0aW9uKHByZXZpb3VzU2VsZWN0aW9uKSB7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcclxuICAgICAgcHJldmlvdXNTZWxlY3Rpb25cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3QgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIG1vdXNlRG93biA9IGZhbHNlLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgcmVhZE9ubHksXHJcbiAgICAgIG1vdXNlRG93bixcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uU2Nyb2xsLCBvbkZvY3VzLCBvbkJsdXIsIHJlYWRPbmx5ID0gZmFsc2UsIGFjdGl2ZSA9IGZhbHNlIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICAgIGZvY3VzSGFuZGxlciA9IG9uRm9jdXMsIC8vL1xyXG4gICAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1cjsgLy8vXHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub25Gb2N1cyhmb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG4gICAgYmx1ckhhbmRsZXIgJiYgdGhpcy5vbkJsdXIoYmx1ckhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRSZWFkT25seShyZWFkT25seSk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmFjdGl2YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3aWxsVW5tb3VudCgpIHtcclxuICAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uU2Nyb2xsLCBvbkZvY3VzLCBvbkJsdXIgfSA9IHRoaXMucHJvcGVydGllcyxcclxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGwsIC8vL1xyXG4gICAgICAgICAgZm9jdXNIYW5kbGVyID0gb25Gb2N1cywgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1cjsgLy8vXHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9mZkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vZmZGb2N1cyhmb2N1c0hhbmRsZXIsIHRoaXMpO1xyXG4gICAgYmx1ckhhbmRsZXIgJiYgdGhpcy5vZmZCbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRpYWxpc2UoKSB7XHJcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRhZ05hbWUgPSBcInRleHRhcmVhXCI7XHJcblxyXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcclxuICAgIFwib25DaGFuZ2VcIixcclxuICAgIFwib25TY3JvbGxcIixcclxuICAgIFwib25Gb2N1c1wiLFxyXG4gICAgXCJvbkJsdXJcIixcclxuICAgIFwiYWN0aXZlXCIsXHJcbiAgICBcInJlYWRPbmx5XCJcclxuICBdO1xyXG5cclxuICBzdGF0aWMgZGVmYXVsdFByb3BlcnRpZXMgPSB7XHJcbiAgICBjbGFzc05hbWU6IFwicmljaFwiXHJcbiAgfTtcclxufVxyXG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsIkJMVVJfRVZFTlRfVFlQRSIsImV2ZW50VHlwZXMiLCJJTlBVVF9FVkVOVF9UWVBFIiwiRk9DVVNfRVZFTlRfVFlQRSIsIkNIQU5HRV9FVkVOVF9UWVBFIiwiU0NST0xMX0VWRU5UX1RZUEUiLCJLRVlET1dOX0VWRU5UX1RZUEUiLCJNT1VTRVVQX0VWRU5UX1RZUEUiLCJNT1VTRURPV05fRVZFTlRfVFlQRSIsIk1PVVNFTU9WRV9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsImRlZmVyIiwiZnVuYyIsInNldFRpbWVvdXQiLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwiZXZlbnRUeXBlIiwiZm9yY2VkIiwicmVhZE9ubHkiLCJpc1JlYWRPbmx5IiwicHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNDb250ZW50IiwiY29udGVudCIsInNldENvbnRlbnQiLCJjaGFuZ2VkIiwiaGFzQ2hhbmdlZCIsImNhbGxIYW5kbGVycyIsImdldENvbnRlbnQiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJwcmV2aW91c1NlbGVjdGlvbiIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwibW91c2VEb3duSGFuZGxlciIsIm1vdXNlRG93biIsInNldE1vdXNlRG93biIsIm1vdXNlTW92ZUhhbmRsZXIiLCJpc01vdXNlRG93biIsImV2ZW50VFlwZSIsIm1vdXNlVXBIYW5kbGVyIiwia2V5RG93bkhhbmRsZXIiLCJpbnB1dEhhbmRsZXIiLCJzY3JvbGxIYW5kbGVyIiwiZm9jdXNIYW5kbGVyIiwiYmx1ckhhbmRsZXIiLCJpc0FjdGl2ZSIsImFjdGl2ZSIsImhhc0NsYXNzIiwiZG9tRWxlbWVudCIsImdldERPTUVsZW1lbnQiLCJ2YWx1ZSIsIlNlbGVjdGlvbiIsImZyb21ET01FbGVtZW50IiwiT2JqZWN0IiwiYXNzaWduIiwic2V0U2VsZWN0aW9uIiwic2VsZWN0aW9uU3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic2VsZWN0aW9uU3RhcnQiLCJzZWxlY3Rpb25FbmQiLCJjb250ZW50Q2hhbmdlZCIsImhhc0NvbnRlbnRDaGFuZ2VkIiwic2VsZWN0aW9uQ2hhbmdlZCIsImhhc1NlbGVjdGlvbkNoYW5nZWQiLCJjb250ZW50RGlmZmVyZW50VG9QcmV2aW91c0NvbnRlbnQiLCJnZXRQcmV2aW91c1NlbGVjdGlvbiIsInNlbGVjdGlvbkRpZmZlcmVudFRvUHJldmlvdXNTZWxlY3Rpb24iLCJpc0RpZmZlcmVudFRvIiwiYWN0aXZhdGUiLCJ3aW5kb3ciLCJvbiIsImFkZENsYXNzIiwiZGVhY3RpdmF0ZSIsIm9mZiIsInJlbW92ZUNsYXNzIiwib25CbHVyIiwiaGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvZmZCbHVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uRm9jdXMiLCJvZmZGb2N1cyIsIm9uU2Nyb2xsIiwib2ZmU2Nyb2xsIiwib25DaGFuZ2UiLCJjaGFuZ2VIYW5kbGVyIiwib2ZmQ2hhbmdlIiwicmVtYWluaW5nQXJndW1lbnRzIiwiZXZlbnRMaXN0ZW5lcnMiLCJmaW5kRXZlbnRMaXN0ZW5lcnMiLCJmb3JFYWNoIiwiZXZlbnRMaXN0ZW5lciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImdldFN0YXRlIiwic2V0UmVhZE9ubHkiLCJ1cGRhdGVTdGF0ZSIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiZGlkTW91bnQiLCJwcm9wZXJ0aWVzIiwid2lsbFVubW91bnQiLCJpbml0aWFsaXNlIiwiRWxlbWVudCIsInRhZ05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsImRlZmF1bHRQcm9wZXJ0aWVzIiwiY2xhc3NOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQW1CcUJBOzs7b0JBakJ1Qjs4REFFdEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QixJQUFRQyxrQkFTNEJDLGdCQUFVLENBVHRDRCxpQkFDQ0UsbUJBUTJCRCxnQkFBVSxDQVJyQ0Msa0JBQ0FDLG1CQU8yQkYsZ0JBQVUsQ0FQckNFLGtCQUNBQyxvQkFNMkJILGdCQUFVLENBTnJDRyxtQkFDQUMsb0JBSzJCSixnQkFBVSxDQUxyQ0ksbUJBQ0FDLHFCQUkyQkwsZ0JBQVUsQ0FKckNLLG9CQUNBQyxxQkFHMkJOLGdCQUFVLENBSHJDTSxvQkFDQUMsdUJBRTJCUCxnQkFBVSxDQUZyQ08sc0JBQ0FDLHVCQUMyQlIsZ0JBQVUsQ0FEckNRLHNCQUNBQyx5QkFBMkJULGdCQUFVLENBQXJDUztBQUVULElBQU1DLFFBQVEsU0FBQ0M7V0FBU0MsV0FBV0QsTUFBTTtHQUFJLEdBQUc7QUFFakMsSUFBQSxBQUFNYiw2QkFBTjtjQUFNQTs4QkFBQUE7YUFBQUE7OEJBQUFBOzs7UUFDbkJlLCtDQUFBQSx1QkFBc0IsU0FBQ0MsT0FBT0MsU0FBU0MsV0FBV0MsUUFBVztZQUMzRCxJQUFNQyxXQUFXLE1BQUtDLFVBQVU7WUFFaEMsSUFBSUQsVUFBVTtnQkFDWixJQUFNRSxrQkFB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "easy-richtextarea",
3
3
  "author": "James Smith",
4
- "version": "3.0.145",
4
+ "version": "3.0.147",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/easy-richtextarea",
7
7
  "description": "A textarea element that handles and hands off events well.",
@@ -10,11 +10,11 @@
10
10
  "url": "https://github.com/djalbat/easy-richtextarea"
11
11
  },
12
12
  "dependencies": {
13
- "easy": "^14.1.2"
13
+ "easy": "^14.1.3"
14
14
  },
15
15
  "devDependencies": {
16
16
  "@swc/core": "^1.2.160",
17
- "easy-with-style": "^3.0.187",
17
+ "easy-with-style": "^3.0.188",
18
18
  "esbuild": "^0.9.2",
19
19
  "express": "^4.17.1",
20
20
  "lively-cli": "^2.0.34",
@@ -9,8 +9,13 @@ const View = (properties) =>
9
9
  onScroll={scrollHandler}
10
10
  onFocus={focusHandler}
11
11
  onBlur={blurHandler}
12
+ readOnly
12
13
  active
13
- />
14
+ >
15
+ {`Rule (blah)
16
+ Conclusion
17
+ A`}
18
+ </RichTextarea>
14
19
  </div>
15
20
 
16
21
  ;
@@ -19,6 +19,15 @@ const defer = (func) => setTimeout(func, 1); ///
19
19
 
20
20
  export default class RichTextarea extends Element {
21
21
  intermediateHandler = (event, element, eventType, forced) => {
22
+ const readOnly = this.isReadOnly();
23
+
24
+ if (readOnly) {
25
+ const previousContent = this.getPreviousContent(),
26
+ content = previousContent; ///
27
+
28
+ this.setContent(content);
29
+ }
30
+
22
31
  const changed = this.hasChanged();
23
32
 
24
33
  if (changed || forced) {
@@ -34,16 +43,10 @@ export default class RichTextarea extends Element {
34
43
  this.setPreviousSelection(previousSelection);
35
44
  }
36
45
 
37
- mouseUpHandler = (event, element) => {
38
- const mouseDown = false;
39
-
40
- this.setMouseDown(mouseDown);
41
- };
42
-
43
46
  mouseDownHandler = (event, element) => {
44
47
  const forced = false,
45
- mouseDown = true,
46
- eventType = CHANGE_EVENT_TYPE;
48
+ mouseDown = true,
49
+ eventType = CHANGE_EVENT_TYPE;
47
50
 
48
51
  this.setMouseDown(mouseDown);
49
52
 
@@ -52,24 +55,30 @@ export default class RichTextarea extends Element {
52
55
 
53
56
  mouseMoveHandler = (event, element) => {
54
57
  const forced = false,
55
- mouseDown = this.isMouseDown(),
56
- eventTYpe = CHANGE_EVENT_TYPE;
58
+ mouseDown = this.isMouseDown(),
59
+ eventTYpe = CHANGE_EVENT_TYPE;
57
60
 
58
61
  if (mouseDown) {
59
62
  this.intermediateHandler(event, element, eventTYpe, forced);
60
63
  }
61
64
  }
62
65
 
66
+ mouseUpHandler = (event, element) => {
67
+ const mouseDown = false;
68
+
69
+ this.setMouseDown(mouseDown);
70
+ };
71
+
63
72
  keyDownHandler = (event, element) => {
64
73
  const forced = false,
65
- eventType = CHANGE_EVENT_TYPE;
74
+ eventType = CHANGE_EVENT_TYPE;
66
75
 
67
76
  defer(() => this.intermediateHandler(event, element, eventType, forced));
68
77
  }
69
78
 
70
79
  inputHandler = (event, element) => {
71
80
  const forced = false,
72
- eventType = CHANGE_EVENT_TYPE;
81
+ eventType = CHANGE_EVENT_TYPE;
73
82
 
74
83
  this.intermediateHandler(event, element, eventType, forced);
75
84
  }
@@ -82,14 +91,14 @@ export default class RichTextarea extends Element {
82
91
 
83
92
  focusHandler = (event, element) => {
84
93
  const forced = true,
85
- eventType = FOCUS_EVENT_TYPE;
94
+ eventType = FOCUS_EVENT_TYPE;
86
95
 
87
96
  defer(() => this.intermediateHandler(event, element, eventType, forced));
88
97
  }
89
98
 
90
99
  blurHandler = (event, element) => {
91
100
  const forced = true,
92
- eventType = BLUR_EVENT_TYPE;
101
+ eventType = BLUR_EVENT_TYPE;
93
102
 
94
103
  this.intermediateHandler(event, element, eventType, forced);
95
104
  }
@@ -100,13 +109,6 @@ export default class RichTextarea extends Element {
100
109
  return active;
101
110
  }
102
111
 
103
- isReadOnly() {
104
- const domElement = this.getDOMElement(),
105
- { readOnly } = domElement;
106
-
107
- return readOnly;
108
- }
109
-
110
112
  getContent() {
111
113
  const domElement = this.getDOMElement(),
112
114
  { value } = domElement,
@@ -122,14 +124,6 @@ export default class RichTextarea extends Element {
122
124
  return selection;
123
125
  }
124
126
 
125
- setReadOnly(readOnly) {
126
- const domElement = this.getDOMElement();
127
-
128
- Object.assign(domElement, {
129
- readOnly
130
- });
131
- }
132
-
133
127
  setContent(content) {
134
128
  const value = content, ///
135
129
  previousContent = content, ///
@@ -158,13 +152,6 @@ export default class RichTextarea extends Element {
158
152
  this.setPreviousSelection(previousSelection);
159
153
  }
160
154
 
161
- isMouseDown() {
162
- const state = this.getState(),
163
- { mouseDown } = state;
164
-
165
- return mouseDown;
166
- }
167
-
168
155
  hasChanged() {
169
156
  const contentChanged = this.hasContentChanged(),
170
157
  selectionChanged = this.hasSelectionChanged(),
@@ -308,20 +295,36 @@ export default class RichTextarea extends Element {
308
295
  });
309
296
  }
310
297
 
298
+ isReadOnly() {
299
+ const { readOnly } = this.getState();
300
+
301
+ return readOnly;
302
+ }
303
+
304
+ isMouseDown() {
305
+ const { mouseDown } = this.getState();
306
+
307
+ return mouseDown;
308
+ }
309
+
311
310
  getPreviousContent() {
312
- const state = this.getState(),
313
- { previousContent } = state;
311
+ const { previousContent } = this.getState();
314
312
 
315
313
  return previousContent;
316
314
  }
317
315
 
318
316
  getPreviousSelection() {
319
- const state = this.getState(),
320
- { previousSelection } = state;
317
+ const { previousSelection } = this.getState();
321
318
 
322
319
  return previousSelection;
323
320
  }
324
321
 
322
+ setReadOnly(readOnly) {
323
+ this.updateState({
324
+ readOnly
325
+ });
326
+ }
327
+
325
328
  setMouseDown(mouseDown) {
326
329
  this.updateState({
327
330
  mouseDown
@@ -341,11 +344,13 @@ export default class RichTextarea extends Element {
341
344
  }
342
345
 
343
346
  setInitialState() {
344
- const mouseDown = false,
347
+ const readOnly = false,
348
+ mouseDown = false,
345
349
  previousContent = null,
346
350
  previousSelection = null;
347
351
 
348
352
  this.setState({
353
+ readOnly,
349
354
  mouseDown,
350
355
  previousContent,
351
356
  previousSelection
@@ -353,7 +358,7 @@ export default class RichTextarea extends Element {
353
358
  }
354
359
 
355
360
  didMount() {
356
- const { active, onChange, onScroll, onFocus, onBlur } = this.properties,
361
+ const { onChange, onScroll, onFocus, onBlur, readOnly = false, active = false } = this.properties,
357
362
  changeHandler = onChange, ///
358
363
  scrollHandler = onScroll, ///
359
364
  focusHandler = onFocus, ///
@@ -364,6 +369,17 @@ export default class RichTextarea extends Element {
364
369
  focusHandler && this.onFocus(focusHandler, this);
365
370
  blurHandler && this.onBlur(blurHandler, this);
366
371
 
372
+ const content = this.getContent(),
373
+ selection = this.getSelection(),
374
+ previousContent = content, ///
375
+ previousSelection = selection; ///
376
+
377
+ this.setPreviousSelection(previousSelection);
378
+
379
+ this.setPreviousContent(previousContent);
380
+
381
+ this.setReadOnly(readOnly);
382
+
367
383
  if (active) {
368
384
  this.activate();
369
385
  }
@@ -380,6 +396,12 @@ export default class RichTextarea extends Element {
380
396
  scrollHandler && this.offScroll(scrollHandler, this);
381
397
  focusHandler && this.offFocus(focusHandler, this);
382
398
  blurHandler && this.offBlur(blurHandler, this);
399
+
400
+ const active = this.isActive();
401
+
402
+ if (active) {
403
+ this.deactivate();
404
+ }
383
405
  }
384
406
 
385
407
  initialise() {
@@ -393,7 +415,8 @@ export default class RichTextarea extends Element {
393
415
  "onScroll",
394
416
  "onFocus",
395
417
  "onBlur",
396
- "active"
418
+ "active",
419
+ "readOnly"
397
420
  ];
398
421
 
399
422
  static defaultProperties = {