@kepler.gl/deckgl-layers 3.3.0-alpha.4 → 3.3.0-alpha.5
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/dist/globe/atmosphere-layer.d.ts +13 -2
- package/dist/globe/atmosphere-layer.js +48 -12
- package/dist/globe/globe-depth-disk-layer.d.ts +1 -0
- package/dist/globe/globe-depth-disk-layer.js +3 -3
- package/dist/globe/globe-layers.d.ts +8 -2
- package/dist/globe/globe-layers.js +9 -5
- package/dist/globe/globe-view.js +129 -41
- package/dist/raster/images.d.ts +10 -1
- package/dist/raster/images.js +18 -6
- package/dist/raster/raster-layer/raster-layer.d.ts +4 -0
- package/dist/raster/raster-layer/raster-layer.js +58 -8
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +4 -0
- package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +58 -8
- package/package.json +5 -7
package/dist/globe/globe-view.js
CHANGED
|
@@ -17,6 +17,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
|
|
|
17
17
|
var DeckCore = _interopRequireWildcard(require("@deck.gl/core"));
|
|
18
18
|
var _core2 = require("@math.gl/core");
|
|
19
19
|
var _constants = require("@kepler.gl/constants");
|
|
20
|
+
var _globeDepthDiskLayer = require("./globe-depth-disk-layer");
|
|
20
21
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
21
22
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
22
23
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -41,6 +42,47 @@ function zoomAdjust(latitude) {
|
|
|
41
42
|
return Math.log2(Math.PI * Math.cos(latitude * Math.PI / 180));
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
/**
|
|
46
|
+
* Returns true if the screen pixel `pos` lies within the visible globe
|
|
47
|
+
* silhouette.
|
|
48
|
+
*
|
|
49
|
+
* GlobeViewport.unproject() clamps the ray–sphere discriminant with
|
|
50
|
+
* Math.max(0, r²−d²), so it always returns a valid lng/lat even for
|
|
51
|
+
* off-globe pixels (snapping to the limb). We replicate the same ray cast
|
|
52
|
+
* but check the discriminant before the clamp using the standard
|
|
53
|
+
* squared-distance-from-origin-to-ray formula: |P₀ × dir|² / |dir|².
|
|
54
|
+
*/
|
|
55
|
+
function isPixelOnGlobe(viewport, pos) {
|
|
56
|
+
var m = viewport.pixelUnprojectionMatrix;
|
|
57
|
+
if (!m) return true; // conservative fallback if matrix unavailable
|
|
58
|
+
|
|
59
|
+
// Cast a ray through the pixel at the near and far planes.
|
|
60
|
+
var p0 = _core2.vec4.transformMat4([], [pos[0], pos[1], -1, 1], m);
|
|
61
|
+
var p1 = _core2.vec4.transformMat4([], [pos[0], pos[1], 1, 1], m);
|
|
62
|
+
if (p0[3] === 0 || p1[3] === 0) return true; // degenerate projection
|
|
63
|
+
|
|
64
|
+
// Perspective-divide to world space.
|
|
65
|
+
var ax = p0[0] / p0[3],
|
|
66
|
+
ay = p0[1] / p0[3],
|
|
67
|
+
az = p0[2] / p0[3];
|
|
68
|
+
var bx = p1[0] / p1[3],
|
|
69
|
+
by = p1[1] / p1[3],
|
|
70
|
+
bz = p1[2] / p1[3];
|
|
71
|
+
|
|
72
|
+
// Ray direction.
|
|
73
|
+
var dx = bx - ax,
|
|
74
|
+
dy = by - ay,
|
|
75
|
+
dz = bz - az;
|
|
76
|
+
|
|
77
|
+
// Squared distance from the origin (globe center) to the ray:
|
|
78
|
+
// d² = |P₀ × dir|² / |dir|²
|
|
79
|
+
var cx = ay * dz - az * dy;
|
|
80
|
+
var cy = az * dx - ax * dz;
|
|
81
|
+
var cz = ax * dy - ay * dx;
|
|
82
|
+
var dSqr = (cx * cx + cy * cy + cz * cz) / (dx * dx + dy * dy + dz * dz);
|
|
83
|
+
return dSqr <= _globeDepthDiskLayer.GLOBE_COMMON_RADIUS * _globeDepthDiskLayer.GLOBE_COMMON_RADIUS;
|
|
84
|
+
}
|
|
85
|
+
|
|
44
86
|
/**
|
|
45
87
|
* Custom GlobeController that restores zoom-to-cursor behavior.
|
|
46
88
|
*
|
|
@@ -60,6 +102,16 @@ var ZoomToCursorGlobeController = /*#__PURE__*/function (_GlobeController) {
|
|
|
60
102
|
_this = _callSuper(this, ZoomToCursorGlobeController, [].concat(args));
|
|
61
103
|
var OriginalGlobeState = _this.ControllerState;
|
|
62
104
|
|
|
105
|
+
// Tracks when the most recent off-globe wheel-zoom tick fired.
|
|
106
|
+
// Stored as a controller-level closure variable rather than in ViewState
|
|
107
|
+
// because deck.gl's Controller never calls zoomEnd() for wheel events —
|
|
108
|
+
// only for pinch/touch — so there is no reliable hook to clear a
|
|
109
|
+
// ViewState-based sentinel after a wheel scroll session ends.
|
|
110
|
+
// A simple timestamp lets us detect when a new scroll burst has started
|
|
111
|
+
// (> BURST_TIMEOUT_MS since the last off-globe tick) so cursor-anchored
|
|
112
|
+
// zoom can resume naturally on the next independent scroll.
|
|
113
|
+
var offGlobeZoomAt = null;
|
|
114
|
+
|
|
63
115
|
// Create patched GlobeState that supports zoom-to-cursor
|
|
64
116
|
_this.ControllerState = /*#__PURE__*/function (_OriginalGlobeState) {
|
|
65
117
|
function PatchedGlobeState() {
|
|
@@ -130,67 +182,73 @@ var ZoomToCursorGlobeController = /*#__PURE__*/function (_GlobeController) {
|
|
|
130
182
|
var _getState = this.getState(),
|
|
131
183
|
startZoom = _getState.startZoom,
|
|
132
184
|
startZoomLngLat = _getState.startZoomLngLat;
|
|
185
|
+
var currentProps = this.getViewportProps();
|
|
133
186
|
if (!startZoomLngLat) {
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
187
|
+
// Wheel zoom: re-derive anchor each tick (pinch sets it once in zoomStart).
|
|
188
|
+
startZoom = currentProps.zoom;
|
|
189
|
+
|
|
190
|
+
// Suppress cursor-anchoring when the cursor is off-globe or when a
|
|
191
|
+
// recent tick was off-globe (within BURST_TIMEOUT_MS). deck.gl never
|
|
192
|
+
// calls zoomEnd() for wheel events so we track the session with the
|
|
193
|
+
// closure variable `offGlobeZoomAt` rather than ViewState.
|
|
194
|
+
var BURST_TIMEOUT_MS = 200;
|
|
195
|
+
var now = Date.now();
|
|
196
|
+
var anchorViewport = this.makeViewport(currentProps);
|
|
197
|
+
var onGlobe = isPixelOnGlobe(anchorViewport, startPos || pos);
|
|
198
|
+
if (!onGlobe) offGlobeZoomAt = now;
|
|
199
|
+
if (!onGlobe || offGlobeZoomAt !== null && now - offGlobeZoomAt < BURST_TIMEOUT_MS) {
|
|
200
|
+
var _zoom = this._constrainZoom(startZoom + Math.log2(scale));
|
|
201
|
+
return this._getUpdatedState({
|
|
202
|
+
zoom: _zoom
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
offGlobeZoomAt = null;
|
|
138
206
|
startZoomLngLat = this._unproject(startPos) || this._unproject(pos);
|
|
139
207
|
}
|
|
208
|
+
var zoom = this._constrainZoom(startZoom + Math.log2(scale));
|
|
140
209
|
if (!startZoomLngLat) {
|
|
141
|
-
return this
|
|
210
|
+
return this._getUpdatedState({
|
|
211
|
+
zoom: zoom
|
|
212
|
+
});
|
|
142
213
|
}
|
|
143
|
-
var currentProps = this.getViewportProps();
|
|
144
|
-
var zoom = this._constrainZoom(startZoom + Math.log2(scale));
|
|
145
214
|
|
|
146
|
-
// Zoom-out (scale < 1): exact cursor anchoring is unstable
|
|
147
|
-
// geo
|
|
148
|
-
//
|
|
149
|
-
// the geo location under the cursor — the map recenters on the cursor as you
|
|
150
|
-
// zoom out, similar in spirit to zoom-in, but without the pole-ward spin.
|
|
215
|
+
// Zoom-out (scale < 1): exact cursor anchoring is unstable near the limb
|
|
216
|
+
// (non-linear geo-to-pixel mapping pulls the view toward the poles).
|
|
217
|
+
// Instead, gently steer the center toward the cursor location per tick.
|
|
151
218
|
if (scale < 1) {
|
|
152
|
-
|
|
153
|
-
var cursorValid = Array.isArray(cursorLngLat) && Number.isFinite(cursorLngLat[0]) && Number.isFinite(cursorLngLat[1]);
|
|
154
|
-
if (!cursorValid) {
|
|
219
|
+
if (!Array.isArray(startZoomLngLat) || !Number.isFinite(startZoomLngLat[0]) || !Number.isFinite(startZoomLngLat[1])) {
|
|
155
220
|
return this._getUpdatedState({
|
|
156
221
|
zoom: zoom
|
|
157
222
|
});
|
|
158
223
|
}
|
|
159
224
|
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
// more. Clamped so a single large tick can't overshoot.
|
|
163
|
-
var RECENTER_STRENGTH = 0.11;
|
|
164
|
-
var t = Math.min(1, (1 - scale) * RECENTER_STRENGTH);
|
|
225
|
+
// Per-tick lerp strength scales with zoom-out amount; clamped to avoid overshoot.
|
|
226
|
+
var t = Math.min(1, (1 - scale) * 0.11);
|
|
165
227
|
|
|
166
|
-
// Shortest-path longitude interpolation (
|
|
167
|
-
var dLng =
|
|
228
|
+
// Shortest-path longitude interpolation (handles antimeridian wrap).
|
|
229
|
+
var dLng = startZoomLngLat[0] - currentProps.longitude;
|
|
168
230
|
if (dLng > 180) dLng -= 360;
|
|
169
231
|
if (dLng < -180) dLng += 360;
|
|
170
232
|
return this._getUpdatedState({
|
|
171
233
|
zoom: zoom,
|
|
172
234
|
longitude: currentProps.longitude + dLng * t,
|
|
173
|
-
latitude: currentProps.latitude + (
|
|
235
|
+
latitude: currentProps.latitude + (startZoomLngLat[1] - currentProps.latitude) * t
|
|
174
236
|
});
|
|
175
237
|
}
|
|
176
238
|
var zoomedViewport = this.makeViewport(_objectSpread(_objectSpread({}, currentProps), {}, {
|
|
177
239
|
zoom: zoom
|
|
178
240
|
}));
|
|
179
241
|
|
|
180
|
-
//
|
|
181
|
-
//
|
|
182
|
-
//
|
|
183
|
-
//
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
// Guard: unproject can return NaN/undefined for a pixel off the sphere
|
|
187
|
-
// silhouette; in that case just apply the new zoom about the center.
|
|
188
|
-
var anchorValid = Array.isArray(fromPosition) && Number.isFinite(fromPosition[0]) && Number.isFinite(fromPosition[1]);
|
|
189
|
-
if (!anchorValid) {
|
|
242
|
+
// Zoom-in: exact anchor — unproject the cursor in the post-zoom viewport and
|
|
243
|
+
// shift the center so the grabbed geo point lands back under the cursor.
|
|
244
|
+
// Guard with isPixelOnGlobe: if pos moved off-globe during a fast pinch,
|
|
245
|
+
// fall back to center zoom.
|
|
246
|
+
if (!isPixelOnGlobe(zoomedViewport, pos)) {
|
|
190
247
|
return this._getUpdatedState({
|
|
191
248
|
zoom: zoom
|
|
192
249
|
});
|
|
193
250
|
}
|
|
251
|
+
var fromPosition = zoomedViewport.unproject(pos);
|
|
194
252
|
return this._getUpdatedState({
|
|
195
253
|
zoom: zoom,
|
|
196
254
|
longitude: startZoomLngLat[0] - fromPosition[0] + zoomedViewport.longitude,
|
|
@@ -223,6 +281,18 @@ var ZoomToCursorGlobeController = /*#__PURE__*/function (_GlobeController) {
|
|
|
223
281
|
key: "panStart",
|
|
224
282
|
value: function panStart(_ref2) {
|
|
225
283
|
var pos = _ref2.pos;
|
|
284
|
+
var viewport = this.makeViewport(this.getViewportProps());
|
|
285
|
+
// If the mousedown pixel is outside the globe silhouette, store `false`
|
|
286
|
+
// as an explicit sentinel so that every subsequent `pan` call for this
|
|
287
|
+
// gesture is a no-op. We can't rely on `_unproject(pos)` returning
|
|
288
|
+
// undefined here because GlobeViewport.unproject clamps the
|
|
289
|
+
// ray–sphere discriminant to 0 via Math.max(0, …), which means it
|
|
290
|
+
// always returns a valid-looking lng/lat even for off-globe pixels.
|
|
291
|
+
if (!isPixelOnGlobe(viewport, pos)) {
|
|
292
|
+
return this._getUpdatedState({
|
|
293
|
+
startPanLngLat: false
|
|
294
|
+
});
|
|
295
|
+
}
|
|
226
296
|
return this._getUpdatedState({
|
|
227
297
|
startPanLngLat: this._unproject(pos)
|
|
228
298
|
});
|
|
@@ -232,19 +302,37 @@ var ZoomToCursorGlobeController = /*#__PURE__*/function (_GlobeController) {
|
|
|
232
302
|
value: function pan(_ref3) {
|
|
233
303
|
var pos = _ref3.pos,
|
|
234
304
|
startPos = _ref3.startPos;
|
|
235
|
-
var
|
|
305
|
+
var storedStart = this.getState().startPanLngLat;
|
|
306
|
+
var props = this.getViewportProps();
|
|
307
|
+
var viewport = this.makeViewport(props);
|
|
308
|
+
|
|
309
|
+
// `false` means the drag started outside the globe. If the cursor has
|
|
310
|
+
// now moved onto the globe, latch the current position as the anchor
|
|
311
|
+
// so rotation begins from the entry point. Otherwise stay frozen.
|
|
312
|
+
if (storedStart === false) {
|
|
313
|
+
if (!isPixelOnGlobe(viewport, pos)) {
|
|
314
|
+
return this;
|
|
315
|
+
}
|
|
316
|
+
// Cursor just entered the globe — establish the anchor and return
|
|
317
|
+
// without moving; the next pan event will apply the first delta.
|
|
318
|
+
return this._getUpdatedState({
|
|
319
|
+
startPanLngLat: this._unproject(pos)
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
var startPanLngLat = storedStart || this._unproject(startPos);
|
|
236
323
|
if (!startPanLngLat) {
|
|
237
324
|
return this;
|
|
238
325
|
}
|
|
239
|
-
var props = this.getViewportProps();
|
|
240
|
-
var viewport = this.makeViewport(props);
|
|
241
|
-
var fromPosition = viewport.unproject(pos);
|
|
242
326
|
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
327
|
+
// Once the cursor leaves the globe silhouette mid-drag, freeze the view.
|
|
328
|
+
// viewport.unproject() snaps off-globe pixels to the nearest limb point
|
|
329
|
+
// (via Math.max(0, …) in its ray–sphere discriminant), so without this
|
|
330
|
+
// guard the globe would keep rotating toward the edge as the cursor moves
|
|
331
|
+
// further outside.
|
|
332
|
+
if (!isPixelOnGlobe(viewport, pos)) {
|
|
246
333
|
return this;
|
|
247
334
|
}
|
|
335
|
+
var fromPosition = viewport.unproject(pos);
|
|
248
336
|
var longitude = startPanLngLat[0] - fromPosition[0] + props.longitude;
|
|
249
337
|
var latitude = startPanLngLat[1] - fromPosition[1] + props.latitude;
|
|
250
338
|
latitude = (0, _core2.clamp)(latitude, -_constants.GLOBE_MAX_LATITUDE, _constants.GLOBE_MAX_LATITUDE);
|
|
@@ -313,4 +401,4 @@ var KeplerGlobeView = exports.KeplerGlobeView = /*#__PURE__*/function (_DeckGlob
|
|
|
313
401
|
}]);
|
|
314
402
|
}(DeckGlobeView);
|
|
315
403
|
KeplerGlobeView.displayName = 'KeplerGlobeView';
|
|
316
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNrQ29yZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb3JlMiIsIl9jb25zdGFudHMiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsIl9nZXRQcm90b3R5cGVPZjIiLCJwcm90b3R5cGUiLCJfY2FsbFN1cGVyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiRGVja0dsb2JlVmlldyIsIl9HbG9iZVZpZXciLCJHbG9iZUNvbnRyb2xsZXIiLCJfR2xvYmVDb250cm9sbGVyIiwiRGVja0dsb2JlVmlld3BvcnQiLCJfR2xvYmVWaWV3cG9ydCIsInpvb21BZGp1c3QiLCJsYXRpdHVkZSIsIk1hdGgiLCJsb2cyIiwiUEkiLCJjb3MiLCJab29tVG9DdXJzb3JHbG9iZUNvbnRyb2xsZXIiLCJfdGhpcyIsIl9jbGFzc0NhbGxDaGVjazIiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNvbmNhdCIsIk9yaWdpbmFsR2xvYmVTdGF0ZSIsIkNvbnRyb2xsZXJTdGF0ZSIsIl9PcmlnaW5hbEdsb2JlU3RhdGUiLCJQYXRjaGVkR2xvYmVTdGF0ZSIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJhcHBseUNvbnN0cmFpbnRzIiwicHJvcHMiLCJyZXN1bHQiLCJjbGFtcGVkTGF0aXR1ZGUiLCJjbGFtcCIsIkdMT0JFX01BWF9MQVRJVFVERSIsInpvb20iLCJfY29uc3RyYWluWm9vbSIsImdldFZpZXdwb3J0UHJvcHMiLCJfcHJvcHMiLCJtYXhab29tIiwiX3Byb3BzMiIsIm1pblpvb20iLCJ1bmRlZmluZWQiLCJaT09NMCIsInpvb21BZGp1c3RtZW50IiwiX3JlZiIsInBvcyIsInN0YXJ0UG9zIiwic2NhbGUiLCJfZ2V0U3RhdGUiLCJnZXRTdGF0ZSIsInN0YXJ0Wm9vbSIsInN0YXJ0Wm9vbUxuZ0xhdCIsIl91bnByb2plY3QiLCJjdXJyZW50UHJvcHMiLCJjdXJzb3JMbmdMYXQiLCJjdXJzb3JWYWxpZCIsImlzQXJyYXkiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsIl9nZXRVcGRhdGVkU3RhdGUiLCJSRUNFTlRFUl9TVFJFTkdUSCIsIm1pbiIsImRMbmciLCJsb25naXR1ZGUiLCJ6b29tZWRWaWV3cG9ydCIsIm1ha2VWaWV3cG9ydCIsImZyb21Qb3NpdGlvbiIsInVucHJvamVjdCIsImFuY2hvclZhbGlkIiwiem9vbUVuZCIsInBhblN0YXJ0IiwiX3JlZjIiLCJzdGFydFBhbkxuZ0xhdCIsInBhbiIsIl9yZWYzIiwidmlld3BvcnQiLCJ2YWxpZCIsInZpc3VhbFpvb20iLCJwYW5FbmQiLCJLZXBsZXJHbG9iZVZpZXciLCJleHBvcnRzIiwiX0RlY2tHbG9iZVZpZXciLCJnZXRWaWV3cG9ydFR5cGUiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nbG9iZS9nbG9iZS12aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIERlY2tDb3JlIGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtjbGFtcH0gZnJvbSAnQG1hdGguZ2wvY29yZSc7XG5pbXBvcnQge0dMT0JFX01BWF9MQVRJVFVERX0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG4vLyBkZWNrLmdsIGV4cG9zZXMgR2xvYmVWaWV3IC8gR2xvYmVDb250cm9sbGVyIGFzIGV4cGVyaW1lbnRhbCwgdW5kZXJzY29yZS1wcmVmaXhlZFxuLy8gbWVtYmVycy4gVGhlaXIgbmFtZWQgdHlwZSBiaW5kaW5ncyBhcmVuJ3QgcmVsaWFibHkgcmVzb2x2YWJsZSB0aHJvdWdoIHRoZVxuLy8gcGFja2FnZSBiYXJyZWwgdW5kZXIgdGhpcyBwcm9qZWN0J3MgbW9kdWxlIHJlc29sdXRpb24sIHNvIHdlIHB1bGwgdGhlbSBvZmYgdGhlXG4vLyBuYW1lc3BhY2Ugd2l0aCBhIGxvb3NlIHR5cGUuIFJ1bnRpbWUgYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuY29uc3QgRGVja0dsb2JlVmlldyA9IChEZWNrQ29yZSBhcyBhbnkpLl9HbG9iZVZpZXcgYXMgYW55O1xuY29uc3QgR2xvYmVDb250cm9sbGVyID0gKERlY2tDb3JlIGFzIGFueSkuX0dsb2JlQ29udHJvbGxlciBhcyBhbnk7XG5jb25zdCBEZWNrR2xvYmVWaWV3cG9ydCA9IChEZWNrQ29yZSBhcyBhbnkpLl9HbG9iZVZpZXdwb3J0IGFzIGFueTtcblxuLyoqXG4gKiBMYXRpdHVkZS1iYXNlZCB6b29tIGFkanVzdG1lbnQgdXNlZCBieSBkZWNrLmdsJ3MgR2xvYmVWaWV3cG9ydCwgcmVwbGljYXRlZFxuICogaGVyZSBzbyBvdXIgY3VzdG9tIGBfY29uc3RyYWluWm9vbWAgbWF0Y2hlcyBkZWNrLmdsJ3MgY29vcmRpbmF0ZSBtYXRoLlxuICogU2VlIEBkZWNrLmdsL2NvcmUgZ2xvYmUtdmlld3BvcnQuanMgYHpvb21BZGp1c3RgLlxuICovXG5mdW5jdGlvbiB6b29tQWRqdXN0KGxhdGl0dWRlOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5sb2cyKE1hdGguUEkgKiBNYXRoLmNvcygobGF0aXR1ZGUgKiBNYXRoLlBJKSAvIDE4MCkpO1xufVxuXG4vKipcbiAqIEN1c3RvbSBHbG9iZUNvbnRyb2xsZXIgdGhhdCByZXN0b3JlcyB6b29tLXRvLWN1cnNvciBiZWhhdmlvci5cbiAqXG4gKiBJbiBkZWNrLmdsIDkueCwgdGhlIGRlZmF1bHQgR2xvYmVDb250cm9sbGVyJ3MgR2xvYmVTdGF0ZS56b29tKCkgaWdub3JlcyB0aGVcbiAqIGN1cnNvciBwb3NpdGlvbiBhbmQgYWx3YXlzIHpvb21zIHRvd2FyZCB0aGUgY2VudGVyLiBUaGlzIGNvbnRyb2xsZXIgcGF0Y2hlc1xuICogdGhhdCBiZWhhdmlvciBieSBvdmVycmlkaW5nIHRoZSBDb250cm9sbGVyU3RhdGUncyB6b29tIG1ldGhvZCB0byBwYW4gdGhlXG4gKiBnbG9iZSB1bmRlciB0aGUgY3Vyc29yIHdoaWxlIHpvb21pbmcsIHNvIHpvb20tdG8tY3Vyc29yIHdvcmtzIHRoZSBzYW1lIHdheSBpdFxuICogZG9lcyBmb3IgdGhlIDJEIE1hcENvbnRyb2xsZXIuXG4gKi9cbmNsYXNzIFpvb21Ub0N1cnNvckdsb2JlQ29udHJvbGxlciBleHRlbmRzIEdsb2JlQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgc3VwZXIoLi4uYXJncyk7XG4gICAgY29uc3QgT3JpZ2luYWxHbG9iZVN0YXRlID0gdGhpcy5Db250cm9sbGVyU3RhdGU7XG5cbiAgICAvLyBDcmVhdGUgcGF0Y2hlZCBHbG9iZVN0YXRlIHRoYXQgc3VwcG9ydHMgem9vbS10by1jdXJzb3JcbiAgICB0aGlzLkNvbnRyb2xsZXJTdGF0ZSA9IGNsYXNzIFBhdGNoZWRHbG9iZVN0YXRlIGV4dGVuZHMgT3JpZ2luYWxHbG9iZVN0YXRlIHtcbiAgICAgIC8vIENvbnN0cmFpbiB0aGUgY2FtZXJhIHRhcmdldCB0byBhIGxhdGl0dWRlIGJhbmQgYXJvdW5kIHRoZSBlcXVhdG9yIHNvIHRoZVxuICAgICAgLy8gdmlldyBjYW4ndCBiZSBjZW50ZXJlZCBvbiB0aGUgcG9sZXMuIGRlY2suZ2wncyBhcHBseUNvbnN0cmFpbnRzIGNsYW1wc1xuICAgICAgLy8gbGF0aXR1ZGUgdG8gfjg1wrAsIHdoaWNoIHN0aWxsIGxldHMgdGhlIGNhbWVyYSBsb29rIHN0cmFpZ2h0IGF0IGEgcG9sZS5cbiAgICAgIGFwcGx5Q29uc3RyYWludHMocHJvcHM6IGFueSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoc3VwZXIuYXBwbHlDb25zdHJhaW50cyBhcyBhbnkpKHByb3BzKTtcbiAgICAgICAgY29uc3QgY2xhbXBlZExhdGl0dWRlID0gY2xhbXAocmVzdWx0LmxhdGl0dWRlLCAtR0xPQkVfTUFYX0xBVElUVURFLCBHTE9CRV9NQVhfTEFUSVRVREUpO1xuICAgICAgICBpZiAoY2xhbXBlZExhdGl0dWRlICE9PSByZXN1bHQubGF0aXR1ZGUpIHtcbiAgICAgICAgICAvLyBkZWNrLmdsIGNvdXBsZXMgem9vbSB0byBsYXRpdHVkZSB2aWEgem9vbUFkanVzdDsgd2hlbiB3ZSBmdXJ0aGVyXG4gICAgICAgICAgLy8gY2xhbXAgbGF0aXR1ZGUsIHJlLWFwcGx5IHRoZSBzYW1lIGRlbHRhIHNvIHpvb20gc3RheXMgY29uc2lzdGVudC5cbiAgICAgICAgICByZXN1bHQuem9vbSArPSB6b29tQWRqdXN0KGNsYW1wZWRMYXRpdHVkZSkgLSB6b29tQWRqdXN0KHJlc3VsdC5sYXRpdHVkZSk7XG4gICAgICAgICAgcmVzdWx0LmxhdGl0dWRlID0gY2xhbXBlZExhdGl0dWRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlY2suZ2wncyBHbG9iZVN0YXRlLl9jb25zdHJhaW5ab29tIGRlcml2ZXMgYSBtaW5pbXVtIHpvb20gZnJvbSBgbWF4Qm91bmRzYFxuICAgICAgLy8gdGhhdCBmb3JjZXMgdGhlIGdsb2JlIHRvIGZpbGwgdGhlIHZpZXdwb3J0LiBUaGF0IGJvdW5kcy1iYXNlZCBtaW5pbXVtXG4gICAgICAvLyAofjMgZm9yIGEgdHlwaWNhbCB3aW5kb3cpIG92ZXJyaWRlcyBhbnkgY29uZmlndXJlZCBgbWluWm9vbWAsIHNvIHRoZSB1c2VyXG4gICAgICAvLyBjYW4gbmV2ZXIgem9vbSBvdXQgZmFyIGVub3VnaCB0byBzZWUgdGhlIHdob2xlIGdsb2JlIHNtYWxsIG9uIHNjcmVlbi5cbiAgICAgIC8vIE92ZXJyaWRlIGl0IHRvIGhvbm9yIG9ubHkgdGhlIGNvbmZpZ3VyZWQgbWluWm9vbS9tYXhab29tIChwbHVzIHRoZSBzYW1lXG4gICAgICAvLyBsYXRpdHVkZSBhZGp1c3RtZW50IGRlY2suZ2wgdXNlcyksIGlnbm9yaW5nIHRoZSBib3VuZHMtYmFzZWQgZmxvb3IuXG4gICAgICBfY29uc3RyYWluWm9vbSh6b29tOiBudW1iZXIsIHByb3BzPzogYW55KSB7XG4gICAgICAgIHByb3BzID0gcHJvcHMgfHwgKHRoaXMgYXMgYW55KS5nZXRWaWV3cG9ydFByb3BzKCk7XG4gICAgICAgIGNvbnN0IHtsYXRpdHVkZSwgbWF4Wm9vbX0gPSBwcm9wcztcbiAgICAgICAgbGV0IHttaW5ab29tfSA9IHByb3BzO1xuICAgICAgICBpZiAobWluWm9vbSA9PT0gdW5kZWZpbmVkIHx8IG1pblpvb20gPT09IG51bGwpIHtcbiAgICAgICAgICBtaW5ab29tID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBaT09NMCA9IHpvb21BZGp1c3QoMCk7XG4gICAgICAgIGNvbnN0IHpvb21BZGp1c3RtZW50ID0gem9vbUFkanVzdChsYXRpdHVkZSkgLSBaT09NMDtcbiAgICAgICAgcmV0dXJuIGNsYW1wKHpvb20sIG1pblpvb20gKyB6b29tQWRqdXN0bWVudCwgbWF4Wm9vbSArIHpvb21BZGp1c3RtZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gRXhhY3Qgem9vbS10by1jdXJzb3IuIGRlY2suZ2wgOS54J3MgR2xvYmVDb250cm9sbGVyIGRvZXMgbm90IGtlZXAgdGhlIHBvaW50XG4gICAgICAvLyB1bmRlciB0aGUgY3Vyc29yIGZpeGVkIHdoaWxlIHpvb21pbmcsIGluIHR3byB3YXlzIHdlIHdvcmsgYXJvdW5kIGhlcmU6XG4gICAgICAvLyAgIDEuIEl0cyBHbG9iZVN0YXRlLnpvb20oKSBpZ25vcmVzIHRoZSBjdXJzb3IgYW5kIHpvb21zIHRvd2FyZCB0aGUgY2VudGVyLlxuICAgICAgLy8gICAyLiBJdHMgR2xvYmVWaWV3cG9ydC5wYW5CeVBvc2l0aW9uIGlzIGEgbG9zc3ksICpsaW5lYXJpemVkKiAzLWFyZ1xuICAgICAgLy8gICAgICByb3RhdGlvbiAobG9uZ2l0dWRlICs9ICgwLjI1L3NjYWxlKSooc3RhcnRQaXhlbC1waXhlbCksIHJlLWRlcml2ZXNcbiAgICAgIC8vICAgICAgem9vbSkuIFVzaW5nIGl0IHBlciB3aGVlbCB0aWNrIGFjY3VtdWxhdGVzIGVycm9yLCBzbyBhZnRlciBhIGxvbmdcbiAgICAgIC8vICAgICAgY29udGludW91cyB6b29tIHRoZSBwb2ludCBlbmRzIHVwIG5vdGljZWFibHkgc2hpZnRlZCBmcm9tIHdoYXQgd2FzXG4gICAgICAvLyAgICAgIG9yaWdpbmFsbHkgdW5kZXIgdGhlIGN1cnNvci5cbiAgICAgIC8vIFRoZSByZWNlbnRlciBiZWxvdyBpcyBhbiAqZXhhY3QgYWJzb2x1dGUqIHRyYW5zbGF0aW9uOiB1bnByb2plY3QgdGhlXG4gICAgICAvLyBjdXJzb3IgcGl4ZWwgaW4gdGhlIHpvb21lZCB2aWV3cG9ydCB0byBnZXQgdGhlIGdlbyBwb2ludCBjdXJyZW50bHkgdW5kZXIgaXQsXG4gICAgICAvLyB0aGVuIHNoaWZ0IHRoZSBjZW50ZXIgYnkgKGFuY2hvciAtIHRoYXRQb2ludCkuIE5vIHpvb20gY291cGxpbmcsIG5vXG4gICAgICAvLyByb3RhdGlvblNwZWVkLCBhbmQgaXQgYXBwbGllcyB0byB6b29tLWluIGFuZCB6b29tLW91dCBzeW1tZXRyaWNhbGx5LCBzb1xuICAgICAgLy8gdGhlcmUgaXMgbm8gcGVyLXRpY2sgYWNjdW11bGF0ZWQgZHJpZnQuXG4gICAgICB6b29tKHtcbiAgICAgICAgcG9zLFxuICAgICAgICBzdGFydFBvcyxcbiAgICAgICAgc2NhbGVcbiAgICAgIH06IHtcbiAgICAgICAgcG9zOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICBzdGFydFBvcz86IFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHNjYWxlOiBudW1iZXI7XG4gICAgICB9KSB7XG4gICAgICAgIGxldCB7c3RhcnRab29tLCBzdGFydFpvb21MbmdMYXR9ID0gKHRoaXMgYXMgYW55KS5nZXRTdGF0ZSgpO1xuXG4gICAgICAgIGlmICghc3RhcnRab29tTG5nTGF0KSB7XG4gICAgICAgICAgLy8gRGlzY3JldGUgKHdoZWVsKSB6b29tOiByZS1kZXJpdmUgdGhlIGFuY2hvciBlYWNoIHRpY2sgZnJvbSB0aGUgY3VycmVudFxuICAgICAgICAgIC8vIHZpZXcuIEZvciBwaW5jaCwgc3RhcnRab29tL3N0YXJ0Wm9vbUxuZ0xhdCBhcmUgc2V0IG9uY2UgYnkgem9vbVN0YXJ0IGFuZFxuICAgICAgICAgIC8vIHByZXNlcnZlZCBhY3Jvc3MgdGlja3MgYnkgX2dldFVwZGF0ZWRTdGF0ZSAod2hpY2ggc3ByZWFkcyBnZXRTdGF0ZSgpKS5cbiAgICAgICAgICBzdGFydFpvb20gPSAodGhpcyBhcyBhbnkpLmdldFZpZXdwb3J0UHJvcHMoKS56b29tO1xuICAgICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdCA9ICh0aGlzIGFzIGFueSkuX3VucHJvamVjdChzdGFydFBvcykgfHwgKHRoaXMgYXMgYW55KS5fdW5wcm9qZWN0KHBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGFydFpvb21MbmdMYXQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRQcm9wcyA9ICh0aGlzIGFzIGFueSkuZ2V0Vmlld3BvcnRQcm9wcygpO1xuICAgICAgICBjb25zdCB6b29tID0gKHRoaXMgYXMgYW55KS5fY29uc3RyYWluWm9vbShzdGFydFpvb20gKyBNYXRoLmxvZzIoc2NhbGUpKTtcblxuICAgICAgICAvLyBab29tLW91dCAoc2NhbGUgPCAxKTogZXhhY3QgY3Vyc29yIGFuY2hvcmluZyBpcyB1bnN0YWJsZSBvbiBhIGdsb2JlICh0aGVcbiAgICAgICAgLy8gZ2VvIHBvaW50IHVuZGVyIGFuIG9mZi1jZW50ZXIgcGl4ZWwgbW92ZXMgbm9uLWxpbmVhcmx5IG5lYXIgdGhlIGxpbWIgYW5kXG4gICAgICAgIC8vIGRyYWdzIHRoZSB2aWV3IHRvd2FyZCB0aGUgcG9sZXMpLiBJbnN0ZWFkLCBnZW50bHkgc3RlZXIgdGhlIENFTlRFUiB0b3dhcmRcbiAgICAgICAgLy8gdGhlIGdlbyBsb2NhdGlvbiB1bmRlciB0aGUgY3Vyc29yIOKAlCB0aGUgbWFwIHJlY2VudGVycyBvbiB0aGUgY3Vyc29yIGFzIHlvdVxuICAgICAgICAvLyB6b29tIG91dCwgc2ltaWxhciBpbiBzcGlyaXQgdG8gem9vbS1pbiwgYnV0IHdpdGhvdXQgdGhlIHBvbGUtd2FyZCBzcGluLlxuICAgICAgICBpZiAoc2NhbGUgPCAxKSB7XG4gICAgICAgICAgY29uc3QgY3Vyc29yTG5nTGF0ID0gc3RhcnRab29tTG5nTGF0O1xuICAgICAgICAgIGNvbnN0IGN1cnNvclZhbGlkID1cbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY3Vyc29yTG5nTGF0KSAmJlxuICAgICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGN1cnNvckxuZ0xhdFswXSkgJiZcbiAgICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShjdXJzb3JMbmdMYXRbMV0pO1xuICAgICAgICAgIGlmICghY3Vyc29yVmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe3pvb219KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGcmFjdGlvbiBvZiB0aGUgd2F5IHRvIG1vdmUgdGhlIGNlbnRlciB0b3dhcmQgdGhlIGN1cnNvciBwZXIgdGljay5cbiAgICAgICAgICAvLyBTY2FsZXMgd2l0aCBob3cgbXVjaCB3ZSB6b29tZWQgb3V0IHRoaXMgdGljayBzbyBhIGJpZ2dlciBzdGVwIG1vdmVzXG4gICAgICAgICAgLy8gbW9yZS4gQ2xhbXBlZCBzbyBhIHNpbmdsZSBsYXJnZSB0aWNrIGNhbid0IG92ZXJzaG9vdC5cbiAgICAgICAgICBjb25zdCBSRUNFTlRFUl9TVFJFTkdUSCA9IDAuMTE7XG4gICAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKDEsICgxIC0gc2NhbGUpICogUkVDRU5URVJfU1RSRU5HVEgpO1xuXG4gICAgICAgICAgLy8gU2hvcnRlc3QtcGF0aCBsb25naXR1ZGUgaW50ZXJwb2xhdGlvbiAoaGFuZGxlIGFudGltZXJpZGlhbiB3cmFwKS5cbiAgICAgICAgICBsZXQgZExuZyA9IGN1cnNvckxuZ0xhdFswXSAtIGN1cnJlbnRQcm9wcy5sb25naXR1ZGU7XG4gICAgICAgICAgaWYgKGRMbmcgPiAxODApIGRMbmcgLT0gMzYwO1xuICAgICAgICAgIGlmIChkTG5nIDwgLTE4MCkgZExuZyArPSAzNjA7XG5cbiAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fZ2V0VXBkYXRlZFN0YXRlKHtcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICBsb25naXR1ZGU6IGN1cnJlbnRQcm9wcy5sb25naXR1ZGUgKyBkTG5nICogdCxcbiAgICAgICAgICAgIGxhdGl0dWRlOiBjdXJyZW50UHJvcHMubGF0aXR1ZGUgKyAoY3Vyc29yTG5nTGF0WzFdIC0gY3VycmVudFByb3BzLmxhdGl0dWRlKSAqIHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHpvb21lZFZpZXdwb3J0ID0gKHRoaXMgYXMgYW55KS5tYWtlVmlld3BvcnQoe1xuICAgICAgICAgIC4uLmN1cnJlbnRQcm9wcyxcbiAgICAgICAgICB6b29tXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFuY2hvciB0aGUgZ3JhYmJlZCBnZW8gcG9pbnQgYmFjayB1bmRlciB0aGUgY3Vyc29yOlxuICAgICAgICAvLyAgIGZyb21Qb3NpdGlvbiA9IHZpZXdwb3J0LnVucHJvamVjdChwb3MpICAgLy8gZ2VvIHBvaW50IG5vdyB1bmRlciB0aGUgY3Vyc29yXG4gICAgICAgIC8vICAgbG9uZ2l0dWRlID0gc3RhcnRab29tTG5nTGF0WzBdIC0gZnJvbVBvc2l0aW9uWzBdICsgdmlld3BvcnQubG9uZ2l0dWRlXG4gICAgICAgIC8vICAgbGF0aXR1ZGUgID0gc3RhcnRab29tTG5nTGF0WzFdIC0gZnJvbVBvc2l0aW9uWzFdICsgdmlld3BvcnQubGF0aXR1ZGVcbiAgICAgICAgY29uc3QgZnJvbVBvc2l0aW9uID0gem9vbWVkVmlld3BvcnQudW5wcm9qZWN0KHBvcyk7XG5cbiAgICAgICAgLy8gR3VhcmQ6IHVucHJvamVjdCBjYW4gcmV0dXJuIE5hTi91bmRlZmluZWQgZm9yIGEgcGl4ZWwgb2ZmIHRoZSBzcGhlcmVcbiAgICAgICAgLy8gc2lsaG91ZXR0ZTsgaW4gdGhhdCBjYXNlIGp1c3QgYXBwbHkgdGhlIG5ldyB6b29tIGFib3V0IHRoZSBjZW50ZXIuXG4gICAgICAgIGNvbnN0IGFuY2hvclZhbGlkID1cbiAgICAgICAgICBBcnJheS5pc0FycmF5KGZyb21Qb3NpdGlvbikgJiZcbiAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUoZnJvbVBvc2l0aW9uWzBdKSAmJlxuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShmcm9tUG9zaXRpb25bMV0pO1xuICAgICAgICBpZiAoIWFuY2hvclZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7em9vbX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7XG4gICAgICAgICAgem9vbSxcbiAgICAgICAgICBsb25naXR1ZGU6IHN0YXJ0Wm9vbUxuZ0xhdFswXSAtIGZyb21Qb3NpdGlvblswXSArIHpvb21lZFZpZXdwb3J0LmxvbmdpdHVkZSxcbiAgICAgICAgICBsYXRpdHVkZTogc3RhcnRab29tTG5nTGF0WzFdIC0gZnJvbVBvc2l0aW9uWzFdICsgem9vbWVkVmlld3BvcnQubGF0aXR1ZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIENsZWFyIHRoZSBwZXJzaXN0ZWQgcGluY2ggYW5jaG9yIGF0IGdlc3R1cmUgZW5kLlxuICAgICAgem9vbUVuZCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7XG4gICAgICAgICAgc3RhcnRab29tOiBudWxsLFxuICAgICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gRXhhY3QsIGN1cnNvci1hbmNob3JlZCBwYW46IHRoZSBnZW8gcG9pbnQgZ3JhYmJlZCBvbiBtb3VzZWRvd24gc3RheXNcbiAgICAgIC8vIGxvY2tlZCB1bmRlciB0aGUgY3Vyc29yIGZvciB0aGUgd2hvbGUgZHJhZy5cbiAgICAgIC8vXG4gICAgICAvLyBkZWNrLmdsIDkueCdzIEdsb2JlQ29udHJvbGxlciBwYW5zIHdpdGggYSAqbGluZWFyaXplZCwgY2VudGVyLWFuY2hvcmVkKlxuICAgICAgLy8gcm90YXRpb24gKEdsb2JlVmlld3BvcnQucGFuQnlQb3NpdGlvbihbbG5nLGxhdCx6b29tXSwgcGl4ZWwsIHN0YXJ0UGl4ZWwpOlxuICAgICAgLy8gbG9uZ2l0dWRlICs9ICgwLjI1L3NjYWxlKSooc3RhcnRQaXhlbC1waXhlbCkpLiBCZWNhdXNlIHRoZSBhbmNob3IgaXMgdGhlXG4gICAgICAvLyB2aWV3IENFTlRFUiByYXRoZXIgdGhhbiB0aGUgZ3JhYmJlZCBwb2ludCwgdGhlIGZpcnN0IGRyYWcgZnJhbWUgc25hcHMgdGhlXG4gICAgICAvLyBjZW50ZXIgdG8gc2F0aXNmeSB0aGUgbGluZWFyIGFwcHJveGltYXRpb24sIHByb2R1Y2luZyB0aGUgdmlzaWJsZSBcImp1bXAgdG9cbiAgICAgIC8vIHRoZSBzaWRlL3VwXCIgYXQgdGhlIHN0YXJ0IG9mIGEgcGFuIChtb3N0IG5vdGljZWFibGUgYXQgaGlnaCB6b29tKSwgYWZ0ZXJcbiAgICAgIC8vIHdoaWNoIGluY3JlbWVudGFsIGRlbHRhcyB0cmFjayBmaW5lLiBUaGUgZXhhY3QgYW5jaG9yIGJlbG93IHJlbW92ZXMgdGhhdFxuICAgICAgLy8gZmlyc3QtZnJhbWUgc25hcC5cbiAgICAgIHBhblN0YXJ0KHtwb3N9OiB7cG9zOiBbbnVtYmVyLCBudW1iZXJdfSkge1xuICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fZ2V0VXBkYXRlZFN0YXRlKHtcbiAgICAgICAgICBzdGFydFBhbkxuZ0xhdDogKHRoaXMgYXMgYW55KS5fdW5wcm9qZWN0KHBvcylcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHBhbih7cG9zLCBzdGFydFBvc306IHtwb3M6IFtudW1iZXIsIG51bWJlcl07IHN0YXJ0UG9zPzogW251bWJlciwgbnVtYmVyXX0pIHtcbiAgICAgICAgY29uc3Qgc3RhcnRQYW5MbmdMYXQgPVxuICAgICAgICAgICh0aGlzIGFzIGFueSkuZ2V0U3RhdGUoKS5zdGFydFBhbkxuZ0xhdCB8fCAodGhpcyBhcyBhbnkpLl91bnByb2plY3Qoc3RhcnRQb3MpO1xuICAgICAgICBpZiAoIXN0YXJ0UGFuTG5nTGF0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wcyA9ICh0aGlzIGFzIGFueSkuZ2V0Vmlld3BvcnRQcm9wcygpO1xuICAgICAgICBjb25zdCB2aWV3cG9ydCA9ICh0aGlzIGFzIGFueSkubWFrZVZpZXdwb3J0KHByb3BzKTtcbiAgICAgICAgY29uc3QgZnJvbVBvc2l0aW9uID0gdmlld3BvcnQudW5wcm9qZWN0KHBvcyk7XG5cbiAgICAgICAgLy8gR3VhcmQ6IHBpeGVscyBvZmYgdGhlIHNwaGVyZSBzaWxob3VldHRlIHVucHJvamVjdCB0byBOYU4vdW5kZWZpbmVkLlxuICAgICAgICBjb25zdCB2YWxpZCA9XG4gICAgICAgICAgQXJyYXkuaXNBcnJheShmcm9tUG9zaXRpb24pICYmXG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGZyb21Qb3NpdGlvblswXSkgJiZcbiAgICAgICAgICBOdW1iZXIuaXNGaW5pdGUoZnJvbVBvc2l0aW9uWzFdKTtcbiAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9uZ2l0dWRlID0gc3RhcnRQYW5MbmdMYXRbMF0gLSBmcm9tUG9zaXRpb25bMF0gKyBwcm9wcy5sb25naXR1ZGU7XG4gICAgICAgIGxldCBsYXRpdHVkZSA9IHN0YXJ0UGFuTG5nTGF0WzFdIC0gZnJvbVBvc2l0aW9uWzFdICsgcHJvcHMubGF0aXR1ZGU7XG4gICAgICAgIGxhdGl0dWRlID0gY2xhbXAobGF0aXR1ZGUsIC1HTE9CRV9NQVhfTEFUSVRVREUsIEdMT0JFX01BWF9MQVRJVFVERSk7XG5cbiAgICAgICAgLy8gZGVjay5nbCA5J3MgR2xvYmVWaWV3cG9ydCBzY2FsZSA9IDJeKHpvb20gLSB6b29tQWRqdXN0KGxhdGl0dWRlKSksIHNvIGFcbiAgICAgICAgLy8gY29uc3RhbnQgem9vbSB3b3VsZCBtYWtlIHRoZSBnbG9iZSBncm93IG9uIHNjcmVlbiBhcyB0aGUgY2VudGVyIG1vdmVzXG4gICAgICAgIC8vIHRvd2FyZCB0aGUgcG9sZXMuIFJlLWNvdXBsZSB6b29tIHRvIHRoZSBuZXcgbGF0aXR1ZGUgKGFzIGRlY2suZ2wgOSdzIG93blxuICAgICAgICAvLyBwYW4gZG9lcykgdG8ga2VlcCB0aGUgb24tc2NyZWVuIHNjYWxlIOKAlCBhbmQgdGh1cyB0aWxlIExPRCDigJQgY29uc3RhbnQuXG4gICAgICAgIGNvbnN0IHZpc3VhbFpvb20gPSBwcm9wcy56b29tIC0gem9vbUFkanVzdChwcm9wcy5sYXRpdHVkZSk7XG4gICAgICAgIGNvbnN0IHpvb20gPSB2aXN1YWxab29tICsgem9vbUFkanVzdChsYXRpdHVkZSk7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7bG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbX0pO1xuICAgICAgfVxuXG4gICAgICBwYW5FbmQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe3N0YXJ0UGFuTG5nTGF0OiBudWxsfSk7XG4gICAgICB9XG4gICAgfSBhcyBhbnk7XG4gIH1cbn1cblxuLyoqXG4gKiBDdXN0b20gR2xvYmVWaWV3IHRoYXQgdXNlcyB6b29tLXRvLWN1cnNvciBjb250cm9sbGVyIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgS2VwbGVyR2xvYmVWaWV3IGV4dGVuZHMgRGVja0dsb2JlVmlldyB7XG4gIC8vIEZvcndhcmQgY29uc3RydWN0b3IgcHJvcHMgdG8gZGVjay5nbCdzIEdsb2JlVmlldy4gRGVjbGFyZWQgZXhwbGljaXRseSBiZWNhdXNlXG4gIC8vIHRoZSBiYXNlIGNsYXNzIGlzIGxvb3NlbHkgdHlwZWQgKHNlZSBEZWNrR2xvYmVWaWV3IGFib3ZlKSwgd2hpY2ggd291bGRcbiAgLy8gb3RoZXJ3aXNlIHN1cmZhY2UgYSBwYXJhbWV0ZXJsZXNzIGNvbnN0cnVjdG9yIHRvIGNhbGxlcnMuXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogYW55KSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgZ2V0IENvbnRyb2xsZXJUeXBlKCkge1xuICAgIHJldHVybiBab29tVG9DdXJzb3JHbG9iZUNvbnRyb2xsZXI7XG4gIH1cblxuICAvLyBkZWNrLmdsIDkncyBHbG9iZVZpZXcuZ2V0Vmlld3BvcnRUeXBlKCkgc3dhcHMgdGhlIHZpZXdwb3J0IGNsYXNzIGJhc2VkIG9uIHpvb206XG4gIC8vICAgYHJldHVybiB2aWV3U3RhdGUuem9vbSA+IDEyID8gV2ViTWVyY2F0b3JWaWV3cG9ydCA6IEdsb2JlVmlld3BvcnQ7YFxuICAvLyBDcm9zc2luZyB6b29tIDEyIHRoZXJlZm9yZSByZWNvbXB1dGVzIHRpbGUgYm91bmRzIHdpdGggY29tcGxldGVseSBkaWZmZXJlbnRcbiAgLy8gcHJvamVjdGlvbiBtYXRoIChnbG9iZSB2cyBmbGF0IG1lcmNhdG9yKS4gVGhhdCBtYWtlcyBkZWNrJ3MgVGlsZUxheWVyL01WVExheWVyXG4gIC8vIHJlc2VsZWN0IHRpbGVzIGluY29uc2lzdGVudGx5IGFjcm9zcyB0aGUgYm91bmRhcnkg4oCUIG1peGVkIExPRHMgKGUuZy4gYSB6NCB0aWxlXG4gIC8vIG5leHQgdG8gejExKSwgYSB2aXNpYmxlIFwiZmxpY2tlclwiIGF0IDEyLCBhbmQgdGlsZXMgdGhhdCBnZXQgZHJvcHBlZCBhbmQgc3RpY2tcbiAgLy8gYXMgYmxhY2svZW1wdHkgcXVhZHMgKG1vc3Qgb2Z0ZW4gY3Jvc3NpbmcgMTIgb24gdGhlIHdheSAqb3V0KikuXG4gIC8vXG4gIC8vIEZvcmNlIEdsb2JlVmlld3BvcnQgYXQgZXZlcnkgem9vbSB0byBlbGltaW5hdGUgdGhlIHo9MTIgdmlld3BvcnQgc3dhcCBzbyB0aWxlXG4gIC8vIHNlbGVjdGlvbiBzdGF5cyBjb25zaXN0ZW50LiBUaGUgdHJhZGUtb2ZmIGlzIHRoYXQgem9vbSA+IDEyIG5vdyB1c2VzIGZsb2F0MzJcbiAgLy8gZ2xvYmUgcHJlY2lzaW9uIChkZWNrJ3MgZG9jdW1lbnRlZCBcIm5vIGhpZ2gtcHJlY2lzaW9uIHJlbmRlcmluZyA+IDEyXCIgbGltaXQpXG4gIC8vIGluc3RlYWQgb2Ygc3dpdGNoaW5nIHRvIG1lcmNhdG9yIOKAlCBmYXIgcHJlZmVyYWJsZSB0byB0aGUgYmxhY2sgcXVhZHMuXG4gIGdldFZpZXdwb3J0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVja0dsb2JlVmlld3BvcnQ7XG4gIH1cbn1cblxuS2VwbGVyR2xvYmVWaWV3LmRpc3BsYXlOYW1l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LEVBQUN6QixRQUFRLEVBQUUsQ0FBQzBCLDZCQUFrQixFQUFFQSw2QkFBa0IsQ0FBQzs7VUFFbkU7VUFDQTtVQUNBO1VBQ0E7VUFDQSxJQUFNNEMsVUFBVSxHQUFHaEQsS0FBSyxDQUFDSyxJQUFJLEdBQUc1QixVQUFVLENBQUN1QixLQUFLLENBQUN0QixRQUFRLENBQUM7VUFDMUQsSUFBTTJCLElBQUksR0FBRzJDLFVBQVUsR0FBR3ZFLFVBQVUsQ0FBQ0MsUUFBUSxDQUFDO1VBRTlDLE9BQVEsSUFBSSxDQUFTb0QsZ0JBQWdCLENBQUM7WUFBQ0ksU0FBUyxFQUFUQSxTQUFTO1lBQUV4RCxRQUFRLEVBQVJBLFFBQVE7WUFBRTJCLElBQUksRUFBSkE7VUFBSSxDQUFDLENBQUM7UUFDcEU7TUFBQztRQUFBUixHQUFBO1FBQUFDLEtBQUEsRUFFRCxTQUFBbUQsTUFBTUEsQ0FBQSxFQUFHO1VBQ1AsT0FBUSxJQUFJLENBQVNuQixnQkFBZ0IsQ0FBQztZQUFDYSxjQUFjLEVBQUU7VUFBSSxDQUFDLENBQUM7UUFDL0Q7TUFBQztJQUFBLEVBbE1vRHBELGtCQUFrQixDQW1NakU7SUFBQyxPQUFBUCxLQUFBO0VBQ1g7RUFBQyxJQUFBVyxVQUFBLGFBQUFaLDJCQUFBLEVBQUFULGdCQUFBO0VBQUEsV0FBQXNCLGFBQUEsYUFBQWIsMkJBQUE7QUFBQSxFQTFNdUNWLGVBQWU7QUE2TXpEO0FBQ0E7QUFDQTtBQUZBLElBR2E2RSxlQUFlLEdBQUFDLE9BQUEsQ0FBQUQsZUFBQSwwQkFBQUUsY0FBQTtFQUMxQjtFQUNBO0VBQ0E7RUFDQSxTQUFBRixnQkFBWWxELEtBQVcsRUFBRTtJQUFBLElBQUFmLGdCQUFBLG1CQUFBaUUsZUFBQTtJQUFBLE9BQUF2RixVQUFBLE9BQUF1RixlQUFBLEdBQ2pCbEQsS0FBSztFQUNiO0VBQUMsSUFBQUwsVUFBQSxhQUFBdUQsZUFBQSxFQUFBRSxjQUFBO0VBQUEsV0FBQXhELGFBQUEsYUFBQXNELGVBQUE7SUFBQXJELEdBQUE7SUFBQTdELEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXFCO01BQ25CLE9BQU8rQywyQkFBMkI7SUFDcEM7O0lBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0VBQUE7SUFBQWMsR0FBQTtJQUFBQyxLQUFBLEVBQ0EsU0FBQXVELGVBQWVBLENBQUEsRUFBRztNQUNoQixPQUFPOUUsaUJBQWlCO0lBQzFCO0VBQUM7QUFBQSxFQTFCa0NKLGFBQWE7QUE2QmxEK0UsZUFBZSxDQUFDSSxXQUFXLEdBQUcsaUJBQWlCIiwiaWdub3JlTGlzdCI6W119
|
|
404
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWNrQ29yZSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb3JlMiIsIl9jb25zdGFudHMiLCJfZ2xvYmVEZXB0aERpc2tMYXllciIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiX2dldFByb3RvdHlwZU9mMiIsInByb3RvdHlwZSIsIl9jYWxsU3VwZXIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJEZWNrR2xvYmVWaWV3IiwiX0dsb2JlVmlldyIsIkdsb2JlQ29udHJvbGxlciIsIl9HbG9iZUNvbnRyb2xsZXIiLCJEZWNrR2xvYmVWaWV3cG9ydCIsIl9HbG9iZVZpZXdwb3J0Iiwiem9vbUFkanVzdCIsImxhdGl0dWRlIiwiTWF0aCIsImxvZzIiLCJQSSIsImNvcyIsImlzUGl4ZWxPbkdsb2JlIiwidmlld3BvcnQiLCJwb3MiLCJtIiwicGl4ZWxVbnByb2plY3Rpb25NYXRyaXgiLCJwMCIsInZlYzQiLCJ0cmFuc2Zvcm1NYXQ0IiwicDEiLCJheCIsImF5IiwiYXoiLCJieCIsImJ5IiwiYnoiLCJkeCIsImR5IiwiZHoiLCJjeCIsImN5IiwiY3oiLCJkU3FyIiwiR0xPQkVfQ09NTU9OX1JBRElVUyIsIlpvb21Ub0N1cnNvckdsb2JlQ29udHJvbGxlciIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9sZW4iLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY29uY2F0IiwiT3JpZ2luYWxHbG9iZVN0YXRlIiwiQ29udHJvbGxlclN0YXRlIiwib2ZmR2xvYmVab29tQXQiLCJfT3JpZ2luYWxHbG9iZVN0YXRlIiwiUGF0Y2hlZEdsb2JlU3RhdGUiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwiYXBwbHlDb25zdHJhaW50cyIsInByb3BzIiwicmVzdWx0IiwiY2xhbXBlZExhdGl0dWRlIiwiY2xhbXAiLCJHTE9CRV9NQVhfTEFUSVRVREUiLCJ6b29tIiwiX2NvbnN0cmFpblpvb20iLCJnZXRWaWV3cG9ydFByb3BzIiwiX3Byb3BzIiwibWF4Wm9vbSIsIl9wcm9wczIiLCJtaW5ab29tIiwidW5kZWZpbmVkIiwiWk9PTTAiLCJ6b29tQWRqdXN0bWVudCIsIl9yZWYiLCJzdGFydFBvcyIsInNjYWxlIiwiX2dldFN0YXRlIiwiZ2V0U3RhdGUiLCJzdGFydFpvb20iLCJzdGFydFpvb21MbmdMYXQiLCJjdXJyZW50UHJvcHMiLCJCVVJTVF9USU1FT1VUX01TIiwibm93IiwiRGF0ZSIsImFuY2hvclZpZXdwb3J0IiwibWFrZVZpZXdwb3J0Iiwib25HbG9iZSIsIl9nZXRVcGRhdGVkU3RhdGUiLCJfdW5wcm9qZWN0IiwiaXNBcnJheSIsIk51bWJlciIsImlzRmluaXRlIiwibWluIiwiZExuZyIsImxvbmdpdHVkZSIsInpvb21lZFZpZXdwb3J0IiwiZnJvbVBvc2l0aW9uIiwidW5wcm9qZWN0Iiwiem9vbUVuZCIsInBhblN0YXJ0IiwiX3JlZjIiLCJzdGFydFBhbkxuZ0xhdCIsInBhbiIsIl9yZWYzIiwic3RvcmVkU3RhcnQiLCJ2aXN1YWxab29tIiwicGFuRW5kIiwiS2VwbGVyR2xvYmVWaWV3IiwiZXhwb3J0cyIsIl9EZWNrR2xvYmVWaWV3IiwiZ2V0Vmlld3BvcnRUeXBlIiwiZGlzcGxheU5hbWUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2xvYmUvZ2xvYmUtdmlldy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBEZWNrQ29yZSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7Y2xhbXAsIHZlYzR9IGZyb20gJ0BtYXRoLmdsL2NvcmUnO1xuaW1wb3J0IHtHTE9CRV9NQVhfTEFUSVRVREV9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7R0xPQkVfQ09NTU9OX1JBRElVU30gZnJvbSAnLi9nbG9iZS1kZXB0aC1kaXNrLWxheWVyJztcblxuLy8gZGVjay5nbCBleHBvc2VzIEdsb2JlVmlldyAvIEdsb2JlQ29udHJvbGxlciBhcyBleHBlcmltZW50YWwsIHVuZGVyc2NvcmUtcHJlZml4ZWRcbi8vIG1lbWJlcnMuIFRoZWlyIG5hbWVkIHR5cGUgYmluZGluZ3MgYXJlbid0IHJlbGlhYmx5IHJlc29sdmFibGUgdGhyb3VnaCB0aGVcbi8vIHBhY2thZ2UgYmFycmVsIHVuZGVyIHRoaXMgcHJvamVjdCdzIG1vZHVsZSByZXNvbHV0aW9uLCBzbyB3ZSBwdWxsIHRoZW0gb2ZmIHRoZVxuLy8gbmFtZXNwYWNlIHdpdGggYSBsb29zZSB0eXBlLiBSdW50aW1lIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbmNvbnN0IERlY2tHbG9iZVZpZXcgPSAoRGVja0NvcmUgYXMgYW55KS5fR2xvYmVWaWV3IGFzIGFueTtcbmNvbnN0IEdsb2JlQ29udHJvbGxlciA9IChEZWNrQ29yZSBhcyBhbnkpLl9HbG9iZUNvbnRyb2xsZXIgYXMgYW55O1xuY29uc3QgRGVja0dsb2JlVmlld3BvcnQgPSAoRGVja0NvcmUgYXMgYW55KS5fR2xvYmVWaWV3cG9ydCBhcyBhbnk7XG5cbi8qKlxuICogTGF0aXR1ZGUtYmFzZWQgem9vbSBhZGp1c3RtZW50IHVzZWQgYnkgZGVjay5nbCdzIEdsb2JlVmlld3BvcnQsIHJlcGxpY2F0ZWRcbiAqIGhlcmUgc28gb3VyIGN1c3RvbSBgX2NvbnN0cmFpblpvb21gIG1hdGNoZXMgZGVjay5nbCdzIGNvb3JkaW5hdGUgbWF0aC5cbiAqIFNlZSBAZGVjay5nbC9jb3JlIGdsb2JlLXZpZXdwb3J0LmpzIGB6b29tQWRqdXN0YC5cbiAqL1xuZnVuY3Rpb24gem9vbUFkanVzdChsYXRpdHVkZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubG9nMihNYXRoLlBJICogTWF0aC5jb3MoKGxhdGl0dWRlICogTWF0aC5QSSkgLyAxODApKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHNjcmVlbiBwaXhlbCBgcG9zYCBsaWVzIHdpdGhpbiB0aGUgdmlzaWJsZSBnbG9iZVxuICogc2lsaG91ZXR0ZS5cbiAqXG4gKiBHbG9iZVZpZXdwb3J0LnVucHJvamVjdCgpIGNsYW1wcyB0aGUgcmF54oCTc3BoZXJlIGRpc2NyaW1pbmFudCB3aXRoXG4gKiBNYXRoLm1heCgwLCBywrLiiJJkwrIpLCBzbyBpdCBhbHdheXMgcmV0dXJucyBhIHZhbGlkIGxuZy9sYXQgZXZlbiBmb3JcbiAqIG9mZi1nbG9iZSBwaXhlbHMgKHNuYXBwaW5nIHRvIHRoZSBsaW1iKS4gIFdlIHJlcGxpY2F0ZSB0aGUgc2FtZSByYXkgY2FzdFxuICogYnV0IGNoZWNrIHRoZSBkaXNjcmltaW5hbnQgYmVmb3JlIHRoZSBjbGFtcCB1c2luZyB0aGUgc3RhbmRhcmRcbiAqIHNxdWFyZWQtZGlzdGFuY2UtZnJvbS1vcmlnaW4tdG8tcmF5IGZvcm11bGE6IHxQ4oKAIMOXIGRpcnzCsiAvIHxkaXJ8wrIuXG4gKi9cbmZ1bmN0aW9uIGlzUGl4ZWxPbkdsb2JlKHZpZXdwb3J0OiBhbnksIHBvczogW251bWJlciwgbnVtYmVyXSk6IGJvb2xlYW4ge1xuICBjb25zdCBtOiBudW1iZXJbXSA9IHZpZXdwb3J0LnBpeGVsVW5wcm9qZWN0aW9uTWF0cml4O1xuICBpZiAoIW0pIHJldHVybiB0cnVlOyAvLyBjb25zZXJ2YXRpdmUgZmFsbGJhY2sgaWYgbWF0cml4IHVuYXZhaWxhYmxlXG5cbiAgLy8gQ2FzdCBhIHJheSB0aHJvdWdoIHRoZSBwaXhlbCBhdCB0aGUgbmVhciBhbmQgZmFyIHBsYW5lcy5cbiAgY29uc3QgcDAgPSB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwb3NbMF0sIHBvc1sxXSwgLTEsIDFdLCBtKTtcbiAgY29uc3QgcDEgPSB2ZWM0LnRyYW5zZm9ybU1hdDQoW10sIFtwb3NbMF0sIHBvc1sxXSwgMSwgMV0sIG0pO1xuICBpZiAocDBbM10gPT09IDAgfHwgcDFbM10gPT09IDApIHJldHVybiB0cnVlOyAvLyBkZWdlbmVyYXRlIHByb2plY3Rpb25cblxuICAvLyBQZXJzcGVjdGl2ZS1kaXZpZGUgdG8gd29ybGQgc3BhY2UuXG4gIGNvbnN0IGF4ID0gcDBbMF0gLyBwMFszXSwgYXkgPSBwMFsxXSAvIHAwWzNdLCBheiA9IHAwWzJdIC8gcDBbM107XG4gIGNvbnN0IGJ4ID0gcDFbMF0gLyBwMVszXSwgYnkgPSBwMVsxXSAvIHAxWzNdLCBieiA9IHAxWzJdIC8gcDFbM107XG5cbiAgLy8gUmF5IGRpcmVjdGlvbi5cbiAgY29uc3QgZHggPSBieCAtIGF4LCBkeSA9IGJ5IC0gYXksIGR6ID0gYnogLSBhejtcblxuICAvLyBTcXVhcmVkIGRpc3RhbmNlIGZyb20gdGhlIG9yaWdpbiAoZ2xvYmUgY2VudGVyKSB0byB0aGUgcmF5OlxuICAvLyAgIGTCsiA9IHxQ4oKAIMOXIGRpcnzCsiAvIHxkaXJ8wrJcbiAgY29uc3QgY3ggPSBheSAqIGR6IC0gYXogKiBkeTtcbiAgY29uc3QgY3kgPSBheiAqIGR4IC0gYXggKiBkejtcbiAgY29uc3QgY3ogPSBheCAqIGR5IC0gYXkgKiBkeDtcbiAgY29uc3QgZFNxciA9IChjeCAqIGN4ICsgY3kgKiBjeSArIGN6ICogY3opIC8gKGR4ICogZHggKyBkeSAqIGR5ICsgZHogKiBkeik7XG5cbiAgcmV0dXJuIGRTcXIgPD0gR0xPQkVfQ09NTU9OX1JBRElVUyAqIEdMT0JFX0NPTU1PTl9SQURJVVM7XG59XG5cbi8qKlxuICogQ3VzdG9tIEdsb2JlQ29udHJvbGxlciB0aGF0IHJlc3RvcmVzIHpvb20tdG8tY3Vyc29yIGJlaGF2aW9yLlxuICpcbiAqIEluIGRlY2suZ2wgOS54LCB0aGUgZGVmYXVsdCBHbG9iZUNvbnRyb2xsZXIncyBHbG9iZVN0YXRlLnpvb20oKSBpZ25vcmVzIHRoZVxuICogY3Vyc29yIHBvc2l0aW9uIGFuZCBhbHdheXMgem9vbXMgdG93YXJkIHRoZSBjZW50ZXIuIFRoaXMgY29udHJvbGxlciBwYXRjaGVzXG4gKiB0aGF0IGJlaGF2aW9yIGJ5IG92ZXJyaWRpbmcgdGhlIENvbnRyb2xsZXJTdGF0ZSdzIHpvb20gbWV0aG9kIHRvIHBhbiB0aGVcbiAqIGdsb2JlIHVuZGVyIHRoZSBjdXJzb3Igd2hpbGUgem9vbWluZywgc28gem9vbS10by1jdXJzb3Igd29ya3MgdGhlIHNhbWUgd2F5IGl0XG4gKiBkb2VzIGZvciB0aGUgMkQgTWFwQ29udHJvbGxlci5cbiAqL1xuY2xhc3MgWm9vbVRvQ3Vyc29yR2xvYmVDb250cm9sbGVyIGV4dGVuZHMgR2xvYmVDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICBzdXBlciguLi5hcmdzKTtcbiAgICBjb25zdCBPcmlnaW5hbEdsb2JlU3RhdGUgPSB0aGlzLkNvbnRyb2xsZXJTdGF0ZTtcblxuICAgIC8vIFRyYWNrcyB3aGVuIHRoZSBtb3N0IHJlY2VudCBvZmYtZ2xvYmUgd2hlZWwtem9vbSB0aWNrIGZpcmVkLlxuICAgIC8vIFN0b3JlZCBhcyBhIGNvbnRyb2xsZXItbGV2ZWwgY2xvc3VyZSB2YXJpYWJsZSByYXRoZXIgdGhhbiBpbiBWaWV3U3RhdGVcbiAgICAvLyBiZWNhdXNlIGRlY2suZ2wncyBDb250cm9sbGVyIG5ldmVyIGNhbGxzIHpvb21FbmQoKSBmb3Igd2hlZWwgZXZlbnRzIOKAlFxuICAgIC8vIG9ubHkgZm9yIHBpbmNoL3RvdWNoIOKAlCBzbyB0aGVyZSBpcyBubyByZWxpYWJsZSBob29rIHRvIGNsZWFyIGFcbiAgICAvLyBWaWV3U3RhdGUtYmFzZWQgc2VudGluZWwgYWZ0ZXIgYSB3aGVlbCBzY3JvbGwgc2Vzc2lvbiBlbmRzLlxuICAgIC8vIEEgc2ltcGxlIHRpbWVzdGFtcCBsZXRzIHVzIGRldGVjdCB3aGVuIGEgbmV3IHNjcm9sbCBidXJzdCBoYXMgc3RhcnRlZFxuICAgIC8vICg+IEJVUlNUX1RJTUVPVVRfTVMgc2luY2UgdGhlIGxhc3Qgb2ZmLWdsb2JlIHRpY2spIHNvIGN1cnNvci1hbmNob3JlZFxuICAgIC8vIHpvb20gY2FuIHJlc3VtZSBuYXR1cmFsbHkgb24gdGhlIG5leHQgaW5kZXBlbmRlbnQgc2Nyb2xsLlxuICAgIGxldCBvZmZHbG9iZVpvb21BdDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBDcmVhdGUgcGF0Y2hlZCBHbG9iZVN0YXRlIHRoYXQgc3VwcG9ydHMgem9vbS10by1jdXJzb3JcbiAgICB0aGlzLkNvbnRyb2xsZXJTdGF0ZSA9IGNsYXNzIFBhdGNoZWRHbG9iZVN0YXRlIGV4dGVuZHMgT3JpZ2luYWxHbG9iZVN0YXRlIHtcbiAgICAgIC8vIENvbnN0cmFpbiB0aGUgY2FtZXJhIHRhcmdldCB0byBhIGxhdGl0dWRlIGJhbmQgYXJvdW5kIHRoZSBlcXVhdG9yIHNvIHRoZVxuICAgICAgLy8gdmlldyBjYW4ndCBiZSBjZW50ZXJlZCBvbiB0aGUgcG9sZXMuIGRlY2suZ2wncyBhcHBseUNvbnN0cmFpbnRzIGNsYW1wc1xuICAgICAgLy8gbGF0aXR1ZGUgdG8gfjg1wrAsIHdoaWNoIHN0aWxsIGxldHMgdGhlIGNhbWVyYSBsb29rIHN0cmFpZ2h0IGF0IGEgcG9sZS5cbiAgICAgIGFwcGx5Q29uc3RyYWludHMocHJvcHM6IGFueSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoc3VwZXIuYXBwbHlDb25zdHJhaW50cyBhcyBhbnkpKHByb3BzKTtcbiAgICAgICAgY29uc3QgY2xhbXBlZExhdGl0dWRlID0gY2xhbXAocmVzdWx0LmxhdGl0dWRlLCAtR0xPQkVfTUFYX0xBVElUVURFLCBHTE9CRV9NQVhfTEFUSVRVREUpO1xuICAgICAgICBpZiAoY2xhbXBlZExhdGl0dWRlICE9PSByZXN1bHQubGF0aXR1ZGUpIHtcbiAgICAgICAgICAvLyBkZWNrLmdsIGNvdXBsZXMgem9vbSB0byBsYXRpdHVkZSB2aWEgem9vbUFkanVzdDsgd2hlbiB3ZSBmdXJ0aGVyXG4gICAgICAgICAgLy8gY2xhbXAgbGF0aXR1ZGUsIHJlLWFwcGx5IHRoZSBzYW1lIGRlbHRhIHNvIHpvb20gc3RheXMgY29uc2lzdGVudC5cbiAgICAgICAgICByZXN1bHQuem9vbSArPSB6b29tQWRqdXN0KGNsYW1wZWRMYXRpdHVkZSkgLSB6b29tQWRqdXN0KHJlc3VsdC5sYXRpdHVkZSk7XG4gICAgICAgICAgcmVzdWx0LmxhdGl0dWRlID0gY2xhbXBlZExhdGl0dWRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlY2suZ2wncyBHbG9iZVN0YXRlLl9jb25zdHJhaW5ab29tIGRlcml2ZXMgYSBtaW5pbXVtIHpvb20gZnJvbSBgbWF4Qm91bmRzYFxuICAgICAgLy8gdGhhdCBmb3JjZXMgdGhlIGdsb2JlIHRvIGZpbGwgdGhlIHZpZXdwb3J0LiBUaGF0IGJvdW5kcy1iYXNlZCBtaW5pbXVtXG4gICAgICAvLyAofjMgZm9yIGEgdHlwaWNhbCB3aW5kb3cpIG92ZXJyaWRlcyBhbnkgY29uZmlndXJlZCBgbWluWm9vbWAsIHNvIHRoZSB1c2VyXG4gICAgICAvLyBjYW4gbmV2ZXIgem9vbSBvdXQgZmFyIGVub3VnaCB0byBzZWUgdGhlIHdob2xlIGdsb2JlIHNtYWxsIG9uIHNjcmVlbi5cbiAgICAgIC8vIE92ZXJyaWRlIGl0IHRvIGhvbm9yIG9ubHkgdGhlIGNvbmZpZ3VyZWQgbWluWm9vbS9tYXhab29tIChwbHVzIHRoZSBzYW1lXG4gICAgICAvLyBsYXRpdHVkZSBhZGp1c3RtZW50IGRlY2suZ2wgdXNlcyksIGlnbm9yaW5nIHRoZSBib3VuZHMtYmFzZWQgZmxvb3IuXG4gICAgICBfY29uc3RyYWluWm9vbSh6b29tOiBudW1iZXIsIHByb3BzPzogYW55KSB7XG4gICAgICAgIHByb3BzID0gcHJvcHMgfHwgKHRoaXMgYXMgYW55KS5nZXRWaWV3cG9ydFByb3BzKCk7XG4gICAgICAgIGNvbnN0IHtsYXRpdHVkZSwgbWF4Wm9vbX0gPSBwcm9wcztcbiAgICAgICAgbGV0IHttaW5ab29tfSA9IHByb3BzO1xuICAgICAgICBpZiAobWluWm9vbSA9PT0gdW5kZWZpbmVkIHx8IG1pblpvb20gPT09IG51bGwpIHtcbiAgICAgICAgICBtaW5ab29tID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBaT09NMCA9IHpvb21BZGp1c3QoMCk7XG4gICAgICAgIGNvbnN0IHpvb21BZGp1c3RtZW50ID0gem9vbUFkanVzdChsYXRpdHVkZSkgLSBaT09NMDtcbiAgICAgICAgcmV0dXJuIGNsYW1wKHpvb20sIG1pblpvb20gKyB6b29tQWRqdXN0bWVudCwgbWF4Wm9vbSArIHpvb21BZGp1c3RtZW50KTtcbiAgICAgIH1cblxuICAgICAgLy8gRXhhY3Qgem9vbS10by1jdXJzb3IuIGRlY2suZ2wgOS54J3MgR2xvYmVDb250cm9sbGVyIGRvZXMgbm90IGtlZXAgdGhlIHBvaW50XG4gICAgICAvLyB1bmRlciB0aGUgY3Vyc29yIGZpeGVkIHdoaWxlIHpvb21pbmcsIGluIHR3byB3YXlzIHdlIHdvcmsgYXJvdW5kIGhlcmU6XG4gICAgICAvLyAgIDEuIEl0cyBHbG9iZVN0YXRlLnpvb20oKSBpZ25vcmVzIHRoZSBjdXJzb3IgYW5kIHpvb21zIHRvd2FyZCB0aGUgY2VudGVyLlxuICAgICAgLy8gICAyLiBJdHMgR2xvYmVWaWV3cG9ydC5wYW5CeVBvc2l0aW9uIGlzIGEgbG9zc3ksICpsaW5lYXJpemVkKiAzLWFyZ1xuICAgICAgLy8gICAgICByb3RhdGlvbiAobG9uZ2l0dWRlICs9ICgwLjI1L3NjYWxlKSooc3RhcnRQaXhlbC1waXhlbCksIHJlLWRlcml2ZXNcbiAgICAgIC8vICAgICAgem9vbSkuIFVzaW5nIGl0IHBlciB3aGVlbCB0aWNrIGFjY3VtdWxhdGVzIGVycm9yLCBzbyBhZnRlciBhIGxvbmdcbiAgICAgIC8vICAgICAgY29udGludW91cyB6b29tIHRoZSBwb2ludCBlbmRzIHVwIG5vdGljZWFibHkgc2hpZnRlZCBmcm9tIHdoYXQgd2FzXG4gICAgICAvLyAgICAgIG9yaWdpbmFsbHkgdW5kZXIgdGhlIGN1cnNvci5cbiAgICAgIC8vIFRoZSByZWNlbnRlciBiZWxvdyBpcyBhbiAqZXhhY3QgYWJzb2x1dGUqIHRyYW5zbGF0aW9uOiB1bnByb2plY3QgdGhlXG4gICAgICAvLyBjdXJzb3IgcGl4ZWwgaW4gdGhlIHpvb21lZCB2aWV3cG9ydCB0byBnZXQgdGhlIGdlbyBwb2ludCBjdXJyZW50bHkgdW5kZXIgaXQsXG4gICAgICAvLyB0aGVuIHNoaWZ0IHRoZSBjZW50ZXIgYnkgKGFuY2hvciAtIHRoYXRQb2ludCkuIE5vIHpvb20gY291cGxpbmcsIG5vXG4gICAgICAvLyByb3RhdGlvblNwZWVkLCBhbmQgaXQgYXBwbGllcyB0byB6b29tLWluIGFuZCB6b29tLW91dCBzeW1tZXRyaWNhbGx5LCBzb1xuICAgICAgLy8gdGhlcmUgaXMgbm8gcGVyLXRpY2sgYWNjdW11bGF0ZWQgZHJpZnQuXG4gICAgICB6b29tKHtcbiAgICAgICAgcG9zLFxuICAgICAgICBzdGFydFBvcyxcbiAgICAgICAgc2NhbGVcbiAgICAgIH06IHtcbiAgICAgICAgcG9zOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgICAgICBzdGFydFBvcz86IFtudW1iZXIsIG51bWJlcl07XG4gICAgICAgIHNjYWxlOiBudW1iZXI7XG4gICAgICB9KSB7XG4gICAgICAgIGxldCB7c3RhcnRab29tLCBzdGFydFpvb21MbmdMYXR9ID0gKHRoaXMgYXMgYW55KS5nZXRTdGF0ZSgpO1xuICAgICAgICBjb25zdCBjdXJyZW50UHJvcHMgPSAodGhpcyBhcyBhbnkpLmdldFZpZXdwb3J0UHJvcHMoKTtcblxuICAgICAgICBpZiAoIXN0YXJ0Wm9vbUxuZ0xhdCkge1xuICAgICAgICAgIC8vIFdoZWVsIHpvb206IHJlLWRlcml2ZSBhbmNob3IgZWFjaCB0aWNrIChwaW5jaCBzZXRzIGl0IG9uY2UgaW4gem9vbVN0YXJ0KS5cbiAgICAgICAgICBzdGFydFpvb20gPSBjdXJyZW50UHJvcHMuem9vbTtcblxuICAgICAgICAgIC8vIFN1cHByZXNzIGN1cnNvci1hbmNob3Jpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIG9mZi1nbG9iZSBvciB3aGVuIGFcbiAgICAgICAgICAvLyByZWNlbnQgdGljayB3YXMgb2ZmLWdsb2JlICh3aXRoaW4gQlVSU1RfVElNRU9VVF9NUykuICBkZWNrLmdsIG5ldmVyXG4gICAgICAgICAgLy8gY2FsbHMgem9vbUVuZCgpIGZvciB3aGVlbCBldmVudHMgc28gd2UgdHJhY2sgdGhlIHNlc3Npb24gd2l0aCB0aGVcbiAgICAgICAgICAvLyBjbG9zdXJlIHZhcmlhYmxlIGBvZmZHbG9iZVpvb21BdGAgcmF0aGVyIHRoYW4gVmlld1N0YXRlLlxuICAgICAgICAgIGNvbnN0IEJVUlNUX1RJTUVPVVRfTVMgPSAyMDA7XG4gICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCBhbmNob3JWaWV3cG9ydCA9ICh0aGlzIGFzIGFueSkubWFrZVZpZXdwb3J0KGN1cnJlbnRQcm9wcyk7XG4gICAgICAgICAgY29uc3Qgb25HbG9iZSA9IGlzUGl4ZWxPbkdsb2JlKGFuY2hvclZpZXdwb3J0LCBzdGFydFBvcyB8fCBwb3MpO1xuXG4gICAgICAgICAgaWYgKCFvbkdsb2JlKSBvZmZHbG9iZVpvb21BdCA9IG5vdztcblxuICAgICAgICAgIGlmICghb25HbG9iZSB8fCAob2ZmR2xvYmVab29tQXQgIT09IG51bGwgJiYgbm93IC0gb2ZmR2xvYmVab29tQXQgPCBCVVJTVF9USU1FT1VUX01TKSkge1xuICAgICAgICAgICAgY29uc3Qgem9vbSA9ICh0aGlzIGFzIGFueSkuX2NvbnN0cmFpblpvb20oc3RhcnRab29tICsgTWF0aC5sb2cyKHNjYWxlKSk7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fZ2V0VXBkYXRlZFN0YXRlKHt6b29tfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2ZmR2xvYmVab29tQXQgPSBudWxsO1xuICAgICAgICAgIHN0YXJ0Wm9vbUxuZ0xhdCA9ICh0aGlzIGFzIGFueSkuX3VucHJvamVjdChzdGFydFBvcykgfHwgKHRoaXMgYXMgYW55KS5fdW5wcm9qZWN0KHBvcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB6b29tID0gKHRoaXMgYXMgYW55KS5fY29uc3RyYWluWm9vbShzdGFydFpvb20gKyBNYXRoLmxvZzIoc2NhbGUpKTtcblxuICAgICAgICBpZiAoIXN0YXJ0Wm9vbUxuZ0xhdCkge1xuICAgICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe3pvb219KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFpvb20tb3V0IChzY2FsZSA8IDEpOiBleGFjdCBjdXJzb3IgYW5jaG9yaW5nIGlzIHVuc3RhYmxlIG5lYXIgdGhlIGxpbWJcbiAgICAgICAgLy8gKG5vbi1saW5lYXIgZ2VvLXRvLXBpeGVsIG1hcHBpbmcgcHVsbHMgdGhlIHZpZXcgdG93YXJkIHRoZSBwb2xlcykuXG4gICAgICAgIC8vIEluc3RlYWQsIGdlbnRseSBzdGVlciB0aGUgY2VudGVyIHRvd2FyZCB0aGUgY3Vyc29yIGxvY2F0aW9uIHBlciB0aWNrLlxuICAgICAgICBpZiAoc2NhbGUgPCAxKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3RhcnRab29tTG5nTGF0KSB8fFxuICAgICAgICAgICAgIU51bWJlci5pc0Zpbml0ZShzdGFydFpvb21MbmdMYXRbMF0pIHx8XG4gICAgICAgICAgICAhTnVtYmVyLmlzRmluaXRlKHN0YXJ0Wm9vbUxuZ0xhdFsxXSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe3pvb219KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBQZXItdGljayBsZXJwIHN0cmVuZ3RoIHNjYWxlcyB3aXRoIHpvb20tb3V0IGFtb3VudDsgY2xhbXBlZCB0byBhdm9pZCBvdmVyc2hvb3QuXG4gICAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKDEsICgxIC0gc2NhbGUpICogMC4xMSk7XG5cbiAgICAgICAgICAvLyBTaG9ydGVzdC1wYXRoIGxvbmdpdHVkZSBpbnRlcnBvbGF0aW9uIChoYW5kbGVzIGFudGltZXJpZGlhbiB3cmFwKS5cbiAgICAgICAgICBsZXQgZExuZyA9IHN0YXJ0Wm9vbUxuZ0xhdFswXSAtIGN1cnJlbnRQcm9wcy5sb25naXR1ZGU7XG4gICAgICAgICAgaWYgKGRMbmcgPiAxODApIGRMbmcgLT0gMzYwO1xuICAgICAgICAgIGlmIChkTG5nIDwgLTE4MCkgZExuZyArPSAzNjA7XG5cbiAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fZ2V0VXBkYXRlZFN0YXRlKHtcbiAgICAgICAgICAgIHpvb20sXG4gICAgICAgICAgICBsb25naXR1ZGU6IGN1cnJlbnRQcm9wcy5sb25naXR1ZGUgKyBkTG5nICogdCxcbiAgICAgICAgICAgIGxhdGl0dWRlOiBjdXJyZW50UHJvcHMubGF0aXR1ZGUgKyAoc3RhcnRab29tTG5nTGF0WzFdIC0gY3VycmVudFByb3BzLmxhdGl0dWRlKSAqIHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHpvb21lZFZpZXdwb3J0ID0gKHRoaXMgYXMgYW55KS5tYWtlVmlld3BvcnQoe1xuICAgICAgICAgIC4uLmN1cnJlbnRQcm9wcyxcbiAgICAgICAgICB6b29tXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFpvb20taW46IGV4YWN0IGFuY2hvciDigJQgdW5wcm9qZWN0IHRoZSBjdXJzb3IgaW4gdGhlIHBvc3Qtem9vbSB2aWV3cG9ydCBhbmRcbiAgICAgICAgLy8gc2hpZnQgdGhlIGNlbnRlciBzbyB0aGUgZ3JhYmJlZCBnZW8gcG9pbnQgbGFuZHMgYmFjayB1bmRlciB0aGUgY3Vyc29yLlxuICAgICAgICAvLyBHdWFyZCB3aXRoIGlzUGl4ZWxPbkdsb2JlOiBpZiBwb3MgbW92ZWQgb2ZmLWdsb2JlIGR1cmluZyBhIGZhc3QgcGluY2gsXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBjZW50ZXIgem9vbS5cbiAgICAgICAgaWYgKCFpc1BpeGVsT25HbG9iZSh6b29tZWRWaWV3cG9ydCwgcG9zKSkge1xuICAgICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe3pvb219KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZyb21Qb3NpdGlvbiA9IHpvb21lZFZpZXdwb3J0LnVucHJvamVjdChwb3MpO1xuXG4gICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe1xuICAgICAgICAgIHpvb20sXG4gICAgICAgICAgbG9uZ2l0dWRlOiBzdGFydFpvb21MbmdMYXRbMF0gLSBmcm9tUG9zaXRpb25bMF0gKyB6b29tZWRWaWV3cG9ydC5sb25naXR1ZGUsXG4gICAgICAgICAgbGF0aXR1ZGU6IHN0YXJ0Wm9vbUxuZ0xhdFsxXSAtIGZyb21Qb3NpdGlvblsxXSArIHpvb21lZFZpZXdwb3J0LmxhdGl0dWRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciB0aGUgcGVyc2lzdGVkIHBpbmNoIGFuY2hvciBhdCBnZXN0dXJlIGVuZC5cbiAgICAgIHpvb21FbmQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcyBhcyBhbnkpLl9nZXRVcGRhdGVkU3RhdGUoe1xuICAgICAgICAgIHN0YXJ0Wm9vbTogbnVsbCxcbiAgICAgICAgICBzdGFydFpvb21MbmdMYXQ6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEV4YWN0LCBjdXJzb3ItYW5jaG9yZWQgcGFuOiB0aGUgZ2VvIHBvaW50IGdyYWJiZWQgb24gbW91c2Vkb3duIHN0YXlzXG4gICAgICAvLyBsb2NrZWQgdW5kZXIgdGhlIGN1cnNvciBmb3IgdGhlIHdob2xlIGRyYWcuXG4gICAgICAvL1xuICAgICAgLy8gZGVjay5nbCA5LngncyBHbG9iZUNvbnRyb2xsZXIgcGFucyB3aXRoIGEgKmxpbmVhcml6ZWQsIGNlbnRlci1hbmNob3JlZCpcbiAgICAgIC8vIHJvdGF0aW9uIChHbG9iZVZpZXdwb3J0LnBhbkJ5UG9zaXRpb24oW2xuZyxsYXQsem9vbV0sIHBpeGVsLCBzdGFydFBpeGVsKTpcbiAgICAgIC8vIGxvbmdpdHVkZSArPSAoMC4yNS9zY2FsZSkqKHN0YXJ0UGl4ZWwtcGl4ZWwpKS4gQmVjYXVzZSB0aGUgYW5jaG9yIGlzIHRoZVxuICAgICAgLy8gdmlldyBDRU5URVIgcmF0aGVyIHRoYW4gdGhlIGdyYWJiZWQgcG9pbnQsIHRoZSBmaXJzdCBkcmFnIGZyYW1lIHNuYXBzIHRoZVxuICAgICAgLy8gY2VudGVyIHRvIHNhdGlzZnkgdGhlIGxpbmVhciBhcHByb3hpbWF0aW9uLCBwcm9kdWNpbmcgdGhlIHZpc2libGUgXCJqdW1wIHRvXG4gICAgICAvLyB0aGUgc2lkZS91cFwiIGF0IHRoZSBzdGFydCBvZiBhIHBhbiAobW9zdCBub3RpY2VhYmxlIGF0IGhpZ2ggem9vbSksIGFmdGVyXG4gICAgICAvLyB3aGljaCBpbmNyZW1lbnRhbCBkZWx0YXMgdHJhY2sgZmluZS4gVGhlIGV4YWN0IGFuY2hvciBiZWxvdyByZW1vdmVzIHRoYXRcbiAgICAgIC8vIGZpcnN0LWZyYW1lIHNuYXAuXG4gICAgICBwYW5TdGFydCh7cG9zfToge3BvczogW251bWJlciwgbnVtYmVyXX0pIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnQgPSAodGhpcyBhcyBhbnkpLm1ha2VWaWV3cG9ydCgodGhpcyBhcyBhbnkpLmdldFZpZXdwb3J0UHJvcHMoKSk7XG4gICAgICAgIC8vIElmIHRoZSBtb3VzZWRvd24gcGl4ZWwgaXMgb3V0c2lkZSB0aGUgZ2xvYmUgc2lsaG91ZXR0ZSwgc3RvcmUgYGZhbHNlYFxuICAgICAgICAvLyBhcyBhbiBleHBsaWNpdCBzZW50aW5lbCBzbyB0aGF0IGV2ZXJ5IHN1YnNlcXVlbnQgYHBhbmAgY2FsbCBmb3IgdGhpc1xuICAgICAgICAvLyBnZXN0dXJlIGlzIGEgbm8tb3AuICBXZSBjYW4ndCByZWx5IG9uIGBfdW5wcm9qZWN0KHBvcylgIHJldHVybmluZ1xuICAgICAgICAvLyB1bmRlZmluZWQgaGVyZSBiZWNhdXNlIEdsb2JlVmlld3BvcnQudW5wcm9qZWN0IGNsYW1wcyB0aGVcbiAgICAgICAgLy8gcmF54oCTc3BoZXJlIGRpc2NyaW1pbmFudCB0byAwIHZpYSBNYXRoLm1heCgwLCDigKYpLCB3aGljaCBtZWFucyBpdFxuICAgICAgICAvLyBhbHdheXMgcmV0dXJucyBhIHZhbGlkLWxvb2tpbmcgbG5nL2xhdCBldmVuIGZvciBvZmYtZ2xvYmUgcGl4ZWxzLlxuICAgICAgICBpZiAoIWlzUGl4ZWxPbkdsb2JlKHZpZXdwb3J0LCBwb3MpKSB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7c3RhcnRQYW5MbmdMYXQ6IGZhbHNlfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7XG4gICAgICAgICAgc3RhcnRQYW5MbmdMYXQ6ICh0aGlzIGFzIGFueSkuX3VucHJvamVjdChwb3MpXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwYW4oe3Bvcywgc3RhcnRQb3N9OiB7cG9zOiBbbnVtYmVyLCBudW1iZXJdOyBzdGFydFBvcz86IFtudW1iZXIsIG51bWJlcl19KSB7XG4gICAgICAgIGNvbnN0IHN0b3JlZFN0YXJ0ID0gKHRoaXMgYXMgYW55KS5nZXRTdGF0ZSgpLnN0YXJ0UGFuTG5nTGF0O1xuXG4gICAgICAgIGNvbnN0IHByb3BzID0gKHRoaXMgYXMgYW55KS5nZXRWaWV3cG9ydFByb3BzKCk7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gKHRoaXMgYXMgYW55KS5tYWtlVmlld3BvcnQocHJvcHMpO1xuXG4gICAgICAgIC8vIGBmYWxzZWAgbWVhbnMgdGhlIGRyYWcgc3RhcnRlZCBvdXRzaWRlIHRoZSBnbG9iZS4gSWYgdGhlIGN1cnNvciBoYXNcbiAgICAgICAgLy8gbm93IG1vdmVkIG9udG8gdGhlIGdsb2JlLCBsYXRjaCB0aGUgY3VycmVudCBwb3NpdGlvbiBhcyB0aGUgYW5jaG9yXG4gICAgICAgIC8vIHNvIHJvdGF0aW9uIGJlZ2lucyBmcm9tIHRoZSBlbnRyeSBwb2ludC4gT3RoZXJ3aXNlIHN0YXkgZnJvemVuLlxuICAgICAgICBpZiAoc3RvcmVkU3RhcnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaWYgKCFpc1BpeGVsT25HbG9iZSh2aWV3cG9ydCwgcG9zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEN1cnNvciBqdXN0IGVudGVyZWQgdGhlIGdsb2JlIOKAlCBlc3RhYmxpc2ggdGhlIGFuY2hvciBhbmQgcmV0dXJuXG4gICAgICAgICAgLy8gd2l0aG91dCBtb3Zpbmc7IHRoZSBuZXh0IHBhbiBldmVudCB3aWxsIGFwcGx5IHRoZSBmaXJzdCBkZWx0YS5cbiAgICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fZ2V0VXBkYXRlZFN0YXRlKHtcbiAgICAgICAgICAgIHN0YXJ0UGFuTG5nTGF0OiAodGhpcyBhcyBhbnkpLl91bnByb2plY3QocG9zKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRQYW5MbmdMYXQgPSBzdG9yZWRTdGFydCB8fCAodGhpcyBhcyBhbnkpLl91bnByb2plY3Qoc3RhcnRQb3MpO1xuICAgICAgICBpZiAoIXN0YXJ0UGFuTG5nTGF0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbmNlIHRoZSBjdXJzb3IgbGVhdmVzIHRoZSBnbG9iZSBzaWxob3VldHRlIG1pZC1kcmFnLCBmcmVlemUgdGhlIHZpZXcuXG4gICAgICAgIC8vIHZpZXdwb3J0LnVucHJvamVjdCgpIHNuYXBzIG9mZi1nbG9iZSBwaXhlbHMgdG8gdGhlIG5lYXJlc3QgbGltYiBwb2ludFxuICAgICAgICAvLyAodmlhIE1hdGgubWF4KDAsIOKApikgaW4gaXRzIHJheeKAk3NwaGVyZSBkaXNjcmltaW5hbnQpLCBzbyB3aXRob3V0IHRoaXNcbiAgICAgICAgLy8gZ3VhcmQgdGhlIGdsb2JlIHdvdWxkIGtlZXAgcm90YXRpbmcgdG93YXJkIHRoZSBlZGdlIGFzIHRoZSBjdXJzb3IgbW92ZXNcbiAgICAgICAgLy8gZnVydGhlciBvdXRzaWRlLlxuICAgICAgICBpZiAoIWlzUGl4ZWxPbkdsb2JlKHZpZXdwb3J0LCBwb3MpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcm9tUG9zaXRpb24gPSB2aWV3cG9ydC51bnByb2plY3QocG9zKTtcblxuICAgICAgICBjb25zdCBsb25naXR1ZGUgPSBzdGFydFBhbkxuZ0xhdFswXSAtIGZyb21Qb3NpdGlvblswXSArIHByb3BzLmxvbmdpdHVkZTtcbiAgICAgICAgbGV0IGxhdGl0dWRlID0gc3RhcnRQYW5MbmdMYXRbMV0gLSBmcm9tUG9zaXRpb25bMV0gKyBwcm9wcy5sYXRpdHVkZTtcbiAgICAgICAgbGF0aXR1ZGUgPSBjbGFtcChsYXRpdHVkZSwgLUdMT0JFX01BWF9MQVRJVFVERSwgR0xPQkVfTUFYX0xBVElUVURFKTtcblxuICAgICAgICAvLyBkZWNrLmdsIDkncyBHbG9iZVZpZXdwb3J0IHNjYWxlID0gMl4oem9vbSAtIHpvb21BZGp1c3QobGF0aXR1ZGUpKSwgc28gYVxuICAgICAgICAvLyBjb25zdGFudCB6b29tIHdvdWxkIG1ha2UgdGhlIGdsb2JlIGdyb3cgb24gc2NyZWVuIGFzIHRoZSBjZW50ZXIgbW92ZXNcbiAgICAgICAgLy8gdG93YXJkIHRoZSBwb2xlcy4gUmUtY291cGxlIHpvb20gdG8gdGhlIG5ldyBsYXRpdHVkZSAoYXMgZGVjay5nbCA5J3Mgb3duXG4gICAgICAgIC8vIHBhbiBkb2VzKSB0byBrZWVwIHRoZSBvbi1zY3JlZW4gc2NhbGUg4oCUIGFuZCB0aHVzIHRpbGUgTE9EIOKAlCBjb25zdGFudC5cbiAgICAgICAgY29uc3QgdmlzdWFsWm9vbSA9IHByb3BzLnpvb20gLSB6b29tQWRqdXN0KHByb3BzLmxhdGl0dWRlKTtcbiAgICAgICAgY29uc3Qgem9vbSA9IHZpc3VhbFpvb20gKyB6b29tQWRqdXN0KGxhdGl0dWRlKTtcblxuICAgICAgICByZXR1cm4gKHRoaXMgYXMgYW55KS5fZ2V0VXBkYXRlZFN0YXRlKHtsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tfSk7XG4gICAgICB9XG5cbiAgICAgIHBhbkVuZCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzIGFzIGFueSkuX2dldFVwZGF0ZWRTdGF0ZSh7c3RhcnRQYW5MbmdMYXQ6IG51bGx9KTtcbiAgICAgIH1cbiAgICB9IGFzIGFueTtcbiAgfVxufVxuXG4vKipcbiAqIEN1c3RvbSBHbG9iZVZpZXcgdGhhdCB1c2VzIHpvb20tdG8tY3Vyc29yIGNvbnRyb2xsZXIgYmVoYXZpb3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBLZXBsZXJHbG9iZVZpZXcgZXh0ZW5kcyBEZWNrR2xvYmVWaWV3IHtcbiAgLy8gRm9yd2FyZCBjb25zdHJ1Y3RvciBwcm9wcyB0byBkZWNrLmdsJ3MgR2xvYmVWaWV3LiBEZWNsYXJlZCBleHBsaWNpdGx5IGJlY2F1c2VcbiAgLy8gdGhlIGJhc2UgY2xhc3MgaXMgbG9vc2VseSB0eXBlZCAoc2VlIERlY2tHbG9iZVZpZXcgYWJvdmUpLCB3aGljaCB3b3VsZFxuICAvLyBvdGhlcndpc2Ugc3VyZmFjZSBhIHBhcmFtZXRlcmxlc3MgY29uc3RydWN0b3IgdG8gY2FsbGVycy5cbiAgY29uc3RydWN0b3IocHJvcHM/OiBhbnkpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBnZXQgQ29udHJvbGxlclR5cGUoKSB7XG4gICAgcmV0dXJuIFpvb21Ub0N1cnNvckdsb2JlQ29udHJvbGxlcjtcbiAgfVxuXG4gIC8vIGRlY2suZ2wgOSdzIEdsb2JlVmlldy5nZXRWaWV3cG9ydFR5cGUoKSBzd2FwcyB0aGUgdmlld3BvcnQgY2xhc3MgYmFzZWQgb24gem9vbTpcbiAgLy8gICBgcmV0dXJuIHZpZXdTdGF0ZS56b29tID4gMTIgPyBXZWJNZXJjYXRvclZpZXdwb3J0IDogR2xvYmVWaWV3cG9ydDtgXG4gIC8vIENyb3NzaW5nIHpvb20gMTIgdGhlcmVmb3JlIHJlY29tcHV0ZXMgdGlsZSBib3VuZHMgd2l0aCBjb21wbGV0ZWx5IGRpZmZlcmVudFxuICAvLyBwcm9qZWN0aW9uIG1hdGggKGdsb2JlIHZzIGZsYXQgbWVyY2F0b3IpLiBUaGF0IG1ha2VzIGRlY2sncyBUaWxlTGF5ZXIvTVZUTGF5ZXJcbiAgLy8gcmVzZWxlY3QgdGlsZXMgaW5jb25zaXN0ZW50bHkgYWNyb3NzIHRoZSBib3VuZGFyeSDigJQgbWl4ZWQgTE9EcyAoZS5nLiBhIHo0IHRpbGVcbiAgLy8gbmV4dCB0byB6MTEpLCBhIHZpc2libGUgXCJmbGlja2VyXCIgYXQgMTIsIGFuZCB0aWxlcyB0aGF0IGdldCBkcm9wcGVkIGFuZCBzdGlja1xuICAvLyBhcyBibGFjay9lbXB0eSBxdWFkcyAobW9zdCBvZnRlbiBjcm9zc2luZyAxMiBvbiB0aGUgd2F5ICpvdXQqKS5cbiAgLy9cbiAgLy8gRm9yY2UgR2xvYmVWaWV3cG9ydCBhdCBldmVyeSB6b29tIHRvIGVsaW1pbmF0ZSB0aGUgej0xMiB2aWV3cG9ydCBzd2FwIHNvIHRpbGVcbiAgLy8gc2VsZWN0aW9uIHN0YXlzIGNvbnNpc3RlbnQuIFRoZSB0cmFkZS1vZmYgaXMgdGhhdCB6b29tID4gMTIgbm93IHVzZXMgZmxvYXQzMlxuICAvLyBnbG9iZSBwcmVjaXNpb24gKGRlY2sncyBkb2N1bWVudGVkIFwibm8gaGlnaC1wcmVjaXNpb24gcmVuZGVyaW5nID4gMTJcIiBsaW1pdClcbiAgLy8gaW5zdGVhZCBvZiBzd2l0Y2hpbmcgdG8gbWVyY2F0b3Ig4oCUIGZhciBwcmVmZXJhYmxlIHRvIHRoZSBibGFjayBxdWFkcy5cbiAgZ2V0Vmlld3BvcnRUeXBlKCkge1xuICAgIHJldHVybiBEZWNrR2xvYmVWaWV3cG9ydDtcbiAgfVxufVxuXG5LZXBsZXJHbG9iZVZpZXcuZGlzcGxheU5hbWUgPSAnS2VwbGVyR2xvYmVWaWV3JztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLFFBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLG9CQUFBLEdBQUFILE9BQUE7QUFBNkQsU0FBQUQsd0JBQUFLLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFQLHVCQUFBLFlBQUFBLHdCQUFBSyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsbUJBQUFULENBQUEsaUJBQUFBLENBQUEsZ0JBQUFVLE9BQUEsQ0FBQVYsQ0FBQSwwQkFBQUEsQ0FBQSxTQUFBUSxDQUFBLE1BQUFGLENBQUEsR0FBQUwsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsUUFBQUcsQ0FBQSxD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RSxDQUFDa0QsNkJBQWtCLEVBQUVBLDZCQUFrQixDQUFDOztVQUVuRTtVQUNBO1VBQ0E7VUFDQTtVQUNBLElBQU0yQyxVQUFVLEdBQUcvQyxLQUFLLENBQUNLLElBQUksR0FBR3BELFVBQVUsQ0FBQytDLEtBQUssQ0FBQzlDLFFBQVEsQ0FBQztVQUMxRCxJQUFNbUQsSUFBSSxHQUFHMEMsVUFBVSxHQUFHOUYsVUFBVSxDQUFDQyxRQUFRLENBQUM7VUFFOUMsT0FBUSxJQUFJLENBQVMyRSxnQkFBZ0IsQ0FBQztZQUFDTyxTQUFTLEVBQVRBLFNBQVM7WUFBRWxGLFFBQVEsRUFBUkEsUUFBUTtZQUFFbUQsSUFBSSxFQUFKQTtVQUFJLENBQUMsQ0FBQztRQUNwRTtNQUFDO1FBQUFSLEdBQUE7UUFBQUMsS0FBQSxFQUVELFNBQUFrRCxNQUFNQSxDQUFBLEVBQUc7VUFDUCxPQUFRLElBQUksQ0FBU25CLGdCQUFnQixDQUFDO1lBQUNjLGNBQWMsRUFBRTtVQUFJLENBQUMsQ0FBQztRQUMvRDtNQUFDO0lBQUEsRUFqT29EckQsa0JBQWtCLENBa09qRTtJQUFDLE9BQUFQLEtBQUE7RUFDWDtFQUFDLElBQUFZLFVBQUEsYUFBQWIsMkJBQUEsRUFBQWhDLGdCQUFBO0VBQUEsV0FBQThDLGFBQUEsYUFBQWQsMkJBQUE7QUFBQSxFQW5QdUNqQyxlQUFlO0FBc1B6RDtBQUNBO0FBQ0E7QUFGQSxJQUdhb0csZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsMEJBQUFFLGNBQUE7RUFDMUI7RUFDQTtFQUNBO0VBQ0EsU0FBQUYsZ0JBQVlqRCxLQUFXLEVBQUU7SUFBQSxJQUFBaEIsZ0JBQUEsbUJBQUFpRSxlQUFBO0lBQUEsT0FBQTlHLFVBQUEsT0FBQThHLGVBQUEsR0FDakJqRCxLQUFLO0VBQ2I7RUFBQyxJQUFBTCxVQUFBLGFBQUFzRCxlQUFBLEVBQUFFLGNBQUE7RUFBQSxXQUFBdkQsYUFBQSxhQUFBcUQsZUFBQTtJQUFBcEQsR0FBQTtJQUFBckYsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUI7TUFDbkIsT0FBT3NFLDJCQUEyQjtJQUNwQzs7SUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7RUFBQTtJQUFBZSxHQUFBO0lBQUFDLEtBQUEsRUFDQSxTQUFBc0QsZUFBZUEsQ0FBQSxFQUFHO01BQ2hCLE9BQU9yRyxpQkFBaUI7SUFDMUI7RUFBQztBQUFBLEVBMUJrQ0osYUFBYTtBQTZCbERzRyxlQUFlLENBQUNJLFdBQVcsR0FBRyxpQkFBaUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/dist/raster/images.d.ts
CHANGED
|
@@ -12,5 +12,14 @@ type LoadImagesOptions = {
|
|
|
12
12
|
imagesData: ImageInput;
|
|
13
13
|
oldImagesData: ImageInput;
|
|
14
14
|
};
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Load image items to webgl context
|
|
17
|
+
*/
|
|
18
|
+
type LoadImagesResult = {
|
|
19
|
+
/** Updated images state, or null if nothing changed */
|
|
20
|
+
images: ImageState | null;
|
|
21
|
+
/** True when at least one texture upload failed and should be retried */
|
|
22
|
+
hasPendingUploads: boolean;
|
|
23
|
+
};
|
|
24
|
+
export declare function loadImages({ gl, device, images, imagesData, oldImagesData }: LoadImagesOptions): LoadImagesResult;
|
|
16
25
|
export {};
|
package/dist/raster/images.js
CHANGED
|
@@ -67,6 +67,10 @@ function loadImageItem(gl, device, imageItem) {
|
|
|
67
67
|
return result;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Load image items to webgl context
|
|
72
|
+
*/
|
|
73
|
+
|
|
70
74
|
// eslint-disable-next-line complexity
|
|
71
75
|
function loadImages(_ref) {
|
|
72
76
|
var gl = _ref.gl,
|
|
@@ -75,6 +79,7 @@ function loadImages(_ref) {
|
|
|
75
79
|
imagesData = _ref.imagesData,
|
|
76
80
|
oldImagesData = _ref.oldImagesData;
|
|
77
81
|
var imagesDirty = false;
|
|
82
|
+
var hasPendingUploads = false;
|
|
78
83
|
if (oldImagesData) {
|
|
79
84
|
for (var key in oldImagesData) {
|
|
80
85
|
if (imagesData && !(key in imagesData) && key in images) {
|
|
@@ -102,13 +107,20 @@ function loadImages(_ref) {
|
|
|
102
107
|
var loadedItem = loadImageItem(gl, device, imageData);
|
|
103
108
|
if (loadedItem) {
|
|
104
109
|
images[_key2] = loadedItem;
|
|
110
|
+
// Only mark dirty when the texture was actually uploaded.
|
|
111
|
+
imagesDirty = true;
|
|
112
|
+
} else {
|
|
113
|
+
// Upload failed (device not ready or createTexture threw). Signal that
|
|
114
|
+
// the caller should retry next frame — do NOT set imagesDirty so we
|
|
115
|
+
// don't propagate an images object with a missing key that causes
|
|
116
|
+
// draw() to bail permanently.
|
|
117
|
+
hasPendingUploads = true;
|
|
105
118
|
}
|
|
106
|
-
imagesDirty = true;
|
|
107
|
-
}
|
|
108
|
-
if (imagesDirty) {
|
|
109
|
-
return images;
|
|
110
119
|
}
|
|
111
|
-
return
|
|
120
|
+
return {
|
|
121
|
+
images: imagesDirty ? images : null,
|
|
122
|
+
hasPendingUploads: hasPendingUploads
|
|
123
|
+
};
|
|
112
124
|
}
|
|
113
125
|
|
|
114
126
|
/**
|
|
@@ -256,4 +268,4 @@ function loadTexture(gl, device, imageData) {
|
|
|
256
268
|
return null;
|
|
257
269
|
}
|
|
258
270
|
}
|
|
259
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9pc0VxdWFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb25zdGFudHMyIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiREVGQVVMVF9TQU1QTEVSX1BBUkFNRVRFUlMiLCJtaW5GaWx0ZXIiLCJGSUxURVJfTU9ERSIsIk5FQVJFU1QiLCJtYWdGaWx0ZXIiLCJhZGRyZXNzTW9kZVUiLCJBRERSRVNTX01PREUiLCJDTEFNUF9UT19FREdFIiwiYWRkcmVzc01vZGVWIiwibG9hZEltYWdlSXRlbSIsImdsIiwiZGV2aWNlIiwiaW1hZ2VJdGVtIiwicmVzdWx0IiwiZGlydHlSZXN1bHQiLCJtYXAiLCJ4IiwibG9hZFRleHR1cmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInRleHR1cmUiLCJlcnIiLCJsb2FkSW1hZ2VzIiwiX3JlZiIsImltYWdlcyIsImltYWdlc0RhdGEiLCJvbGRJbWFnZXNEYXRhIiwiaW1hZ2VzRGlydHkiLCJrZXkiLCJjaGFuZ2VkS2V5cyIsImlzRXF1YWwiLCJfaSIsIl9jaGFuZ2VkS2V5cyIsImltYWdlRGF0YSIsImxvYWRlZEl0ZW0iLCJtYXBTYW1wbGVyUGFyYW1ldGVycyIsIm9sZFBhcmFtcyIsIm1hZ0ZpbHRlck1hcCIsIkdMIiwiTElORUFSIiwibWluRmlsdGVyTWFwIiwiTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCIsIm1pcG1hcEZpbHRlciIsIk5FQVJFU1RfTUlQTUFQX0xJTkVBUiIsIkxJTkVBUl9NSVBNQVBfTkVBUkVTVCIsIkxJTkVBUl9NSVBNQVBfTElORUFSIiwid3JhcE1hcCIsIlJFUEVBVCIsIk1JUlJPUkVEX1JFUEVBVCIsIk1JUlJPUl9SRVBFQVQiLCJURVhUVVJFX01JTl9GSUxURVIiLCJ1bmRlZmluZWQiLCJtYXBwZWQiLCJURVhUVVJFX01BR19GSUxURVIiLCJURVhUVVJFX1dSQVBfUyIsIlRFWFRVUkVfV1JBUF9UIiwibWFwVGV4dHVyZUZvcm1hdCIsImdsRm9ybWF0IiwiX2dsVHlwZSIsIlI4VUkiLCJURVhUVVJFX0ZPUk1BVCIsIlI4X1VJTlQiLCJSMTZVSSIsIlIxNl9VSU5UIiwiUjMyVUkiLCJSMzJfVUlOVCIsIlI4SSIsIlI4X1NJTlQiLCJSMTZJIiwiUjE2X1NJTlQiLCJSMzJJIiwiUjMyX1NJTlQiLCJSMzJGIiwiUjMyX0ZMT0FUIiwiUkdCQSIsIlJHQkE4X1VOT1JNIiwiUkdCIiwiZXhwYW5kUkdCdG9SR0JBIiwiZGF0YSIsIndpZHRoIiwiaGVpZ2h0IiwicGl4ZWxDb3VudCIsInJnYmEiLCJVaW50OEFycmF5IiwiaSIsIl9yYXN0ZXJUZXh0dXJlRGF0YSRpZCIsIl9yYXN0ZXJUZXh0dXJlRGF0YSRpZDIiLCJfZ2wkbHVtYSIsInJhc3RlclRleHR1cmVEYXRhIiwiaGFuZGxlIiwiaWQiLCJzdGFydHNXaXRoIiwicmF3RGF0YSIsImx1bWFEZXZpY2UiLCJsdW1hIiwiX19sdW1hX2RldmljZSIsImNyZWF0ZVRleHR1cmUiLCJjb25zb2xlIiwid2FybiIsIl9yYXdEYXRhJGRhdGEiLCJfcmF3RGF0YSRkYXRhMiIsInNhbXBsZXJQYXJhbXMiLCJwYXJhbWV0ZXJzIiwidGV4dHVyZUZvcm1hdCIsImZvcm1hdCIsInR5cGUiLCJ0ZXh0dXJlUHJvcHMiLCJzYW1wbGVyIiwibWlwbWFwcyIsIkhUTUxJbWFnZUVsZW1lbnQiLCJIVE1MQ2FudmFzRWxlbWVudCIsIkltYWdlQml0bWFwIiwiSW1hZ2VEYXRhIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJVaW50OENsYW1wZWRBcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXIvaW1hZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIEB0cy1pZ25vcmUgR0wgcmVzb2x1dGlvbiBkZXBlbmRzIG9uIG1vZHVsZVJlc29sdXRpb24gc2V0dGluZ1xuaW1wb3J0IHtHTH0gZnJvbSAnQGx1bWEuZ2wvY29uc3RhbnRzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuaW1wb3J0IHtGSUxURVJfTU9ERSwgQUREUkVTU19NT0RFLCBURVhUVVJFX0ZPUk1BVH0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHR5cGUge1RleHR1cmV9IGZyb20gJ0BsdW1hLmdsL2NvcmUnO1xuaW1wb3J0IHR5cGUge0ltYWdlSW5wdXQsIEltYWdlU3RhdGV9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIExlZ2FjeSB0ZXh0dXJlIGNyZWF0aW9uIGRlc2NyaXB0b3IgdXNlZCBieSByYXN0ZXIgc2hhZGVyIG1vZHVsZXMuXG4gKiBDb250YWlucyBDUFUtc2lkZSBkYXRhICsgb2xkIEdMLWVudW0tYmFzZWQgcGFyYW1ldGVycyB0aGF0IGdldFxuICogdHJhbnNsYXRlZCB0byBsdW1hLmdsIDkncyBkZXZpY2UuY3JlYXRlVGV4dHVyZSgpIHByb3BzLlxuICovXG50eXBlIFRleHR1cmVEYXRhU291cmNlID1cbiAgfCBIVE1MSW1hZ2VFbGVtZW50XG4gIHwgSFRNTENhbnZhc0VsZW1lbnRcbiAgfCBJbWFnZUJpdG1hcFxuICB8IEltYWdlRGF0YVxuICB8IEFycmF5QnVmZmVyVmlldztcblxudHlwZSBSYXN0ZXJUZXh0dXJlRGF0YSA9IHtcbiAgaGFuZGxlPzogdW5rbm93bjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRldmljZT86IHVua25vd247XG4gIHdpZHRoPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBudW1iZXI7XG4gIGZvcm1hdD86IG51bWJlcjtcbiAgdHlwZT86IG51bWJlcjtcbiAgcGFyYW1ldGVycz86IFJlY29yZDxudW1iZXIsIG51bWJlcj47XG4gIG1pcG1hcHM/OiBib29sZWFuO1xuICBkYXRhPzogVGV4dHVyZURhdGFTb3VyY2UgJiB7d2lkdGg/OiBudW1iZXI7IGhlaWdodD86IG51bWJlcn07XG59O1xuXG4vKipcbiAqIFRleHR1cmUgc2FtcGxlciBwYXJhbWV0ZXJzIGZvciBsdW1hLmdsIDkgdGV4dHVyZXNcbiAqL1xuY29uc3QgREVGQVVMVF9TQU1QTEVSX1BBUkFNRVRFUlMgPSB7XG4gIG1pbkZpbHRlcjogRklMVEVSX01PREUuTkVBUkVTVCxcbiAgbWFnRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNULFxuICBhZGRyZXNzTW9kZVU6IEFERFJFU1NfTU9ERS5DTEFNUF9UT19FREdFLFxuICBhZGRyZXNzTW9kZVY6IEFERFJFU1NfTU9ERS5DTEFNUF9UT19FREdFXG59O1xuXG4vKiogbHVtYS5nbCBkZXZpY2UgaW50ZXJmYWNlIGZvciB0ZXh0dXJlIGNyZWF0aW9uICovXG5pbnRlcmZhY2UgTHVtYURldmljZSB7XG4gIGNyZWF0ZVRleHR1cmUocHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogVGV4dHVyZTtcbiAgZ2w/OiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O1xufVxuXG50eXBlIExvYWRJbWFnZXNPcHRpb25zID0ge1xuICBnbDogV2ViR0wyUmVuZGVyaW5nQ29udGV4dDtcbiAgZGV2aWNlPzogTHVtYURldmljZTtcbiAgaW1hZ2VzOiBJbWFnZVN0YXRlO1xuICBpbWFnZXNEYXRhOiBJbWFnZUlucHV0O1xuICBvbGRJbWFnZXNEYXRhOiBJbWFnZUlucHV0O1xufTtcblxuLyoqXG4gKiBMb2FkIGltYWdlIGl0ZW1zIHRvIHdlYmdsIGNvbnRleHRcbiAqL1xuZnVuY3Rpb24gbG9hZEltYWdlSXRlbShcbiAgZ2w6IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsXG4gIGRldmljZTogTHVtYURldmljZSB8IHVuZGVmaW5lZCxcbiAgaW1hZ2VJdGVtOiBSYXN0ZXJUZXh0dXJlRGF0YSB8IFRleHR1cmUgfCAoUmFzdGVyVGV4dHVyZURhdGEgfCBUZXh0dXJlKVtdXG4pOiBudWxsIHwgVGV4dHVyZSB8IFRleHR1cmVbXSB7XG4gIGxldCByZXN1bHQ6IG51bGwgfCBUZXh0dXJlIHwgVGV4dHVyZVtdO1xuICBpZiAoQXJyYXkuaXNBcnJheShpbWFnZUl0ZW0pKSB7XG4gICAgY29uc3QgZGlydHlSZXN1bHQgPSBpbWFnZUl0ZW0ubWFwKHggPT4gbG9hZFRleHR1cmUoZ2wsIGRldmljZSwgeCkpO1xuICAgIHJlc3VsdCA9IFtdO1xuICAgIGZvciAoY29uc3QgdGV4dHVyZSBvZiBkaXJ0eVJlc3VsdCkge1xuICAgICAgaWYgKHRleHR1cmUpIHtcbiAgICAgICAgcmVzdWx0LnB1c2godGV4dHVyZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcmVzdWx0Lmxlbmd0aCkge1xuICAgICAgcmVzdWx0ID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gbG9hZFRleHR1cmUoZ2wsIGRldmljZSwgaW1hZ2VJdGVtKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRJbWFnZXMoe1xuICBnbCxcbiAgZGV2aWNlLFxuICBpbWFnZXMsXG4gIGltYWdlc0RhdGEsXG4gIG9sZEltYWdlc0RhdGFcbn06IExvYWRJbWFnZXNPcHRpb25zKTogSW1hZ2VTdGF0ZSB8IG51bGwge1xuICBsZXQgaW1hZ2VzRGlydHkgPSBmYWxzZTtcblxuICBpZiAob2xkSW1hZ2VzRGF0YSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9sZEltYWdlc0RhdGEpIHtcbiAgICAgIGlmIChpbWFnZXNEYXRhICYmICEoa2V5IGluIGltYWdlc0RhdGEpICYmIGtleSBpbiBpbWFnZXMpIHtcbiAgICAgICAgZGVsZXRlIGltYWdlc1trZXldO1xuICAgICAgICBpbWFnZXNEaXJ0eSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hhbmdlZEtleXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3Qga2V5IGluIGltYWdlc0RhdGEpIHtcbiAgICBpZiAoIW9sZEltYWdlc0RhdGEgfHwgKG9sZEltYWdlc0RhdGEgJiYgIShrZXkgaW4gb2xkSW1hZ2VzRGF0YSkpKSB7XG4gICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRXF1YWwoaW1hZ2VzRGF0YVtrZXldLCBvbGRJbWFnZXNEYXRhW2tleV0pKSB7XG4gICAgICBjaGFuZ2VkS2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgY2hhbmdlZEtleXMpIHtcbiAgICBjb25zdCBpbWFnZURhdGEgPSBpbWFnZXNEYXRhW2tleV07XG4gICAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZEl0ZW0gPSBsb2FkSW1hZ2VJdGVtKGdsLCBkZXZpY2UsIGltYWdlRGF0YSk7XG4gICAgaWYgKGxvYWRlZEl0ZW0pIHtcbiAgICAgIGltYWdlc1trZXldID0gbG9hZGVkSXRlbTtcbiAgICB9XG4gICAgaW1hZ2VzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGltYWdlc0RpcnR5KSB7XG4gICAgcmV0dXJuIGltYWdlcztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIE1hcCBvbGQgR0wgdGV4dHVyZSBwYXJhbWV0ZXIgY29uc3RhbnRzIHRvIGx1bWEuZ2wgOSBzYW1wbGVyIHBhcmFtZXRlcnNcbiAqL1xuZnVuY3Rpb24gbWFwU2FtcGxlclBhcmFtZXRlcnMob2xkUGFyYW1zOiBSZWNvcmQ8bnVtYmVyLCBudW1iZXI+KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsuLi5ERUZBVUxUX1NBTVBMRVJfUEFSQU1FVEVSU307XG5cbiAgY29uc3QgbWFnRmlsdGVyTWFwID0ge1xuICAgIFtHTC5ORUFSRVNUXTogRklMVEVSX01PREUuTkVBUkVTVCxcbiAgICBbR0wuTElORUFSXTogRklMVEVSX01PREUuTElORUFSXG4gIH07XG5cbiAgY29uc3QgbWluRmlsdGVyTWFwOiBSZWNvcmQ8bnVtYmVyLCB7bWluRmlsdGVyOiBzdHJpbmc7IG1pcG1hcEZpbHRlcj86IHN0cmluZ30+ID0ge1xuICAgIFtHTC5ORUFSRVNUXToge21pbkZpbHRlcjogRklMVEVSX01PREUuTkVBUkVTVH0sXG4gICAgW0dMLkxJTkVBUl06IHttaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUn0sXG4gICAgW0dMLk5FQVJFU1RfTUlQTUFQX05FQVJFU1RdOiB7XG4gICAgICBtaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLk5FQVJFU1QsXG4gICAgICBtaXBtYXBGaWx0ZXI6IEZJTFRFUl9NT0RFLk5FQVJFU1RcbiAgICB9LFxuICAgIFtHTC5ORUFSRVNUX01JUE1BUF9MSU5FQVJdOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNULCBtaXBtYXBGaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUn0sXG4gICAgW0dMLkxJTkVBUl9NSVBNQVBfTkVBUkVTVF06IHttaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUiwgbWlwbWFwRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNUfSxcbiAgICBbR0wuTElORUFSX01JUE1BUF9MSU5FQVJdOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5MSU5FQVIsIG1pcG1hcEZpbHRlcjogRklMVEVSX01PREUuTElORUFSfVxuICB9O1xuXG4gIGNvbnN0IHdyYXBNYXAgPSB7XG4gICAgW0dMLkNMQU1QX1RPX0VER0VdOiBBRERSRVNTX01PREUuQ0xBTVBfVE9fRURHRSxcbiAgICBbR0wuUkVQRUFUXTogQUREUkVTU19NT0RFLlJFUEVBVCxcbiAgICBbR0wuTUlSUk9SRURfUkVQRUFUXTogQUREUkVTU19NT0RFLk1JUlJPUl9SRVBFQVRcbiAgfTtcblxuICBpZiAob2xkUGFyYW1zKSB7XG4gICAgaWYgKG9sZFBhcmFtc1tHTC5URVhUVVJFX01JTl9GSUxURVJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG1hcHBlZCA9IG1pbkZpbHRlck1hcFtvbGRQYXJhbXNbR0wuVEVYVFVSRV9NSU5fRklMVEVSXV07XG4gICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgIHJlc3VsdC5taW5GaWx0ZXIgPSBtYXBwZWQubWluRmlsdGVyO1xuICAgICAgICBpZiAobWFwcGVkLm1pcG1hcEZpbHRlcikge1xuICAgICAgICAgIHJlc3VsdC5taXBtYXBGaWx0ZXIgPSBtYXBwZWQubWlwbWFwRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbGRQYXJhbXNbR0wuVEVYVFVSRV9NQUdfRklMVEVSXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQubWFnRmlsdGVyID0gbWFnRmlsdGVyTWFwW29sZFBhcmFtc1tHTC5URVhUVVJFX01BR19GSUxURVJdXSB8fCBGSUxURVJfTU9ERS5ORUFSRVNUO1xuICAgIH1cbiAgICBpZiAob2xkUGFyYW1zW0dMLlRFWFRVUkVfV1JBUF9TXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXN1bHQuYWRkcmVzc01vZGVVID0gd3JhcE1hcFtvbGRQYXJhbXNbR0wuVEVYVFVSRV9XUkFQX1NdXSB8fCBBRERSRVNTX01PREUuQ0xBTVBfVE9fRURHRTtcbiAgICB9XG4gICAgaWYgKG9sZFBhcmFtc1tHTC5URVhUVVJFX1dSQVBfVF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0LmFkZHJlc3NNb2RlViA9IHdyYXBNYXBbb2xkUGFyYW1zW0dMLlRFWFRVUkVfV1JBUF9UXV0gfHwgQUREUkVTU19NT0RFLkNMQU1QX1RPX0VER0U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBNYXAgb2xkIEdMIGZvcm1hdC90eXBlIHRvIGx1bWEuZ2wgOSB0ZXh0dXJlIGZvcm1hdCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbWFwVGV4dHVyZUZvcm1hdChnbEZvcm1hdDogbnVtYmVyLCBfZ2xUeXBlPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgc3dpdGNoIChnbEZvcm1hdCkge1xuICAgIGNhc2UgR0wuUjhVSTpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SOF9VSU5UO1xuICAgIGNhc2UgR0wuUjE2VUk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjE2X1VJTlQ7XG4gICAgY2FzZSBHTC5SMzJVSTpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SMzJfVUlOVDtcbiAgICBjYXNlIEdMLlI4STpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SOF9TSU5UO1xuICAgIGNhc2UgR0wuUjE2STpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SMTZfU0lOVDtcbiAgICBjYXNlIEdMLlIzMkk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjMyX1NJTlQ7XG4gICAgY2FzZSBHTC5SMzJGOlxuICAgICAgcmV0dXJuIFRFWFRVUkVfRk9STUFULlIzMl9GTE9BVDtcbiAgICBjYXNlIEdMLlJHQkE6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG4gICAgY2FzZSBHTC5SR0I6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SR0JBOF9VTk9STTtcbiAgfVxufVxuXG4vKipcbiAqIEV4cGFuZCAzLWJ5dGUtcGVyLXBpeGVsIFJHQiBkYXRhIHRvIDQtYnl0ZS1wZXItcGl4ZWwgUkdCQS5cbiAqIE5lZWRlZCBiZWNhdXNlIFdlYkdQVS9sdW1hLmdsIDkgaGFzIG5vIDMtY2hhbm5lbCB0ZXh0dXJlIGZvcm1hdC5cbiAqL1xuZnVuY3Rpb24gZXhwYW5kUkdCdG9SR0JBKFxuICBkYXRhOiBVaW50OEFycmF5IHwgVWludDhDbGFtcGVkQXJyYXksXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyXG4pOiBVaW50OEFycmF5IHtcbiAgY29uc3QgcGl4ZWxDb3VudCA9IHdpZHRoICogaGVpZ2h0O1xuICBjb25zdCByZ2JhID0gbmV3IFVpbnQ4QXJyYXkocGl4ZWxDb3VudCAqIDQpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7IGkrKykge1xuICAgIHJnYmFbaSAqIDRdID0gZGF0YVtpICogM107XG4gICAgcmdiYVtpICogNCArIDFdID0gZGF0YVtpICogMyArIDFdO1xuICAgIHJnYmFbaSAqIDQgKyAyXSA9IGRhdGFbaSAqIDMgKyAyXTtcbiAgICByZ2JhW2kgKiA0ICsgM10gPSAyNTU7XG4gIH1cbiAgcmV0dXJuIHJnYmE7XG59XG5cbi8qKlxuICogQ3JlYXRlIHRleHR1cmUgb2JqZWN0IGZyb20gaW1hZ2UgZGF0YSB1c2luZyBsdW1hLmdsIDkgZGV2aWNlIEFQSS5cbiAqIFJldHVybnMgYSBwcm9wZXIgbHVtYS5nbCBUZXh0dXJlIG9iamVjdCB0aGF0IHdvcmtzIHdpdGggdGhlIGJpbmRpbmcgc3lzdGVtLlxuICovXG5mdW5jdGlvbiBsb2FkVGV4dHVyZShcbiAgZ2w6IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQsXG4gIGRldmljZTogTHVtYURldmljZSB8IHVuZGVmaW5lZCxcbiAgaW1hZ2VEYXRhOiBUZXh0dXJlIHwgUmFzdGVyVGV4dHVyZURhdGFcbik6IFRleHR1cmUgfCBudWxsIHtcbiAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIElmIGFscmVhZHkgYSBsdW1hLmdsIFRleHR1cmUgaW5zdGFuY2UsIHJldHVybiBhcy1pc1xuICBjb25zdCByYXN0ZXJUZXh0dXJlRGF0YSA9IGltYWdlRGF0YSBhcyBSYXN0ZXJUZXh0dXJlRGF0YTtcbiAgaWYgKFxuICAgIHJhc3RlclRleHR1cmVEYXRhLmhhbmRsZSB8fFxuICAgIHJhc3RlclRleHR1cmVEYXRhLmlkPy5zdGFydHNXaXRoPy4oJ2x1bWEnKSB8fFxuICAgIHJhc3RlclRleHR1cmVEYXRhLmRldmljZVxuICApIHtcbiAgICByZXR1cm4gaW1hZ2VEYXRhIGFzIFRleHR1cmU7XG4gIH1cblxuICBjb25zdCByYXdEYXRhID0gaW1hZ2VEYXRhIGFzIFJhc3RlclRleHR1cmVEYXRhO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgbHVtYSBpbnRlcm5hbCBwcm9wZXJ0aWVzIG5vdCBpbiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0IHR5cGVcbiAgY29uc3QgbHVtYURldmljZSA9IGRldmljZSB8fCBnbC5sdW1hPy5kZXZpY2UgfHwgZ2wuX19sdW1hX2RldmljZTtcblxuICBpZiAoIWx1bWFEZXZpY2U/LmNyZWF0ZVRleHR1cmUpIHtcbiAgICBjb25zb2xlLndhcm4oJ1Jhc3RlckxheWVyOiBObyBsdW1hLmdsIGRldmljZSBhdmFpbGFibGUgZm9yIHRleHR1cmUgY3JlYXRpb24nKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc2FtcGxlclBhcmFtcyA9IG1hcFNhbXBsZXJQYXJhbWV0ZXJzKHJhd0RhdGEucGFyYW1ldGVycyB8fCB7fSk7XG4gICAgY29uc3QgdGV4dHVyZUZvcm1hdCA9IHJhd0RhdGEuZm9ybWF0XG4gICAgICA/IG1hcFRleHR1cmVGb3JtYXQocmF3RGF0YS5mb3JtYXQsIHJhd0RhdGEudHlwZSlcbiAgICAgIDogVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG5cbiAgICBjb25zdCB3aWR0aCA9IHJhd0RhdGEud2lkdGggfHwgcmF3RGF0YS5kYXRhPy53aWR0aCB8fCAxO1xuICAgIGNvbnN0IGhlaWdodCA9IHJhd0RhdGEuaGVpZ2h0IHx8IHJhd0RhdGEuZGF0YT8uaGVpZ2h0IHx8IDE7XG5cbiAgICBjb25zdCB0ZXh0dXJlUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBmb3JtYXQ6IHRleHR1cmVGb3JtYXQsXG4gICAgICBzYW1wbGVyOiBzYW1wbGVyUGFyYW1zLFxuICAgICAgLi4uKHJhd0RhdGEubWlwbWFwcyA9PT0gZmFsc2UgPyB7bWlwbWFwczogZmFsc2V9IDoge30pXG4gICAgfTtcblxuICAgIGlmIChyYXdEYXRhLmRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgcmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCB8fFxuICAgICAgICByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCB8fFxuICAgICAgICByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBJbWFnZUJpdG1hcCB8fFxuICAgICAgICByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBJbWFnZURhdGFcbiAgICAgICkge1xuICAgICAgICB0ZXh0dXJlUHJvcHMuZGF0YSA9IHJhd0RhdGEuZGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHJhd0RhdGEuZGF0YSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJhd0RhdGEuZm9ybWF0ID09PSBHTC5SR0IgJiZcbiAgICAgICAgICAocmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSB8fCByYXdEYXRhLmRhdGEgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGV4dHVyZVByb3BzLmRhdGEgPSBleHBhbmRSR0J0b1JHQkEocmF3RGF0YS5kYXRhLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0dXJlUHJvcHMuZGF0YSA9IHJhd0RhdGEuZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsdW1hRGV2aWNlLmNyZWF0ZVRleHR1cmUodGV4dHVyZVByb3BzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignUmFzdGVyTGF5ZXI6IEZhaWxlZCB0byBjcmVhdGUgdGV4dHVyZSB2aWEgZGV2aWNlLmNyZWF0ZVRleHR1cmU6JywgZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFJQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxRQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxXQUFBLEdBQUFILE9BQUE7QUFBK0UsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUos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
|
|
271
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl9pc0VxdWFsIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb25zdGFudHMyIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX24iLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJmIiwiVHlwZUVycm9yIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiREVGQVVMVF9TQU1QTEVSX1BBUkFNRVRFUlMiLCJtaW5GaWx0ZXIiLCJGSUxURVJfTU9ERSIsIk5FQVJFU1QiLCJtYWdGaWx0ZXIiLCJhZGRyZXNzTW9kZVUiLCJBRERSRVNTX01PREUiLCJDTEFNUF9UT19FREdFIiwiYWRkcmVzc01vZGVWIiwibG9hZEltYWdlSXRlbSIsImdsIiwiZGV2aWNlIiwiaW1hZ2VJdGVtIiwicmVzdWx0IiwiZGlydHlSZXN1bHQiLCJtYXAiLCJ4IiwibG9hZFRleHR1cmUiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInRleHR1cmUiLCJlcnIiLCJsb2FkSW1hZ2VzIiwiX3JlZiIsImltYWdlcyIsImltYWdlc0RhdGEiLCJvbGRJbWFnZXNEYXRhIiwiaW1hZ2VzRGlydHkiLCJoYXNQZW5kaW5nVXBsb2FkcyIsImtleSIsImNoYW5nZWRLZXlzIiwiaXNFcXVhbCIsIl9pIiwiX2NoYW5nZWRLZXlzIiwiaW1hZ2VEYXRhIiwibG9hZGVkSXRlbSIsIm1hcFNhbXBsZXJQYXJhbWV0ZXJzIiwib2xkUGFyYW1zIiwibWFnRmlsdGVyTWFwIiwiR0wiLCJMSU5FQVIiLCJtaW5GaWx0ZXJNYXAiLCJORUFSRVNUX01JUE1BUF9ORUFSRVNUIiwibWlwbWFwRmlsdGVyIiwiTkVBUkVTVF9NSVBNQVBfTElORUFSIiwiTElORUFSX01JUE1BUF9ORUFSRVNUIiwiTElORUFSX01JUE1BUF9MSU5FQVIiLCJ3cmFwTWFwIiwiUkVQRUFUIiwiTUlSUk9SRURfUkVQRUFUIiwiTUlSUk9SX1JFUEVBVCIsIlRFWFRVUkVfTUlOX0ZJTFRFUiIsInVuZGVmaW5lZCIsIm1hcHBlZCIsIlRFWFRVUkVfTUFHX0ZJTFRFUiIsIlRFWFRVUkVfV1JBUF9TIiwiVEVYVFVSRV9XUkFQX1QiLCJtYXBUZXh0dXJlRm9ybWF0IiwiZ2xGb3JtYXQiLCJfZ2xUeXBlIiwiUjhVSSIsIlRFWFRVUkVfRk9STUFUIiwiUjhfVUlOVCIsIlIxNlVJIiwiUjE2X1VJTlQiLCJSMzJVSSIsIlIzMl9VSU5UIiwiUjhJIiwiUjhfU0lOVCIsIlIxNkkiLCJSMTZfU0lOVCIsIlIzMkkiLCJSMzJfU0lOVCIsIlIzMkYiLCJSMzJfRkxPQVQiLCJSR0JBIiwiUkdCQThfVU5PUk0iLCJSR0IiLCJleHBhbmRSR0J0b1JHQkEiLCJkYXRhIiwid2lkdGgiLCJoZWlnaHQiLCJwaXhlbENvdW50IiwicmdiYSIsIlVpbnQ4QXJyYXkiLCJpIiwiX3Jhc3RlclRleHR1cmVEYXRhJGlkIiwiX3Jhc3RlclRleHR1cmVEYXRhJGlkMiIsIl9nbCRsdW1hIiwicmFzdGVyVGV4dHVyZURhdGEiLCJoYW5kbGUiLCJpZCIsInN0YXJ0c1dpdGgiLCJyYXdEYXRhIiwibHVtYURldmljZSIsImx1bWEiLCJfX2x1bWFfZGV2aWNlIiwiY3JlYXRlVGV4dHVyZSIsImNvbnNvbGUiLCJ3YXJuIiwiX3Jhd0RhdGEkZGF0YSIsIl9yYXdEYXRhJGRhdGEyIiwic2FtcGxlclBhcmFtcyIsInBhcmFtZXRlcnMiLCJ0ZXh0dXJlRm9ybWF0IiwiZm9ybWF0IiwidHlwZSIsInRleHR1cmVQcm9wcyIsInNhbXBsZXIiLCJtaXBtYXBzIiwiSFRNTEltYWdlRWxlbWVudCIsIkhUTUxDYW52YXNFbGVtZW50IiwiSW1hZ2VCaXRtYXAiLCJJbWFnZURhdGEiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsIlVpbnQ4Q2xhbXBlZEFycmF5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci9pbWFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLy8gQHRzLWlnbm9yZSBHTCByZXNvbHV0aW9uIGRlcGVuZHMgb24gbW9kdWxlUmVzb2x1dGlvbiBzZXR0aW5nXG5pbXBvcnQge0dMfSBmcm9tICdAbHVtYS5nbC9jb25zdGFudHMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuXG5pbXBvcnQge0ZJTFRFUl9NT0RFLCBBRERSRVNTX01PREUsIFRFWFRVUkVfRk9STUFUfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7VGV4dHVyZX0gZnJvbSAnQGx1bWEuZ2wvY29yZSc7XG5pbXBvcnQgdHlwZSB7SW1hZ2VJbnB1dCwgSW1hZ2VTdGF0ZX0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTGVnYWN5IHRleHR1cmUgY3JlYXRpb24gZGVzY3JpcHRvciB1c2VkIGJ5IHJhc3RlciBzaGFkZXIgbW9kdWxlcy5cbiAqIENvbnRhaW5zIENQVS1zaWRlIGRhdGEgKyBvbGQgR0wtZW51bS1iYXNlZCBwYXJhbWV0ZXJzIHRoYXQgZ2V0XG4gKiB0cmFuc2xhdGVkIHRvIGx1bWEuZ2wgOSdzIGRldmljZS5jcmVhdGVUZXh0dXJlKCkgcHJvcHMuXG4gKi9cbnR5cGUgVGV4dHVyZURhdGFTb3VyY2UgPVxuICB8IEhUTUxJbWFnZUVsZW1lbnRcbiAgfCBIVE1MQ2FudmFzRWxlbWVudFxuICB8IEltYWdlQml0bWFwXG4gIHwgSW1hZ2VEYXRhXG4gIHwgQXJyYXlCdWZmZXJWaWV3O1xuXG50eXBlIFJhc3RlclRleHR1cmVEYXRhID0ge1xuICBoYW5kbGU/OiB1bmtub3duO1xuICBpZD86IHN0cmluZztcbiAgZGV2aWNlPzogdW5rbm93bjtcbiAgd2lkdGg/OiBudW1iZXI7XG4gIGhlaWdodD86IG51bWJlcjtcbiAgZm9ybWF0PzogbnVtYmVyO1xuICB0eXBlPzogbnVtYmVyO1xuICBwYXJhbWV0ZXJzPzogUmVjb3JkPG51bWJlciwgbnVtYmVyPjtcbiAgbWlwbWFwcz86IGJvb2xlYW47XG4gIGRhdGE/OiBUZXh0dXJlRGF0YVNvdXJjZSAmIHt3aWR0aD86IG51bWJlcjsgaGVpZ2h0PzogbnVtYmVyfTtcbn07XG5cbi8qKlxuICogVGV4dHVyZSBzYW1wbGVyIHBhcmFtZXRlcnMgZm9yIGx1bWEuZ2wgOSB0ZXh0dXJlc1xuICovXG5jb25zdCBERUZBVUxUX1NBTVBMRVJfUEFSQU1FVEVSUyA9IHtcbiAgbWluRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNULFxuICBtYWdGaWx0ZXI6IEZJTFRFUl9NT0RFLk5FQVJFU1QsXG4gIGFkZHJlc3NNb2RlVTogQUREUkVTU19NT0RFLkNMQU1QX1RPX0VER0UsXG4gIGFkZHJlc3NNb2RlVjogQUREUkVTU19NT0RFLkNMQU1QX1RPX0VER0Vcbn07XG5cbi8qKiBsdW1hLmdsIGRldmljZSBpbnRlcmZhY2UgZm9yIHRleHR1cmUgY3JlYXRpb24gKi9cbmludGVyZmFjZSBMdW1hRGV2aWNlIHtcbiAgY3JlYXRlVGV4dHVyZShwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBUZXh0dXJlO1xuICBnbD86IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ7XG59XG5cbnR5cGUgTG9hZEltYWdlc09wdGlvbnMgPSB7XG4gIGdsOiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0O1xuICBkZXZpY2U/OiBMdW1hRGV2aWNlO1xuICBpbWFnZXM6IEltYWdlU3RhdGU7XG4gIGltYWdlc0RhdGE6IEltYWdlSW5wdXQ7XG4gIG9sZEltYWdlc0RhdGE6IEltYWdlSW5wdXQ7XG59O1xuXG4vKipcbiAqIExvYWQgaW1hZ2UgaXRlbXMgdG8gd2ViZ2wgY29udGV4dFxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2VJdGVtKFxuICBnbDogV2ViR0wyUmVuZGVyaW5nQ29udGV4dCxcbiAgZGV2aWNlOiBMdW1hRGV2aWNlIHwgdW5kZWZpbmVkLFxuICBpbWFnZUl0ZW06IFJhc3RlclRleHR1cmVEYXRhIHwgVGV4dHVyZSB8IChSYXN0ZXJUZXh0dXJlRGF0YSB8IFRleHR1cmUpW11cbik6IG51bGwgfCBUZXh0dXJlIHwgVGV4dHVyZVtdIHtcbiAgbGV0IHJlc3VsdDogbnVsbCB8IFRleHR1cmUgfCBUZXh0dXJlW107XG4gIGlmIChBcnJheS5pc0FycmF5KGltYWdlSXRlbSkpIHtcbiAgICBjb25zdCBkaXJ0eVJlc3VsdCA9IGltYWdlSXRlbS5tYXAoeCA9PiBsb2FkVGV4dHVyZShnbCwgZGV2aWNlLCB4KSk7XG4gICAgcmVzdWx0ID0gW107XG4gICAgZm9yIChjb25zdCB0ZXh0dXJlIG9mIGRpcnR5UmVzdWx0KSB7XG4gICAgICBpZiAodGV4dHVyZSkge1xuICAgICAgICByZXN1bHQucHVzaCh0ZXh0dXJlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFyZXN1bHQubGVuZ3RoKSB7XG4gICAgICByZXN1bHQgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBsb2FkVGV4dHVyZShnbCwgZGV2aWNlLCBpbWFnZUl0ZW0pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogTG9hZCBpbWFnZSBpdGVtcyB0byB3ZWJnbCBjb250ZXh0XG4gKi9cbnR5cGUgTG9hZEltYWdlc1Jlc3VsdCA9IHtcbiAgLyoqIFVwZGF0ZWQgaW1hZ2VzIHN0YXRlLCBvciBudWxsIGlmIG5vdGhpbmcgY2hhbmdlZCAqL1xuICBpbWFnZXM6IEltYWdlU3RhdGUgfCBudWxsO1xuICAvKiogVHJ1ZSB3aGVuIGF0IGxlYXN0IG9uZSB0ZXh0dXJlIHVwbG9hZCBmYWlsZWQgYW5kIHNob3VsZCBiZSByZXRyaWVkICovXG4gIGhhc1BlbmRpbmdVcGxvYWRzOiBib29sZWFuO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmV4cG9ydCBmdW5jdGlvbiBsb2FkSW1hZ2VzKHtcbiAgZ2wsXG4gIGRldmljZSxcbiAgaW1hZ2VzLFxuICBpbWFnZXNEYXRhLFxuICBvbGRJbWFnZXNEYXRhXG59OiBMb2FkSW1hZ2VzT3B0aW9ucyk6IExvYWRJbWFnZXNSZXN1bHQge1xuICBsZXQgaW1hZ2VzRGlydHkgPSBmYWxzZTtcbiAgbGV0IGhhc1BlbmRpbmdVcGxvYWRzID0gZmFsc2U7XG5cbiAgaWYgKG9sZEltYWdlc0RhdGEpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvbGRJbWFnZXNEYXRhKSB7XG4gICAgICBpZiAoaW1hZ2VzRGF0YSAmJiAhKGtleSBpbiBpbWFnZXNEYXRhKSAmJiBrZXkgaW4gaW1hZ2VzKSB7XG4gICAgICAgIGRlbGV0ZSBpbWFnZXNba2V5XTtcbiAgICAgICAgaW1hZ2VzRGlydHkgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoYW5nZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGtleSBpbiBpbWFnZXNEYXRhKSB7XG4gICAgaWYgKCFvbGRJbWFnZXNEYXRhIHx8IChvbGRJbWFnZXNEYXRhICYmICEoa2V5IGluIG9sZEltYWdlc0RhdGEpKSkge1xuICAgICAgY2hhbmdlZEtleXMucHVzaChrZXkpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0VxdWFsKGltYWdlc0RhdGFba2V5XSwgb2xkSW1hZ2VzRGF0YVtrZXldKSkge1xuICAgICAgY2hhbmdlZEtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qga2V5IG9mIGNoYW5nZWRLZXlzKSB7XG4gICAgY29uc3QgaW1hZ2VEYXRhID0gaW1hZ2VzRGF0YVtrZXldO1xuICAgIGlmICghaW1hZ2VEYXRhKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2FkZWRJdGVtID0gbG9hZEltYWdlSXRlbShnbCwgZGV2aWNlLCBpbWFnZURhdGEpO1xuICAgIGlmIChsb2FkZWRJdGVtKSB7XG4gICAgICBpbWFnZXNba2V5XSA9IGxvYWRlZEl0ZW07XG4gICAgICAvLyBPbmx5IG1hcmsgZGlydHkgd2hlbiB0aGUgdGV4dHVyZSB3YXMgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgICBpbWFnZXNEaXJ0eSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwbG9hZCBmYWlsZWQgKGRldmljZSBub3QgcmVhZHkgb3IgY3JlYXRlVGV4dHVyZSB0aHJldykuIFNpZ25hbCB0aGF0XG4gICAgICAvLyB0aGUgY2FsbGVyIHNob3VsZCByZXRyeSBuZXh0IGZyYW1lIOKAlCBkbyBOT1Qgc2V0IGltYWdlc0RpcnR5IHNvIHdlXG4gICAgICAvLyBkb24ndCBwcm9wYWdhdGUgYW4gaW1hZ2VzIG9iamVjdCB3aXRoIGEgbWlzc2luZyBrZXkgdGhhdCBjYXVzZXNcbiAgICAgIC8vIGRyYXcoKSB0byBiYWlsIHBlcm1hbmVudGx5LlxuICAgICAgaGFzUGVuZGluZ1VwbG9hZHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7aW1hZ2VzOiBpbWFnZXNEaXJ0eSA/IGltYWdlcyA6IG51bGwsIGhhc1BlbmRpbmdVcGxvYWRzfTtcbn1cblxuLyoqXG4gKiBNYXAgb2xkIEdMIHRleHR1cmUgcGFyYW1ldGVyIGNvbnN0YW50cyB0byBsdW1hLmdsIDkgc2FtcGxlciBwYXJhbWV0ZXJzXG4gKi9cbmZ1bmN0aW9uIG1hcFNhbXBsZXJQYXJhbWV0ZXJzKG9sZFBhcmFtczogUmVjb3JkPG51bWJlciwgbnVtYmVyPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7Li4uREVGQVVMVF9TQU1QTEVSX1BBUkFNRVRFUlN9O1xuXG4gIGNvbnN0IG1hZ0ZpbHRlck1hcCA9IHtcbiAgICBbR0wuTkVBUkVTVF06IEZJTFRFUl9NT0RFLk5FQVJFU1QsXG4gICAgW0dMLkxJTkVBUl06IEZJTFRFUl9NT0RFLkxJTkVBUlxuICB9O1xuXG4gIGNvbnN0IG1pbkZpbHRlck1hcDogUmVjb3JkPG51bWJlciwge21pbkZpbHRlcjogc3RyaW5nOyBtaXBtYXBGaWx0ZXI/OiBzdHJpbmd9PiA9IHtcbiAgICBbR0wuTkVBUkVTVF06IHttaW5GaWx0ZXI6IEZJTFRFUl9NT0RFLk5FQVJFU1R9LFxuICAgIFtHTC5MSU5FQVJdOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5MSU5FQVJ9LFxuICAgIFtHTC5ORUFSRVNUX01JUE1BUF9ORUFSRVNUXToge1xuICAgICAgbWluRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNULFxuICAgICAgbWlwbWFwRmlsdGVyOiBGSUxURVJfTU9ERS5ORUFSRVNUXG4gICAgfSxcbiAgICBbR0wuTkVBUkVTVF9NSVBNQVBfTElORUFSXToge21pbkZpbHRlcjogRklMVEVSX01PREUuTkVBUkVTVCwgbWlwbWFwRmlsdGVyOiBGSUxURVJfTU9ERS5MSU5FQVJ9LFxuICAgIFtHTC5MSU5FQVJfTUlQTUFQX05FQVJFU1RdOiB7bWluRmlsdGVyOiBGSUxURVJfTU9ERS5MSU5FQVIsIG1pcG1hcEZpbHRlcjogRklMVEVSX01PREUuTkVBUkVTVH0sXG4gICAgW0dMLkxJTkVBUl9NSVBNQVBfTElORUFSXToge21pbkZpbHRlcjogRklMVEVSX01PREUuTElORUFSLCBtaXBtYXBGaWx0ZXI6IEZJTFRFUl9NT0RFLkxJTkVBUn1cbiAgfTtcblxuICBjb25zdCB3cmFwTWFwID0ge1xuICAgIFtHTC5DTEFNUF9UT19FREdFXTogQUREUkVTU19NT0RFLkNMQU1QX1RPX0VER0UsXG4gICAgW0dMLlJFUEVBVF06IEFERFJFU1NfTU9ERS5SRVBFQVQsXG4gICAgW0dMLk1JUlJPUkVEX1JFUEVBVF06IEFERFJFU1NfTU9ERS5NSVJST1JfUkVQRUFUXG4gIH07XG5cbiAgaWYgKG9sZFBhcmFtcykge1xuICAgIGlmIChvbGRQYXJhbXNbR0wuVEVYVFVSRV9NSU5fRklMVEVSXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBtYXBwZWQgPSBtaW5GaWx0ZXJNYXBbb2xkUGFyYW1zW0dMLlRFWFRVUkVfTUlOX0ZJTFRFUl1dO1xuICAgICAgaWYgKG1hcHBlZCkge1xuICAgICAgICByZXN1bHQubWluRmlsdGVyID0gbWFwcGVkLm1pbkZpbHRlcjtcbiAgICAgICAgaWYgKG1hcHBlZC5taXBtYXBGaWx0ZXIpIHtcbiAgICAgICAgICByZXN1bHQubWlwbWFwRmlsdGVyID0gbWFwcGVkLm1pcG1hcEZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob2xkUGFyYW1zW0dMLlRFWFRVUkVfTUFHX0ZJTFRFUl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0Lm1hZ0ZpbHRlciA9IG1hZ0ZpbHRlck1hcFtvbGRQYXJhbXNbR0wuVEVYVFVSRV9NQUdfRklMVEVSXV0gfHwgRklMVEVSX01PREUuTkVBUkVTVDtcbiAgICB9XG4gICAgaWYgKG9sZFBhcmFtc1tHTC5URVhUVVJFX1dSQVBfU10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVzdWx0LmFkZHJlc3NNb2RlVSA9IHdyYXBNYXBbb2xkUGFyYW1zW0dMLlRFWFRVUkVfV1JBUF9TXV0gfHwgQUREUkVTU19NT0RFLkNMQU1QX1RPX0VER0U7XG4gICAgfVxuICAgIGlmIChvbGRQYXJhbXNbR0wuVEVYVFVSRV9XUkFQX1RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdC5hZGRyZXNzTW9kZVYgPSB3cmFwTWFwW29sZFBhcmFtc1tHTC5URVhUVVJFX1dSQVBfVF1dIHx8IEFERFJFU1NfTU9ERS5DTEFNUF9UT19FREdFO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogTWFwIG9sZCBHTCBmb3JtYXQvdHlwZSB0byBsdW1hLmdsIDkgdGV4dHVyZSBmb3JtYXQgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIG1hcFRleHR1cmVGb3JtYXQoZ2xGb3JtYXQ6IG51bWJlciwgX2dsVHlwZT86IG51bWJlcik6IHN0cmluZyB7XG4gIHN3aXRjaCAoZ2xGb3JtYXQpIHtcbiAgICBjYXNlIEdMLlI4VUk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjhfVUlOVDtcbiAgICBjYXNlIEdMLlIxNlVJOlxuICAgICAgcmV0dXJuIFRFWFRVUkVfRk9STUFULlIxNl9VSU5UO1xuICAgIGNhc2UgR0wuUjMyVUk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjMyX1VJTlQ7XG4gICAgY2FzZSBHTC5SOEk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjhfU0lOVDtcbiAgICBjYXNlIEdMLlIxNkk6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUjE2X1NJTlQ7XG4gICAgY2FzZSBHTC5SMzJJOlxuICAgICAgcmV0dXJuIFRFWFRVUkVfRk9STUFULlIzMl9TSU5UO1xuICAgIGNhc2UgR0wuUjMyRjpcbiAgICAgIHJldHVybiBURVhUVVJFX0ZPUk1BVC5SMzJfRkxPQVQ7XG4gICAgY2FzZSBHTC5SR0JBOlxuICAgICAgcmV0dXJuIFRFWFRVUkVfRk9STUFULlJHQkE4X1VOT1JNO1xuICAgIGNhc2UgR0wuUkdCOlxuICAgICAgcmV0dXJuIFRFWFRVUkVfRk9STUFULlJHQkE4X1VOT1JNO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gVEVYVFVSRV9GT1JNQVQuUkdCQThfVU5PUk07XG4gIH1cbn1cblxuLyoqXG4gKiBFeHBhbmQgMy1ieXRlLXBlci1waXhlbCBSR0IgZGF0YSB0byA0LWJ5dGUtcGVyLXBpeGVsIFJHQkEuXG4gKiBOZWVkZWQgYmVjYXVzZSBXZWJHUFUvbHVtYS5nbCA5IGhhcyBubyAzLWNoYW5uZWwgdGV4dHVyZSBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZFJHQnRvUkdCQShcbiAgZGF0YTogVWludDhBcnJheSB8IFVpbnQ4Q2xhbXBlZEFycmF5LFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlclxuKTogVWludDhBcnJheSB7XG4gIGNvbnN0IHBpeGVsQ291bnQgPSB3aWR0aCAqIGhlaWdodDtcbiAgY29uc3QgcmdiYSA9IG5ldyBVaW50OEFycmF5KHBpeGVsQ291bnQgKiA0KTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBwaXhlbENvdW50OyBpKyspIHtcbiAgICByZ2JhW2kgKiA0XSA9IGRhdGFbaSAqIDNdO1xuICAgIHJnYmFbaSAqIDQgKyAxXSA9IGRhdGFbaSAqIDMgKyAxXTtcbiAgICByZ2JhW2kgKiA0ICsgMl0gPSBkYXRhW2kgKiAzICsgMl07XG4gICAgcmdiYVtpICogNCArIDNdID0gMjU1O1xuICB9XG4gIHJldHVybiByZ2JhO1xufVxuXG4vKipcbiAqIENyZWF0ZSB0ZXh0dXJlIG9iamVjdCBmcm9tIGltYWdlIGRhdGEgdXNpbmcgbHVtYS5nbCA5IGRldmljZSBBUEkuXG4gKiBSZXR1cm5zIGEgcHJvcGVyIGx1bWEuZ2wgVGV4dHVyZSBvYmplY3QgdGhhdCB3b3JrcyB3aXRoIHRoZSBiaW5kaW5nIHN5c3RlbS5cbiAqL1xuZnVuY3Rpb24gbG9hZFRleHR1cmUoXG4gIGdsOiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LFxuICBkZXZpY2U6IEx1bWFEZXZpY2UgfCB1bmRlZmluZWQsXG4gIGltYWdlRGF0YTogVGV4dHVyZSB8IFJhc3RlclRleHR1cmVEYXRhXG4pOiBUZXh0dXJlIHwgbnVsbCB7XG4gIGlmICghaW1hZ2VEYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBJZiBhbHJlYWR5IGEgbHVtYS5nbCBUZXh0dXJlIGluc3RhbmNlLCByZXR1cm4gYXMtaXNcbiAgY29uc3QgcmFzdGVyVGV4dHVyZURhdGEgPSBpbWFnZURhdGEgYXMgUmFzdGVyVGV4dHVyZURhdGE7XG4gIGlmIChcbiAgICByYXN0ZXJUZXh0dXJlRGF0YS5oYW5kbGUgfHxcbiAgICByYXN0ZXJUZXh0dXJlRGF0YS5pZD8uc3RhcnRzV2l0aD8uKCdsdW1hJykgfHxcbiAgICByYXN0ZXJUZXh0dXJlRGF0YS5kZXZpY2VcbiAgKSB7XG4gICAgcmV0dXJuIGltYWdlRGF0YSBhcyBUZXh0dXJlO1xuICB9XG5cbiAgY29uc3QgcmF3RGF0YSA9IGltYWdlRGF0YSBhcyBSYXN0ZXJUZXh0dXJlRGF0YTtcblxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGx1bWEgaW50ZXJuYWwgcHJvcGVydGllcyBub3QgaW4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dCB0eXBlXG4gIGNvbnN0IGx1bWFEZXZpY2UgPSBkZXZpY2UgfHwgZ2wubHVtYT8uZGV2aWNlIHx8IGdsLl9fbHVtYV9kZXZpY2U7XG5cbiAgaWYgKCFsdW1hRGV2aWNlPy5jcmVhdGVUZXh0dXJlKSB7XG4gICAgY29uc29sZS53YXJuKCdSYXN0ZXJMYXllcjogTm8gbHVtYS5nbCBkZXZpY2UgYXZhaWxhYmxlIGZvciB0ZXh0dXJlIGNyZWF0aW9uJyk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNhbXBsZXJQYXJhbXMgPSBtYXBTYW1wbGVyUGFyYW1ldGVycyhyYXdEYXRhLnBhcmFtZXRlcnMgfHwge30pO1xuICAgIGNvbnN0IHRleHR1cmVGb3JtYXQgPSByYXdEYXRhLmZvcm1hdFxuICAgICAgPyBtYXBUZXh0dXJlRm9ybWF0KHJhd0RhdGEuZm9ybWF0LCByYXdEYXRhLnR5cGUpXG4gICAgICA6IFRFWFRVUkVfRk9STUFULlJHQkE4X1VOT1JNO1xuXG4gICAgY29uc3Qgd2lkdGggPSByYXdEYXRhLndpZHRoIHx8IHJhd0RhdGEuZGF0YT8ud2lkdGggfHwgMTtcbiAgICBjb25zdCBoZWlnaHQgPSByYXdEYXRhLmhlaWdodCB8fCByYXdEYXRhLmRhdGE/LmhlaWdodCB8fCAxO1xuXG4gICAgY29uc3QgdGV4dHVyZVByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgZm9ybWF0OiB0ZXh0dXJlRm9ybWF0LFxuICAgICAgc2FtcGxlcjogc2FtcGxlclBhcmFtcyxcbiAgICAgIC4uLihyYXdEYXRhLm1pcG1hcHMgPT09IGZhbHNlID8ge21pcG1hcHM6IGZhbHNlfSA6IHt9KVxuICAgIH07XG5cbiAgICBpZiAocmF3RGF0YS5kYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHJhd0RhdGEuZGF0YSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgfHxcbiAgICAgICAgcmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgfHxcbiAgICAgICAgcmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgSW1hZ2VCaXRtYXAgfHxcbiAgICAgICAgcmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhXG4gICAgICApIHtcbiAgICAgICAgdGV4dHVyZVByb3BzLmRhdGEgPSByYXdEYXRhLmRhdGE7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhyYXdEYXRhLmRhdGEpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICByYXdEYXRhLmZvcm1hdCA9PT0gR0wuUkdCICYmXG4gICAgICAgICAgKHJhd0RhdGEuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgcmF3RGF0YS5kYXRhIGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRleHR1cmVQcm9wcy5kYXRhID0gZXhwYW5kUkdCdG9SR0JBKHJhd0RhdGEuZGF0YSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dHVyZVByb3BzLmRhdGEgPSByYXdEYXRhLmRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbHVtYURldmljZS5jcmVhdGVUZXh0dXJlKHRleHR1cmVQcm9wcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oJ1Jhc3RlckxheWVyOiBGYWlsZWQgdG8gY3JlYXRlIHRleHR1cmUgdmlhIGRldmljZS5jcmVhdGVUZXh0dXJlOicsIGUpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBSUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsUUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQStFLFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFBYSxPQUFBLFdBQUFkLENBQUEsUUFBQWUsZ0JBQUEsYUFBQWhCLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLENBQUFELENBQUEsU0FBQUUsTUFBQSxDQUFBYyx5QkFBQSxHQUFBZCxNQUFBLENBQUFlLGdCQUFBLENBQUFsQixDQUFBLEVBQUFHLE1BQUEsQ0FBQWMseUJBQUEsQ0FBQWYsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBZ0IsY0FBQSxDQUFBbkIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBO0FBQUEsU0FBQW9CLDJCQUFBbkIsQ0FBQSxFQUFBRCxDQUFBLFFBQUFFLENBQUEseUJBQUFtQixNQUFBLElBQUFwQixDQUFBLENBQUFvQixNQUFBLENBQUFDLFFBQUEsS0FBQXJCLENBQUEscUJBQUFDLENBQUEsUUFBQXFCLEtBQUEsQ0FBQUMsT0FBQSxDQUFBdkIsQ0FBQSxNQUFBQyxDQUFBLEdBQUF1QiwyQkFBQSxDQUFBeEIsQ0FBQSxNQUFBRCxDQUFBLElBQUFDLENBQUEsdUJBQUFBLENBQUEsQ0FBQWEsTUFBQSxJQUFBWixDQUFBLEtBQUFELENBQUEsR0FBQUMsQ0FBQSxPQUFBd0IsRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUF6QixDQUFBLENBQUFhLE1BQUEsS0FBQWdCLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUE5QixDQUFBLENBQUF5QixFQUFBLFVBQUExQixDQUFBLFdBQUFBLEVBQUFDLENBQUEsVUFBQUEsQ0FBQSxLQUFBK0IsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBM0IsQ0FBQSxFQUFBNEIsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBUCxDQUFBLFdBQUFBLEVBQUEsSUFBQTFCLENBQUEsR0FBQUEsQ0FBQSxDQUFBa0MsSUFBQSxDQUFBbkMsQ0FBQSxNQUFBNEIsQ0FBQSxXQUFBQSxFQUFBLFFBQUE1QixDQUFBLEdBQUFDLENBQUEsQ0FBQW1DLElBQUEsV0FBQUgsQ0FBQSxHQUFBakMsQ0FBQSxDQUFBNkIsSUFBQSxFQUFBN0IsQ0FBQSxLQUFBRCxDQUFBLFdBQUFBLEVBQUFDLENBQUEsSUFBQWtDLENBQUEsT0FBQTdCLENBQUEsR0FBQUwsQ0FBQSxLQUFBK0IsQ0FBQSxXQUFBQSxFQUFBLFVBQUFFLENBQUEsWUFBQWhDLENBQUEsY0FBQUEsQ0FBQSw4QkFBQWlDLENBQUEsUUFBQTdCLENBQUE7QUFBQSxTQUFBbUIsNEJBQUF4QixDQUFBLEVBQUFpQyxDQUFBLFFBQUFqQyxDQUFBLDJCQUFBQSxDQUFBLFNBQUFxQyxpQkFBQSxDQUFBckMsQ0FBQSxFQUFBaUMsQ0FBQSxPQUFBaEMsQ0FBQSxNQUFBcUMsUUFBQSxDQUFBSCxJQUFBLENBQUFuQyxDQUFBLEVBQUF1QyxLQUFBLDZCQUFBdEMsQ0FBQSxJQUFBRCxDQUFBLENBQUF3QyxXQUFBLEtBQUF2QyxDQUFBLEdBQUFELENBQUEsQ0FBQXdDLFdBQUEsQ0FBQUMsSUFBQSxhQUFBeEMsQ0FBQSxjQUFBQSxDQUFBLEdBQUFxQixLQUFBLENBQUFvQixJQUFBLENBQUExQyxDQUFBLG9CQUFBQyxDQUFBLCtDQUFBMEMsSUFBQSxDQUFBMUMsQ0FBQSxJQUFBb0MsaUJBQUEsQ0FBQXJDLENBQUEsRUFBQWlDLENBQUE7QUFBQSxTQUFBSSxrQkFBQXJDLENBQUEsRUFBQWlDLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUFqQyxDQUFBLENBQUFhLE1BQUEsTUFBQW9CLENBQUEsR0FBQWpDLENBQUEsQ0FBQWEsTUFBQSxZQUFBZCxDQUFBLE1BQUE2QixDQUFBLEdBQUFOLEtBQUEsQ0FBQVcsQ0FBQSxHQUFBbEMsQ0FBQSxHQUFBa0MsQ0FBQSxFQUFBbEMsQ0FBQSxJQUFBNkIsQ0FBQSxDQUFBN0IsQ0FBQSxJQUFBQyxDQUFBLENBQUFELENBQUEsVUFBQTZCLENBQUEsSUFQL0U7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFxQkE7QUFDQTtBQUNBO0FBQ0EsSUFBTWdCLDBCQUEwQixHQUFHO0VBQ2pDQyxTQUFTLEVBQUVDLHVCQUFXLENBQUNDLE9BQU87RUFDOUJDLFNBQVMsRUFBRUYsdUJBQVcsQ0FBQ0MsT0FBTztFQUM5QkUsWUFBWSxFQUFFQyx3QkFBWSxDQUFDQyxhQUFhO0VBQ3hDQyxZQUFZLEVBQUVGLHdCQUFZLENBQUNDO0FBQzdCLENBQUM7O0FBRUQ7O0FBY0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0UsYUFBYUEsQ0FDcEJDLEVBQTBCLEVBQzFCQyxNQUE4QixFQUM5QkMsU0FBd0UsRUFDNUM7RUFDNUIsSUFBSUMsTUFBa0M7RUFDdEMsSUFBSW5DLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUMsU0FBUyxDQUFDLEVBQUU7SUFDNUIsSUFBTUUsV0FBVyxHQUFHRixTQUFTLENBQUNHLEdBQUcsQ0FBQyxVQUFBQyxDQUFDO01BQUEsT0FBSUMsV0FBVyxDQUFDUCxFQUFFLEVBQUVDLE1BQU0sRUFBRUssQ0FBQyxDQUFDO0lBQUEsRUFBQztJQUNsRUgsTUFBTSxHQUFHLEVBQUU7SUFBQyxJQUFBSyxTQUFBLEdBQUEzQywwQkFBQSxDQUNVdUMsV0FBVztNQUFBSyxLQUFBO0lBQUE7TUFBakMsS0FBQUQsU0FBQSxDQUFBbkMsQ0FBQSxNQUFBb0MsS0FBQSxHQUFBRCxTQUFBLENBQUFsQyxDQUFBLElBQUFDLElBQUEsR0FBbUM7UUFBQSxJQUF4Qm1DLE9BQU8sR0FBQUQsS0FBQSxDQUFBakMsS0FBQTtRQUNoQixJQUFJa0MsT0FBTyxFQUFFO1VBQ1hQLE1BQU0sQ0FBQ2hELElBQUksQ0FBQ3VELE9BQU8sQ0FBQztRQUN0QjtNQUNGO0lBQUMsU0FBQUMsR0FBQTtNQUFBSCxTQUFBLENBQUEvRCxDQUFBLENBQUFrRSxHQUFBO0lBQUE7TUFBQUgsU0FBQSxDQUFBL0IsQ0FBQTtJQUFBO0lBQ0QsSUFBSSxDQUFDMEIsTUFBTSxDQUFDNUMsTUFBTSxFQUFFO01BQ2xCNEMsTUFBTSxHQUFHLElBQUk7SUFDZjtFQUNGLENBQUMsTUFBTTtJQUNMQSxNQUFNLEdBQUdJLFdBQVcsQ0FBQ1AsRUFBRSxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsQ0FBQztFQUM3QztFQUNBLE9BQU9DLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBUUE7QUFDTyxTQUFTUyxVQUFVQSxDQUFBQyxJQUFBLEVBTWM7RUFBQSxJQUx0Q2IsRUFBRSxHQUFBYSxJQUFBLENBQUZiLEVBQUU7SUFDRkMsTUFBTSxHQUFBWSxJQUFBLENBQU5aLE1BQU07SUFDTmEsTUFBTSxHQUFBRCxJQUFBLENBQU5DLE1BQU07SUFDTkMsVUFBVSxHQUFBRixJQUFBLENBQVZFLFVBQVU7SUFDVkMsYUFBYSxHQUFBSCxJQUFBLENBQWJHLGFBQWE7RUFFYixJQUFJQyxXQUFXLEdBQUcsS0FBSztFQUN2QixJQUFJQyxpQkFBaUIsR0FBRyxLQUFLO0VBRTdCLElBQUlGLGFBQWEsRUFBRTtJQUNqQixLQUFLLElBQU1HLEdBQUcsSUFBSUgsYUFBYSxFQUFFO01BQy9CLElBQUlELFVBQVUsSUFBSSxFQUFFSSxHQUFHLElBQUlKLFVBQVUsQ0FBQyxJQUFJSSxHQUFHLElBQUlMLE1BQU0sRUFBRTtRQUN2RCxPQUFPQSxNQUFNLENBQUNLLEdBQUcsQ0FBQztRQUNsQkYsV0FBVyxHQUFHLElBQUk7TUFDcEI7SUFDRjtFQUNGO0VBRUEsSUFBTUcsV0FBcUIsR0FBRyxFQUFFO0VBQ2hDLEtBQUssSUFBTUQsSUFBRyxJQUFJSixVQUFVLEVBQUU7SUFDNUIsSUFBSSxDQUFDQyxhQUFhLElBQUtBLGFBQWEsSUFBSSxFQUFFRyxJQUFHLElBQUlILGFBQWEsQ0FBRSxFQUFFO01BQ2hFSSxXQUFXLENBQUNqRSxJQUFJLENBQUNnRSxJQUFHLENBQUM7TUFDckI7SUFDRjtJQUVBLElBQUksQ0FBQyxJQUFBRSxtQkFBTyxFQUFDTixVQUFVLENBQUNJLElBQUcsQ0FBQyxFQUFFSCxhQUFhLENBQUNHLElBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDakRDLFdBQVcsQ0FBQ2pFLElBQUksQ0FBQ2dFLElBQUcsQ0FBQztJQUN2QjtFQUNGO0VBRUEsU0FBQUcsRUFBQSxNQUFBQyxZQUFBLEdBQWtCSCxXQUFXLEVBQUFFLEVBQUEsR0FBQUMsWUFBQSxDQUFBaEUsTUFBQSxFQUFBK0QsRUFBQSxJQUFFO0lBQTFCLElBQU1ILEtBQUcsR0FBQUksWUFBQSxDQUFBRCxFQUFBO0lBQ1osSUFBTUUsU0FBUyxHQUFHVCxVQUFVLENBQUNJLEtBQUcsQ0FBQztJQUNqQyxJQUFJLENBQUNLLFNBQVMsRUFBRTtNQUNkO0lBQ0Y7SUFFQSxJQUFNQyxVQUFVLEdBQUcxQixhQUFhLENBQUNDLEVBQUUsRUFBRUMsTUFBTSxFQUFFdUIsU0FBUyxDQUFDO0lBQ3ZELElBQUlDLFVBQVUsRUFBRTtNQUNkWCxNQUFNLENBQUNLLEtBQUcsQ0FBQyxHQUFHTSxVQUFVO01BQ3hCO01BQ0FSLFdBQVcsR0FBRyxJQUFJO0lBQ3BCLENBQUMsTUFBTTtNQUNMO01BQ0E7TUFDQTtNQUNBO01BQ0FDLGlCQUFpQixHQUFHLElBQUk7SUFDMUI7RUFDRjtFQUVBLE9BQU87SUFBQ0osTUFBTSxFQUFFRyxXQUFXLEdBQUdILE1BQU0sR0FBRyxJQUFJO0lBQUVJLGlCQUFpQixFQUFqQkE7RUFBaUIsQ0FBQztBQUNqRTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTUSxvQkFBb0JBLENBQUNDLFNBQWlDLEVBQTBCO0VBQ3ZGLElBQU14QixNQUE4QixHQUFBOUMsYUFBQSxLQUFPaUMsMEJBQTBCLENBQUM7RUFFdEUsSUFBTXNDLFlBQVksT0FBQW5FLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDZm9FLGFBQUUsQ0FBQ3BDLE9BQU8sRUFBR0QsdUJBQVcsQ0FBQ0MsT0FBTyxHQUNoQ29DLGFBQUUsQ0FBQ0MsTUFBTSxFQUFHdEMsdUJBQVcsQ0FBQ3NDLE1BQU0sQ0FDaEM7RUFFRCxJQUFNQyxZQUF3RSxPQUFBdEUsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFDM0VvRSxhQUFFLENBQUNwQyxPQUFPLEVBQUc7SUFBQ0YsU0FBUyxFQUFFQyx1QkFBVyxDQUFDQztFQUFPLENBQUMsR0FDN0NvQyxhQUFFLENBQUNDLE1BQU0sRUFBRztJQUFDdkMsU0FBUyxFQUFFQyx1QkFBVyxDQUFDc0M7RUFBTSxDQUFDLEdBQzNDRCxhQUFFLENBQUNHLHNCQUFzQixFQUFHO0lBQzNCekMsU0FBUyxFQUFFQyx1QkFBVyxDQUFDQyxPQUFPO0lBQzlCd0MsWUFBWSxFQUFFekMsdUJBQVcsQ0FBQ0M7RUFDNUIsQ0FBQyxHQUNBb0MsYUFBRSxDQUFDSyxxQkFBcUIsRUFBRztJQUFDM0MsU0FBUyxFQUFFQyx1QkFBVyxDQUFDQyxPQUFPO0lBQUV3QyxZQUFZLEVBQUV6Qyx1QkFBVyxDQUFDc0M7RUFBTSxDQUFDLEdBQzdGRCxhQUFFLENBQUNNLHFCQUFxQixFQUFHO0lBQUM1QyxTQUFTLEVBQUVDLHVCQUFXLENBQUNzQyxNQUFNO0lBQUVHLFlBQVksRUFBRXpDLHVCQUFXLENBQUNDO0VBQU8sQ0FBQyxHQUM3Rm9DLGFBQUUsQ0FBQ08sb0JBQW9CLEVBQUc7SUFBQzdDLFNBQVMsRUFBRUMsdUJBQVcsQ0FBQ3NDLE1BQU07SUFBRUcsWUFBWSxFQUFFekMsdUJBQVcsQ0FBQ3NDO0VBQU0sQ0FBQyxDQUM3RjtFQUVELElBQU1PLE9BQU8sT0FBQTVFLGdCQUFBLGlCQUFBQSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQ1ZvRSxhQUFFLENBQUNoQyxhQUFhLEVBQUdELHdCQUFZLENBQUNDLGFBQWEsR0FDN0NnQyxhQUFFLENBQUNTLE1BQU0sRUFBRzFDLHdCQUFZLENBQUMwQyxNQUFNLEdBQy9CVCxhQUFFLENBQUNVLGVBQWUsRUFBRzNDLHdCQUFZLENBQUM0QyxhQUFhLENBQ2pEO0VBRUQsSUFBSWIsU0FBUyxFQUFFO0lBQ2IsSUFBSUEsU0FBUyxDQUFDRSxhQUFFLENBQUNZLGtCQUFrQixDQUFDLEtBQUtDLFNBQVMsRUFBRTtNQUNsRCxJQUFNQyxNQUFNLEdBQUdaLFlBQVksQ0FBQ0osU0FBUyxDQUFDRSxhQUFFLENBQUNZLGtCQUFrQixDQUFDLENBQUM7TUFDN0QsSUFBSUUsTUFBTSxFQUFFO1FBQ1Z4QyxNQUFNLENBQUNaLFNBQVMsR0FBR29ELE1BQU0sQ0FBQ3BELFNBQVM7UUFDbkMsSUFBSW9ELE1BQU0sQ0FBQ1YsWUFBWSxFQUFFO1VBQ3ZCOUIsTUFBTSxDQUFDOEIsWUFBWSxHQUFHVSxNQUFNLENBQUNWLFlBQVk7UUFDM0M7TUFDRjtJQUNGO0lBQ0EsSUFBSU4sU0FBUyxDQUFDRSxhQUFFLENBQUNlLGtCQUFrQixDQUFDLEtBQUtGLFNBQVMsRUFBRTtNQUNsRHZDLE1BQU0sQ0FBQ1QsU0FBUyxHQUFHa0MsWUFBWSxDQUFDRCxTQUFTLENBQUNFLGFBQUUsQ0FBQ2Usa0JBQWtCLENBQUMsQ0FBQyxJQUFJcEQsdUJBQVcsQ0FBQ0MsT0FBTztJQUMxRjtJQUNBLElBQUlrQyxTQUFTLENBQUNFLGFBQUUsQ0FBQ2dCLGNBQWMsQ0FBQyxLQUFLSCxTQUFTLEVBQUU7TUFDOUN2QyxNQUFNLENBQUNSLFlBQVksR0FBRzBDLE9BQU8sQ0FBQ1YsU0FBUyxDQUFDRSxhQUFFLENBQUNnQixjQUFjLENBQUMsQ0FBQyxJQUFJakQsd0JBQVksQ0FBQ0MsYUFBYTtJQUMzRjtJQUNBLElBQUk4QixTQUFTLENBQUNFLGFBQUUsQ0FBQ2lCLGNBQWMsQ0FBQyxLQUFLSixTQUFTLEVBQUU7TUFDOUN2QyxNQUFNLENBQUNMLFlBQVksR0FBR3VDLE9BQU8sQ0FBQ1YsU0FBUyxDQUFDRSxhQUFFLENBQUNpQixjQUFjLENBQUMsQ0FBQyxJQUFJbEQsd0JBQVksQ0FBQ0MsYUFBYTtJQUMzRjtFQUNGO0VBRUEsT0FBT00sTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM0QyxnQkFBZ0JBLENBQUNDLFFBQWdCLEVBQUVDLE9BQWdCLEVBQVU7RUFDcEUsUUFBUUQsUUFBUTtJQUNkLEtBQUtuQixhQUFFLENBQUNxQixJQUFJO01BQ1YsT0FBT0MsMEJBQWMsQ0FBQ0MsT0FBTztJQUMvQixLQUFLdkIsYUFBRSxDQUFDd0IsS0FBSztNQUNYLE9BQU9GLDBCQUFjLENBQUNHLFFBQVE7SUFDaEMsS0FBS3pCLGFBQUUsQ0FBQzBCLEtBQUs7TUFDWCxPQUFPSiwwQkFBYyxDQUFDSyxRQUFRO0lBQ2hDLEtBQUszQixhQUFFLENBQUM0QixHQUFHO01BQ1QsT0FBT04sMEJBQWMsQ0FBQ08sT0FBTztJQUMvQixLQUFLN0IsYUFBRSxDQUFDOEIsSUFBSTtNQUNWLE9BQU9SLDBCQUFjLENBQUNTLFFBQVE7SUFDaEMsS0FBSy9CLGFBQUUsQ0FBQ2dDLElBQUk7TUFDVixPQUFPViwwQkFBYyxDQUFDVyxRQUFRO0lBQ2hDLEtBQUtqQyxhQUFFLENBQUNrQyxJQUFJO01BQ1YsT0FBT1osMEJBQWMsQ0FBQ2EsU0FBUztJQUNqQyxLQUFLbkMsYUFBRSxDQUFDb0MsSUFBSTtNQUNWLE9BQU9kLDBCQUFjLENBQUNlLFdBQVc7SUFDbkMsS0FBS3JDLGFBQUUsQ0FBQ3NDLEdBQUc7TUFDVCxPQUFPaEIsMEJBQWMsQ0FBQ2UsV0FBVztJQUNuQztNQUNFLE9BQU9mLDBCQUFjLENBQUNlLFdBQVc7RUFDckM7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNFLGVBQWVBLENBQ3RCQyxJQUFvQyxFQUNwQ0MsS0FBYSxFQUNiQyxNQUFjLEVBQ0Y7RUFDWixJQUFNQyxVQUFVLEdBQUdGLEtBQUssR0FBR0MsTUFBTTtFQUNqQyxJQUFNRSxJQUFJLEdBQUcsSUFBSUMsVUFBVSxDQUFDRixVQUFVLEdBQUcsQ0FBQyxDQUFDO0VBQzNDLEtBQUssSUFBSUcsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSCxVQUFVLEVBQUVHLENBQUMsRUFBRSxFQUFFO0lBQ25DRixJQUFJLENBQUNFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR04sSUFBSSxDQUFDTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCRixJQUFJLENBQUNFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdOLElBQUksQ0FBQ00sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakNGLElBQUksQ0FBQ0UsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBR04sSUFBSSxDQUFDTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQ0YsSUFBSSxDQUFDRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUc7RUFDdkI7RUFDQSxPQUFPRixJQUFJO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTbEUsV0FBV0EsQ0FDbEJQLEVBQTBCLEVBQzFCQyxNQUE4QixFQUM5QnVCLFNBQXNDLEVBQ3RCO0VBQUEsSUFBQW9ELHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLFFBQUE7RUFDaEIsSUFBSSxDQUFDdEQsU0FBUyxFQUFFO0lBQ2QsT0FBTyxJQUFJO0VBQ2I7O0VBRUE7RUFDQSxJQUFNdUQsaUJBQWlCLEdBQUd2RCxTQUE4QjtFQUN4RCxJQUNFdUQsaUJBQWlCLENBQUNDLE1BQU0sS0FBQUoscUJBQUEsR0FDeEJHLGlCQUFpQixDQUFDRSxFQUFFLGNBQUFMLHFCQUFBLGdCQUFBQyxzQkFBQSxHQUFwQkQscUJBQUEsQ0FBc0JNLFVBQVUsY0FBQUwsc0JBQUEsZUFBaENBLHNCQUFBLENBQUFoRyxJQUFBLENBQUErRixxQkFBQSxFQUFtQyxNQUFNLENBQUMsSUFDMUNHLGlCQUFpQixDQUFDOUUsTUFBTSxFQUN4QjtJQUNBLE9BQU91QixTQUFTO0VBQ2xCO0VBRUEsSUFBTTJELE9BQU8sR0FBRzNELFNBQThCOztFQUU5QztFQUNBLElBQU00RCxVQUFVLEdBQUduRixNQUFNLE1BQUE2RSxRQUFBLEdBQUk5RSxFQUFFLENBQUNxRixJQUFJLGNBQUFQLFFBQUEsdUJBQVBBLFFBQUEsQ0FBUzdFLE1BQU0sS0FBSUQsRUFBRSxDQUFDc0YsYUFBYTtFQUVoRSxJQUFJLEVBQUNGLFVBQVUsYUFBVkEsVUFBVSxlQUFWQSxVQUFVLENBQUVHLGFBQWEsR0FBRTtJQUM5QkMsT0FBTyxDQUFDQyxJQUFJLENBQUMsK0RBQStELENBQUM7SUFDN0UsT0FBTyxJQUFJO0VBQ2I7RUFFQSxJQUFJO0lBQUEsSUFBQUMsYUFBQSxFQUFBQyxjQUFBO0lBQ0YsSUFBTUMsYUFBYSxHQUFHbEUsb0JBQW9CLENBQUN5RCxPQUFPLENBQUNVLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRSxJQUFNQyxhQUFhLEdBQUdYLE9BQU8sQ0FBQ1ksTUFBTSxHQUNoQ2hELGdCQUFnQixDQUFDb0MsT0FBTyxDQUFDWSxNQUFNLEVBQUVaLE9BQU8sQ0FBQ2EsSUFBSSxDQUFDLEdBQzlDN0MsMEJBQWMsQ0FBQ2UsV0FBVztJQUU5QixJQUFNSSxLQUFLLEdBQUdhLE9BQU8sQ0FBQ2IsS0FBSyxNQUFBb0IsYUFBQSxHQUFJUCxPQUFPLENBQUNkLElBQUksY0FBQXFCLGFBQUEsdUJBQVpBLGFBQUEsQ0FBY3BCLEtBQUssS0FBSSxDQUFDO0lBQ3ZELElBQU1DLE1BQU0sR0FBR1ksT0FBTyxDQUFDWixNQUFNLE1BQUFvQixjQUFBLEdBQUlSLE9BQU8sQ0FBQ2QsSUFBSSxjQUFBc0IsY0FBQSx1QkFBWkEsY0FBQSxDQUFjcEIsTUFBTSxLQUFJLENBQUM7SUFFMUQsSUFBTTBCLFlBQXFDLEdBQUE1SSxhQUFBO01BQ3pDaUgsS0FBSyxFQUFMQSxLQUFLO01BQ0xDLE1BQU0sRUFBTkEsTUFBTTtNQUNOd0IsTUFBTSxFQUFFRCxhQUFhO01BQ3JCSSxPQUFPLEVBQUVOO0lBQWEsR0FDbEJULE9BQU8sQ0FBQ2dCLE9BQU8sS0FBSyxLQUFLLEdBQUc7TUFBQ0EsT0FBTyxFQUFFO0lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN0RDtJQUVELElBQUloQixPQUFPLENBQUNkLElBQUksRUFBRTtNQUNoQixJQUNFYyxPQUFPLENBQUNkLElBQUksWUFBWStCLGdCQUFnQixJQUN4Q2pCLE9BQU8sQ0FBQ2QsSUFBSSxZQUFZZ0MsaUJBQWlCLElBQ3pDbEIsT0FBTyxDQUFDZCxJQUFJLFlBQVlpQyxXQUFXLElBQ25DbkIsT0FBTyxDQUFDZCxJQUFJLFlBQVlrQyxTQUFTLEVBQ2pDO1FBQ0FOLFlBQVksQ0FBQzVCLElBQUksR0FBR2MsT0FBTyxDQUFDZCxJQUFJO01BQ2xDLENBQUMsTUFBTSxJQUFJbUMsV0FBVyxDQUFDQyxNQUFNLENBQUN0QixPQUFPLENBQUNkLElBQUksQ0FBQyxFQUFFO1FBQzNDLElBQ0VjLE9BQU8sQ0FBQ1ksTUFBTSxLQUFLbEUsYUFBRSxDQUFDc0MsR0FBRyxLQUN4QmdCLE9BQU8sQ0FBQ2QsSUFBSSxZQUFZSyxVQUFVLElBQUlTLE9BQU8sQ0FBQ2QsSUFBSSxZQUFZcUMsaUJBQWlCLENBQUMsRUFDakY7VUFDQVQsWUFBWSxDQUFDNUIsSUFBSSxHQUFHRCxlQUFlLENBQUNlLE9BQU8sQ0FBQ2QsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE1BQU0sQ0FBQztRQUNsRSxDQUFDLE1BQU07VUFDTDBCLFlBQVksQ0FBQzVCLElBQUksR0FBR2MsT0FBTyxDQUFDZCxJQUFJO1FBQ2xDO01BQ0Y7SUFDRjtJQUVBLE9BQU9lLFVBQVUsQ0FBQ0csYUFBYSxDQUFDVSxZQUFZLENBQUM7RUFDL0MsQ0FBQyxDQUFDLE9BQU94SixDQUFDLEVBQUU7SUFDVitJLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGlFQUFpRSxFQUFFaEosQ0FBQyxDQUFDO0lBQ2xGLE9BQU8sSUFBSTtFQUNiO0FBQ0YiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -6,6 +6,10 @@ export default class RasterLayer extends BitmapLayer<RasterLayerAddedProps> {
|
|
|
6
6
|
images: ImageState;
|
|
7
7
|
};
|
|
8
8
|
_redrawScheduled: boolean;
|
|
9
|
+
_pendingImageRetry: RasterLayerAddedProps['images'] | null;
|
|
10
|
+
/** How many consecutive frames have retried a failed texture upload. */
|
|
11
|
+
_imageRetryCount: number;
|
|
12
|
+
static readonly MAX_IMAGE_RETRY_ATTEMPTS = 3;
|
|
9
13
|
initializeState(): void;
|
|
10
14
|
draw(_opts: {
|
|
11
15
|
shaderModuleProps: Record<string, unknown>;
|