otimus-library 0.1.99 → 0.2.1

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.
@@ -5,56 +5,94 @@ export class OcTooltipDirective {
5
5
  this.elRef = elRef;
6
6
  this.renderer = renderer;
7
7
  this.content = '';
8
- this.side = 'bottom';
8
+ this.side = 'mouse';
9
9
  this.created = false;
10
+ this.tooltip = null;
11
+ this.mouseingInterval = null;
10
12
  }
11
13
  createToolTip() {
12
14
  if (this.created) {
13
- return;
15
+ return this.tooltip;
14
16
  }
15
- const tooltip = this.renderer.createElement('div');
17
+ this.tooltip = this.renderer.createElement('div');
16
18
  const htmlRegex = /<([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>/is;
17
19
  if (htmlRegex.test(this.content)) {
18
20
  this.content = this.content.replace('>', ' style="margin: 0">');
19
- this.renderer.setProperty(tooltip, 'innerHTML', this.content);
21
+ this.renderer.setProperty(this.tooltip, 'innerHTML', this.content);
20
22
  }
21
23
  else {
22
24
  const text = this.renderer.createText(this.content);
23
- this.renderer.appendChild(tooltip, text);
24
- this.renderer.setStyle(tooltip, 'color', '#7E8485');
25
+ this.renderer.appendChild(this.tooltip, text);
26
+ this.renderer.setStyle(this.tooltip, 'color', '#7E8485');
27
+ }
28
+ this.renderer.addClass(this.tooltip, 'oc-tooltip');
29
+ if (this.side === 'mouse') {
30
+ this.renderer.addClass(this.tooltip, 'mouse-tracking');
31
+ }
32
+ this.renderer.setStyle(this.tooltip, 'position', 'absolute');
33
+ this.renderer.setStyle(this.tooltip, 'pointer-events', 'none');
34
+ this.renderer.setStyle(this.tooltip, 'z-index', '1000');
35
+ document.body.appendChild(this.tooltip);
36
+ this.created = true;
37
+ return this.tooltip;
38
+ }
39
+ onMouseOver(event) {
40
+ if (!this.content) {
41
+ return;
25
42
  }
26
- this.renderer.addClass(tooltip, 'oc-tooltip');
43
+ this.tooltip = this.createToolTip();
44
+ this.updateTooltipPosition(event);
45
+ }
46
+ onMouseMove(event) {
47
+ if (this.tooltip) {
48
+ if (this.side === 'mouse') {
49
+ this.updateTooltipPosition(event);
50
+ }
51
+ else {
52
+ this.positionTooltipFixed();
53
+ }
54
+ }
55
+ }
56
+ updateTooltipPosition(event) {
57
+ if (this.tooltip) {
58
+ this.renderer.setStyle(this.tooltip, 'left', `${event.pageX + 12}px`);
59
+ this.renderer.setStyle(this.tooltip, 'top', `${event.pageY + 12}px`);
60
+ }
61
+ }
62
+ positionTooltipFixed() {
63
+ if (!this.tooltip) {
64
+ return;
65
+ }
66
+ const rect = this.elRef.nativeElement.getBoundingClientRect();
27
67
  const width = this.elRef.nativeElement.offsetWidth;
28
68
  const height = this.elRef.nativeElement.offsetHeight;
29
- this.renderer.setStyle(tooltip, 'transform', `translateY(${height - 6}px)`);
30
69
  if (this.side === 'right') {
31
- this.renderer.setStyle(tooltip, 'transform', `translateX(${width + 20}px) translateY(-50%)`);
70
+ this.renderer.setStyle(this.tooltip, 'left', `${rect.right + 10}px`);
71
+ this.renderer.setStyle(this.tooltip, 'top', `${rect.top + height / 2}px`);
32
72
  }
33
73
  else if (this.side === 'left') {
34
- this.renderer.setStyle(tooltip, 'transform', `translateX(-${width + 20}px) translateY(-50%)`);
74
+ this.renderer.setStyle(this.tooltip, 'left', `${rect.left - this.tooltip.offsetWidth - 10}px`);
75
+ this.renderer.setStyle(this.tooltip, 'top', `${rect.top + height / 2}px`);
35
76
  }
36
77
  else if (this.side === 'upon' || this.side === 'top') {
37
- this.renderer.setStyle(tooltip, 'transform', `translateY(-${height + 40}px)`);
78
+ this.renderer.setStyle(this.tooltip, 'left', `${rect.left + width / 2}px`);
79
+ this.renderer.setStyle(this.tooltip, 'top', `${rect.top - this.tooltip.offsetHeight - 10}px`);
38
80
  }
39
- this.created = true;
40
- return tooltip;
41
- }
42
- onMouseOver() {
43
- if (!this.content) {
44
- return;
81
+ else if (this.side === 'bottom') {
82
+ this.renderer.setStyle(this.tooltip, 'left', `${rect.left + width / 2}px`);
83
+ this.renderer.setStyle(this.tooltip, 'top', `${rect.bottom + 10}px`);
45
84
  }
46
- const tooltip = this.createToolTip();
47
- this.renderer.appendChild(this.elRef.nativeElement, tooltip);
48
85
  }
49
86
  onMouseOut() {
50
- const tooltip = this.elRef.nativeElement.querySelector('.oc-tooltip');
51
- if (tooltip) {
52
- this.renderer.removeChild(this.elRef.nativeElement, tooltip);
87
+ if (this.tooltip) {
88
+ document.body.removeChild(this.tooltip);
53
89
  this.created = false;
90
+ this.tooltip = null;
54
91
  }
92
+ this.mouseingInterval = null;
55
93
  }
56
94
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OcTooltipDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
57
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: OcTooltipDirective, isStandalone: true, selector: "[ocTooltip]", inputs: { content: "content", side: "side" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseout": "onMouseOut()" } }, ngImport: i0 }); }
95
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: OcTooltipDirective, isStandalone: true, selector: "[ocTooltip]", inputs: { content: "content", side: "side" }, host: { listeners: { "mouseover": "onMouseOver($event)", "mousemove": "onMouseMove($event)", "mouseout": "onMouseOut()" } }, ngImport: i0 }); }
58
96
  }
59
97
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OcTooltipDirective, decorators: [{
60
98
  type: Directive,
@@ -68,9 +106,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
68
106
  type: Input
69
107
  }], onMouseOver: [{
70
108
  type: HostListener,
71
- args: ['mouseover']
109
+ args: ['mouseover', ['$event']]
110
+ }], onMouseMove: [{
111
+ type: HostListener,
112
+ args: ['mousemove', ['$event']]
72
113
  }], onMouseOut: [{
73
114
  type: HostListener,
74
115
  args: ['mouseout']
75
116
  }] } });
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2MtdG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vdGltdXMtbGlicmFyeS9zcmMvbGliL2RpcmVjdGl2ZXMvb2MtdG9vbHRpcC9vYy10b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUE7O0FBTXJGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDVSxLQUFpQixFQUNqQixRQUFtQjtRQURuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFHcEIsWUFBTyxHQUFXLEVBQUUsQ0FBQTtRQUNwQixTQUFJLEdBQWlELFFBQVEsQ0FBQTtRQUV0RSxZQUFPLEdBQVksS0FBSyxDQUFBO0lBTHJCLENBQUM7SUFPSixhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsRCxNQUFNLFNBQVMsR0FBRyx3Q0FBd0MsQ0FBQTtRQUMxRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtZQUMvRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMvRCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFFeEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUNyRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBRTdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQTtRQUNsRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUE7UUFFcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxjQUFjLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTNFLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsS0FBSyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQTtRQUM5RixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxLQUFLLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO1FBQy9GLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLE1BQU0sR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQy9FLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNuQixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBR0QsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsT0FBTTtRQUNSLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDOUQsQ0FBQztJQUdELFVBQVU7UUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDckUsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQzVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FBQ3RCLENBQUM7SUFDSCxDQUFDOytHQTlEVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3VHQU9VLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBd0NOLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXO2dCQVV6QixVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW29jVG9vbHRpcF0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPY1Rvb2x0aXBEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxyXG4gICkge31cclxuXHJcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nID0gJydcclxuICBASW5wdXQoKSBzaWRlOiAnYm90dG9tJyB8ICd1cG9uJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyA9ICdib3R0b20nXHJcblxyXG4gIGNyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cclxuICBjcmVhdGVUb29sVGlwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3JlYXRlZCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0b29sdGlwID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKVxyXG4gICAgY29uc3QgaHRtbFJlZ2V4ID0gLzwoW2Etel1bYS16MC05XSopXFxiW14+XSo+KC4qPyk8XFwvXFwxPi9pc1xyXG4gICAgaWYgKGh0bWxSZWdleC50ZXN0KHRoaXMuY29udGVudCkpIHtcclxuICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5jb250ZW50LnJlcGxhY2UoJz4nLCAnIHN0eWxlPVwibWFyZ2luOiAwXCI+JylcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0b29sdGlwLCAnaW5uZXJIVE1MJywgdGhpcy5jb250ZW50KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGV4dCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlVGV4dCh0aGlzLmNvbnRlbnQpXHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodG9vbHRpcCwgdGV4dClcclxuXHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodG9vbHRpcCwgJ2NvbG9yJywgJyM3RTg0ODUnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0b29sdGlwLCAnb2MtdG9vbHRpcCcpXHJcblxyXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGhcclxuICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHRcclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRvb2x0aXAsICd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlWSgke2hlaWdodCAtIDZ9cHgpYClcclxuXHJcbiAgICBpZiAodGhpcy5zaWRlID09PSAncmlnaHQnKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodG9vbHRpcCwgJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGVYKCR7d2lkdGggKyAyMH1weCkgdHJhbnNsYXRlWSgtNTAlKWApXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2lkZSA9PT0gJ2xlZnQnKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodG9vbHRpcCwgJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGVYKC0ke3dpZHRoICsgMjB9cHgpIHRyYW5zbGF0ZVkoLTUwJSlgKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNpZGUgPT09ICd1cG9uJyB8fCB0aGlzLnNpZGUgPT09ICd0b3AnKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodG9vbHRpcCwgJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGVZKC0ke2hlaWdodCArIDQwfXB4KWApXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZVxyXG4gICAgcmV0dXJuIHRvb2x0aXBcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3ZlcicpXHJcbiAgb25Nb3VzZU92ZXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuY29udGVudCkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmNyZWF0ZVRvb2xUaXAoKVxyXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRvb2x0aXApXHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtb3VzZW91dCcpXHJcbiAgb25Nb3VzZU91dCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRvb2x0aXAgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm9jLXRvb2x0aXAnKVxyXG4gICAgaWYgKHRvb2x0aXApIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRvb2x0aXApXHJcbiAgICAgIHRoaXMuY3JlYXRlZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2MtdG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vdGltdXMtbGlicmFyeS9zcmMvbGliL2RpcmVjdGl2ZXMvb2MtdG9vbHRpcC9vYy10b29sdGlwLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUE7O0FBTXJGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsWUFDVSxLQUFpQixFQUNqQixRQUFtQjtRQURuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFHcEIsWUFBTyxHQUFXLEVBQUUsQ0FBQTtRQUNwQixTQUFJLEdBQTJELE9BQU8sQ0FBQTtRQUV2RSxZQUFPLEdBQVksS0FBSyxDQUFBO1FBQ3hCLFlBQU8sR0FBdUIsSUFBSSxDQUFBO1FBdUMxQyxxQkFBZ0IsR0FBZSxJQUFJLENBQUE7SUE3Q2hDLENBQUM7SUFRSixhQUFhO1FBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUMsT0FBUSxDQUFBO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2pELE1BQU0sU0FBUyxHQUFHLHdDQUF3QyxDQUFBO1FBQzFELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFBO1lBQy9ELElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsV0FB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Q2xELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQTtRQUVwRCxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUE7WUFDOUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzNFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQy9GLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3RFLENBQUM7SUFDSCxDQUFDO0lBR0QsVUFBVTtRQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN2QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQTtZQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtRQUNyQixDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQTtJQUM5QixDQUFDOytHQXBHVSxrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFKOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3VHQU9VLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBa0NOLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBV3JDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMENyQyxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW29jVG9vbHRpcF0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBPY1Rvb2x0aXBEaXJlY3RpdmUge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxyXG4gICkge31cclxuXHJcbiAgQElucHV0KCkgY29udGVudDogc3RyaW5nID0gJydcclxuICBASW5wdXQoKSBzaWRlOiAnYm90dG9tJyB8ICd1cG9uJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdtb3VzZScgPSAnbW91c2UnXHJcblxyXG4gIHByaXZhdGUgY3JlYXRlZDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgcHJpdmF0ZSB0b29sdGlwOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsXHJcblxyXG4gIGNyZWF0ZVRvb2xUaXAoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLmNyZWF0ZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCFcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2RpdicpXHJcbiAgICBjb25zdCBodG1sUmVnZXggPSAvPChbYS16XVthLXowLTldKilcXGJbXj5dKj4oLio/KTxcXC9cXDE+L2lzXHJcbiAgICBpZiAoaHRtbFJlZ2V4LnRlc3QodGhpcy5jb250ZW50KSkge1xyXG4gICAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmNvbnRlbnQucmVwbGFjZSgnPicsICcgc3R5bGU9XCJtYXJnaW46IDBcIj4nKVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMudG9vbHRpcCwgJ2lubmVySFRNTCcsIHRoaXMuY29udGVudClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQodGhpcy5jb250ZW50KVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMudG9vbHRpcCwgdGV4dClcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXAsICdjb2xvcicsICcjN0U4NDg1JylcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAnb2MtdG9vbHRpcCcpXHJcbiAgICBpZiAodGhpcy5zaWRlID09PSAnbW91c2UnKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy50b29sdGlwLCAnbW91c2UtdHJhY2tpbmcnKVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXAsICdwb3NpdGlvbicsICdhYnNvbHV0ZScpXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ3BvaW50ZXItZXZlbnRzJywgJ25vbmUnKVxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXAsICd6LWluZGV4JywgJzEwMDAnKVxyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy50b29sdGlwIGFzIGFueSlcclxuICAgIHRoaXMuY3JlYXRlZCA9IHRydWVcclxuICAgIHJldHVybiB0aGlzLnRvb2x0aXBcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlb3ZlcicsIFsnJGV2ZW50J10pXHJcbiAgb25Nb3VzZU92ZXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb250ZW50KSB7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfVxyXG4gICAgdGhpcy50b29sdGlwID0gdGhpcy5jcmVhdGVUb29sVGlwKClcclxuICAgIHRoaXMudXBkYXRlVG9vbHRpcFBvc2l0aW9uKGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgbW91c2VpbmdJbnRlcnZhbDogYW55IHwgbnVsbCA9IG51bGxcclxuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLCBbJyRldmVudCddKVxyXG4gIG9uTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwKSB7XHJcbiAgICAgIGlmICh0aGlzLnNpZGUgPT09ICdtb3VzZScpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRvb2x0aXBQb3NpdGlvbihldmVudClcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvc2l0aW9uVG9vbHRpcEZpeGVkKClcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUb29sdGlwUG9zaXRpb24oZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRvb2x0aXApIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXAsICdsZWZ0JywgYCR7ZXZlbnQucGFnZVggKyAxMn1weGApXHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAndG9wJywgYCR7ZXZlbnQucGFnZVkgKyAxMn1weGApXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvc2l0aW9uVG9vbHRpcEZpeGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRvb2x0aXApIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aFxyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodFxyXG5cclxuICAgIGlmICh0aGlzLnNpZGUgPT09ICdyaWdodCcpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXAsICdsZWZ0JywgYCR7cmVjdC5yaWdodCArIDEwfXB4YClcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRvb2x0aXAsICd0b3AnLCBgJHtyZWN0LnRvcCArIGhlaWdodCAvIDJ9cHhgKVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNpZGUgPT09ICdsZWZ0Jykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ2xlZnQnLCBgJHtyZWN0LmxlZnQgLSB0aGlzLnRvb2x0aXAub2Zmc2V0V2lkdGggLSAxMH1weGApXHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50b29sdGlwLCAndG9wJywgYCR7cmVjdC50b3AgKyBoZWlnaHQgLyAyfXB4YClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zaWRlID09PSAndXBvbicgfHwgdGhpcy5zaWRlID09PSAndG9wJykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ2xlZnQnLCBgJHtyZWN0LmxlZnQgKyB3aWR0aCAvIDJ9cHhgKVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ3RvcCcsIGAke3JlY3QudG9wIC0gdGhpcy50b29sdGlwLm9mZnNldEhlaWdodCAtIDEwfXB4YClcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zaWRlID09PSAnYm90dG9tJykge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ2xlZnQnLCBgJHtyZWN0LmxlZnQgKyB3aWR0aCAvIDJ9cHhgKVxyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudG9vbHRpcCwgJ3RvcCcsIGAke3JlY3QuYm90dG9tICsgMTB9cHhgKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbW91c2VvdXQnKVxyXG4gIG9uTW91c2VPdXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50b29sdGlwKSB7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy50b29sdGlwKVxyXG4gICAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLnRvb2x0aXAgPSBudWxsXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tb3VzZWluZ0ludGVydmFsID0gbnVsbFxyXG4gIH1cclxufVxyXG4iXX0=