@kepler.gl/deckgl-layers 3.2.6 → 3.3.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/3d-building-layer/3d-building-layer.d.ts +3 -3
  2. package/dist/3d-building-layer/3d-building-layer.js +9 -12
  3. package/dist/3d-building-layer/types.d.ts +8 -8
  4. package/dist/cluster-layer/cluster-layer.d.ts +16 -26
  5. package/dist/cluster-layer/cluster-layer.js +19 -33
  6. package/dist/column-layer/enhanced-column-layer.d.ts +4 -4
  7. package/dist/column-layer/enhanced-column-layer.js +39 -35
  8. package/dist/deckgl-extensions/filter-arrow-layer.d.ts +33 -6
  9. package/dist/deckgl-extensions/filter-arrow-layer.js +4 -12
  10. package/dist/deckgl-extensions/filter-shader-module.d.ts +32 -4
  11. package/dist/deckgl-extensions/filter-shader-module.js +3 -4
  12. package/dist/grid-layer/enhanced-cpu-grid-layer.d.ts +4913 -6
  13. package/dist/grid-layer/enhanced-cpu-grid-layer.js +67 -44
  14. package/dist/hexagon-layer/enhanced-hexagon-layer.d.ts +4910 -4
  15. package/dist/hexagon-layer/enhanced-hexagon-layer.js +82 -41
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +13 -1
  18. package/dist/layer-utils/aggregation-utils.d.ts +44 -0
  19. package/dist/layer-utils/aggregation-utils.js +181 -0
  20. package/dist/layer-utils/cpu-aggregator.d.ts +74 -27
  21. package/dist/layer-utils/cpu-aggregator.js +224 -19
  22. package/dist/layer-utils/shader-utils.d.ts +1 -0
  23. package/dist/layer-utils/shader-utils.js +10 -1
  24. package/dist/line-layer/line-layer.d.ts +4 -4
  25. package/dist/line-layer/line-layer.js +29 -21
  26. package/dist/raster/images.d.ts +10 -3
  27. package/dist/raster/images.js +154 -60
  28. package/dist/raster/pipeline-validation-patch.d.ts +1 -0
  29. package/dist/raster/pipeline-validation-patch.js +101 -0
  30. package/dist/raster/raster-layer/raster-layer-shaders.d.ts +56 -0
  31. package/dist/raster/raster-layer/raster-layer-shaders.js +163 -0
  32. package/dist/raster/raster-layer/raster-layer.d.ts +6 -6
  33. package/dist/raster/raster-layer/raster-layer.js +90 -88
  34. package/dist/raster/raster-mesh-layer/matrix.d.ts +3 -1
  35. package/dist/raster/raster-mesh-layer/matrix.js +3 -3
  36. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.d.ts +19 -0
  37. package/dist/raster/raster-mesh-layer/raster-mesh-layer-shaders.js +38 -0
  38. package/dist/raster/raster-mesh-layer/raster-mesh-layer.d.ts +7 -6
  39. package/dist/raster/raster-mesh-layer/raster-mesh-layer.js +97 -83
  40. package/dist/raster/raster-processing-uniforms.d.ts +38 -0
  41. package/dist/raster/raster-processing-uniforms.js +124 -0
  42. package/dist/raster/types.d.ts +8 -8
  43. package/dist/raster/types.js +1 -1
  44. package/dist/raster/util.d.ts +15 -0
  45. package/dist/raster/util.js +113 -3
  46. package/dist/raster/webgl/color/colormap.js +13 -7
  47. package/dist/raster/webgl/color/filter.js +22 -12
  48. package/dist/raster/webgl/color/gamma-contrast.js +9 -3
  49. package/dist/raster/webgl/color/linear-rescale.js +9 -5
  50. package/dist/raster/webgl/color/saturation.js +7 -4
  51. package/dist/raster/webgl/color/sigmoidal-contrast.js +9 -5
  52. package/dist/raster/webgl/pansharpen/pansharpen-brovey.js +7 -4
  53. package/dist/raster/webgl/texture/combine-bands.js +1 -1
  54. package/dist/raster/webgl/texture/mask.js +27 -35
  55. package/dist/raster/webgl/texture/reorder-bands.js +8 -5
  56. package/dist/raster/webgl/texture/rgba-image.js +1 -1
  57. package/dist/raster/webgl/types.d.ts +11 -6
  58. package/dist/raster/webgl/types.js +1 -1
  59. package/dist/svg-icon-layer/scatterplot-icon-layer.d.ts +2 -4
  60. package/dist/svg-icon-layer/scatterplot-icon-layer.js +19 -25
  61. package/dist/svg-icon-layer/svg-icon-layer.d.ts +4 -6
  62. package/dist/svg-icon-layer/svg-icon-layer.js +5 -3
  63. package/dist/wms/wms-layer.d.ts +8 -5
  64. package/dist/wms/wms-layer.js +100 -27
  65. package/package.json +21 -17
@@ -17,8 +17,8 @@ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
17
17
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
18
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
19
  var _webMercator = require("@math.gl/web-mercator");
20
- var _typed = require("@deck.gl/core/typed");
21
- var _typed2 = require("@deck.gl/layers/typed");
20
+ var _core = require("@deck.gl/core");
21
+ var _layers = require("@deck.gl/layers");
22
22
  var _wms = require("@loaders.gl/wms");
23
23
  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; }
24
24
  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; }
@@ -98,6 +98,7 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
98
98
  this.state._nextRequestId = 0;
99
99
  this.state.lastRequestId = -1;
100
100
  this.state.loadCounter = 0;
101
+ this.state._lastRequestZoom = -1;
101
102
  }
102
103
  }, {
103
104
  key: "updateState",
@@ -115,14 +116,21 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
115
116
  this.debounce(function () {
116
117
  return _this.loadImage(viewport, 'image source changed');
117
118
  }, 0);
118
- } else if (!(0, _typed._deepEqual)(props.layers, oldProps.layers, 1)) {
119
+ } else if (!(0, _core._deepEqual)(props.layers, oldProps.layers, 1)) {
119
120
  this.debounce(function () {
120
121
  return _this.loadImage(viewport, 'layers changed');
121
122
  }, 0);
122
123
  } else if (changeFlags.viewportChanged) {
124
+ var _gl$getContextAttribu;
125
+ // Check if preserveDrawingBuffer is enabled (indicates video recording or image export)
126
+ // Use minimal debounce (10ms) during export for responsive frame capture
127
+ // Request deduplication in loadImage prevents spam from redundant viewport updates
128
+ var gl = this.context.gl;
129
+ var isPreservingBuffer = gl === null || gl === void 0 || (_gl$getContextAttribu = gl.getContextAttributes) === null || _gl$getContextAttribu === void 0 || (_gl$getContextAttribu = _gl$getContextAttribu.call(gl)) === null || _gl$getContextAttribu === void 0 ? void 0 : _gl$getContextAttribu.preserveDrawingBuffer;
130
+ var debounceDelay = isPreservingBuffer ? 10 : undefined;
123
131
  this.debounce(function () {
124
132
  return _this.loadImage(viewport, 'viewport changed');
125
- });
133
+ }, debounceDelay);
126
134
  }
127
135
  }
