speechrecorderng 2.21.7 → 2.21.8

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.
@@ -95,38 +95,50 @@ export class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
95
95
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
96
96
  let cl = this.canvasLayers[ci];
97
97
  const leftStyle = bounds.position.left + 'px';
98
+ if (cl.style.left != leftStyle) {
99
+ cl.style.left = leftStyle;
100
+ }
98
101
  const topStyle = bounds.position.top + 'px';
99
- cl.style.left = leftStyle;
100
- cl.style.top = topStyle;
102
+ if (cl.style.top != topStyle) {
103
+ cl.style.top = topStyle;
104
+ }
101
105
  }
102
106
  if (bounds.dimension.width) {
103
- let intW = Math.round(bounds.dimension.width);
107
+ let intW = Math.floor(bounds.dimension.width);
104
108
  if (redraw) {
105
109
  // Do not set width of background canvas (causes flicker on start render)
106
110
  for (let ci = 1; ci < this.canvasLayers.length; ci++) {
107
111
  let cl = this.canvasLayers[ci];
108
- cl.width = intW;
112
+ if (cl.width != intW) {
113
+ cl.width = intW;
114
+ }
109
115
  }
110
116
  }
111
117
  let wStr = intW.toString() + 'px';
112
118
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
113
119
  let cl = this.canvasLayers[ci];
114
- cl.style.width = wStr;
120
+ if (cl.style.width != wStr) {
121
+ cl.style.width = wStr;
122
+ }
115
123
  }
116
124
  }
117
125
  if (bounds.dimension.height) {
118
- let intH = Math.round(bounds.dimension.height);
126
+ let intH = Math.floor(bounds.dimension.height);
119
127
  if (redraw) {
120
128
  // Do not set height of background canvas (causes flicker on start render)
121
129
  for (let ci = 1; ci < this.canvasLayers.length; ci++) {
122
130
  let cl = this.canvasLayers[ci];
123
- cl.height = intH;
131
+ if (cl.height != intH) {
132
+ cl.height = intH;
133
+ }
124
134
  }
125
135
  }
126
136
  let hStr = intH + 'px';
127
137
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
128
138
  let cl = this.canvasLayers[ci];
129
- cl.style.height = hStr;
139
+ if (cl.style.height != hStr) {
140
+ cl.style.height = hStr;
141
+ }
130
142
  }
131
143
  }
132
144
  //});
