kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
126 lines (122 loc) • 21.4 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDefaultValueForParameter = exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _core = require("@deck.gl/core");
var _shadertools = require("@luma.gl/shadertools");
var _constants = require("@kepler.gl/constants");
var _effect = _interopRequireDefault(require("./effect"));
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; }
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; }
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
// Copyright contributors to the kepler.gl project
var POSTPROCESSING_EFFECTS_DESCS = [_objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.ink), {}, {
"class": _shadertools.ink
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.brightnessContrast), {}, {
"class": _shadertools.brightnessContrast
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.hueSaturation), {}, {
"class": _shadertools.hueSaturation
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.vibrance), {}, {
"class": _shadertools.vibrance
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.sepia), {}, {
"class": _shadertools.sepia
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.dotScreen), {}, {
"class": _shadertools.dotScreen
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.colorHalftone), {}, {
"class": _shadertools.colorHalftone
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.noise), {}, {
"class": _shadertools.noise
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.triangleBlur), {}, {
"class": _shadertools.triangleBlur
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.zoomBlur), {}, {
"class": _shadertools.zoomBlur
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.tiltShift), {}, {
"class": _shadertools.tiltShift
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.edgeWork), {}, {
"class": _shadertools.edgeWork
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.vignette), {}, {
"class": _shadertools.vignette
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.magnify), {}, {
"class": _shadertools.magnify
}), _objectSpread(_objectSpread({}, _constants.POSTPROCESSING_EFFECTS.hexagonalPixelate), {}, {
"class": _shadertools.hexagonalPixelate
})];
/**
* Returns default parameter value based on effect description.
* @param name Name of the parameter.
* @param effectDescription Effect's description.
* @param uniformsDesc Effect's uniforms.
* @returns
*/
var getDefaultValueForParameter = exports.getDefaultValueForParameter = function getDefaultValueForParameter(name, effectDescription, uniformsDesc) {
var _ref, _ref2, _description$defaultV;
var description = effectDescription.find(function (param) {
return param.name === name;
});
var uniform = uniformsDesc[name];
return (_ref = (_ref2 = (_description$defaultV = description === null || description === void 0 ? void 0 : description.defaultValue) !== null && _description$defaultV !== void 0 ? _description$defaultV : uniform === null || uniform === void 0 ? void 0 : uniform.value) !== null && _ref2 !== void 0 ? _ref2 : uniform) !== null && _ref !== void 0 ? _ref : description === null || description === void 0 ? void 0 : description.min;
};
var PostProcessingEffect = /*#__PURE__*/function (_Effect) {
// deckEffect: PostProcessEffect | LightingEffect | null;
function PostProcessingEffect(props) {
(0, _classCallCheck2["default"])(this, PostProcessingEffect);
return _callSuper(this, PostProcessingEffect, [props]);
}
(0, _inherits2["default"])(PostProcessingEffect, _Effect);
return (0, _createClass2["default"])(PostProcessingEffect, [{
key: "_initializeEffect",
value: function _initializeEffect() {
var _this = this;
var effectDesc = POSTPROCESSING_EFFECTS_DESCS.find(function (desc) {
return desc.type === _this.type;
});
if (effectDesc) {
var _this$deckEffect;
this.deckEffect = new _core.PostProcessEffect(effectDesc["class"], this.parameters);
var uniforms = (_this$deckEffect = this.deckEffect) === null || _this$deckEffect === void 0 || (_this$deckEffect = _this$deckEffect.module) === null || _this$deckEffect === void 0 ? void 0 : _this$deckEffect.uniforms;
if (uniforms) {
var _this$deckEffect2;
// get default parameters
var keys = Object.keys(uniforms);
var defaultParameters = {};
keys.forEach(function (key) {
defaultParameters[key] = getDefaultValueForParameter(key, _this._uiConfig, uniforms);
});
this.parameters = _objectSpread(_objectSpread({}, defaultParameters), this.parameters);
(_this$deckEffect2 = this.deckEffect) === null || _this$deckEffect2 === void 0 || _this$deckEffect2.setProps(this.parameters);
}
}
}
}, {
key: "getDefaultProps",
value: function getDefaultProps() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return _superPropGet(PostProcessingEffect, "getDefaultProps", this, 3)([_objectSpread({
type: _constants.DEFAULT_POST_PROCESSING_EFFECT_TYPE
}, props)]);
}
}, {
key: "setProps",
value: function setProps(props) {
_superPropGet(PostProcessingEffect, "setProps", this, 3)([props]);
// any uniform updated?
if (props.parameters) {
var _this$deckEffect3;
(_this$deckEffect3 = this.deckEffect) === null || _this$deckEffect3 === void 0 || _this$deckEffect3.setProps(this.parameters);
}
}
}]);
}(_effect["default"]);
var _default = exports["default"] = PostProcessingEffect;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29yZSIsInJlcXVpcmUiLCJfc2hhZGVydG9vbHMiLCJfY29uc3RhbnRzIiwiX2VmZmVjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY2FsbFN1cGVyIiwidCIsIm8iLCJlIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJhcHBseSIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsIl9zdXBlclByb3BHZXQiLCJyIiwicCIsIl9nZXQyIiwib3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTX0RFU0NTIiwiUE9TVFBST0NFU1NJTkdfRUZGRUNUUyIsImluayIsImJyaWdodG5lc3NDb250cmFzdCIsImh1ZVNhdHVyYXRpb24iLCJ2aWJyYW5jZSIsInNlcGlhIiwiZG90U2NyZWVuIiwiY29sb3JIYWxmdG9uZSIsIm5vaXNlIiwidHJpYW5nbGVCbHVyIiwiem9vbUJsdXIiLCJ0aWx0U2hpZnQiLCJlZGdlV29yayIsInZpZ25ldHRlIiwibWFnbmlmeSIsImhleGFnb25hbFBpeGVsYXRlIiwiZ2V0RGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyIiwiZXhwb3J0cyIsIm5hbWUiLCJlZmZlY3REZXNjcmlwdGlvbiIsInVuaWZvcm1zRGVzYyIsIl9yZWYiLCJfcmVmMiIsIl9kZXNjcmlwdGlvbiRkZWZhdWx0ViIsImRlc2NyaXB0aW9uIiwiZmluZCIsInBhcmFtIiwidW5pZm9ybSIsImRlZmF1bHRWYWx1ZSIsInZhbHVlIiwibWluIiwiUG9zdFByb2Nlc3NpbmdFZmZlY3QiLCJfRWZmZWN0IiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW5pdGlhbGl6ZUVmZmVjdCIsIl90aGlzIiwiZWZmZWN0RGVzYyIsImRlc2MiLCJ0eXBlIiwiX3RoaXMkZGVja0VmZmVjdCIsImRlY2tFZmZlY3QiLCJEZWNrUG9zdFByb2Nlc3NFZmZlY3QiLCJwYXJhbWV0ZXJzIiwidW5pZm9ybXMiLCJtb2R1bGUiLCJfdGhpcyRkZWNrRWZmZWN0MiIsImRlZmF1bHRQYXJhbWV0ZXJzIiwiX3VpQ29uZmlnIiwic2V0UHJvcHMiLCJnZXREZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJERUZBVUxUX1BPU1RfUFJPQ0VTU0lOR19FRkZFQ1RfVFlQRSIsIl90aGlzJGRlY2tFZmZlY3QzIiwiRWZmZWN0IiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvcG9zdC1wcm9jZXNzaW5nLWVmZmVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQge1Bvc3RQcm9jZXNzRWZmZWN0IGFzIERlY2tQb3N0UHJvY2Vzc0VmZmVjdH0gZnJvbSAnQGRlY2suZ2wvY29yZSc7XG5pbXBvcnQge1xuICBicmlnaHRuZXNzQ29udHJhc3QsXG4gIGluayxcbiAgdHJpYW5nbGVCbHVyLFxuICBodWVTYXR1cmF0aW9uLFxuICB2aWJyYW5jZSxcbiAgY29sb3JIYWxmdG9uZSxcbiAgZG90U2NyZWVuLFxuICBlZGdlV29yayxcbiAgbm9pc2UsXG4gIHNlcGlhLFxuICB0aWx0U2hpZnQsXG4gIHZpZ25ldHRlLFxuICB6b29tQmx1cixcbiAgbWFnbmlmeSxcbiAgaGV4YWdvbmFsUGl4ZWxhdGVcbn0gZnJvbSAnQGx1bWEuZ2wvc2hhZGVydG9vbHMnO1xuXG5pbXBvcnQge1BPU1RQUk9DRVNTSU5HX0VGRkVDVFMsIERFRkFVTFRfUE9TVF9QUk9DRVNTSU5HX0VGRkVDVF9UWVBFfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0VmZmVjdFByb3BzUGFydGlhbCwgRWZmZWN0UGFyYW1ldGVyRGVzY3JpcHRpb259IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQgRWZmZWN0IGZyb20gJy4vZWZmZWN0JztcblxuY29uc3QgUE9TVFBST0NFU1NJTkdfRUZGRUNUU19ERVNDUyA9IFtcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuaW5rLFxuICAgIGNsYXNzOiBpbmtcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuYnJpZ2h0bmVzc0NvbnRyYXN0LFxuICAgIGNsYXNzOiBicmlnaHRuZXNzQ29udHJhc3RcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuaHVlU2F0dXJhdGlvbixcbiAgICBjbGFzczogaHVlU2F0dXJhdGlvblxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy52aWJyYW5jZSxcbiAgICBjbGFzczogdmlicmFuY2VcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuc2VwaWEsXG4gICAgY2xhc3M6IHNlcGlhXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLmRvdFNjcmVlbixcbiAgICBjbGFzczogZG90U2NyZWVuXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLmNvbG9ySGFsZnRvbmUsXG4gICAgY2xhc3M6IGNvbG9ySGFsZnRvbmVcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMubm9pc2UsXG4gICAgY2xhc3M6IG5vaXNlXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLnRyaWFuZ2xlQmx1cixcbiAgICBjbGFzczogdHJpYW5nbGVCbHVyXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLnpvb21CbHVyLFxuICAgIGNsYXNzOiB6b29tQmx1clxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy50aWx0U2hpZnQsXG4gICAgY2xhc3M6IHRpbHRTaGlmdFxuICB9LFxuICB7XG4gICAgLi4uUE9TVFBST0NFU1NJTkdfRUZGRUNUUy5lZGdlV29yayxcbiAgICBjbGFzczogZWRnZVdvcmtcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMudmlnbmV0dGUsXG4gICAgY2xhc3M6IHZpZ25ldHRlXG4gIH0sXG4gIHtcbiAgICAuLi5QT1NUUFJPQ0VTU0lOR19FRkZFQ1RTLm1hZ25pZnksXG4gICAgY2xhc3M6IG1hZ25pZnlcbiAgfSxcbiAge1xuICAgIC4uLlBPU1RQUk9DRVNTSU5HX0VGRkVDVFMuaGV4YWdvbmFsUGl4ZWxhdGUsXG4gICAgY2xhc3M6IGhleGFnb25hbFBpeGVsYXRlXG4gIH1cbl07XG5cbi8qKlxuICogUmV0dXJucyBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBiYXNlZCBvbiBlZmZlY3QgZGVzY3JpcHRpb24uXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gKiBAcGFyYW0gZWZmZWN0RGVzY3JpcHRpb24gRWZmZWN0J3MgZGVzY3JpcHRpb24uXG4gKiBAcGFyYW0gdW5pZm9ybXNEZXNjIEVmZmVjdCdzIHVuaWZvcm1zLlxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRWYWx1ZUZvclBhcmFtZXRlciA9IChcbiAgbmFtZTogc3RyaW5nLFxuICBlZmZlY3REZXNjcmlwdGlvbjogRWZmZWN0UGFyYW1ldGVyRGVzY3JpcHRpb25bXSxcbiAgdW5pZm9ybXNEZXNjOiBhbnlcbikgPT4ge1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGVmZmVjdERlc2NyaXB0aW9uLmZpbmQocGFyYW0gPT4gcGFyYW0ubmFtZSA9PT0gbmFtZSk7XG4gIGNvbnN0IHVuaWZvcm0gPSB1bmlmb3Jtc0Rlc2NbbmFtZV07XG4gIHJldHVybiBkZXNjcmlwdGlvbj8uZGVmYXVsdFZhbHVlID8/IHVuaWZvcm0/LnZhbHVlID8/IHVuaWZvcm0gPz8gZGVzY3JpcHRpb24/Lm1pbjtcbn07XG5cbmNsYXNzIFBvc3RQcm9jZXNzaW5nRWZmZWN0IGV4dGVuZHMgRWZmZWN0IHtcbiAgLy8gZGVja0VmZmVjdDogUG9zdFByb2Nlc3NFZmZlY3QgfCBMaWdodGluZ0VmZmVjdCB8IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEVmZmVjdFByb3BzUGFydGlhbCkge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIF9pbml0aWFsaXplRWZmZWN0KCkge1xuICAgIGNvbnN0IGVmZmVjdERlc2MgPSBQT1NUUFJPQ0VTU0lOR19FRkZFQ1RTX0RFU0NTLmZpbmQoZGVzYyA9PiBkZXNjLnR5cGUgPT09IHRoaXMudHlwZSk7XG4gICAgaWYgKGVmZmVjdERlc2MpIHtcbiAgICAgIHRoaXMuZGVja0VmZmVjdCA9IG5ldyBEZWNrUG9zdFByb2Nlc3NFZmZlY3QoZWZmZWN0RGVzYy5jbGFzcywgdGhpcy5wYXJhbWV0ZXJzKTtcblxuICAgICAgY29uc3QgdW5pZm9ybXMgPSB0aGlzLmRlY2tFZmZlY3Q/Lm1vZHVsZT8udW5pZm9ybXM7XG4gICAgICBpZiAodW5pZm9ybXMpIHtcbiAgICAgICAgLy8gZ2V0IGRlZmF1bHQgcGFyYW1ldGVyc1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModW5pZm9ybXMpO1xuICAgICAgICBjb25zdCBkZWZhdWx0UGFyYW1ldGVycyA9IHt9O1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBkZWZhdWx0UGFyYW1ldGVyc1trZXldID0gZ2V0RGVmYXVsdFZhbHVlRm9yUGFyYW1ldGVyKGtleSwgdGhpcy5fdWlDb25maWcsIHVuaWZvcm1zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGFyYW1ldGVycyA9IHsuLi5kZWZhdWx0UGFyYW1ldGVycywgLi4udGhpcy5wYXJhbWV0ZXJzfTtcbiAgICAgICAgdGhpcy5kZWNrRWZmZWN0Py5zZXRQcm9wcyh0aGlzLnBhcmFtZXRlcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldERlZmF1bHRQcm9wcyhwcm9wczogRWZmZWN0UHJvcHNQYXJ0aWFsID0ge30pIHtcbiAgICByZXR1cm4gc3VwZXIuZ2V0RGVmYXVsdFByb3BzKHt0eXBlOiBERUZBVUxUX1BPU1RfUFJPQ0VTU0lOR19FRkZFQ1RfVFlQRSwgLi4ucHJvcHN9KTtcbiAgfVxuXG4gIHNldFByb3BzKHByb3BzOiBFZmZlY3RQcm9wc1BhcnRpYWwpIHtcbiAgICBzdXBlci5zZXRQcm9wcyhwcm9wcyk7XG5cbiAgICAvLyBhbnkgdW5pZm9ybSB1cGRhdGVkP1xuICAgIGlmIChwcm9wcy5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLmRlY2tFZmZlY3Q/LnNldFByb3BzKHRoaXMucGFyYW1ldGVycyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBvc3RQcm9jZXNzaW5nRWZmZWN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQWtCQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFHQSxJQUFBRyxPQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFBOEIsU0FBQUssV0FBQUMsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsV0FBQUQsQ0FBQSxPQUFBRSxnQkFBQSxhQUFBRixDQUFBLE9BQUFHLDJCQUFBLGFBQUFKLENBQUEsRUFB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QSxnQkFBQSxDQUF5QkksUUFBUTtRQUNsRCxJQUFJQSxRQUFRLEVBQUU7VUFBQSxJQUFBRSxpQkFBQTtVQUNaO1VBQ0EsSUFBTWhFLElBQUksR0FBR0QsTUFBTSxDQUFDQyxJQUFJLENBQUM4RCxRQUFRLENBQUM7VUFDbEMsSUFBTUcsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO1VBQzVCakUsSUFBSSxDQUFDUyxPQUFPLENBQUMsVUFBQTJDLEdBQUcsRUFBSTtZQUNsQmEsaUJBQWlCLENBQUNiLEdBQUcsQ0FBQyxHQUFHckIsMkJBQTJCLENBQUNxQixHQUFHLEVBQUVFLEtBQUksQ0FBQ1ksU0FBUyxFQUFFSixRQUFRLENBQUM7VUFDckYsQ0FBQyxDQUFDO1VBQ0YsSUFBSSxDQUFDRCxVQUFVLEdBQUF2RCxhQUFBLENBQUFBLGFBQUEsS0FBTzJELGlCQUFpQixHQUFLLElBQUksQ0FBQ0osVUFBVSxDQUFDO1VBQzVELENBQUFHLGlCQUFBLE9BQUksQ0FBQ0wsVUFBVSxjQUFBSyxpQkFBQSxlQUFmQSxpQkFBQSxDQUFpQkcsUUFBUSxDQUFDLElBQUksQ0FBQ04sVUFBVSxDQUFDO1FBQzVDO01BQ0Y7SUFDRjtFQUFDO0lBQUFULEdBQUE7SUFBQVIsS0FBQSxFQUVELFNBQUF3QixlQUFlQSxDQUFBLEVBQWlDO01BQUEsSUFBaENwQixLQUF5QixHQUFBekMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQThELFNBQUEsR0FBQTlELFNBQUEsTUFBRyxDQUFDLENBQUM7TUFDNUMsT0FBQWIsYUFBQSxDQUFBb0Qsb0JBQUEsK0JBQUF4QyxhQUFBO1FBQThCbUQsSUFBSSxFQUFFYTtNQUFtQyxHQUFLdEIsS0FBSztJQUNuRjtFQUFDO0lBQUFJLEdBQUE7SUFBQVIsS0FBQSxFQUVELFNBQUF1QixRQUFRQSxDQUFDbkIsS0FBeUIsRUFBRTtNQUNsQ3RELGFBQUEsQ0FBQW9ELG9CQUFBLHdCQUFlRSxLQUFLOztNQUVwQjtNQUNBLElBQUlBLEtBQUssQ0FBQ2EsVUFBVSxFQUFFO1FBQUEsSUFBQVUsaUJBQUE7UUFDcEIsQ0FBQUEsaUJBQUEsT0FBSSxDQUFDWixVQUFVLGNBQUFZLGlCQUFBLGVBQWZBLGlCQUFBLENBQWlCSixRQUFRLENBQUMsSUFBSSxDQUFDTixVQUFVLENBQUM7TUFDNUM7SUFDRjtFQUFDO0FBQUEsRUFyQ2dDVyxrQkFBTTtBQUFBLElBQUFDLFFBQUEsR0FBQXpDLE9BQUEsY0F3QzFCYyxvQkFBb0IiLCJpZ25vcmVMaXN0IjpbXX0=
;