128
136
  }, {
@@ -132,10 +140,10 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
132
140
  bounds = _this$state.bounds,
133
141
  image = _this$state.image,
134
142
  lastRequestParameters = _this$state.lastRequestParameters;
135
- return image && new _typed2.BitmapLayer(_objectSpread(_objectSpread({}, this.getSubLayerProps({
143
+ return image && new _layers.BitmapLayer(_objectSpread(_objectSpread({}, this.getSubLayerProps({
136
144
  id: 'bitmap'
137
145
  })), {}, {
138
- _imageCoordinateSystem: lastRequestParameters.srs === 'EPSG:4326' ? _typed.COORDINATE_SYSTEM.LNGLAT : _typed.COORDINATE_SYSTEM.CARTESIAN,
146
+ _imageCoordinateSystem: lastRequestParameters.srs === 'EPSG:4326' ? _core.COORDINATE_SYSTEM.LNGLAT : _core.COORDINATE_SYSTEM.CARTESIAN,
139
147
  bounds: bounds,
140
148
  image: image,
141
149
  pickable: this.props.pickable
@@ -184,10 +192,8 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
184
192
  return props.data;
185
193
  }
186
194
  if (typeof props.data === 'string') {
187
- return (0, _wms.createImageSource)({
188
- url: props.data,
189
- loadOptions: props.loadOptions,
190
- type: props.serviceType
195
+ return new _wms.WMSImageSource(props.data, {
196
+ loadOptions: props.loadOptions
191
197
  });
192
198
  }
193
199
  throw new Error('invalid image source in props.data');
@@ -238,7 +244,8 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
238
244
  key: "loadImage",
239
245
  value: (function () {
240
246
  var _loadImage = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(viewport, _reason) {
241
- var _this$props, layers, serviceType, transparent, bounds, width, height, requestId, srs, requestParams, _WGS84ToPseudoMercato, _WGS84ToPseudoMercato2, minX, minY, _WGS84ToPseudoMercato3, _WGS84ToPseudoMercato4, maxX, maxY, image, _this$getCurrentLayer3, _this$context$onError, _this$context, _this$getCurrentLayer4;
247
+ var _gl$getContextAttribu2;
248
+ var _this$props, layers, serviceType, transparent, bounds, width, height, srs, requestParams, _WGS84ToPseudoMercato, _WGS84ToPseudoMercato2, minX, minY, _WGS84ToPseudoMercato3, _WGS84ToPseudoMercato4, maxX, maxY, gl, isExporting, currentZoom, lastZoom, isZoomingIn, requestId, image, _this$getCurrentLayer3, _this$context$onError, _this$context, _this$getCurrentLayer4;
242
249
  return _regenerator["default"].wrap(function _callee3$(_context3) {
243
250
  while (1) switch (_context3.prev = _context3.next) {
244
251
  case 0:
@@ -251,7 +258,6 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
251
258
  case 3:
252
259
  bounds = viewport.getBounds();
253
260
  width = viewport.width, height = viewport.height;
254
- requestId = this.getRequestId();
255
261
  srs = this.props.srs;
256
262
  if (srs === 'auto') {
257
263
  // BitmapLayer only supports LNGLAT or CARTESIAN (Web-Mercator)
@@ -274,12 +280,42 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
274
280
  // TODO: remove bbox once deck.gl is upgraded to ^8.10 with loaders.gl ^4
275
281
  requestParams.bbox = [minX, minY, maxX, maxY];
276
282
  }
277
- _context3.prev = 10;
283
+
284
+ // Skip request if parameters haven't meaningfully changed
285
+ if (!(this.state.lastRequestParameters && this._areRequestParamsEqual(this.state.lastRequestParameters, requestParams))) {
286
+ _context3.next = 11;
287
+ break;
288
+ }
289
+ return _context3.abrupt("return");
290
+ case 11:
291
+ // During video export, throttle zoom-in requests to only fire on zoom level crossings.
292
+ // The existing image is stretched by the BitmapLayer until the next level is reached.
293
+ gl = this.context.gl;
294
+ isExporting = gl === null || gl === void 0 || (_gl$getContextAttribu2 = gl.getContextAttributes) === null || _gl$getContextAttribu2 === void 0 || (_gl$getContextAttribu2 = _gl$getContextAttribu2.call(gl)) === null || _gl$getContextAttribu2 === void 0 ? void 0 : _gl$getContextAttribu2.preserveDrawingBuffer;
295
+ if (!(isExporting && this.state._lastRequestZoom >= 0)) {
296
+ _context3.next = 19;
297
+ break;
298
+ }
299
+ currentZoom = viewport.zoom;
300
+ lastZoom = this.state._lastRequestZoom;
301
+ isZoomingIn = currentZoom > lastZoom;
302
+ if (!(isZoomingIn && Math.floor(currentZoom) === Math.floor(lastZoom))) {
303
+ _context3.next = 19;
304
+ break;
305
+ }
306
+ return _context3.abrupt("return");
307
+ case 19:
308
+ // Update lastRequestParameters BEFORE making the request to prevent race conditions
309
+ // where multiple debounced calls see the same old parameters and all proceed
310
+ this.state.lastRequestParameters = requestParams;
311
+ this.state._lastRequestZoom = viewport.zoom;
312
+ requestId = this.getRequestId();
313
+ _context3.prev = 22;
278
314
  this.state.loadCounter++;
279
315
  this.props.onImageLoadStart(requestId);
280
- _context3.next = 15;
316
+ _context3.next = 27;
281
317
  return this.state.imageSource.getImage(requestParams);
282
- case 15:
318
+ case 27:
283
319
  image = _context3.sent;
284
320
  // If a request takes a long time, later requests may have already loaded.
285
321
  if (this.state.lastRequestId < requestId) {
@@ -288,26 +324,25 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
288
324
  this.setState({
289
325
  image: image,
290
326
  bounds: bounds,
291
- lastRequestParameters: requestParams,
292
327
  lastRequestId: requestId
293
328
  });
294
329
  }
295
- _context3.next = 23;
330
+ _context3.next = 35;
296
331
  break;
297
- case 19:
298
- _context3.prev = 19;
299
- _context3.t0 = _context3["catch"](10);
332
+ case 31:
333
+ _context3.prev = 31;
334
+ _context3.t0 = _context3["catch"](22);
300
335
  (_this$context$onError = (_this$context = this.context).onError) === null || _this$context$onError === void 0 || _this$context$onError.call(_this$context, _context3.t0, this);
301
336
  (_this$getCurrentLayer4 = this.getCurrentLayer()) === null || _this$getCurrentLayer4 === void 0 || _this$getCurrentLayer4.props.onImageLoadError(requestId, _context3.t0);
302
- case 23:
303
- _context3.prev = 23;
337
+ case 35:
338
+ _context3.prev = 35;
304
339
  this.state.loadCounter--;
305
- return _context3.finish(23);
306
- case 26:
340
+ return _context3.finish(35);
341
+ case 38:
307
342
  case "end":
308
343
  return _context3.stop();
309
344
  }
310
- }, _callee3, this, [[10, 19, 23, 26]]);
345
+ }, _callee3, this, [[22, 31, 35, 38]]);
311
346
  }));
312
347
  function loadImage(_x3, _x4) {
313
348
  return _loadImage.apply(this, arguments);
@@ -332,8 +367,46 @@ var WMSLayer = exports["default"] = /*#__PURE__*/function (_CompositeLayer) {
332
367
  return fn();
333
368
  }, ms);
334
369
  }
370
+
371
+ /** Compare request parameters to determine if a new request is needed */
372
+ }, {
373
+ key: "_areRequestParamsEqual",
374
+ value: function _areRequestParamsEqual(prev, next) {
375
+ // Compare dimensions
376
+ if (prev.width !== next.width || prev.height !== next.height) {
377
+ return false;
378
+ }
379
+
380
+ // Compare SRS
381
+ if (prev.srs !== next.srs) {
382
+ return false;
383
+ }
384
+
385
+ // Compare layers
386
+ if (!(0, _core._deepEqual)(prev.layers, next.layers)) {
387
+ return false;
388
+ }
389
+
390
+ // Compare transparent
391
+ if (prev.transparent !== next.transparent) {
392
+ return false;
393
+ }
394
+
395
+ // Compare bounds with tolerance for floating point precision
396
+ var tolerance = 1e-10;
397
+ var prevBbox = prev.bbox;
398
+ var nextBbox = next.bbox;
399
+ if (prevBbox && nextBbox) {
400
+ for (var i = 0; i < 4; i++) {
401
+ if (Math.abs(prevBbox[i] - nextBbox[i]) > tolerance) {
402
+ return false;
403
+ }
404
+ }
405
+ }
406
+ return true;
407
+ }
335
408
  }]);
336
- }(_typed.CompositeLayer); // https://epsg.io/3857
409
+ }(_core.CompositeLayer); // https://epsg.io/3857
337
410
  // +proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs +type=crs
338
411
  (0, _defineProperty2["default"])(WMSLayer, "layerName", 'WMSLayer');
339
412
  (0, _defineProperty2["default"])(WMSLayer, "defaultProps", defaultProps);
@@ -348,4 +421,4 @@ function WGS84ToPseudoMercator(coord) {
348
421
  mercator[1] = (mercator[1] / 256 - 1) * HALF_EARTH_CIRCUMFERENCE;
349
422
  return mercator;
350
423
  }
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2ViTWVyY2F0b3IiLCJyZXF1aXJlIiwiX3R5cGVkIiwiX3R5cGVkMiIsIl93bXMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJkZWZhdWx0UHJvcHMiLCJpZCIsImRhdGEiLCJzZXJ2aWNlVHlwZSIsInNycyIsImxheWVycyIsInR5cGUiLCJjb21wYXJlIiwidmFsdWUiLCJvbk1ldGFkYXRhTG9hZCIsIm9uTWV0YWRhdGFMb2FkRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJvbkltYWdlTG9hZFN0YXJ0Iiwib25JbWFnZUxvYWQiLCJvbkltYWdlTG9hZEVycm9yIiwicmVxdWVzdElkIiwiV01TTGF5ZXIiLCJleHBvcnRzIiwiX0NvbXBvc2l0ZUxheWVyIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwiZ2V0Iiwic3RhdGUiLCJsb2FkQ291bnRlciIsInNob3VsZFVwZGF0ZVN0YXRlIiwiaW5pdGlhbGl6ZVN0YXRlIiwiX25leHRSZXF1ZXN0SWQiLCJsYXN0UmVxdWVzdElkIiwidXBkYXRlU3RhdGUiLCJfcmVmIiwiX3RoaXMiLCJjaGFuZ2VGbGFncyIsInByb3BzIiwib2xkUHJvcHMiLCJ2aWV3cG9ydCIsImNvbnRleHQiLCJkYXRhQ2hhbmdlZCIsImltYWdlU291cmNlIiwiX2NyZWF0ZUltYWdlU291cmNlIiwiX2xvYWRNZXRhZGF0YSIsImRlYm91bmNlIiwibG9hZEltYWdlIiwiZGVlcEVxdWFsIiwidmlld3BvcnRDaGFuZ2VkIiwicmVuZGVyTGF5ZXJzIiwiX3RoaXMkc3RhdGUiLCJib3VuZHMiLCJpbWFnZSIsImxhc3RSZXF1ZXN0UGFyYW1ldGVycyIsIkJpdG1hcExheWVyIiwiZ2V0U3ViTGF5ZXJQcm9wcyIsIl9pbWFnZUNvb3JkaW5hdGVTeXN0ZW0iLCJDT09SRElOQVRFX1NZU1RFTSIsIkxOR0xBVCIsIkNBUlRFU0lBTiIsInBpY2thYmxlIiwiX2dldEZlYXR1cmVJbmZvVGV4dCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwieCIsInkiLCJfdGhpcyRzdGF0ZSRpbWFnZVNvdXIiLCJfdGhpcyRzdGF0ZSRpbWFnZVNvdXIyIiwiZmVhdHVyZUluZm8iLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZ2V0RmVhdHVyZUluZm9UZXh0IiwicXVlcnlfbGF5ZXJzIiwiaW5mb19mb3JtYXQiLCJzZW50IiwiYWJydXB0Iiwic3RvcCIsIl94IiwiX3gyIiwiSW1hZ2VTb3VyY2UiLCJjcmVhdGVJbWFnZVNvdXJjZSIsInVybCIsImxvYWRPcHRpb25zIiwiRXJyb3IiLCJfbG9hZE1ldGFkYXRhMiIsIl9jYWxsZWUyIiwibWV0YWRhdGEiLCJfdGhpcyRnZXRDdXJyZW50TGF5ZXIiLCJfdGhpcyRnZXRDdXJyZW50TGF5ZXIyIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwiZ2V0TWV0YWRhdGEiLCJnZXRDdXJyZW50TGF5ZXIiLCJ0MCIsImZpbmlzaCIsIl9sb2FkSW1hZ2UiLCJfY2FsbGVlMyIsIl9yZWFzb24iLCJfdGhpcyRwcm9wcyIsInRyYW5zcGFyZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJyZXF1ZXN0UGFyYW1zIiwiX1dHUzg0VG9Qc2V1ZG9NZXJjYXRvIiwiX1dHUzg0VG9Qc2V1ZG9NZXJjYXRvMiIsIm1pblgiLCJtaW5ZIiwiX1dHUzg0VG9Qc2V1ZG9NZXJjYXRvMyIsIl9XR1M4NFRvUHNldWRvTWVyY2F0bzQiLCJtYXhYIiwibWF4WSIsIl90aGlzJGdldEN1cnJlbnRMYXllcjMiLCJfdGhpcyRjb250ZXh0JG9uRXJyb3IiLCJfdGhpcyRjb250ZXh0IiwiX3RoaXMkZ2V0Q3VycmVudExheWVyNCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImdldEJvdW5kcyIsImdldFJlcXVlc3RJZCIsInJlc29sdXRpb24iLCJiYm94IiwiYm91bmRpbmdCb3giLCJXR1M4NFRvUHNldWRvTWVyY2F0b3IiLCJfc2xpY2VkVG9BcnJheTIiLCJnZXRJbWFnZSIsInNldFN0YXRlIiwib25FcnJvciIsIl94MyIsIl94NCIsImZuIiwibXMiLCJ1bmRlZmluZWQiLCJjbGVhclRpbWVvdXQiLCJfdGltZW91dElkIiwic2V0VGltZW91dCIsIkNvbXBvc2l0ZUxheWVyIiwiSEFMRl9FQVJUSF9DSVJDVU1GRVJFTkNFIiwiTWF0aCIsIlBJIiwiY29vcmQiLCJtZXJjYXRvciIsImxuZ0xhdFRvV29ybGQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvd21zL3dtcy1sYXllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge2xuZ0xhdFRvV29ybGR9IGZyb20gJ0BtYXRoLmdsL3dlYi1tZXJjYXRvcic7XG5cbmltcG9ydCB7XG4gIExheWVyLFxuICBDb21wb3NpdGVMYXllcixcbiAgQ29tcG9zaXRlTGF5ZXJQcm9wcyxcbiAgVXBkYXRlUGFyYW1ldGVycyxcbiAgRGVmYXVsdFByb3BzLFxuICBWaWV3cG9ydCxcbiAgQ09PUkRJTkFURV9TWVNURU0sXG4gIF9kZWVwRXF1YWwgYXMgZGVlcEVxdWFsXG59IGZyb20gJ0BkZWNrLmdsL2NvcmUvdHlwZWQnO1xuaW1wb3J0IHtCaXRtYXBMYXllcn0gZnJvbSAnQGRlY2suZ2wvbGF5ZXJzL3R5cGVkJztcbmltcG9ydCB7SW1hZ2VTb3VyY2UsIGNyZWF0ZUltYWdlU291cmNlfSBmcm9tICdAbG9hZGVycy5nbC93bXMnO1xuXG5pbXBvcnQgdHlwZSB7SW1hZ2VTb3VyY2VNZXRhZGF0YX0gZnJvbSAnQGxvYWRlcnMuZ2wvbG9hZGVyLXV0aWxzJztcbmltcG9ydCB0eXBlIHtJbWFnZVR5cGUsIEltYWdlU2VydmljZVR5cGV9IGZyb20gJ0Bsb2FkZXJzLmdsL3dtcyc7XG5cbi8vIFRPRE86IFRoaXMgaXMgYSBtb2RpZmllZCBjb3B5IG9mIFdNU0xheWVyIGZyb20gZGVjay5nbC4gUmVtb3ZlIHRoaXMgb25jZSB3ZSB1cGdyYWRlIGRlY2suZ2wgYW5kIGxvYWRlcnMuZ2wuXG5cbi8qKiBBbGwgcHJvcHMgc3VwcG9ydGVkIGJ5IHRoZSBUaWxlTGF5ZXIgKi9cbmV4cG9ydCB0eXBlIFdNU0xheWVyUHJvcHMgPSBDb21wb3NpdGVMYXllclByb3BzICYgX1dNU0xheWVyUHJvcHM7XG5cbi8qKiBQcm9wcyBhZGRlZCBieSB0aGUgVGlsZUxheWVyICovXG50eXBlIF9XTVNMYXllclByb3BzID0ge1xuICBkYXRhOiBzdHJpbmcgfCBJbWFnZVNvdXJjZTtcbiAgc2VydmljZVR5cGU/OiBJbWFnZVNlcnZpY2VUeXBlIHwgJ2F1dG8nO1xuICBsYXllcnM/OiBzdHJpbmdbXTtcbiAgc3JzPzogJ0VQU0c6NDMyNicgfCAnRVBTRzozODU3JyB8ICdhdXRvJztcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBvbk1ldGFkYXRhTG9hZD86IChtZXRhZGF0YTogSW1hZ2VTb3VyY2VNZXRhZGF0YSkgPT4gdm9pZDtcbiAgb25NZXRhZGF0YUxvYWRFcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uSW1hZ2VMb2FkU3RhcnQ/OiAocmVxdWVzdElkOiB1bmtub3duKSA9PiB2b2lkO1xuICBvbkltYWdlTG9hZD86IChyZXF1ZXN0SWQ6IHVua25vd24pID0+IHZvaWQ7XG4gIG9uSW1hZ2VMb2FkRXJyb3I/OiAocmVxdWVzdElkOiB1bmtub3duLCBlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBkZWZhdWx0UHJvcHM6IERlZmF1bHRQcm9wczxXTVNMYXllclByb3BzPiA9IHtcbiAgaWQ6ICdpbWFnZXJ5LWxheWVyJyxcbiAgZGF0YTogJycsXG4gIHNlcnZpY2VUeXBlOiAnYXV0bycsXG4gIHNyczogJ2F1dG8nLFxuICBsYXllcnM6IHt0eXBlOiAnYXJyYXknLCBjb21wYXJlOiB0cnVlLCB2YWx1ZTogW119LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uTWV0YWRhdGFMb2FkOiB7dHlwZTogJ2Z1bmN0aW9uJywgdmFsdWU6ICgpID0+IHt9fSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIG9uTWV0YWRhdGFMb2FkRXJyb3I6IHt0eXBlOiAnZnVuY3Rpb24nLCB2YWx1ZTogY29uc29sZS5lcnJvcn0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25JbWFnZUxvYWRTdGFydDoge3R5cGU6ICdmdW5jdGlvbicsIHZhbHVlOiAoKSA9PiB7fX0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgb25JbWFnZUxvYWQ6IHt0eXBlOiAnZnVuY3Rpb24nLCB2YWx1ZTogKCkgPT4ge319LFxuICBvbkltYWdlTG9hZEVycm9yOiB7XG4gICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICBjb21wYXJlOiBmYWxzZSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICB2YWx1ZTogKHJlcXVlc3RJZDogdW5rbm93biwgZXJyb3I6IEVycm9yKSA9PiBjb25zb2xlLmVycm9yKGVycm9yLCByZXF1ZXN0SWQpXG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdNU0xheWVyIGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXI8UmVxdWlyZWQ8X1dNU0xheWVyUHJvcHM+PiB7XG4gIHN0YXRpYyBsYXllck5hbWUgPSAnV01TTGF5ZXInO1xuICBzdGF0aWMgZGVmYXVsdFByb3BzOiBEZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5cbiAgZGVjbGFyZSBzdGF0ZToge1xuICAgIGltYWdlU291cmNlOiBJbWFnZVNvdXJjZTtcbiAgICBpbWFnZTogSW1hZ2VUeXBlO1xuICAgIGJvdW5kczogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgbGFzdFJlcXVlc3RQYXJhbWV0ZXJzOiB7XG4gICAgICAvLyBUT0RPOiByZW1vdmUgYmJveCBvbmNlIGRlY2suZ2wgaXMgdXBncmFkZWQgdG8gXjguMTAgd2l0aCBsb2FkZXJzLmdsIF40XG4gICAgICBiYm94OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcbiAgICAgIGJvdW5kaW5nQm94OiBbW251bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyXV07XG4gICAgICBsYXllcnM6IHN0cmluZ1tdO1xuICAgICAgc3JzOiAnRVBTRzo0MzI2JyB8ICdFUFNHOjM4NTcnO1xuICAgICAgd2lkdGg6IG51bWJlcjtcbiAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgIH07XG4gICAgbGFzdFJlcXVlc3RJZDogbnVtYmVyO1xuICAgIF9uZXh0UmVxdWVzdElkOiBudW1iZXI7XG4gICAgLyoqIFRPRE86IENoYW5nZSBhbnkgPT4gc2V0VGltZW91dCByZXR1cm4gdHlwZS4gRGlmZmVyZW50IGJldHdlZW4gTm9kZSBhbmQgYnJvd3Nlci4uLiAqL1xuICAgIF90aW1lb3V0SWQ6IGFueTtcbiAgICBsb2FkQ291bnRlcjogbnVtYmVyO1xuICB9O1xuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgYWxsIGFzeW5jIHJlc291cmNlcyBhcmUgbG9hZGVkICovXG4gIGdldCBpc0xvYWRlZCgpOiBib29sZWFuIHtcbiAgICAvLyBUcmFjayB0aGUgZXhwbGljaXQgbG9hZGluZyBkb25lIGJ5IHRoaXMgbGF5ZXJcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnN0YXRlKSAmJiB0aGlzLnN0YXRlLmxvYWRDb3VudGVyID09PSAwICYmIHN1cGVyLmlzTG9hZGVkO1xuICB9XG5cbiAgLyoqIExldHMgZGVjay5nbCBrbm93IHRoYXQgd2Ugd2FudCB2aWV3cG9ydCBjaGFuZ2UgZXZlbnRzICovXG4gIG92ZXJyaWRlIHNob3VsZFVwZGF0ZVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgaW5pdGlhbGl6ZVN0YXRlKCk6IHZvaWQge1xuICAgIC8vIGludGVudGlvbmFsbHkgZW1wdHksIGluaXRpYWxpemF0aW9uIGlzIGRvbmUgaW4gdXBkYXRlU3RhdGVcbiAgICB0aGlzLnN0YXRlLl9uZXh0UmVxdWVzdElkID0gMDtcbiAgICB0aGlzLnN0YXRlLmxhc3RSZXF1ZXN0SWQgPSAtMTtcbiAgICB0aGlzLnN0YXRlLmxvYWRDb3VudGVyID0gMDtcbiAgfVxuXG4gIG92ZXJyaWRlIHVwZGF0ZVN0YXRlKHtjaGFuZ2VGbGFncywgcHJvcHMsIG9sZFByb3BzfTogVXBkYXRlUGFyYW1ldGVyczx0aGlzPik6IHZvaWQge1xuICAgIGNvbnN0IHt2aWV3cG9ydH0gPSB0aGlzLmNvbnRleHQ7XG5cbiAgICAvLyBDaGVjayBpZiBkYXRhIHNvdXJjZSBoYXMgY2hhbmdlZFxuICAgIGlmIChjaGFuZ2VGbGFncy5kYXRhQ2hhbmdlZCB8fCBwcm9wcy5zZXJ2aWNlVHlwZSAhPT0gb2xkUHJvcHMuc2VydmljZVR5cGUpIHtcbiAgICAgIHRoaXMuc3RhdGUuaW1hZ2VTb3VyY2UgPSB0aGlzLl9jcmVhdGVJbWFnZVNvdXJjZShwcm9wcyk7XG5cbiAgICAgIHRoaXMuX2xvYWRNZXRhZGF0YSgpO1xuICAgICAgdGhpcy5kZWJvdW5jZSgoKSA9PiB0aGlzLmxvYWRJbWFnZSh2aWV3cG9ydCwgJ2ltYWdlIHNvdXJjZSBjaGFuZ2VkJyksIDApO1xuICAgIH0gZWxzZSBpZiAoIWRlZXBFcXVhbChwcm9wcy5sYXllcnMsIG9sZFByb3BzLmxheWVycywgMSkpIHtcbiAgICAgIHRoaXMuZGVib3VuY2UoKCkgPT4gdGhpcy5sb2FkSW1hZ2Uodmlld3BvcnQsICdsYXllcnMgY2hhbmdlZCcpLCAwKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZUZsYWdzLnZpZXdwb3J0Q2hhbmdlZCkge1xuICAgICAgdGhpcy5kZWJvdW5jZSgoKSA9PiB0aGlzLmxvYWRJbWFnZSh2aWV3cG9ydCwgJ3ZpZXdwb3J0IGNoYW5nZWQnKSk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgcmVuZGVyTGF5ZXJzKCk6IExheWVyPGFueT4ge1xuICAgIGNvbnN0IHtib3VuZHMsIGltYWdlLCBsYXN0UmVxdWVzdFBhcmFtZXRlcnN9ID0gdGhpcy5zdGF0ZTtcblxuICAgIHJldHVybiAoXG4gICAgICBpbWFnZSAmJlxuICAgICAgbmV3IEJpdG1hcExheWVyKHtcbiAgICAgICAgLi4udGhpcy5nZXRTdWJMYXllclByb3BzKHtpZDogJ2JpdG1hcCd9KSxcbiAgICAgICAgX2ltYWdlQ29vcmRpbmF0ZVN5c3RlbTpcbiAgICAgICAgICBsYXN0UmVxdWVzdFBhcmFtZXRlcnMuc3JzID09PSAnRVBTRzo0MzI2J1xuICAgICAgICAgICAgPyBDT09SRElOQVRFX1NZU1RFTS5MTkdMQVRcbiAgICAgICAgICAgIDogQ09PUkRJTkFURV9TWVNURU0uQ0FSVEVTSUFOLFxuICAgICAgICBib3VuZHMsXG4gICAgICAgIGltYWdlLFxuICAgICAgICBwaWNrYWJsZTogdGhpcy5wcm9wcy5waWNrYWJsZVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmVhdHVyZUluZm9UZXh0KHg6IG51bWJlciwgeTogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgY29uc3Qge2xhc3RSZXF1ZXN0UGFyYW1ldGVyc30gPSB0aGlzLnN0YXRlO1xuICAgIGlmIChsYXN0UmVxdWVzdFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVW5kb2N1bWVudGVkIG1ldGhvZFxuICAgICAgY29uc3QgZmVhdHVyZUluZm8gPSBhd2FpdCB0aGlzLnN0YXRlLmltYWdlU291cmNlLmdldEZlYXR1cmVJbmZvVGV4dD8uKHtcbiAgICAgICAgLi4ubGFzdFJlcXVlc3RQYXJhbWV0ZXJzLFxuICAgICAgICBxdWVyeV9sYXllcnM6IGxhc3RSZXF1ZXN0UGFyYW1ldGVycy5sYXllcnMsXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIGluZm9fZm9ybWF0OiAnYXBwbGljYXRpb24vdm5kLm9nYy5nbWwnXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmZWF0dXJlSW5mbztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgX2NyZWF0ZUltYWdlU291cmNlKHByb3BzOiBXTVNMYXllclByb3BzKTogSW1hZ2VTb3VyY2Uge1xuICAgIGlmIChwcm9wcy5kYXRhIGluc3RhbmNlb2YgSW1hZ2VTb3VyY2UpIHtcbiAgICAgIHJldHVybiBwcm9wcy5kYXRhO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJvcHMuZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBjcmVhdGVJbWFnZVNvdXJjZSh7XG4gICAgICAgIHVybDogcHJvcHMuZGF0YSxcbiAgICAgICAgbG9hZE9wdGlvbnM6IHByb3BzLmxvYWRPcHRpb25zLFxuICAgICAgICB0eXBlOiBwcm9wcy5zZXJ2aWNlVHlwZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGltYWdlIHNvdXJjZSBpbiBwcm9wcy5kYXRhJyk7XG4gIH1cblxuICAvKiogUnVuIGEgZ2V0TWV0YWRhdGEgb24gdGhlIGltYWdlIHNlcnZpY2UgKi9cbiAgYXN5bmMgX2xvYWRNZXRhZGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7aW1hZ2VTb3VyY2V9ID0gdGhpcy5zdGF0ZTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zdGF0ZS5sb2FkQ291bnRlcisrO1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBpbWFnZVNvdXJjZS5nZXRNZXRhZGF0YSgpO1xuXG4gICAgICAvLyBJZiBhIHJlcXVlc3QgdGFrZXMgYSBsb25nIHRpbWUsIGl0IG1heSBubyBsb25nZXIgYmUgZXhwZWN0ZWRcbiAgICAgIGlmICh0aGlzLnN0YXRlLmltYWdlU291cmNlID09PSBpbWFnZVNvdXJjZSkge1xuICAgICAgICB0aGlzLmdldEN1cnJlbnRMYXllcigpPy5wcm9wcy5vbk1ldGFkYXRhTG9hZChtZXRhZGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZ2V0Q3VycmVudExheWVyKCk/LnByb3BzLm9uTWV0YWRhdGFMb2FkRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnN0YXRlLmxvYWRDb3VudGVyLS07XG4gICAgfVxuICB9XG5cbiAgLyoqIExvYWQgYW4gaW1hZ2UgKi9cbiAgYXN5bmMgbG9hZEltYWdlKHZpZXdwb3J0OiBWaWV3cG9ydCwgX3JlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge2xheWVycywgc2VydmljZVR5cGUsIHRyYW5zcGFyZW50fSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBUT0RPIC0gbW92ZSB0byBJbWFnZVNvdXJjZT9cbiAgICBpZiAoc2VydmljZVR5cGUgPT09ICd3bXMnICYmIGxheWVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBib3VuZHMgPSB2aWV3cG9ydC5nZXRCb3VuZHMoKTtcbiAgICBjb25zdCB7d2lkdGgsIGhlaWdodH0gPSB2aWV3cG9ydDtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLmdldFJlcXVlc3RJZCgpO1xuICAgIGxldCB7c3JzfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHNycyA9PT0gJ2F1dG8nKSB7XG4gICAgICAvLyBCaXRtYXBMYXllciBvbmx5IHN1cHBvcnRzIExOR0xBVCBvciBDQVJURVNJQU4gKFdlYi1NZXJjYXRvcilcbiAgICAgIHNycyA9IHZpZXdwb3J0LnJlc29sdXRpb24gPyAnRVBTRzo0MzI2JyA6ICdFUFNHOjM4NTcnO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0UGFyYW1zID0ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICAvLyBUT0RPOiByZW1vdmUgYmJveCBvbmNlIGRlY2suZ2wgaXMgdXBncmFkZWQgdG8gXjguMTAgd2l0aCBsb2FkZXJzLmdsIF40XG4gICAgICBiYm94OiBib3VuZHMsXG4gICAgICBib3VuZGluZ0JveDogW1xuICAgICAgICBbYm91bmRzWzBdLCBib3VuZHNbMV1dLFxuICAgICAgICBbYm91bmRzWzJdLCBib3VuZHNbM11dXG4gICAgICBdIGFzIFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSxcbiAgICAgIGxheWVycyxcbiAgICAgIHNycyxcbiAgICAgIHRyYW5zcGFyZW50XG4gICAgfTtcbiAgICBpZiAoc3JzID09PSAnRVBTRzozODU3Jykge1xuICAgICAgY29uc3QgW21pblgsIG1pblldID0gV0dTODRUb1BzZXVkb01lcmNhdG9yKFtib3VuZHNbMF0sIGJvdW5kc1sxXV0pO1xuICAgICAgY29uc3QgW21heFgsIG1heFldID0gV0dTODRUb1BzZXVkb01lcmNhdG9yKFtib3VuZHNbMl0sIGJvdW5kc1szXV0pO1xuICAgICAgcmVxdWVzdFBhcmFtcy5ib3VuZGluZ0JveCA9IFtcbiAgICAgICAgW21pblgsIG1pblldLFxuICAgICAgICBbbWF4WCwgbWF4WV1cbiAgICAgIF07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgYmJveCBvbmNlIGRlY2suZ2wgaXMgdXBncmFkZWQgdG8gXjguMTAgd2l0aCBsb2FkZXJzLmdsIF40XG4gICAgICByZXF1ZXN0UGFyYW1zLmJib3ggPSBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RhdGUubG9hZENvdW50ZXIrKztcbiAgICAgIHRoaXMucHJvcHMub25JbWFnZUxvYWRTdGFydChyZXF1ZXN0SWQpO1xuXG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuc3RhdGUuaW1hZ2VTb3VyY2UuZ2V0SW1hZ2UocmVxdWVzdFBhcmFtcyk7XG5cbiAgICAgIC8vIElmIGEgcmVxdWVzdCB0YWtlcyBhIGxvbmcgdGltZSwgbGF0ZXIgcmVxdWVzdHMgbWF5IGhhdmUgYWxyZWFkeSBsb2FkZWQuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5sYXN0UmVxdWVzdElkIDwgcmVxdWVzdElkKSB7XG4gICAgICAgIHRoaXMuZ2V0Q3VycmVudExheWVyKCk/LnByb3BzLm9uSW1hZ2VMb2FkKHJlcXVlc3RJZCk7XG4gICAgICAgIC8vIE5vdCB0eXBlIHNhZmUuLi5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgYm91bmRzLFxuICAgICAgICAgIGxhc3RSZXF1ZXN0UGFyYW1ldGVyczogcmVxdWVzdFBhcmFtcyxcbiAgICAgICAgICBsYXN0UmVxdWVzdElkOiByZXF1ZXN0SWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuY29udGV4dC5vbkVycm9yPy4oZXJyb3IgYXMgRXJyb3IsIHRoaXMpO1xuICAgICAgdGhpcy5nZXRDdXJyZW50TGF5ZXIoKT8ucHJvcHMub25JbWFnZUxvYWRFcnJvcihyZXF1ZXN0SWQsIGVycm9yIGFzIEVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zdGF0ZS5sb2FkQ291bnRlci0tO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhFTFBFUlNcblxuICAvKiogR2xvYmFsIGNvdW50ZXIgZm9yIGlzc3VpbmcgdW5pcXVlIHJlcXVlc3QgaWRzICovXG4gIHByaXZhdGUgZ2V0UmVxdWVzdElkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuX25leHRSZXF1ZXN0SWQrKztcbiAgfVxuXG4gIC8qKiBSdW5zIGFuIGFjdGlvbiBpbiB0aGUgZnV0dXJlLCBjYW5jZWxzIGl0IGlmIHRoZSBuZXcgYWN0aW9uIGlzIGlzc3VlZCBiZWZvcmUgaXQgZXhlY3V0ZXMgKi9cbiAgcHJpdmF0ZSBkZWJvdW5jZShmbjogKCkgPT4gdm9pZCwgbXMgPSA1MDApOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS5fdGltZW91dElkKTtcbiAgICB0aGlzLnN0YXRlLl90aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGZuKCksIG1zKTtcbiAgfVxufVxuXG4vLyBodHRwczovL2Vwc2cuaW8vMzg1N1xuLy8gK3Byb2o9bWVyYyArYT02Mzc4MTM3ICtiPTYzNzgxMzcgK2xhdF90cz0wICtsb25fMD0wICt4XzA9MCAreV8wPTAgK2s9MSArdW5pdHM9bSArbmFkZ3JpZHM9QG51bGwgK3drdGV4dCArbm9fZGVmcyArdHlwZT1jcnNcbmNvbnN0IEhBTEZfRUFSVEhfQ0lSQ1VNRkVSRU5DRSA9IDYzNzgxMzcgKiBNYXRoLlBJO1xuXG4vKiogUHJvamVjdHMgRVBTRzo0MzI2IHRvIEVQU0c6Mzg1N1xuICogVGhpcyBpcyBhIGxpZ2h0d2VpZ2h0IHJlcGxhY2VtZW50IG9mIHByb2o0LiBVc2UgdGVzdHMgdG8gZW5zdXJlIGNvbmZvcm1hbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gV0dTODRUb1BzZXVkb01lcmNhdG9yKGNvb3JkOiBbbnVtYmVyLCBudW1iZXJdKTogW251bWJlciwgbnVtYmVyXSB7XG4gIGNvbnN0IG1lcmNhdG9yID0gbG5nTGF0VG9Xb3JsZChjb29yZCk7XG4gIG1lcmNhdG9yWzBdID0gKG1lcmNhdG9yWzBdIC8gMjU2IC0gMSkgKiBIQUxGX0VBUlRIX0NJUkNVTUZFUkVOQ0U7XG4gIG1lcmNhdG9yWzFdID0gKG1lcmNhdG9yWzFdIC8gMjU2IC0gMSkgKiBIQUxGX0VBUlRIX0NJUkNVTUZFUkVOQ0U7XG4gIHJldHVybiBtZXJjYXRvcjtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBVUEsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsSUFBQSxHQUFBSCxPQUFBO0FBQStELFNBQUFJLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxDQUFBLFdBQUFXLFNBQUEsQ0FBQVosQ0FBQSxJQUFBWSxTQUFBLENBQUFaLENBQUEsUUFBQUEsQ0FBQSxPQUFBRixPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxPQUFB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
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2ViTWVyY2F0b3IiLCJyZXF1aXJlIiwiX2NvcmUiLCJfbGF5ZXJzIiwiX3dtcyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiX3N1cGVyUHJvcEdldCIsInAiLCJfZ2V0MiIsImRlZmF1bHRQcm9wcyIsImlkIiwiZGF0YSIsInNlcnZpY2VUeXBlIiwic3JzIiwibGF5ZXJzIiwidHlwZSIsImNvbXBhcmUiLCJ2YWx1ZSIsIm9uTWV0YWRhdGFMb2FkIiwib25NZXRhZGF0YUxvYWRFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsIm9uSW1hZ2VMb2FkU3RhcnQiLCJvbkltYWdlTG9hZCIsIm9uSW1hZ2VMb2FkRXJyb3IiLCJyZXF1ZXN0SWQiLCJXTVNMYXllciIsImV4cG9ydHMiLCJfQ29tcG9zaXRlTGF5ZXIiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJnZXQiLCJzdGF0ZSIsImxvYWRDb3VudGVyIiwic2hvdWxkVXBkYXRlU3RhdGUiLCJpbml0aWFsaXplU3RhdGUiLCJfbmV4dFJlcXVlc3RJZCIsImxhc3RSZXF1ZXN0SWQiLCJfbGFzdFJlcXVlc3Rab29tIiwidXBkYXRlU3RhdGUiLCJfcmVmIiwiX3RoaXMiLCJjaGFuZ2VGbGFncyIsInByb3BzIiwib2xkUHJvcHMiLCJ2aWV3cG9ydCIsImNvbnRleHQiLCJkYXRhQ2hhbmdlZCIsImltYWdlU291cmNlIiwiX2NyZWF0ZUltYWdlU291cmNlIiwiX2xvYWRNZXRhZGF0YSIsImRlYm91bmNlIiwibG9hZEltYWdlIiwiZGVlcEVxdWFsIiwidmlld3BvcnRDaGFuZ2VkIiwiX2dsJGdldENvbnRleHRBdHRyaWJ1IiwiZ2wiLCJpc1ByZXNlcnZpbmdCdWZmZXIiLCJnZXRDb250ZXh0QXR0cmlidXRlcyIsInByZXNlcnZlRHJhd2luZ0J1ZmZlciIsImRlYm91bmNlRGVsYXkiLCJ1bmRlZmluZWQiLCJyZW5kZXJMYXllcnMiLCJfdGhpcyRzdGF0ZSIsImJvdW5kcyIsImltYWdlIiwibGFzdFJlcXVlc3RQYXJhbWV0ZXJzIiwiQml0bWFwTGF5ZXIiLCJnZXRTdWJMYXllclByb3BzIiwiX2ltYWdlQ29vcmRpbmF0ZVN5c3RlbSIsIkNPT1JESU5BVEVfU1lTVEVNIiwiTE5HTEFUIiwiQ0FSVEVTSUFOIiwicGlja2FibGUiLCJfZ2V0RmVhdHVyZUluZm9UZXh0IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ4IiwieSIsIl90aGlzJHN0YXRlJGltYWdlU291ciIsIl90aGlzJHN0YXRlJGltYWdlU291cjIiLCJmZWF0dXJlSW5mbyIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJnZXRGZWF0dXJlSW5mb1RleHQiLCJxdWVyeV9sYXllcnMiLCJpbmZvX2Zvcm1hdCIsInNlbnQiLCJhYnJ1cHQiLCJzdG9wIiwiX3giLCJfeDIiLCJJbWFnZVNvdXJjZSIsIldNU0ltYWdlU291cmNlIiwibG9hZE9wdGlvbnMiLCJFcnJvciIsIl9sb2FkTWV0YWRhdGEyIiwiX2NhbGxlZTIiLCJtZXRhZGF0YSIsIl90aGlzJGdldEN1cnJlbnRMYXllciIsIl90aGlzJGdldEN1cnJlbnRMYXllcjIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJnZXRNZXRhZGF0YSIsImdldEN1cnJlbnRMYXllciIsInQwIiwiZmluaXNoIiwiX2xvYWRJbWFnZSIsIl9jYWxsZWUzIiwiX3JlYXNvbiIsIl9nbCRnZXRDb250ZXh0QXR0cmlidTIiLCJfdGhpcyRwcm9wcyIsInRyYW5zcGFyZW50Iiwid2lkdGgiLCJoZWlnaHQiLCJyZXF1ZXN0UGFyYW1zIiwiX1dHUzg0VG9Qc2V1ZG9NZXJjYXRvIiwiX1dHUzg0VG9Qc2V1ZG9NZXJjYXRvMiIsIm1pblgiLCJtaW5ZIiwiX1dHUzg0VG9Qc2V1ZG9NZXJjYXRvMyIsIl9XR1M4NFRvUHNldWRvTWVyY2F0bzQiLCJtYXhYIiwibWF4WSIsImlzRXhwb3J0aW5nIiwiY3VycmVudFpvb20iLCJsYXN0Wm9vbSIsImlzWm9vbWluZ0luIiwiX3RoaXMkZ2V0Q3VycmVudExheWVyMyIsIl90aGlzJGNvbnRleHQkb25FcnJvciIsIl90aGlzJGNvbnRleHQiLCJfdGhpcyRnZXRDdXJyZW50TGF5ZXI0IiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiZ2V0Qm91bmRzIiwicmVzb2x1dGlvbiIsImJib3giLCJib3VuZGluZ0JveCIsIldHUzg0VG9Qc2V1ZG9NZXJjYXRvciIsIl9zbGljZWRUb0FycmF5MiIsIl9hcmVSZXF1ZXN0UGFyYW1zRXF1YWwiLCJ6b29tIiwiTWF0aCIsImZsb29yIiwiZ2V0UmVxdWVzdElkIiwiZ2V0SW1hZ2UiLCJzZXRTdGF0ZSIsIm9uRXJyb3IiLCJfeDMiLCJfeDQiLCJmbiIsIm1zIiwiY2xlYXJUaW1lb3V0IiwiX3RpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJ0b2xlcmFuY2UiLCJwcmV2QmJveCIsIm5leHRCYm94IiwiaSIsImFicyIsIkNvbXBvc2l0ZUxheWVyIiwiSEFMRl9FQVJUSF9DSVJDVU1GRVJFTkNFIiwiUEkiLCJjb29yZCIsIm1lcmNhdG9yIiwibG5nTGF0VG9Xb3JsZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93bXMvd21zLWxheWVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7bG5nTGF0VG9Xb3JsZH0gZnJvbSAnQG1hdGguZ2wvd2ViLW1lcmNhdG9yJztcblxuaW1wb3J0IHtcbiAgTGF5ZXIsXG4gIENvbXBvc2l0ZUxheWVyLFxuICBDb21wb3NpdGVMYXllclByb3BzLFxuICBVcGRhdGVQYXJhbWV0ZXJzLFxuICBEZWZhdWx0UHJvcHMsXG4gIFZpZXdwb3J0LFxuICBDT09SRElOQVRFX1NZU1RFTSxcbiAgX2RlZXBFcXVhbCBhcyBkZWVwRXF1YWxcbn0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge0JpdG1hcExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtJbWFnZVNvdXJjZSwgV01TSW1hZ2VTb3VyY2V9IGZyb20gJ0Bsb2FkZXJzLmdsL3dtcyc7XG5cbmltcG9ydCB0eXBlIHtJbWFnZVNvdXJjZU1ldGFkYXRhfSBmcm9tICdAbG9hZGVycy5nbC9sb2FkZXItdXRpbHMnO1xuaW1wb3J0IHR5cGUge0ltYWdlVHlwZX0gZnJvbSAnQGxvYWRlcnMuZ2wvd21zJztcblxuLy8gVE9ETzogVGhpcyBpcyBhIG1vZGlmaWVkIGNvcHkgb2YgV01TTGF5ZXIgZnJvbSBkZWNrLmdsLiBSZW1vdmUgdGhpcyBvbmNlIHdlIHVwZ3JhZGUgZGVjay5nbCBhbmQgbG9hZGVycy5nbC5cblxuLyoqIEFsbCBwcm9wcyBzdXBwb3J0ZWQgYnkgdGhlIFRpbGVMYXllciAqL1xuZXhwb3J0IHR5cGUgV01TTGF5ZXJQcm9wcyA9IENvbXBvc2l0ZUxheWVyUHJvcHMgJiBfV01TTGF5ZXJQcm9wcztcblxuLyoqIFByb3BzIGFkZGVkIGJ5IHRoZSBUaWxlTGF5ZXIgKi9cbnR5cGUgX1dNU0xheWVyUHJvcHMgPSB7XG4gIGRhdGE6IHN0cmluZyB8IEltYWdlU291cmNlO1xuICBzZXJ2aWNlVHlwZT86IHN0cmluZyB8ICdhdXRvJztcbiAgbGF5ZXJzPzogc3RyaW5nW107XG4gIHNycz86ICdFUFNHOjQzMjYnIHwgJ0VQU0c6Mzg1NycgfCAnYXV0byc7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgb25NZXRhZGF0YUxvYWQ/OiAobWV0YWRhdGE6IEltYWdlU291cmNlTWV0YWRhdGEpID0+IHZvaWQ7XG4gIG9uTWV0YWRhdGFMb2FkRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICBvbkltYWdlTG9hZFN0YXJ0PzogKHJlcXVlc3RJZDogdW5rbm93bikgPT4gdm9pZDtcbiAgb25JbWFnZUxvYWQ/OiAocmVxdWVzdElkOiB1bmtub3duKSA9PiB2b2lkO1xuICBvbkltYWdlTG9hZEVycm9yPzogKHJlcXVlc3RJZDogdW5rbm93biwgZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xufTtcblxuY29uc3QgZGVmYXVsdFByb3BzOiBEZWZhdWx0UHJvcHM8V01TTGF5ZXJQcm9wcz4gPSB7XG4gIGlkOiAnaW1hZ2VyeS1sYXllcicsXG4gIGRhdGE6ICcnLFxuICBzZXJ2aWNlVHlwZTogJ2F1dG8nLFxuICBzcnM6ICdhdXRvJyxcbiAgbGF5ZXJzOiB7dHlwZTogJ2FycmF5JywgY29tcGFyZTogdHJ1ZSwgdmFsdWU6IFtdfSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBvbk1ldGFkYXRhTG9hZDoge3R5cGU6ICdmdW5jdGlvbicsIHZhbHVlOiAoKSA9PiB7fX0sXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBvbk1ldGFkYXRhTG9hZEVycm9yOiB7dHlwZTogJ2Z1bmN0aW9uJywgdmFsdWU6IGNvbnNvbGUuZXJyb3J9LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uSW1hZ2VMb2FkU3RhcnQ6IHt0eXBlOiAnZnVuY3Rpb24nLCB2YWx1ZTogKCkgPT4ge319LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gIG9uSW1hZ2VMb2FkOiB7dHlwZTogJ2Z1bmN0aW9uJywgdmFsdWU6ICgpID0+IHt9fSxcbiAgb25JbWFnZUxvYWRFcnJvcjoge1xuICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgY29tcGFyZTogZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdmFsdWU6IChyZXF1ZXN0SWQ6IHVua25vd24sIGVycm9yOiBFcnJvcikgPT4gY29uc29sZS5lcnJvcihlcnJvciwgcmVxdWVzdElkKVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXTVNMYXllciBleHRlbmRzIENvbXBvc2l0ZUxheWVyPFJlcXVpcmVkPF9XTVNMYXllclByb3BzPj4ge1xuICBzdGF0aWMgbGF5ZXJOYW1lID0gJ1dNU0xheWVyJztcbiAgc3RhdGljIGRlZmF1bHRQcm9wczogRGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuXG4gIGRlY2xhcmUgc3RhdGU6IHtcbiAgICBpbWFnZVNvdXJjZTogSW1hZ2VTb3VyY2U7XG4gICAgaW1hZ2U6IEltYWdlVHlwZTtcbiAgICBib3VuZHM6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuICAgIGxhc3RSZXF1ZXN0UGFyYW1ldGVyczoge1xuICAgICAgLy8gVE9ETzogcmVtb3ZlIGJib3ggb25jZSBkZWNrLmdsIGlzIHVwZ3JhZGVkIHRvIF44LjEwIHdpdGggbG9hZGVycy5nbCBeNFxuICAgICAgYmJveDogW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XG4gICAgICBib3VuZGluZ0JveDogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dO1xuICAgICAgbGF5ZXJzOiBzdHJpbmdbXTtcbiAgICAgIHNyczogJ0VQU0c6NDMyNicgfCAnRVBTRzozODU3JztcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB9O1xuICAgIGxhc3RSZXF1ZXN0SWQ6IG51bWJlcjtcbiAgICBfbmV4dFJlcXVlc3RJZDogbnVtYmVyO1xuICAgIC8qKiBUT0RPOiBDaGFuZ2UgYW55ID0+IHNldFRpbWVvdXQgcmV0dXJuIHR5cGUuIERpZmZlcmVudCBiZXR3ZWVuIE5vZGUgYW5kIGJyb3dzZXIuLi4gKi9cbiAgICBfdGltZW91dElkOiBhbnk7XG4gICAgbG9hZENvdW50ZXI6IG51bWJlcjtcbiAgICBfbGFzdFJlcXVlc3Rab29tOiBudW1iZXI7XG4gIH07XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBhbGwgYXN5bmMgcmVzb3VyY2VzIGFyZSBsb2FkZWQgKi9cbiAgZ2V0IGlzTG9hZGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRyYWNrIHRoZSBleHBsaWNpdCBsb2FkaW5nIGRvbmUgYnkgdGhpcyBsYXllclxuICAgIHJldHVybiBCb29sZWFuKHRoaXMuc3RhdGUpICYmIHRoaXMuc3RhdGUubG9hZENvdW50ZXIgPT09IDAgJiYgc3VwZXIuaXNMb2FkZWQ7XG4gIH1cblxuICAvKiogTGV0cyBkZWNrLmdsIGtub3cgdGhhdCB3ZSB3YW50IHZpZXdwb3J0IGNoYW5nZSBldmVudHMgKi9cbiAgb3ZlcnJpZGUgc2hvdWxkVXBkYXRlU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvdmVycmlkZSBpbml0aWFsaXplU3RhdGUoKTogdm9pZCB7XG4gICAgLy8gaW50ZW50aW9uYWxseSBlbXB0eSwgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBpbiB1cGRhdGVTdGF0ZVxuICAgIHRoaXMuc3RhdGUuX25leHRSZXF1ZXN0SWQgPSAwO1xuICAgIHRoaXMuc3RhdGUubGFzdFJlcXVlc3RJZCA9IC0xO1xuICAgIHRoaXMuc3RhdGUubG9hZENvdW50ZXIgPSAwO1xuICAgIHRoaXMuc3RhdGUuX2xhc3RSZXF1ZXN0Wm9vbSA9IC0xO1xuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlU3RhdGUoe2NoYW5nZUZsYWdzLCBwcm9wcywgb2xkUHJvcHN9OiBVcGRhdGVQYXJhbWV0ZXJzPHRoaXM+KTogdm9pZCB7XG4gICAgY29uc3Qge3ZpZXdwb3J0fSA9IHRoaXMuY29udGV4dDtcblxuICAgIC8vIENoZWNrIGlmIGRhdGEgc291cmNlIGhhcyBjaGFuZ2VkXG4gICAgaWYgKGNoYW5nZUZsYWdzLmRhdGFDaGFuZ2VkIHx8IHByb3BzLnNlcnZpY2VUeXBlICE9PSBvbGRQcm9wcy5zZXJ2aWNlVHlwZSkge1xuICAgICAgdGhpcy5zdGF0ZS5pbWFnZVNvdXJjZSA9IHRoaXMuX2NyZWF0ZUltYWdlU291cmNlKHByb3BzKTtcblxuICAgICAgdGhpcy5fbG9hZE1ldGFkYXRhKCk7XG4gICAgICB0aGlzLmRlYm91bmNlKCgpID0+IHRoaXMubG9hZEltYWdlKHZpZXdwb3J0LCAnaW1hZ2Ugc291cmNlIGNoYW5nZWQnKSwgMCk7XG4gICAgfSBlbHNlIGlmICghZGVlcEVxdWFsKHByb3BzLmxheWVycywgb2xkUHJvcHMubGF5ZXJzLCAxKSkge1xuICAgICAgdGhpcy5kZWJvdW5jZSgoKSA9PiB0aGlzLmxvYWRJbWFnZSh2aWV3cG9ydCwgJ2xheWVycyBjaGFuZ2VkJyksIDApO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkKSB7XG4gICAgICAvLyBDaGVjayBpZiBwcmVzZXJ2ZURyYXdpbmdCdWZmZXIgaXMgZW5hYmxlZCAoaW5kaWNhdGVzIHZpZGVvIHJlY29yZGluZyBvciBpbWFnZSBleHBvcnQpXG4gICAgICAvLyBVc2UgbWluaW1hbCBkZWJvdW5jZSAoMTBtcykgZHVyaW5nIGV4cG9ydCBmb3IgcmVzcG9uc2l2ZSBmcmFtZSBjYXB0dXJlXG4gICAgICAvLyBSZXF1ZXN0IGRlZHVwbGljYXRpb24gaW4gbG9hZEltYWdlIHByZXZlbnRzIHNwYW0gZnJvbSByZWR1bmRhbnQgdmlld3BvcnQgdXBkYXRlc1xuICAgICAgY29uc3QgZ2wgPSB0aGlzLmNvbnRleHQuZ2w7XG4gICAgICBjb25zdCBpc1ByZXNlcnZpbmdCdWZmZXIgPSBnbD8uZ2V0Q29udGV4dEF0dHJpYnV0ZXM/LigpPy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXI7XG5cbiAgICAgIGNvbnN0IGRlYm91bmNlRGVsYXkgPSBpc1ByZXNlcnZpbmdCdWZmZXIgPyAxMCA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZGVib3VuY2UoKCkgPT4gdGhpcy5sb2FkSW1hZ2Uodmlld3BvcnQsICd2aWV3cG9ydCBjaGFuZ2VkJyksIGRlYm91bmNlRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHJlbmRlckxheWVycygpOiBMYXllcjxhbnk+IHtcbiAgICBjb25zdCB7Ym91bmRzLCBpbWFnZSwgbGFzdFJlcXVlc3RQYXJhbWV0ZXJzfSA9IHRoaXMuc3RhdGU7XG5cbiAgICByZXR1cm4gKFxuICAgICAgaW1hZ2UgJiZcbiAgICAgIG5ldyBCaXRtYXBMYXllcih7XG4gICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7aWQ6ICdiaXRtYXAnfSksXG4gICAgICAgIF9pbWFnZUNvb3JkaW5hdGVTeXN0ZW06XG4gICAgICAgICAgbGFzdFJlcXVlc3RQYXJhbWV0ZXJzLnNycyA9PT0gJ0VQU0c6NDMyNidcbiAgICAgICAgICAgID8gQ09PUkRJTkFURV9TWVNURU0uTE5HTEFUXG4gICAgICAgICAgICA6IENPT1JESU5BVEVfU1lTVEVNLkNBUlRFU0lBTixcbiAgICAgICAgYm91bmRzLFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgcGlja2FibGU6IHRoaXMucHJvcHMucGlja2FibGVcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZlYXR1cmVJbmZvVGV4dCh4OiBudW1iZXIsIHk6IG51bWJlcik6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGNvbnN0IHtsYXN0UmVxdWVzdFBhcmFtZXRlcnN9ID0gdGhpcy5zdGF0ZTtcbiAgICBpZiAobGFzdFJlcXVlc3RQYXJhbWV0ZXJzKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFVuZG9jdW1lbnRlZCBtZXRob2RcbiAgICAgIGNvbnN0IGZlYXR1cmVJbmZvID0gYXdhaXQgdGhpcy5zdGF0ZS5pbWFnZVNvdXJjZS5nZXRGZWF0dXJlSW5mb1RleHQ/Lih7XG4gICAgICAgIC4uLmxhc3RSZXF1ZXN0UGFyYW1ldGVycyxcbiAgICAgICAgcXVlcnlfbGF5ZXJzOiBsYXN0UmVxdWVzdFBhcmFtZXRlcnMubGF5ZXJzLFxuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBpbmZvX2Zvcm1hdDogJ2FwcGxpY2F0aW9uL3ZuZC5vZ2MuZ21sJ1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmVhdHVyZUluZm87XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIF9jcmVhdGVJbWFnZVNvdXJjZShwcm9wczogV01TTGF5ZXJQcm9wcyk6IEltYWdlU291cmNlIHtcbiAgICBpZiAocHJvcHMuZGF0YSBpbnN0YW5jZW9mIEltYWdlU291cmNlKSB7XG4gICAgICByZXR1cm4gcHJvcHMuZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbmV3IFdNU0ltYWdlU291cmNlKHByb3BzLmRhdGEsIHtcbiAgICAgICAgbG9hZE9wdGlvbnM6IHByb3BzLmxvYWRPcHRpb25zXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaW1hZ2Ugc291cmNlIGluIHByb3BzLmRhdGEnKTtcbiAgfVxuXG4gIC8qKiBSdW4gYSBnZXRNZXRhZGF0YSBvbiB0aGUgaW1hZ2Ugc2VydmljZSAqL1xuICBhc3luYyBfbG9hZE1ldGFkYXRhKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtpbWFnZVNvdXJjZX0gPSB0aGlzLnN0YXRlO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0YXRlLmxvYWRDb3VudGVyKys7XG4gICAgICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGltYWdlU291cmNlLmdldE1ldGFkYXRhKCk7XG5cbiAgICAgIC8vIElmIGEgcmVxdWVzdCB0YWtlcyBhIGxvbmcgdGltZSwgaXQgbWF5IG5vIGxvbmdlciBiZSBleHBlY3RlZFxuICAgICAgaWYgKHRoaXMuc3RhdGUuaW1hZ2VTb3VyY2UgPT09IGltYWdlU291cmNlKSB7XG4gICAgICAgIHRoaXMuZ2V0Q3VycmVudExheWVyKCk/LnByb3BzLm9uTWV0YWRhdGFMb2FkKG1ldGFkYXRhKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5nZXRDdXJyZW50TGF5ZXIoKT8ucHJvcHMub25NZXRhZGF0YUxvYWRFcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc3RhdGUubG9hZENvdW50ZXItLTtcbiAgICB9XG4gIH1cblxuICAvKiogTG9hZCBhbiBpbWFnZSAqL1xuICBhc3luYyBsb2FkSW1hZ2Uodmlld3BvcnQ6IFZpZXdwb3J0LCBfcmVhc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7bGF5ZXJzLCBzZXJ2aWNlVHlwZSwgdHJhbnNwYXJlbnR9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFRPRE8gLSBtb3ZlIHRvIEltYWdlU291cmNlP1xuICAgIGlmIChzZXJ2aWNlVHlwZSA9PT0gJ3dtcycgJiYgbGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJvdW5kcyA9IHZpZXdwb3J0LmdldEJvdW5kcygpO1xuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IHZpZXdwb3J0O1xuICAgIGxldCB7c3JzfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKHNycyA9PT0gJ2F1dG8nKSB7XG4gICAgICAvLyBCaXRtYXBMYXllciBvbmx5IHN1cHBvcnRzIExOR0xBVCBvciBDQVJURVNJQU4gKFdlYi1NZXJjYXRvcilcbiAgICAgIHNycyA9IHZpZXdwb3J0LnJlc29sdXRpb24gPyAnRVBTRzo0MzI2JyA6ICdFUFNHOjM4NTcnO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0UGFyYW1zID0ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICAvLyBUT0RPOiByZW1vdmUgYmJveCBvbmNlIGRlY2suZ2wgaXMgdXBncmFkZWQgdG8gXjguMTAgd2l0aCBsb2FkZXJzLmdsIF40XG4gICAgICBiYm94OiBib3VuZHMsXG4gICAgICBib3VuZGluZ0JveDogW1xuICAgICAgICBbYm91bmRzWzBdLCBib3VuZHNbMV1dLFxuICAgICAgICBbYm91bmRzWzJdLCBib3VuZHNbM11dXG4gICAgICBdIGFzIFtbbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXJdXSxcbiAgICAgIGxheWVycyxcbiAgICAgIHNycyxcbiAgICAgIHRyYW5zcGFyZW50XG4gICAgfTtcbiAgICBpZiAoc3JzID09PSAnRVBTRzozODU3Jykge1xuICAgICAgY29uc3QgW21pblgsIG1pblldID0gV0dTODRUb1BzZXVkb01lcmNhdG9yKFtib3VuZHNbMF0sIGJvdW5kc1sxXV0pO1xuICAgICAgY29uc3QgW21heFgsIG1heFldID0gV0dTODRUb1BzZXVkb01lcmNhdG9yKFtib3VuZHNbMl0sIGJvdW5kc1szXV0pO1xuICAgICAgcmVxdWVzdFBhcmFtcy5ib3VuZGluZ0JveCA9IFtcbiAgICAgICAgW21pblgsIG1pblldLFxuICAgICAgICBbbWF4WCwgbWF4WV1cbiAgICAgIF07XG4gICAgICAvLyBUT0RPOiByZW1vdmUgYmJveCBvbmNlIGRlY2suZ2wgaXMgdXBncmFkZWQgdG8gXjguMTAgd2l0aCBsb2FkZXJzLmdsIF40XG4gICAgICByZXF1ZXN0UGFyYW1zLmJib3ggPSBbbWluWCwgbWluWSwgbWF4WCwgbWF4WV07XG4gICAgfVxuXG4gICAgLy8gU2tpcCByZXF1ZXN0IGlmIHBhcmFtZXRlcnMgaGF2ZW4ndCBtZWFuaW5nZnVsbHkgY2hhbmdlZFxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUubGFzdFJlcXVlc3RQYXJhbWV0ZXJzICYmXG4gICAgICB0aGlzLl9hcmVSZXF1ZXN0UGFyYW1zRXF1YWwodGhpcy5zdGF0ZS5sYXN0UmVxdWVzdFBhcmFtZXRlcnMsIHJlcXVlc3RQYXJhbXMpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRHVyaW5nIHZpZGVvIGV4cG9ydCwgdGhyb3R0bGUgem9vbS1pbiByZXF1ZXN0cyB0byBvbmx5IGZpcmUgb24gem9vbSBsZXZlbCBjcm9zc2luZ3MuXG4gICAgLy8gVGhlIGV4aXN0aW5nIGltYWdlIGlzIHN0cmV0Y2hlZCBieSB0aGUgQml0bWFwTGF5ZXIgdW50aWwgdGhlIG5leHQgbGV2ZWwgaXMgcmVhY2hlZC5cbiAgICBjb25zdCBnbCA9IHRoaXMuY29udGV4dC5nbDtcbiAgICBjb25zdCBpc0V4cG9ydGluZyA9IGdsPy5nZXRDb250ZXh0QXR0cmlidXRlcz8uKCk/LnByZXNlcnZlRHJhd2luZ0J1ZmZlcjtcbiAgICBpZiAoaXNFeHBvcnRpbmcgJiYgdGhpcy5zdGF0ZS5fbGFzdFJlcXVlc3Rab29tID49IDApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRab29tID0gdmlld3BvcnQuem9vbTtcbiAgICAgIGNvbnN0IGxhc3Rab29tID0gdGhpcy5zdGF0ZS5fbGFzdFJlcXVlc3Rab29tO1xuICAgICAgY29uc3QgaXNab29taW5nSW4gPSBjdXJyZW50Wm9vbSA+IGxhc3Rab29tO1xuICAgICAgaWYgKGlzWm9vbWluZ0luICYmIE1hdGguZmxvb3IoY3VycmVudFpvb20pID09PSBNYXRoLmZsb29yKGxhc3Rab29tKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGxhc3RSZXF1ZXN0UGFyYW1ldGVycyBCRUZPUkUgbWFraW5nIHRoZSByZXF1ZXN0IHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zXG4gICAgLy8gd2hlcmUgbXVsdGlwbGUgZGVib3VuY2VkIGNhbGxzIHNlZSB0aGUgc2FtZSBvbGQgcGFyYW1ldGVycyBhbmQgYWxsIHByb2NlZWRcbiAgICB0aGlzLnN0YXRlLmxhc3RSZXF1ZXN0UGFyYW1ldGVycyA9IHJlcXVlc3RQYXJhbXM7XG4gICAgdGhpcy5zdGF0ZS5fbGFzdFJlcXVlc3Rab29tID0gdmlld3BvcnQuem9vbTtcblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMuZ2V0UmVxdWVzdElkKCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RhdGUubG9hZENvdW50ZXIrKztcbiAgICAgIHRoaXMucHJvcHMub25JbWFnZUxvYWRTdGFydChyZXF1ZXN0SWQpO1xuXG4gICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuc3RhdGUuaW1hZ2VTb3VyY2UuZ2V0SW1hZ2UocmVxdWVzdFBhcmFtcyk7XG5cbiAgICAgIC8vIElmIGEgcmVxdWVzdCB0YWtlcyBhIGxvbmcgdGltZSwgbGF0ZXIgcmVxdWVzdHMgbWF5IGhhdmUgYWxyZWFkeSBsb2FkZWQuXG4gICAgICBpZiAodGhpcy5zdGF0ZS5sYXN0UmVxdWVzdElkIDwgcmVxdWVzdElkKSB7XG4gICAgICAgIHRoaXMuZ2V0Q3VycmVudExheWVyKCk/LnByb3BzLm9uSW1hZ2VMb2FkKHJlcXVlc3RJZCk7XG4gICAgICAgIC8vIE5vdCB0eXBlIHNhZmUuLi5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaW1hZ2UsXG4gICAgICAgICAgYm91bmRzLFxuICAgICAgICAgIGxhc3RSZXF1ZXN0SWQ6IHJlcXVlc3RJZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jb250ZXh0Lm9uRXJyb3I/LihlcnJvciBhcyBFcnJvciwgdGhpcyk7XG4gICAgICB0aGlzLmdldEN1cnJlbnRMYXllcigpPy5wcm9wcy5vbkltYWdlTG9hZEVycm9yKHJlcXVlc3RJZCwgZXJyb3IgYXMgRXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnN0YXRlLmxvYWRDb3VudGVyLS07XG4gICAgfVxuICB9XG5cbiAgLy8gSEVMUEVSU1xuXG4gIC8qKiBHbG9iYWwgY291bnRlciBmb3IgaXNzdWluZyB1bmlxdWUgcmVxdWVzdCBpZHMgKi9cbiAgcHJpdmF0ZSBnZXRSZXF1ZXN0SWQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5fbmV4dFJlcXVlc3RJZCsrO1xuICB9XG5cbiAgLyoqIFJ1bnMgYW4gYWN0aW9uIGluIHRoZSBmdXR1cmUsIGNhbmNlbHMgaXQgaWYgdGhlIG5ldyBhY3Rpb24gaXMgaXNzdWVkIGJlZm9yZSBpdCBleGVjdXRlcyAqL1xuICBwcml2YXRlIGRlYm91bmNlKGZuOiAoKSA9PiB2b2lkLCBtcyA9IDUwMCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXRlLl90aW1lb3V0SWQpO1xuICAgIHRoaXMuc3RhdGUuX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gZm4oKSwgbXMpO1xuICB9XG5cbiAgLyoqIENvbXBhcmUgcmVxdWVzdCBwYXJhbWV0ZXJzIHRvIGRldGVybWluZSBpZiBhIG5ldyByZXF1ZXN0IGlzIG5lZWRlZCAqL1xuICBwcml2YXRlIF9hcmVSZXF1ZXN0UGFyYW1zRXF1YWwocHJldjogYW55LCBuZXh0OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBDb21wYXJlIGRpbWVuc2lvbnNcbiAgICBpZiAocHJldi53aWR0aCAhPT0gbmV4dC53aWR0aCB8fCBwcmV2LmhlaWdodCAhPT0gbmV4dC5oZWlnaHQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDb21wYXJlIFNSU1xuICAgIGlmIChwcmV2LnNycyAhPT0gbmV4dC5zcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDb21wYXJlIGxheWVyc1xuICAgIGlmICghZGVlcEVxdWFsKHByZXYubGF5ZXJzLCBuZXh0LmxheWVycykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDb21wYXJlIHRyYW5zcGFyZW50XG4gICAgaWYgKHByZXYudHJhbnNwYXJlbnQgIT09IG5leHQudHJhbnNwYXJlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDb21wYXJlIGJvdW5kcyB3aXRoIHRvbGVyYW5jZSBmb3IgZmxvYXRpbmcgcG9pbnQgcHJlY2lzaW9uXG4gICAgY29uc3QgdG9sZXJhbmNlID0gMWUtMTA7XG4gICAgY29uc3QgcHJldkJib3ggPSBwcmV2LmJib3g7XG4gICAgY29uc3QgbmV4dEJib3ggPSBuZXh0LmJib3g7XG5cbiAgICBpZiAocHJldkJib3ggJiYgbmV4dEJib3gpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhwcmV2QmJveFtpXSAtIG5leHRCYm94W2ldKSA+IHRvbGVyYW5jZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZXBzZy5pby8zODU3XG4vLyArcHJvaj1tZXJjICthPTYzNzgxMzcgK2I9NjM3ODEzNyArbGF0X3RzPTAgK2xvbl8wPTAgK3hfMD0wICt5XzA9MCAraz0xICt1bml0cz1tICtuYWRncmlkcz1AbnVsbCArd2t0ZXh0ICtub19kZWZzICt0eXBlPWNyc1xuY29uc3QgSEFMRl9FQVJUSF9DSVJDVU1GRVJFTkNFID0gNjM3ODEzNyAqIE1hdGguUEk7XG5cbi8qKiBQcm9qZWN0cyBFUFNHOjQzMjYgdG8gRVBTRzozODU3XG4gKiBUaGlzIGlzIGEgbGlnaHR3ZWlnaHQgcmVwbGFjZW1lbnQgb2YgcHJvajQuIFVzZSB0ZXN0cyB0byBlbnN1cmUgY29uZm9ybWFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBXR1M4NFRvUHNldWRvTWVyY2F0b3IoY29vcmQ6IFtudW1iZXIsIG51bWJlcl0pOiBbbnVtYmVyLCBudW1iZXJdIHtcbiAgY29uc3QgbWVyY2F0b3IgPSBsbmdMYXRUb1dvcmxkKGNvb3JkKTtcbiAgbWVyY2F0b3JbMF0gPSAobWVyY2F0b3JbMF0gLyAyNTYgLSAxKSAqIEhBTEZfRUFSVEhfQ0lSQ1VNRkVSRU5DRTtcbiAgbWVyY2F0b3JbMV0gPSAobWVyY2F0b3JbMV0gLyAyNTYgLSAxKSAqIEhBTEZfRUFSVEhfQ0lSQ1VNRkVSRU5DRTtcbiAgcmV0dXJuIG1lcmNhdG9yO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxZQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxLQUFBLEdBQUFELE9BQUE7QUFVQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxJQUFBLEdBQUFILE9BQUE7QUFBNEQsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEs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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/deckgl-layers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.6",
4
+ "version": "3.3.0-alpha.1",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,27 +30,29 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@danmarshall/deckgl-typings": "4.9.22",
34
- "@deck.gl/aggregation-layers": "^8.9.27",
35
- "@deck.gl/core": "^8.9.27",
36
- "@deck.gl/geo-layers": "^8.9.27",
37
- "@deck.gl/layers": "^8.9.27",
38
- "@kepler.gl/constants": "3.2.6",
39
- "@kepler.gl/types": "3.2.6",
40
- "@kepler.gl/utils": "3.2.6",
41
- "@loaders.gl/wms": "4.3.2",
42
- "@luma.gl/constants": "^8.5.20",
43
- "@luma.gl/core": "^8.5.20",
33
+ "@deck.gl/aggregation-layers": "^9.3.1",
34
+ "@deck.gl/core": "^9.3.1",
35
+ "@deck.gl/geo-layers": "^9.3.1",
36
+ "@deck.gl/layers": "^9.3.1",
37
+ "@kepler.gl/constants": "3.3.0-alpha.1",
38
+ "@kepler.gl/types": "3.3.0-alpha.1",
39
+ "@kepler.gl/utils": "3.3.0-alpha.1",
40
+ "@loaders.gl/wms": "4.4.1",
41
+ "@luma.gl/constants": "^9.3.2",
42
+ "@luma.gl/core": "^9.3.2",
43
+ "@luma.gl/engine": "^9.3.2",
44
+ "@luma.gl/shadertools": "^9.3.2",
45
+ "@luma.gl/webgl": "^9.3.2",
44
46
  "@mapbox/geo-viewport": "^0.4.1",
45
47
  "@mapbox/vector-tile": "^1.3.1",
46
- "@math.gl/web-mercator": "^3.6.2",
48
+ "@math.gl/web-mercator": "^4.1.0",
47
49
  "@types/d3-array": "^2.8.0",
48
50
  "@types/geojson": "^7946.0.8",
49
51
  "@types/lodash": "4.17.5",
50
52
  "@types/supercluster": "^7.1.0",
51
53
  "d3-array": "^2.8.0",
52
54
  "global": "^4.3.0",
53
- "lodash": "4.17.21",
55
+ "lodash": "4.17.23",
54
56
  "pbf": "^3.1.0",
55
57
  "supercluster": "^7.1.0",
56
58
  "viewport-mercator-project": "^6.0.0"
@@ -61,13 +63,15 @@
61
63
  },
62
64
  "maintainers": [
63
65
  "Shan He <heshan0131@gmail.com>",
64
- "Giuseppe Macri <gmacri@uber.com>"
66
+ "Giuseppe Macri <gmacri@uber.com>",
67
+ "Igor Dykhta <dikhta.igor@gmail.com>",
68
+ "Xun Li <lixun910@gmail.com>"
65
69
  ],
66
70
  "engines": {
67
- "node": ">=18"
71
+ "node": ">=20"
68
72
  },
69
73
  "volta": {
70
- "node": "18.18.2",
74
+ "node": "20.19.3",
71
75
  "yarn": "4.4.0"
72
76
  },
73
77
  "packageManager": "yarn@4.4.0"