@@ -361,4 +373,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
361
373
  }], selectedEventEmitter: [{
362
374
  type: Output
363
375
  }] } });
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fY2FudmFzX2xheWVyX2NvbXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vdWkvYXVkaW9fY2FudmFzX2xheWVyX2NvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFJaEMsTUFBTSxPQUFPLGFBQWE7SUFheEIsWUFBb0IsT0FBYyxFQUFVLEtBQVk7UUFBcEMsWUFBTyxHQUFQLE9BQU8sQ0FBTztRQUFVLFVBQUssR0FBTCxLQUFLLENBQU87SUFBRSxDQUFDO0lBWjNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDaEMsQ0FBQztDQUdGO0FBR0QsTUFBTSxPQUFnQiw4QkFBK0IsU0FBUSxvQkFBb0I7SUFEakY7O1FBRVksZUFBVSxHQUFtQixJQUFJLENBQUM7UUFDbEMsYUFBUSxHQUFhLE9BQU8sQ0FBQztRQUM3QixpQkFBWSxHQUFDLHNCQUFzQixDQUFDO0tBaUgvQztJQS9HQzs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLFFBQVEsR0FBQyxJQUFJLENB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Q2FudmFzTGF5ZXJDb21wb25lbnR9IGZyb20gXCIuLi8uLi91aS9jYW52YXNfbGF5ZXJfY29tcFwiO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnLi4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQgeyBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkLCBEaXJlY3RpdmUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge01hcmtlcn0gZnJvbSBcIi4vY29tbW9uXCI7XHJcbmltcG9ydCB7RGltZW5zaW9uLCBSZWN0YW5nbGV9IGZyb20gXCIuLi8uLi9tYXRoLzJkL2dlb21ldHJ5XCI7XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIFZpZXdTZWxlY3Rpb257XHJcbiAgZ2V0IHN0YXJ0WCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0WDtcclxuICB9XHJcblxyXG4gIGdldCBlbmRYKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kWDtcclxuICB9XHJcblxyXG4gIHdpZHRoKCk6bnVtYmVye1xyXG4gICAgcmV0dXJuIHRoaXMuX2VuZFgtdGhpcy5fc3RhcnRYXHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9zdGFydFg6bnVtYmVyLCBwcml2YXRlIF9lbmRYOm51bWJlcil7fVxyXG59XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljQXVkaW9DYW52YXNMYXllckNvbXBvbmVudCBleHRlbmRzIENhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuICBwcm90ZWN0ZWQgX2F1ZGlvRGF0YTogQXVkaW9CdWZmZXJ8bnVsbD1udWxsO1xyXG4gIHByb3RlY3RlZCBfYmdDb2xvcjpzdHJpbmd8bnVsbD0nd2hpdGUnO1xyXG4gIHByb3RlY3RlZCBfc2VsZWN0Q29sb3I9J3JnYmEoMCUsMCUsMTAwJSwyNSUpJztcclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBwaXhlbCBwb3NpdGlvbiBkZXBlbmRpbmcgb24gY3VycmVudCB6b29tIHNldHRpbmcuXHJcbiAgICogQHBhcmFtIGZyYW1lUG9zIGF1ZGlvIGZyYW1lIChzYW1wbGUpIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgZnJhbWVUb1hQaXhlbFBvc2l0aW9uKGZyYW1lUG9zOiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgbGV0IHBpeGVsUG9zPW51bGw7XHJcbiAgICAgIGlmICh0aGlzLl9hdWRpb0RhdGEgJiYgdGhpcy5fYXVkaW9EYXRhLm51bWJlck9mQ2hhbm5lbHMgPiAwKSB7XHJcbiAgICAgICAgICBsZXQgY2gwID0gdGhpcy5fYXVkaW9EYXRhLmdldENoYW5uZWxEYXRhKDApO1xyXG4gICAgICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gY2gwLmxlbmd0aDtcclxuICAgICAgICAgIGxldCB2dztcclxuICAgICAgICAgIGlmKHRoaXMuYm91bmRzKSB7XHJcbiAgICAgICAgICAgICAgdncgPSB0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsRGltZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgdncgPSB0aGlzLnZpcnR1YWxEaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZih2dyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgcGl4ZWxQb3MgPSBmcmFtZVBvcyAqIHZ3IC8gZnJhbWVMZW5ndGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIHJldHVybiBwaXhlbFBvcztcclxufVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHBpeGVsIHBvc2l0aW9uIGluIHZpZXcgcG9ydCAodmlzaWJsZSB3aW5kb3cgb2Ygc2Nyb2xsIHBhbmUpLlxyXG4gICAqIEBwYXJhbSBmcmFtZVBvcyBhdWRpbyBmcmFtZSAoc2FtcGxlKSBwb3NpdGlvblxyXG4gICAqL1xyXG4gIGZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGZyYW1lUG9zOiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGxldCBwaXhlbFBvcz10aGlzLmZyYW1lVG9YUGl4ZWxQb3NpdGlvbihmcmFtZVBvcyk7XHJcbiAgICBpZihwaXhlbFBvcyE9bnVsbCl7XHJcbiAgICAgIGxldCB2UGl4ZWxQb3MgPSB0aGlzLnRvWFZpZXdQb3J0UGl4ZWxQb3NpdGlvbihwaXhlbFBvcyk7XHJcbiAgICAgIHJldHVybiB2UGl4ZWxQb3M7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgdmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24oeFZpZXdQb3J0UGl4ZWxQb3M6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCB2cFhyYW1lUG9zPW51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YSAmJiB0aGlzLl9hdWRpb0RhdGEubnVtYmVyT2ZDaGFubmVscyA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGNoMCA9IHRoaXMuX2F1ZGlvRGF0YS5nZXRDaGFubmVsRGF0YSgwKTtcclxuICAgICAgICAgICAgbGV0IGZyYW1lTGVuZ3RoID0gY2gwLmxlbmd0aDtcclxuICAgICAgICAgICAgbGV0IHZ3O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ib3VuZHMpIHtcclxuICAgICAgICAgICAgICAgIHZ3PSB0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbERpbWVuc2lvbikge1xyXG4gICAgICAgICAgICAgICAgdncgPSB0aGlzLnZpcnR1YWxEaW1lbnNpb24ud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodnchPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgeFZpcnR1YWxQaXhlbFBvcyA9IHRoaXMudG9YVmlydHVhbFBpeGVsUG9zaXRpb24oeFZpZXdQb3J0UGl4ZWxQb3MpXHJcbiAgICAgICAgICAgICAgICBsZXQgZnJhbWVzUGVyUGl4ZWwgPSBmcmFtZUxlbmd0aCAvIHZ3O1xyXG4gICAgICAgICAgICAgICAgbGV0IGZyYW1lUG9zID0gZnJhbWVzUGVyUGl4ZWwgKiB4VmlydHVhbFBpeGVsUG9zO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYW1lUG9zIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYW1lUG9zID0gMFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZyYW1lUG9zID49IGZyYW1lTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVQb3MgPSBmcmFtZUxlbmd0aCAtIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZwWHJhbWVQb3MgPSBNYXRoLnJvdW5kKGZyYW1lUG9zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdnBYcmFtZVBvcztcclxuICAgIH1cclxuXHJcbiAgICBsYXlvdXRCb3VuZHMoYm91bmRzOlJlY3RhbmdsZSwgdmlydHVhbERpbWVuc2lvbjpEaW1lbnNpb24scmVkcmF3OiBib29sZWFuKSB7XHJcblxyXG4gICAgICAgIHRoaXMuYm91bmRzPWJvdW5kcztcclxuICAgICAgICB0aGlzLnZpcnR1YWxEaW1lbnNpb249dmlydHVhbERpbWVuc2lvbjtcclxuICAgICAgICAvL3RoaXMuY2FudmFzTGF5ZXJzLmZvckVhY2goY2w9PntcclxuICAgICAgICBmb3IobGV0IGNpPTA7Y2k8dGhpcy5jYW52YXNMYXllcnMubGVuZ3RoO2NpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICBjb25zdCBsZWZ0U3R5bGU9Ym91bmRzLnBvc2l0aW9uLmxlZnQrICdweCc7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvcFN0eWxlPWJvdW5kcy5wb3NpdGlvbi50b3AgKyAncHgnO1xyXG4gICAgICAgICAgICBjbC5zdHlsZS5sZWZ0ID0gbGVmdFN0eWxlO1xyXG4gICAgICAgICAgICBjbC5zdHlsZS50b3AgPSB0b3BTdHlsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvdW5kcy5kaW1lbnNpb24ud2lkdGgpIHtcclxuICAgICAgICAgICAgbGV0IGludFc9TWF0aC5yb3VuZChib3VuZHMuZGltZW5zaW9uLndpZHRoKTtcclxuICAgICAgICAgICAgaWYgKHJlZHJhdykge1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHNldCB3aWR0aCBvZiBiYWNrZ3JvdW5kIGNhbnZhcyAoY2F1c2VzIGZsaWNrZXIgb24gc3RhcnQgcmVuZGVyKVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaT0xO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsLndpZHRoID0gaW50VztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgd1N0ciA9IGludFcudG9TdHJpbmcoKSArICdweCc7XHJcbiAgICAgICAgICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgY2wuc3R5bGUud2lkdGggPSB3U3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib3VuZHMuZGltZW5zaW9uLmhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgaW50SD1NYXRoLnJvdW5kKGJvdW5kcy5kaW1lbnNpb24uaGVpZ2h0KVxyXG4gICAgICAgICAgICBpZiAocmVkcmF3KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2V0IGhlaWdodCBvZiBiYWNrZ3JvdW5kIGNhbnZhcyAoY2F1c2VzIGZsaWNrZXIgb24gc3RhcnQgcmVuZGVyKVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaT0xO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNsLmhlaWdodCA9IGludEg7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGhTdHIgPSBpbnRIICsgJ3B4JztcclxuICAgICAgICAgICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgICAgICBjbC5zdHlsZS5oZWlnaHQgPSBoU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vfSk7XHJcblxyXG5cclxuICAgIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IGV4dGVuZHMgQmFzaWNBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuICAgIF9wb2ludGVyUG9zaXRpb246TWFya2VyfG51bGw9bnVsbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc2VsZWN0U3RhcnRYOm51bWJlcnxudWxsPW51bGw7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYmcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBiZ0NhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgICBiZ0NhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2N1cnNvcicsIHsgc3RhdGljOiB0cnVlIH0pIGN1cnNvckNhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgICBjdXJzb3JDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZXVwKG1lOiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbW1pdChtZSlcclxuICB9XHJcblxyXG4gICAgbGF5b3V0Qm91bmRzKGJvdW5kczpSZWN0YW5nbGUsIHZpcnR1YWxEaW1lbnNpb246RGltZW5zaW9uLHJlZHJhdzogYm9vbGVhbixjbGVhcjpib29sZWFuPXRydWUpIHtcclxuICAgICAgICBzdXBlci5sYXlvdXRCb3VuZHMoYm91bmRzLHZpcnR1YWxEaW1lbnNpb24scmVkcmF3KVxyXG4gICAgICAgIGlmIChyZWRyYXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERyYXcoY2xlYXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzZXQgcG9pbnRlclBvc2l0aW9uKHBvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8bnVsbCl7XHJcbiAgICAgICAgdGhpcy5fcG9pbnRlclBvc2l0aW9uPXBvaW50ZXJQb3NpdGlvblxyXG4gICAgICAgIHRoaXMuZHJhd0N1cnNvckxheWVyKClcclxuICAgIH1cclxuXHJcbiAgICBfc2VsZWN0aW5nOiBTZWxlY3Rpb258bnVsbCA9bnVsbDtcclxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3Rpbmcoc2VsZWN0aW5nOlNlbGVjdGlvbnwgbnVsbCl7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW5nPXNlbGVjdGluZ1xyXG4gICAgICAgIHRoaXMuZHJhd0JnKClcclxuICAgICAgICB0aGlzLmRyYXdDdXJzb3JMYXllcigpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGluZygpOlNlbGVjdGlvbnxudWxse1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RpbmdcclxuICAgIH1cclxuXHJcbiAgICBfc2VsZWN0aW9uOiBTZWxlY3Rpb258bnVsbCA9bnVsbFxyXG4gICAgQElucHV0KCkgc2V0IHNlbGVjdGlvbihzZWxlY3Rpb246U2VsZWN0aW9ufG51bGwpe1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbj1zZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpbmc9bnVsbDtcclxuICAgICAgICB0aGlzLmRyYXdCZygpXHJcbiAgICAgICAgdGhpcy5kcmF3Q3Vyc29yTGF5ZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3Rpb24oKTpTZWxlY3Rpb258bnVsbHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0aW9uU3RhcnQobWU6TW91c2VFdmVudCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RTdGFydFg9bWUub2Zmc2V0WDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Rpb25Db21taXQobWU6TW91c2VFdmVudCl7XHJcbiAgICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0U3RhcnRYIT1udWxsKSB7XHJcbiAgICAgICAgICB2cz1uZXcgVmlld1NlbGVjdGlvbih0aGlzLnNlbGVjdFN0YXJ0WCxtZS5vZmZzZXRYKVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RTdGFydFg9bnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0KHZzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3Qgc3RhcnREcmF3KGNsZWFyOmJvb2xlYW4pOnZvaWQ7XHJcblxyXG4gICAgdXBkYXRlQ3Vyc29yQ2FudmFzKG1lOk1vdXNlRXZlbnQsc2hvd0N1cnNvclBvc2l0aW9uPXRydWUpe1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JDYW52YXMpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBoID0gdGhpcy5jdXJzb3JDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmICghc2hvd0N1cnNvclBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbGVjdFN0YXJ0WCA9IG51bGxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsZWN0aW5nQ2hhbmdlKG51bGwpXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgaWYgKG1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RTdGFydFgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobnVsbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGluZ0NoYW5nZShuZXcgVmlld1NlbGVjdGlvbih0aGlzLnNlbGVjdFN0YXJ0WCwgbWUub2Zmc2V0WCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0N1cnNvclBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlclBvc2l0aW9uQ2hhbmdlZChtZS5vZmZzZXRYKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobnVsbClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHBvaW50ZXJQb3NpdGlvbkV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8TWFya2VyPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGluZ0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+KCk7XHJcblxyXG5cclxuICAgIHBvaW50ZXJQb3NpdGlvbkNoYW5nZWQoeFBvc2l0aW9uOm51bWJlcnwgbnVsbCl7XHJcbiAgICAgICAgbGV0IHBvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICAgICAgICBpZih4UG9zaXRpb24pe1xyXG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb249bmV3IE1hcmtlcigpO1xyXG4gICAgICAgICAgICBsZXQgdnBYUG9zPXRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24oeFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgaWYodnBYUG9zIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludGVyUG9zaXRpb24uZnJhbWVQb3NpdGlvbiA9dnBYUG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9pbnRlclBvc2l0aW9uRXZlbnRFbWl0dGVyLmVtaXQocG9pbnRlclBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RpbmdDaGFuZ2Uodmlld1NlbDpWaWV3U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICBsZXQgbnM6U2VsZWN0aW9ufHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodmlld1NlbCkge1xyXG4gICAgICAgICAgICBsZXQgZnJhbWVTdGFydCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24odmlld1NlbC5zdGFydFgpXHJcbiAgICAgICAgICAgIGxldCBmcmFtZUVuZCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24odmlld1NlbC5lbmRYKVxyXG4gICAgICAgICAgICBpZih0aGlzLl9hdWRpb0RhdGEgJiYgZnJhbWVTdGFydCE9bnVsbCAmJiBmcmFtZUVuZCE9bnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbnMgPSBuZXcgU2VsZWN0aW9uKHRoaXMuX2F1ZGlvRGF0YS5zYW1wbGVSYXRlLCBmcmFtZVN0YXJ0LCBmcmFtZUVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RpbmdFdmVudEVtaXR0ZXIuZW1pdChucylcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Qodmlld1NlbDpWaWV3U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICBsZXQgbnM6U2VsZWN0aW9ufHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodmlld1NlbCkge1xyXG4gICAgICAgICAgbGV0IGZyYW1lU3RhcnQgPSB0aGlzLnZpZXdQb3J0WFBpeGVsVG9GcmFtZVBvc2l0aW9uKHZpZXdTZWwuc3RhcnRYKVxyXG4gICAgICAgICAgbGV0IGZyYW1lRW5kID0gdGhpcy52aWV3UG9ydFhQaXhlbFRvRnJhbWVQb3NpdGlvbih2aWV3U2VsLmVuZFgpXHJcbiAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvRGF0YSAmJiBmcmFtZVN0YXJ0IT1udWxsICYmIGZyYW1lRW5kIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICBucyA9IG5ldyBTZWxlY3Rpb24odGhpcy5fYXVkaW9EYXRhLnNhbXBsZVJhdGUsIGZyYW1lU3RhcnQsIGZyYW1lRW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRXZlbnRFbWl0dGVyLmVtaXQobnMpXHJcbiAgICB9XHJcblxyXG4gICAgdmlld1NlbGVjdGlvbigpOlZpZXdTZWxlY3Rpb258bnVsbHtcclxuICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBsZXQgczpTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLl9zZWxlY3Rpbmcpe1xyXG4gICAgICAgIHM9dGhpcy5fc2VsZWN0aW5nXHJcbiAgICAgIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgfVxyXG4gICAgICBpZihzKXtcclxuICAgICAgICBsZXQgc2Y9cy5zdGFydEZyYW1lO1xyXG4gICAgICAgIGxldCBlZj1zLmVuZEZyYW1lO1xyXG4gICAgICAgIGxldCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgIGxldCB4ZT10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGVmKVxyXG4gICAgICAgICAgaWYoeHMhPW51bGwgJiYgeGUhPW51bGwpIHtcclxuICAgICAgICAgICAgICB2cyA9IG5ldyBWaWV3U2VsZWN0aW9uKHhzLCB4ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdnM7XHJcbiAgICB9XHJcblxyXG5cclxuICBkcmF3QmcoKXtcclxuICAgICAgaWYodGhpcy5iZ0NhbnZhcyAmJiB0aGlzLmJvdW5kcykge1xyXG4gICAgICAgICAgdGhpcy5iZ0NhbnZhcy5zdHlsZS5sZWZ0ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0KS50b1N0cmluZygpICsgJ3B4JztcclxuICAgICAgICAgIHRoaXMuYmdDYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICB0aGlzLmJnQ2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgbGV0IGcxID0gdGhpcy5iZ0NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgaWYgKGcxKSB7XHJcbiAgICAgICAgICBsZXQgdyA9IHRoaXMuYmdDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICBsZXQgaCA9IHRoaXMuYmdDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgZzEuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgICAgaWYodGhpcy5fYmdDb2xvcikge1xyXG4gICAgICAgICAgICBnMS5maWxsU3R5bGUgPSB0aGlzLl9iZ0NvbG9yO1xyXG4gICAgICAgICAgICBnMS5maWxsUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCB2cyA9IHRoaXMudmlld1NlbGVjdGlvbigpXHJcbiAgICAgICAgICBpZiAodnMpIHtcclxuICAgICAgICAgICAgZzEuZmlsbFN0eWxlID0gdGhpcy5fc2VsZWN0Q29sb3I7XHJcbiAgICAgICAgICAgIGcxLmZpbGxSZWN0KHZzLnN0YXJ0WCwgMCwgdnMud2lkdGgoKSwgaCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG4gICAgZHJhd0N1cnNvckxheWVyKCl7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBoID0gdGhpcy5jdXJzb3JDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgaWYoZykge1xyXG4gICAgICAgICAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgczpTZWxlY3Rpb249bnVsbDtcclxuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuX3NlbGVjdGluZyl7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcz10aGlzLl9zZWxlY3RpbmdcclxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIC8vIGlmKHMpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBzZj1zLnN0YXJ0RnJhbWVcclxuICAgICAgICAgICAgICAgIC8vICAgICBsZXQgZWY9cy5lbmRGcmFtZVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCB4ZT10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGVmKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBzdz14ZS14c1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGcuZmlsbFN0eWxlID0gJ3JnYmEoMCUsMCUsMTAwJSwyNSUpJztcclxuICAgICAgICAgICAgICAgIC8vICAgICBnLmZpbGxSZWN0KHhzLDAsc3csaCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fcG9pbnRlclBvc2l0aW9uKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYW1lUG9zPXRoaXMuX3BvaW50ZXJQb3NpdGlvbi5mcmFtZVBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZnJhbWVQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHhWaWV3UG9ydFBpeGVscG9zID0gdGhpcy5mcmFtZVRvVmlld1BvcnRYUGl4ZWxQb3NpdGlvbihmcmFtZVBvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhWaWV3UG9ydFBpeGVscG9zKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLm1vdmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmxpbmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZm9udCA9ICcxNHB4IHNhbnMtc2VyaWYnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gJ3llbGxvdyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsVGV4dChmcmFtZVBvcy50b1N0cmluZygpLCB4Vmlld1BvcnRQaXhlbHBvcyArIDIsIDUwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19
376
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fY2FudmFzX2xheWVyX2NvbXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vdWkvYXVkaW9fY2FudmFzX2xheWVyX2NvbXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQzs7QUFJaEMsTUFBTSxPQUFPLGFBQWE7SUFheEIsWUFBb0IsT0FBYyxFQUFVLEtBQVk7UUFBcEMsWUFBTyxHQUFQLE9BQU8sQ0FBTztRQUFVLFVBQUssR0FBTCxLQUFLLENBQU87SUFBRSxDQUFDO0lBWjNELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFDLElBQUksQ0FBQyxPQUFPLENBQUE7SUFDaEMsQ0FBQztDQUdGO0FBR0QsTUFBTSxPQUFnQiw4QkFBK0IsU0FBUSxvQkFBb0I7SUFEakY7O1FBRVksZUFBVSxHQUFtQixJQUFJLENBQUM7UUFDbEMsYUFBUSxHQUFhLE9BQU8sQ0FBQztRQUM3QixpQkFBWSxHQUFDLHNCQUFzQixDQUFDO0tBNkgvQztJQTNIQzs7O09BR0c7SUFDSCxxQkFBcUIsQ0FBQyxRQUFnQjtRQUNsQyxJQUFJLFFBQVEsR0FBQyxJQUFJLENB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SSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHTSxlQUFlO3NCQUFyRCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSXZDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFZN0IsZUFBZTtzQkFBM0IsS0FBSztnQkFNTyxTQUFTO3NCQUFyQixLQUFLO2dCQVdPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBcURJLDJCQUEyQjtzQkFBcEMsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDYW52YXNMYXllckNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3VpL2NhbnZhc19sYXllcl9jb21wXCI7XHJcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tICcuLi9wZXJzaXN0b3InXHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIERpcmVjdGl2ZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7TWFya2VyfSBmcm9tIFwiLi9jb21tb25cIjtcclxuaW1wb3J0IHtEaW1lbnNpb24sIFJlY3RhbmdsZX0gZnJvbSBcIi4uLy4uL21hdGgvMmQvZ2VvbWV0cnlcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgVmlld1NlbGVjdGlvbntcclxuICBnZXQgc3RhcnRYKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRYO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuZFgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmRYO1xyXG4gIH1cclxuXHJcbiAgd2lkdGgoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kWC10aGlzLl9zdGFydFhcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N0YXJ0WDpudW1iZXIsIHByaXZhdGUgX2VuZFg6bnVtYmVyKXt9XHJcbn1cclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzaWNBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IGV4dGVuZHMgQ2FudmFzTGF5ZXJDb21wb25lbnQge1xyXG4gIHByb3RlY3RlZCBfYXVkaW9EYXRhOiBBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIF9iZ0NvbG9yOnN0cmluZ3xudWxsPSd3aGl0ZSc7XHJcbiAgcHJvdGVjdGVkIF9zZWxlY3RDb2xvcj0ncmdiYSgwJSwwJSwxMDAlLDI1JSknO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHBpeGVsIHBvc2l0aW9uIGRlcGVuZGluZyBvbiBjdXJyZW50IHpvb20gc2V0dGluZy5cclxuICAgKiBAcGFyYW0gZnJhbWVQb3MgYXVkaW8gZnJhbWUgKHNhbXBsZSkgcG9zaXRpb25cclxuICAgKi9cclxuICBmcmFtZVRvWFBpeGVsUG9zaXRpb24oZnJhbWVQb3M6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgICBsZXQgcGl4ZWxQb3M9bnVsbDtcclxuICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YSAmJiB0aGlzLl9hdWRpb0RhdGEubnVtYmVyT2ZDaGFubmVscyA+IDApIHtcclxuICAgICAgICAgIGxldCBjaDAgPSB0aGlzLl9hdWRpb0RhdGEuZ2V0Q2hhbm5lbERhdGEoMCk7XHJcbiAgICAgICAgICBsZXQgZnJhbWVMZW5ndGggPSBjaDAubGVuZ3RoO1xyXG4gICAgICAgICAgbGV0IHZ3O1xyXG4gICAgICAgICAgaWYodGhpcy5ib3VuZHMpIHtcclxuICAgICAgICAgICAgICB2dyA9IHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxEaW1lbnNpb24pIHtcclxuICAgICAgICAgICAgICB2dyA9IHRoaXMudmlydHVhbERpbWVuc2lvbi53aWR0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKHZ3ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICBwaXhlbFBvcyA9IGZyYW1lUG9zICogdncgLyBmcmFtZUxlbmd0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHBpeGVsUG9zO1xyXG59XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgcGl4ZWwgcG9zaXRpb24gaW4gdmlldyBwb3J0ICh2aXNpYmxlIHdpbmRvdyBvZiBzY3JvbGwgcGFuZSkuXHJcbiAgICogQHBhcmFtIGZyYW1lUG9zIGF1ZGlvIGZyYW1lIChzYW1wbGUpIHBvc2l0aW9uXHJcbiAgICovXHJcbiAgZnJhbWVUb1ZpZXdQb3J0WFBpeGVsUG9zaXRpb24oZnJhbWVQb3M6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgbGV0IHBpeGVsUG9zPXRoaXMuZnJhbWVUb1hQaXhlbFBvc2l0aW9uKGZyYW1lUG9zKTtcclxuICAgIGlmKHBpeGVsUG9zIT1udWxsKXtcclxuICAgICAgbGV0IHZQaXhlbFBvcyA9IHRoaXMudG9YVmlld1BvcnRQaXhlbFBvc2l0aW9uKHBpeGVsUG9zKTtcclxuICAgICAgcmV0dXJuIHZQaXhlbFBvcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgICB2aWV3UG9ydFhQaXhlbFRvRnJhbWVQb3NpdGlvbih4Vmlld1BvcnRQaXhlbFBvczogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IHZwWHJhbWVQb3M9bnVsbDtcclxuICAgICAgICBpZiAodGhpcy5fYXVkaW9EYXRhICYmIHRoaXMuX2F1ZGlvRGF0YS5udW1iZXJPZkNoYW5uZWxzID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgY2gwID0gdGhpcy5fYXVkaW9EYXRhLmdldENoYW5uZWxEYXRhKDApO1xyXG4gICAgICAgICAgICBsZXQgZnJhbWVMZW5ndGggPSBjaDAubGVuZ3RoO1xyXG4gICAgICAgICAgICBsZXQgdnc7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJvdW5kcykge1xyXG4gICAgICAgICAgICAgICAgdnc9IHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsRGltZW5zaW9uKSB7XHJcbiAgICAgICAgICAgICAgICB2dyA9IHRoaXMudmlydHVhbERpbWVuc2lvbi53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih2dyE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGxldCB4VmlydHVhbFBpeGVsUG9zID0gdGhpcy50b1hWaXJ0dWFsUGl4ZWxQb3NpdGlvbih4Vmlld1BvcnRQaXhlbFBvcylcclxuICAgICAgICAgICAgICAgIGxldCBmcmFtZXNQZXJQaXhlbCA9IGZyYW1lTGVuZ3RoIC8gdnc7XHJcbiAgICAgICAgICAgICAgICBsZXQgZnJhbWVQb3MgPSBmcmFtZXNQZXJQaXhlbCAqIHhWaXJ0dWFsUGl4ZWxQb3M7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhbWVQb3MgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVQb3MgPSAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhbWVQb3MgPj0gZnJhbWVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcmFtZVBvcyA9IGZyYW1lTGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdnBYcmFtZVBvcyA9IE1hdGgucm91bmQoZnJhbWVQb3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2cFhyYW1lUG9zO1xyXG4gICAgfVxyXG5cclxuICAgIGxheW91dEJvdW5kcyhib3VuZHM6UmVjdGFuZ2xlLCB2aXJ0dWFsRGltZW5zaW9uOkRpbWVuc2lvbixyZWRyYXc6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgICAgdGhpcy5ib3VuZHM9Ym91bmRzO1xyXG4gICAgICAgIHRoaXMudmlydHVhbERpbWVuc2lvbj12aXJ0dWFsRGltZW5zaW9uO1xyXG4gICAgICAgIC8vdGhpcy5jYW52YXNMYXllcnMuZm9yRWFjaChjbD0+e1xyXG4gICAgICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGxlZnRTdHlsZT1ib3VuZHMucG9zaXRpb24ubGVmdCsgJ3B4JztcclxuICAgICAgICAgICAgaWYoY2wuc3R5bGUubGVmdCE9bGVmdFN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgY2wuc3R5bGUubGVmdCA9IGxlZnRTdHlsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0b3BTdHlsZT1ib3VuZHMucG9zaXRpb24udG9wICsgJ3B4JztcclxuICAgICAgICAgICAgaWYoY2wuc3R5bGUudG9wIT10b3BTdHlsZSkge1xyXG4gICAgICAgICAgICAgIGNsLnN0eWxlLnRvcCA9IHRvcFN0eWxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib3VuZHMuZGltZW5zaW9uLndpZHRoKSB7XHJcbiAgICAgICAgICAgIGxldCBpbnRXPU1hdGguZmxvb3IoYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZWRyYXcpIHtcclxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBzZXQgd2lkdGggb2YgYmFja2dyb3VuZCBjYW52YXMgKGNhdXNlcyBmbGlja2VyIG9uIHN0YXJ0IHJlbmRlcilcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgY2k9MTtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbCA9IHRoaXMuY2FudmFzTGF5ZXJzW2NpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZihjbC53aWR0aCE9aW50Vykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2wud2lkdGggPSBpbnRXO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgd1N0ciA9IGludFcudG9TdHJpbmcoKSArICdweCc7XHJcbiAgICAgICAgICAgIGZvcihsZXQgY2k9MDtjaTx0aGlzLmNhbnZhc0xheWVycy5sZW5ndGg7Y2krKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgaWYoY2wuc3R5bGUud2lkdGghPXdTdHIpIHtcclxuICAgICAgICAgICAgICAgICAgY2wuc3R5bGUud2lkdGggPSB3U3RyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib3VuZHMuZGltZW5zaW9uLmhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgaW50SD1NYXRoLmZsb29yKGJvdW5kcy5kaW1lbnNpb24uaGVpZ2h0KVxyXG4gICAgICAgICAgICBpZiAocmVkcmF3KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2V0IGhlaWdodCBvZiBiYWNrZ3JvdW5kIGNhbnZhcyAoY2F1c2VzIGZsaWNrZXIgb24gc3RhcnQgcmVuZGVyKVxyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBjaT0xO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsID0gdGhpcy5jYW52YXNMYXllcnNbY2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGNsLmhlaWdodCE9aW50SCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2wuaGVpZ2h0ID0gaW50SDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGhTdHIgPSBpbnRIICsgJ3B4JztcclxuICAgICAgICAgICAgZm9yKGxldCBjaT0wO2NpPHRoaXMuY2FudmFzTGF5ZXJzLmxlbmd0aDtjaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2wgPSB0aGlzLmNhbnZhc0xheWVyc1tjaV07XHJcbiAgICAgICAgICAgICAgICBpZihjbC5zdHlsZS5oZWlnaHQhPWhTdHIpe1xyXG4gICAgICAgICAgICAgICAgICBjbC5zdHlsZS5oZWlnaHQgPSBoU3RyO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vfSk7XHJcblxyXG5cclxuICAgIH1cclxufVxyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IGV4dGVuZHMgQmFzaWNBdWRpb0NhbnZhc0xheWVyQ29tcG9uZW50IHtcclxuICAgIF9wb2ludGVyUG9zaXRpb246TWFya2VyfG51bGw9bnVsbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgc2VsZWN0U3RhcnRYOm51bWJlcnxudWxsPW51bGw7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnYmcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBiZ0NhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgICBiZ0NhbnZhcyE6IEhUTUxDYW52YXNFbGVtZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2N1cnNvcicsIHsgc3RhdGljOiB0cnVlIH0pIGN1cnNvckNhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgICBjdXJzb3JDYW52YXMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZXVwKG1lOiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbW1pdChtZSlcclxuICB9XHJcblxyXG4gICAgbGF5b3V0Qm91bmRzKGJvdW5kczpSZWN0YW5nbGUsIHZpcnR1YWxEaW1lbnNpb246RGltZW5zaW9uLHJlZHJhdzogYm9vbGVhbixjbGVhcjpib29sZWFuPXRydWUpIHtcclxuICAgICAgICBzdXBlci5sYXlvdXRCb3VuZHMoYm91bmRzLHZpcnR1YWxEaW1lbnNpb24scmVkcmF3KVxyXG4gICAgICAgIGlmIChyZWRyYXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERyYXcoY2xlYXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzZXQgcG9pbnRlclBvc2l0aW9uKHBvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8bnVsbCl7XHJcbiAgICAgICAgdGhpcy5fcG9pbnRlclBvc2l0aW9uPXBvaW50ZXJQb3NpdGlvblxyXG4gICAgICAgIHRoaXMuZHJhd0N1cnNvckxheWVyKClcclxuICAgIH1cclxuXHJcbiAgICBfc2VsZWN0aW5nOiBTZWxlY3Rpb258bnVsbCA9bnVsbDtcclxuICAgIEBJbnB1dCgpIHNldCBzZWxlY3Rpbmcoc2VsZWN0aW5nOlNlbGVjdGlvbnwgbnVsbCl7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0aW5nPXNlbGVjdGluZ1xyXG4gICAgICAgIHRoaXMuZHJhd0JnKClcclxuICAgICAgICB0aGlzLmRyYXdDdXJzb3JMYXllcigpXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbGVjdGluZygpOlNlbGVjdGlvbnxudWxse1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RpbmdcclxuICAgIH1cclxuXHJcbiAgICBfc2VsZWN0aW9uOiBTZWxlY3Rpb258bnVsbCA9bnVsbFxyXG4gICAgQElucHV0KCkgc2V0IHNlbGVjdGlvbihzZWxlY3Rpb246U2VsZWN0aW9ufG51bGwpe1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbj1zZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpbmc9bnVsbDtcclxuICAgICAgICB0aGlzLmRyYXdCZygpXHJcbiAgICAgICAgdGhpcy5kcmF3Q3Vyc29yTGF5ZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIGdldCBzZWxlY3Rpb24oKTpTZWxlY3Rpb258bnVsbHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uXHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0aW9uU3RhcnQobWU6TW91c2VFdmVudCl7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RTdGFydFg9bWUub2Zmc2V0WDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Rpb25Db21taXQobWU6TW91c2VFdmVudCl7XHJcbiAgICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0U3RhcnRYIT1udWxsKSB7XHJcbiAgICAgICAgICB2cz1uZXcgVmlld1NlbGVjdGlvbih0aGlzLnNlbGVjdFN0YXJ0WCxtZS5vZmZzZXRYKVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RTdGFydFg9bnVsbDtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0KHZzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3Qgc3RhcnREcmF3KGNsZWFyOmJvb2xlYW4pOnZvaWQ7XHJcblxyXG4gICAgdXBkYXRlQ3Vyc29yQ2FudmFzKG1lOk1vdXNlRXZlbnQsc2hvd0N1cnNvclBvc2l0aW9uPXRydWUpe1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJzb3JDYW52YXMpIHtcclxuXHJcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBoID0gdGhpcy5jdXJzb3JDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmICghc2hvd0N1cnNvclBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNlbGVjdFN0YXJ0WCA9IG51bGxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsZWN0aW5nQ2hhbmdlKG51bGwpXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgaWYgKG1lKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RTdGFydFgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobnVsbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGluZ0NoYW5nZShuZXcgVmlld1NlbGVjdGlvbih0aGlzLnNlbGVjdFN0YXJ0WCwgbWUub2Zmc2V0WCkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd0N1cnNvclBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlclBvc2l0aW9uQ2hhbmdlZChtZS5vZmZzZXRYKVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJQb3NpdGlvbkNoYW5nZWQobnVsbClcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIHBvaW50ZXJQb3NpdGlvbkV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8TWFya2VyPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGluZ0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+KCk7XHJcblxyXG5cclxuICAgIHBvaW50ZXJQb3NpdGlvbkNoYW5nZWQoeFBvc2l0aW9uOm51bWJlcnwgbnVsbCl7XHJcbiAgICAgICAgbGV0IHBvaW50ZXJQb3NpdGlvbjpNYXJrZXJ8dW5kZWZpbmVkPXVuZGVmaW5lZDtcclxuICAgICAgICBpZih4UG9zaXRpb24pe1xyXG4gICAgICAgICAgICBwb2ludGVyUG9zaXRpb249bmV3IE1hcmtlcigpO1xyXG4gICAgICAgICAgICBsZXQgdnBYUG9zPXRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24oeFBvc2l0aW9uKTtcclxuICAgICAgICAgICAgaWYodnBYUG9zIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICBwb2ludGVyUG9zaXRpb24uZnJhbWVQb3NpdGlvbiA9dnBYUG9zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucG9pbnRlclBvc2l0aW9uRXZlbnRFbWl0dGVyLmVtaXQocG9pbnRlclBvc2l0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RpbmdDaGFuZ2Uodmlld1NlbDpWaWV3U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICBsZXQgbnM6U2VsZWN0aW9ufHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodmlld1NlbCkge1xyXG4gICAgICAgICAgICBsZXQgZnJhbWVTdGFydCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24odmlld1NlbC5zdGFydFgpXHJcbiAgICAgICAgICAgIGxldCBmcmFtZUVuZCA9IHRoaXMudmlld1BvcnRYUGl4ZWxUb0ZyYW1lUG9zaXRpb24odmlld1NlbC5lbmRYKVxyXG4gICAgICAgICAgICBpZih0aGlzLl9hdWRpb0RhdGEgJiYgZnJhbWVTdGFydCE9bnVsbCAmJiBmcmFtZUVuZCE9bnVsbCkge1xyXG4gICAgICAgICAgICAgICAgbnMgPSBuZXcgU2VsZWN0aW9uKHRoaXMuX2F1ZGlvRGF0YS5zYW1wbGVSYXRlLCBmcmFtZVN0YXJ0LCBmcmFtZUVuZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RpbmdFdmVudEVtaXR0ZXIuZW1pdChucylcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3Qodmlld1NlbDpWaWV3U2VsZWN0aW9ufCBudWxsKXtcclxuICAgICAgICBsZXQgbnM6U2VsZWN0aW9ufHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYodmlld1NlbCkge1xyXG4gICAgICAgICAgbGV0IGZyYW1lU3RhcnQgPSB0aGlzLnZpZXdQb3J0WFBpeGVsVG9GcmFtZVBvc2l0aW9uKHZpZXdTZWwuc3RhcnRYKVxyXG4gICAgICAgICAgbGV0IGZyYW1lRW5kID0gdGhpcy52aWV3UG9ydFhQaXhlbFRvRnJhbWVQb3NpdGlvbih2aWV3U2VsLmVuZFgpXHJcbiAgICAgICAgICAgIGlmKHRoaXMuX2F1ZGlvRGF0YSAmJiBmcmFtZVN0YXJ0IT1udWxsICYmIGZyYW1lRW5kIT1udWxsKSB7XHJcbiAgICAgICAgICAgICAgICBucyA9IG5ldyBTZWxlY3Rpb24odGhpcy5fYXVkaW9EYXRhLnNhbXBsZVJhdGUsIGZyYW1lU3RhcnQsIGZyYW1lRW5kKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRXZlbnRFbWl0dGVyLmVtaXQobnMpXHJcbiAgICB9XHJcblxyXG4gICAgdmlld1NlbGVjdGlvbigpOlZpZXdTZWxlY3Rpb258bnVsbHtcclxuICAgICAgbGV0IHZzOlZpZXdTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBsZXQgczpTZWxlY3Rpb258bnVsbD1udWxsO1xyXG4gICAgICBpZih0aGlzLl9zZWxlY3Rpbmcpe1xyXG4gICAgICAgIHM9dGhpcy5fc2VsZWN0aW5nXHJcbiAgICAgIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgfVxyXG4gICAgICBpZihzKXtcclxuICAgICAgICBsZXQgc2Y9cy5zdGFydEZyYW1lO1xyXG4gICAgICAgIGxldCBlZj1zLmVuZEZyYW1lO1xyXG4gICAgICAgIGxldCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgIGxldCB4ZT10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGVmKVxyXG4gICAgICAgICAgaWYoeHMhPW51bGwgJiYgeGUhPW51bGwpIHtcclxuICAgICAgICAgICAgICB2cyA9IG5ldyBWaWV3U2VsZWN0aW9uKHhzLCB4ZSlcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdnM7XHJcbiAgICB9XHJcblxyXG5cclxuICBkcmF3QmcoKXtcclxuICAgICAgaWYodGhpcy5iZ0NhbnZhcyAmJiB0aGlzLmJvdW5kcykge1xyXG4gICAgICAgICAgdGhpcy5iZ0NhbnZhcy5zdHlsZS5sZWZ0ID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5wb3NpdGlvbi5sZWZ0KS50b1N0cmluZygpICsgJ3B4JztcclxuICAgICAgICAgIHRoaXMuYmdDYW52YXMud2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLmRpbWVuc2lvbi53aWR0aCk7XHJcbiAgICAgICAgICB0aGlzLmJnQ2FudmFzLmhlaWdodCA9IE1hdGgucm91bmQodGhpcy5ib3VuZHMuZGltZW5zaW9uLmhlaWdodCk7XHJcbiAgICAgICAgbGV0IGcxID0gdGhpcy5iZ0NhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XHJcbiAgICAgICAgaWYgKGcxKSB7XHJcbiAgICAgICAgICBsZXQgdyA9IHRoaXMuYmdDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICBsZXQgaCA9IHRoaXMuYmdDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgZzEuY2xlYXJSZWN0KDAsIDAsIHcsIGgpO1xyXG4gICAgICAgICAgaWYodGhpcy5fYmdDb2xvcikge1xyXG4gICAgICAgICAgICBnMS5maWxsU3R5bGUgPSB0aGlzLl9iZ0NvbG9yO1xyXG4gICAgICAgICAgICBnMS5maWxsUmVjdCgwLCAwLCB3LCBoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCB2cyA9IHRoaXMudmlld1NlbGVjdGlvbigpXHJcbiAgICAgICAgICBpZiAodnMpIHtcclxuICAgICAgICAgICAgZzEuZmlsbFN0eWxlID0gdGhpcy5fc2VsZWN0Q29sb3I7XHJcbiAgICAgICAgICAgIGcxLmZpbGxSZWN0KHZzLnN0YXJ0WCwgMCwgdnMud2lkdGgoKSwgaCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgfVxyXG4gICAgZHJhd0N1cnNvckxheWVyKCl7XHJcbiAgICAgICAgaWYgKHRoaXMuY3Vyc29yQ2FudmFzKSB7XHJcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5jdXJzb3JDYW52YXMud2lkdGg7XHJcbiAgICAgICAgICAgIGxldCBoID0gdGhpcy5jdXJzb3JDYW52YXMuaGVpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgZyA9IHRoaXMuY3Vyc29yQ2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcclxuICAgICAgICAgICAgaWYoZykge1xyXG4gICAgICAgICAgICAgICAgZy5jbGVhclJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgICAgICAgICAgICAvLyBsZXQgczpTZWxlY3Rpb249bnVsbDtcclxuICAgICAgICAgICAgICAgIC8vIGlmKHRoaXMuX3NlbGVjdGluZyl7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcz10aGlzLl9zZWxlY3RpbmdcclxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKHRoaXMuX3NlbGVjdGlvbil7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgcz10aGlzLl9zZWxlY3Rpb25cclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgIC8vIGlmKHMpe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBzZj1zLnN0YXJ0RnJhbWVcclxuICAgICAgICAgICAgICAgIC8vICAgICBsZXQgZWY9cy5lbmRGcmFtZVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCB4cz10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKHNmKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCB4ZT10aGlzLmZyYW1lVG9WaWV3UG9ydFhQaXhlbFBvc2l0aW9uKGVmKVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBzdz14ZS14c1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGcuZmlsbFN0eWxlID0gJ3JnYmEoMCUsMCUsMTAwJSwyNSUpJztcclxuICAgICAgICAgICAgICAgIC8vICAgICBnLmZpbGxSZWN0KHhzLDAsc3csaCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5fcG9pbnRlclBvc2l0aW9uKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZyYW1lUG9zPXRoaXMuX3BvaW50ZXJQb3NpdGlvbi5mcmFtZVBvc2l0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZnJhbWVQb3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHhWaWV3UG9ydFBpeGVscG9zID0gdGhpcy5mcmFtZVRvVmlld1BvcnRYUGl4ZWxQb3NpdGlvbihmcmFtZVBvcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhWaWV3UG9ydFBpeGVscG9zKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlU3R5bGUgPSAneWVsbG93JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLm1vdmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmxpbmVUbyh4Vmlld1BvcnRQaXhlbHBvcywgaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnLmNsb3NlUGF0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuc3Ryb2tlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZm9udCA9ICcxNHB4IHNhbnMtc2VyaWYnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuZmlsbFN0eWxlID0gJ3llbGxvdyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5maWxsVGV4dChmcmFtZVBvcy50b1N0cmluZygpLCB4Vmlld1BvcnRQaXhlbHBvcyArIDIsIDUwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19
@@ -233,17 +233,32 @@ export class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
233
233
  }
