@plait/core 0.56.0 → 0.56.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,7 +40,7 @@ export function withMoving(board) {
40
40
  };
41
41
  board.keyUp = (event) => {
42
42
  if (!PlaitBoard.isReadonly(board)) {
43
- if (event.altKey && pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
43
+ if (pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
44
44
  event.preventDefault();
45
45
  const currentElements = updatePoints(board, activeElements, offsetX, offsetY);
46
46
  PlaitBoard.getBoardContainer(board).classList.add('element-moving');
@@ -286,4 +286,4 @@ export function drawPendingNodesG(board, activeElements, offsetX, offsetY) {
286
286
  });
287
287
  return pendingNodesG;
288
288
  }
289
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsT0FBTyxFQUNQLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixZQUFZLEVBQ2YsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVB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T0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBVSxFQUFFO2dCQUM3QyxNQUFNLEVBQUUsc0JBQXNCO2dCQUM5QixXQUFXLEVBQUUsQ0FBQztnQkFDZCxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixTQUFTLEVBQUUsT0FBTzthQUNyQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pCLGFBQWEsR0FBRyxPQUFPLEVBQUUsQ0FBQztnQkFDMUIsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsS0FBSyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRixhQUFhLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sYUFBYSxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBpc0luUGxhaXRCb2FyZCB9IGZyb20gJy4uL3V0aWxzL2JvYXJkJztcbmltcG9ydCB7IGNyZWF0ZUcsIGlzTWFpblBvaW50ZXIgfSBmcm9tICcuLi91dGlscy9kb20vY29tbW9uJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5pbXBvcnQgeyBUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgZ2V0SGl0RWxlbWVudEJ5UG9pbnQsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9zZWxlY3RlZC1lbGVtZW50JztcbmltcG9ydCB7IFBsYWl0Tm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyB0aHJvdHRsZVJBRiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBjYWNoZU1vdmluZ0VsZW1lbnRzLCBnZXRNb3ZpbmdFbGVtZW50cywgaXNNb3ZpbmdFbGVtZW50cywgcmVtb3ZlTW92aW5nRWxlbWVudHMgfSBmcm9tICcuLi91dGlscy9tb3ZpbmctZWxlbWVudCc7XG5pbXBvcnQgeyBNRVJHSU5HIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9oaXN0b3J5JztcbmltcG9ydCB7XG4gICAgaXNQcmV2ZW50VG91Y2hNb3ZlLFxuICAgIHByZXZlbnRUb3VjaE1vdmUsXG4gICAgaGFuZGxlVG91Y2hUYXJnZXQsXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50LFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50LFxuICAgIGhvdGtleXMsXG4gICAgZ2V0RWxlbWVudHNJbkdyb3VwQnlFbGVtZW50LFxuICAgIGdldFJlY3RhbmdsZUJ5QW5nbGUsXG4gICAgZ2V0U2VsZWN0aW9uQW5nbGUsXG4gICAgZHVwbGljYXRlRWxlbWVudHMsXG4gICAgZHJhd1JlY3RhbmdsZSxcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uLFxuICAgIGdldEFuZ2xlQnlFbGVtZW50LFxuICAgIHNldEFuZ2xlRm9yR1xufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBnZXRTbmFwTW92aW5nUmVmIH0gZnJvbSAnLi4vdXRpbHMvc25hcC9zbmFwLW1vdmluZyc7XG5pbXBvcnQgeyBQbGFpdEdyb3VwRWxlbWVudCwgUGxhaXRQb2ludGVyVHlwZSwgUmVjdGFuZ2xlQ2xpZW50LCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLCBTRUxFQ1RJT05fRklMTF9DT0xPUiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQUNUSVZFX01PVklOR19DTEFTU19OQU1FLCBQUkVTU19BTkRfTU9WRV9CVUZGRVIgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgYWRkU2VsZWN0aW9uV2l0aFRlbXBvcmFyeUVsZW1lbnRzIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcy9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgaXNLZXlIb3RrZXkgfSBmcm9tICdpcy1ob3RrZXknO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aE1vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgcG9pbnRlckRvd24sIHBvaW50ZXJNb3ZlLCBnbG9iYWxQb2ludGVyVXAsIGdsb2JhbFBvaW50ZXJNb3ZlLCBnbG9iYWxLZXlEb3duLCBrZXlVcCB9ID0gYm9hcmQ7XG5cbiAgICBsZXQgb2Zmc2V0WCA9IDA7XG4gICAgbGV0IG9mZnNldFkgPSAwO1xuICAgIGxldCBpc1ByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnQ6IFBvaW50IHwgbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgbGV0IHNuYXBHOiBTVkdHRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM6IFBsYWl0RWxlbWVudFtdIHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGhpdFRhcmdldEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaXNIaXRTZWxlY3RlZFRhcmdldDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgcGVuZGluZ05vZGVzRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLmdsb2JhbEtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoaXNLZXlIb3RrZXkoJ29wdGlvbicsIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0UG9pbnQgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyhib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ05vZGVzRyA9IGRyYXdQZW5kaW5nTm9kZXNHKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxLZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5ICYmIHBlbmRpbmdOb2Rlc0cgJiYgc3RhcnRQb2ludCAmJiBhY3RpdmVFbGVtZW50cy5sZW5ndGggJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICAgICAgICAgICAgICBjYWNoZU1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICBrZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSB8fFxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbikgfHxcbiAgICAgICAgICAgIGlzUHJldmVudFRvdWNoTW92ZShib2FyZCkgfHxcbiAgICAgICAgICAgICFpc01haW5Qb2ludGVyKGV2ZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIHBvaW50LCBlbCA9PiBib2FyZC5pc01vdmFibGUoZWwpKTtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpc0hpdFNlbGVjdGVkVGFyZ2V0ID0gaGl0VGFyZ2V0RWxlbWVudCAmJiBzZWxlY3RlZFRhcmdldEVsZW1lbnRzLmluY2x1ZGVzKGhpdFRhcmdldEVsZW1lbnQpO1xuICAgICAgICBpZiAoaGl0VGFyZ2V0RWxlbWVudCAmJiBpc0hpdFNlbGVjdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCB0cnVlKTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRUYXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRWxlbWVudHMgPSBib2FyZC5nZXRSZWxhdGVkRnJhZ21lbnQoW10sIFtoaXRUYXJnZXRFbGVtZW50XSk7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IFsuLi5nZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGhpdFRhcmdldEVsZW1lbnQpLCAuLi5yZWxhdGVkRWxlbWVudHNdO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgdHJ1ZSk7XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlj6rmnInliKTlrprnlKjmiLfmnKrlh7vkuK3lhYPntKDkuYvlkI7miY3lj6/ku6Xpqozor4HnlKjmiLfmmK/lkKblh7vkuK3kuoblt7LpgInlhYPntKDmiYDlnKjnmoTnqbrnmb3ljLrln59cbiAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSB1c2VyIGhhcyBub3QgaGl0IHRoZSBlbGVtZW50IGNhbiBpdCBiZSB2ZXJpZmllZCB3aGV0aGVyIHRoZSB1c2VyIGhpdCB0aGUgYmxhbmsgYXJlYSB3aGVyZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBsb2NhdGVkLlxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwICYmIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0SW5UYXJnZXRSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGUgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdEluVGFyZ2V0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cztcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IHRhcmdldFJlY3RhbmdsZTtcbiAgICAgICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF07XG4gICAgICAgICAgICBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZFBvaW50LCAuLi5zdGFydFBvaW50KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUiB8fCBnZXRNb3ZpbmdFbGVtZW50cyhib2FyZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRFbGVtZW50ICYmICFpc0hpdFNlbGVjdGVkVGFyZ2V0ICYmIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgW10pO1xuICAgICAgICAgICAgICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhcmdldEVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUueCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZS55ICsgb2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUFuZ2xlKG5ld1JlY3RhbmdsZSwgZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpKSB8fCBuZXdSZWN0YW5nbGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBNb3ZpbmdSZWYoYm9hcmQsIGFjdGl2ZVJlY3RhbmdsZSwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYICs9IHJlZi5kZWx0YVg7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFkgKz0gcmVmLmRlbHRhWTtcbiAgICAgICAgICAgICAgICAgICAgc25hcEcgPSByZWYuc25hcEc7XG4gICAgICAgICAgICAgICAgICAgIHNuYXBHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHNuYXBHKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gZHJhd1BlbmRpbmdOb2Rlc0coYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdlbGVtZW50LW1vdmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNb3ZpbmdFbGVtZW50cyhib2FyZCwgY3VycmVudEVsZW1lbnRzIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGNhbnZhcyBzY3JvbGxpbmcgYmVoYXZpb3IgZnJvbSBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nIG1vdmVcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgdmFsaWRFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgZHVwbGljYXRlRWxlbWVudHMoYm9hcmQsIHZhbGlkRWxlbWVudHMsIFtyZWN0YW5nbGUueCArIG9mZnNldFgsIHJlY3RhbmdsZS55ICsgb2Zmc2V0WV0pO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IG51bGw7XG4gICAgICAgIGlzSGl0U2VsZWN0ZWRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjYW5jZWxNb3ZlKGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgZmFsc2UpO1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxNb3ZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgcGVuZGluZ05vZGVzRz8ucmVtb3ZlKCk7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGlzTW92aW5nRWxlbWVudHMoYm9hcmQpKSB7XG4gICAgICAgICAgICByZW1vdmVNb3ZpbmdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEFycm93TW92aW5nKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBcnJvd01vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIChob3RrZXlzLmlzQXJyb3coZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRBcnJvdyhldmVudCkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTaGlmdCA9IGV2ZW50LnNoaWZ0S2V5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gaXNTaGlmdCA/IDEwIDogMTtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVVcChldmVudCkgfHwgaG90a2V5cy5pc0V4dGVuZFVwKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSAtYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmREb3duKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRCYWNrd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gLWJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRXh0ZW5kRm9yd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLWFycm93LW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2ludHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBvZmZzZXRbMF0sIG9mZnNldFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUYXJnZXRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdKTtcbiAgICB0YXJnZXRFbGVtZW50cy5wdXNoKC4uLnJlbGF0ZWRFbGVtZW50cyk7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IFsuLi5hY3RpdmVFbGVtZW50c10uZmlsdGVyKFxuICAgICAgICBlbGVtZW50ID0+ICFQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpICYmIGJvYXJkLmNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQuaWQpID4gLTFcbiAgICApO1xuICAgIHJldHVybiB2YWxpZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB2YWxpZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBib2FyZC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaW5kZXhdXG4gICAgICAgICk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFtpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50RWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3UGVuZGluZ05vZGVzRyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCBvZmZzZXRYOiBudW1iZXIsIG9mZnNldFk6IG51bWJlcikge1xuICAgIGxldCBwZW5kaW5nTm9kZXNHOiBTVkdFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICB2YWxpZEVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgbGV0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShpdGVtKTtcbiAgICAgICAgaWYgKHJlY3RhbmdsZSkge1xuICAgICAgICAgICAgcmVjdGFuZ2xlID0ge1xuICAgICAgICAgICAgICAgIHg6IHJlY3RhbmdsZS54ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiByZWN0YW5nbGUueSArIG9mZnNldFksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBtb3ZpbmdHID0gZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlISwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBmaWxsOiBTRUxFQ1RJT05fRklMTF9DT0xPUixcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFwZW5kaW5nTm9kZXNHKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGVzRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0QW5nbGVCeUVsZW1lbnQoaXRlbSk7XG4gICAgICAgICAgICBhbmdsZSAmJiBzZXRBbmdsZUZvckcobW92aW5nRywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSksIGFuZ2xlKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cuYXBwZW5kKG1vdmluZ0cpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBlbmRpbmdOb2Rlc0c7XG59XG4iXX0=
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1tb3ZpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wbHVnaW5zL3dpdGgtbW92aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsNEJBQTRCLEVBQzVCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsT0FBTyxFQUNQLDJCQUEyQixFQUMzQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixZQUFZLEVBQ2YsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0UsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWlCO0lBQ3hDLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXJHLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztJQUNoQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDN0IsSUFBSSxVQUF3QixDQUFDO0lBQzdCLElBQUksY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDeEMsSUFBSSxLQUFLLEdBQXVCLElBQUksQ0FBQztJQUNyQyxJQUFJLHVCQUF1QixHQUEyQixJQUFJLENBQUM7SUFDM0QsSUFBSSxzQkFBc0IsR0FBMEIsSUFBSSxDQUFDO0lBQ3pELElBQUksZ0JBQWdCLEdBQTZCLFNBQVMsQ0FBQztJQUMzRCxJQUFJLG1CQUFtQixHQUF3QixTQUFTLENBQUM7SUFDekQsSUFBSSxhQUFhLEdBQXVCLElBQUksQ0FBQztJQUU3QyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO1FBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxVQUFVLElBQUksY0FBYyxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMvRSxhQUFhLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzNFLGFBQWEsSUFBSSxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtRQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksYUFBYSxJQUFJLFVBQVUsSUFBSSxjQUFjLENBQUMsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUM5RSxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNwRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsZUFBaUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDTCxDQUFDO1FBQ0QsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1FBQ3hDLElBQ0ksVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDNUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDeEQsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQ3pCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUN2QixDQUFDO1lBQ0MsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25CLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsZ0JBQWdCLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNqRixzQkFBc0IsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxRCxtQkFBbUIsR0FBRyxnQkFBZ0IsSUFBSSxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RixJQUFJLGdCQUFnQixJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDMUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixjQUFjLEdBQUcsc0JBQXNCLENBQUM7WUFDeEMsdUJBQXVCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLGNBQWMsR0FBRyxDQUFDLEdBQUcsMkJBQTJCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQztZQUMvRix1QkFBdUIsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDSix1Q0FBdUM7WUFDdkMsa0tBQWtLO1lBQ2xLLE1BQU0sZUFBZSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksc0JBQXNCLENBQUMsS0FBSyxFQUFFLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzFILE1BQU0sc0JBQXNCLEdBQUcsZUFBZSxJQUFJLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0csSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUN6QixVQUFVLEdBQUcsS0FBSyxDQUFDO2dCQUNuQixjQUFjLEdBQUcsc0JBQXNCLENBQUM7Z0JBQ3hDLHVCQUF1QixHQUFHLGVBQWUsQ0FBQztnQkFDMUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztRQUNELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsV0FBVyxHQUFHLENBQUMsS0FBbUIsRUFBRSxFQUFFO1FBQ3hDLElBQUksVUFBVSxJQUFJLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDcEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzVCLENBQUM7WUFDRCxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7WUFDMUUsSUFBSSxRQUFRLEdBQUcscUJBQXFCLElBQUksaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMxRSxJQUFJLGdCQUFnQixJQUFJLENBQUMsbUJBQW1CLElBQUksc0JBQXNCLElBQUksc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUMxRyxpQ0FBaUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzdDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztvQkFDN0Isc0JBQXNCLEdBQUcsSUFBSSxDQUFDO29CQUM5QixtQkFBbUIsR0FBRyxTQUFTLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsV0FBVyxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFO29CQUNuQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQzt3QkFDM0IsT0FBTztvQkFDWCxDQUFDO29CQUNELE1BQU0sWUFBWSxHQUFHO3dCQUNqQixHQUFHLHVCQUF1Qjt3QkFDMUIsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUMsR0FBRyxPQUFPO3dCQUN0QyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLE9BQU87cUJBQ3pDLENBQUM7b0JBQ0YsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDO29CQUM3RyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUNyRSxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQztvQkFDdEIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RCLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO29CQUNsQixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO29CQUM5QyxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyRCxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekIsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7d0JBQ2YsYUFBYSxHQUFHLGlCQUFpQixDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMzRSxhQUFhLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbEYsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDOUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDcEUsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGVBQWlDLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLHFFQUFxRTtZQUNyRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUNELFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUM7SUFFRixLQUFLLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7UUFDOUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDdkIsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDTCxDQUFDO1FBQ0QsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsRUFBRTtRQUM1QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM5RCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3RFLGlCQUFpQixDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQztRQUNELGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFDN0Isc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFFRixTQUFTLFVBQVUsQ0FBQyxLQUFpQjtRQUNqQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDaEIsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQy9CLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDWixPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWlCO0lBQzdDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQ2pDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMzSCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNYLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDeEQsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO29CQUNwQixNQUFNO2dCQUNWLENBQUM7Z0JBQ0QsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNuQixNQUFNO2dCQUNWLENBQUM7Z0JBQ0QsS0FBSyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztvQkFDcEIsTUFBTTtnQkFDVixDQUFDO2dCQUNELEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDbEUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztvQkFDbkIsTUFBTTtnQkFDVixDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sY0FBYyxHQUFHLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hELFdBQVcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFO2dCQUN6QyxZQUFZLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQztJQUNGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQUMsS0FBaUI7SUFDdkQsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDckQsT0FBTyxlQUFlLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUN4QyxPQUFPLGNBQWMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWlCLEVBQUUsY0FBOEI7SUFDOUUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDNUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNsSCxDQUFDO0lBQ0YsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBaUIsRUFBRSxjQUE4QixFQUFFLE9BQWUsRUFBRSxPQUFlO0lBQzVHLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5RCxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFZLENBQUM7UUFDL0UsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RSxVQUFVLENBQUMsT0FBTyxDQUNkLEtBQUssRUFDTDtZQUNJLE1BQU0sRUFBRSxTQUFTO1NBQ3BCLEVBQ0QsQ0FBQyxLQUFLLENBQUMsQ0FDVixDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGVBQWUsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsY0FBOEIsRUFBRSxPQUFlLEVBQUUsT0FBZTtJQUNqSCxJQUFJLGFBQWEsR0FBc0IsSUFBSSxDQUFDO0lBQzVDLE1BQU0sUUFBUSxHQUFtQixFQUFFLENBQUM7SUFDcEMsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzlELGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDNUIsbUJBQW1CLENBQ2YsT0FBTyxFQUNQLElBQUksQ0FBQyxFQUFFO1lBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLEVBQ0QsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUNiLENBQUM7SUFDTixDQUFDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDcEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxHQUFHO2dCQUNSLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU87Z0JBQ3hCLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLE9BQU87Z0JBQ3hCLEtBQUssRUFBRSxTQUFTLENBQUMsS0FBSztnQkFDdEIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO2FBQzNCLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVUsRUFBRTtnQkFDN0MsTUFBTSxFQUFFLHNCQUFzQjtnQkFDOUIsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsU0FBUyxFQUFFLE9BQU87YUFDckIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNqQixhQUFhLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQzFCLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLEtBQUssSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakYsYUFBYSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLGFBQWEsQ0FBQztBQUN6QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJy4uL2ludGVyZmFjZXMvYm9hcmQnO1xuaW1wb3J0IHsgaXNJblBsYWl0Qm9hcmQgfSBmcm9tICcuLi91dGlscy9ib2FyZCc7XG5pbXBvcnQgeyBjcmVhdGVHLCBpc01haW5Qb2ludGVyIH0gZnJvbSAnLi4vdXRpbHMvZG9tL2NvbW1vbic7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IGdldEhpdEVsZW1lbnRCeVBvaW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQtZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdE5vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHsgdGhyb3R0bGVSQUYgfSBmcm9tICcuLi91dGlscy9jb21tb24nO1xuaW1wb3J0IHsgY2FjaGVNb3ZpbmdFbGVtZW50cywgZ2V0TW92aW5nRWxlbWVudHMsIGlzTW92aW5nRWxlbWVudHMsIHJlbW92ZU1vdmluZ0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvbW92aW5nLWVsZW1lbnQnO1xuaW1wb3J0IHsgTUVSR0lORyB9IGZyb20gJy4uL2ludGVyZmFjZXMvaGlzdG9yeSc7XG5pbXBvcnQge1xuICAgIGlzUHJldmVudFRvdWNoTW92ZSxcbiAgICBwcmV2ZW50VG91Y2hNb3ZlLFxuICAgIGhhbmRsZVRvdWNoVGFyZ2V0LFxuICAgIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICBob3RrZXlzLFxuICAgIGdldEVsZW1lbnRzSW5Hcm91cEJ5RWxlbWVudCxcbiAgICBnZXRSZWN0YW5nbGVCeUFuZ2xlLFxuICAgIGdldFNlbGVjdGlvbkFuZ2xlLFxuICAgIGR1cGxpY2F0ZUVsZW1lbnRzLFxuICAgIGRyYXdSZWN0YW5nbGUsXG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbixcbiAgICBnZXRBbmdsZUJ5RWxlbWVudCxcbiAgICBzZXRBbmdsZUZvckdcbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0U25hcE1vdmluZ1JlZiB9IGZyb20gJy4uL3V0aWxzL3NuYXAvc25hcC1tb3ZpbmcnO1xuaW1wb3J0IHsgUGxhaXRHcm91cEVsZW1lbnQsIFBsYWl0UG9pbnRlclR5cGUsIFJlY3RhbmdsZUNsaWVudCwgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUiwgU0VMRUNUSU9OX0ZJTExfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFDVElWRV9NT1ZJTkdfQ0xBU1NfTkFNRSwgUFJFU1NfQU5EX01PVkVfQlVGRkVSIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyB9IGZyb20gJy4uL3RyYW5zZm9ybXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb3ZpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHBvaW50ZXJEb3duLCBwb2ludGVyTW92ZSwgZ2xvYmFsUG9pbnRlclVwLCBnbG9iYWxQb2ludGVyTW92ZSwgZ2xvYmFsS2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuXG4gICAgbGV0IG9mZnNldFggPSAwO1xuICAgIGxldCBvZmZzZXRZID0gMDtcbiAgICBsZXQgaXNQcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xuICAgIGxldCBzdGFydFBvaW50OiBQb2ludCB8IG51bGw7XG4gICAgbGV0IGFjdGl2ZUVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzZWxlY3RlZFRhcmdldEVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBoaXRUYXJnZXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGlzSGl0U2VsZWN0ZWRUYXJnZXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IHBlbmRpbmdOb2Rlc0c6IFNWR0dFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICBib2FyZC5nbG9iYWxLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdvcHRpb24nLCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgPSBkcmF3UGVuZGluZ05vZGVzRyhib2FyZCwgYWN0aXZlRWxlbWVudHMsIG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHICYmIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChwZW5kaW5nTm9kZXNHKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleVVwID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICghUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSkge1xuICAgICAgICAgICAgaWYgKHBlbmRpbmdOb2Rlc0cgJiYgc3RhcnRQb2ludCAmJiBhY3RpdmVFbGVtZW50cy5sZW5ndGggJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZCgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICAgICAgICAgICAgICBjYWNoZU1vdmluZ0VsZW1lbnRzKGJvYXJkLCBjdXJyZW50RWxlbWVudHMgYXMgUGxhaXRFbGVtZW50W10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICBrZXlVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLnBvaW50ZXJEb3duID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgUGxhaXRCb2FyZC5pc1JlYWRvbmx5KGJvYXJkKSB8fFxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNQb2ludGVyKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbikgfHxcbiAgICAgICAgICAgIGlzUHJldmVudFRvdWNoTW92ZShib2FyZCkgfHxcbiAgICAgICAgICAgICFpc01haW5Qb2ludGVyKGV2ZW50KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gZ2V0SGl0RWxlbWVudEJ5UG9pbnQoYm9hcmQsIHBvaW50LCBlbCA9PiBib2FyZC5pc01vdmFibGUoZWwpKTtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpc0hpdFNlbGVjdGVkVGFyZ2V0ID0gaGl0VGFyZ2V0RWxlbWVudCAmJiBzZWxlY3RlZFRhcmdldEVsZW1lbnRzLmluY2x1ZGVzKGhpdFRhcmdldEVsZW1lbnQpO1xuICAgICAgICBpZiAoaGl0VGFyZ2V0RWxlbWVudCAmJiBpc0hpdFNlbGVjdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IHNlbGVjdGVkVGFyZ2V0RWxlbWVudHM7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCB0cnVlKTtcbiAgICAgICAgICAgIHByZXZlbnRUb3VjaE1vdmUoYm9hcmQsIGV2ZW50LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoaXRUYXJnZXRFbGVtZW50KSB7XG4gICAgICAgICAgICBzdGFydFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICBjb25zdCByZWxhdGVkRWxlbWVudHMgPSBib2FyZC5nZXRSZWxhdGVkRnJhZ21lbnQoW10sIFtoaXRUYXJnZXRFbGVtZW50XSk7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50cyA9IFsuLi5nZXRFbGVtZW50c0luR3JvdXBCeUVsZW1lbnQoYm9hcmQsIGhpdFRhcmdldEVsZW1lbnQpLCAuLi5yZWxhdGVkRWxlbWVudHNdO1xuICAgICAgICAgICAgYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgdHJ1ZSk7XG4gICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDlj6rmnInliKTlrprnlKjmiLfmnKrlh7vkuK3lhYPntKDkuYvlkI7miY3lj6/ku6Xpqozor4HnlKjmiLfmmK/lkKblh7vkuK3kuoblt7LpgInlhYPntKDmiYDlnKjnmoTnqbrnmb3ljLrln59cbiAgICAgICAgICAgIC8vIE9ubHkgYWZ0ZXIgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSB1c2VyIGhhcyBub3QgaGl0IHRoZSBlbGVtZW50IGNhbiBpdCBiZSB2ZXJpZmllZCB3aGV0aGVyIHRoZSB1c2VyIGhpdCB0aGUgYmxhbmsgYXJlYSB3aGVyZSB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpcyBsb2NhdGVkLlxuICAgICAgICAgICAgY29uc3QgdGFyZ2V0UmVjdGFuZ2xlID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwICYmIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSGl0SW5UYXJnZXRSZWN0YW5nbGUgPSB0YXJnZXRSZWN0YW5nbGUgJiYgUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGlmIChpc0hpdEluVGFyZ2V0UmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRQb2ludCA9IHBvaW50O1xuICAgICAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnRzID0gc2VsZWN0ZWRUYXJnZXRFbGVtZW50cztcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IHRhcmdldFJlY3RhbmdsZTtcbiAgICAgICAgICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlckRvd24oZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5wb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50ICYmIGFjdGl2ZUVsZW1lbnRzLmxlbmd0aCAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoIWlzUHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBpc1ByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0c/LnJlbW92ZSgpO1xuICAgICAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0b1ZpZXdCb3hQb2ludChib2FyZCwgdG9Ib3N0UG9pbnQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpKTtcbiAgICAgICAgICAgIG9mZnNldFggPSBlbmRQb2ludFswXSAtIHN0YXJ0UG9pbnRbMF07XG4gICAgICAgICAgICBvZmZzZXRZID0gZW5kUG9pbnRbMV0gLSBzdGFydFBvaW50WzFdO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KC4uLmVuZFBvaW50LCAuLi5zdGFydFBvaW50KTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IFBSRVNTX0FORF9NT1ZFX0JVRkZFUiB8fCBnZXRNb3ZpbmdFbGVtZW50cyhib2FyZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGlmIChoaXRUYXJnZXRFbGVtZW50ICYmICFpc0hpdFNlbGVjdGVkVGFyZ2V0ICYmIHNlbGVjdGVkVGFyZ2V0RWxlbWVudHMgJiYgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgW10pO1xuICAgICAgICAgICAgICAgICAgICBoaXRUYXJnZXRFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRhcmdldEVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaXNIaXRTZWxlY3RlZFRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1JlY3RhbmdsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFjdGl2ZUVsZW1lbnRzUmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogYWN0aXZlRWxlbWVudHNSZWN0YW5nbGUueCArIG9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZS55ICsgb2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUFuZ2xlKG5ld1JlY3RhbmdsZSwgZ2V0U2VsZWN0aW9uQW5nbGUoYWN0aXZlRWxlbWVudHMpKSB8fCBuZXdSZWN0YW5nbGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBNb3ZpbmdSZWYoYm9hcmQsIGFjdGl2ZVJlY3RhbmdsZSwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRYICs9IHJlZi5kZWx0YVg7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFkgKz0gcmVmLmRlbHRhWTtcbiAgICAgICAgICAgICAgICAgICAgc25hcEcgPSByZWYuc25hcEc7XG4gICAgICAgICAgICAgICAgICAgIHNuYXBHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHNuYXBHKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlVG91Y2hUYXJnZXQoYm9hcmQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHID0gZHJhd1BlbmRpbmdOb2Rlc0coYm9hcmQsIGFjdGl2ZUVsZW1lbnRzLCBvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKHBlbmRpbmdOb2Rlc0cpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEVsZW1lbnRzID0gdXBkYXRlUG9pbnRzKGJvYXJkLCBhY3RpdmVFbGVtZW50cywgb2Zmc2V0WCwgb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKCdlbGVtZW50LW1vdmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVNb3ZpbmdFbGVtZW50cyhib2FyZCwgY3VycmVudEVsZW1lbnRzIGFzIFBsYWl0RWxlbWVudFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGNhbnZhcyBzY3JvbGxpbmcgYmVoYXZpb3IgZnJvbSBiZWluZyB0cmlnZ2VyZWQgZHVyaW5nIG1vdmVcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyTW92ZSA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjb25zdCBpblBsYWl0Qm9hcmRFbGVtZW50ID0gaXNJblBsYWl0Qm9hcmQoYm9hcmQsIGV2ZW50LngsIGV2ZW50LnkpO1xuICAgICAgICAgICAgaWYgKCFpblBsYWl0Qm9hcmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsTW92ZShib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsUG9pbnRlck1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5nbG9iYWxQb2ludGVyVXAgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkgJiYgYWN0aXZlRWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZEVsZW1lbnRzID0gZ2V0VmFsaWRFbGVtZW50cyhib2FyZCwgYWN0aXZlRWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgdmFsaWRFbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgZHVwbGljYXRlRWxlbWVudHMoYm9hcmQsIHZhbGlkRWxlbWVudHMsIFtyZWN0YW5nbGUueCArIG9mZnNldFgsIHJlY3RhbmdsZS55ICsgb2Zmc2V0WV0pO1xuICAgICAgICB9XG4gICAgICAgIGlzUHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgaGl0VGFyZ2V0RWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgc2VsZWN0ZWRUYXJnZXRFbGVtZW50cyA9IG51bGw7XG4gICAgICAgIGlzSGl0U2VsZWN0ZWRUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzdGFydFBvaW50KSB7XG4gICAgICAgICAgICBjYW5jZWxNb3ZlKGJvYXJkKTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ZW50VG91Y2hNb3ZlKGJvYXJkLCBldmVudCwgZmFsc2UpO1xuICAgICAgICBnbG9iYWxQb2ludGVyVXAoZXZlbnQpO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxNb3ZlKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgcGVuZGluZ05vZGVzRz8ucmVtb3ZlKCk7XG4gICAgICAgIHN0YXJ0UG9pbnQgPSBudWxsO1xuICAgICAgICBhY3RpdmVFbGVtZW50c1JlY3RhbmdsZSA9IG51bGw7XG4gICAgICAgIG9mZnNldFggPSAwO1xuICAgICAgICBvZmZzZXRZID0gMDtcbiAgICAgICAgYWN0aXZlRWxlbWVudHMgPSBbXTtcbiAgICAgICAgaWYgKGlzTW92aW5nRWxlbWVudHMoYm9hcmQpKSB7XG4gICAgICAgICAgICByZW1vdmVNb3ZpbmdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIH1cbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZSgnZWxlbWVudC1tb3ZpbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2l0aEFycm93TW92aW5nKGJvYXJkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhBcnJvd01vdmluZyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsga2V5RG93biwga2V5VXAgfSA9IGJvYXJkO1xuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiYgc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPiAwICYmIChob3RrZXlzLmlzQXJyb3coZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRBcnJvdyhldmVudCkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgaXNTaGlmdCA9IGV2ZW50LnNoaWZ0S2V5ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gaXNTaGlmdCA/IDEwIDogMTtcbiAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVVcChldmVudCkgfHwgaG90a2V5cy5pc0V4dGVuZFVwKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSAtYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBob3RrZXlzLmlzTW92ZURvd24oZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmREb3duKGV2ZW50KToge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXRbMV0gPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIGhvdGtleXMuaXNNb3ZlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNFeHRlbmRCYWNrd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gLWJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgaG90a2V5cy5pc01vdmVGb3J3YXJkKGV2ZW50KSB8fCBob3RrZXlzLmlzRXh0ZW5kRm9yd2FyZChldmVudCk6IHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WzBdID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGdldFNlbGVjdGVkVGFyZ2V0RWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgdGhyb3R0bGVSQUYoYm9hcmQsICd3aXRoLWFycm93LW1vdmluZycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb2ludHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBvZmZzZXRbMF0sIG9mZnNldFsxXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgTUVSR0lORy5zZXQoYm9hcmQsIGZhbHNlKTtcbiAgICAgICAga2V5VXAoZXZlbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRUYXJnZXRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCBtb3ZhYmxlRWxlbWVudHMgPSBib2FyZC5jaGlsZHJlbi5maWx0ZXIoaXRlbSA9PiBib2FyZC5pc01vdmFibGUoaXRlbSkpO1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZhYmxlRWxlbWVudHMuaW5jbHVkZXMoZWxlbWVudCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVsYXRlZEVsZW1lbnRzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdKTtcbiAgICB0YXJnZXRFbGVtZW50cy5wdXNoKC4uLnJlbGF0ZWRFbGVtZW50cyk7XG4gICAgcmV0dXJuIHRhcmdldEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsaWRFbGVtZW50cyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IFsuLi5hY3RpdmVFbGVtZW50c10uZmlsdGVyKFxuICAgICAgICBlbGVtZW50ID0+ICFQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpICYmIGJvYXJkLmNoaWxkcmVuLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGVsZW1lbnQuaWQpID4gLTFcbiAgICApO1xuICAgIHJldHVybiB2YWxpZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUG9pbnRzKGJvYXJkOiBQbGFpdEJvYXJkLCBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9mZnNldFg6IG51bWJlciwgb2Zmc2V0WTogbnVtYmVyKSB7XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICBjb25zdCBjdXJyZW50RWxlbWVudHMgPSB2YWxpZEVsZW1lbnRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgfHwgW107XG4gICAgICAgIGNvbnN0IG5ld1BvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbcFswXSArIG9mZnNldFgsIHBbMV0gKyBvZmZzZXRZXSkgYXMgUG9pbnRbXTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBib2FyZC5jaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmlkID09PSBlbGVtZW50LmlkKTtcbiAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9pbnRzOiBuZXdQb2ludHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaW5kZXhdXG4gICAgICAgICk7XG4gICAgICAgIE1FUkdJTkcuc2V0KGJvYXJkLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIFBsYWl0Tm9kZS5nZXQoYm9hcmQsIFtpbmRleF0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50RWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkcmF3UGVuZGluZ05vZGVzRyhib2FyZDogUGxhaXRCb2FyZCwgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCBvZmZzZXRYOiBudW1iZXIsIG9mZnNldFk6IG51bWJlcikge1xuICAgIGxldCBwZW5kaW5nTm9kZXNHOiBTVkdFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgdmFsaWRFbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoYm9hcmQsIGFjdGl2ZUVsZW1lbnRzKTtcbiAgICB2YWxpZEVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb24oXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB0cnVlXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgZWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgbGV0IHJlY3RhbmdsZSA9IGJvYXJkLmdldFJlY3RhbmdsZShpdGVtKTtcbiAgICAgICAgaWYgKHJlY3RhbmdsZSkge1xuICAgICAgICAgICAgcmVjdGFuZ2xlID0ge1xuICAgICAgICAgICAgICAgIHg6IHJlY3RhbmdsZS54ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgICAgICB5OiByZWN0YW5nbGUueSArIG9mZnNldFksXG4gICAgICAgICAgICAgICAgd2lkdGg6IHJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBtb3ZpbmdHID0gZHJhd1JlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlISwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBmaWxsOiBTRUxFQ1RJT05fRklMTF9DT0xPUixcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFwZW5kaW5nTm9kZXNHKSB7XG4gICAgICAgICAgICAgICAgcGVuZGluZ05vZGVzRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgICAgICAgICBwZW5kaW5nTm9kZXNHLmNsYXNzTGlzdC5hZGQoQUNUSVZFX01PVklOR19DTEFTU19OQU1FKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0QW5nbGVCeUVsZW1lbnQoaXRlbSk7XG4gICAgICAgICAgICBhbmdsZSAmJiBzZXRBbmdsZUZvckcobW92aW5nRywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlY3RhbmdsZSksIGFuZ2xlKTtcbiAgICAgICAgICAgIHBlbmRpbmdOb2Rlc0cuYXBwZW5kKG1vdmluZ0cpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBlbmRpbmdOb2Rlc0c7XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { createClipboardContext, WritableClipboardType, addClipboardContext } from '../utils';
2
2
  export function withRelatedFragment(board) {
3
3
  const { buildFragment } = board;
4
- board.buildFragment = (clipboardContext, rectangle, type, originData) => {
4
+ board.buildFragment = (clipboardContext, rectangle, operationType, originData) => {
5
5
  let relatedFragment = board.getRelatedFragment(originData || []);
6
6
  if (relatedFragment) {
7
7
  if (originData?.length) {
@@ -20,8 +20,8 @@ export function withRelatedFragment(board) {
20
20
  }
21
21
  }
22
22
  }
23
- return buildFragment(clipboardContext, rectangle, type, originData);
23
+ return buildFragment(clipboardContext, rectangle, operationType, originData);
24
24
  };
25
25
  return board;
26
26
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWxhdGVkLWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy93aXRoLXJlbGF0ZWQtZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUE0QixzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV4SCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBaUI7SUFDakQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVoQyxLQUFLLENBQUMsYUFBYSxHQUFHLENBQ2xCLGdCQUFpRCxFQUNqRCxTQUFpQyxFQUNqQyxJQUFvQixFQUNwQixVQUEyQixFQUM3QixFQUFFO1FBQ0EsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDcEIsZ0JBQWdCLEdBQUcsc0JBQXNCLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkcsQ0FBQztxQkFBTSxDQUFDO29CQUNKLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixFQUFFO3dCQUNyRCxJQUFJLEVBQUUsRUFBRTt3QkFDUixJQUFJLEVBQUUscUJBQXFCLENBQUMsUUFBUTt3QkFDcEMsUUFBUSxFQUFFLGVBQWU7cUJBQzVCLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hFLENBQUMsQ0FBQztJQUVGLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0LCBjcmVhdGVDbGlwYm9hcmRDb250ZXh0LCBXcml0YWJsZUNsaXBib2FyZFR5cGUsIGFkZENsaXBib2FyZENvbnRleHQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVsYXRlZEZyYWdtZW50KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBidWlsZEZyYWdtZW50IH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmJ1aWxkRnJhZ21lbnQgPSAoXG4gICAgICAgIGNsaXBib2FyZENvbnRleHQ6IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCB8IG51bGwsXG4gICAgICAgIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCxcbiAgICAgICAgdHlwZTogJ2NvcHknIHwgJ2N1dCcsXG4gICAgICAgIG9yaWdpbkRhdGE/OiBQbGFpdEVsZW1lbnRbXVxuICAgICkgPT4ge1xuICAgICAgICBsZXQgcmVsYXRlZEZyYWdtZW50ID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KG9yaWdpbkRhdGEgfHwgW10pO1xuICAgICAgICBpZiAocmVsYXRlZEZyYWdtZW50KSB7XG4gICAgICAgICAgICBpZiAob3JpZ2luRGF0YT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmVsYXRlZEZyYWdtZW50ID0gcmVsYXRlZEZyYWdtZW50LmZpbHRlcihpdGVtID0+ICFvcmlnaW5EYXRhLm1hcChlbGVtZW50ID0+IGVsZW1lbnQuaWQpLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZWxhdGVkRnJhZ21lbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBjcmVhdGVDbGlwYm9hcmRDb250ZXh0KFdyaXRhYmxlQ2xpcGJvYXJkVHlwZS5lbGVtZW50cywgcmVsYXRlZEZyYWdtZW50LCAnJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkQ29udGV4dCA9IGFkZENsaXBib2FyZENvbnRleHQoY2xpcGJvYXJkQ29udGV4dCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBXcml0YWJsZUNsaXBib2FyZFR5cGUuZWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50czogcmVsYXRlZEZyYWdtZW50XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYnVpbGRGcmFnbWVudChjbGlwYm9hcmRDb250ZXh0LCByZWN0YW5nbGUsIHR5cGUsIG9yaWdpbkRhdGEpO1xuICAgIH07XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1yZWxhdGVkLWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGx1Z2lucy93aXRoLXJlbGF0ZWQtZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUVILHNCQUFzQixFQUN0QixxQkFBcUIsRUFDckIsbUJBQW1CLEVBRXRCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxLQUFpQjtJQUNqRCxNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FDbEIsZ0JBQWlELEVBQ2pELFNBQWlDLEVBQ2pDLGFBQTZDLEVBQzdDLFVBQTJCLEVBQzdCLEVBQUU7UUFDQSxJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksZUFBZSxFQUFFLENBQUM7WUFDbEIsSUFBSSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3JCLGVBQWUsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRyxDQUFDO1lBQ0QsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNwQixnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUU7d0JBQ3JELElBQUksRUFBRSxFQUFFO3dCQUNSLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxRQUFRO3dCQUNwQyxRQUFRLEVBQUUsZUFBZTtxQkFDNUIsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakYsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICAgIFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBjcmVhdGVDbGlwYm9hcmRDb250ZXh0LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkVHlwZSxcbiAgICBhZGRDbGlwYm9hcmRDb250ZXh0LFxuICAgIFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZVxufSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVsYXRlZEZyYWdtZW50KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBidWlsZEZyYWdtZW50IH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmJ1aWxkRnJhZ21lbnQgPSAoXG4gICAgICAgIGNsaXBib2FyZENvbnRleHQ6IFdyaXRhYmxlQ2xpcGJvYXJkQ29udGV4dCB8IG51bGwsXG4gICAgICAgIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50IHwgbnVsbCxcbiAgICAgICAgb3BlcmF0aW9uVHlwZTogV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLFxuICAgICAgICBvcmlnaW5EYXRhPzogUGxhaXRFbGVtZW50W11cbiAgICApID0+IHtcbiAgICAgICAgbGV0IHJlbGF0ZWRGcmFnbWVudCA9IGJvYXJkLmdldFJlbGF0ZWRGcmFnbWVudChvcmlnaW5EYXRhIHx8IFtdKTtcbiAgICAgICAgaWYgKHJlbGF0ZWRGcmFnbWVudCkge1xuICAgICAgICAgICAgaWYgKG9yaWdpbkRhdGE/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlbGF0ZWRGcmFnbWVudCA9IHJlbGF0ZWRGcmFnbWVudC5maWx0ZXIoaXRlbSA9PiAhb3JpZ2luRGF0YS5tYXAoZWxlbWVudCA9PiBlbGVtZW50LmlkKS5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVsYXRlZEZyYWdtZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghY2xpcGJvYXJkQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmRDb250ZXh0ID0gY3JlYXRlQ2xpcGJvYXJkQ29udGV4dChXcml0YWJsZUNsaXBib2FyZFR5cGUuZWxlbWVudHMsIHJlbGF0ZWRGcmFnbWVudCwgJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBhZGRDbGlwYm9hcmRDb250ZXh0KGNsaXBib2FyZENvbnRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudHM6IHJlbGF0ZWRGcmFnbWVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1aWxkRnJhZ21lbnQoY2xpcGJvYXJkQ29udGV4dCwgcmVjdGFuZ2xlLCBvcGVyYXRpb25UeXBlLCBvcmlnaW5EYXRhKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufVxuIl19
@@ -3,4 +3,11 @@ export var WritableClipboardType;
3
3
  WritableClipboardType["medias"] = "medias";
4
4
  WritableClipboardType["elements"] = "elements";
5
5
  })(WritableClipboardType || (WritableClipboardType = {}));
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9jbGlwYm9hcmQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFOLElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUM3QiwwQ0FBbUIsQ0FBQTtJQUNuQiw4Q0FBdUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcscUJBQXFCLEtBQXJCLHFCQUFxQixRQUdoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZW51bSBXcml0YWJsZUNsaXBib2FyZFR5cGUge1xuICAgICdtZWRpYXMnID0gJ21lZGlhcycsXG4gICAgJ2VsZW1lbnRzJyA9ICdlbGVtZW50cydcbn1cblxuZXhwb3J0IHR5cGUgV3JpdGFibGVDbGlwYm9hcmREYXRhID0gUGxhaXRFbGVtZW50W10gfCBhbnlbXTtcblxuZXhwb3J0IGludGVyZmFjZSBXcml0YWJsZUNsaXBib2FyZENvbnRleHQge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICB0eXBlOiBXcml0YWJsZUNsaXBib2FyZFR5cGU7XG4gICAgZWxlbWVudHM6IFdyaXRhYmxlQ2xpcGJvYXJkRGF0YTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGlwYm9hcmREYXRhIHtcbiAgICBmaWxlcz86IEZpbGVbXTtcbiAgICBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdO1xuICAgIG1lZGlhcz86IGFueVtdO1xuICAgIHRleHQ/OiBzdHJpbmc7XG59XG4iXX0=
6
+ export var WritableClipboardOperationType;
7
+ (function (WritableClipboardOperationType) {
8
+ WritableClipboardOperationType["copy"] = "copy";
9
+ WritableClipboardOperationType["cut"] = "cut";
10
+ WritableClipboardOperationType["duplicate"] = "duplicate";
11
+ WritableClipboardOperationType["paste"] = "paste";
12
+ })(WritableClipboardOperationType || (WritableClipboardOperationType = {}));
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9jbGlwYm9hcmQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFOLElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUM3QiwwQ0FBbUIsQ0FBQTtJQUNuQiw4Q0FBdUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcscUJBQXFCLEtBQXJCLHFCQUFxQixRQUdoQztBQUVELE1BQU0sQ0FBTixJQUFZLDhCQUtYO0FBTEQsV0FBWSw4QkFBOEI7SUFDdEMsK0NBQWUsQ0FBQTtJQUNmLDZDQUFhLENBQUE7SUFDYix5REFBeUIsQ0FBQTtJQUN6QixpREFBaUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsOEJBQThCLEtBQTlCLDhCQUE4QixRQUt6QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZW51bSBXcml0YWJsZUNsaXBib2FyZFR5cGUge1xuICAgICdtZWRpYXMnID0gJ21lZGlhcycsXG4gICAgJ2VsZW1lbnRzJyA9ICdlbGVtZW50cydcbn1cblxuZXhwb3J0IGVudW0gV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlIHtcbiAgICAnY29weScgPSAnY29weScsXG4gICAgJ2N1dCcgPSAnY3V0JyxcbiAgICAnZHVwbGljYXRlJyA9ICdkdXBsaWNhdGUnLFxuICAgICdwYXN0ZScgPSAncGFzdGUnXG59XG5cbmV4cG9ydCB0eXBlIFdyaXRhYmxlQ2xpcGJvYXJkRGF0YSA9IFBsYWl0RWxlbWVudFtdIHwgYW55W107XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0IHtcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlO1xuICAgIGVsZW1lbnRzOiBXcml0YWJsZUNsaXBib2FyZERhdGE7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcGJvYXJkRGF0YSB7XG4gICAgZmlsZXM/OiBGaWxlW107XG4gICAgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXTtcbiAgICBtZWRpYXM/OiBhbnlbXTtcbiAgICB0ZXh0Pzogc3RyaW5nO1xuICAgIG9wZXJhdGlvblR5cGU/OiBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGU7XG59XG4iXX0=
@@ -1,3 +1,4 @@
1
+ import { WritableClipboardOperationType } from './clipboard';
1
2
  import { setClipboardData } from './clipboard/clipboard';
2
3
  import { getRectangleByElements } from './element';
3
4
  import { getSelectedElements } from './selected-element';
@@ -5,22 +6,22 @@ export const deleteFragment = (board) => {
5
6
  const elements = board.getDeletedFragment([]);
6
7
  board.deleteFragment(elements);
7
8
  };
8
- export const setFragment = (board, type, clipboardData) => {
9
+ export const setFragment = (board, operationType, clipboardData) => {
9
10
  const selectedElements = getSelectedElements(board);
10
11
  const rectangle = getRectangleByElements(board, selectedElements, false);
11
- const clipboardContext = board.buildFragment(null, rectangle, type);
12
+ const clipboardContext = board.buildFragment(null, rectangle, operationType);
12
13
  clipboardContext && setClipboardData(clipboardData, clipboardContext);
13
14
  };
14
15
  export const duplicateElements = (board, elements, point) => {
15
16
  const targetElements = elements?.length ? elements : getSelectedElements(board);
16
17
  const targetRectangle = getRectangleByElements(board, targetElements, false);
17
- const clipboardContext = board.buildFragment(null, targetRectangle, 'copy', targetElements);
18
+ const clipboardContext = board.buildFragment(null, targetRectangle, WritableClipboardOperationType.duplicate, targetElements);
18
19
  const stringifiedContext = clipboardContext && JSON.stringify(clipboardContext);
19
20
  const clonedContext = stringifiedContext && JSON.parse(stringifiedContext);
20
21
  clonedContext &&
21
22
  board.insertFragment({
22
23
  ...clonedContext,
23
24
  text: undefined
24
- }, point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2]);
25
+ }, point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2], WritableClipboardOperationType.duplicate);
25
26
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9mcmFnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBb0IsRUFBRSxhQUFrQyxFQUFFLEVBQUU7SUFDdkcsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDekUsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEUsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFFBQXlCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDN0YsTUFBTSxjQUFjLEdBQUcsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRixNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM1RixNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRixNQUFNLGFBQWEsR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDM0UsYUFBYTtRQUNULEtBQUssQ0FBQyxjQUFjLENBQ2hCO1lBQ0ksR0FBRyxhQUFhO1lBQ2hCLElBQUksRUFBRSxTQUFTO1NBQ2xCLEVBQ0QsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQzNHLENBQUM7QUFDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IHNldENsaXBib2FyZERhdGEgfSBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZyYWdtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHMgPSBib2FyZC5nZXREZWxldGVkRnJhZ21lbnQoW10pO1xuICAgIGJvYXJkLmRlbGV0ZUZyYWdtZW50KGVsZW1lbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRGcmFnbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgdHlwZTogJ2NvcHknIHwgJ2N1dCcsIGNsaXBib2FyZERhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGNsaXBib2FyZENvbnRleHQgPSBib2FyZC5idWlsZEZyYWdtZW50KG51bGwsIHJlY3RhbmdsZSwgdHlwZSk7XG4gICAgY2xpcGJvYXJkQ29udGV4dCAmJiBzZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZERhdGEsIGNsaXBib2FyZENvbnRleHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGR1cGxpY2F0ZUVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdLCBwb2ludD86IFBvaW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudHMgPSBlbGVtZW50cz8ubGVuZ3RoID8gZWxlbWVudHMgOiBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCB0YXJnZXRFbGVtZW50cywgZmFsc2UpO1xuICAgIGNvbnN0IGNsaXBib2FyZENvbnRleHQgPSBib2FyZC5idWlsZEZyYWdtZW50KG51bGwsIHRhcmdldFJlY3RhbmdsZSwgJ2NvcHknLCB0YXJnZXRFbGVtZW50cyk7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRDb250ZXh0ID0gY2xpcGJvYXJkQ29udGV4dCAmJiBKU09OLnN0cmluZ2lmeShjbGlwYm9hcmRDb250ZXh0KTtcbiAgICBjb25zdCBjbG9uZWRDb250ZXh0ID0gc3RyaW5naWZpZWRDb250ZXh0ICYmIEpTT04ucGFyc2Uoc3RyaW5naWZpZWRDb250ZXh0KTtcbiAgICBjbG9uZWRDb250ZXh0ICYmXG4gICAgICAgIGJvYXJkLmluc2VydEZyYWdtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmNsb25lZENvbnRleHQsXG4gICAgICAgICAgICAgICAgdGV4dDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9pbnQgfHwgW3RhcmdldFJlY3RhbmdsZS54ICsgdGFyZ2V0UmVjdGFuZ2xlLndpZHRoIC8gMiwgdGFyZ2V0UmVjdGFuZ2xlLnkgKyB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0IC8gMl1cbiAgICAgICAgKTtcbn07XG4iXX0=
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9mcmFnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXpELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNoRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFpQixFQUFFLGFBQTZDLEVBQUUsYUFBa0MsRUFBRSxFQUFFO0lBQ2hJLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzdFLGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBaUIsRUFBRSxRQUF5QixFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQzdGLE1BQU0sY0FBYyxHQUFHLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEYsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RSxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSw4QkFBOEIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDOUgsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEYsTUFBTSxhQUFhLEdBQUcsa0JBQWtCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNFLGFBQWE7UUFDVCxLQUFLLENBQUMsY0FBYyxDQUNoQjtZQUNJLEdBQUcsYUFBYTtZQUNoQixJQUFJLEVBQUUsU0FBUztTQUNsQixFQUNELEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUN4Ryw4QkFBOEIsQ0FBQyxTQUFTLENBQzNDLENBQUM7QUFDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUgfSBmcm9tICcuL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBzZXRDbGlwYm9hcmREYXRhIH0gZnJvbSAnLi9jbGlwYm9hcmQvY2xpcGJvYXJkJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJy4vc2VsZWN0ZWQtZWxlbWVudCc7XG5cbmV4cG9ydCBjb25zdCBkZWxldGVGcmFnbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRzID0gYm9hcmQuZ2V0RGVsZXRlZEZyYWdtZW50KFtdKTtcbiAgICBib2FyZC5kZWxldGVGcmFnbWVudChlbGVtZW50cyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0RnJhZ21lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG9wZXJhdGlvblR5cGU6IFdyaXRhYmxlQ2xpcGJvYXJkT3BlcmF0aW9uVHlwZSwgY2xpcGJvYXJkRGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzLCBmYWxzZSk7XG4gICAgY29uc3QgY2xpcGJvYXJkQ29udGV4dCA9IGJvYXJkLmJ1aWxkRnJhZ21lbnQobnVsbCwgcmVjdGFuZ2xlLCBvcGVyYXRpb25UeXBlKTtcbiAgICBjbGlwYm9hcmRDb250ZXh0ICYmIHNldENsaXBib2FyZERhdGEoY2xpcGJvYXJkRGF0YSwgY2xpcGJvYXJkQ29udGV4dCk7XG59O1xuXG5leHBvcnQgY29uc3QgZHVwbGljYXRlRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10sIHBvaW50PzogUG9pbnQpID0+IHtcbiAgICBjb25zdCB0YXJnZXRFbGVtZW50cyA9IGVsZW1lbnRzPy5sZW5ndGggPyBlbGVtZW50cyA6IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IHRhcmdldFJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIHRhcmdldEVsZW1lbnRzLCBmYWxzZSk7XG4gICAgY29uc3QgY2xpcGJvYXJkQ29udGV4dCA9IGJvYXJkLmJ1aWxkRnJhZ21lbnQobnVsbCwgdGFyZ2V0UmVjdGFuZ2xlLCBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUuZHVwbGljYXRlLCB0YXJnZXRFbGVtZW50cyk7XG4gICAgY29uc3Qgc3RyaW5naWZpZWRDb250ZXh0ID0gY2xpcGJvYXJkQ29udGV4dCAmJiBKU09OLnN0cmluZ2lmeShjbGlwYm9hcmRDb250ZXh0KTtcbiAgICBjb25zdCBjbG9uZWRDb250ZXh0ID0gc3RyaW5naWZpZWRDb250ZXh0ICYmIEpTT04ucGFyc2Uoc3RyaW5naWZpZWRDb250ZXh0KTtcbiAgICBjbG9uZWRDb250ZXh0ICYmXG4gICAgICAgIGJvYXJkLmluc2VydEZyYWdtZW50KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmNsb25lZENvbnRleHQsXG4gICAgICAgICAgICAgICAgdGV4dDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcG9pbnQgfHwgW3RhcmdldFJlY3RhbmdsZS54ICsgdGFyZ2V0UmVjdGFuZ2xlLndpZHRoIC8gMiwgdGFyZ2V0UmVjdGFuZ2xlLnkgKyB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0IC8gMl0sXG4gICAgICAgICAgICBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUuZHVwbGljYXRlXG4gICAgICAgICk7XG59O1xuIl19
@@ -3,6 +3,7 @@ import { MAX_ZOOM, MIN_ZOOM } from '../constants/zoom';
3
3
  import { PlaitBoard, Point } from '../interfaces';
