UNPKG

kepler.gl

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

107 lines (102 loc) 13.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.updateLayerColorFunctionDefinition = updateLayerColorFunctionDefinition; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); 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 // This file is used to call the LAYER_VISUAL_CHANNEL_CHANGE to update the layer style function updateLayerColorFunctionDefinition(context) { return { name: 'updateLayerColor', description: 'Update the color of a layer, e.g. fill color, stroke color.', properties: { layerId: { type: 'string', description: 'The id of the layer to update. This value should be returned from previous function calling tool. Otherwise, use the latest layerId.' }, numberOfColors: { type: 'number', description: 'The number of colors to update. The value should be returned from previous function calling tool. Otherwise, use the number of colors in the latest layer.' }, customColors: { type: 'array', items: { type: 'string' }, description: 'An array of hex color values. Please try to generate colors from user description like: van gogh starry night, water color etc.' } }, required: ['layerId', 'numberOfColors', 'customColors'], callbackFunction: updateLayerColorCallback, callbackFunctionContext: context }; } function updateLayerColorCallback(_ref) { var functionName = _ref.functionName, functionArgs = _ref.functionArgs, functionContext = _ref.functionContext; var _ref2 = functionArgs, layerId = _ref2.layerId, numberOfColors = _ref2.numberOfColors, customColors = _ref2.customColors; var _ref3 = functionContext, layers = _ref3.layers, layerVisualChannelConfigChange = _ref3.layerVisualChannelConfigChange; // get layer from visState by layerId var layer = layers.find(function (l) { return l.id === layerId; }); if (!layer) { return { type: 'layer', name: functionName, result: { success: false, details: "Layer with id ".concat(layerId, " not found") } }; } // verify numberOfColors is equal to customColors.length if (numberOfColors !== customColors.length) { return { type: 'layer', name: functionName, result: { success: false, details: "customColors array must contain exactly ".concat(numberOfColors, " colors") } }; } var channel = 'color'; var newConfig = { // colorScale: 'custom' }; var oldColorRange = layer.config.visConfig.colorRange; var newColorRange = _objectSpread(_objectSpread({}, oldColorRange), {}, { colors: customColors }, oldColorRange.colorMap ? { colorMap: (0, _toConsumableArray2["default"])(oldColorRange.colorMap.map(function (c, i) { return [c[0], customColors[i]]; })) } : {}); var newVisConfig = { colorRange: newColorRange, strokeColorRange: newColorRange }; layerVisualChannelConfigChange(layer, newConfig, channel, newVisConfig); return { type: 'updateLayer', name: functionName, result: { success: true, details: "Color updated successfully to ".concat(customColors.join(', '), " for layer ").concat(layerId) } }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1cGRhdGVMYXllckNvbG9yRnVuY3Rpb25EZWZpbml0aW9uIiwiY29udGV4dCIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInByb3BlcnRpZXMiLCJsYXllcklkIiwidHlwZSIsIm51bWJlck9mQ29sb3JzIiwiY3VzdG9tQ29sb3JzIiwiaXRlbXMiLCJyZXF1aXJlZCIsImNhbGxiYWNrRnVuY3Rpb24iLCJ1cGRhdGVMYXllckNvbG9yQ2FsbGJhY2siLCJjYWxsYmFja0Z1bmN0aW9uQ29udGV4dCIsIl9yZWYiLCJmdW5jdGlvbk5hbWUiLCJmdW5jdGlvbkFyZ3MiLCJmdW5jdGlvbkNvbnRleHQiLCJfcmVmMiIsIl9yZWYzIiwibGF5ZXJzIiwibGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlIiwibGF5ZXIiLCJmaW5kIiwibCIsImlkIiwicmVzdWx0Iiwic3VjY2VzcyIsImRldGFpbHMiLCJjb25jYXQiLCJsZW5ndGgiLCJjaGFubmVsIiwibmV3Q29uZmlnIiwib2xkQ29sb3JSYW5nZSIsImNvbmZpZyIsInZpc0NvbmZpZyIsImNvbG9yUmFuZ2UiLCJuZXdDb2xvclJhbmdlIiwiX29iamVjdFNwcmVhZCIsImNvbG9ycyIsImNvbG9yTWFwIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm1hcCIsImMiLCJpIiwibmV3VmlzQ29uZmlnIiwic3Ryb2tlQ29sb3JSYW5nZSIsImpvaW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvbGF5ZXItc3R5bGUtZnVuY3Rpb24udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIFRoaXMgZmlsZSBpcyB1c2VkIHRvIGNhbGwgdGhlIExBWUVSX1ZJU1VBTF9DSEFOTkVMX0NIQU5HRSB0byB1cGRhdGUgdGhlIGxheWVyIHN0eWxlXG5cbmltcG9ydCB7XG4gIENhbGxiYWNrRnVuY3Rpb25Qcm9wcyxcbiAgQ3VzdG9tRnVuY3Rpb25Db250ZXh0LFxuICBDdXN0b21GdW5jdGlvbk91dHB1dFByb3BzLFxuICBFcnJvckNhbGxiYWNrUmVzdWx0XG59IGZyb20gJ0BvcGVuYXNzaXN0YW50L2NvcmUnO1xuaW1wb3J0IHtBY3Rpb25IYW5kbGVyLCBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2V9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5pbXBvcnQge0xheWVyLCBMYXllckJhc2VDb25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvbGF5ZXJzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUxheWVyQ29sb3JGdW5jdGlvbkRlZmluaXRpb24oXG4gIGNvbnRleHQ6IEN1c3RvbUZ1bmN0aW9uQ29udGV4dDxBY3Rpb25IYW5kbGVyPHR5cGVvZiBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U+IHwgTGF5ZXJbXT5cbikge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd1cGRhdGVMYXllckNvbG9yJyxcbiAgICBkZXNjcmlwdGlvbjogJ1VwZGF0ZSB0aGUgY29sb3Igb2YgYSBsYXllciwgZS5nLiBmaWxsIGNvbG9yLCBzdHJva2UgY29sb3IuJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBsYXllcklkOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnVGhlIGlkIG9mIHRoZSBsYXllciB0byB1cGRhdGUuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gcHJldmlvdXMgZnVuY3Rpb24gY2FsbGluZyB0b29sLiBPdGhlcndpc2UsIHVzZSB0aGUgbGF0ZXN0IGxheWVySWQuJ1xuICAgICAgfSxcbiAgICAgIG51bWJlck9mQ29sb3JzOiB7XG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnVGhlIG51bWJlciBvZiBjb2xvcnMgdG8gdXBkYXRlLiBUaGUgdmFsdWUgc2hvdWxkIGJlIHJldHVybmVkIGZyb20gcHJldmlvdXMgZnVuY3Rpb24gY2FsbGluZyB0b29sLiBPdGhlcndpc2UsIHVzZSB0aGUgbnVtYmVyIG9mIGNvbG9ycyBpbiB0aGUgbGF0ZXN0IGxheWVyLidcbiAgICAgIH0sXG4gICAgICBjdXN0b21Db2xvcnM6IHtcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICB9LFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAnQW4gYXJyYXkgb2YgaGV4IGNvbG9yIHZhbHVlcy4gUGxlYXNlIHRyeSB0byBnZW5lcmF0ZSBjb2xvcnMgZnJvbSB1c2VyIGRlc2NyaXB0aW9uIGxpa2U6IHZhbiBnb2doIHN0YXJyeSBuaWdodCwgd2F0ZXIgY29sb3IgZXRjLidcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlcXVpcmVkOiBbJ2xheWVySWQnLCAnbnVtYmVyT2ZDb2xvcnMnLCAnY3VzdG9tQ29sb3JzJ10sXG4gICAgY2FsbGJhY2tGdW5jdGlvbjogdXBkYXRlTGF5ZXJDb2xvckNhbGxiYWNrLFxuICAgIGNhbGxiYWNrRnVuY3Rpb25Db250ZXh0OiBjb250ZXh0XG4gIH07XG59XG5cbnR5cGUgVXBkYXRlTGF5ZXJDb2xvckFyZ3MgPSB7XG4gIGxheWVySWQ6IHN0cmluZztcbiAgbnVtYmVyT2ZDb2xvcnM6IG51bWJlcjtcbiAgY3VzdG9tQ29sb3JzOiBzdHJpbmdbXTtcbn07XG5cbnR5cGUgVXBkYXRlTGF5ZXJDb2xvckZ1bmN0aW9uQ29udGV4dCA9IHtcbiAgbGF5ZXJzOiBMYXllcltdO1xuICBsYXllclZpc3VhbENoYW5uZWxDb25maWdDaGFuZ2U6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZT47XG59O1xuXG50eXBlIE91dHB1dERhdGFQcm9wcyA9IHtcbiAgbGF5ZXJJZDogc3RyaW5nO1xufTtcblxudHlwZSBTdWNjZXNzQ2FsbGJhY2tSZXN1bHQgPSB7XG4gIHN1Y2Nlc3M6IHRydWU7XG4gIGRldGFpbHM6IHN0cmluZztcbn07XG5cbnR5cGUgVXBkYXRlTGF5ZXJDb2xvckNhbGxiYWNrT3V0cHV0ID0gQ3VzdG9tRnVuY3Rpb25PdXRwdXRQcm9wczxcbiAgRXJyb3JDYWxsYmFja1Jlc3VsdCB8IFN1Y2Nlc3NDYWxsYmFja1Jlc3VsdCxcbiAgT3V0cHV0RGF0YVByb3BzXG4+O1xuXG5mdW5jdGlvbiB1cGRhdGVMYXllckNvbG9yQ2FsbGJhY2soe1xuICBmdW5jdGlvbk5hbWUsXG4gIGZ1bmN0aW9uQXJncyxcbiAgZnVuY3Rpb25Db250ZXh0XG59OiBDYWxsYmFja0Z1bmN0aW9uUHJvcHMpOiBVcGRhdGVMYXllckNvbG9yQ2FsbGJhY2tPdXRwdXQge1xuICBjb25zdCB7bGF5ZXJJZCwgbnVtYmVyT2ZDb2xvcnMsIGN1c3RvbUNvbG9yc30gPSBmdW5jdGlvbkFyZ3MgYXMgVXBkYXRlTGF5ZXJDb2xvckFyZ3M7XG4gIGNvbnN0IHtsYXllcnMsIGxheWVyVmlzdWFsQ2hhbm5lbENvbmZpZ0NoYW5nZX0gPVxuICAgIGZ1bmN0aW9uQ29udGV4dCBhcyBVcGRhdGVMYXllckNvbG9yRnVuY3Rpb25Db250ZXh0O1xuXG4gIC8vIGdldCBsYXllciBmcm9tIHZpc1N0YXRlIGJ5IGxheWVySWRcbiAgY29uc3QgbGF5ZXIgPSBsYXllcnMuZmluZChsID0+IGwuaWQgPT09IGxheWVySWQpO1xuICBpZiAoIWxheWVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdsYXllcicsXG4gICAgICBuYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGRldGFpbHM6IGBMYXllciB3aXRoIGlkICR7bGF5ZXJJZH0gbm90IGZvdW5kYFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyB2ZXJpZnkgbnVtYmVyT2ZDb2xvcnMgaXMgZXF1YWwgdG8gY3VzdG9tQ29sb3JzLmxlbmd0aFxuICBpZiAobnVtYmVyT2ZDb2xvcnMgIT09IGN1c3RvbUNvbG9ycy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2xheWVyJyxcbiAgICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZGV0YWlsczogYGN1c3RvbUNvbG9ycyBhcnJheSBtdXN0IGNvbnRhaW4gZXhhY3RseSAke251bWJlck9mQ29sb3JzfSBjb2xvcnNgXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNoYW5uZWwgPSAnY29sb3InO1xuXG4gIGNvbnN0IG5ld0NvbmZpZyA9IHtcbiAgICAvLyBjb2xvclNjYWxlOiAnY3VzdG9tJ1xuICB9IGFzIFBhcnRpYWw8TGF5ZXJCYXNlQ29uZmlnPjtcblxuICBjb25zdCBvbGRDb2xvclJhbmdlID0gbGF5ZXIuY29uZmlnLnZpc0NvbmZpZy5jb2xvclJhbmdlO1xuICBjb25zdCBuZXdDb2xvclJhbmdlID0ge1xuICAgIC4uLm9sZENvbG9yUmFuZ2UsXG4gICAgY29sb3JzOiBjdXN0b21Db2xvcnMsXG4gICAgLi4uKG9sZENvbG9yUmFuZ2UuY29sb3JNYXBcbiAgICAgID8ge1xuICAgICAgICAgIGNvbG9yTWFwOiBbLi4ub2xkQ29sb3JSYW5nZS5jb2xvck1hcC5tYXAoKGMsIGkpID0+IFtjWzBdLCBjdXN0b21Db2xvcnNbaV1dKV1cbiAgICAgICAgfVxuICAgICAgOiB7fSlcbiAgfTtcblxuICBjb25zdCBuZXdWaXNDb25maWcgPSB7XG4gICAgY29sb3JSYW5nZTogbmV3Q29sb3JSYW5nZSxcbiAgICBzdHJva2VDb2xvclJhbmdlOiBuZXdDb2xvclJhbmdlXG4gIH07XG5cbiAgbGF5ZXJWaXN1YWxDaGFubmVsQ29uZmlnQ2hhbmdlKGxheWVyLCBuZXdDb25maWcsIGNoYW5uZWwsIG5ld1Zpc0NvbmZpZyk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndXBkYXRlTGF5ZXInLFxuICAgIG5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICByZXN1bHQ6IHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBkZXRhaWxzOiBgQ29sb3IgdXBkYXRlZCBzdWNjZXNzZnVsbHkgdG8gJHtjdXN0b21Db2xvcnMuam9pbignLCAnKX0gZm9yIGxheWVyICR7bGF5ZXJJZH1gXG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7O0FBV08sU0FBU0Esa0NBQWtDQSxDQUNoREMsT0FBOEYsRUFDOUY7RUFDQSxPQUFPO0lBQ0xDLElBQUksRUFBRSxrQkFBa0I7SUFDeEJDLFdBQVcsRUFBRSw2REFBNkQ7SUFDMUVDLFVBQVUsRUFBRTtNQUNWQyxPQUFPLEVBQUU7UUFDUEMsSUFBSSxFQUFFLFFBQVE7UUFDZEgsV0FBVyxFQUNUO01BQ0osQ0FBQztNQUNESSxjQUFjLEVBQUU7UUFDZEQsSUFBSSxFQUFFLFFBQVE7UUFDZEgsV0FBVyxFQUNUO01BQ0osQ0FBQztNQUNESyxZQUFZLEVBQUU7UUFDWkYsSUFBSSxFQUFFLE9BQU87UUFDYkcsS0FBSyxFQUFFO1VBQ0xILElBQUksRUFBRTtRQUNSLENBQUM7UUFDREgsV0FBVyxFQUNUO01BQ0o7SUFDRixDQUFDO0lBQ0RPLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLENBQUM7SUFDdkRDLGdCQUFnQixFQUFFQyx3QkFBd0I7SUFDMUNDLHVCQUF1QixFQUFFWjtFQUMzQixDQUFDO0FBQ0g7QUEyQkEsU0FBU1csd0JBQXdCQSxDQUFBRSxJQUFBLEVBSXlCO0VBQUEsSUFIeERDLFlBQVksR0FBQUQsSUFBQSxDQUFaQyxZQUFZO0lBQ1pDLFlBQVksR0FBQUYsSUFBQSxDQUFaRSxZQUFZO0lBQ1pDLGVBQWUsR0FBQUgsSUFBQSxDQUFmRyxlQUFlO0VBRWYsSUFBQUMsS0FBQSxHQUFnREYsWUFBWTtJQUFyRFgsT0FBTyxHQUFBYSxLQUFBLENBQVBiLE9BQU87SUFBRUUsY0FBYyxHQUFBVyxLQUFBLENBQWRYLGNBQWM7SUFBRUMsWUFBWSxHQUFBVSxLQUFBLENBQVpWLFlBQVk7RUFDNUMsSUFBQVcsS0FBQSxHQUNFRixlQUFlO0lBRFZHLE1BQU0sR0FBQUQsS0FBQSxDQUFOQyxNQUFNO0lBQUVDLDhCQUE4QixHQUFBRixLQUFBLENBQTlCRSw4QkFBOEI7O0VBRzdDO0VBQ0EsSUFBTUMsS0FBSyxHQUFHRixNQUFNLENBQUNHLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxFQUFFLEtBQUtwQixPQUFPO0VBQUEsRUFBQztFQUNoRCxJQUFJLENBQUNpQixLQUFLLEVBQUU7SUFDVixPQUFPO01BQ0xoQixJQUFJLEVBQUUsT0FBTztNQUNiSixJQUFJLEVBQUVhLFlBQVk7TUFDbEJXLE1BQU0sRUFBRTtRQUNOQyxPQUFPLEVBQUUsS0FBSztRQUNkQyxPQUFPLG1CQUFBQyxNQUFBLENBQW1CeEIsT0FBTztNQUNuQztJQUNGLENBQUM7RUFDSDs7RUFFQTtFQUNBLElBQUlFLGNBQWMsS0FBS0MsWUFBWSxDQUFDc0IsTUFBTSxFQUFFO0lBQzFDLE9BQU87TUFDTHhCLElBQUksRUFBRSxPQUFPO01BQ2JKLElBQUksRUFBRWEsWUFBWTtNQUNsQlcsTUFBTSxFQUFFO1FBQ05DLE9BQU8sRUFBRSxLQUFLO1FBQ2RDLE9BQU8sNkNBQUFDLE1BQUEsQ0FBNkN0QixjQUFjO01BQ3BFO0lBQ0YsQ0FBQztFQUNIO0VBRUEsSUFBTXdCLE9BQU8sR0FBRyxPQUFPO0VBRXZCLElBQU1DLFNBQVMsR0FBRztJQUNoQjtFQUFBLENBQzJCO0VBRTdCLElBQU1DLGFBQWEsR0FBR1gsS0FBSyxDQUFDWSxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsVUFBVTtFQUN2RCxJQUFNQyxhQUFhLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNkTCxhQUFhO0lBQ2hCTSxNQUFNLEVBQUUvQjtFQUFZLEdBQ2hCeUIsYUFBYSxDQUFDTyxRQUFRLEdBQ3RCO0lBQ0VBLFFBQVEsTUFBQUMsbUJBQUEsYUFBTVIsYUFBYSxDQUFDTyxRQUFRLENBQUNFLEdBQUcsQ0FBQyxVQUFDQyxDQUFDLEVBQUVDLENBQUM7TUFBQSxPQUFLLENBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRW5DLFlBQVksQ0FBQ29DLENBQUMsQ0FBQyxDQUFDO0lBQUEsRUFBQztFQUM3RSxDQUFDLEdBQ0QsQ0FBQyxDQUFDLENBQ1A7RUFFRCxJQUFNQyxZQUFZLEdBQUc7SUFDbkJULFVBQVUsRUFBRUMsYUFBYTtJQUN6QlMsZ0JBQWdCLEVBQUVUO0VBQ3BCLENBQUM7RUFFRGhCLDhCQUE4QixDQUFDQyxLQUFLLEVBQUVVLFNBQVMsRUFBRUQsT0FBTyxFQUFFYyxZQUFZLENBQUM7RUFFdkUsT0FBTztJQUNMdkMsSUFBSSxFQUFFLGFBQWE7SUFDbkJKLElBQUksRUFBRWEsWUFBWTtJQUNsQlcsTUFBTSxFQUFFO01BQ05DLE9BQU8sRUFBRSxJQUFJO01BQ2JDLE9BQU8sbUNBQUFDLE1BQUEsQ0FBbUNyQixZQUFZLENBQUN1QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFBbEIsTUFBQSxDQUFjeEIsT0FBTztJQUN4RjtFQUNGLENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==