234
234
  // Divider
235
235
  // left position
236
- this.dc.style.left = vbLeft + 'px';
236
+ let vbLeftStyl = vbLeft + 'px';
237
+ if (this.dc.style.left != vbLeftStyl) {
238
+ this.dc.style.left = vbLeftStyl;
239
+ }
237
240
  // top position
238
241
  const dTop = asH;
239
242
  const dTopStr = dTop + 'px';
240
- this.dc.style.top = dTopStr;
243
+ if (this.dc.style.top != dTopStr) {
244
+ this.dc.style.top = dTopStr;
245
+ }
241
246
  // width
242
- this.dc.style.width = vbWidth + 'px';
243
- this.dc.width = vbWidth;
247
+ let vbWidthStyle = vbWidth + 'px';
248
+ if (this.dc.style.width != vbWidthStyle) {
249
+ this.dc.style.width = vbWidthStyle;
250
+ }
251
+ if (this.dc.width != vbWidth) {
252
+ this.dc.width = vbWidth;
253
+ }
244
254
  // height
245
- this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;
246
- this.dc.style.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';
255
+ if (this.dc.height != AudioClipUIContainer.DIVIDER_PIXEL_SIZE) {
256
+ this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;
257
+ }
258
+ let divPixelSizeStyle = AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';
259
+ if (this.dc.style.height != divPixelSizeStyle) {
260
+ this.dc.style.height = divPixelSizeStyle;
261
+ }
247
262
  this.drawDivider();