4
4
  import { BoardTransforms } from '../transforms/board';
5
5
  import { getRectangleByElements } from './element';
6
+ import { approximately } from './math';
6
7
  import { toHostPointFromViewBoxPoint, toViewBoxPoint } from './to-point';
7
8
  import { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';
8
9
  const IS_FROM_SCROLLING = new WeakMap();
@@ -100,7 +101,8 @@ export function updateViewportContainerScroll(board, left, top, isFromViewportCh
100
101
  // scrollTop assign 11.8 will get 11.5 in chrome
101
102
  // scrollTop assign 11.8 will get 11 in firefox, safari
102
103
  // scrollTop assign 11.4 will get 11 in chrome, firefox, safari
103
- if (viewportContainer.scrollLeft !== Math.floor(left) || viewportContainer.scrollTop !== Math.floor(top)) {
104
+ // use approximately method to determine the new value is valid updating to avoid debouncing
105
+ if (!approximately(viewportContainer.scrollLeft, left, 1) || !approximately(viewportContainer.scrollTop, top, 1)) {
104
106
  viewportContainer.scrollLeft = left;
105
107
  viewportContainer.scrollTop = top;
106
108
  const offsetWidth = viewportContainer.offsetWidth;
@@ -181,4 +183,4 @@ export const setIsFromViewportChange = (board, state) => {
181
183
  IS_FROM_VIEWPORT_CHANGE.set(board, state);
182
184
  };
183
185
  export function scrollToRectangle(board, client) { }
184
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRTdELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFbkUsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQWlCO0lBQ3RELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUVqRixPQUFPO1FBQ0gsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEdBQUcsY0FBYztRQUMxQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxjQUFjO0tBQy9DLENBQUM7QUFDTixDQUFDO0FB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QyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3RELE9BQU8sQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBYyxFQUFFLEVBQUU7SUFDekUsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsS0FBaUIsRUFBRSxNQUF1QixJQUFHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTQ1JPTExfQkFSX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1BWF9aT09NLCBNSU5fWk9PTSB9IGZyb20gJy4uL2NvbnN0YW50cy96b29tJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJvYXJkVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMvYm9hcmQnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyB9IGZyb20gJy4vZWxlbWVudCc7XG5pbXBvcnQgeyB0b0hvc3RQb2ludEZyb21WaWV3Qm94UG9pbnQsIHRvVmlld0JveFBvaW50IH0gZnJvbSAnLi90by1wb2ludCc7XG5pbXBvcnQgeyBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTiB9IGZyb20gJy4vd2Vhay1tYXBzJztcblxuY29uc3QgSVNfRlJPTV9TQ1JPTExJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5jb25zdCBJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGhpZGVTY3JvbGxiYXIgfSA9IGJvYXJkLm9wdGlvbnM7XG4gICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBoaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgY29uc3Qgdmlld3BvcnRSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdmlld3BvcnRSZWN0LndpZHRoICsgc2Nyb2xsQmFyV2lkdGgsXG4gICAgICAgIGhlaWdodDogdmlld3BvcnRSZWN0LmhlaWdodCArIHNjcm9sbEJhcldpZHRoXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRIb3N0QkJveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hpbGRyZW5SZWN0ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gem9vbTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gem9vbTtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuICAgIGxldCByaWdodDogbnVtYmVyO1xuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XG5cbiAgICBpZiAoY2hpbGRyZW5SZWN0LndpZHRoIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyV2lkdGggLyAyO1xuICAgICAgICBsZWZ0ID0gY2VudGVyWCAtIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICAgICAgcmlnaHQgPSBjZW50ZXJYICsgaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBjaGlsZHJlblJlY3QueDtcbiAgICAgICAgcmlnaHQgPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aDtcbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuUmVjdC5oZWlnaHQgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLyAyO1xuICAgICAgICB0b3AgPSBjZW50ZXJZIC0gaGFsZkNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgYm90dG9tID0gY2VudGVyWSArIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gY2hpbGRyZW5SZWN0Lnk7XG4gICAgICAgIGJvdHRvbSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHNjYWxpbmcgcmF0aW8sIG9yIHJldHVybiB0aGUgY29ycmVjdGVkIHNjYWxpbmcgcmF0aW8gaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFpvb21MZXZlbCh6b29tOiBudW1iZXIsIG1pblpvb20gPSBNSU5fWk9PTSwgbWF4Wm9vbSA9IE1BWF9aT09NKSB7XG4gICAgcmV0dXJuIHpvb20gPCBtaW5ab29tID8gbWluWm9vbSA6IHpvb20gPiBtYXhab29tID8gbWF4Wm9vbSA6IHpvb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjTmV3Vmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgYm9hcmRDb250YWluZXJSZWN0YW5nbGUgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbGVtZW50SG9zdEJCb3ggPSBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQsIHpvb20pO1xuICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gYm9hcmRDb250YWluZXJSZWN0YW5nbGUud2lkdGggLyAyO1xuICAgIGNvbnN0IHZlcnRpY2FsUGFkZGluZyA9IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmxlZnQgLSBob3Jpem9udGFsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC50b3AgLSB2ZXJ0aWNhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3gucmlnaHQgLSBlbGVtZW50SG9zdEJCb3gubGVmdCArIChob3Jpem9udGFsUGFkZGluZyAqIDIpIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmJvdHRvbSAtIGVsZW1lbnRIb3N0QkJveC50b3AgKyAodmVydGljYWxQYWRkaW5nICogMikgLyB6b29tXG4gICAgXTtcbiAgICByZXR1cm4gdmlld0JveDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3hDZW50ZXJQb2ludChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIHJldHVybiBbY2hpbGRyZW5SZWN0YW5nbGUueCArIGNoaWxkcmVuUmVjdGFuZ2xlLndpZHRoIC8gMiwgY2hpbGRyZW5SZWN0YW5nbGUueSArIGNoaWxkcmVuUmVjdGFuZ2xlLmhlaWdodCAvIDJdIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U1ZHVmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveDogbnVtYmVyW10pIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3Qm94WzJdICogem9vbX1weGA7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld0JveFszXSAqIHpvb219cHhgO1xuXG4gICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94Jywgdmlld0JveC5qb2luKCcgJykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBpZiAoIW9yaWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW3Njcm9sbExlZnQsIHNjcm9sbFRvcF0gPSB0b0hvc3RQb2ludEZyb21WaWV3Qm94UG9pbnQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICB1cGRhdGVWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0Q29udGFpbmVyU2Nyb2xsKGJvYXJkOiBQbGFpdEJvYXJkLCBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBpc0Zyb21WaWV3cG9ydENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lciA9IFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpO1xuICAgIGNvbnN0IHByZXZpb3VzU2Nyb2xsTGVmdCA9IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcHJldmlvdXNTY3JvbGxUb3AgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgLy8gc2Nyb2xsVG9wIGFzc2lnbiAxMS44IHdpbGwgZ2V0IDExLjUgaW4gY2hyb21lXG4gICAgLy8gc2Nyb2xsVG9wIGFzc2lnbiAxMS44IHdpbGwgZ2V0IDExIGluIGZpcmVmb3gsIHNhZmFyaVxuICAgIC8vIHNjcm9sbFRvcCBhc3NpZ24gMTEuNCB3aWxsIGdldCAxMSBpbiBjaHJvbWUsIGZpcmVmb3gsIHNhZmFyaVxuICAgIGlmICh2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ICE9PSBNYXRoLmZsb29yKGxlZnQpIHx8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCAhPT0gTWF0aC5mbG9vcih0b3ApKSB7XG4gICAgICAgIHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgPSBsZWZ0O1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgPSB0b3A7XG4gICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gdmlld3BvcnRDb250YWluZXIub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IG9mZnNldEhlaWdodCA9IHZpZXdwb3J0Q29udGFpbmVyLm9mZnNldEhlaWdodDtcbiAgICAgICAgaWYgKHByZXZpb3VzU2Nyb2xsTGVmdCA9PT0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAmJiBwcmV2aW91c1Njcm9sbFRvcCA9PT0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBUaGUgc2Nyb2xsIGV2ZW50IGNhbm5vdCBiZSB0cmlnZ2VyZWQsIHNvIHRoZSBvcmlnaW5hdGlvbiBpcyBtb2RpZmllZCBkaXJlY3RseSBiYXNlZCBvbiB0aGUgc2Nyb2xsIGRpc3RhbmNlLlxuICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRCeVNjcm9sbGluZyhib2FyZCwgcHJldmlvdXNTY3JvbGxMZWZ0LCBwcmV2aW91c1Njcm9sbFRvcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkTGVmdE9yVG9wID1cbiAgICAgICAgICAgICAgICBsZWZ0ID4gMCAmJlxuICAgICAgICAgICAgICAgIHRvcCA+IDAgJiZcbiAgICAgICAgICAgICAgICBsZWZ0IDwgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsV2lkdGggLSBvZmZzZXRXaWR0aCAmJlxuICAgICAgICAgICAgICAgIHRvcCA8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbEhlaWdodCAtIG9mZnNldEhlaWdodDtcbiAgICAgICAgICAgIGlmIChpc0Zyb21WaWV3cG9ydENoYW5nZSAmJiBpc1ZhbGlkTGVmdE9yVG9wKSB7XG4gICAgICAgICAgICAgICAgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UoYm9hcmQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmlld3BvcnRCeVNjcm9sbGluZyhib2FyZDogUGxhaXRCb2FyZCwgc2Nyb2xsTGVmdDogbnVtYmVyLCBzY3JvbGxUb3A6IG51bWJlcikge1xuICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gdG9WaWV3Qm94UG9pbnQoYm9hcmQsIFtzY3JvbGxMZWZ0LCBzY3JvbGxUb3BdKTtcbiAgICBpZiAoUG9pbnQuaXNFcXVhbHMob3JpZ2luYXRpb24sIGdldFZpZXdwb3J0T3JpZ2luYXRpb24oYm9hcmQpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIEJvYXJkVHJhbnNmb3Jtcy51cGRhdGVWaWV3cG9ydChib2FyZCwgb3JpZ2luYXRpb24pO1xuICAgIHNldElzRnJvbVNjcm9sbGluZyhib2FyZCwgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGdldFZpZXdwb3J0Q29udGFpbmVyUmVjdChib2FyZCk7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICB2aWV3cG9ydENvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCB2aWV3Qm94ID0gY2FsY05ld1ZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgIHNldFNWR1ZpZXdCb3goYm9hcmQsIHZpZXdCb3gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgaWYgKCFib2FyZC52aWV3cG9ydD8ub3JpZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3Qm94ID0gY2FsY05ld1ZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgICAgICBjb25zdCBjZW50ZXJYID0gdmlld0JveFswXSArIHZpZXdCb3hbMl0gLyAyO1xuICAgICAgICBjb25zdCBjZW50ZXJZID0gdmlld0JveFsxXSArIHZpZXdCb3hbM10gLyAyO1xuICAgICAgICBjb25zdCBvcmlnaW5hdGlvbiA9IFtjZW50ZXJYIC0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gMiAvIHpvb20sIGNlbnRlclkgLSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gMiAvIHpvb21dIGFzIFBvaW50O1xuICAgICAgICB1cGRhdGVWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkLCBvcmlnaW5hdGlvbik7XG4gICAgICAgIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZCk7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBvcmlnaW5hdGlvbjogUG9pbnQpID0+IHtcbiAgICBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5zZXQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhclZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5kZWxldGUoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLmdldChib2FyZCk7XG4gICAgaWYgKG9yaWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcmlnaW5hdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYm9hcmQudmlld3BvcnQub3JpZ2luYXRpb247XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzRnJvbVNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0ZST01fU0NST0xMSU5HLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNGcm9tU2Nyb2xsaW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGF0ZTogYm9vbGVhbikgPT4ge1xuICAgIElTX0ZST01fU0NST0xMSU5HLnNldChib2FyZCwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRnJvbVZpZXdwb3J0Q2hhbmdlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0UuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJc0Zyb21WaWV3cG9ydENoYW5nZSA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRS5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUb1JlY3RhbmdsZShib2FyZDogUGxhaXRCb2FyZCwgY2xpZW50OiBSZWN0YW5nbGVDbGllbnQpIHt9XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDekUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFN0QsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUVuRSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBaUI7SUFDdEQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDeEMsTUFBTSxjQUFjLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVELE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBRWpGLE9BQU87UUFDSCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssR0FBRyxjQUFjO1FBQzFDLE1BQU0sRUFBRSxZQUFZLENB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QUUsS0FBYyxFQUFFLEVBQUU7SUFDcEUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN0RCxPQUFPLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEtBQWMsRUFBRSxFQUFFO0lBQ3pFLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsTUFBdUIsSUFBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0NST0xMX0JBUl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNQVhfWk9PTSwgTUlOX1pPT00gfSBmcm9tICcuLi9jb25zdGFudHMvem9vbSc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCb2FyZFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zL2JvYXJkJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgYXBwcm94aW1hdGVseSB9IGZyb20gJy4vbWF0aCc7XG5pbXBvcnQgeyB0b0hvc3RQb2ludEZyb21WaWV3Qm94UG9pbnQsIHRvVmlld0JveFBvaW50IH0gZnJvbSAnLi90by1wb2ludCc7XG5pbXBvcnQgeyBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTiB9IGZyb20gJy4vd2Vhay1tYXBzJztcblxuY29uc3QgSVNfRlJPTV9TQ1JPTExJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5jb25zdCBJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRSA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCB7IGhpZGVTY3JvbGxiYXIgfSA9IGJvYXJkLm9wdGlvbnM7XG4gICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBoaWRlU2Nyb2xsYmFyID8gU0NST0xMX0JBUl9XSURUSCA6IDA7XG4gICAgY29uc3Qgdmlld3BvcnRSZWN0ID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdmlld3BvcnRSZWN0LndpZHRoICsgc2Nyb2xsQmFyV2lkdGgsXG4gICAgICAgIGhlaWdodDogdmlld3BvcnRSZWN0LmhlaWdodCArIHNjcm9sbEJhcldpZHRoXG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRIb3N0QkJveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgY2hpbGRyZW5SZWN0ID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdmlld3BvcnRDb250YWluZXJSZWN0LndpZHRoIC8gem9vbTtcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lclJlY3QuaGVpZ2h0IC8gem9vbTtcbiAgICBsZXQgbGVmdDogbnVtYmVyO1xuICAgIGxldCByaWdodDogbnVtYmVyO1xuICAgIGxldCB0b3A6IG51bWJlcjtcbiAgICBsZXQgYm90dG9tOiBudW1iZXI7XG5cbiAgICBpZiAoY2hpbGRyZW5SZWN0LndpZHRoIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IGNoaWxkcmVuUmVjdC54ICsgY2hpbGRyZW5SZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgaGFsZkNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyV2lkdGggLyAyO1xuICAgICAgICBsZWZ0ID0gY2VudGVyWCAtIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICAgICAgcmlnaHQgPSBjZW50ZXJYICsgaGFsZkNvbnRhaW5lcldpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBjaGlsZHJlblJlY3QueDtcbiAgICAgICAgcmlnaHQgPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aDtcbiAgICB9XG4gICAgaWYgKGNoaWxkcmVuUmVjdC5oZWlnaHQgPCBjb250YWluZXJIZWlnaHQpIHtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJIZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLyAyO1xuICAgICAgICB0b3AgPSBjZW50ZXJZIC0gaGFsZkNvbnRhaW5lckhlaWdodDtcbiAgICAgICAgYm90dG9tID0gY2VudGVyWSArIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9wID0gY2hpbGRyZW5SZWN0Lnk7XG4gICAgICAgIGJvdHRvbSA9IGNoaWxkcmVuUmVjdC55ICsgY2hpbGRyZW5SZWN0LmhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbGVmdCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIHRvcCxcbiAgICAgICAgYm90dG9tXG4gICAgfTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIHNjYWxpbmcgcmF0aW8sIG9yIHJldHVybiB0aGUgY29ycmVjdGVkIHNjYWxpbmcgcmF0aW8gaWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGFtcFpvb21MZXZlbCh6b29tOiBudW1iZXIsIG1pblpvb20gPSBNSU5fWk9PTSwgbWF4Wm9vbSA9IE1BWF9aT09NKSB7XG4gICAgcmV0dXJuIHpvb20gPCBtaW5ab29tID8gbWluWm9vbSA6IHpvb20gPiBtYXhab29tID8gbWF4Wm9vbSA6IHpvb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxjTmV3Vmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgem9vbTogbnVtYmVyKSB7XG4gICAgY29uc3QgYm9hcmRDb250YWluZXJSZWN0YW5nbGUgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlbGVtZW50SG9zdEJCb3ggPSBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQsIHpvb20pO1xuICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gYm9hcmRDb250YWluZXJSZWN0YW5nbGUud2lkdGggLyAyO1xuICAgIGNvbnN0IHZlcnRpY2FsUGFkZGluZyA9IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmxlZnQgLSBob3Jpem9udGFsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC50b3AgLSB2ZXJ0aWNhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3gucmlnaHQgLSBlbGVtZW50SG9zdEJCb3gubGVmdCArIChob3Jpem9udGFsUGFkZGluZyAqIDIpIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmJvdHRvbSAtIGVsZW1lbnRIb3N0QkJveC50b3AgKyAodmVydGljYWxQYWRkaW5nICogMikgLyB6b29tXG4gICAgXTtcbiAgICByZXR1cm4gdmlld0JveDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3hDZW50ZXJQb2ludChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIHJldHVybiBbY2hpbGRyZW5SZWN0YW5nbGUueCArIGNoaWxkcmVuUmVjdGFuZ2xlLndpZHRoIC8gMiwgY2hpbGRyZW5SZWN0YW5nbGUueSArIGNoaWxkcmVuUmVjdGFuZ2xlLmhlaWdodCAvIDJdIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U1ZHVmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveDogbnVtYmVyW10pIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3Qm94WzJdICogem9vbX1weGA7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld0JveFszXSAqIHpvb219cHhgO1xuXG4gICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94Jywgdmlld0JveC5qb2luKCcgJykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBpZiAoIW9yaWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW3Njcm9sbExlZnQsIHNjcm9sbFRvcF0gPSB0b0hvc3RQb2ludEZyb21WaWV3Qm94UG9pbnQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICB1cGRhdGVWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZCwgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0Q29udGFpbmVyU2Nyb2xsKGJvYXJkOiBQbGFpdEJvYXJkLCBsZWZ0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBpc0Zyb21WaWV3cG9ydENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lciA9IFBsYWl0Qm9hcmQuZ2V0Vmlld3BvcnRDb250YWluZXIoYm9hcmQpO1xuICAgIGNvbnN0IHByZXZpb3VzU2Nyb2xsTGVmdCA9IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcHJldmlvdXNTY3JvbGxUb3AgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3A7XG4gICAgLy8gc2Nyb2xsVG9wIGFzc2lnbiAxMS44IHdpbGwgZ2V0IDExLjUgaW4gY2hyb21lXG4gICAgLy8gc2Nyb2xsVG9wIGFzc2lnbiAxMS44IHdpbGwgZ2V0IDExIGluIGZpcmVmb3gsIHNhZmFyaVxuICAgIC8vIHNjcm9sbFRvcCBhc3NpZ24gMTEuNCB3aWxsIGdldCAxMSBpbiBjaHJvbWUsIGZpcmVmb3gsIHNhZmFyaVxuICAgIC8vIHVzZSBhcHByb3hpbWF0ZWx5IG1ldGhvZCB0byBkZXRlcm1pbmUgdGhlIG5ldyB2YWx1ZSBpcyB2YWxpZCB1cGRhdGluZyB0byBhdm9pZCBkZWJvdW5jaW5nXG4gICAgaWYgKCFhcHByb3hpbWF0ZWx5KHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQsIGxlZnQsIDEpIHx8ICFhcHByb3hpbWF0ZWx5KHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCwgdG9wLCAxKSkge1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wID0gdG9wO1xuICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGlmIChwcmV2aW91c1Njcm9sbExlZnQgPT09IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgJiYgcHJldmlvdXNTY3JvbGxUb3AgPT09IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCBldmVudCBjYW5ub3QgYmUgdHJpZ2dlcmVkLCBzbyB0aGUgb3JpZ2luYXRpb24gaXMgbW9kaWZpZWQgZGlyZWN0bHkgYmFzZWQgb24gdGhlIHNjcm9sbCBkaXN0YW5jZS5cbiAgICAgICAgICAgIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcoYm9hcmQsIHByZXZpb3VzU2Nyb2xsTGVmdCwgcHJldmlvdXNTY3JvbGxUb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNWYWxpZExlZnRPclRvcCA9XG4gICAgICAgICAgICAgICAgbGVmdCA+IDAgJiZcbiAgICAgICAgICAgICAgICB0b3AgPiAwICYmXG4gICAgICAgICAgICAgICAgbGVmdCA8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFdpZHRoIC0gb2Zmc2V0V2lkdGggJiZcbiAgICAgICAgICAgICAgICB0b3AgPCB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBvZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaXNGcm9tVmlld3BvcnRDaGFuZ2UgJiYgaXNWYWxpZExlZnRPclRvcCkge1xuICAgICAgICAgICAgICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlKGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNjcm9sbExlZnQ6IG51bWJlciwgc2Nyb2xsVG9wOiBudW1iZXIpIHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IHRvVmlld0JveFBvaW50KGJvYXJkLCBbc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wXSk7XG4gICAgaWYgKFBvaW50LmlzRXF1YWxzKG9yaWdpbmF0aW9uLCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlVmlld3BvcnQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICBzZXRJc0Zyb21TY3JvbGxpbmcoYm9hcmQsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3Qgdmlld0JveCA9IGNhbGNOZXdWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBzZXRTVkdWaWV3Qm94KGJvYXJkLCB2aWV3Qm94KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3cG9ydE9mZnNldChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGlmICghYm9hcmQudmlld3BvcnQ/Lm9yaWdpbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGNhbGNOZXdWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IHZpZXdCb3hbMF0gKyB2aWV3Qm94WzJdIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHZpZXdCb3hbMV0gKyB2aWV3Qm94WzNdIC8gMjtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRpb24gPSBbY2VudGVyWCAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDIgLyB6b29tLCBjZW50ZXJZIC0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIDIgLyB6b29tXSBhcyBQb2ludDtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbihib2FyZCwgb3JpZ2luYXRpb24pO1xuICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCwgb3JpZ2luYXRpb246IFBvaW50KSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uc2V0KGJvYXJkLCBvcmlnaW5hdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uZGVsZXRlKGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5nZXQoYm9hcmQpO1xuICAgIGlmIChvcmlnaW5hdGlvbikge1xuICAgICAgICByZXR1cm4gb3JpZ2luYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLnZpZXdwb3J0Lm9yaWdpbmF0aW9uO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21TY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19GUk9NX1NDUk9MTElORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRnJvbVNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19GUk9NX1NDUk9MTElORy5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21WaWV3cG9ydENoYW5nZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0ZST01fVklFV1BPUlRfQ0hBTkdFLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0Uuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9SZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNsaWVudDogUmVjdGFuZ2xlQ2xpZW50KSB7fVxuIl19
@@ -1983,7 +1983,8 @@ function updateViewportContainerScroll(board, left, top, isFromViewportChange =
1983
1983
  // scrollTop assign 11.8 will get 11.5 in chrome
1984
1984
  // scrollTop assign 11.8 will get 11 in firefox, safari
1985
1985
  // scrollTop assign 11.4 will get 11 in chrome, firefox, safari
1986
- if (viewportContainer.scrollLeft !== Math.floor(left) || viewportContainer.scrollTop !== Math.floor(top)) {
1986
+ // use approximately method to determine the new value is valid updating to avoid debouncing
1987
+ if (!approximately(viewportContainer.scrollLeft, left, 1) || !approximately(viewportContainer.scrollTop, top, 1)) {
1987
1988
  viewportContainer.scrollLeft = left;
1988
1989
  viewportContainer.scrollTop = top;
1989
1990
  const offsetWidth = viewportContainer.offsetWidth;
@@ -2637,6 +2638,13 @@ var WritableClipboardType;
2637
2638
  WritableClipboardType["medias"] = "medias";
2638
2639
  WritableClipboardType["elements"] = "elements";
2639
2640
  })(WritableClipboardType || (WritableClipboardType = {}));
2641
+ var WritableClipboardOperationType;
2642
+ (function (WritableClipboardOperationType) {
2643
+ WritableClipboardOperationType["copy"] = "copy";
2644
+ WritableClipboardOperationType["cut"] = "cut";
2645
+ WritableClipboardOperationType["duplicate"] = "duplicate";
2646
+ WritableClipboardOperationType["paste"] = "paste";
2647
+ })(WritableClipboardOperationType || (WritableClipboardOperationType = {}));
2640
2648
 
2641
2649
  const buildPlaitHtml = (type, data) => {
2642
2650
  const stringifiedClipboard = JSON.stringify({
@@ -3836,23 +3844,23 @@ const deleteFragment = (board) => {
3836
3844
  const elements = board.getDeletedFragment([]);
3837
3845
  board.deleteFragment(elements);
3838
3846
  };
3839
- const setFragment = (board, type, clipboardData) => {
3847
+ const setFragment = (board, operationType, clipboardData) => {
3840
3848
  const selectedElements = getSelectedElements(board);
3841
3849
  const rectangle = getRectangleByElements(board, selectedElements, false);
3842
- const clipboardContext = board.buildFragment(null, rectangle, type);
3850
+ const clipboardContext = board.buildFragment(null, rectangle, operationType);
3843
3851
  clipboardContext && setClipboardData(clipboardData, clipboardContext);
3844
3852
  };
3845
3853
  const duplicateElements = (board, elements, point) => {
3846
3854
  const targetElements = elements?.length ? elements : getSelectedElements(board);
3847
3855
  const targetRectangle = getRectangleByElements(board, targetElements, false);
3848
- const clipboardContext = board.buildFragment(null, targetRectangle, 'copy', targetElements);
3856
+ const clipboardContext = board.buildFragment(null, targetRectangle, WritableClipboardOperationType.duplicate, targetElements);
3849
3857
  const stringifiedContext = clipboardContext && JSON.stringify(clipboardContext);
3850
3858
  const clonedContext = stringifiedContext && JSON.parse(stringifiedContext);
3851
3859
  clonedContext &&
3852
3860
  board.insertFragment({
3853
3861
  ...clonedContext,
3854
3862
  text: undefined
3855
- }, point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2]);
3863
+ }, point || [targetRectangle.x + targetRectangle.width / 2, targetRectangle.y + targetRectangle.height / 2], WritableClipboardOperationType.duplicate);
3856
3864
  };
3857
3865
 
3858
3866
  const SNAP_TOLERANCE = 2;
@@ -4541,8 +4549,8 @@ function createBoard(children, options) {
4541
4549
  globalKeyDown: (event) => { },
4542
4550
  keyUp: (event) => { },
4543
4551
  dblClick: (event) => { },
4544
- buildFragment: (clipboardContext, rectangle, type, originData) => clipboardContext,
4545
- insertFragment: () => { },
4552
+ buildFragment: (clipboardContext, rectangle, operationType, originData) => clipboardContext,
4553
+ insertFragment: (clipboardData, targetPoint, operationType) => { },
4546
4554
  deleteFragment: (elements) => {
4547
4555
  CoreTransforms.removeElements(board, elements);
4548
4556
  },
@@ -5188,7 +5196,7 @@ function withMoving(board) {
5188
5196
  };
5189
5197
  board.keyUp = (event) => {
5190
5198
  if (!PlaitBoard.isReadonly(board)) {
5191
- if (event.altKey && pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
5199
+ if (pendingNodesG && startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {
5192
5200
  event.preventDefault();
5193
5201
  const currentElements = updatePoints(board, activeElements, offsetX, offsetY);
5194
5202
  PlaitBoard.getBoardContainer(board).classList.add('element-moving');
@@ -5638,7 +5646,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
5638
5646
 
5639
5647
  function withRelatedFragment(board) {
5640
5648
  const { buildFragment } = board;
5641
- board.buildFragment = (clipboardContext, rectangle, type, originData) => {
5649
+ board.buildFragment = (clipboardContext, rectangle, operationType, originData) => {
5642
5650
  let relatedFragment = board.getRelatedFragment(originData || []);
5643
5651
  if (relatedFragment) {
5644
5652
  if (originData?.length) {
@@ -5657,7 +5665,7 @@ function withRelatedFragment(board) {
5657
5665
  }
5658
5666
  }
5659
5667
  }
5660
- return buildFragment(clipboardContext, rectangle, type, originData);
5668
+ return buildFragment(clipboardContext, rectangle, operationType, originData);
5661
5669
  };
5662
5670
  return board;
5663
5671
  }
@@ -5888,7 +5896,7 @@ class PlaitBoardComponent {
5888
5896
  .pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board)))
5889
5897
  .subscribe((event) => {
5890
5898
  event.preventDefault();
5891
- setFragment(this.board, 'copy', event.clipboardData);
5899
+ setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);
5892
5900
  });
5893
5901
  fromEvent(document, 'paste')
5894
5902
  .pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board)))
@@ -5897,14 +5905,14 @@ class PlaitBoardComponent {
5897
5905
  if (mousePoint) {
5898
5906
  const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));
5899
5907
  const clipboardData = await getClipboardData(clipboardEvent.clipboardData);
5900
- this.board.insertFragment(clipboardData, targetPoint);
5908
+ this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);
5901
5909
  }
5902
5910
  });
5903
5911
  fromEvent(document, 'cut')
5904
5912
  .pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board)))
