@kepler.gl/reducers 3.3.0-alpha.14 → 3.3.0-alpha.16

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.
@@ -4,18 +4,23 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.TOOLTIP_MINUS_SIGN = exports.NEGATIVE_SIGNS = exports.BRUSH_CONFIG = void 0;
7
+ exports.ZOOM_OPACITY_RANGE = exports.TOOLTIP_MINUS_SIGN = exports.NEGATIVE_SIGNS = exports.DEFAULT_ZOOM_OPACITY_STOPS = exports.BRUSH_CONFIG = void 0;
8
+ exports.combineZoomOpacityControllers = combineZoomOpacityControllers;
8
9
  exports.findFieldsToShow = findFieldsToShow;
10
+ exports.getLayerZoomOpacityFactor = getLayerZoomOpacityFactor;
9
11
  exports.getTooltipDisplayDeltaValue = getTooltipDisplayDeltaValue;
10
12
  exports.getTooltipDisplayValue = getTooltipDisplayValue;
13
+ exports.removeLayerFromZoomOpacity = removeLayerFromZoomOpacity;
14
+ exports.setZoomOpacityStop = setZoomOpacityStop;
15
+ exports.zoomOpacityFactor = zoomOpacityFactor;
11
16
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
12
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
18
  var _constants = require("@kepler.gl/constants");
14
19
  var _utils = require("@kepler.gl/utils");
15
20
  var _commonUtils = require("@kepler.gl/common-utils");
16
- // SPDX-License-Identifier: MIT
21
+ 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
+ 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; } // SPDX-License-Identifier: MIT
17
23
  // Copyright contributors to the kepler.gl project