248
263
  // Virtual dimension, only width is used
249
264
  let virtualDim = new Dimension(ceBcrIntW, 0);
@@ -269,7 +284,10 @@ export class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
269
284
  if (this._audioData) {
270
285
  if (this._fixFitToPanel) {
271
286
  // Set the virtual canvas width to the visible width
272
- this.ce.style.width = '100%';
287
+ if (this.ce.style.width != '100%') {
288
+ //console.log("set width to 100%");
289
+ this.ce.style.width = '100%';
290
+ }
273
291
  }
274
292
  else {
275
293
  if (this._xZoom) {
@@ -334,7 +352,7 @@ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
334
352
  <audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
335
353
  <audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
336
354
  </div>
337
- `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], components: [{ type: i1.AudioSignal, selector: "audio-signal" }, { type: i2.Sonagram, selector: "audio-sonagram" }] });
355
+ `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], components: [{ type: i1.AudioSignal, selector: "audio-signal" }, { type: i2.Sonagram, selector: "audio-sonagram" }] });
338
356
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: AudioClipUIContainer, decorators: [{
339
357
  type: Component,
340
358
  args: [{
@@ -358,6 +376,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
358
376
  position: relative; /* TODO container div position must not be 'static' (default) to act as reference for the canvases */
359
377
  box-sizing: border-box;
360
378
  transform: none;
379
+ overflow: hidden;
361
380
  }`, `canvas{
362
381
  top: 0;
363
382
  left: 0;
@@ -409,4 +428,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
409
428
  }], audioClip: [{
410
429
  type: Input
411
430
  }] } });
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ3NCLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFDN0UsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFBO0FBQ25DLE9BQU8sRUFBUyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFFdEMsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFckUsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFjeEUsQ0FBQztBQWdCRCxDQUFDO0FBRUYsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxtREFBbUQ7QUFDbkQsdUVBQXVFO0FBQ3ZFLG1DQUFtQztBQUNuQywwQkFBMEI7QUFDMUIsSUFBSTtBQUVKOzs7Ozs7O0dBT0c7QUErQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDhCQUE4QjtJQTBEdEUsWUFBb0IsR0FBZTtRQUNqQyxLQUFLLEVBQUUsQ0FBQTtRQURXLFFBQUcsR0FBSCxHQUFHLENBQVk7UUF6QzNCLGVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBQ3pDLFlBQU8sR0FBYyxJQUFJLENBQUM7UUFDMUIsY0FBUyxHQUFpQixJQUFJLENBQUM7UUFDL0IsY0FBUyxHQUFpQixJQUFJLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUN4RCx1QkFB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QVM7bUJBQUM7b0JBRVQsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRTs7Ozs7OztHQU9UO29CQUNELE1BQU0sRUFBRSxDQUFDOzs7Ozs7Ozs7OztJQVdQLEVBQUU7Ozs7Ozs7OztJQVNGLEVBQUU7Ozs7OztJQU1GLEVBQUU7Ozs7OztJQU1GLENBQUM7aUJBRUo7aUdBUXlDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJUSxLQUFLO3NCQUFsRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0YsRUFBRTtzQkFBM0MsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNELEVBQUU7c0JBQXhDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFNM0IscUJBQXFCO3NCQUE5QixNQUFNO2dCQStFUCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9CekMsU0FBUztzQkFEUixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVk1QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsb0JBQW9CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMk0xQyxTQUFTO3NCQURaLEtBQUs7Z0JBY0YsU0FBUztzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0LCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHtBdWRpb1NpZ25hbH0gZnJvbSAnLi9hdWRpb3NpZ25hbCdcclxuaW1wb3J0IHtTb25hZ3JhbX0gZnJvbSAnLi9zb25hZ3JhbSdcclxuaW1wb3J0IHtNYXJrZXIsIFBvaW50fSBmcm9tICcuL2NvbW1vbidcclxuXHJcbmltcG9ydCB7Q29tcG9uZW50LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Bvc2l0aW9uLERpbWVuc2lvbiwgUmVjdGFuZ2xlfSBmcm9tIFwiLi4vLi4vbWF0aC8yZC9nZW9tZXRyeVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2xpcCxTZWxlY3Rpb259IGZyb20gXCIuLi9wZXJzaXN0b3JcIjtcclxuaW1wb3J0IHtCYXNpY0F1ZGlvQ2FudmFzTGF5ZXJDb21wb25lbnR9IGZyb20gXCIuL2F1ZGlvX2NhbnZhc19sYXllcl9jb21wXCI7XHJcbmltcG9ydCB7RWxlbWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbXBpbGVyXCI7XHJcblxyXG4vKlxyXG4gIFJlc2l6ZU9ic2VydmVyIG5vdCB5ZXQgYXZhaWxhYmxlIGluIG9mZmljaWFsIFR5cGVzY3JpcHQgZGVjbGFyYXRpb25cclxuICBDcnJlYXRlZCBkZWNsYXJhdGlvbiBmcm9tIElETCB1bnRpbCBpdHMgYXZhaWxhYmxlLlxyXG4gIFNlZSBzcGVjczpcclxuICBodHRwczovL3d3dy53My5vcmcvVFIvcmVzaXplLW9ic2VydmVyXHJcblxyXG4gKi9cclxuXHJcbmludGVyZmFjZSBSZXNpemVPYnNlcnZlclNpemUge1xyXG4gIHJlYWRvbmx5IGlubGluZVNpemU6bnVtYmVyO1xyXG4gIHJlYWRvbmx5IGJsb2NrU2l6ZTpudW1iZXI7XHJcbn07XHJcblxyXG5kZWNsYXJlIGludGVyZmFjZSBSZXNpemVPYnNlcnZlckVudHJ5e1xyXG4gIHJlYWRvbmx5IHRhcmdldDogRWxlbWVudDtcclxuICByZWFkb25seSBjb250ZW50UmVjdDogRE9NUmVjdFJlYWRPbmx5IDtcclxuICByZWFkb25seSBib3JkZXJCb3hTaXplOiBBcnJheTxSZXNpemVPYnNlcnZlclNpemU+IDtcclxuICByZWFkb25seSBjb250ZW50Qm94U2l6ZTogQXJyYXk8UmVzaXplT2JzZXJ2ZXJTaXplPiA7XHJcbiAgcmVhZG9ubHkgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogQXJyYXk8UmVzaXplT2JzZXJ2ZXJTaXplPiA7XHJcbn1cclxuXHJcbmRlY2xhcmUgaW50ZXJmYWNlIFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2sge1xyXG4gIChlbnRyaWVzOiBBcnJheTxSZXNpemVPYnNlcnZlckVudHJ5Piwgb2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyKTp2b2lkO1xyXG59XHJcblxyXG5kZWNsYXJlIGVudW0gUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zIHtcclxuICBcImJvcmRlci1ib3hcIiwgXCJjb250ZW50LWJveFwiLCBcImRldmljZS1waXhlbC1jb250ZW50LWJveFwiXHJcbn07XHJcblxyXG4vLyAvLyBEZWNsYXJlIFJlc2l6ZW9ic2VydmVyXHJcbi8vIGRlY2xhcmUgY2xhc3MgUmVzaXplT2JzZXJ2ZXJ7XHJcbi8vICAgY29uc3RydWN0b3IoY2FsbGJhY2s6IFJlc2l6ZU9ic2VydmVyQ2FsbGJhY2spO1xyXG4vLyAgIG9ic2VydmU6IChlbDpFbGVtZW50LG9wdHM6IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB8IG51bGwpPT52b2lkO1xyXG4vLyAgIHVub2JzZXJ2ZTogKGVsOkVsZW1lbnQpPT52b2lkO1xyXG4vLyAgIGRpc2Nvbm5lY3Q6ICgpPT52b2lkO1xyXG4vLyB9XHJcblxyXG4vKlxyXG4gKiBDb250YWluZXIgY29tcG9uZW50IGZvciBhdWRpbyBkaXNwbGF5LlxyXG4gKiBUaGUgZGlzcGxheSBlbGVtZW50cyBhcmUgY2hpbGRyZW4gb2YgYSB2aXJ0dWFsIGNhbnZhcy4gVGhlIHZpcnR1YWwgY2FudmFzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGhhdmUgaGlnaCB6b29tIGZhY3RvcnMgd2l0aCB2ZXJ5IHdpZGUgdmlydHVhbCBhdWRpbyBkaXNwbGF5cy5cclxuICogT25seSB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSB2aXJ0dWFsIGNhbnZhcyBpcyBpbXBsZW1lbnRlZCBhcyBhIGJyb3dzZXIgY2FudmFzIGFuZCB0aGVyZWZvcmUgY29uc3VtaW5nIG1lbW9yeS5cclxuICogVGhlIHZpc2libGUgcGFydCBoYXMgdGhlIHNhbWUgd2lkdGggYXMgdGhlIHZpZXdwb3J0IG9mIHRoZSBzY3JvbGwgcGFuZSBwYXJlbnQuXHJcbiAqIFRoZSB2aXJ0dWFsIGNhbnZhcyBpdHNlbGYgaXMgaW1wbGVtZW50ZWQgYXMgYSBIVE1MIGRpdiBlbGVtZW50LlxyXG4gKiBUaGUgbGF5b3V0IG9mIHRoZSBjb21wb25lbnQgaXMgdXBkYXRlZCBvbiByZXNpemUgb2YgdGhlIHBhcmVudCBvciBjaGFuZ2VzIG9mIHRoZSB6b29tIGZhY3Rvci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cclxuICBzZWxlY3RvcjogJ2FwcC1hdWRpbycsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgI3ZpcnR1YWxDYW52YXM+XHJcbiAgICA8Y2FudmFzICNkaXZpZGVyIChtb3VzZWRvd24pPVwibW91c2Vkb3duKCRldmVudClcIiAobW91c2VvdmVyKT1cIm1vdXNlb3ZlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZSgkZXZlbnQpXCIgaGVpZ2h0PVwiMTBcIj48L2NhbnZhcz5cclxuICAgIDxhdWRpby1zaWduYWwgW3BvaW50ZXJQb3NpdGlvbl09XCJwb2ludGVyXCIgW3NlbGVjdGluZ109XCJzZWxlY3RpbmdcIiBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiIChwb2ludGVyUG9zaXRpb25FdmVudEVtaXR0ZXIpPVwicG9pbnRlclBvc2l0aW9uQ2hhbmdlZCgkZXZlbnQpXCIgKHNlbGVjdGluZ0V2ZW50RW1pdHRlcik9XCJzZWxlY3RpbmdDaGFuZ2VkKCRldmVudClcIiAoc2VsZWN0ZWRFdmVudEVtaXR0ZXIpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9hdWRpby1zaWduYWw+XHJcbiAgICA8YXVkaW8tc29uYWdyYW0gW3BvaW50ZXJQb3NpdGlvbl09XCJwb2ludGVyXCIgW3NlbGVjdGluZ109XCJzZWxlY3RpbmdcIiBbc2VsZWN0aW9uXT1cInNlbGVjdGlvblwiIChwb2ludGVyUG9zaXRpb25FdmVudEVtaXR0ZXIpPVwicG9pbnRlclBvc2l0aW9uQ2hhbmdlZCgkZXZlbnQpXCIgKHNlbGVjdGluZ0V2ZW50RW1pdHRlcik9XCJzZWxlY3RpbmdDaGFuZ2VkKCRldmVudClcIiAoc2VsZWN0ZWRFdmVudEVtaXR0ZXIpPVwic2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9hdWRpby1zb25hZ3JhbT5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYGRpdiB7XHJcblxyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIHRvcDogMDtcclxuICAgIGxlZnQ6IDA7XHJcbiAgICB3aWR0aDogMTAwJTtcclxuICAgIGhlaWdodDogMTAwJTtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogVE9ETyBjb250YWluZXIgZGl2IHBvc2l0aW9uIG11c3Qgbm90IGJlICdzdGF0aWMnIChkZWZhdWx0KSB0byBhY3QgYXMgcmVmZXJlbmNlIGZvciB0aGUgY2FudmFzZXMgKi9cclxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICB0cmFuc2Zvcm06IG5vbmU7XHJcbiAgfWAsIGBjYW52YXN7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBjdXJzb3I6IG5zLXJlc2l6ZTtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHpJbmRleDogMTtcclxuICAgIHRyYW5zZm9ybTogbm9uZTtcclxuICB9YCwgYGF1ZGlvLXNpZ25hbCB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgekluZGV4OiAxO1xyXG4gICAgdHJhbnNmb3JtOiBub25lO1xyXG4gIH1gLCBgYXVkaW8tc29uYWdyYW0ge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHpJbmRleDogMTtcclxuICAgIHRyYW5zZm9ybTogbm9uZTtcclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NsaXBVSUNvbnRhaW5lciBleHRlbmRzIEJhc2ljQXVkaW9DYW52YXNMYXllckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxBZnRlclZpZXdJbml0e1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBESVZJREVSX1BJWEVMX1NJWkUgPSAxMDtcclxuXHJcbiAgcGFyZW50RTogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIERpdmlkZXIgY2FudmFzXHJcbiAgQFZpZXdDaGlsZCgnZGl2aWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgZGMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgLy8gVmlydHVhbCBjb250YWluZXJcclxuICBAVmlld0NoaWxkKCd2aXJ0dWFsQ2FudmFzJywgeyBzdGF0aWM6IHRydWUgfSkgY2VSZWYhOiBFbGVtZW50UmVmO1xyXG4gIGNlITogSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQXVkaW9TaWduYWwsIHsgc3RhdGljOiB0cnVlIH0pIGFzITogQXVkaW9TaWduYWw7XHJcbiAgQFZpZXdDaGlsZChTb25hZ3JhbSwgeyBzdGF0aWM6IHRydWUgfSkgc28hOiBTb25hZ3JhbTtcclxuXHJcbiAgcHJpdmF0ZSBfYXVkaW9DbGlwOkF1ZGlvQ2xpcCB8IG51bGw9bnVsbDtcclxuICBwb2ludGVyOiBNYXJrZXJ8bnVsbD1udWxsO1xyXG4gIHNlbGVjdGluZzogU2VsZWN0aW9ufG51bGw9bnVsbDtcclxuICBzZWxlY3Rpb246IFNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG4gIHByaXZhdGUgX3BsYXlGcmFtZVBvc2l0aW9uOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0TW91c2VZOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGRyYWdTdGFydFk6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGl2aWRlclBvc2l0aW9uID0gMC41O1xyXG5cclxuICB1c2VyQWN0aW9uPWZhbHNlO1xyXG5cclxuICBwcml2YXRlIF94Wm9vbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIHBpeGVscyBwZXIgc2Vjb25kXHJcblxyXG4gIGdldCB4Wm9vbSgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl94Wm9vbTtcclxuICB9XHJcblxyXG4gIHNldCB4Wm9vbSh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgdGhpcy51c2VyQWN0aW9uPXRydWU7XHJcbiAgICB0aGlzLl94Wm9vbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5sYXlvdXQoKVxyXG4gICAgdGhpcy51c2VyQWN0aW9uPWZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gaWYgdHJ1ZSB0aGUgY29tcGxldGUgYXVkaW8gZmlsZSBpcyBzaG93biwgdGhlIGRpc3BsYXkgZml0cyB0byB0aGUgdmlzaWJsZSBwYW5lbCwgdGhlIHgtem9vbSBmYWN0b3IgaXMgdmFyaWFibGUsIHRoaXMgaXMgdGhlIGRlZmF1bHRcclxuICBwcml2YXRlIF9maXhGaXRUb1BhbmVsID0gdHJ1ZTtcclxuXHJcbiAgc2V0IGZpeEZpdFRvUGFuZWwodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ZpeEZpdFRvUGFuZWwgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvLyB3ZSBkb24ndCBuZWVkICBjbGlwIGJvdW5kc1xyXG4gICAgICB0aGlzLmJvdW5kcz1udWxsO1xyXG4gICAgICB0aGlzLl94Wm9vbSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBob2xkIGN1cnJlbnQgem9vbSB2YWx1ZVxyXG4gICAgICAvL3RoaXMuX3hab29tPXRoaXMuY2Uub2Zmc2V0V2lkdGgvdGhpcy5fYXVkaW9EYXRhLmR1cmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXlvdXQoKVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMucGFyZW50RSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY2UgPSB0aGlzLmNlUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmRjID0gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICBsZXQgaGVpZ2h0TGlzdGVuZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXJzOiBBcnJheTxNdXRhdGlvblJlY29yZD4sIG1vOiBNdXRhdGlvbk9ic2VydmVyKSA9PiB7XHJcblxyXG4gICAgICBsZXQgbGF5b3V0PWZhbHNlO1xyXG4gICAgICBtcnMuZm9yRWFjaCgobXI6IE11dGF0aW9uUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJBY3Rpb24gJiYgJ2F0dHJpYnV0ZXMnID09PSBtci50eXBlICYmICgnY2xhc3MnID09PSBtci5hdHRyaWJ1dGVOYW1lIHx8ICdzdHlsZScgPT09IG1yLmF0dHJpYnV0ZU5hbWUpKSB7XHJcbiAgICAgICAgICBsYXlvdXQ9dHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZihsYXlvdXQpe1xyXG4gICAgICAgIC8vIHJlLWxheW91dCByZXF1aXJlZFxyXG4gICAgICAgIHRoaXMubGF5b3V0KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaGVpZ2h0TGlzdGVuZXIub2JzZXJ2ZSh0aGlzLmNlLCB7YXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7XHJcbiAgICBoZWlnaHRMaXN0ZW5lci5vYnNlcnZlKHRoaXMuZGMsIHthdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWV9KTtcclxuXHJcbiAgICBsZXQgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMsb2JzKSA9PiB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJSZXNpemUgb2JzZXJ2ZWQ6XCIpO1xyXG4gICAgICBlbnRyaWVzLmZvckVhY2goKGUpPT57XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlLmNvbnRlbnRSZWN0LndpZHRoK1wieFwiK2UuY29udGVudFJlY3QuaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLmxheW91dCgpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNlKTtcclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvblJlc2l6ZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBtb3VzZW92ZXIobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZGl2aWRlckN1cnNvclBvc2l0aW9uKG1lLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIG1vdXNlbGVhdmUobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZGl2aWRlckN1cnNvclBvc2l0aW9uKG1lLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24obWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0TW91c2VZID0gbWUuY2xpZW50WTtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHRoaXMuZGMub2Zmc2V0VG9wO1xyXG4gICAgdGhpcy5kcmFnU3RhcnRNb3VzZVkgPSBtZS5jbGllbnRZO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZXVwKG1lOiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kcmFnU3RhcnRZICE9IG51bGwpIHtcclxuICAgICAgdGhpcy51c2VyQWN0aW9uPXRydWU7XHJcbiAgICAgIHRoaXMuZGl2aWRlckRyYWcobWUpO1xyXG4gICAgICB0aGlzLmxheW91dChmYWxzZSk7XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlckFjdGlvbj1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZW1vdmUobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRyYWdTdGFydFkgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnVzZXJBY3Rpb249dHJ1ZTtcclxuICAgICAgdGhpcy5kaXZpZGVyRHJhZyhtZSk7XHJcbiAgICAgIHRoaXMubGF5b3V0U2NhbGVkKCk7XHJcbiAgICAgIHRoaXMudXNlckFjdGlvbj10cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9pbnRlclBvc2l0aW9uQ2hhbmdlZChwcDpNYXJrZXIpe1xyXG4gICAgdGhpcy5wb2ludGVyPXBwXHJcbiAgfVxyXG5cclxuICBzZWxlY3RpbmdDaGFuZ2VkKHM6U2VsZWN0aW9ufCBudWxsKXtcclxuICAgIHRoaXMuc2VsZWN0aW5nPXNcclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbkNoYW5nZWQoczpTZWxlY3Rpb24pe1xyXG4gICAgdGhpcy5zZWxlY3Rpb249c1xyXG4gICAgaWYodGhpcy5fYXVkaW9DbGlwKXtcclxuICAgICAgdGhpcy5fYXVkaW9DbGlwLnNlbGVjdGlvbj1zXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGlvbkV2ZW50RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW52YXNNb3VzZVBvcyhjOiBIVE1MQ2FudmFzRWxlbWVudCwgZTogTW91c2VFdmVudCk6IFBvaW50IHtcclxuICAgIGNvbnN0IGNyID0gYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHggPSBlLnggLSBjci5sZWZ0O1xyXG4gICAgY29uc3QgeSA9IGUueSAtIGNyLnRvcDtcclxuICAgIHJldHVybiBuZXcgUG9pbnQoeCx5KTtcclxuICB9XHJcblxyXG4gIGRpdmlkZXJDdXJzb3JQb3NpdGlvbihlOiBNb3VzZUV2ZW50LCBzaG93OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5kYykge1xyXG5cclxuICAgICAgY29uc3QgdyA9IHRoaXMuZGMud2lkdGg7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLmRjLmhlaWdodDtcclxuICAgICAgY29uc3QgZyA9IHRoaXMuZGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgIGNvbnN0IHBwID0gdGhpcy5jYW52YXNNb3VzZVBvcyh0aGlzLmRjLCBlKTtcclxuICAgICAgY29uc3Qgb2ZmWCA9IGUub2Zmc2V0WCAtIHRoaXMuZGMub2Zmc2V0TGVmdDtcclxuICAgICAgY29uc3Qgb2ZmWSA9IGUub2Zmc2V0WSAtIHRoaXMuZGMub2Zmc2V0VG9wO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpdmlkZXJEcmFnKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRjICYmIHRoaXMuZHJhZ1N0YXJ0TW91c2VZICYmIHRoaXMuZHJhZ1N0YXJ0WSkge1xyXG5cclxuICAgICAgY29uc3QgZHJhZ09mZnNldCA9IGUuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0TW91c2VZO1xyXG4gICAgICBjb25zdCBjZUhlaWdodCA9IHRoaXMuY2Uub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgbGV0IG5ld1RvcCA9ICh0aGlzLmRyYWdTdGFydFkgKyBkcmFnT2Zmc2V0KTtcclxuICAgICAgaWYgKG5ld1RvcCA8IDApIHtcclxuICAgICAgICBuZXdUb3AgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdUb3AgPiBjZUhlaWdodCAtIEF1ZGlvQ2xpcFVJQ29udGFpbmVyLkRJVklERVJfUElYRUxfU0laRSkge1xyXG4gICAgICAgIG5ld1RvcCA9IGNlSGVpZ2h0IC0gQXVkaW9DbGlwVUlDb250YWluZXIuRElWSURFUl9QSVhFTF9TSVpFO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGMuc3R5bGUudG9wID0gbmV3VG9wLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgICB0aGlzLmRpdmlkZXJQb3NpdGlvbiA9ICh0aGlzLmRjLm9mZnNldFRvcCArIEF1ZGlvQ2xpcFVJQ29udGFpbmVyLkRJVklERVJfUElYRUxfU0laRSAvIDIpIC8gY2VIZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLmRpdmlkZXJQb3NpdGlvbiA+IDEuMCkge1xyXG4gICAgICAgIHRoaXMuZGl2aWRlclBvc2l0aW9uID0gMS4wO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRpdmlkZXJQb3NpdGlvbiA8IDAuMCkge1xyXG4gICAgICAgIHRoaXMuZGl2aWRlclBvc2l0aW9uID0gMC4wO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJhd0RpdmlkZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBkcmF3RGl2aWRlcigpIHtcclxuICAgIGNvbnN0IHcgPSB0aGlzLmRjLndpZHRoO1xyXG4gICAgY29uc3QgaCA9IHRoaXMuZGMuaGVpZ2h0O1xyXG4gICAgY29uc3QgZyA9IHRoaXMuZGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGlmIChnICYmIHc+MTAgJiYgaD49MSkge1xyXG4gICAgICBnLmZpbGxTdHlsZSA9ICd3aGl0ZSc7XHJcbiAgICAgIGcuZmlsbFJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgIGcuZmlsbFN0eWxlID0gJ2JsYWNrJztcclxuICAgICAgZy5maWxsUmVjdCg1LCA1LCB3IC0gMTAsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpcEJvdW5kcyhjbGlwQm91bmRzOiBSZWN0YW5nbGUpIHtcclxuICAgIHRoaXMuYm91bmRzID0gY2xpcEJvdW5kcztcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBjdXJyZW50WFpvb20oKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBsZXQgeHogPSB0aGlzLl94Wm9vbTtcclxuICAgIGlmICh4ej09bnVsbCAmJiB0aGlzLl9hdWRpb0RhdGEpIHtcclxuICAgICAgbGV0IG93ID0gdGhpcy5jZS5vZmZzZXRXaWR0aDtcclxuICAgICAgaWYgKG93IDwgMSkge1xyXG4gICAgICAgIC8vIGF0IGxlYXN0IG9uZSBwaXhlbCB3aWR0aCB0byBhdm9pZCB4LXpvb20gemVybyB2YWx1ZXNcclxuICAgICAgICBvdyA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgeHogPSBvdyAvIHRoaXMuX2F1ZGlvRGF0YS5kdXJhdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiB4ejtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xheW91dChjbGVhcjogYm9vbGVhbiwgcmVkcmF3OiBib29sZWFuKSB7XHJcbiAgICBsZXQgY2VCY3IgPSB0aGlzLmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIGNvbnN0IGNlQmNySW50VyA9IE1hdGguZmxvb3IoY2VCY3Iud2lkdGgpO1xyXG4gICAgY29uc3QgY2VCY3JJbnRIID0gTWF0aC5mbG9vcihjZUJjci5oZWlnaHQpO1xyXG5cclxuICAgIC8vIGhlaWdodCBhdmFpbGFibGUgZm9yIHBsdWdpbnMgKGF1ZGlvc2lnbmFsIGFuZCBzb25hZ3JhbSlcclxuICAgIGxldCBwc0ggPSBjZUJjckludEggLSBBdWRpb0NsaXBVSUNvbnRhaW5lci5ESVZJREVSX1BJWEVMX1NJWkU7XHJcbiAgICBpZiAocHNIIDwgMCkge1xyXG4gICAgICBwc0ggPSAwO1xyXG4gICAgfVxyXG4gICAgLy8gYXVkaW8gc2lnbmFsIGhlaWdodFxyXG4gICAgY29uc3QgYXNIID0gTWF0aC5yb3VuZChwc0ggKiB0aGlzLmRpdmlkZXJQb3NpdGlvbik7XHJcblxyXG4gICAgLy8gc29uYWdyYW0gaGVpZ2h0IChyZXN0OiBhdmFpbGFibGUgaGVpZ2h0IG1pbnVzIGRpdmlkZXIgaGVpZ2h0IG1pbnVzIGF1ZGlvc2lnbmFsIGhlaWdodClcclxuICAgIGxldCBzb0ggPSBjZUJjckludEggLSBBdWRpb0NsaXBVSUNvbnRhaW5lci5ESVZJREVSX1BJWEVMX1NJWkUgLSBhc0g7XHJcbiAgICBpZiAoc29IIDwgMCkge1xyXG4gICAgICBzb0ggPSAwO1xyXG4gICAgfVxyXG5cclxuICAvLyBzb25hZ3JhbSB0b3AgcG9zaXRpb25cclxuICAgIGNvbnN0IHNvVG9wID0gYXNIICsgQXVkaW9DbGlwVUlDb250YWluZXIuRElWSURFUl9QSVhFTF9TSVpFO1xyXG5cclxuICAgIC8vIFZpc2libGUgYm91bmRzXHJcbiAgICAvLyBsZWZ0IHBvc2l0aW9uXHJcbiAgICBsZXQgdmJMZWZ0ID0gMDtcclxuICAgIC8vIHdpZHRoXHJcbiAgICBsZXQgdmJXaWR0aCA9IGNlQmNySW50VztcclxuICAgIGlmICghdGhpcy5fZml4Rml0VG9QYW5lbCAmJiB0aGlzLmJvdW5kcykge1xyXG4gICAgICB2YkxlZnQgPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLnBvc2l0aW9uLmxlZnQpO1xyXG4gICAgICB2YldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERpdmlkZXJcclxuICAgIC8vIGxlZnQgcG9zaXRpb25cclxuICAgIHRoaXMuZGMuc3R5bGUubGVmdCA9IHZiTGVmdCArICdweCc7XHJcbiAgICAvLyB0b3AgcG9zaXRpb25cclxuICAgIGNvbnN0IGRUb3AgPSBhc0g7XHJcbiAgICBjb25zdCBkVG9wU3RyID0gZFRvcCArICdweCc7XHJcbiAgICB0aGlzLmRjLnN0eWxlLnRvcCA9IGRUb3BTdHI7XHJcbiAgICAvLyB3aWR0aFxyXG4gICAgdGhpcy5kYy5zdHlsZS53aWR0aCA9IHZiV2lkdGggKyAncHgnO1xyXG4gICAgdGhpcy5kYy53aWR0aCA9IHZiV2lkdGg7XHJcbiAgICAvLyBoZWlnaHRcclxuICAgIHRoaXMuZGMuaGVpZ2h0ID0gQXVkaW9DbGlwVUlDb250YWluZXIuRElWSURFUl9QSVhFTF9TSVpFO1xyXG4gICAgdGhpcy5kYy5zdHlsZS5oZWlnaHQgPSBBdWRpb0NsaXBVSUNvbnRhaW5lci5ESVZJREVSX1BJWEVMX1NJWkUudG9TdHJpbmcoKSArICdweCc7XHJcblxyXG4gICAgdGhpcy5kcmF3RGl2aWRlcigpO1xyXG5cclxuXHJcbiAgICAvLyBWaXJ0dWFsIGRpbWVuc2lvbiwgb25seSB3aWR0aCBpcyB1c2VkXHJcbiAgICBsZXQgdmlydHVhbERpbSA9IG5ldyBEaW1lbnNpb24oY2VCY3JJbnRXLCAwKVxyXG5cclxuICAgIC8vIFZpc2libGUgYm91bmRzIG9mIGNvbnRhaW5lclxyXG4gICAgbGV0IGJyID0gbmV3IFJlY3RhbmdsZShuZXcgUG9zaXRpb24odmJMZWZ0LCAwKSwgbmV3IERpbWVuc2lvbih2YldpZHRoLCBjZUJjckludEgpKTtcclxuXHJcbiAgICAvLyBTZXQgY29udGFpbmVyIGJvdW5kc1xyXG4gICAgdGhpcy5sYXlvdXRCb3VuZHMoYnIsIHZpcnR1YWxEaW0sIGZhbHNlKTtcclxuXHJcbiAgICAvLyBWaXNpYmxlIGJvdW5kcyBvZiBhdWRpb3NpZ25hbFxyXG4gICAgbGV0IGFzUiA9IG5ldyBSZWN0YW5nbGUobmV3IFBvc2l0aW9uKHZiTGVmdCwgMCksIG5ldyBEaW1lbnNpb24odmJXaWR0aCwgYXNIKSk7XHJcblxyXG4gICAgLy8gU2V0IGF1ZGlvc2lnbmFsIGJvdW5kc1xyXG4gICAgdGhpcy5hcy5sYXlvdXRCb3VuZHMoYXNSLCB2aXJ0dWFsRGltLCByZWRyYXcsIGNsZWFyKTtcclxuXHJcbiAgICAvLyBWaXNpYmxlIGJvdW5kcyBvZiBzb25hZ3JhbVxyXG4gICAgbGV0IHNvUiA9IG5ldyBSZWN0YW5nbGUobmV3IFBvc2l0aW9uKHZiTGVmdCwgc29Ub3ApLCBuZXcgRGltZW5zaW9uKHZiV2lkdGgsIHNvSCkpO1xyXG5cclxuICAgIC8vIFNldCBzb25hZ3JhbSBib3VuZHNcclxuICAgIHRoaXMuc28ubGF5b3V0Qm91bmRzKHNvUiwgdmlydHVhbERpbSwgcmVkcmF3LCBjbGVhcik7XHJcbiAgfVxyXG5cclxuICBsYXlvdXRTY2FsZWQoKSB7XHJcbiAgICB0aGlzLl9sYXlvdXQoZmFsc2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGxheW91dChjbGVhcj10cnVlKSB7XHJcblxyXG4gICAgaWYodGhpcy5jZSAmJiB0aGlzLmRjKSB7XHJcbiAgICAgIGNvbnN0IGNsaWVudFc9dGhpcy5jZS5jbGllbnRXaWR0aDtcclxuICAgICAgaWYodGhpcy5fYXVkaW9EYXRhKXtcclxuICAgICAgICBpZih0aGlzLl9maXhGaXRUb1BhbmVsKSB7XHJcbiAgICAgICAgICAvLyBTZXQgdGhlIHZpcnR1YWwgY2FudmFzIHdpZHRoIHRvIHRoZSB2aXNpYmxlIHdpZHRoXHJcbiAgICAgICAgICB0aGlzLmNlLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3hab29tKSB7XHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdmlydHVhbCBjYW52YXMgd2lkdGggYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgdXNlciBzZWxlY3RlZCB4Wm9vbSB2YWx1ZVxyXG4gICAgICAgICAgICBjb25zdCBuZXdDbFcgPSBNYXRoLnJvdW5kKCB0aGlzLl94Wm9vbSp0aGlzLl9hdWRpb0RhdGEuZHVyYXRpb24gKTtcclxuICAgICAgICAgICAgdGhpcy5jZS5zdHlsZS53aWR0aCA9IG5ld0NsVyArICdweCc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZpcnR1YWwgY2FudmFzIHdpZHRoIHRvIHRoZSB2aXNpYmxlIHdpZHRoIG9ubHlcclxuICAgICAgICAgICAgdGhpcy5jZS5zdHlsZS53aWR0aCA9IGNsaWVudFcgKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9sYXlvdXQoY2xlYXIsdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBhdWRpb0RhdGEoYXVkaW9EYXRhOiBBdWRpb0J1ZmZlciB8IG51bGwpIHtcclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1udWxsXHJcbiAgICB0aGlzLl9hdWRpb0RhdGE9YXVkaW9EYXRhO1xyXG4gICAgdGhpcy5hcy5zZXREYXRhKGF1ZGlvRGF0YSk7XHJcbiAgICB0aGlzLnNvLnNldERhdGEoYXVkaW9EYXRhKTtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9EYXRhKCk6QXVkaW9CdWZmZXJ8bnVsbHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0RhdGFcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGF1ZGlvQ2xpcChhdWRpb0NsaXA6IEF1ZGlvQ2xpcCB8IG51bGwpIHtcclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1hdWRpb0NsaXBcclxuICAgICAgbGV0IGF1ZGlvRGF0YTpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICBsZXQgc2VsOlNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgICAgIGlmKGF1ZGlvQ2xpcCkge1xyXG4gICAgICAgIGF1ZGlvRGF0YSA9IGF1ZGlvQ2xpcC5idWZmZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1ZGlvQ2xpcCkge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW9DbGlwLmFkZFNlbGVjdGlvbk9ic2VydmVyKChjbGlwKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gY2xpcC5zZWxlY3Rpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWw9YXVkaW9DbGlwLnNlbGVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hdWRpb0RhdGEgPSBhdWRpb0RhdGE7XHJcbiAgICAgIHRoaXMuYXMuc2V0RGF0YSh0aGlzLl9hdWRpb0RhdGEpO1xyXG4gICAgICB0aGlzLnNvLnNldERhdGEodGhpcy5fYXVkaW9EYXRhKTtcclxuICAgICAgdGhpcy5zZWxlY3Rpbmc9bnVsbFxyXG4gICAgICB0aGlzLnNlbGVjdGlvbj1zZWxcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGxheUZyYW1lUG9zaXRpb24oKTogbnVtYmVyIHxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGF5RnJhbWVQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBwbGF5RnJhbWVQb3NpdGlvbihwbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyfG51bGwpIHtcclxuICAgIHRoaXMuX3BsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb247XHJcbiAgICB0aGlzLmFzLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb247XHJcbiAgICB0aGlzLnNvLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb247XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
431
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3VpL2NvbnRhaW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ3NCLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFDN0UsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFBO0FBQ25DLE9BQU8sRUFBUyxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFFdEMsT0FBTyxFQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFDLFFBQVEsRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFckUsT0FBTyxFQUFDLDhCQUE4QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7Ozs7QUFjeEUsQ0FBQztBQWdCRCxDQUFDO0FBRUYsNEJBQTRCO0FBQzVCLGdDQUFnQztBQUNoQyxtREFBbUQ7QUFDbkQsdUVBQXVFO0FBQ3ZFLG1DQUFtQztBQUNuQywwQkFBMEI7QUFDMUIsSUFBSTtBQUVKOzs7Ozs7O0dBT0c7QUFnREgsTUFBTSxPQUFPLG9CQUFxQixTQUFRLDhCQUE4QjtJQTBEdEUsWUFBb0IsR0FBZTtRQUNqQyxLQUFLLEVBQUUsQ0FBQTtRQURXLFFBQUcsR0FBSCxHQUFHLENBQVk7UUF6QzNCLGVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBQ3pDLFlBQU8sR0FBYyxJQUFJLENBQUM7UUFDMUIsY0FBUyxHQUFpQixJQUFJLENBQUM7UUFDL0IsY0FBUyxHQUFpQixJQUFJLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUN4RCx1QkFB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QU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsRUFBRTtzQkFBeEMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU0zQixxQkFBcUI7c0JBQTlCLE1BQU07Z0JBK0VQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBb0J6QyxTQUFTO3NCQURSLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWTVDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE4TjFDLFNBQVM7c0JBRFosS0FBSztnQkFjRixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEVsZW1lbnRSZWYsIEFmdGVyVmlld0luaXQsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQge0F1ZGlvU2lnbmFsfSBmcm9tICcuL2F1ZGlvc2lnbmFsJ1xyXG5pbXBvcnQge1NvbmFncmFtfSBmcm9tICcuL3NvbmFncmFtJ1xyXG5pbXBvcnQge01hcmtlciwgUG9pbnR9IGZyb20gJy4vY29tbW9uJ1xyXG5cclxuaW1wb3J0IHtDb21wb25lbnQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UG9zaXRpb24sRGltZW5zaW9uLCBSZWN0YW5nbGV9IGZyb20gXCIuLi8uLi9tYXRoLzJkL2dlb21ldHJ5XCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwLFNlbGVjdGlvbn0gZnJvbSBcIi4uL3BlcnNpc3RvclwiO1xyXG5pbXBvcnQge0Jhc2ljQXVkaW9DYW52YXNMYXllckNvbXBvbmVudH0gZnJvbSBcIi4vYXVkaW9fY2FudmFzX2xheWVyX2NvbXBcIjtcclxuaW1wb3J0IHtFbGVtZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tcGlsZXJcIjtcclxuXHJcbi8qXHJcbiAgUmVzaXplT2JzZXJ2ZXIgbm90IHlldCBhdmFpbGFibGUgaW4gb2ZmaWNpYWwgVHlwZXNjcmlwdCBkZWNsYXJhdGlvblxyXG4gIENycmVhdGVkIGRlY2xhcmF0aW9uIGZyb20gSURMIHVudGlsIGl0cyBhdmFpbGFibGUuXHJcbiAgU2VlIHNwZWNzOlxyXG4gIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9yZXNpemUtb2JzZXJ2ZXJcclxuXHJcbiAqL1xyXG5cclxuaW50ZXJmYWNlIFJlc2l6ZU9ic2VydmVyU2l6ZSB7XHJcbiAgcmVhZG9ubHkgaW5saW5lU2l6ZTpudW1iZXI7XHJcbiAgcmVhZG9ubHkgYmxvY2tTaXplOm51bWJlcjtcclxufTtcclxuXHJcbmRlY2xhcmUgaW50ZXJmYWNlIFJlc2l6ZU9ic2VydmVyRW50cnl7XHJcbiAgcmVhZG9ubHkgdGFyZ2V0OiBFbGVtZW50O1xyXG4gIHJlYWRvbmx5IGNvbnRlbnRSZWN0OiBET01SZWN0UmVhZE9ubHkgO1xyXG4gIHJlYWRvbmx5IGJvcmRlckJveFNpemU6IEFycmF5PFJlc2l6ZU9ic2VydmVyU2l6ZT4gO1xyXG4gIHJlYWRvbmx5IGNvbnRlbnRCb3hTaXplOiBBcnJheTxSZXNpemVPYnNlcnZlclNpemU+IDtcclxuICByZWFkb25seSBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBBcnJheTxSZXNpemVPYnNlcnZlclNpemU+IDtcclxufVxyXG5cclxuZGVjbGFyZSBpbnRlcmZhY2UgUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayB7XHJcbiAgKGVudHJpZXM6IEFycmF5PFJlc2l6ZU9ic2VydmVyRW50cnk+LCBvYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIpOnZvaWQ7XHJcbn1cclxuXHJcbmRlY2xhcmUgZW51bSBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMge1xyXG4gIFwiYm9yZGVyLWJveFwiLCBcImNvbnRlbnQtYm94XCIsIFwiZGV2aWNlLXBpeGVsLWNvbnRlbnQtYm94XCJcclxufTtcclxuXHJcbi8vIC8vIERlY2xhcmUgUmVzaXplb2JzZXJ2ZXJcclxuLy8gZGVjbGFyZSBjbGFzcyBSZXNpemVPYnNlcnZlcntcclxuLy8gICBjb25zdHJ1Y3RvcihjYWxsYmFjazogUmVzaXplT2JzZXJ2ZXJDYWxsYmFjayk7XHJcbi8vICAgb2JzZXJ2ZTogKGVsOkVsZW1lbnQsb3B0czogUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zIHwgbnVsbCk9PnZvaWQ7XHJcbi8vICAgdW5vYnNlcnZlOiAoZWw6RWxlbWVudCk9PnZvaWQ7XHJcbi8vICAgZGlzY29ubmVjdDogKCk9PnZvaWQ7XHJcbi8vIH1cclxuXHJcbi8qXHJcbiAqIENvbnRhaW5lciBjb21wb25lbnQgZm9yIGF1ZGlvIGRpc3BsYXkuXHJcbiAqIFRoZSBkaXNwbGF5IGVsZW1lbnRzIGFyZSBjaGlsZHJlbiBvZiBhIHZpcnR1YWwgY2FudmFzLiBUaGUgdmlydHVhbCBjYW52YXMgbWFrZXMgaXQgcG9zc2libGUgdG8gaGF2ZSBoaWdoIHpvb20gZmFjdG9ycyB3aXRoIHZlcnkgd2lkZSB2aXJ0dWFsIGF1ZGlvIGRpc3BsYXlzLlxyXG4gKiBPbmx5IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIHZpcnR1YWwgY2FudmFzIGlzIGltcGxlbWVudGVkIGFzIGEgYnJvd3NlciBjYW52YXMgYW5kIHRoZXJlZm9yZSBjb25zdW1pbmcgbWVtb3J5LlxyXG4gKiBUaGUgdmlzaWJsZSBwYXJ0IGhhcyB0aGUgc2FtZSB3aWR0aCBhcyB0aGUgdmlld3BvcnQgb2YgdGhlIHNjcm9sbCBwYW5lIHBhcmVudC5cclxuICogVGhlIHZpcnR1YWwgY2FudmFzIGl0c2VsZiBpcyBpbXBsZW1lbnRlZCBhcyBhIEhUTUwgZGl2IGVsZW1lbnQuXHJcbiAqIFRoZSBsYXlvdXQgb2YgdGhlIGNvbXBvbmVudCBpcyB1cGRhdGVkIG9uIHJlc2l6ZSBvZiB0aGUgcGFyZW50IG9yIGNoYW5nZXMgb2YgdGhlIHpvb20gZmFjdG9yLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGlvJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGRpdiAjdmlydHVhbENhbnZhcz5cclxuICAgIDxjYW52YXMgI2RpdmlkZXIgKG1vdXNlZG93bik9XCJtb3VzZWRvd24oJGV2ZW50KVwiIChtb3VzZW92ZXIpPVwibW91c2VvdmVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZWxlYXZlKCRldmVudClcIiBoZWlnaHQ9XCIxMFwiPjwvY2FudmFzPlxyXG4gICAgPGF1ZGlvLXNpZ25hbCBbcG9pbnRlclBvc2l0aW9uXT1cInBvaW50ZXJcIiBbc2VsZWN0aW5nXT1cInNlbGVjdGluZ1wiIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCIgKHBvaW50ZXJQb3NpdGlvbkV2ZW50RW1pdHRlcik9XCJwb2ludGVyUG9zaXRpb25DaGFuZ2VkKCRldmVudClcIiAoc2VsZWN0aW5nRXZlbnRFbWl0dGVyKT1cInNlbGVjdGluZ0NoYW5nZWQoJGV2ZW50KVwiIChzZWxlY3RlZEV2ZW50RW1pdHRlcik9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIj48L2F1ZGlvLXNpZ25hbD5cclxuICAgIDxhdWRpby1zb25hZ3JhbSBbcG9pbnRlclBvc2l0aW9uXT1cInBvaW50ZXJcIiBbc2VsZWN0aW5nXT1cInNlbGVjdGluZ1wiIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCIgKHBvaW50ZXJQb3NpdGlvbkV2ZW50RW1pdHRlcik9XCJwb2ludGVyUG9zaXRpb25DaGFuZ2VkKCRldmVudClcIiAoc2VsZWN0aW5nRXZlbnRFbWl0dGVyKT1cInNlbGVjdGluZ0NoYW5nZWQoJGV2ZW50KVwiIChzZWxlY3RlZEV2ZW50RW1pdHRlcik9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIj48L2F1ZGlvLXNvbmFncmFtPlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtgZGl2IHtcclxuXHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAwO1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBUT0RPIGNvbnRhaW5lciBkaXYgcG9zaXRpb24gbXVzdCBub3QgYmUgJ3N0YXRpYycgKGRlZmF1bHQpIHRvIGFjdCBhcyByZWZlcmVuY2UgZm9yIHRoZSBjYW52YXNlcyAqL1xyXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgIHRyYW5zZm9ybTogbm9uZTtcclxuICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgfWAsIGBjYW52YXN7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgd2lkdGg6IDA7XHJcbiAgICBoZWlnaHQ6IDA7XHJcbiAgICBjdXJzb3I6IG5zLXJlc2l6ZTtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHpJbmRleDogMTtcclxuICAgIHRyYW5zZm9ybTogbm9uZTtcclxuICB9YCwgYGF1ZGlvLXNpZ25hbCB7XHJcbiAgICB0b3A6IDA7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgekluZGV4OiAxO1xyXG4gICAgdHJhbnNmb3JtOiBub25lO1xyXG4gIH1gLCBgYXVkaW8tc29uYWdyYW0ge1xyXG4gICAgdG9wOiAwO1xyXG4gICAgbGVmdDogMDtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHpJbmRleDogMTtcclxuICAgIHRyYW5zZm9ybTogbm9uZTtcclxuICB9YF1cclxuXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NsaXBVSUNvbnRhaW5lciBleHRlbmRzIEJhc2ljQXVkaW9DYW52YXNMYXllckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxBZnRlclZpZXdJbml0e1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBESVZJREVSX1BJWEVMX1NJWkUgPSAxMDtcclxuXHJcbiAgcGFyZW50RTogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIC8vIERpdmlkZXIgY2FudmFzXHJcbiAgQFZpZXdDaGlsZCgnZGl2aWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY7XHJcbiAgZGMhOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgLy8gVmlydHVhbCBjb250YWluZXJcclxuICBAVmlld0NoaWxkKCd2aXJ0dWFsQ2FudmFzJywgeyBzdGF0aWM6IHRydWUgfSkgY2VSZWYhOiBFbGVtZW50UmVmO1xyXG4gIGNlITogSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoQXVkaW9TaWduYWwsIHsgc3RhdGljOiB0cnVlIH0pIGFzITogQXVkaW9TaWduYWw7XHJcbiAgQFZpZXdDaGlsZChTb25hZ3JhbSwgeyBzdGF0aWM6IHRydWUgfSkgc28hOiBTb25hZ3JhbTtcclxuXHJcbiAgcHJpdmF0ZSBfYXVkaW9DbGlwOkF1ZGlvQ2xpcCB8IG51bGw9bnVsbDtcclxuICBwb2ludGVyOiBNYXJrZXJ8bnVsbD1udWxsO1xyXG4gIHNlbGVjdGluZzogU2VsZWN0aW9ufG51bGw9bnVsbDtcclxuICBzZWxlY3Rpb246IFNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uPigpO1xyXG4gIHByaXZhdGUgX3BsYXlGcmFtZVBvc2l0aW9uOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgZHJhZ1N0YXJ0TW91c2VZOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGRyYWdTdGFydFk6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgZGl2aWRlclBvc2l0aW9uID0gMC41O1xyXG5cclxuICB1c2VyQWN0aW9uPWZhbHNlO1xyXG5cclxuICBwcml2YXRlIF94Wm9vbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIHBpeGVscyBwZXIgc2Vjb25kXHJcblxyXG4gIGdldCB4Wm9vbSgpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl94Wm9vbTtcclxuICB9XHJcblxyXG4gIHNldCB4Wm9vbSh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgdGhpcy51c2VyQWN0aW9uPXRydWU7XHJcbiAgICB0aGlzLl94Wm9vbSA9IHZhbHVlO1xyXG4gICAgdGhpcy5sYXlvdXQoKVxyXG4gICAgdGhpcy51c2VyQWN0aW9uPWZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8gaWYgdHJ1ZSB0aGUgY29tcGxldGUgYXVkaW8gZmlsZSBpcyBzaG93biwgdGhlIGRpc3BsYXkgZml0cyB0byB0aGUgdmlzaWJsZSBwYW5lbCwgdGhlIHgtem9vbSBmYWN0b3IgaXMgdmFyaWFibGUsIHRoaXMgaXMgdGhlIGRlZmF1bHRcclxuICBwcml2YXRlIF9maXhGaXRUb1BhbmVsID0gdHJ1ZTtcclxuXHJcbiAgc2V0IGZpeEZpdFRvUGFuZWwodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ZpeEZpdFRvUGFuZWwgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvLyB3ZSBkb24ndCBuZWVkICBjbGlwIGJvdW5kc1xyXG4gICAgICB0aGlzLmJvdW5kcz1udWxsO1xyXG4gICAgICB0aGlzLl94Wm9vbSA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBob2xkIGN1cnJlbnQgem9vbSB2YWx1ZVxyXG4gICAgICAvL3RoaXMuX3hab29tPXRoaXMuY2Uub2Zmc2V0V2lkdGgvdGhpcy5fYXVkaW9EYXRhLmR1cmF0aW9uO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sYXlvdXQoKVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKClcclxuICAgIHRoaXMucGFyZW50RSA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuY2UgPSB0aGlzLmNlUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmRjID0gdGhpcy5jYW52YXNSZWYubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgICBsZXQgaGVpZ2h0TGlzdGVuZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXJzOiBBcnJheTxNdXRhdGlvblJlY29yZD4sIG1vOiBNdXRhdGlvbk9ic2VydmVyKSA9PiB7XHJcblxyXG4gICAgICBsZXQgbGF5b3V0PWZhbHNlO1xyXG4gICAgICBtcnMuZm9yRWFjaCgobXI6IE11dGF0aW9uUmVjb3JkKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXJBY3Rpb24gJiYgJ2F0dHJpYnV0ZXMnID09PSBtci50eXBlICYmICgnY2xhc3MnID09PSBtci5hdHRyaWJ1dGVOYW1lIHx8ICdzdHlsZScgPT09IG1yLmF0dHJpYnV0ZU5hbWUpKSB7XHJcbiAgICAgICAgICBsYXlvdXQ9dHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZihsYXlvdXQpe1xyXG4gICAgICAgIC8vIHJlLWxheW91dCByZXF1aXJlZFxyXG4gICAgICAgIHRoaXMubGF5b3V0KGZhbHNlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaGVpZ2h0TGlzdGVuZXIub2JzZXJ2ZSh0aGlzLmNlLCB7YXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7XHJcbiAgICBoZWlnaHRMaXN0ZW5lci5vYnNlcnZlKHRoaXMuZGMsIHthdHRyaWJ1dGVzOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIGNoYXJhY3RlckRhdGE6IHRydWV9KTtcclxuXHJcbiAgICBsZXQgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMsb2JzKSA9PiB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJSZXNpemUgb2JzZXJ2ZWQ6XCIpO1xyXG4gICAgICBlbnRyaWVzLmZvckVhY2goKGUpPT57XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZyhlLmNvbnRlbnRSZWN0LndpZHRoK1wieFwiK2UuY29udGVudFJlY3QuaGVpZ2h0KTtcclxuICAgICAgICB0aGlzLmxheW91dCgpO1xyXG4gICAgICB9KVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmNlKTtcclxuXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvblJlc2l6ZShldmVudDogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBtb3VzZW92ZXIobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZGl2aWRlckN1cnNvclBvc2l0aW9uKG1lLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIG1vdXNlbGVhdmUobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZGl2aWRlckN1cnNvclBvc2l0aW9uKG1lLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBtb3VzZWRvd24obWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0TW91c2VZID0gbWUuY2xpZW50WTtcclxuICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHRoaXMuZGMub2Zmc2V0VG9wO1xyXG4gICAgdGhpcy5kcmFnU3RhcnRNb3VzZVkgPSBtZS5jbGllbnRZO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZXVwKG1lOiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kcmFnU3RhcnRZICE9IG51bGwpIHtcclxuICAgICAgdGhpcy51c2VyQWN0aW9uPXRydWU7XHJcbiAgICAgIHRoaXMuZGl2aWRlckRyYWcobWUpO1xyXG4gICAgICB0aGlzLmxheW91dChmYWxzZSk7XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IG51bGw7XHJcbiAgICAgIHRoaXMudXNlckFjdGlvbj1mYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZW1vdmUobWU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRyYWdTdGFydFkgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnVzZXJBY3Rpb249dHJ1ZTtcclxuICAgICAgdGhpcy5kaXZpZGVyRHJhZyhtZSk7XHJcbiAgICAgIHRoaXMubGF5b3V0U2NhbGVkKCk7XHJcbiAgICAgIHRoaXMudXNlckFjdGlvbj10cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9pbnRlclBvc2l0aW9uQ2hhbmdlZChwcDpNYXJrZXIpe1xyXG4gICAgdGhpcy5wb2ludGVyPXBwXHJcbiAgfVxyXG5cclxuICBzZWxlY3RpbmdDaGFuZ2VkKHM6U2VsZWN0aW9ufCBudWxsKXtcclxuICAgIHRoaXMuc2VsZWN0aW5nPXNcclxuICB9XHJcblxyXG4gIHNlbGVjdGlvbkNoYW5nZWQoczpTZWxlY3Rpb24pe1xyXG4gICAgdGhpcy5zZWxlY3Rpb249c1xyXG4gICAgaWYodGhpcy5fYXVkaW9DbGlwKXtcclxuICAgICAgdGhpcy5fYXVkaW9DbGlwLnNlbGVjdGlvbj1zXHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGlvbkV2ZW50RW1pdHRlci5lbWl0KHRoaXMuc2VsZWN0aW9uKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYW52YXNNb3VzZVBvcyhjOiBIVE1MQ2FudmFzRWxlbWVudCwgZTogTW91c2VFdmVudCk6IFBvaW50IHtcclxuICAgIGNvbnN0IGNyID0gYy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGNvbnN0IHggPSBlLnggLSBjci5sZWZ0O1xyXG4gICAgY29uc3QgeSA9IGUueSAtIGNyLnRvcDtcclxuICAgIHJldHVybiBuZXcgUG9pbnQoeCx5KTtcclxuICB9XHJcblxyXG4gIGRpdmlkZXJDdXJzb3JQb3NpdGlvbihlOiBNb3VzZUV2ZW50LCBzaG93OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5kYykge1xyXG5cclxuICAgICAgY29uc3QgdyA9IHRoaXMuZGMud2lkdGg7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLmRjLmhlaWdodDtcclxuICAgICAgY29uc3QgZyA9IHRoaXMuZGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuXHJcbiAgICAgIGNvbnN0IHBwID0gdGhpcy5jYW52YXNNb3VzZVBvcyh0aGlzLmRjLCBlKTtcclxuICAgICAgY29uc3Qgb2ZmWCA9IGUub2Zmc2V0WCAtIHRoaXMuZGMub2Zmc2V0TGVmdDtcclxuICAgICAgY29uc3Qgb2ZmWSA9IGUub2Zmc2V0WSAtIHRoaXMuZGMub2Zmc2V0VG9wO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpdmlkZXJEcmFnKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRjICYmIHRoaXMuZHJhZ1N0YXJ0TW91c2VZICYmIHRoaXMuZHJhZ1N0YXJ0WSkge1xyXG5cclxuICAgICAgY29uc3QgZHJhZ09mZnNldCA9IGUuY2xpZW50WSAtIHRoaXMuZHJhZ1N0YXJ0TW91c2VZO1xyXG4gICAgICBjb25zdCBjZUhlaWdodCA9IHRoaXMuY2Uub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgbGV0IG5ld1RvcCA9ICh0aGlzLmRyYWdTdGFydFkgKyBkcmFnT2Zmc2V0KTtcclxuICAgICAgaWYgKG5ld1RvcCA8IDApIHtcclxuICAgICAgICBuZXdUb3AgPSAwO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChuZXdUb3AgPiBjZUhlaWdodCAtIEF1ZGlvQ2xpcFVJQ29udGFpbmVyLkRJVklERVJfUElYRUxfU0laRSkge1xyXG4gICAgICAgIG5ld1RvcCA9IGNlSGVpZ2h0IC0gQXVkaW9DbGlwVUlDb250YWluZXIuRElWSURFUl9QSVhFTF9TSVpFO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGMuc3R5bGUudG9wID0gbmV3VG9wLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgICB0aGlzLmRpdmlkZXJQb3NpdGlvbiA9ICh0aGlzLmRjLm9mZnNldFRvcCArIEF1ZGlvQ2xpcFVJQ29udGFpbmVyLkRJVklERVJfUElYRUxfU0laRSAvIDIpIC8gY2VIZWlnaHQ7XHJcbiAgICAgIGlmICh0aGlzLmRpdmlkZXJQb3NpdGlvbiA+IDEuMCkge1xyXG4gICAgICAgIHRoaXMuZGl2aWRlclBvc2l0aW9uID0gMS4wO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmRpdmlkZXJQb3NpdGlvbiA8IDAuMCkge1xyXG4gICAgICAgIHRoaXMuZGl2aWRlclBvc2l0aW9uID0gMC4wO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJhd0RpdmlkZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBkcmF3RGl2aWRlcigpIHtcclxuICAgIGNvbnN0IHcgPSB0aGlzLmRjLndpZHRoO1xyXG4gICAgY29uc3QgaCA9IHRoaXMuZGMuaGVpZ2h0O1xyXG4gICAgY29uc3QgZyA9IHRoaXMuZGMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgIGlmIChnICYmIHc+MTAgJiYgaD49MSkge1xyXG4gICAgICBnLmZpbGxTdHlsZSA9ICd3aGl0ZSc7XHJcbiAgICAgIGcuZmlsbFJlY3QoMCwgMCwgdywgaCk7XHJcbiAgICAgIGcuZmlsbFN0eWxlID0gJ2JsYWNrJztcclxuICAgICAgZy5maWxsUmVjdCg1LCA1LCB3IC0gMTAsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xpcEJvdW5kcyhjbGlwQm91bmRzOiBSZWN0YW5nbGUpIHtcclxuICAgIHRoaXMuYm91bmRzID0gY2xpcEJvdW5kcztcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBjdXJyZW50WFpvb20oKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBsZXQgeHogPSB0aGlzLl94Wm9vbTtcclxuICAgIGlmICh4ej09bnVsbCAmJiB0aGlzLl9hdWRpb0RhdGEpIHtcclxuICAgICAgbGV0IG93ID0gdGhpcy5jZS5vZmZzZXRXaWR0aDtcclxuICAgICAgaWYgKG93IDwgMSkge1xyXG4gICAgICAgIC8vIGF0IGxlYXN0IG9uZSBwaXhlbCB3aWR0aCB0byBhdm9pZCB4LXpvb20gemVybyB2YWx1ZXNcclxuICAgICAgICBvdyA9IDE7XHJcbiAgICAgIH1cclxuICAgICAgeHogPSBvdyAvIHRoaXMuX2F1ZGlvRGF0YS5kdXJhdGlvbjtcclxuICAgIH1cclxuICAgIHJldHVybiB4ejtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xheW91dChjbGVhcjogYm9vbGVhbiwgcmVkcmF3OiBib29sZWFuKSB7XHJcbiAgICBsZXQgY2VCY3IgPSB0aGlzLmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIGNvbnN0IGNlQmNySW50VyA9IE1hdGguZmxvb3IoY2VCY3Iud2lkdGgpO1xyXG4gICAgY29uc3QgY2VCY3JJbnRIID0gTWF0aC5mbG9vcihjZUJjci5oZWlnaHQpO1xyXG5cclxuICAgIC8vIGhlaWdodCBhdmFpbGFibGUgZm9yIHBsdWdpbnMgKGF1ZGlvc2lnbmFsIGFuZCBzb25hZ3JhbSlcclxuICAgIGxldCBwc0ggPSBjZUJjckludEggLSBBdWRpb0NsaXBVSUNvbnRhaW5lci5ESVZJREVSX1BJWEVMX1NJWkU7XHJcbiAgICBpZiAocHNIIDwgMCkge1xyXG4gICAgICBwc0ggPSAwO1xyXG4gICAgfVxyXG4gICAgLy8gYXVkaW8gc2lnbmFsIGhlaWdodFxyXG4gICAgY29uc3QgYXNIID0gTWF0aC5yb3VuZChwc0ggKiB0aGlzLmRpdmlkZXJQb3NpdGlvbik7XHJcblxyXG4gICAgLy8gc29uYWdyYW0gaGVpZ2h0IChyZXN0OiBhdmFpbGFibGUgaGVpZ2h0IG1pbnVzIGRpdmlkZXIgaGVpZ2h0IG1pbnVzIGF1ZGlvc2lnbmFsIGhlaWdodClcclxuICAgIGxldCBzb0ggPSBjZUJjckludEggLSBBdWRpb0NsaXBVSUNvbnRhaW5lci5ESVZJREVSX1BJWEVMX1NJWkUgLSBhc0g7XHJcbiAgICBpZiAoc29IIDwgMCkge1xyXG4gICAgICBzb0ggPSAwO1xyXG4gICAgfVxyXG5cclxuICAvLyBzb25hZ3JhbSB0b3AgcG9zaXRpb25cclxuICAgIGNvbnN0IHNvVG9wID0gYXNIICsgQXVkaW9DbGlwVUlDb250YWluZXIuRElWSURFUl9QSVhFTF9TSVpFO1xyXG5cclxuICAgIC8vIFZpc2libGUgYm91bmRzXHJcbiAgICAvLyBsZWZ0IHBvc2l0aW9uXHJcbiAgICBsZXQgdmJMZWZ0ID0gMDtcclxuICAgIC8vIHdpZHRoXHJcbiAgICBsZXQgdmJXaWR0aCA9IGNlQmNySW50VztcclxuICAgIGlmICghdGhpcy5fZml4Rml0VG9QYW5lbCAmJiB0aGlzLmJvdW5kcykge1xyXG4gICAgICB2YkxlZnQgPSBNYXRoLnJvdW5kKHRoaXMuYm91bmRzLnBvc2l0aW9uLmxlZnQpO1xyXG4gICAgICB2YldpZHRoID0gTWF0aC5yb3VuZCh0aGlzLmJvdW5kcy5kaW1lbnNpb24ud2lkdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIERpdmlkZXJcclxuICAgIC8vIGxlZnQgcG9zaXRpb25cclxuICAgIGxldCB2YkxlZnRTdHlsID0gdmJMZWZ0ICsgJ3B4JztcclxuICAgIGlmICh0aGlzLmRjLnN0eWxlLmxlZnQgIT0gdmJMZWZ0U3R5bCkge1xyXG4gICAgICB0aGlzLmRjLnN0eWxlLmxlZnQgPSB2YkxlZnRTdHlsO1xyXG4gICAgfVxyXG4gICAgLy8gdG9wIHBvc2l0aW9uXHJcbiAgICBjb25zdCBkVG9wID0gYXNIO1xyXG4gICAgY29uc3QgZFRvcFN0ciA9IGRUb3AgKyAncHgnO1xyXG4gICAgaWYgKHRoaXMuZGMuc3R5bGUudG9wICE9IGRUb3BTdHIpIHtcclxuICAgICAgdGhpcy5kYy5zdHlsZS50b3AgPSBkVG9wU3RyO1xyXG4gICAgfVxyXG4gICAgLy8gd2lkdGhcclxuICAgIGxldCB2YldpZHRoU3R5bGUgPSB2YldpZHRoICsgJ3B4JztcclxuICAgIGlmICh0aGlzLmRjLnN0eWxlLndpZHRoICE9IHZiV2lkdGhTdHlsZSkge1xyXG4gICAgICB0aGlzLmRjLnN0eWxlLndpZHRoID0gdmJXaWR0aFN0eWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGMud2lkdGggIT0gdmJXaWR0aCkge1xyXG4gICAgICB0aGlzLmRjLndpZHRoID0gdmJXaWR0aDtcclxuICAgIH1cclxuICAgIC8vIGhlaWdodFxyXG4gICAgaWYodGhpcy5kYy5oZWlnaHQhPUF1ZGlvQ2xpcFVJQ29udGFpbmVyLkRJVklERVJfUElYRUxfU0laRSkge1xyXG4gICAgICB0aGlzLmRjLmhlaWdodCA9IEF1ZGlvQ2xpcFVJQ29udGFpbmVyLkRJVklERVJfUElYRUxfU0laRTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGl2UGl4ZWxTaXplU3R5bGU9QXVkaW9DbGlwVUlDb250YWluZXIuRElWSURFUl9QSVhFTF9TSVpFLnRvU3RyaW5nKCkgKyAncHgnO1xyXG4gICAgaWYodGhpcy5kYy5zdHlsZS5oZWlnaHQhPWRpdlBpeGVsU2l6ZVN0eWxlKSB7XHJcbiAgICAgIHRoaXMuZGMuc3R5bGUuaGVpZ2h0ID0gZGl2UGl4ZWxTaXplU3R5bGU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kcmF3RGl2aWRlcigpO1xyXG5cclxuXHJcbiAgICAvLyBWaXJ0dWFsIGRpbWVuc2lvbiwgb25seSB3aWR0aCBpcyB1c2VkXHJcbiAgICBsZXQgdmlydHVhbERpbSA9IG5ldyBEaW1lbnNpb24oY2VCY3JJbnRXLCAwKVxyXG5cclxuICAgIC8vIFZpc2libGUgYm91bmRzIG9mIGNvbnRhaW5lclxyXG4gICAgbGV0IGJyID0gbmV3IFJlY3RhbmdsZShuZXcgUG9zaXRpb24odmJMZWZ0LCAwKSwgbmV3IERpbWVuc2lvbih2YldpZHRoLCBjZUJjckludEgpKTtcclxuXHJcbiAgICAvLyBTZXQgY29udGFpbmVyIGJvdW5kc1xyXG4gICAgdGhpcy5sYXlvdXRCb3VuZHMoYnIsIHZpcnR1YWxEaW0sIGZhbHNlKTtcclxuXHJcbiAgICAvLyBWaXNpYmxlIGJvdW5kcyBvZiBhdWRpb3NpZ25hbFxyXG4gICAgbGV0IGFzUiA9IG5ldyBSZWN0YW5nbGUobmV3IFBvc2l0aW9uKHZiTGVmdCwgMCksIG5ldyBEaW1lbnNpb24odmJXaWR0aCwgYXNIKSk7XHJcblxyXG4gICAgLy8gU2V0IGF1ZGlvc2lnbmFsIGJvdW5kc1xyXG4gICAgdGhpcy5hcy5sYXlvdXRCb3VuZHMoYXNSLCB2aXJ0dWFsRGltLCByZWRyYXcsIGNsZWFyKTtcclxuXHJcbiAgICAvLyBWaXNpYmxlIGJvdW5kcyBvZiBzb25hZ3JhbVxyXG4gICAgbGV0IHNvUiA9IG5ldyBSZWN0YW5nbGUobmV3IFBvc2l0aW9uKHZiTGVmdCwgc29Ub3ApLCBuZXcgRGltZW5zaW9uKHZiV2lkdGgsIHNvSCkpO1xyXG5cclxuICAgIC8vIFNldCBzb25hZ3JhbSBib3VuZHNcclxuICAgIHRoaXMuc28ubGF5b3V0Qm91bmRzKHNvUiwgdmlydHVhbERpbSwgcmVkcmF3LCBjbGVhcik7XHJcbiAgfVxyXG5cclxuICBsYXlvdXRTY2FsZWQoKSB7XHJcbiAgICB0aGlzLl9sYXlvdXQoZmFsc2UsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGxheW91dChjbGVhcj10cnVlKSB7XHJcblxyXG4gICAgaWYodGhpcy5jZSAmJiB0aGlzLmRjKSB7XHJcbiAgICAgIGNvbnN0IGNsaWVudFc9dGhpcy5jZS5jbGllbnRXaWR0aDtcclxuICAgICAgaWYodGhpcy5fYXVkaW9EYXRhKXtcclxuICAgICAgICBpZih0aGlzLl9maXhGaXRUb1BhbmVsKSB7XHJcbiAgICAgICAgICAvLyBTZXQgdGhlIHZpcnR1YWwgY2FudmFzIHdpZHRoIHRvIHRoZSB2aXNpYmxlIHdpZHRoXHJcbiAgICAgICAgICBpZih0aGlzLmNlLnN0eWxlLndpZHRoIT0nMTAwJScpIHtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInNldCB3aWR0aCB0byAxMDAlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmNlLnN0eWxlLndpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgaWYgKHRoaXMuX3hab29tKSB7XHJcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdmlydHVhbCBjYW52YXMgd2lkdGggYWNjb3JkaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgdXNlciBzZWxlY3RlZCB4Wm9vbSB2YWx1ZVxyXG4gICAgICAgICAgICBjb25zdCBuZXdDbFcgPSBNYXRoLnJvdW5kKCB0aGlzLl94Wm9vbSp0aGlzLl9hdWRpb0RhdGEuZHVyYXRpb24gKTtcclxuICAgICAgICAgICAgdGhpcy5jZS5zdHlsZS53aWR0aCA9IG5ld0NsVyArICdweCc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIHZpcnR1YWwgY2FudmFzIHdpZHRoIHRvIHRoZSB2aXNpYmxlIHdpZHRoIG9ubHlcclxuICAgICAgICAgICAgdGhpcy5jZS5zdHlsZS53aWR0aCA9IGNsaWVudFcgKyAncHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9sYXlvdXQoY2xlYXIsdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBhdWRpb0RhdGEoYXVkaW9EYXRhOiBBdWRpb0J1ZmZlciB8IG51bGwpIHtcclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1udWxsXHJcbiAgICB0aGlzLl9hdWRpb0RhdGE9YXVkaW9EYXRhO1xyXG4gICAgdGhpcy5hcy5zZXREYXRhKGF1ZGlvRGF0YSk7XHJcbiAgICB0aGlzLnNvLnNldERhdGEoYXVkaW9EYXRhKTtcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9EYXRhKCk6QXVkaW9CdWZmZXJ8bnVsbHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0RhdGFcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGF1ZGlvQ2xpcChhdWRpb0NsaXA6IEF1ZGlvQ2xpcCB8IG51bGwpIHtcclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1hdWRpb0NsaXBcclxuICAgICAgbGV0IGF1ZGlvRGF0YTpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICBsZXQgc2VsOlNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgICAgIGlmKGF1ZGlvQ2xpcCkge1xyXG4gICAgICAgIGF1ZGlvRGF0YSA9IGF1ZGlvQ2xpcC5idWZmZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuX2F1ZGlvQ2xpcCkge1xyXG4gICAgICAgICAgdGhpcy5fYXVkaW9DbGlwLmFkZFNlbGVjdGlvbk9ic2VydmVyKChjbGlwKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gY2xpcC5zZWxlY3Rpb25cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWw9YXVkaW9DbGlwLnNlbGVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9hdWRpb0RhdGEgPSBhdWRpb0RhdGE7XHJcbiAgICAgIHRoaXMuYXMuc2V0RGF0YSh0aGlzLl9hdWRpb0RhdGEpO1xyXG4gICAgICB0aGlzLnNvLnNldERhdGEodGhpcy5fYXVkaW9EYXRhKTtcclxuICAgICAgdGhpcy5zZWxlY3Rpbmc9bnVsbFxyXG4gICAgICB0aGlzLnNlbGVjdGlvbj1zZWxcclxuICAgIHRoaXMubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgcGxheUZyYW1lUG9zaXRpb24oKTogbnVtYmVyIHxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9wbGF5RnJhbWVQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBwbGF5RnJhbWVQb3NpdGlvbihwbGF5RnJhbWVQb3NpdGlvbjogbnVtYmVyfG51bGwpIHtcclxuICAgIHRoaXMuX3BsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb247XHJcbiAgICB0aGlzLmFzLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb247XHJcbiAgICB0aGlzLnNvLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb247XHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
@@ -1,2 +1,2 @@
1
- export const VERSION = '2.21.7';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzIuMjEuNyciXX0=
1
+ export const VERSION = '2.21.8';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByLm1vZHVsZS52ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL3Nwci5tb2R1bGUudmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFZFUlNJT049JzIuMjEuOCciXX0=
@@ -3185,38 +3185,50 @@ class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
3185
3185
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
3186
3186
  let cl = this.canvasLayers[ci];
