@schneideress/dashboardframework 17.0.47 → 20.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/schneideress-dashboardframework.mjs +47 -47
- package/fesm2022/schneideress-dashboardframework.mjs.map +1 -1
- package/index.d.ts +1255 -5
- package/package.json +11 -7
- package/esm2022/gridster/index.mjs +0 -12
- package/esm2022/gridster/lib/gridster.component.mjs +0 -627
- package/esm2022/gridster/lib/gridster.interface.mjs +0 -3
- package/esm2022/gridster/lib/gridster.module.mjs +0 -17
- package/esm2022/gridster/lib/gridsterCompact.service.mjs +0 -126
- package/esm2022/gridster/lib/gridsterConfig.constant.mjs +0 -118
- package/esm2022/gridster/lib/gridsterConfig.interface.mjs +0 -37
- package/esm2022/gridster/lib/gridsterConfigS.interface.mjs +0 -2
- package/esm2022/gridster/lib/gridsterDraggable.service.mjs +0 -405
- package/esm2022/gridster/lib/gridsterEmptyCell.service.mjs +0 -255
- package/esm2022/gridster/lib/gridsterItem.component.mjs +0 -231
- package/esm2022/gridster/lib/gridsterItem.interface.mjs +0 -3
- package/esm2022/gridster/lib/gridsterPreview.component.mjs +0 -36
- package/esm2022/gridster/lib/gridsterPush.service.mjs +0 -316
- package/esm2022/gridster/lib/gridsterPushResize.service.mjs +0 -225
- package/esm2022/gridster/lib/gridsterRenderer.interface.mjs +0 -2
- package/esm2022/gridster/lib/gridsterRenderer.service.mjs +0 -274
- package/esm2022/gridster/lib/gridsterResizable.service.mjs +0 -470
- package/esm2022/gridster/lib/gridsterResizeEventType.interface.mjs +0 -2
- package/esm2022/gridster/lib/gridsterScroll.service.mjs +0 -134
- package/esm2022/gridster/lib/gridsterSwap.service.mjs +0 -87
- package/esm2022/gridster/lib/gridsterUtils.service.mjs +0 -92
- package/esm2022/lib/custom.notifier.options.mjs +0 -41
- package/esm2022/lib/ra-dashboard-area/ra.dashboard.area.mjs +0 -639
- package/esm2022/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +0 -43
- package/esm2022/lib/ra-widget-container/ra.widget.container.component.mjs +0 -964
- package/esm2022/lib/ra.base.dashboard.filter.mjs +0 -46
- package/esm2022/lib/ra.base.dashboard.template.mjs +0 -45
- package/esm2022/lib/ra.dashbard.event.bus.mjs +0 -46
- package/esm2022/lib/ra.dashboard.module.mjs +0 -55
- package/esm2022/lib/ra.dashboard.responsive.service.mjs +0 -149
- package/esm2022/lib/ra.dashboard.service.mjs +0 -84
- package/esm2022/lib/ra.event.enum.mjs +0 -75
- package/esm2022/lib/ra.gridster.config.mjs +0 -56
- package/esm2022/public-api.mjs +0 -13
- package/esm2022/schneideress-dashboardframework.mjs +0 -5
- package/gridster/index.d.ts +0 -9
- package/gridster/lib/gridster.component.d.ts +0 -79
- package/gridster/lib/gridster.interface.d.ts +0 -49
- package/gridster/lib/gridster.module.d.ts +0 -8
- package/gridster/lib/gridsterCompact.service.d.ts +0 -11
- package/gridster/lib/gridsterConfig.constant.d.ts +0 -2
- package/gridster/lib/gridsterConfig.interface.d.ts +0 -155
- package/gridster/lib/gridsterConfigS.interface.d.ts +0 -107
- package/gridster/lib/gridsterDraggable.service.d.ts +0 -68
- package/gridster/lib/gridsterEmptyCell.service.d.ts +0 -31
- package/gridster/lib/gridsterItem.component.d.ts +0 -61
- package/gridster/lib/gridsterItem.interface.d.ts +0 -67
- package/gridster/lib/gridsterPreview.component.d.ts +0 -17
- package/gridster/lib/gridsterPush.service.d.ts +0 -34
- package/gridster/lib/gridsterPushResize.service.d.ts +0 -26
- package/gridster/lib/gridsterRenderer.interface.d.ts +0 -14
- package/gridster/lib/gridsterRenderer.service.d.ts +0 -37
- package/gridster/lib/gridsterResizable.service.d.ts +0 -86
- package/gridster/lib/gridsterResizeEventType.interface.d.ts +0 -6
- package/gridster/lib/gridsterScroll.service.d.ts +0 -7
- package/gridster/lib/gridsterSwap.service.d.ts +0 -13
- package/gridster/lib/gridsterUtils.service.d.ts +0 -16
- package/lib/custom.notifier.options.d.ts +0 -2
- package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +0 -132
- package/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.d.ts +0 -20
- package/lib/ra-widget-container/ra.widget.container.component.d.ts +0 -154
- package/lib/ra.base.dashboard.filter.d.ts +0 -19
- package/lib/ra.base.dashboard.template.d.ts +0 -24
- package/lib/ra.dashbard.event.bus.d.ts +0 -23
- package/lib/ra.dashboard.module.d.ts +0 -16
- package/lib/ra.dashboard.responsive.service.d.ts +0 -24
- package/lib/ra.dashboard.service.d.ts +0 -26
- package/lib/ra.event.enum.d.ts +0 -72
- package/lib/ra.gridster.config.d.ts +0 -2
- package/public-api.d.ts +0 -9
|
@@ -1,470 +0,0 @@
|
|
|
1
|
-
import { DirTypes } from './gridsterConfig.interface';
|
|
2
|
-
import { GridsterPush } from './gridsterPush.service';
|
|
3
|
-
import { GridsterPushResize } from './gridsterPushResize.service';
|
|
4
|
-
import { cancelScroll, scroll } from './gridsterScroll.service';
|
|
5
|
-
import { GridsterUtils } from './gridsterUtils.service';
|
|
6
|
-
export class GridsterResizable {
|
|
7
|
-
constructor(gridsterItem, gridster, zone) {
|
|
8
|
-
this.zone = zone;
|
|
9
|
-
/**
|
|
10
|
-
* The direction function may reference any of the `GridsterResizable` class methods, that are
|
|
11
|
-
* responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference
|
|
12
|
-
* the `handleNorth` method when the north handle is pressed and moved by a mouse.
|
|
13
|
-
*/
|
|
14
|
-
this.directionFunction = null;
|
|
15
|
-
this.dragMove = (e) => {
|
|
16
|
-
if (this.directionFunction === null) {
|
|
17
|
-
throw new Error('The `directionFunction` has not been set before calling `dragMove`.');
|
|
18
|
-
}
|
|
19
|
-
e.stopPropagation();
|
|
20
|
-
e.preventDefault();
|
|
21
|
-
GridsterUtils.checkTouchEvent(e);
|
|
22
|
-
this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
|
|
23
|
-
this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
|
|
24
|
-
scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.directionFunction, true, this.resizeEventScrollType);
|
|
25
|
-
const scale = this.gridster.options.scale || 1;
|
|
26
|
-
this.directionFunction({
|
|
27
|
-
clientX: this.originalClientX + (e.clientX - this.originalClientX) / scale,
|
|
28
|
-
clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale
|
|
29
|
-
});
|
|
30
|
-
this.lastMouse.clientX = e.clientX;
|
|
31
|
-
this.lastMouse.clientY = e.clientY;
|
|
32
|
-
this.zone.run(() => {
|
|
33
|
-
this.gridster.updateGrid();
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
this.dragStop = (e) => {
|
|
37
|
-
e.stopPropagation();
|
|
38
|
-
e.preventDefault();
|
|
39
|
-
cancelScroll();
|
|
40
|
-
this.mousemove();
|
|
41
|
-
this.mouseup();
|
|
42
|
-
this.mouseleave();
|
|
43
|
-
this.cancelOnBlur();
|
|
44
|
-
this.touchmove();
|
|
45
|
-
this.touchend();
|
|
46
|
-
this.touchcancel();
|
|
47
|
-
this.gridster.dragInProgress = false;
|
|
48
|
-
this.gridster.updateGrid();
|
|
49
|
-
if (this.gridster.options.resizable &&
|
|
50
|
-
this.gridster.options.resizable.stop) {
|
|
51
|
-
Promise.resolve(this.gridster.options.resizable.stop(this.gridsterItem.item, this.gridsterItem, e)).then(this.makeResize, this.cancelResize);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.makeResize();
|
|
55
|
-
}
|
|
56
|
-
setTimeout(() => {
|
|
57
|
-
this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-resizing');
|
|
58
|
-
if (this.gridster) {
|
|
59
|
-
this.gridster.movingItem = null;
|
|
60
|
-
this.gridster.previewStyle();
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
this.cancelResize = () => {
|
|
65
|
-
this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;
|
|
66
|
-
this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;
|
|
67
|
-
this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
|
|
68
|
-
this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
|
|
69
|
-
this.gridsterItem.setSize();
|
|
70
|
-
this.push.restoreItems();
|
|
71
|
-
this.pushResize.restoreItems();
|
|
72
|
-
this.push.destroy();
|
|
73
|
-
this.push = null;
|
|
74
|
-
this.pushResize.destroy();
|
|
75
|
-
this.pushResize = null;
|
|
76
|
-
};
|
|
77
|
-
this.makeResize = () => {
|
|
78
|
-
this.gridsterItem.setSize();
|
|
79
|
-
this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
|
|
80
|
-
this.push.setPushedItems();
|
|
81
|
-
this.pushResize.setPushedItems();
|
|
82
|
-
this.push.destroy();
|
|
83
|
-
this.push = null;
|
|
84
|
-
this.pushResize.destroy();
|
|
85
|
-
this.pushResize = null;
|
|
86
|
-
};
|
|
87
|
-
this.handleNorth = (e) => {
|
|
88
|
-
this.top = e.clientY + this.offsetTop - this.diffTop;
|
|
89
|
-
this.height = this.bottom - this.top;
|
|
90
|
-
if (this.minHeight > this.height) {
|
|
91
|
-
this.height = this.minHeight;
|
|
92
|
-
this.top = this.bottom - this.minHeight;
|
|
93
|
-
}
|
|
94
|
-
else if (this.gridster.options.enableBoundaryControl) {
|
|
95
|
-
this.top = Math.max(0, this.top);
|
|
96
|
-
this.height = this.bottom - this.top;
|
|
97
|
-
}
|
|
98
|
-
const marginTop = this.gridster.options.pushItems ? this.margin : 0;
|
|
99
|
-
this.newPosition = this.gridster.pixelsToPositionY(this.top + marginTop, Math.floor);
|
|
100
|
-
if (this.gridsterItem.$item.y !== this.newPosition) {
|
|
101
|
-
this.itemBackup[1] = this.gridsterItem.$item.y;
|
|
102
|
-
this.itemBackup[3] = this.gridsterItem.$item.rows;
|
|
103
|
-
this.gridsterItem.$item.rows +=
|
|
104
|
-
this.gridsterItem.$item.y - this.newPosition;
|
|
105
|
-
this.gridsterItem.$item.y = this.newPosition;
|
|
106
|
-
this.pushResize.pushItems(this.pushResize.fromSouth);
|
|
107
|
-
this.push.pushItems(this.push.fromSouth, this.gridster.$options.disablePushOnResize);
|
|
108
|
-
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
109
|
-
this.gridsterItem.$item.y = this.itemBackup[1];
|
|
110
|
-
this.gridsterItem.$item.rows = this.itemBackup[3];
|
|
111
|
-
this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);
|
|
112
|
-
this.setItemTop(this.gridster.positionYToPixels(this.gridsterItem.$item.y));
|
|
113
|
-
this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
|
|
114
|
-
this.margin);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
this.gridster.previewStyle();
|
|
119
|
-
}
|
|
120
|
-
this.pushResize.checkPushBack();
|
|
121
|
-
this.push.checkPushBack();
|
|
122
|
-
}
|
|
123
|
-
this.setItemTop(this.top);
|
|
124
|
-
this.setItemHeight(this.height);
|
|
125
|
-
};
|
|
126
|
-
this.handleWest = (e) => {
|
|
127
|
-
const clientX = this.gridster.$options.dirType === DirTypes.RTL
|
|
128
|
-
? this.originalClientX + (this.originalClientX - e.clientX)
|
|
129
|
-
: e.clientX;
|
|
130
|
-
this.left = clientX + this.offsetLeft - this.diffLeft;
|
|
131
|
-
this.width = this.right - this.left;
|
|
132
|
-
if (this.minWidth > this.width) {
|
|
133
|
-
this.width = this.minWidth;
|
|
134
|
-
this.left = this.right - this.minWidth;
|
|
135
|
-
}
|
|
136
|
-
else if (this.gridster.options.enableBoundaryControl) {
|
|
137
|
-
this.left = Math.max(0, this.left);
|
|
138
|
-
this.width = this.right - this.left;
|
|
139
|
-
}
|
|
140
|
-
const marginLeft = this.gridster.options.pushItems ? this.margin : 0;
|
|
141
|
-
this.newPosition = this.gridster.pixelsToPositionX(this.left + marginLeft, Math.floor);
|
|
142
|
-
if (this.gridsterItem.$item.x !== this.newPosition) {
|
|
143
|
-
this.itemBackup[0] = this.gridsterItem.$item.x;
|
|
144
|
-
this.itemBackup[2] = this.gridsterItem.$item.cols;
|
|
145
|
-
this.gridsterItem.$item.cols +=
|
|
146
|
-
this.gridsterItem.$item.x - this.newPosition;
|
|
147
|
-
this.gridsterItem.$item.x = this.newPosition;
|
|
148
|
-
this.pushResize.pushItems(this.pushResize.fromEast);
|
|
149
|
-
this.push.pushItems(this.push.fromEast, this.gridster.$options.disablePushOnResize);
|
|
150
|
-
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
151
|
-
this.gridsterItem.$item.x = this.itemBackup[0];
|
|
152
|
-
this.gridsterItem.$item.cols = this.itemBackup[2];
|
|
153
|
-
this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);
|
|
154
|
-
this.setItemLeft(this.gridster.positionXToPixels(this.gridsterItem.$item.x));
|
|
155
|
-
this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
|
|
156
|
-
this.margin);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
this.gridster.previewStyle();
|
|
161
|
-
}
|
|
162
|
-
this.pushResize.checkPushBack();
|
|
163
|
-
this.push.checkPushBack();
|
|
164
|
-
}
|
|
165
|
-
this.setItemLeft(this.left);
|
|
166
|
-
this.setItemWidth(this.width);
|
|
167
|
-
};
|
|
168
|
-
this.handleSouth = (e) => {
|
|
169
|
-
this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;
|
|
170
|
-
if (this.minHeight > this.height) {
|
|
171
|
-
this.height = this.minHeight;
|
|
172
|
-
}
|
|
173
|
-
this.bottom = this.top + this.height;
|
|
174
|
-
if (this.gridster.options.enableBoundaryControl) {
|
|
175
|
-
const margin = this.outerMarginBottom ?? this.margin;
|
|
176
|
-
const box = this.gridster.el.getBoundingClientRect();
|
|
177
|
-
this.bottom = Math.min(this.bottom, box.bottom - box.top - 2 * margin);
|
|
178
|
-
this.height = this.bottom - this.top;
|
|
179
|
-
}
|
|
180
|
-
const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;
|
|
181
|
-
this.newPosition = this.gridster.pixelsToPositionY(this.bottom + marginBottom, Math.ceil);
|
|
182
|
-
if (this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==
|
|
183
|
-
this.newPosition) {
|
|
184
|
-
this.itemBackup[3] = this.gridsterItem.$item.rows;
|
|
185
|
-
this.gridsterItem.$item.rows =
|
|
186
|
-
this.newPosition - this.gridsterItem.$item.y;
|
|
187
|
-
this.pushResize.pushItems(this.pushResize.fromNorth);
|
|
188
|
-
this.push.pushItems(this.push.fromNorth, this.gridster.$options.disablePushOnResize);
|
|
189
|
-
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
190
|
-
this.gridsterItem.$item.rows = this.itemBackup[3];
|
|
191
|
-
this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
|
|
192
|
-
this.margin);
|
|
193
|
-
return;
|
|
194
|
-
}
|
|
195
|
-
else {
|
|
196
|
-
this.gridster.previewStyle();
|
|
197
|
-
}
|
|
198
|
-
this.pushResize.checkPushBack();
|
|
199
|
-
this.push.checkPushBack();
|
|
200
|
-
}
|
|
201
|
-
this.setItemHeight(this.height);
|
|
202
|
-
};
|
|
203
|
-
this.handleEast = (e) => {
|
|
204
|
-
const clientX = this.gridster.$options.dirType === DirTypes.RTL
|
|
205
|
-
? this.originalClientX + (this.originalClientX - e.clientX)
|
|
206
|
-
: e.clientX;
|
|
207
|
-
this.width = clientX + this.offsetLeft - this.diffRight - this.left;
|
|
208
|
-
if (this.minWidth > this.width) {
|
|
209
|
-
this.width = this.minWidth;
|
|
210
|
-
}
|
|
211
|
-
this.right = this.left + this.width;
|
|
212
|
-
if (this.gridster.options.enableBoundaryControl) {
|
|
213
|
-
const margin = this.outerMarginRight ?? this.margin;
|
|
214
|
-
const box = this.gridster.el.getBoundingClientRect();
|
|
215
|
-
this.right = Math.min(this.right, box.right - box.left - 2 * margin);
|
|
216
|
-
this.width = this.right - this.left;
|
|
217
|
-
}
|
|
218
|
-
const marginRight = this.gridster.options.pushItems ? 0 : this.margin;
|
|
219
|
-
this.newPosition = this.gridster.pixelsToPositionX(this.right + marginRight, Math.ceil);
|
|
220
|
-
if (this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==
|
|
221
|
-
this.newPosition) {
|
|
222
|
-
this.itemBackup[2] = this.gridsterItem.$item.cols;
|
|
223
|
-
this.gridsterItem.$item.cols =
|
|
224
|
-
this.newPosition - this.gridsterItem.$item.x;
|
|
225
|
-
this.pushResize.pushItems(this.pushResize.fromWest);
|
|
226
|
-
this.push.pushItems(this.push.fromWest, this.gridster.$options.disablePushOnResize);
|
|
227
|
-
if (this.gridster.checkCollision(this.gridsterItem.$item)) {
|
|
228
|
-
this.gridsterItem.$item.cols = this.itemBackup[2];
|
|
229
|
-
this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
|
|
230
|
-
this.margin);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
this.gridster.previewStyle();
|
|
235
|
-
}
|
|
236
|
-
this.pushResize.checkPushBack();
|
|
237
|
-
this.push.checkPushBack();
|
|
238
|
-
}
|
|
239
|
-
this.setItemWidth(this.width);
|
|
240
|
-
};
|
|
241
|
-
this.handleNorthWest = (e) => {
|
|
242
|
-
this.handleNorth(e);
|
|
243
|
-
this.handleWest(e);
|
|
244
|
-
};
|
|
245
|
-
this.handleNorthEast = (e) => {
|
|
246
|
-
this.handleNorth(e);
|
|
247
|
-
this.handleEast(e);
|
|
248
|
-
};
|
|
249
|
-
this.handleSouthWest = (e) => {
|
|
250
|
-
this.handleSouth(e);
|
|
251
|
-
this.handleWest(e);
|
|
252
|
-
};
|
|
253
|
-
this.handleSouthEast = (e) => {
|
|
254
|
-
this.handleSouth(e);
|
|
255
|
-
this.handleEast(e);
|
|
256
|
-
};
|
|
257
|
-
this.gridsterItem = gridsterItem;
|
|
258
|
-
this.gridster = gridster;
|
|
259
|
-
this.lastMouse = {
|
|
260
|
-
clientX: 0,
|
|
261
|
-
clientY: 0
|
|
262
|
-
};
|
|
263
|
-
this.itemBackup = [0, 0, 0, 0];
|
|
264
|
-
this.resizeEventScrollType = {
|
|
265
|
-
west: false,
|
|
266
|
-
east: false,
|
|
267
|
-
north: false,
|
|
268
|
-
south: false
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
destroy() {
|
|
272
|
-
this.gridster?.previewStyle();
|
|
273
|
-
this.gridster = this.gridsterItem = null;
|
|
274
|
-
}
|
|
275
|
-
dragStart(e) {
|
|
276
|
-
if (e.which && e.which !== 1) {
|
|
277
|
-
return;
|
|
278
|
-
}
|
|
279
|
-
if (this.gridster.options.resizable &&
|
|
280
|
-
this.gridster.options.resizable.start) {
|
|
281
|
-
this.gridster.options.resizable.start(this.gridsterItem.item, this.gridsterItem, e);
|
|
282
|
-
}
|
|
283
|
-
e.stopPropagation();
|
|
284
|
-
e.preventDefault();
|
|
285
|
-
this.zone.runOutsideAngular(() => {
|
|
286
|
-
this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);
|
|
287
|
-
this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);
|
|
288
|
-
});
|
|
289
|
-
this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);
|
|
290
|
-
this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);
|
|
291
|
-
this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);
|
|
292
|
-
this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);
|
|
293
|
-
this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);
|
|
294
|
-
this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-resizing');
|
|
295
|
-
this.lastMouse.clientX = e.clientX;
|
|
296
|
-
this.lastMouse.clientY = e.clientY;
|
|
297
|
-
this.left = this.gridsterItem.left;
|
|
298
|
-
this.top = this.gridsterItem.top;
|
|
299
|
-
this.originalClientX = e.clientX;
|
|
300
|
-
this.originalClientY = e.clientY;
|
|
301
|
-
this.width = this.gridsterItem.width;
|
|
302
|
-
this.height = this.gridsterItem.height;
|
|
303
|
-
this.bottom = this.gridsterItem.top + this.gridsterItem.height;
|
|
304
|
-
this.right = this.gridsterItem.left + this.gridsterItem.width;
|
|
305
|
-
this.margin = this.gridster.$options.margin;
|
|
306
|
-
this.outerMarginTop = this.gridster.$options.outerMarginTop;
|
|
307
|
-
this.outerMarginRight = this.gridster.$options.outerMarginRight;
|
|
308
|
-
this.outerMarginBottom = this.gridster.$options.outerMarginBottom;
|
|
309
|
-
this.outerMarginLeft = this.gridster.$options.outerMarginLeft;
|
|
310
|
-
this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
|
|
311
|
-
this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
|
|
312
|
-
this.diffLeft = e.clientX + this.offsetLeft - this.left;
|
|
313
|
-
this.diffRight = e.clientX + this.offsetLeft - this.right;
|
|
314
|
-
this.diffTop = e.clientY + this.offsetTop - this.top;
|
|
315
|
-
this.diffBottom = e.clientY + this.offsetTop - this.bottom;
|
|
316
|
-
this.minHeight =
|
|
317
|
-
this.gridster.positionYToPixels(this.gridsterItem.$item.minItemRows ||
|
|
318
|
-
this.gridster.$options.minItemRows) - this.margin;
|
|
319
|
-
this.minWidth =
|
|
320
|
-
this.gridster.positionXToPixels(this.gridsterItem.$item.minItemCols ||
|
|
321
|
-
this.gridster.$options.minItemCols) - this.margin;
|
|
322
|
-
this.gridster.movingItem = this.gridsterItem.$item;
|
|
323
|
-
this.gridster.previewStyle();
|
|
324
|
-
this.push = new GridsterPush(this.gridsterItem);
|
|
325
|
-
this.pushResize = new GridsterPushResize(this.gridsterItem);
|
|
326
|
-
this.gridster.dragInProgress = true;
|
|
327
|
-
this.gridster.updateGrid();
|
|
328
|
-
const { classList } = e.target;
|
|
329
|
-
if (classList.contains('handle-n')) {
|
|
330
|
-
this.resizeEventScrollType.north = true;
|
|
331
|
-
this.directionFunction = this.handleNorth;
|
|
332
|
-
}
|
|
333
|
-
else if (classList.contains('handle-w')) {
|
|
334
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
335
|
-
this.resizeEventScrollType.east = true;
|
|
336
|
-
this.directionFunction = this.handleEast;
|
|
337
|
-
}
|
|
338
|
-
else {
|
|
339
|
-
this.resizeEventScrollType.west = true;
|
|
340
|
-
this.directionFunction = this.handleWest;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
else if (classList.contains('handle-s')) {
|
|
344
|
-
this.resizeEventScrollType.south = true;
|
|
345
|
-
this.directionFunction = this.handleSouth;
|
|
346
|
-
}
|
|
347
|
-
else if (classList.contains('handle-e')) {
|
|
348
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
349
|
-
this.resizeEventScrollType.west = true;
|
|
350
|
-
this.directionFunction = this.handleWest;
|
|
351
|
-
}
|
|
352
|
-
else {
|
|
353
|
-
this.resizeEventScrollType.east = true;
|
|
354
|
-
this.directionFunction = this.handleEast;
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
else if (classList.contains('handle-nw')) {
|
|
358
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
359
|
-
this.resizeEventScrollType.north = true;
|
|
360
|
-
this.resizeEventScrollType.east = true;
|
|
361
|
-
this.directionFunction = this.handleNorthEast;
|
|
362
|
-
}
|
|
363
|
-
else {
|
|
364
|
-
this.resizeEventScrollType.north = true;
|
|
365
|
-
this.resizeEventScrollType.west = true;
|
|
366
|
-
this.directionFunction = this.handleNorthWest;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
else if (classList.contains('handle-ne')) {
|
|
370
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
371
|
-
this.resizeEventScrollType.north = true;
|
|
372
|
-
this.resizeEventScrollType.west = true;
|
|
373
|
-
this.directionFunction = this.handleNorthWest;
|
|
374
|
-
}
|
|
375
|
-
else {
|
|
376
|
-
this.resizeEventScrollType.north = true;
|
|
377
|
-
this.resizeEventScrollType.east = true;
|
|
378
|
-
this.directionFunction = this.handleNorthEast;
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
else if (classList.contains('handle-sw')) {
|
|
382
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
383
|
-
this.resizeEventScrollType.south = true;
|
|
384
|
-
this.resizeEventScrollType.east = true;
|
|
385
|
-
this.directionFunction = this.handleSouthEast;
|
|
386
|
-
}
|
|
387
|
-
else {
|
|
388
|
-
this.resizeEventScrollType.south = true;
|
|
389
|
-
this.resizeEventScrollType.west = true;
|
|
390
|
-
this.directionFunction = this.handleSouthWest;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else if (classList.contains('handle-se')) {
|
|
394
|
-
if (this.gridster.$options.dirType === DirTypes.RTL) {
|
|
395
|
-
this.resizeEventScrollType.south = true;
|
|
396
|
-
this.resizeEventScrollType.west = true;
|
|
397
|
-
this.directionFunction = this.handleSouthWest;
|
|
398
|
-
}
|
|
399
|
-
else {
|
|
400
|
-
this.resizeEventScrollType.south = true;
|
|
401
|
-
this.resizeEventScrollType.east = true;
|
|
402
|
-
this.directionFunction = this.handleSouthEast;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
toggle() {
|
|
407
|
-
this.resizeEnabled = this.gridsterItem.canBeResized();
|
|
408
|
-
this.resizableHandles = this.gridsterItem.getResizableHandles();
|
|
409
|
-
}
|
|
410
|
-
dragStartDelay(e) {
|
|
411
|
-
GridsterUtils.checkTouchEvent(e);
|
|
412
|
-
if (!this.gridster.$options.resizable.delayStart) {
|
|
413
|
-
this.dragStart(e);
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
const timeout = setTimeout(() => {
|
|
417
|
-
this.dragStart(e);
|
|
418
|
-
cancelDrag();
|
|
419
|
-
}, this.gridster.$options.resizable.delayStart);
|
|
420
|
-
const { cancelMouse, cancelMouseLeave, cancelOnBlur, cancelTouchMove, cancelTouchEnd, cancelTouchCancel } = this.zone.runOutsideAngular(() => {
|
|
421
|
-
// Note: all of these events are being added within the `<root>` zone since they all
|
|
422
|
-
// don't do any view updates and don't require Angular running change detection.
|
|
423
|
-
// All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`
|
|
424
|
-
// is responsible only for removing event listeners.
|
|
425
|
-
const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
|
|
426
|
-
const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
|
|
427
|
-
const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
|
|
428
|
-
const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
|
|
429
|
-
const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
|
|
430
|
-
const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
|
|
431
|
-
return {
|
|
432
|
-
cancelMouse,
|
|
433
|
-
cancelMouseLeave,
|
|
434
|
-
cancelOnBlur,
|
|
435
|
-
cancelTouchMove,
|
|
436
|
-
cancelTouchEnd,
|
|
437
|
-
cancelTouchCancel
|
|
438
|
-
};
|
|
439
|
-
});
|
|
440
|
-
function cancelMove(eventMove) {
|
|
441
|
-
GridsterUtils.checkTouchEvent(eventMove);
|
|
442
|
-
if (Math.abs(eventMove.clientX - e.clientX) > 9 ||
|
|
443
|
-
Math.abs(eventMove.clientY - e.clientY) > 9) {
|
|
444
|
-
cancelDrag();
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
function cancelDrag() {
|
|
448
|
-
clearTimeout(timeout);
|
|
449
|
-
cancelOnBlur();
|
|
450
|
-
cancelMouse();
|
|
451
|
-
cancelMouseLeave();
|
|
452
|
-
cancelTouchMove();
|
|
453
|
-
cancelTouchEnd();
|
|
454
|
-
cancelTouchCancel();
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
setItemTop(top) {
|
|
458
|
-
this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, top);
|
|
459
|
-
}
|
|
460
|
-
setItemLeft(left) {
|
|
461
|
-
this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, left, this.top);
|
|
462
|
-
}
|
|
463
|
-
setItemHeight(height) {
|
|
464
|
-
this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'height', height + 'px');
|
|
465
|
-
}
|
|
466
|
-
setItemWidth(width) {
|
|
467
|
-
this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'width', width + 'px');
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2dyaWRzdGVyL2xpYi9ncmlkc3RlclJlc2l6YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsTUFBTSxPQUFPLGlCQUFpQjtJQThENUIsWUFDRSxZQUE0QyxFQUM1QyxRQUFvQyxFQUM1QixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQXZEdEI7Ozs7V0FJRztRQUNLLHNCQUFpQixHQUVkLElBQUksQ0FBQztRQTBPaEIsYUFBUSxHQUFHLENBQUMsQ0FBYSxFQUFRLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUVBQXFFLENBQ3RFLENBQUM7WUFDSixDQUFDO1lBRUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FB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QUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFDcEIsUUFBUSxFQUNSLE1BQU0sR0FBRyxJQUFJLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUNwQixPQUFPLEVBQ1AsS0FBSyxHQUFHLElBQUksQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBEaXJUeXBlcyB9IGZyb20gJy4vZ3JpZHN0ZXJDb25maWcuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJQdXNoIH0gZnJvbSAnLi9ncmlkc3RlclB1c2guc2VydmljZSc7XHJcbmltcG9ydCB7IEdyaWRzdGVyUHVzaFJlc2l6ZSB9IGZyb20gJy4vZ3JpZHN0ZXJQdXNoUmVzaXplLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB9IGZyb20gJy4vZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlJztcclxuXHJcbmltcG9ydCB7IGNhbmNlbFNjcm9sbCwgc2Nyb2xsIH0gZnJvbSAnLi9ncmlkc3RlclNjcm9sbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3JpZHN0ZXJVdGlscyB9IGZyb20gJy4vZ3JpZHN0ZXJVdGlscy5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkc3RlclJlc2l6YWJsZSB7XHJcbiAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XHJcbiAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlO1xyXG4gIGxhc3RNb3VzZToge1xyXG4gICAgY2xpZW50WDogbnVtYmVyO1xyXG4gICAgY2xpZW50WTogbnVtYmVyO1xyXG4gIH07XHJcbiAgaXRlbUJhY2t1cDogbnVtYmVyW107XHJcbiAgcmVzaXplRXZlbnRTY3JvbGxUeXBlOiBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRpcmVjdGlvbiBmdW5jdGlvbiBtYXkgcmVmZXJlbmNlIGFueSBvZiB0aGUgYEdyaWRzdGVyUmVzaXphYmxlYCBjbGFzcyBtZXRob2RzLCB0aGF0IGFyZVxyXG4gICAqIHJlc3BvbnNpYmxlIGZvciBncmlkc3RlciByZXNpemUgd2hlbiB0aGUgYGRyYWdtb3ZlYCBldmVudCBpcyBiZWluZyBoYW5kbGVkLiBFLmcuIGl0IG1heSByZWZlcmVuY2VcclxuICAgKiB0aGUgYGhhbmRsZU5vcnRoYCBtZXRob2Qgd2hlbiB0aGUgbm9ydGggaGFuZGxlIGlzIHByZXNzZWQgYW5kIG1vdmVkIGJ5IGEgbW91c2UuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkaXJlY3Rpb25GdW5jdGlvbjpcclxuICAgIHwgKChldmVudDogUGljazxNb3VzZUV2ZW50LCAnY2xpZW50WCcgfCAnY2xpZW50WSc+KSA9PiB2b2lkKVxyXG4gICAgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcmVzaXplRW5hYmxlZCE6IGJvb2xlYW47XHJcbiAgcmVzaXphYmxlSGFuZGxlcyE6IHtcclxuICAgIHM6IGJvb2xlYW47XHJcbiAgICBlOiBib29sZWFuO1xyXG4gICAgbjogYm9vbGVhbjtcclxuICAgIHc6IGJvb2xlYW47XHJcbiAgICBzZTogYm9vbGVhbjtcclxuICAgIG5lOiBib29sZWFuO1xyXG4gICAgc3c6IGJvb2xlYW47XHJcbiAgICBudzogYm9vbGVhbjtcclxuICB9O1xyXG4gIG1vdXNlbW92ZSE6ICgpID0+IHZvaWQ7XHJcbiAgbW91c2V1cCE6ICgpID0+IHZvaWQ7XHJcbiAgbW91c2VsZWF2ZSE6ICgpID0+IHZvaWQ7XHJcbiAgY2FuY2VsT25CbHVyITogKCkgPT4gdm9pZDtcclxuICB0b3VjaG1vdmUhOiAoKSA9PiB2b2lkO1xyXG4gIHRvdWNoZW5kITogKCkgPT4gdm9pZDtcclxuICB0b3VjaGNhbmNlbCE6ICgpID0+IHZvaWQ7XHJcbiAgcHVzaCE6IEdyaWRzdGVyUHVzaDtcclxuICBwdXNoUmVzaXplITogR3JpZHN0ZXJQdXNoUmVzaXplO1xyXG4gIG1pbkhlaWdodCE6IG51bWJlcjtcclxuICBtaW5XaWR0aCE6IG51bWJlcjtcclxuICBvZmZzZXRUb3AhOiBudW1iZXI7XHJcbiAgb2Zmc2V0TGVmdCE6IG51bWJlcjtcclxuICBkaWZmVG9wITogbnVtYmVyO1xyXG4gIGRpZmZMZWZ0ITogbnVtYmVyO1xyXG4gIGRpZmZSaWdodCE6IG51bWJlcjtcclxuICBkaWZmQm90dG9tITogbnVtYmVyO1xyXG4gIG1hcmdpbiE6IG51bWJlcjtcclxuICBvdXRlck1hcmdpblRvcCE6IG51bWJlciB8IG51bGw7XHJcbiAgb3V0ZXJNYXJnaW5SaWdodCE6IG51bWJlciB8IG51bGw7XHJcbiAgb3V0ZXJNYXJnaW5Cb3R0b20hOiBudW1iZXIgfCBudWxsO1xyXG4gIG91dGVyTWFyZ2luTGVmdCE6IG51bWJlciB8IG51bGw7XHJcbiAgb3JpZ2luYWxDbGllbnRYITogbnVtYmVyO1xyXG4gIG9yaWdpbmFsQ2xpZW50WSE6IG51bWJlcjtcclxuICB0b3AhOiBudW1iZXI7XHJcbiAgbGVmdCE6IG51bWJlcjtcclxuICBib3R0b20hOiBudW1iZXI7XHJcbiAgcmlnaHQhOiBudW1iZXI7XHJcbiAgd2lkdGghOiBudW1iZXI7XHJcbiAgaGVpZ2h0ITogbnVtYmVyO1xyXG4gIG5ld1Bvc2l0aW9uITogbnVtYmVyO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGdyaWRzdGVySXRlbTogR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtID0gZ3JpZHN0ZXJJdGVtO1xyXG4gICAgdGhpcy5ncmlkc3RlciA9IGdyaWRzdGVyO1xyXG4gICAgdGhpcy5sYXN0TW91c2UgPSB7XHJcbiAgICAgIGNsaWVudFg6IDAsXHJcbiAgICAgIGNsaWVudFk6IDBcclxuICAgIH07XHJcbiAgICB0aGlzLml0ZW1CYWNrdXAgPSBbMCwgMCwgMCwgMF07XHJcbiAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZSA9IHtcclxuICAgICAgd2VzdDogZmFsc2UsXHJcbiAgICAgIGVhc3Q6IGZhbHNlLFxyXG4gICAgICBub3J0aDogZmFsc2UsXHJcbiAgICAgIHNvdXRoOiBmYWxzZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRzdGVyPy5wcmV2aWV3U3R5bGUoKTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIgPSB0aGlzLmdyaWRzdGVySXRlbSA9IG51bGwhO1xyXG4gIH1cclxuXHJcbiAgZHJhZ1N0YXJ0KGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChlLndoaWNoICYmIGUud2hpY2ggIT09IDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucmVzaXphYmxlICYmXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUuc3RhcnRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucmVzaXphYmxlLnN0YXJ0KFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0sXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0sXHJcbiAgICAgICAgZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1vdXNlbW92ZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICdtb3VzZW1vdmUnLFxyXG4gICAgICAgIHRoaXMuZHJhZ01vdmVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy50b3VjaG1vdmUgPSB0aGlzLmdyaWRzdGVyLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLmVsLFxyXG4gICAgICAgICd0b3VjaG1vdmUnLFxyXG4gICAgICAgIHRoaXMuZHJhZ01vdmVcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tb3VzZXVwID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAnbW91c2V1cCcsXHJcbiAgICAgIHRoaXMuZHJhZ1N0b3BcclxuICAgICk7XHJcbiAgICB0aGlzLm1vdXNlbGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICdtb3VzZWxlYXZlJyxcclxuICAgICAgdGhpcy5kcmFnU3RvcFxyXG4gICAgKTtcclxuICAgIHRoaXMuY2FuY2VsT25CbHVyID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAnd2luZG93JyxcclxuICAgICAgJ2JsdXInLFxyXG4gICAgICB0aGlzLmRyYWdTdG9wXHJcbiAgICApO1xyXG4gICAgdGhpcy50b3VjaGVuZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgJ3RvdWNoZW5kJyxcclxuICAgICAgdGhpcy5kcmFnU3RvcFxyXG4gICAgKTtcclxuICAgIHRoaXMudG91Y2hjYW5jZWwgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICd0b3VjaGNhbmNlbCcsXHJcbiAgICAgIHRoaXMuZHJhZ1N0b3BcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuYWRkQ2xhc3MoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAnZ3JpZHN0ZXItaXRlbS1yZXNpemluZydcclxuICAgICk7XHJcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRYID0gZS5jbGllbnRYO1xyXG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WSA9IGUuY2xpZW50WTtcclxuICAgIHRoaXMubGVmdCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmxlZnQ7XHJcbiAgICB0aGlzLnRvcCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnRvcDtcclxuICAgIHRoaXMub3JpZ2luYWxDbGllbnRYID0gZS5jbGllbnRYO1xyXG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICB0aGlzLndpZHRoID0gdGhpcy5ncmlkc3Rlckl0ZW0ud2lkdGg7XHJcbiAgICB0aGlzLmhlaWdodCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmhlaWdodDtcclxuICAgIHRoaXMuYm90dG9tID0gdGhpcy5ncmlkc3Rlckl0ZW0udG9wICsgdGhpcy5ncmlkc3Rlckl0ZW0uaGVpZ2h0O1xyXG4gICAgdGhpcy5yaWdodCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmxlZnQgKyB0aGlzLmdyaWRzdGVySXRlbS53aWR0aDtcclxuICAgIHRoaXMubWFyZ2luID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5tYXJnaW47XHJcbiAgICB0aGlzLm91dGVyTWFyZ2luVG9wID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblRvcDtcclxuICAgIHRoaXMub3V0ZXJNYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5SaWdodDtcclxuICAgIHRoaXMub3V0ZXJNYXJnaW5Cb3R0b20gPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luQm90dG9tO1xyXG4gICAgdGhpcy5vdXRlck1hcmdpbkxlZnQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcclxuICAgIHRoaXMub2Zmc2V0TGVmdCA9IHRoaXMuZ3JpZHN0ZXIuZWwuc2Nyb2xsTGVmdCAtIHRoaXMuZ3JpZHN0ZXIuZWwub2Zmc2V0TGVmdDtcclxuICAgIHRoaXMub2Zmc2V0VG9wID0gdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxUb3AgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldFRvcDtcclxuICAgIHRoaXMuZGlmZkxlZnQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmxlZnQ7XHJcbiAgICB0aGlzLmRpZmZSaWdodCA9IGUuY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMucmlnaHQ7XHJcbiAgICB0aGlzLmRpZmZUb3AgPSBlLmNsaWVudFkgKyB0aGlzLm9mZnNldFRvcCAtIHRoaXMudG9wO1xyXG4gICAgdGhpcy5kaWZmQm90dG9tID0gZS5jbGllbnRZICsgdGhpcy5vZmZzZXRUb3AgLSB0aGlzLmJvdHRvbTtcclxuICAgIHRoaXMubWluSGVpZ2h0ID1cclxuICAgICAgdGhpcy5ncmlkc3Rlci5wb3NpdGlvbllUb1BpeGVscyhcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5taW5JdGVtUm93cyB8fFxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5taW5JdGVtUm93c1xyXG4gICAgICApIC0gdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLm1pbldpZHRoID1cclxuICAgICAgdGhpcy5ncmlkc3Rlci5wb3NpdGlvblhUb1BpeGVscyhcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5taW5JdGVtQ29scyB8fFxyXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5taW5JdGVtQ29sc1xyXG4gICAgICApIC0gdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLmdyaWRzdGVyLm1vdmluZ0l0ZW0gPSB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbTtcclxuICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICB0aGlzLnB1c2ggPSBuZXcgR3JpZHN0ZXJQdXNoKHRoaXMuZ3JpZHN0ZXJJdGVtKTtcclxuICAgIHRoaXMucHVzaFJlc2l6ZSA9IG5ldyBHcmlkc3RlclB1c2hSZXNpemUodGhpcy5ncmlkc3Rlckl0ZW0pO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IHRydWU7XHJcbiAgICB0aGlzLmdyaWRzdGVyLnVwZGF0ZUdyaWQoKTtcclxuXHJcbiAgICBjb25zdCB7IGNsYXNzTGlzdCB9ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLW4nKSkge1xyXG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPSA8YW55PiB0aGlzLmhhbmRsZU5vcnRoO1xyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS13JykpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVFYXN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLndlc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlV2VzdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1zJykpIHtcclxuICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xyXG4gICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoO1xyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1lJykpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVXZXN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlRWFzdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1udycpKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLm5vcnRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5lYXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZU5vcnRoRWFzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVOb3J0aFdlc3Q7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtbmUnKSkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVOb3J0aFdlc3Q7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUubm9ydGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlTm9ydGhFYXN0O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLXN3JykpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlU291dGhFYXN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLnNvdXRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoV2VzdDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1zZScpKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLnNvdXRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoV2VzdDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5zb3V0aCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVTb3V0aEVhc3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYWdNb3ZlID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGlmICh0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID09PSBudWxsKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAnVGhlIGBkaXJlY3Rpb25GdW5jdGlvbmAgaGFzIG5vdCBiZWVuIHNldCBiZWZvcmUgY2FsbGluZyBgZHJhZ01vdmVgLidcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZSk7XHJcbiAgICB0aGlzLm9mZnNldFRvcCA9IHRoaXMuZ3JpZHN0ZXIuZWwuc2Nyb2xsVG9wIC0gdGhpcy5ncmlkc3Rlci5lbC5vZmZzZXRUb3A7XHJcbiAgICB0aGlzLm9mZnNldExlZnQgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbExlZnQgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldExlZnQ7XHJcbiAgICBzY3JvbGwoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIsXHJcbiAgICAgIHRoaXMubGVmdCxcclxuICAgICAgdGhpcy50b3AsXHJcbiAgICAgIHRoaXMud2lkdGgsXHJcbiAgICAgIHRoaXMuaGVpZ2h0LFxyXG4gICAgICBlLFxyXG4gICAgICB0aGlzLmxhc3RNb3VzZSxcclxuICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbixcclxuICAgICAgdHJ1ZSxcclxuICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2NhbGUgPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMuc2NhbGUgfHwgMTtcclxuICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24oe1xyXG4gICAgICBjbGllbnRYOlxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxDbGllbnRYICsgKGUuY2xpZW50WCAtIHRoaXMub3JpZ2luYWxDbGllbnRYKSAvIHNjYWxlLFxyXG4gICAgICBjbGllbnRZOiB0aGlzLm9yaWdpbmFsQ2xpZW50WSArIChlLmNsaWVudFkgLSB0aGlzLm9yaWdpbmFsQ2xpZW50WSkgLyBzY2FsZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WCA9IGUuY2xpZW50WDtcclxuICAgIHRoaXMubGFzdE1vdXNlLmNsaWVudFkgPSBlLmNsaWVudFk7XHJcbiAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcclxuICAgICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBkcmFnU3RvcCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgY2FuY2VsU2Nyb2xsKCk7XHJcbiAgICB0aGlzLm1vdXNlbW92ZSgpO1xyXG4gICAgdGhpcy5tb3VzZXVwKCk7XHJcbiAgICB0aGlzLm1vdXNlbGVhdmUoKTtcclxuICAgIHRoaXMuY2FuY2VsT25CbHVyKCk7XHJcbiAgICB0aGlzLnRvdWNobW92ZSgpO1xyXG4gICAgdGhpcy50b3VjaGVuZCgpO1xyXG4gICAgdGhpcy50b3VjaGNhbmNlbCgpO1xyXG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUgJiZcclxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZS5zdG9wXHJcbiAgICApIHtcclxuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUuc3RvcChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0sXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVySXRlbSxcclxuICAgICAgICAgIGVcclxuICAgICAgICApXHJcbiAgICAgICkudGhlbih0aGlzLm1ha2VSZXNpemUsIHRoaXMuY2FuY2VsUmVzaXplKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWFrZVJlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAgICdncmlkc3Rlci1pdGVtLXJlc2l6aW5nJ1xyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlcikge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIubW92aW5nSXRlbSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgY2FuY2VsUmVzaXplID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0uY29scyB8fCAxO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ucm93cyB8fCAxO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ueCB8fCAwO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ueSB8fCAwO1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xyXG4gICAgdGhpcy5wdXNoLnJlc3RvcmVJdGVtcygpO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplLnJlc3RvcmVJdGVtcygpO1xyXG4gICAgdGhpcy5wdXNoLmRlc3Ryb3koKTtcclxuICAgIHRoaXMucHVzaCA9IG51bGwhO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplLmRlc3Ryb3koKTtcclxuICAgIHRoaXMucHVzaFJlc2l6ZSA9IG51bGwhO1xyXG4gIH07XHJcblxyXG4gIG1ha2VSZXNpemUgPSAoKTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5zZXRTaXplKCk7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5jaGVja0l0ZW1DaGFuZ2VzKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSxcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbVxyXG4gICAgKTtcclxuICAgIHRoaXMucHVzaC5zZXRQdXNoZWRJdGVtcygpO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplLnNldFB1c2hlZEl0ZW1zKCk7XHJcbiAgICB0aGlzLnB1c2guZGVzdHJveSgpO1xyXG4gICAgdGhpcy5wdXNoID0gbnVsbCE7XHJcbiAgICB0aGlzLnB1c2hSZXNpemUuZGVzdHJveSgpO1xyXG4gICAgdGhpcy5wdXNoUmVzaXplID0gbnVsbCE7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVOb3J0aCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLnRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5kaWZmVG9wO1xyXG4gICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSAtIHRoaXMudG9wO1xyXG4gICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcclxuICAgICAgdGhpcy50b3AgPSB0aGlzLmJvdHRvbSAtIHRoaXMubWluSGVpZ2h0O1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZW5hYmxlQm91bmRhcnlDb250cm9sKSB7XHJcbiAgICAgIHRoaXMudG9wID0gTWF0aC5tYXgoMCwgdGhpcy50b3ApO1xyXG4gICAgICB0aGlzLmhlaWdodCA9IHRoaXMuYm90dG9tIC0gdGhpcy50b3A7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXJnaW5Ub3AgPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucHVzaEl0ZW1zID8gdGhpcy5tYXJnaW4gOiAwO1xyXG4gICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuZ3JpZHN0ZXIucGl4ZWxzVG9Qb3NpdGlvblkoXHJcbiAgICAgIHRoaXMudG9wICsgbWFyZ2luVG9wLFxyXG4gICAgICBNYXRoLmZsb29yXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgIT09IHRoaXMubmV3UG9zaXRpb24pIHtcclxuICAgICAgdGhpcy5pdGVtQmFja3VwWzFdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcclxuICAgICAgdGhpcy5pdGVtQmFja3VwWzNdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cztcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyArPVxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgLSB0aGlzLm5ld1Bvc2l0aW9uO1xyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55ID0gdGhpcy5uZXdQb3NpdGlvbjtcclxuICAgICAgdGhpcy5wdXNoUmVzaXplLnB1c2hJdGVtcyh0aGlzLnB1c2hSZXNpemUuZnJvbVNvdXRoKTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbVNvdXRoLFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVB1c2hPblJlc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55ID0gdGhpcy5pdGVtQmFja3VwWzFdO1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgPSB0aGlzLml0ZW1CYWNrdXBbM107XHJcbiAgICAgICAgdGhpcy50b3AgPSB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWVRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbVRvcChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbUhlaWdodChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcclxuICAgICAgdGhpcy5wdXNoLmNoZWNrUHVzaEJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0SXRlbVRvcCh0aGlzLnRvcCk7XHJcbiAgICB0aGlzLnNldEl0ZW1IZWlnaHQodGhpcy5oZWlnaHQpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlV2VzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICBjb25zdCBjbGllbnRYID1cclxuICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVExcclxuICAgICAgICA/IHRoaXMub3JpZ2luYWxDbGllbnRYICsgKHRoaXMub3JpZ2luYWxDbGllbnRYIC0gZS5jbGllbnRYKVxyXG4gICAgICAgIDogZS5jbGllbnRYO1xyXG4gICAgdGhpcy5sZWZ0ID0gY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMuZGlmZkxlZnQ7XHJcblxyXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB0aGlzLmxlZnQ7XHJcbiAgICBpZiAodGhpcy5taW5XaWR0aCA+IHRoaXMud2lkdGgpIHtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMubWluV2lkdGg7XHJcbiAgICAgIHRoaXMubGVmdCA9IHRoaXMucmlnaHQgLSB0aGlzLm1pbldpZHRoO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZW5hYmxlQm91bmRhcnlDb250cm9sKSB7XHJcbiAgICAgIHRoaXMubGVmdCA9IE1hdGgubWF4KDAsIHRoaXMubGVmdCk7XHJcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWFyZ2luTGVmdCA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyB0aGlzLm1hcmdpbiA6IDA7XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWChcclxuICAgICAgdGhpcy5sZWZ0ICsgbWFyZ2luTGVmdCxcclxuICAgICAgTWF0aC5mbG9vclxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54ICE9PSB0aGlzLm5ld1Bvc2l0aW9uKSB7XHJcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFswXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLng7XHJcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFsyXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHM7XHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgKz1cclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54IC0gdGhpcy5uZXdQb3NpdGlvbjtcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCA9IHRoaXMubmV3UG9zaXRpb247XHJcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21FYXN0KTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbUVhc3QsXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtKSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggPSB0aGlzLml0ZW1CYWNrdXBbMF07XHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyA9IHRoaXMuaXRlbUJhY2t1cFsyXTtcclxuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbUxlZnQoXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldEl0ZW1XaWR0aChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scykgLVxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcclxuICAgICAgdGhpcy5wdXNoLmNoZWNrUHVzaEJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0SXRlbUxlZnQodGhpcy5sZWZ0KTtcclxuICAgIHRoaXMuc2V0SXRlbVdpZHRoKHRoaXMud2lkdGgpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU291dGggPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5oZWlnaHQgPSBlLmNsaWVudFkgKyB0aGlzLm9mZnNldFRvcCAtIHRoaXMuZGlmZkJvdHRvbSAtIHRoaXMudG9wO1xyXG4gICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcclxuICAgIH1cclxuICAgIHRoaXMuYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcclxuICAgIGlmICh0aGlzLmdyaWRzdGVyLm9wdGlvbnMuZW5hYmxlQm91bmRhcnlDb250cm9sKSB7XHJcbiAgICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMub3V0ZXJNYXJnaW5Cb3R0b20gPz8gdGhpcy5tYXJnaW47XHJcbiAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgIHRoaXMuYm90dG9tID0gTWF0aC5taW4oXHJcbiAgICAgICAgdGhpcy5ib3R0b20sXHJcbiAgICAgICAgYm94LmJvdHRvbSAtIGJveC50b3AgLSAyICogbWFyZ2luXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ib3R0b20gLSB0aGlzLnRvcDtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyAwIDogdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWShcclxuICAgICAgdGhpcy5ib3R0b20gKyBtYXJnaW5Cb3R0b20sXHJcbiAgICAgIE1hdGguY2VpbFxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSArIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgIT09XHJcbiAgICAgIHRoaXMubmV3UG9zaXRpb25cclxuICAgICkge1xyXG4gICAgICB0aGlzLml0ZW1CYWNrdXBbM10gPSB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzO1xyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzID1cclxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uIC0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcclxuICAgICAgdGhpcy5wdXNoUmVzaXplLnB1c2hJdGVtcyh0aGlzLnB1c2hSZXNpemUuZnJvbU5vcnRoKTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbU5vcnRoLFxyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVB1c2hPblJlc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzID0gdGhpcy5pdGVtQmFja3VwWzNdO1xyXG4gICAgICAgIHRoaXMuc2V0SXRlbUhlaWdodChcclxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxyXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcclxuICAgICAgdGhpcy5wdXNoLmNoZWNrUHVzaEJhY2soKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0SXRlbUhlaWdodCh0aGlzLmhlaWdodCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFYXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIGNvbnN0IGNsaWVudFggPVxyXG4gICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTFxyXG4gICAgICAgID8gdGhpcy5vcmlnaW5hbENsaWVudFggKyAodGhpcy5vcmlnaW5hbENsaWVudFggLSBlLmNsaWVudFgpXHJcbiAgICAgICAgOiBlLmNsaWVudFg7XHJcbiAgICB0aGlzLndpZHRoID0gY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMuZGlmZlJpZ2h0IC0gdGhpcy5sZWZ0O1xyXG5cclxuICAgIGlmICh0aGlzLm1pbldpZHRoID4gdGhpcy53aWR0aCkge1xyXG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5taW5XaWR0aDtcclxuICAgIH1cclxuICAgIHRoaXMucmlnaHQgPSB0aGlzLmxlZnQgKyB0aGlzLndpZHRoO1xyXG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5lbmFibGVCb3VuZGFyeUNvbnRyb2wpIHtcclxuICAgICAgY29uc3QgbWFyZ2luID0gdGhpcy5vdXRlck1hcmdpblJpZ2h0ID8/IHRoaXMubWFyZ2luO1xyXG4gICAgICBjb25zdCBib3ggPSB0aGlzLmdyaWRzdGVyLmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICB0aGlzLnJpZ2h0ID0gTWF0aC5taW4odGhpcy5yaWdodCwgYm94LnJpZ2h0IC0gYm94LmxlZnQgLSAyICogbWFyZ2luKTtcclxuICAgICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB0aGlzLmxlZnQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyAwIDogdGhpcy5tYXJnaW47XHJcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWChcclxuICAgICAgdGhpcy5yaWdodCArIG1hcmdpblJpZ2h0LFxyXG4gICAgICBNYXRoLmNlaWxcclxuICAgICk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggKyB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzICE9PVxyXG4gICAgICB0aGlzLm5ld1Bvc2l0aW9uXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5pdGVtQmFja3VwWzJdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scztcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scyA9XHJcbiAgICAgICAgdGhpcy5uZXdQb3NpdGlvbiAtIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLng7XHJcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21XZXN0KTtcclxuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcclxuICAgICAgICB0aGlzLnB1c2guZnJvbVdlc3QsXHJcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtKSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgPSB0aGlzLml0ZW1CYWNrdXBbMl07XHJcbiAgICAgICAgdGhpcy5zZXRJdGVtV2lkdGgoXHJcbiAgICAgICAgICB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMpIC1cclxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XHJcbiAgICAgIHRoaXMucHVzaC5jaGVja1B1c2hCYWNrKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLndpZHRoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGhhbmRsZU5vcnRoV2VzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmhhbmRsZU5vcnRoKGUpO1xyXG4gICAgdGhpcy5oYW5kbGVXZXN0KGUpO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTm9ydGhFYXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuaGFuZGxlTm9ydGgoZSk7XHJcbiAgICB0aGlzLmhhbmRsZUVhc3QoZSk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVTb3V0aFdlc3QgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xyXG4gICAgdGhpcy5oYW5kbGVTb3V0aChlKTtcclxuICAgIHRoaXMuaGFuZGxlV2VzdChlKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGhhbmRsZVNvdXRoRWFzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XHJcbiAgICB0aGlzLmhhbmRsZVNvdXRoKGUpO1xyXG4gICAgdGhpcy5oYW5kbGVFYXN0KGUpO1xyXG4gIH07XHJcblxyXG4gIHRvZ2dsZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplRW5hYmxlZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmNhbkJlUmVzaXplZCgpO1xyXG4gICAgdGhpcy5yZXNpemFibGVIYW5kbGVzID0gdGhpcy5ncmlkc3Rlckl0ZW0uZ2V0UmVzaXphYmxlSGFuZGxlcygpO1xyXG4gIH1cclxuXHJcbiAgZHJhZ1N0YXJ0RGVsYXkoZTogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgIEdyaWRzdGVyVXRpbHMuY2hlY2tUb3VjaEV2ZW50KGUpO1xyXG5cclxuICAgIGlmICghdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5yZXNpemFibGUuZGVsYXlTdGFydCkge1xyXG4gICAgICB0aGlzLmRyYWdTdGFydChlIGFzIE1vdXNlRXZlbnQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRyYWdTdGFydChlIGFzIE1vdXNlRXZlbnQpO1xyXG4gICAgICBjYW5jZWxEcmFnKCk7XHJcbiAgICB9LCB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnJlc2l6YWJsZS5kZWxheVN0YXJ0KTtcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGNhbmNlbE1vdXNlLFxyXG4gICAgICBjYW5jZWxNb3VzZUxlYXZlLFxyXG4gICAgICBjYW5jZWxPbkJsdXIsXHJcbiAgICAgIGNhbmNlbFRvdWNoTW92ZSxcclxuICAgICAgY2FuY2VsVG91Y2hFbmQsXHJcbiAgICAgIGNhbmNlbFRvdWNoQ2FuY2VsXHJcbiAgICB9ID0gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuICAgICAgLy8gTm90ZTogYWxsIG9mIHRoZXNlIGV2ZW50cyBhcmUgYmVpbmcgYWRkZWQgd2l0aGluIHRoZSBgPHJvb3Q+YCB6b25lIHNpbmNlIHRoZXkgYWxsXHJcbiAgICAgIC8vIGRvbid0IGRvIGFueSB2aWV3IHVwZGF0ZXMgYW5kIGRvbid0IHJlcXVpcmUgQW5ndWxhciBydW5uaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcbiAgICAgIC8vIEFsbCBldmVudCBsaXN0ZW5lcnMgY2FsbCBgY2FuY2VsRHJhZ2Agb25jZSB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCwgdGhlIGBjYW5jZWxEcmFnYFxyXG4gICAgICAvLyBpcyByZXNwb25zaWJsZSBvbmx5IGZvciByZW1vdmluZyBldmVudCBsaXN0ZW5lcnMuXHJcblxyXG4gICAgICBjb25zdCBjYW5jZWxNb3VzZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICdtb3VzZXVwJyxcclxuICAgICAgICBjYW5jZWxEcmFnXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGNhbmNlbE1vdXNlTGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICAgJ2RvY3VtZW50JyxcclxuICAgICAgICAnbW91c2VsZWF2ZScsXHJcbiAgICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjYW5jZWxPbkJsdXIgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXHJcbiAgICAgICAgJ3dpbmRvdycsXHJcbiAgICAgICAgJ2JsdXInLFxyXG4gICAgICAgIGNhbmNlbERyYWdcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgY2FuY2VsVG91Y2hNb3ZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxyXG4gICAgICAgICdkb2N1bWVudCcsXHJcbiAgICAgICAgJ3RvdWNobW92ZScsXHJcbiAgICAgICAgY2FuY2VsTW92ZVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjYW5jZWxUb3VjaEVuZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICd0b3VjaGVuZCcsXHJcbiAgICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBjYW5jZWxUb3VjaENhbmNlbCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcclxuICAgICAgICAnZG9jdW1lbnQnLFxyXG4gICAgICAgICd0b3VjaGNhbmNlbCcsXHJcbiAgICAgICAgY2FuY2VsRHJhZ1xyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGNhbmNlbE1vdXNlLFxyXG4gICAgICAgIGNhbmNlbE1vdXNlTGVhdmUsXHJcbiAgICAgICAgY2FuY2VsT25CbHVyLFxyXG4gICAgICAgIGNhbmNlbFRvdWNoTW92ZSxcclxuICAgICAgICBjYW5jZWxUb3VjaEVuZCxcclxuICAgICAgICBjYW5jZWxUb3VjaENhbmNlbFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsTW92ZShldmVudE1vdmU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZXZlbnRNb3ZlKTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIE1hdGguYWJzKGV2ZW50TW92ZS5jbGllbnRYIC0gKGUgYXMgTW91c2VFdmVudCkuY2xpZW50WCkgPiA5IHx8XHJcbiAgICAgICAgTWF0aC5hYnMoZXZlbnRNb3ZlLmNsaWVudFkgLSAoZSBhcyBNb3VzZUV2ZW50KS5jbGllbnRZKSA+IDlcclxuICAgICAgKSB7XHJcbiAgICAgICAgY2FuY2VsRHJhZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2FuY2VsRHJhZygpOiB2b2lkIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICBjYW5jZWxPbkJsdXIoKTtcclxuICAgICAgY2FuY2VsTW91c2UoKTtcclxuICAgICAgY2FuY2VsTW91c2VMZWF2ZSgpO1xyXG4gICAgICBjYW5jZWxUb3VjaE1vdmUoKTtcclxuICAgICAgY2FuY2VsVG91Y2hFbmQoKTtcclxuICAgICAgY2FuY2VsVG91Y2hDYW5jZWwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEl0ZW1Ub3AodG9wOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JpZHN0ZXIuZ3JpZFJlbmRlcmVyLnNldENlbGxQb3NpdGlvbihcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIsXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICB0aGlzLmxlZnQsXHJcbiAgICAgIHRvcFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1MZWZ0KGxlZnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkc3Rlci5ncmlkUmVuZGVyZXIuc2V0Q2VsbFBvc2l0aW9uKFxyXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlcixcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uZWwsXHJcbiAgICAgIGxlZnQsXHJcbiAgICAgIHRoaXMudG9wXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0SXRlbUhlaWdodChoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxyXG4gICAgICAnaGVpZ2h0JyxcclxuICAgICAgaGVpZ2h0ICsgJ3B4J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldEl0ZW1XaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5zZXRTdHlsZShcclxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uZWwsXHJcbiAgICAgICd3aWR0aCcsXHJcbiAgICAgIHdpZHRoICsgJ3B4J1xyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmEtZGFzaGJvYXJkLWZyYW1ld29yay9zcmMvZ3JpZHN0ZXIvbGliL2dyaWRzdGVyUmVzaXplRXZlbnRUeXBlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB7XHJcbiAgbm9ydGg6IGJvb2xlYW47XHJcbiAgc291dGg6IGJvb2xlYW47XHJcbiAgd2VzdDogYm9vbGVhbjtcclxuICBlYXN0OiBib29sZWFuO1xyXG59XHJcbiJdfQ==
|