5905
5913
  .subscribe((event) => {
5906
5914
  event.preventDefault();
5907
- setFragment(this.board, 'cut', event.clipboardData);
5915
+ setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);
5908
5916
  deleteFragment(this.board);
5909
5917
  });
5910
5918
  }
@@ -6337,5 +6345,5 @@ const isDebug = (key) => {
6337
6345
  * Generated bundle index. Do not edit.
6338
6346
  */
6339
6347
 
6340
- export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DebugGenerator, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, ELEMENT_TO_REF, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HIT_DISTANCE_BUFFER, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_ALIVE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_DRAGGING, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_CONTAINER_G, NODE_TO_G, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitContextService, PlaitElement, PlaitGroupElement, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RESIZE_CURSORS, RESIZE_HANDLE_CLASS_NAME, RIGHT_ARROW, ROTATE_HANDLE_CLASS_NAME, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SNAPPING_STROKE_WIDTH, SNAP_TOLERANCE, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, WritableClipboardType, X, Y, Z, ZERO, addClipboardContext, addSelectedElement, approximately, arrowPoints, buildPlaitHtml, cacheMovingElements, cacheSelectedElements, cacheSelectedElementsWithGroup, cacheSelectedElementsWithGroupOnShift, calcNewViewBox, canAddGroup, canRemoveGroup, canSetZIndex, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createClipboardContext, createDebugGenerator, createFakeEvent, createForeignObject, createG, createGroup, createGroupRectangleG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createTestingBoard, createText, createTouchEvent, debounce, degreesToRadians, deleteFragment, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawDashedLines, drawEntireActiveRectangleG, drawLine, drawLinearPath, drawPendingNodesG, drawPointSnapLines, drawRectangle, drawRoundRectangle, drawSolidLines, duplicateElements, fakeNodeWeakMap, filterSelectedGroups, findElements, findIndex, findLastIndex, getAllElementsInGroup, getAllMoveOptions, getAngleBetweenPoints, getAngleByElement, getBarPoint, getBoardRectangle, getClipboardData, getClipboardFromHtml, getCrossingPointsBetweenEllipseAndSegment, getDataTransferClipboard, getDataTransferClipboardText, getEditingGroup, getElementById, getElementHostBBox, getElementsInGroup, getElementsInGroupByElement, getElementsIndices, getEllipseTangentSlope, getGroupByElement, getHighestGroup, getHighestIndexOfElement, getHighestSelectedElements, getHighestSelectedGroup, getHighestSelectedGroups, getHitElementByPoint, getHitElementsBySelection, getHitSelectedElements, getIsRecursionFunc, getMinPointDelta, getMovingElements, getNearestDelta, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getNearestPointRectangle, getOffsetAfterRotate, getOneMoveOptions, getProbablySupportsClipboardRead, getProbablySupportsClipboardWrite, getProbablySupportsClipboardWriteText, getRealScrollBarWidth, getRectangleByAngle, getRectangleByElements, getRectangleByGroup, getRotatedBoundingRectangle, getSelectedElements, getSelectedGroups, getSelectedIsolatedElements, getSelectedIsolatedElementsCanAddToGroup, getSelectedTargetElements, getSelectionAngle, getSnapRectangles, getTemporaryElements, getTemporaryRef, getTripleAxis, getValidElements, getVectorFromPointAndSlope, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hasSameAngle, hasSelectedElementsInSameGroup, hasValidAngle, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isAxisChangedByAngle, isContextmenu, isDOMElement, isDOMNode, isDebug, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isIndicesContinuous, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedAllElementsInGroup, isSelectedElement, isSelectedElementOrGroup, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, isSnapPoint, moveElementsToNewPath, moveElementsToNewPathAfterAddGroup, nonGroupInHighestSelectedElements, normalizeAngle, normalizePoint, preventTouchMove, radiansToDegrees, removeMovingElements, removeSelectedElement, rotate, rotateAntiPointsByElement, rotateElements, rotatePoints, rotatePointsByElement, rotatedDataPoints, scrollToRectangle, setAngleForG, setClipboardData, setDataTransferClipboard, setDataTransferClipboardText, setDragging, setFragment, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectedElementsWithGroup, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, sortElements, stripHtml, temporaryDisableSelection, throttleRAF, toDomPrecision, toFixed, toHostPoint, toHostPointFromViewBoxPoint, toImage, toScreenPointFromHostPoint, toViewBoxPoint, toViewBoxPoints, uniqueById, updateForeignObject, updateForeignObjectWidth, updatePoints, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withArrowMoving, withMoving, withOptions, withSelection };
6348
+ export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DebugGenerator, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, ELEMENT_TO_REF, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HIT_DISTANCE_BUFFER, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_ALIVE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_DRAGGING, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_CONTAINER_G, NODE_TO_G, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitContextService, PlaitElement, PlaitGroupElement, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RESIZE_CURSORS, RESIZE_HANDLE_CLASS_NAME, RIGHT_ARROW, ROTATE_HANDLE_CLASS_NAME, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SNAPPING_STROKE_WIDTH, SNAP_TOLERANCE, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, WritableClipboardOperationType, WritableClipboardType, X, Y, Z, ZERO, addClipboardContext, addSelectedElement, approximately, arrowPoints, buildPlaitHtml, cacheMovingElements, cacheSelectedElements, cacheSelectedElementsWithGroup, cacheSelectedElementsWithGroupOnShift, calcNewViewBox, canAddGroup, canRemoveGroup, canSetZIndex, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createClipboardContext, createDebugGenerator, createFakeEvent, createForeignObject, createG, createGroup, createGroupRectangleG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createTestingBoard, createText, createTouchEvent, debounce, degreesToRadians, deleteFragment, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawDashedLines, drawEntireActiveRectangleG, drawLine, drawLinearPath, drawPendingNodesG, drawPointSnapLines, drawRectangle, drawRoundRectangle, drawSolidLines, duplicateElements, fakeNodeWeakMap, filterSelectedGroups, findElements, findIndex, findLastIndex, getAllElementsInGroup, getAllMoveOptions, getAngleBetweenPoints, getAngleByElement, getBarPoint, getBoardRectangle, getClipboardData, getClipboardFromHtml, getCrossingPointsBetweenEllipseAndSegment, getDataTransferClipboard, getDataTransferClipboardText, getEditingGroup, getElementById, getElementHostBBox, getElementsInGroup, getElementsInGroupByElement, getElementsIndices, getEllipseTangentSlope, getGroupByElement, getHighestGroup, getHighestIndexOfElement, getHighestSelectedElements, getHighestSelectedGroup, getHighestSelectedGroups, getHitElementByPoint, getHitElementsBySelection, getHitSelectedElements, getIsRecursionFunc, getMinPointDelta, getMovingElements, getNearestDelta, getNearestPointBetweenPointAndEllipse, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getNearestPointRectangle, getOffsetAfterRotate, getOneMoveOptions, getProbablySupportsClipboardRead, getProbablySupportsClipboardWrite, getProbablySupportsClipboardWriteText, getRealScrollBarWidth, getRectangleByAngle, getRectangleByElements, getRectangleByGroup, getRotatedBoundingRectangle, getSelectedElements, getSelectedGroups, getSelectedIsolatedElements, getSelectedIsolatedElementsCanAddToGroup, getSelectedTargetElements, getSelectionAngle, getSnapRectangles, getTemporaryElements, getTemporaryRef, getTripleAxis, getValidElements, getVectorFromPointAndSlope, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hasSameAngle, hasSelectedElementsInSameGroup, hasValidAngle, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isAxisChangedByAngle, isContextmenu, isDOMElement, isDOMNode, isDebug, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isIndicesContinuous, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedAllElementsInGroup, isSelectedElement, isSelectedElementOrGroup, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, isSnapPoint, moveElementsToNewPath, moveElementsToNewPathAfterAddGroup, nonGroupInHighestSelectedElements, normalizeAngle, normalizePoint, preventTouchMove, radiansToDegrees, removeMovingElements, removeSelectedElement, rotate, rotateAntiPointsByElement, rotateElements, rotatePoints, rotatePointsByElement, rotatedDataPoints, scrollToRectangle, setAngleForG, setClipboardData, setDataTransferClipboard, setDataTransferClipboardText, setDragging, setFragment, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectedElementsWithGroup, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, sortElements, stripHtml, temporaryDisableSelection, throttleRAF, toDomPrecision, toFixed, toHostPoint, toHostPointFromViewBoxPoint, toImage, toScreenPointFromHostPoint, toViewBoxPoint, toViewBoxPoints, uniqueById, updateForeignObject, updateForeignObjectWidth, updatePoints, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withArrowMoving, withMoving, withOptions, withSelection };
6341
6349
  //# sourceMappingURL=plait-core.mjs.map