3187
3187
  const leftStyle = bounds.position.left + 'px';
3188
+ if (cl.style.left != leftStyle) {
3189
+ cl.style.left = leftStyle;
3190
+ }
3188
3191
  const topStyle = bounds.position.top + 'px';
3189
- cl.style.left = leftStyle;
3190
- cl.style.top = topStyle;
3192
+ if (cl.style.top != topStyle) {
3193
+ cl.style.top = topStyle;
3194
+ }
3191
3195
  }
3192
3196
  if (bounds.dimension.width) {
3193
- let intW = Math.round(bounds.dimension.width);
3197
+ let intW = Math.floor(bounds.dimension.width);
3194
3198
  if (redraw) {
3195
3199
  // Do not set width of background canvas (causes flicker on start render)
3196
3200
  for (let ci = 1; ci < this.canvasLayers.length; ci++) {
3197
3201
  let cl = this.canvasLayers[ci];
3198
- cl.width = intW;
3202
+ if (cl.width != intW) {
3203
+ cl.width = intW;
3204
+ }
3199
3205
  }
3200
3206
  }
3201
3207
  let wStr = intW.toString() + 'px';
3202
3208
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
3203
3209
  let cl = this.canvasLayers[ci];
3204
- cl.style.width = wStr;
3210
+ if (cl.style.width != wStr) {
3211
+ cl.style.width = wStr;
3212
+ }
3205
3213
  }