18
-
19
24
  /**
20
25
  * Minus sign used in tooltip formatting.
21
26
  * \u2212 or \u002D is the minus sign that d3-format uses for decimal number formatting
@@ -112,4 +117,151 @@ function getTooltipDisplayValue(_ref7) {
112
117
  }
113
118
  return item !== null && item !== void 0 && item.format ? (0, _utils.getFormatter)(item === null || item === void 0 ? void 0 : item.format, field)(value) : field.displayFormat ? (0, _utils.getFormatter)(field.displayFormat, field)(value) : (0, _utils.parseFieldValue)(value, field.type);
114
119
  }
115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIlRPT0xUSVBfTUlOVVNfU0lHTiIsImV4cG9ydHMiLCJORUdBVElWRV9TSUdOUyIsIkJSVVNIX0NPTkZJRyIsInJhbmdlIiwiZmluZEZpZWxkc1RvU2hvdyIsIl9yZWYiLCJmaWVsZHMiLCJpZCIsIm1heERlZmF1bHRUb29sdGlwcyIsImZpZWxkc1RvU2hvdyIsIkRFRkFVTFRfVE9PTFRJUF9GSUVMRFMiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsImZpbmQiLCJfcmVmMiIsIm5hbWUiLCJwdXNoIiwiX2RlZmluZVByb3BlcnR5MiIsImxlbmd0aCIsImF1dG9GaW5kVG9vbHRpcEZpZWxkcyIsInB0RmllbGRzIiwiX21lcmdlRmllbGRQYWlycyIsIlRSSVBfUE9JTlRfRklFTERTIiwiZmlsdGVyIiwiX3JlZjQiLCJ0eXBlIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpdCIsImV2ZXJ5Iiwic2VnIiwiaW5jbHVkZXMiLCJBTExfRklFTERfVFlQRVMiLCJnZW9qc29uIiwiZ2VvYXJyb3ciLCJzbGljZSIsIm1hcCIsIl9yZWY1IiwiZm9ybWF0IiwiZ2V0RGVmYXVsdFRvb2x0aXBGb3JtYXQiLCJ0aW1lc3RhbXAiLCJUT09MVElQX0ZPUk1BVFMiLCJEQVRFX1RJTUVfTF9MVFMiLCJUT09MVElQX0tFWSIsImRhdGUiLCJEQVRFX0wiLCJwYWlycyIsInBhaXIiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZ2V0VG9vbHRpcERpc3BsYXlEZWx0YVZhbHVlIiwiX3JlZjYiLCJmaWVsZCIsInZhbHVlIiwicHJpbWFyeVZhbHVlIiwiY29tcGFyZVR5cGUiLCJkaXNwbGF5RGVsdGFWYWx1ZSIsImludGVnZXIiLCJyZWFsIiwiaXNOdW1iZXIiLCJkZWx0YVZhbHVlIiwiQ09NUEFSRV9UWVBFUyIsIlJFTEFUSVZFIiwiZGVsdGFGb3JtYXQiLCJERUNJTUFMX1BFUkNFTlRfRlVMTF8yIiwiZGlzcGxheUZvcm1hdCIsIkRFQ0lNQUxfREVDSU1BTF9GSVhFRF8zIiwiZ2V0Rm9ybWF0dGVyIiwiZGVmYXVsdEZvcm1hdHRlciIsImRlbHRhRmlyc3RDaGFyIiwiY2hhckF0IiwiZ2V0VG9vbHRpcERpc3BsYXlWYWx1ZSIsIl9yZWY3IiwiaXRlbSIsIm5vdE51bGxvclVuZGVmaW5lZCIsInBhcnNlRmllbGRWYWx1ZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcmFjdGlvbi11dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1xuICBERUZBVUxUX1RPT0xUSVBfRklFTERTLFxuICBBTExfRklFTERfVFlQRVMsXG4gIFRSSVBfUE9JTlRfRklFTERTLFxuICBUT09MVElQX0ZPUk1BVFMsXG4gIFRPT0xUSVBfS0VZLFxuICBDT01QQVJFX1RZUEVTXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtGaWVsZCwgVG9vbHRpcEZpZWxkLCBDb21wYXJlVHlwZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge3BhcnNlRmllbGRWYWx1ZSwgZ2V0Rm9ybWF0dGVyLCBpc051bWJlciwgZGVmYXVsdEZvcm1hdHRlcn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5pbXBvcnQge25vdE51bGxvclVuZGVmaW5lZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuXG4vKipcbiAqIE1pbnVzIHNpZ24gdXNlZCBpbiB0b29sdGlwIGZvcm1hdHRpbmcuXG4gKiBcXHUyMjEyIG9yIFxcdTAwMkQgaXMgdGhlIG1pbnVzIHNpZ24gdGhhdCBkMy1mb3JtYXQgdXNlcyBmb3IgZGVjaW1hbCBudW1iZXIgZm9ybWF0dGluZ1xuICogZDMtZm9ybWF0IDIuMCB1c2VzIFxcdTAwMkRcbiAqL1xuZXhwb3J0IGNvbnN0IFRPT0xUSVBfTUlOVVNfU0lHTiA9ICdcXHUyMjEyJztcbi8vIGJvdGggYXJlIHBvc2libGUgbmVnYXRpdmUgc2lnbnNcbmV4cG9ydCBjb25zdCBORUdBVElWRV9TSUdOUyA9IFsnXFx1MDAyRCcsICdcXHUyMjEyJ107XG5cbmV4cG9ydCBjb25zdCBCUlVTSF9DT05GSUc6IHtcbiAgcmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG59ID0ge1xuICByYW5nZTogWzAsIDUwXVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRGaWVsZHNUb1Nob3coe1xuICBmaWVsZHMsXG4gIGlkLFxuICBtYXhEZWZhdWx0VG9vbHRpcHNcbn06IHtcbiAgZmllbGRzOiBGaWVsZFtdO1xuICBpZDogc3RyaW5nO1xuICBtYXhEZWZhdWx0VG9vbHRpcHM6IG51bWJlcjtcbn0pOiB7XG4gIFtrZXk6IHN0cmluZ106IFRvb2x0aXBGaWVsZFtdO1xufSB7XG4gIC8vIGZpcnN0IGZpbmQgZGVmYXVsdCB0b29sdGlwIGZpZWxkcyBmb3IgdHJpcHNcbiAgY29uc3QgZmllbGRzVG9TaG93ID0gREVGQVVMVF9UT09MVElQX0ZJRUxEUy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcbiAgICBpZiAoZmllbGRzLmZpbmQoKHtuYW1lfSkgPT4gY3Vyci5uYW1lID09PSBuYW1lKSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcHJldi5wdXNoKGN1cnIpO1xuICAgIH1cbiAgICByZXR1cm4gcHJldjtcbiAgfSwgW10pO1xuXG4gIHJldHVybiB7XG4gICAgW2lkXTogZmllbGRzVG9TaG93Lmxlbmd0aCA/IGZpZWxkc1RvU2hvdyA6IGF1dG9GaW5kVG9vbHRpcEZpZWxkcyhmaWVsZHMsIG1heERlZmF1bHRUb29sdGlwcylcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXV0b0ZpbmRUb29sdGlwRmllbGRzKGZpZWxkcywgbWF4RGVmYXVsdFRvb2x0aXBzKSB7XG4gIGNvbnN0IHB0RmllbGRzID0gX21lcmdlRmllbGRQYWlycyhUUklQX1BPSU5UX0ZJRUxEUyk7XG4gIC8vIGZpbHRlciBvdXQgdGhlIGRlZmF1bHQgZmllbGRzIHRoYXQgY29udGFpbnMgbGF0IGFuZCBsbmcgYW5kIGFueSBnZW9tZXRyeVxuICBjb25zdCBmaWVsZHNUb1Nob3cgPSBmaWVsZHMuZmlsdGVyKFxuICAgICh7bmFtZSwgdHlwZX0pID0+XG4gICAgICBuYW1lXG4gICAgICAgIC5yZXBsYWNlKC9bXywuXSsvZywgJyAnKVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnICcpXG4gICAgICAgIC5ldmVyeShzZWcgPT4gIXB0RmllbGRzLmluY2x1ZGVzKHNlZykpICYmXG4gICAgICB0eXBlICE9PSBBTExfRklFTERfVFlQRVMuZ2VvanNvbiAmJlxuICAgICAgdHlwZSAhPT0gQUxMX0ZJRUxEX1RZUEVTLmdlb2Fycm93ICYmXG4gICAgICB0eXBlICE9PSAnb2JqZWN0J1xuICApO1xuXG4gIHJldHVybiBmaWVsZHNUb1Nob3cuc2xpY2UoMCwgbWF4RGVmYXVsdFRvb2x0aXBzKS5tYXAoKHtuYW1lLCB0eXBlfSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgZm9ybWF0OiBnZXREZWZhdWx0VG9vbHRpcEZvcm1hdCh0eXBlKVxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0VG9vbHRpcEZvcm1hdCh0eXBlPzogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmICh0eXBlID09PSBBTExfRklFTERfVFlQRVMudGltZXN0YW1wKSB7XG4gICAgcmV0dXJuIFRPT0xUSVBfRk9STUFUUy5EQVRFX1RJTUVfTF9MVFNbVE9PTFRJUF9LRVldO1xuICB9XG4gIGlmICh0eXBlID09PSBBTExfRklFTERfVFlQRVMuZGF0ZSkge1xuICAgIHJldHVybiBUT09MVElQX0ZPUk1BVFMuREFURV9MW1RPT0xUSVBfS0VZXTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gX21lcmdlRmllbGRQYWlycyhwYWlycykge1xuICByZXR1cm4gcGFpcnMucmVkdWNlKChwcmV2LCBwYWlyKSA9PiBbLi4ucHJldiwgLi4ucGFpcl0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvb2x0aXBEaXNwbGF5RGVsdGFWYWx1ZSh7XG4gIGZpZWxkLFxuICB2YWx1ZSxcbiAgcHJpbWFyeVZhbHVlLFxuICBjb21wYXJlVHlwZVxufToge1xuICBmaWVsZDogRmllbGQ7XG4gIHZhbHVlOiBhbnk7XG4gIHByaW1hcnlWYWx1ZTogYW55O1xuICBjb21wYXJlVHlwZT86IENvbXBhcmVUeXBlO1xufSk6IHN0cmluZyB8IG51bGwge1xuICBsZXQgZGlzcGxheURlbHRhVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGlmIChcbiAgICAvLyBjb21wYXJpc29uIG1vZGUgb25seSB3b3JrcyBmb3IgbnVtZXJpYyBmaWVsZFxuICAgIGZpZWxkLnR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyIHx8XG4gICAgZmllbGQudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLnJlYWxcbiAgKSB7XG4gICAgaWYgKGlzTnVtYmVyKHByaW1hcnlWYWx1ZSkgJiYgaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCBkZWx0YVZhbHVlID1cbiAgICAgICAgY29tcGFyZVR5cGUgPT09IENPTVBBUkVfVFlQRVMuUkVMQVRJVkUgPyB2YWx1ZSAvIHByaW1hcnlWYWx1ZSAtIDEgOiB2YWx1ZSAtIHByaW1hcnlWYWx1ZTtcbiAgICAgIGNvbnN0IGRlbHRhRm9ybWF0ID1cbiAgICAgICAgY29tcGFyZVR5cGUgPT09IENPTVBBUkVfVFlQRVMuUkVMQVRJVkVcbiAgICAgICAgICA/IFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX1BFUkNFTlRfRlVMTF8yW1RPT0xUSVBfS0VZXVxuICAgICAgICAgIDogZmllbGQuZGlzcGxheUZvcm1hdCB8fCBUT09MVElQX0ZPUk1BVFMuREVDSU1BTF9ERUNJTUFMX0ZJWEVEXzNbVE9PTFRJUF9LRVldO1xuXG4gICAgICBkaXNwbGF5RGVsdGFWYWx1ZSA9IGdldEZvcm1hdHRlcihkZWx0YUZvcm1hdCwgZmllbGQpKGRlbHRhVmFsdWUpO1xuXG4gICAgICAvLyBzYWZlbHkgY2FzdCBzdHJpbmdcbiAgICAgIGRpc3BsYXlEZWx0YVZhbHVlID0gZGVmYXVsdEZvcm1hdHRlcihkaXNwbGF5RGVsdGFWYWx1ZSk7XG4gICAgICBjb25zdCBkZWx0YUZpcnN0Q2hhciA9IGRpc3BsYXlEZWx0YVZhbHVlLmNoYXJBdCgwKTtcblxuICAgICAgaWYgKGRlbHRhRmlyc3RDaGFyICE9PSAnKycgJiYgIU5FR0FUSVZFX1NJR05TLmluY2x1ZGVzKGRlbHRhRmlyc3RDaGFyKSkge1xuICAgICAgICBkaXNwbGF5RGVsdGFWYWx1ZSA9IGArJHtkaXNwbGF5RGVsdGFWYWx1ZX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaXNwbGF5RGVsdGFWYWx1ZSA9IFRPT0xUSVBfTUlOVVNfU0lHTjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGxheURlbHRhVmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb29sdGlwRGlzcGxheVZhbHVlKHtcbiAgaXRlbSxcbiAgZmllbGQsXG4gIHZhbHVlXG59OiB7XG4gIGl0ZW06IFRvb2x0aXBGaWVsZCB8IHVuZGVmaW5lZDtcbiAgZmllbGQ6IEZpZWxkO1xuICB2YWx1ZTogYW55O1xufSk6IHN0cmluZyB7XG4gIGlmICghbm90TnVsbG9yVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBpdGVtPy5mb3JtYXRcbiAgICA/IGdldEZvcm1hdHRlcihpdGVtPy5mb3JtYXQsIGZpZWxkKSh2YWx1ZSlcbiAgICA6IGZpZWxkLmRpc3BsYXlGb3JtYXRcbiAgICA/IGdldEZvcm1hdHRlcihmaWVsZC5kaXNwbGF5Rm9ybWF0LCBmaWVsZCkodmFsdWUpXG4gICAgOiBwYXJzZUZpZWxkVmFsdWUodmFsdWUsIGZpZWxkLnR5cGUpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFVQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFkQTtBQUNBOztBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxJQUFNRyxrQkFBa0IsR0FBQUMsT0FBQSxDQUFBRCxrQkFBQSxHQUFHLFFBQVE7QUFDMUM7QUFDTyxJQUFNRSxjQUFjLEdBQUFELE9BQUEsQ0FBQUMsY0FBQSxHQUFHLENBQUMsR0FBUSxFQUFFLFFBQVEsQ0FBQztBQUUzQyxJQUFNQyxZQUVaLEdBQUFGLE9BQUEsQ0FBQUUsWUFBQSxHQUFHO0VBQ0ZDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ2YsQ0FBQztBQUVNLFNBQVNDLGdCQUFnQkEsQ0FBQUMsSUFBQSxFQVU5QjtFQUFBLElBVEFDLE1BQU0sR0FBQUQsSUFBQSxDQUFOQyxNQUFNO0lBQ05DLEVBQUUsR0FBQUYsSUFBQSxDQUFGRSxFQUFFO0lBQ0ZDLGtCQUFrQixHQUFBSCxJQUFBLENBQWxCRyxrQkFBa0I7RUFRbEI7RUFDQSxJQUFNQyxZQUFZLEdBQUdDLGlDQUFzQixDQUFDQyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFQyxJQUFJLEVBQUs7SUFDakUsSUFBSVAsTUFBTSxDQUFDUSxJQUFJLENBQUMsVUFBQUMsS0FBQTtNQUFBLElBQUVDLElBQUksR0FBQUQsS0FBQSxDQUFKQyxJQUFJO01BQUEsT0FBTUgsSUFBSSxDQUFDRyxJQUFJLEtBQUtBLElBQUk7SUFBQSxFQUFDLEVBQUU7TUFDL0M7TUFDQUosSUFBSSxDQUFDSyxJQUFJLENBQUNKLElBQUksQ0FBQztJQUNqQjtJQUNBLE9BQU9ELElBQUk7RUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sV0FBQU0sZ0JBQUEsaUJBQ0dYLEVBQUUsRUFBR0UsWUFBWSxDQUFDVSxNQUFNLEdBQUdWLFlBQVksR0FBR1cscUJBQXFCLENBQUNkLE1BQU0sRUFBRUUsa0JBQWtCLENBQUM7QUFFaEc7QUFFQSxTQUFTWSxxQkFBcUJBLENBQUNkLE1BQU0sRUFBRUUsa0JBQWtCLEVBQUU7RUFDekQsSUFBTWEsUUFBUSxHQUFHQyxnQkFBZ0IsQ0FBQ0MsNEJBQWlCLENBQUM7RUFDcEQ7RUFDQSxJQUFNZCxZQUFZLEdBQUdILE1BQU0sQ0FBQ2tCLE1BQU0sQ0FDaEMsVUFBQUMsS0FBQTtJQUFBLElBQUVULElBQUksR0FBQVMsS0FBQSxDQUFKVCxJQUFJO01BQUVVLElBQUksR0FBQUQsS0FBQSxDQUFKQyxJQUFJO0lBQUEsT0FDVlYsSUFBSSxDQUNEVyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUN2QkMsSUFBSSxDQUFDLENBQUMsQ0FDTkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNWQyxLQUFLLENBQUMsVUFBQUMsR0FBRztNQUFBLE9BQUksQ0FBQ1YsUUFBUSxDQUFDVyxRQUFRLENBQUNELEdBQUcsQ0FBQztJQUFBLEVBQUMsSUFDeENMLElBQUksS0FBS08sMEJBQWUsQ0FBQ0MsT0FBTyxJQUNoQ1IsSUFBSSxLQUFLTywwQkFBZSxDQUFDRSxRQUFRLElBQ2pDVCxJQUFJLEtBQUssUUFBUTtFQUFBLENBQ3JCLENBQUM7RUFFRCxPQUFPakIsWUFBWSxDQUFDMkIsS0FBSyxDQUFDLENBQUMsRUFBRTVCLGtCQUFrQixDQUFDLENBQUM2QixHQUFHLENBQUMsVUFBQUMsS0FBQSxFQUFrQjtJQUFBLElBQWhCdEIsSUFBSSxHQUFBc0IsS0FBQSxDQUFKdEIsSUFBSTtNQUFFVSxJQUFJLEdBQUFZLEtBQUEsQ0FBSlosSUFBSTtJQUMvRCxPQUFPO01BQ0xWLElBQUksRUFBSkEsSUFBSTtNQUNKdUIsTUFBTSxFQUFFQyx1QkFBdUIsQ0FBQ2QsSUFBSTtJQUN0QyxDQUFDO0VBQ0gsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTYyx1QkFBdUJBLENBQUNkLElBQWEsRUFBaUI7RUFDN0QsSUFBSUEsSUFBSSxLQUFLTywwQkFBZSxDQUFDUSxTQUFTLEVBQUU7SUFDdEMsT0FBT0MsMEJBQWUsQ0FBQ0MsZUFBZSxDQUFDQyxzQkFBVyxDQUFDO0VBQ3JEO0VBQ0EsSUFBSWxCLElBQUksS0FBS08sMEJBQWUsQ0FBQ1ksSUFBSSxFQUFFO0lBQ2pDLE9BQU9ILDBCQUFlLENBQUNJLE1BQU0sQ0FBQ0Ysc0JBQVcsQ0FBQztFQUM1QztFQUNBLE9BQU8sSUFBSTtBQUNiO0FBRUEsU0FBU3RCLGdCQUFnQkEsQ0FBQ3lCLEtBQUssRUFBRTtFQUMvQixPQUFPQSxLQUFLLENBQUNwQyxNQUFNLENBQUMsVUFBQ0MsSUFBSSxFQUFFb0MsSUFBSTtJQUFBLFVBQUFDLE1BQUEsS0FBQUMsbUJBQUEsYUFBU3RDLElBQUksT0FBQXNDLG1CQUFBLGFBQUtGLElBQUk7RUFBQSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzdEO0FBRU8sU0FBU0csMkJBQTJCQSxDQUFBQyxLQUFBLEVBVXpCO0VBQUEsSUFUaEJDLEtBQUssR0FBQUQsS0FBQSxDQUFMQyxLQUFLO0lBQ0xDLEtBQUssR0FBQUYsS0FBQSxDQUFMRSxLQUFLO0lBQ0xDLFlBQVksR0FBQUgsS0FBQSxDQUFaRyxZQUFZO0lBQ1pDLFdBQVcsR0FBQUosS0FBQSxDQUFYSSxXQUFXO0VBT1gsSUFBSUMsaUJBQWdDLEdBQUcsSUFBSTtFQUUzQztFQUNFO0VBQ0FKLEtBQUssQ0FBQzNCLElBQUksS0FBS08sMEJBQWUsQ0FBQ3lCLE9BQU8sSUFDdENMLEtBQUssQ0FBQzNCLElBQUksS0FBS08sMEJBQWUsQ0FBQzBCLElBQUksRUFDbkM7SUFDQSxJQUFJLElBQUFDLGVBQVEsRUFBQ0wsWUFBWSxDQUFDLElBQUksSUFBQUssZUFBUSxFQUFDTixLQUFLLENBQUMsRUFBRTtNQUM3QyxJQUFNTyxVQUFVLEdBQ2RMLFdBQVcsS0FBS00sd0JBQWEsQ0FBQ0MsUUFBUSxHQUFHVCxLQUFLLEdBQUdDLFlBQVksR0FBRyxDQUFDLEdBQUdELEtBQUssR0FBR0MsWUFBWTtNQUMxRixJQUFNUyxXQUFXLEdBQ2ZSLFdBQVcsS0FBS00sd0JBQWEsQ0FBQ0MsUUFBUSxHQUNsQ3JCLDBCQUFlLENBQUN1QixzQkFBc0IsQ0FBQ3JCLHNCQUFXLENBQUMsR0FDbkRTLEtBQUssQ0FBQ2EsYUFBYSxJQUFJeEIsMEJBQWUsQ0FBQ3lCLHVCQUF1QixDQUFDdkIsc0JBQVcsQ0FBQztNQUVqRmEsaUJBQWlCLEdBQUcsSUFBQVcsbUJBQVksRUFBQ0osV0FBVyxFQUFFWCxLQUFLLENBQUMsQ0FBQ1EsVUFBVSxDQUFDOztNQUVoRTtNQUNBSixpQkFBaUIsR0FBRyxJQUFBWSx1QkFBZ0IsRUFBQ1osaUJBQWlCLENBQUM7TUFDdkQsSUFBTWEsY0FBYyxHQUFHYixpQkFBaUIsQ0FBQ2MsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUVsRCxJQUFJRCxjQUFjLEtBQUssR0FBRyxJQUFJLENBQUNyRSxjQUFjLENBQUMrQixRQUFRLENBQUNzQyxjQUFjLENBQUMsRUFBRTtRQUN0RWIsaUJBQWlCLE9BQUFSLE1BQUEsQ0FBT1EsaUJBQWlCLENBQUU7TUFDN0M7SUFDRixDQUFDLE1BQU07TUFDTEEsaUJBQWlCLEdBQUcxRCxrQkFBa0I7SUFDeEM7RUFDRjtFQUVBLE9BQU8wRCxpQkFBaUI7QUFDMUI7QUFFTyxTQUFTZSxzQkFBc0JBLENBQUFDLEtBQUEsRUFRM0I7RUFBQSxJQVBUQyxJQUFJLEdBQUFELEtBQUEsQ0FBSkMsSUFBSTtJQUNKckIsS0FBSyxHQUFBb0IsS0FBQSxDQUFMcEIsS0FBSztJQUNMQyxLQUFLLEdBQUFtQixLQUFBLENBQUxuQixLQUFLO0VBTUwsSUFBSSxDQUFDLElBQUFxQiwrQkFBa0IsRUFBQ3JCLEtBQUssQ0FBQyxFQUFFO0lBQzlCLE9BQU8sRUFBRTtFQUNYO0VBRUEsT0FBT29CLElBQUksYUFBSkEsSUFBSSxlQUFKQSxJQUFJLENBQUVuQyxNQUFNLEdBQ2YsSUFBQTZCLG1CQUFZLEVBQUNNLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFbkMsTUFBTSxFQUFFYyxLQUFLLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLEdBQ3hDRCxLQUFLLENBQUNhLGFBQWEsR0FDbkIsSUFBQUUsbUJBQVksRUFBQ2YsS0FBSyxDQUFDYSxhQUFhLEVBQUViLEtBQUssQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FDL0MsSUFBQXNCLHNCQUFlLEVBQUN0QixLQUFLLEVBQUVELEtBQUssQ0FBQzNCLElBQUksQ0FBQztBQUN4QyIsImlnbm9yZUxpc3QiOltdfQ==
120
+ var ZOOM_OPACITY_RANGE = exports.ZOOM_OPACITY_RANGE = [0, 24];
121
+ var DEFAULT_ZOOM_OPACITY_STOPS = exports.DEFAULT_ZOOM_OPACITY_STOPS = {
122
+ appear: 1,
123
+ full: 3,
124
+ fade: 8,
125
+ gone: 12
126
+ };
127
+ var ZOOM_OPACITY_STOP_KEYS = ['appear', 'full', 'fade', 'gone'];
128
+ function isOrderedZoomOpacityStops(stops) {
129
+ if (!stops) {
130
+ return false;
131
+ }
132
+ var appear = stops.appear,
133
+ full = stops.full,
134
+ fade = stops.fade,
135
+ gone = stops.gone;
136
+ return [appear, full, fade, gone].every(function (value) {
137
+ return typeof value === 'number' && Number.isFinite(value);
138
+ }) && appear <= full && full <= fade && fade <= gone;
139
+ }
140
+
141
+ /**
142
+ * 0–1 multiplier for a layer's opacity at `zoom`.
143
+ * 0 at and outside the envelope, rising from appear to full, holding through fade, then falling to gone.
144
+ * Equal neighbors are a step. Unordered stops leave opacity unchanged.
145
+ */
146
+ function zoomOpacityFactor(zoom, stops) {
147
+ if (!isOrderedZoomOpacityStops(stops) || !Number.isFinite(zoom)) {
148
+ return 1;
149
+ }
150
+ var appear = stops.appear,
151
+ full = stops.full,
152
+ fade = stops.fade,
153
+ gone = stops.gone;
154
+ if (zoom <= appear || zoom >= gone) {
155
+ return 0;
156
+ }
157
+ if (zoom < full) {
158
+ var _span = full - appear;
159
+ return _span <= 0 ? 1 : (zoom - appear) / _span;
160
+ }
161
+ if (zoom <= fade) {
162
+ return 1;
163
+ }
164
+ var span = gone - fade;
165
+ return span <= 0 ? 0 : (gone - zoom) / span;
166
+ }
167
+
168
+ /** Envelope multiplier for one layer. 1 when fade-on-zoom is off or the layer is not assigned. */
169
+ function getLayerZoomOpacityFactor(layerId, zoom, interactionConfig) {
170
+ var _zoomOpacity$config;
171
+ var zoomOpacity = interactionConfig === null || interactionConfig === void 0 ? void 0 : interactionConfig.zoomOpacity;
172
+ if (!(zoomOpacity !== null && zoomOpacity !== void 0 && zoomOpacity.enabled) || typeof zoom !== 'number') {
173
+ return 1;
174
+ }
175
+ var controller = (_zoomOpacity$config = zoomOpacity.config) === null || _zoomOpacity$config === void 0 || (_zoomOpacity$config = _zoomOpacity$config.controllers) === null || _zoomOpacity$config === void 0 ? void 0 : _zoomOpacity$config.find(function (item) {
176
+ var _item$layerIds;
177
+ return (_item$layerIds = item.layerIds) === null || _item$layerIds === void 0 ? void 0 : _item$layerIds.includes(layerId);
178
+ });
179
+ if (!controller) {
180
+ return 1;
181
+ }
182
+ return zoomOpacityFactor(zoom, controller.stops);
183
+ }
184
+
185
+ /** Write one stop and push its neighbors so appear <= full <= fade <= gone. */
186
+ function setZoomOpacityStop(stops, key, value) {
187
+ var minZoom = ZOOM_OPACITY_RANGE[0],
188
+ maxZoom = ZOOM_OPACITY_RANGE[1];
189
+ var next = _objectSpread({}, stops);
190
+ var clamped = Math.min(maxZoom, Math.max(minZoom, value));
191
+ next[key] = Math.round(clamped * 10) / 10;
192
+ var index = ZOOM_OPACITY_STOP_KEYS.indexOf(key);
193
+ for (var i = index - 1; i >= 0; i--) {
194
+ var stopKey = ZOOM_OPACITY_STOP_KEYS[i];
195
+ if (next[stopKey] > next[ZOOM_OPACITY_STOP_KEYS[i + 1]]) {
196
+ next[stopKey] = next[ZOOM_OPACITY_STOP_KEYS[i + 1]];
197
+ }
198
+ }
199
+ for (var _i = index + 1; _i < ZOOM_OPACITY_STOP_KEYS.length; _i++) {
200
+ var _stopKey = ZOOM_OPACITY_STOP_KEYS[_i];
201
+ if (next[_stopKey] < next[ZOOM_OPACITY_STOP_KEYS[_i - 1]]) {
202
+ next[_stopKey] = next[ZOOM_OPACITY_STOP_KEYS[_i - 1]];
203
+ }
204
+ }
205
+ return next;
206
+ }
207
+
208
+ /** Concatenate controllers and keep the first assignment of each layer id. */
209
+ function combineZoomOpacityControllers(configs) {
210
+ var seen = new Set();
211
+ var controllers = [];
212
+ configs.forEach(function (config) {
213
+ ((config === null || config === void 0 ? void 0 : config.controllers) || []).forEach(function (controller) {
214
+ var layerIds = (controller.layerIds || []).filter(function (id) {
215
+ if (seen.has(id)) {
216
+ return false;
217
+ }
218
+ seen.add(id);
219
+ return true;
220
+ });
221
+ if (layerIds.length || !(controller.layerIds || []).length) {
222
+ controllers.push(_objectSpread(_objectSpread({}, controller), {}, {
223
+ stops: _objectSpread({}, controller.stops),
224
+ layerIds: layerIds
225
+ }));
226
+ }
227
+ });
228
+ });
229
+ return controllers;
230
+ }
231
+
232
+ /** Drop a deleted layer from fade-on-zoom controllers. Returns the same config when nothing changes. */
233
+ function removeLayerFromZoomOpacity(interactionConfig, layerId) {
234
+ var _zoomOpacity$config2;
235
+ var zoomOpacity = interactionConfig === null || interactionConfig === void 0 ? void 0 : interactionConfig.zoomOpacity;
236
+ if (!zoomOpacity) {
237
+ return interactionConfig;
238
+ }
239
+ var controllers = (_zoomOpacity$config2 = zoomOpacity.config) === null || _zoomOpacity$config2 === void 0 ? void 0 : _zoomOpacity$config2.controllers;
240
+ if (!(controllers !== null && controllers !== void 0 && controllers.length)) {
241
+ return interactionConfig;
242
+ }
243
+ var changed = false;
244
+ var nextControllers = controllers.map(function (controller) {
245
+ var _controller$layerIds;
246
+ if (!((_controller$layerIds = controller.layerIds) !== null && _controller$layerIds !== void 0 && _controller$layerIds.includes(layerId))) {
247
+ return controller;
248
+ }
249
+ changed = true;
250
+ return _objectSpread(_objectSpread({}, controller), {}, {
251
+ layerIds: controller.layerIds.filter(function (id) {
252
+ return id !== layerId;
253
+ })
254
+ });
255
+ });
256
+ if (!changed) {
257
+ return interactionConfig;
258
+ }
259
+ return _objectSpread(_objectSpread({}, interactionConfig), {}, {
260
+ zoomOpacity: _objectSpread(_objectSpread({}, zoomOpacity), {}, {
261
+ config: _objectSpread(_objectSpread({}, zoomOpacity.config), {}, {
262
+ controllers: nextControllers
263
+ })
264
+ })
265
+ });
266
+ }
267
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uc3RhbnRzIiwicmVxdWlyZSIsIl91dGlscyIsIl9jb21tb25VdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiVE9PTFRJUF9NSU5VU19TSUdOIiwiZXhwb3J0cyIsIk5FR0FUSVZFX1NJR05TIiwiQlJVU0hfQ09ORklHIiwicmFuZ2UiLCJmaW5kRmllbGRzVG9TaG93IiwiX3JlZiIsImZpZWxkcyIsImlkIiwibWF4RGVmYXVsdFRvb2x0aXBzIiwiZmllbGRzVG9TaG93IiwiREVGQVVMVF9UT09MVElQX0ZJRUxEUyIsInJlZHVjZSIsInByZXYiLCJjdXJyIiwiZmluZCIsIl9yZWYyIiwibmFtZSIsImF1dG9GaW5kVG9vbHRpcEZpZWxkcyIsInB0RmllbGRzIiwiX21lcmdlRmllbGRQYWlycyIsIlRSSVBfUE9JTlRfRklFTERTIiwiX3JlZjQiLCJ0eXBlIiwicmVwbGFjZSIsInRyaW0iLCJzcGxpdCIsImV2ZXJ5Iiwic2VnIiwiaW5jbHVkZXMiLCJBTExfRklFTERfVFlQRVMiLCJnZW9qc29uIiwiZ2VvYXJyb3ciLCJzbGljZSIsIm1hcCIsIl9yZWY1IiwiZm9ybWF0IiwiZ2V0RGVmYXVsdFRvb2x0aXBGb3JtYXQiLCJ0aW1lc3RhbXAiLCJUT09MVElQX0ZPUk1BVFMiLCJEQVRFX1RJTUVfTF9MVFMiLCJUT09MVElQX0tFWSIsImRhdGUiLCJEQVRFX0wiLCJwYWlycyIsInBhaXIiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZ2V0VG9vbHRpcERpc3BsYXlEZWx0YVZhbHVlIiwiX3JlZjYiLCJmaWVsZCIsInZhbHVlIiwicHJpbWFyeVZhbHVlIiwiY29tcGFyZVR5cGUiLCJkaXNwbGF5RGVsdGFWYWx1ZSIsImludGVnZXIiLCJyZWFsIiwiaXNOdW1iZXIiLCJkZWx0YVZhbHVlIiwiQ09NUEFSRV9UWVBFUyIsIlJFTEFUSVZFIiwiZGVsdGFGb3JtYXQiLCJERUNJTUFMX1BFUkNFTlRfRlVMTF8yIiwiZGlzcGxheUZvcm1hdCIsIkRFQ0lNQUxfREVDSU1BTF9GSVhFRF8zIiwiZ2V0Rm9ybWF0dGVyIiwiZGVmYXVsdEZvcm1hdHRlciIsImRlbHRhRmlyc3RDaGFyIiwiY2hhckF0IiwiZ2V0VG9vbHRpcERpc3BsYXlWYWx1ZSIsIl9yZWY3IiwiaXRlbSIsIm5vdE51bGxvclVuZGVmaW5lZCIsInBhcnNlRmllbGRWYWx1ZSIsIlpPT01fT1BBQ0lUWV9SQU5HRSIsIkRFRkFVTFRfWk9PTV9PUEFDSVRZX1NUT1BTIiwiYXBwZWFyIiwiZnVsbCIsImZhZGUiLCJnb25lIiwiWk9PTV9PUEFDSVRZX1NUT1BfS0VZUyIsImlzT3JkZXJlZFpvb21PcGFjaXR5U3RvcHMiLCJzdG9wcyIsIk51bWJlciIsImlzRmluaXRlIiwiem9vbU9wYWNpdHlGYWN0b3IiLCJ6b29tIiwic3BhbiIsImdldExheWVyWm9vbU9wYWNpdHlGYWN0b3IiLCJsYXllcklkIiwiaW50ZXJhY3Rpb25Db25maWciLCJfem9vbU9wYWNpdHkkY29uZmlnIiwiem9vbU9wYWNpdHkiLCJlbmFibGVkIiwiY29udHJvbGxlciIsImNvbmZpZyIsImNvbnRyb2xsZXJzIiwiX2l0ZW0kbGF5ZXJJZHMiLCJsYXllcklkcyIsInNldFpvb21PcGFjaXR5U3RvcCIsImtleSIsIm1pblpvb20iLCJtYXhab29tIiwibmV4dCIsImNsYW1wZWQiLCJNYXRoIiwibWluIiwibWF4Iiwicm91bmQiLCJpbmRleCIsImluZGV4T2YiLCJpIiwic3RvcEtleSIsImNvbWJpbmVab29tT3BhY2l0eUNvbnRyb2xsZXJzIiwiY29uZmlncyIsInNlZW4iLCJTZXQiLCJoYXMiLCJhZGQiLCJyZW1vdmVMYXllckZyb21ab29tT3BhY2l0eSIsIl96b29tT3BhY2l0eSRjb25maWcyIiwiY2hhbmdlZCIsIm5leHRDb250cm9sbGVycyIsIl9jb250cm9sbGVyJGxheWVySWRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ludGVyYWN0aW9uLXV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7XG4gIERFRkFVTFRfVE9PTFRJUF9GSUVMRFMsXG4gIEFMTF9GSUVMRF9UWVBFUyxcbiAgVFJJUF9QT0lOVF9GSUVMRFMsXG4gIFRPT0xUSVBfRk9STUFUUyxcbiAgVE9PTFRJUF9LRVksXG4gIENPTVBBUkVfVFlQRVNcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuXG5pbXBvcnQge1xuICBGaWVsZCxcbiAgSW50ZXJhY3Rpb25Db25maWcsXG4gIFRvb2x0aXBGaWVsZCxcbiAgQ29tcGFyZVR5cGUsXG4gIFpvb21PcGFjaXR5Q29udHJvbGxlcixcbiAgWm9vbU9wYWNpdHlTdG9wc1xufSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7cGFyc2VGaWVsZFZhbHVlLCBnZXRGb3JtYXR0ZXIsIGlzTnVtYmVyLCBkZWZhdWx0Rm9ybWF0dGVyfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcbmltcG9ydCB7bm90TnVsbG9yVW5kZWZpbmVkfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5cbi8qKlxuICogTWludXMgc2lnbiB1c2VkIGluIHRvb2x0aXAgZm9ybWF0dGluZy5cbiAqIFxcdTIyMTIgb3IgXFx1MDAyRCBpcyB0aGUgbWludXMgc2lnbiB0aGF0IGQzLWZvcm1hdCB1c2VzIGZvciBkZWNpbWFsIG51bWJlciBmb3JtYXR0aW5nXG4gKiBkMy1mb3JtYXQgMi4wIHVzZXMgXFx1MDAyRFxuICovXG5leHBvcnQgY29uc3QgVE9PTFRJUF9NSU5VU19TSUdOID0gJ1xcdTIyMTInO1xuLy8gYm90aCBhcmUgcG9zaWJsZSBuZWdhdGl2ZSBzaWduc1xuZXhwb3J0IGNvbnN0IE5FR0FUSVZFX1NJR05TID0gWydcXHUwMDJEJywgJ1xcdTIyMTInXTtcblxuZXhwb3J0IGNvbnN0IEJSVVNIX0NPTkZJRzoge1xuICByYW5nZTogW251bWJlciwgbnVtYmVyXTtcbn0gPSB7XG4gIHJhbmdlOiBbMCwgNTBdXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEZpZWxkc1RvU2hvdyh7XG4gIGZpZWxkcyxcbiAgaWQsXG4gIG1heERlZmF1bHRUb29sdGlwc1xufToge1xuICBmaWVsZHM6IEZpZWxkW107XG4gIGlkOiBzdHJpbmc7XG4gIG1heERlZmF1bHRUb29sdGlwczogbnVtYmVyO1xufSk6IHtcbiAgW2tleTogc3RyaW5nXTogVG9vbHRpcEZpZWxkW107XG59IHtcbiAgLy8gZmlyc3QgZmluZCBkZWZhdWx0IHRvb2x0aXAgZmllbGRzIGZvciB0cmlwc1xuICBjb25zdCBmaWVsZHNUb1Nob3cgPSBERUZBVUxUX1RPT0xUSVBfRklFTERTLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xuICAgIGlmIChmaWVsZHMuZmluZCgoe25hbWV9KSA9PiBjdXJyLm5hbWUgPT09IG5hbWUpKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBwcmV2LnB1c2goY3Vycik7XG4gICAgfVxuICAgIHJldHVybiBwcmV2O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBbaWRdOiBmaWVsZHNUb1Nob3cubGVuZ3RoID8gZmllbGRzVG9TaG93IDogYXV0b0ZpbmRUb29sdGlwRmllbGRzKGZpZWxkcywgbWF4RGVmYXVsdFRvb2x0aXBzKVxuICB9O1xufVxuXG5mdW5jdGlvbiBhdXRvRmluZFRvb2x0aXBGaWVsZHMoZmllbGRzLCBtYXhEZWZhdWx0VG9vbHRpcHMpIHtcbiAgY29uc3QgcHRGaWVsZHMgPSBfbWVyZ2VGaWVsZFBhaXJzKFRSSVBfUE9JTlRfRklFTERTKTtcbiAgLy8gZmlsdGVyIG91dCB0aGUgZGVmYXVsdCBmaWVsZHMgdGhhdCBjb250YWlucyBsYXQgYW5kIGxuZyBhbmQgYW55IGdlb21ldHJ5XG4gIGNvbnN0IGZpZWxkc1RvU2hvdyA9IGZpZWxkcy5maWx0ZXIoXG4gICAgKHtuYW1lLCB0eXBlfSkgPT5cbiAgICAgIG5hbWVcbiAgICAgICAgLnJlcGxhY2UoL1tfLC5dKy9nLCAnICcpXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLmV2ZXJ5KHNlZyA9PiAhcHRGaWVsZHMuaW5jbHVkZXMoc2VnKSkgJiZcbiAgICAgIHR5cGUgIT09IEFMTF9GSUVMRF9UWVBFUy5nZW9qc29uICYmXG4gICAgICB0eXBlICE9PSBBTExfRklFTERfVFlQRVMuZ2VvYXJyb3cgJiZcbiAgICAgIHR5cGUgIT09ICdvYmplY3QnXG4gICk7XG5cbiAgcmV0dXJuIGZpZWxkc1RvU2hvdy5zbGljZSgwLCBtYXhEZWZhdWx0VG9vbHRpcHMpLm1hcCgoe25hbWUsIHR5cGV9KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWUsXG4gICAgICBmb3JtYXQ6IGdldERlZmF1bHRUb29sdGlwRm9ybWF0KHR5cGUpXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERlZmF1bHRUb29sdGlwRm9ybWF0KHR5cGU/OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXApIHtcbiAgICByZXR1cm4gVE9PTFRJUF9GT1JNQVRTLkRBVEVfVElNRV9MX0xUU1tUT09MVElQX0tFWV07XG4gIH1cbiAgaWYgKHR5cGUgPT09IEFMTF9GSUVMRF9UWVBFUy5kYXRlKSB7XG4gICAgcmV0dXJuIFRPT0xUSVBfRk9STUFUUy5EQVRFX0xbVE9PTFRJUF9LRVldO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBfbWVyZ2VGaWVsZFBhaXJzKHBhaXJzKSB7XG4gIHJldHVybiBwYWlycy5yZWR1Y2UoKHByZXYsIHBhaXIpID0+IFsuLi5wcmV2LCAuLi5wYWlyXSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9vbHRpcERpc3BsYXlEZWx0YVZhbHVlKHtcbiAgZmllbGQsXG4gIHZhbHVlLFxuICBwcmltYXJ5VmFsdWUsXG4gIGNvbXBhcmVUeXBlXG59OiB7XG4gIGZpZWxkOiBGaWVsZDtcbiAgdmFsdWU6IGFueTtcbiAgcHJpbWFyeVZhbHVlOiBhbnk7XG4gIGNvbXBhcmVUeXBlPzogQ29tcGFyZVR5cGU7XG59KTogc3RyaW5nIHwgbnVsbCB7XG4gIGxldCBkaXNwbGF5RGVsdGFWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgaWYgKFxuICAgIC8vIGNvbXBhcmlzb24gbW9kZSBvbmx5IHdvcmtzIGZvciBudW1lcmljIGZpZWxkXG4gICAgZmllbGQudHlwZSA9PT0gQUxMX0ZJRUxEX1RZUEVTLmludGVnZXIgfHxcbiAgICBmaWVsZC50eXBlID09PSBBTExfRklFTERfVFlQRVMucmVhbFxuICApIHtcbiAgICBpZiAoaXNOdW1iZXIocHJpbWFyeVZhbHVlKSAmJiBpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGRlbHRhVmFsdWUgPVxuICAgICAgICBjb21wYXJlVHlwZSA9PT0gQ09NUEFSRV9UWVBFUy5SRUxBVElWRSA/IHZhbHVlIC8gcHJpbWFyeVZhbHVlIC0gMSA6IHZhbHVlIC0gcHJpbWFyeVZhbHVlO1xuICAgICAgY29uc3QgZGVsdGFGb3JtYXQgPVxuICAgICAgICBjb21wYXJlVHlwZSA9PT0gQ09NUEFSRV9UWVBFUy5SRUxBVElWRVxuICAgICAgICAgID8gVE9PTFRJUF9GT1JNQVRTLkRFQ0lNQUxfUEVSQ0VOVF9GVUxMXzJbVE9PTFRJUF9LRVldXG4gICAgICAgICAgOiBmaWVsZC5kaXNwbGF5Rm9ybWF0IHx8IFRPT0xUSVBfRk9STUFUUy5ERUNJTUFMX0RFQ0lNQUxfRklYRURfM1tUT09MVElQX0tFWV07XG5cbiAgICAgIGRpc3BsYXlEZWx0YVZhbHVlID0gZ2V0Rm9ybWF0dGVyKGRlbHRhRm9ybWF0LCBmaWVsZCkoZGVsdGFWYWx1ZSk7XG5cbiAgICAgIC8vIHNhZmVseSBjYXN0IHN0cmluZ1xuICAgICAgZGlzcGxheURlbHRhVmFsdWUgPSBkZWZhdWx0Rm9ybWF0dGVyKGRpc3BsYXlEZWx0YVZhbHVlKTtcbiAgICAgIGNvbnN0IGRlbHRhRmlyc3RDaGFyID0gZGlzcGxheURlbHRhVmFsdWUuY2hhckF0KDApO1xuXG4gICAgICBpZiAoZGVsdGFGaXJzdENoYXIgIT09ICcrJyAmJiAhTkVHQVRJVkVfU0lHTlMuaW5jbHVkZXMoZGVsdGFGaXJzdENoYXIpKSB7XG4gICAgICAgIGRpc3BsYXlEZWx0YVZhbHVlID0gYCske2Rpc3BsYXlEZWx0YVZhbHVlfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpc3BsYXlEZWx0YVZhbHVlID0gVE9PTFRJUF9NSU5VU19TSUdOO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwbGF5RGVsdGFWYWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRvb2x0aXBEaXNwbGF5VmFsdWUoe1xuICBpdGVtLFxuICBmaWVsZCxcbiAgdmFsdWVcbn06IHtcbiAgaXRlbTogVG9vbHRpcEZpZWxkIHwgdW5kZWZpbmVkO1xuICBmaWVsZDogRmllbGQ7XG4gIHZhbHVlOiBhbnk7XG59KTogc3RyaW5nIHtcbiAgaWYgKCFub3ROdWxsb3JVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIGl0ZW0/LmZvcm1hdFxuICAgID8gZ2V0Rm9ybWF0dGVyKGl0ZW0/LmZvcm1hdCwgZmllbGQpKHZhbHVlKVxuICAgIDogZmllbGQuZGlzcGxheUZvcm1hdFxuICAgID8gZ2V0Rm9ybWF0dGVyKGZpZWxkLmRpc3BsYXlGb3JtYXQsIGZpZWxkKSh2YWx1ZSlcbiAgICA6IHBhcnNlRmllbGRWYWx1ZSh2YWx1ZSwgZmllbGQudHlwZSk7XG59XG5cbmV4cG9ydCBjb25zdCBaT09NX09QQUNJVFlfUkFOR0U6IFtudW1iZXIsIG51bWJlcl0gPSBbMCwgMjRdO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9aT09NX09QQUNJVFlfU1RPUFM6IFpvb21PcGFjaXR5U3RvcHMgPSB7XG4gIGFwcGVhcjogMSxcbiAgZnVsbDogMyxcbiAgZmFkZTogOCxcbiAgZ29uZTogMTJcbn07XG5cbmNvbnN0IFpPT01fT1BBQ0lUWV9TVE9QX0tFWVMgPSBbJ2FwcGVhcicsICdmdWxsJywgJ2ZhZGUnLCAnZ29uZSddIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBpc09yZGVyZWRab29tT3BhY2l0eVN0b3BzKHN0b3BzOiBab29tT3BhY2l0eVN0b3BzIHwgdW5kZWZpbmVkKTogc3RvcHMgaXMgWm9vbU9wYWNpdHlTdG9wcyB7XG4gIGlmICghc3RvcHMpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qge2FwcGVhciwgZnVsbCwgZmFkZSwgZ29uZX0gPSBzdG9wcztcbiAgcmV0dXJuIChcbiAgICBbYXBwZWFyLCBmdWxsLCBmYWRlLCBnb25lXS5ldmVyeShcbiAgICAgIHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlKVxuICAgICkgJiZcbiAgICBhcHBlYXIgPD0gZnVsbCAmJlxuICAgIGZ1bGwgPD0gZmFkZSAmJlxuICAgIGZhZGUgPD0gZ29uZVxuICApO1xufVxuXG4vKipcbiAqIDDigJMxIG11bHRpcGxpZXIgZm9yIGEgbGF5ZXIncyBvcGFjaXR5IGF0IGB6b29tYC5cbiAqIDAgYXQgYW5kIG91dHNpZGUgdGhlIGVudmVsb3BlLCByaXNpbmcgZnJvbSBhcHBlYXIgdG8gZnVsbCwgaG9sZGluZyB0aHJvdWdoIGZhZGUsIHRoZW4gZmFsbGluZyB0byBnb25lLlxuICogRXF1YWwgbmVpZ2hib3JzIGFyZSBhIHN0ZXAuIFVub3JkZXJlZCBzdG9wcyBsZWF2ZSBvcGFjaXR5IHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvb21PcGFjaXR5RmFjdG9yKHpvb206IG51bWJlciwgc3RvcHM6IFpvb21PcGFjaXR5U3RvcHMpOiBudW1iZXIge1xuICBpZiAoIWlzT3JkZXJlZFpvb21PcGFjaXR5U3RvcHMoc3RvcHMpIHx8ICFOdW1iZXIuaXNGaW5pdGUoem9vbSkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBjb25zdCB7YXBwZWFyLCBmdWxsLCBmYWRlLCBnb25lfSA9IHN0b3BzO1xuICBpZiAoem9vbSA8PSBhcHBlYXIgfHwgem9vbSA+PSBnb25lKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgaWYgKHpvb20gPCBmdWxsKSB7XG4gICAgY29uc3Qgc3BhbiA9IGZ1bGwgLSBhcHBlYXI7XG4gICAgcmV0dXJuIHNwYW4gPD0gMCA/IDEgOiAoem9vbSAtIGFwcGVhcikgLyBzcGFuO1xuICB9XG4gIGlmICh6b29tIDw9IGZhZGUpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBjb25zdCBzcGFuID0gZ29uZSAtIGZhZGU7XG4gIHJldHVybiBzcGFuIDw9IDAgPyAwIDogKGdvbmUgLSB6b29tKSAvIHNwYW47XG59XG5cbi8qKiBFbnZlbG9wZSBtdWx0aXBsaWVyIGZvciBvbmUgbGF5ZXIuIDEgd2hlbiBmYWRlLW9uLXpvb20gaXMgb2ZmIG9yIHRoZSBsYXllciBpcyBub3QgYXNzaWduZWQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGF5ZXJab29tT3BhY2l0eUZhY3RvcihcbiAgbGF5ZXJJZDogc3RyaW5nLFxuICB6b29tOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gIGludGVyYWN0aW9uQ29uZmlnPzogSW50ZXJhY3Rpb25Db25maWcgfCBudWxsXG4pOiBudW1iZXIge1xuICBjb25zdCB6b29tT3BhY2l0eSA9IGludGVyYWN0aW9uQ29uZmlnPy56b29tT3BhY2l0eTtcbiAgaWYgKCF6b29tT3BhY2l0eT8uZW5hYmxlZCB8fCB0eXBlb2Ygem9vbSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBjb25zdCBjb250cm9sbGVyID0gem9vbU9wYWNpdHkuY29uZmlnPy5jb250cm9sbGVycz8uZmluZChpdGVtID0+XG4gICAgaXRlbS5sYXllcklkcz8uaW5jbHVkZXMobGF5ZXJJZClcbiAgKTtcbiAgaWYgKCFjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgcmV0dXJuIHpvb21PcGFjaXR5RmFjdG9yKHpvb20sIGNvbnRyb2xsZXIuc3RvcHMpO1xufVxuXG4vKiogV3JpdGUgb25lIHN0b3AgYW5kIHB1c2ggaXRzIG5laWdoYm9ycyBzbyBhcHBlYXIgPD0gZnVsbCA8PSBmYWRlIDw9IGdvbmUuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Wm9vbU9wYWNpdHlTdG9wKFxuICBzdG9wczogWm9vbU9wYWNpdHlTdG9wcyxcbiAga2V5OiBrZXlvZiBab29tT3BhY2l0eVN0b3BzLFxuICB2YWx1ZTogbnVtYmVyXG4pOiBab29tT3BhY2l0eVN0b3BzIHtcbiAgY29uc3QgW21pblpvb20sIG1heFpvb21dID0gWk9PTV9PUEFDSVRZX1JBTkdFO1xuICBjb25zdCBuZXh0OiBab29tT3BhY2l0eVN0b3BzID0gey4uLnN0b3BzfTtcbiAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKG1heFpvb20sIE1hdGgubWF4KG1pblpvb20sIHZhbHVlKSk7XG4gIG5leHRba2V5XSA9IE1hdGgucm91bmQoY2xhbXBlZCAqIDEwKSAvIDEwO1xuICBjb25zdCBpbmRleCA9IFpPT01fT1BBQ0lUWV9TVE9QX0tFWVMuaW5kZXhPZihrZXkpO1xuICBmb3IgKGxldCBpID0gaW5kZXggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IHN0b3BLZXkgPSBaT09NX09QQUNJVFlfU1RPUF9LRVlTW2ldO1xuICAgIGlmIChuZXh0W3N0b3BLZXldID4gbmV4dFtaT09NX09QQUNJVFlfU1RPUF9LRVlTW2kgKyAxXV0pIHtcbiAgICAgIG5leHRbc3RvcEtleV0gPSBuZXh0W1pPT01fT1BBQ0lUWV9TVE9QX0tFWVNbaSArIDFdXTtcbiAgICB9XG4gIH1cbiAgZm9yIChsZXQgaSA9IGluZGV4ICsgMTsgaSA8IFpPT01fT1BBQ0lUWV9TVE9QX0tFWVMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBzdG9wS2V5ID0gWk9PTV9PUEFDSVRZX1NUT1BfS0VZU1tpXTtcbiAgICBpZiAobmV4dFtzdG9wS2V5XSA8IG5leHRbWk9PTV9PUEFDSVRZX1NUT1BfS0VZU1tpIC0gMV1dKSB7XG4gICAgICBuZXh0W3N0b3BLZXldID0gbmV4dFtaT09NX09QQUNJVFlfU1RPUF9LRVlTW2kgLSAxXV07XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXh0O1xufVxuXG4vKiogQ29uY2F0ZW5hdGUgY29udHJvbGxlcnMgYW5kIGtlZXAgdGhlIGZpcnN0IGFzc2lnbm1lbnQgb2YgZWFjaCBsYXllciBpZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lWm9vbU9wYWNpdHlDb250cm9sbGVycyhcbiAgY29uZmlnczogQXJyYXk8e2NvbnRyb2xsZXJzPzogWm9vbU9wYWNpdHlDb250cm9sbGVyW119IHwgbnVsbCB8IHVuZGVmaW5lZD5cbik6IFpvb21PcGFjaXR5Q29udHJvbGxlcltdIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBjb250cm9sbGVyczogWm9vbU9wYWNpdHlDb250cm9sbGVyW10gPSBbXTtcbiAgY29uZmlncy5mb3JFYWNoKGNvbmZpZyA9PiB7XG4gICAgKGNvbmZpZz8uY29udHJvbGxlcnMgfHwgW10pLmZvckVhY2goY29udHJvbGxlciA9PiB7XG4gICAgICBjb25zdCBsYXllcklkcyA9IChjb250cm9sbGVyLmxheWVySWRzIHx8IFtdKS5maWx0ZXIoaWQgPT4ge1xuICAgICAgICBpZiAoc2Vlbi5oYXMoaWQpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uYWRkKGlkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGlmIChsYXllcklkcy5sZW5ndGggfHwgIShjb250cm9sbGVyLmxheWVySWRzIHx8IFtdKS5sZW5ndGgpIHtcbiAgICAgICAgY29udHJvbGxlcnMucHVzaCh7XG4gICAgICAgICAgLi4uY29udHJvbGxlcixcbiAgICAgICAgICBzdG9wczogey4uLmNvbnRyb2xsZXIuc3RvcHN9LFxuICAgICAgICAgIGxheWVySWRzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGNvbnRyb2xsZXJzO1xufVxuXG4vKiogRHJvcCBhIGRlbGV0ZWQgbGF5ZXIgZnJvbSBmYWRlLW9uLXpvb20gY29udHJvbGxlcnMuIFJldHVybnMgdGhlIHNhbWUgY29uZmlnIHdoZW4gbm90aGluZyBjaGFuZ2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxheWVyRnJvbVpvb21PcGFjaXR5PFxuICBUIGV4dGVuZHMge3pvb21PcGFjaXR5PzogSW50ZXJhY3Rpb25Db25maWdbJ3pvb21PcGFjaXR5J119XG4+KGludGVyYWN0aW9uQ29uZmlnOiBULCBsYXllcklkOiBzdHJpbmcpOiBUIHtcbiAgY29uc3Qgem9vbU9wYWNpdHkgPSBpbnRlcmFjdGlvbkNvbmZpZz8uem9vbU9wYWNpdHk7XG4gIGlmICghem9vbU9wYWNpdHkpIHtcbiAgICByZXR1cm4gaW50ZXJhY3Rpb25Db25maWc7XG4gIH1cbiAgY29uc3QgY29udHJvbGxlcnMgPSB6b29tT3BhY2l0eS5jb25maWc/LmNvbnRyb2xsZXJzO1xuICBpZiAoIWNvbnRyb2xsZXJzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4gaW50ZXJhY3Rpb25Db25maWc7XG4gIH1cbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgY29uc3QgbmV4dENvbnRyb2xsZXJzID0gY29udHJvbGxlcnMubWFwKGNvbnRyb2xsZXIgPT4ge1xuICAgIGlmICghY29udHJvbGxlci5sYXllcklkcz8uaW5jbHVkZXMobGF5ZXJJZCkpIHtcbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH1cbiAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29udHJvbGxlcixcbiAgICAgIGxheWVySWRzOiBjb250cm9sbGVyLmxheWVySWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gbGF5ZXJJZClcbiAgICB9O1xuICB9KTtcbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIGludGVyYWN0aW9uQ29uZmlnO1xuICB9XG4gIHJldHVybiB7XG4gICAgLi4uaW50ZXJhY3Rpb25Db25maWcsXG4gICAgem9vbU9wYWNpdHk6IHtcbiAgICAgIC4uLnpvb21PcGFjaXR5LFxuICAgICAgY29uZmlnOiB7XG4gICAgICAgIC4uLnpvb21PcGFjaXR5LmNvbmZpZyxcbiAgICAgICAgY29udHJvbGxlcnM6IG5leHRDb250cm9sbGVyc1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFpQkEsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQTJELFNBQUFHLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxj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QyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0VBQ0YsT0FBT0YsV0FBVztBQUNwQjs7QUFFQTtBQUNPLFNBQVN1QiwwQkFBMEJBLENBRXhDN0IsaUJBQW9CLEVBQUVELE9BQWUsRUFBSztFQUFBLElBQUErQixvQkFBQTtFQUMxQyxJQUFNNUIsV0FBVyxHQUFHRixpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFRSxXQUFXO0VBQ2xELElBQUksQ0FBQ0EsV0FBVyxFQUFFO0lBQ2hCLE9BQU9GLGlCQUFpQjtFQUMxQjtFQUNBLElBQU1NLFdBQVcsSUFBQXdCLG9CQUFBLEdBQUc1QixXQUFXLENBQUNHLE1BQU0sY0FBQXlCLG9CQUFBLHVCQUFsQkEsb0JBQUEsQ0FBb0J4QixXQUFXO0VBQ25ELElBQUksRUFBQ0EsV0FBVyxhQUFYQSxXQUFXLGVBQVhBLFdBQVcsQ0FBRXRHLE1BQU0sR0FBRTtJQUN4QixPQUFPZ0csaUJBQWlCO0VBQzFCO0VBQ0EsSUFBSStCLE9BQU8sR0FBRyxLQUFLO0VBQ25CLElBQU1DLGVBQWUsR0FBRzFCLFdBQVcsQ0FBQzlELEdBQUcsQ0FBQyxVQUFBNEQsVUFBVSxFQUFJO0lBQUEsSUFBQTZCLG9CQUFBO0lBQ3BELElBQUksR0FBQUEsb0JBQUEsR0FBQzdCLFVBQVUsQ0FBQ0ksUUFBUSxjQUFBeUIsb0JBQUEsZUFBbkJBLG9CQUFBLENBQXFCOUYsUUFBUSxDQUFDNEQsT0FBTyxDQUFDLEdBQUU7TUFDM0MsT0FBT0ssVUFBVTtJQUNuQjtJQUNBMkIsT0FBTyxHQUFHLElBQUk7SUFDZCxPQUFBakksYUFBQSxDQUFBQSxhQUFBLEtBQ0tzRyxVQUFVO01BQ2JJLFFBQVEsRUFBRUosVUFBVSxDQUFDSSxRQUFRLENBQUMvRyxNQUFNLENBQUMsVUFBQXFCLEVBQUU7UUFBQSxPQUFJQSxFQUFFLEtBQUtpRixPQUFPO01BQUE7SUFBQztFQUU5RCxDQUFDLENBQUM7RUFDRixJQUFJLENBQUNnQyxPQUFPLEVBQUU7SUFDWixPQUFPL0IsaUJBQWlCO0VBQzFCO0VBQ0EsT0FBQWxHLGFBQUEsQ0FBQUEsYUFBQSxLQUNLa0csaUJBQWlCO0lBQ3BCRSxXQUFXLEVBQUFwRyxhQUFBLENBQUFBLGFBQUEsS0FDTm9HLFdBQVc7TUFDZEcsTUFBTSxFQUFBdkcsYUFBQSxDQUFBQSxhQUFBLEtBQ0RvRyxXQUFXLENBQUNHLE1BQU07UUFDckJDLFdBQVcsRUFBRTBCO01BQWU7SUFDN0I7RUFDRjtBQUVMIiwiaWdub3JlTGlzdCI6W119