3206
3214
  }
3207
3215
  if (bounds.dimension.height) {
3208
- let intH = Math.round(bounds.dimension.height);
3216
+ let intH = Math.floor(bounds.dimension.height);
3209
3217
  if (redraw) {
3210
3218
  // Do not set height of background canvas (causes flicker on start render)
3211
3219
  for (let ci = 1; ci < this.canvasLayers.length; ci++) {
3212
3220
  let cl = this.canvasLayers[ci];
3213
- cl.height = intH;
3221
+ if (cl.height != intH) {
3222
+ cl.height = intH;
3223
+ }
3214
3224
  }
3215
3225
  }
3216
3226
  let hStr = intH + 'px';
3217
3227
  for (let ci = 0; ci < this.canvasLayers.length; ci++) {
3218
3228
  let cl = this.canvasLayers[ci];
3219
- cl.style.height = hStr;
3229
+ if (cl.style.height != hStr) {
3230
+ cl.style.height = hStr;
3231
+ }
3220
3232
  }
3221
3233
  }
3222
3234
  //});
@@ -4946,17 +4958,32 @@ class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
4946
4958
  }
4947
4959
  // Divider
4948
4960
  // left position
4949
- this.dc.style.left = vbLeft + 'px';
4961
+ let vbLeftStyl = vbLeft + 'px';
4962
+ if (this.dc.style.left != vbLeftStyl) {
4963
+ this.dc.style.left = vbLeftStyl;
4964
+ }
4950
4965
  // top position
4951
4966
  const dTop = asH;
4952
4967
  const dTopStr = dTop + 'px';
4953
- this.dc.style.top = dTopStr;
4968
+ if (this.dc.style.top != dTopStr) {
4969
+ this.dc.style.top = dTopStr;
4970
+ }
4954
4971
  // width
4955
- this.dc.style.width = vbWidth + 'px';
4956
- this.dc.width = vbWidth;
4972
+ let vbWidthStyle = vbWidth + 'px';
4973
+ if (this.dc.style.width != vbWidthStyle) {
4974
+ this.dc.style.width = vbWidthStyle;
4975
+ }
4976
+ if (this.dc.width != vbWidth) {
4977
+ this.dc.width = vbWidth;
4978
+ }
4957
4979
  // height
4958
- this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;
4959
- this.dc.style.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';
4980
+ if (this.dc.height != AudioClipUIContainer.DIVIDER_PIXEL_SIZE) {
4981
+ this.dc.height = AudioClipUIContainer.DIVIDER_PIXEL_SIZE;
4982
+ }
4983
+ let divPixelSizeStyle = AudioClipUIContainer.DIVIDER_PIXEL_SIZE.toString() + 'px';
4984
+ if (this.dc.style.height != divPixelSizeStyle) {
4985
+ this.dc.style.height = divPixelSizeStyle;
4986
+ }
4960
4987
  this.drawDivider();
4961
4988
  // Virtual dimension, only width is used
4962
4989
  let virtualDim = new Dimension(ceBcrIntW, 0);
@@ -4982,7 +5009,10 @@ class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
4982
5009
  if (this._audioData) {
4983
5010
  if (this._fixFitToPanel) {
4984
5011
  // Set the virtual canvas width to the visible width
4985
- this.ce.style.width = '100%';
5012
+ if (this.ce.style.width != '100%') {
5013
+ //console.log("set width to 100%");
5014
+ this.ce.style.width = '100%';
5015
+ }
4986
5016
  }
4987
5017
  else {
4988
5018
  if (this._xZoom) {
@@ -5047,7 +5077,7 @@ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
5047
5077
  <audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
5048
5078
  <audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
5049
5079
  </div>
5050
- `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], components: [{ type: AudioSignal, selector: "audio-signal" }, { type: Sonagram, selector: "audio-sonagram" }] });
5080
+ `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], components: [{ type: AudioSignal, selector: "audio-signal" }, { type: Sonagram, selector: "audio-sonagram" }] });
5051
5081
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImport: i0, type: AudioClipUIContainer, decorators: [{
5052
5082
  type: Component,
5053
5083
  args: [{
@@ -5071,6 +5101,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
5071
5101
  position: relative; /* TODO container div position must not be 'static' (default) to act as reference for the canvases */
5072
5102
  box-sizing: border-box;
5073
5103
  transform: none;
5104
+ overflow: hidden;
5074
5105
  }`, `canvas{
5075
5106
  top: 0;
5076
5107
  left: 0;
@@ -10397,7 +10428,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.1", ngImpor
10397
10428
  }]
10398
10429
  }] });
10399
10430
 
10400
- const VERSION = '2.21.7';
10431
+ const VERSION = '2.21.8';
10401
10432
 
10402
10433
  /*
10403
10434
  * Public API Surface of speechrecorderng