kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
158 lines (131 loc) • 18.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.gridVisConfigs = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
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 _deck = require("deck.gl");
var _aggregationLayer = _interopRequireDefault(require("../aggregation-layer"));
var _enhancedGridLayer = _interopRequireDefault(require("../../deckgl-layers/grid-layer/enhanced-grid-layer"));
var _gridUtils = require("./grid-utils");
var _gridLayerIcon = _interopRequireDefault(require("./grid-layer-icon"));
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
var gridVisConfigs = {
opacity: 'opacity',
worldUnitSize: 'worldUnitSize',
colorRange: 'colorRange',
coverage: 'coverage',
sizeRange: 'elevationRange',
percentile: 'percentile',
elevationPercentile: 'elevationPercentile',
elevationScale: 'elevationScale',
'hi-precision': 'hi-precision',
colorAggregation: 'aggregation',
sizeAggregation: 'sizeAggregation',
enable3d: 'enable3d'
};
exports.gridVisConfigs = gridVisConfigs;
var GridLayer =
/*#__PURE__*/
function (_AggregationLayer) {
(0, _inherits2["default"])(GridLayer, _AggregationLayer);
function GridLayer(props) {
var _this;
(0, _classCallCheck2["default"])(this, GridLayer);
_this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(GridLayer).call(this, props));
_this.registerVisConfig(gridVisConfigs);
_this.visConfigSettings.worldUnitSize.label = 'Grid Size (km)';
return _this;
}
(0, _createClass2["default"])(GridLayer, [{
key: "formatLayerData",
value: function formatLayerData(_, allData, filteredIndex, oldLayerData) {
var opt = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
var formattedData = (0, _get2["default"])((0, _getPrototypeOf2["default"])(GridLayer.prototype), "formatLayerData", this).call(this, _, allData, filteredIndex, oldLayerData, opt);
var getPosition = formattedData.getPosition,
data = formattedData.data; // TODO: fix this in deck.gl layer
var cleaned = data.filter(function (d) {
var pos = getPosition(d);
return pos.every(Number.isFinite);
}); // All data processing is done in deck.gl layer
return _objectSpread({}, formattedData, {
data: cleaned
});
}
}, {
key: "renderLayer",
value: function renderLayer(_ref) {
var data = _ref.data,
idx = _ref.idx,
objectHovered = _ref.objectHovered,
mapState = _ref.mapState,
interaction = _ref.interaction,
layerCallbacks = _ref.layerCallbacks;
var zoomFactor = this.getZoomFactor(mapState);
var eleZoomFactor = this.getElevationZoomFactor(mapState);
var visConfig = this.config.visConfig;
var cellSize = visConfig.worldUnitSize * 1000;
return [new _enhancedGridLayer["default"](_objectSpread({}, data, {
id: this.id,
idx: idx,
cellSize: cellSize,
coverage: visConfig.coverage,
// highlight
autoHighlight: visConfig.enable3d,
// color
colorRange: this.getColorRange(visConfig.colorRange),
colorScale: this.config.colorScale,
opacity: visConfig.opacity,
upperPercentile: visConfig.percentile[1],
lowerPercentile: visConfig.percentile[0],
// elevation
extruded: visConfig.enable3d,
elevationScale: visConfig.elevationScale * eleZoomFactor,
elevationLowerPercentile: visConfig.elevationPercentile[0],
elevationUpperPercentile: visConfig.elevationPercentile[1],
// parameters
parameters: {
depthTest: Boolean(visConfig.enable3d || mapState.dragRotate)
},
// render
fp64: visConfig['hi-precision'],
pickable: true,
lightSettings: this.meta && this.meta.lightSettings,
// callbacks
onSetColorDomain: layerCallbacks.onSetLayerDomain
}))].concat((0, _toConsumableArray2["default"])(this.isLayerHovered(objectHovered) && !visConfig.enable3d ? [new _deck.GeoJsonLayer({
id: "".concat(this.id, "-hovered"),
data: [(0, _gridUtils.pointToPolygonGeo)({
object: objectHovered.object,
cellSize: cellSize,
coverage: visConfig.coverage,
mapState: mapState
})],
getLineColor: this.config.highlightColor,
lineWidthScale: 8 * zoomFactor
})] : []));
}
}, {
key: "type",
get: function get() {
return 'grid';
}
}, {
key: "layerIcon",
get: function get() {
return _gridLayerIcon["default"];
}
}]);
return GridLayer;
}(_aggregationLayer["default"]);
exports["default"] = GridLayer;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9sYXllcnMvZ3JpZC1sYXllci9ncmlkLWxheWVyLmpzIl0sIm5hbWVzIjpbImdyaWRWaXNDb25maWdzIiwib3BhY2l0eSIsIndvcmxkVW5pdFNpemUiLCJjb2xvclJhbmdlIiwiY292ZXJhZ2UiLCJzaXplUmFuZ2UiLCJwZXJjZW50aWxlIiwiZWxldmF0aW9uUGVyY2VudGlsZSIsImVsZXZhdGlvblNjYWxlIiwiY29sb3JBZ2dyZWdhdGlvbiIsInNpemVBZ2dyZWdhdGlvbiIsImVuYWJsZTNkIiwiR3JpZExheWVyIiwicHJvcHMiLCJyZWdpc3RlclZpc0NvbmZpZyIsInZpc0NvbmZpZ1NldHRpbmdzIiwibGFiZWwiLCJfIiwiYWxsRGF0YSIsImZpbHRlcmVkSW5kZXgiLCJvbGRMYXllckRhdGEiLCJvcHQiLCJmb3JtYXR0ZWREYXRhIiwiZ2V0UG9zaXRpb24iLCJkYXRhIiwiY2xlYW5lZCIsImZpbHRlciIsImQiLCJwb3MiLCJldmVyeSIsIk51bWJlciIsImlzRmluaXRlIiwiaWR4Iiwib2JqZWN0SG92ZXJlZCIsIm1hcFN0YXRlIiwiaW50ZXJhY3Rpb24iLCJsYXllckNhbGxiYWNrcyIsInpvb21GYWN0b3IiLCJnZXRab29tRmFjdG9yIiwiZWxlWm9vbUZhY3RvciIsImdldEVsZXZhdGlvblpvb21GYWN0b3IiLCJ2aXNDb25maWciLCJjb25maWciLCJjZWxsU2l6ZSIsIkVuaGFuY2VkR3JpZExheWVyIiwiaWQiLCJhdXRvSGlnaGxpZ2h0IiwiZ2V0Q29sb3JSYW5nZSIsImNvbG9yU2NhbGUiLCJ1cHBlclBlcmNlbnRpbGUiLCJsb3dlclBlcmNlbnRpbGUiLCJleHRydWRlZCIsImVsZXZhdGlvbkxvd2VyUGVyY2VudGlsZSIsImVsZXZhdGlvblVwcGVyUGVyY2VudGlsZSIsInBhcmFtZXRlcnMiLCJkZXB0aFRlc3QiLCJCb29sZWFuIiwiZHJhZ1JvdGF0ZSIsImZwNjQiLCJwaWNrYWJsZSIsImxpZ2h0U2V0dGluZ3MiLCJtZXRhIiwib25TZXRDb2xvckRvbWFpbiIsIm9uU2V0TGF5ZXJEb21haW4iLCJpc0xheWVySG92ZXJlZCIsIkdlb0pzb25MYXllciIsIm9iamVjdCIsImdldExpbmVDb2xvciIsImhpZ2hsaWdodENvbG9yIiwibGluZVdpZHRoU2NhbGUiLCJHcmlkTGF5ZXJJY29uIiwiQWdncmVnYXRpb25MYXllciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRU8sSUFBTUEsY0FBYyxHQUFHO0FBQzVCQyxFQUFBQSxPQUFPLEVBQUUsU0FEbUI7QUFFNUJDLEVBQUFBLGFBQWEsRUFBRSxlQUZhO0FBRzVCQyxFQUFBQSxVQUFVLEVBQUUsWUFIZ0I7QUFJNUJDLEVBQUFBLFFBQVEsRUFBRSxVQUprQjtBQUs1QkMsRUFBQUEsU0FBUyxFQUFFLGdCQUxpQjtBQU01QkMsRUFBQUEsVUFBVSxFQUFFLFlBTmdCO0FBTzVCQyxFQUFBQSxtQkFBbUIsRUFBRSxxQkFQTztBQVE1QkMsRUFBQUEsY0FBYyxFQUFFLGdCQVJZO0FBUzVCLGtCQUFnQixjQVRZO0FBVTVCQyxFQUFBQSxnQkFBZ0IsRUFBRSxhQVZVO0FBVzVCQyxFQUFBQSxlQUFlLEVBQUUsaUJBWFc7QUFZNUJDLEVBQUFBLFFBQVEsRUFBRTtBQVprQixDQUF2Qjs7O0lBZWNDLFM7Ozs7O0FBQ25CLHFCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUE7QUFDakIscUhBQU1BLEtBQU47O0FBRUEsVUFBS0MsaUJBQUwsQ0FBdUJkLGNBQXZCOztBQUNBLFVBQUtlLGlCQUFMLENBQXVCYixhQUF2QixDQUFxQ2MsS0FBckMsR0FBNkMsZ0JBQTdDO0FBSmlCO0FBS2xCOzs7O29DQVVlQyxDLEVBQUdDLE8sRUFBU0MsYSxFQUFlQyxZLEVBQXdCO0FBQUEsVUFBVkMsR0FBVSx1RUFBSixFQUFJO0FBQ2pFLFVBQU1DLGFBQWEsb0hBQ2pCTCxDQURpQixFQUVqQkMsT0FGaUIsRUFHakJDLGFBSGlCLEVBSWpCQyxZQUppQixFQUtqQkMsR0FMaUIsQ0FBbkI7QUFEaUUsVUFTMURFLFdBVDBELEdBU3JDRCxhQVRxQyxDQVMxREMsV0FUMEQ7QUFBQSxVQVM3Q0MsSUFUNkMsR0FTckNGLGFBVHFDLENBUzdDRSxJQVQ2QyxFQVdqRTs7QUFDQSxVQUFNQyxPQUFPLEdBQUdELElBQUksQ0FBQ0UsTUFBTCxDQUFZLFVBQUFDLENBQUMsRUFBSTtBQUMvQixZQUFNQyxHQUFHLEdBQUdMLFdBQVcsQ0FBQ0ksQ0FBRCxDQUF2QjtBQUNBLGVBQU9DLEdBQUcsQ0FBQ0MsS0FBSixDQUFVQyxNQUFNLENBQUNDLFFBQWpCLENBQVA7QUFDRCxPQUhlLENBQWhCLENBWmlFLENBaUJqRTs7QUFDQSwrQkFDS1QsYUFETDtBQUVFRSxRQUFBQSxJQUFJLEVBQUVDO0FBRlI7QUFJRDs7O3NDQVNFO0FBQUEsVUFOREQsSUFNQyxRQU5EQSxJQU1DO0FBQUEsVUFMRFEsR0FLQyxRQUxEQSxHQUtDO0FBQUEsVUFKREMsYUFJQyxRQUpEQSxhQUlDO0FBQUEsVUFIREMsUUFHQyxRQUhEQSxRQUdDO0FBQUEsVUFGREMsV0FFQyxRQUZEQSxXQUVDO0FBQUEsVUFEREMsY0FDQyxRQUREQSxjQUNDO0FBQ0QsVUFBTUMsVUFBVSxHQUFHLEtBQUtDLGFBQUwsQ0FBbUJKLFFBQW5CLENBQW5CO0FBQ0EsVUFBTUssYUFBYSxHQUFHLEtBQUtDLHNCQUFMLENBQTRCTixRQUE1QixDQUF0QjtBQUZDLFVBR01PLFNBSE4sR0FHbUIsS0FBS0MsTUFIeEIsQ0FHTUQsU0FITjtBQUlELFVBQU1FLFFBQVEsR0FBR0YsU0FBUyxDQUFDdkMsYUFBVixHQUEwQixJQUEzQztBQUVBLGNBQ0UsSUFBSTBDLDZCQUFKLG1CQUNLcEIsSUFETDtBQUVFcUIsUUFBQUEsRUFBRSxFQUFFLEtBQUtBLEVBRlg7QUFHRWIsUUFBQUEsR0FBRyxFQUFIQSxHQUhGO0FBSUVXLFFBQUFBLFFBQVEsRUFBUkEsUUFKRjtBQUtFdkMsUUFBQUEsUUFBUSxFQUFFcUMsU0FBUyxDQUFDckMsUUFMdEI7QUFNRTtBQUNBMEMsUUFBQUEsYUFBYSxFQUFFTCxTQUFTLENBQUM5QixRQVAzQjtBQVNFO0FBQ0FSLFFBQUFBLFVBQVUsRUFBRSxLQUFLNEMsYUFBTCxDQUFtQk4sU0FBUyxDQUFDdEMsVUFBN0IsQ0FWZDtBQVdFNkMsUUFBQUEsVUFBVSxFQUFFLEtBQUtOLE1BQUwsQ0FBWU0sVUFYMUI7QUFZRS9DLFFBQUFBLE9BQU8sRUFBRXdDLFNBQVMsQ0FBQ3hDLE9BWnJCO0FBYUVnRCxRQUFBQSxlQUFlLEVBQUVSLFNBQVMsQ0FBQ25DLFVBQVYsQ0FBcUIsQ0FBckIsQ0FibkI7QUFjRTRDLFFBQUFBLGVBQWUsRUFBRVQsU0FBUyxDQUFDbkMsVUFBVixDQUFxQixDQUFyQixDQWRuQjtBQWdCRTtBQUNBNkMsUUFBQUEsUUFBUSxFQUFFVixTQUFTLENBQUM5QixRQWpCdEI7QUFrQkVILFFBQUFBLGNBQWMsRUFBRWlDLFNBQVMsQ0FBQ2pDLGNBQVYsR0FBMkIrQixhQWxCN0M7QUFtQkVhLFFBQUFBLHdCQUF3QixFQUFFWCxTQUFTLENBQUNsQyxtQkFBVixDQUE4QixDQUE5QixDQW5CNUI7QUFvQkU4QyxRQUFBQSx3QkFBd0IsRUFBRVosU0FBUyxDQUFDbEMsbUJBQVYsQ0FBOEIsQ0FBOUIsQ0FwQjVCO0FBcUJFO0FBQ0ErQyxRQUFBQSxVQUFVLEVBQUU7QUFBQ0MsVUFBQUEsU0FBUyxFQUFFQyxPQUFPLENBQUNmLFNBQVMsQ0FBQzlCLFFBQVYsSUFBc0J1QixRQUFRLENBQUN1QixVQUFoQztBQUFuQixTQXRCZDtBQXdCRTtBQUNBQyxRQUFBQSxJQUFJLEVBQUVqQixTQUFTLENBQUMsY0FBRCxDQXpCakI7QUEwQkVrQixRQUFBQSxRQUFRLEVBQUUsSUExQlo7QUEyQkVDLFFBQUFBLGFBQWEsRUFBRSxLQUFLQyxJQUFMLElBQWEsS0FBS0EsSUFBTCxDQUFVRCxhQTNCeEM7QUE2QkU7QUFDQUUsUUFBQUEsZ0JBQWdCLEVBQUUxQixjQUFjLENBQUMyQjtBQTlCbkMsU0FERiw2Q0FtQ00sS0FBS0MsY0FBTCxDQUFvQi9CLGFBQXBCLEtBQXNDLENBQUNRLFNBQVMsQ0FBQzlCLFFBQWpELEdBQ0EsQ0FDRSxJQUFJc0Qsa0JBQUosQ0FBaUI7QUFDZnBCLFFBQUFBLEVBQUUsWUFBSyxLQUFLQSxFQUFWLGFBRGE7QUFFZnJCLFFBQUFBLElBQUksRUFBRSxDQUNKLGtDQUFrQjtBQUNoQjBDLFVBQUFBLE1BQU0sRUFBRWpDLGFBQWEsQ0FBQ2lDLE1BRE47QUFFaEJ2QixVQUFBQSxRQUFRLEVBQVJBLFFBRmdCO0FBR2hCdkMsVUFBQUEsUUFBUSxFQUFFcUMsU0FBUyxDQUFDckMsUUFISjtBQUloQjhCLFVBQUFBLFFBQVEsRUFBUkE7QUFKZ0IsU0FBbEIsQ0FESSxDQUZTO0FBVWZpQyxRQUFBQSxZQUFZLEVBQUUsS0FBS3pCLE1BQUwsQ0FBWTBCLGNBVlg7QUFXZkMsUUFBQUEsY0FBYyxFQUFFLElBQUloQztBQVhMLE9BQWpCLENBREYsQ0FEQSxHQWdCQSxFQW5ETjtBQXFERDs7O3dCQWxHVTtBQUNULGFBQU8sTUFBUDtBQUNEOzs7d0JBRWU7QUFDZCxhQUFPaUMseUJBQVA7QUFDRDs7O0VBZG9DQyw0QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAxOSBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCB7R2VvSnNvbkxheWVyfSBmcm9tICdkZWNrLmdsJztcbmltcG9ydCBBZ2dyZWdhdGlvbkxheWVyIGZyb20gJy4uL2FnZ3JlZ2F0aW9uLWxheWVyJztcbmltcG9ydCBFbmhhbmNlZEdyaWRMYXllciBmcm9tICdkZWNrZ2wtbGF5ZXJzL2dyaWQtbGF5ZXIvZW5oYW5jZWQtZ3JpZC1sYXllcic7XG5pbXBvcnQge3BvaW50VG9Qb2x5Z29uR2VvfSBmcm9tICcuL2dyaWQtdXRpbHMnO1xuaW1wb3J0IEdyaWRMYXllckljb24gZnJvbSAnLi9ncmlkLWxheWVyLWljb24nO1xuXG5leHBvcnQgY29uc3QgZ3JpZFZpc0NvbmZpZ3MgPSB7XG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgd29ybGRVbml0U2l6ZTogJ3dvcmxkVW5pdFNpemUnLFxuICBjb2xvclJhbmdlOiAnY29sb3JSYW5nZScsXG4gIGNvdmVyYWdlOiAnY292ZXJhZ2UnLFxuICBzaXplUmFuZ2U6ICdlbGV2YXRpb25SYW5nZScsXG4gIHBlcmNlbnRpbGU6ICdwZXJjZW50aWxlJyxcbiAgZWxldmF0aW9uUGVyY2VudGlsZTogJ2VsZXZhdGlvblBlcmNlbnRpbGUnLFxuICBlbGV2YXRpb25TY2FsZTogJ2VsZXZhdGlvblNjYWxlJyxcbiAgJ2hpLXByZWNpc2lvbic6ICdoaS1wcmVjaXNpb24nLFxuICBjb2xvckFnZ3JlZ2F0aW9uOiAnYWdncmVnYXRpb24nLFxuICBzaXplQWdncmVnYXRpb246ICdzaXplQWdncmVnYXRpb24nLFxuICBlbmFibGUzZDogJ2VuYWJsZTNkJ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3JpZExheWVyIGV4dGVuZHMgQWdncmVnYXRpb25MYXllciB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5yZWdpc3RlclZpc0NvbmZpZyhncmlkVmlzQ29uZmlncyk7XG4gICAgdGhpcy52aXNDb25maWdTZXR0aW5ncy53b3JsZFVuaXRTaXplLmxhYmVsID0gJ0dyaWQgU2l6ZSAoa20pJztcbiAgfVxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnZ3JpZCc7XG4gIH1cblxuICBnZXQgbGF5ZXJJY29uKCkge1xuICAgIHJldHVybiBHcmlkTGF5ZXJJY29uO1xuICB9XG5cbiAgZm9ybWF0TGF5ZXJEYXRhKF8sIGFsbERhdGEsIGZpbHRlcmVkSW5kZXgsIG9sZExheWVyRGF0YSwgb3B0ID0ge30pIHtcbiAgICBjb25zdCBmb3JtYXR0ZWREYXRhID0gc3VwZXIuZm9ybWF0TGF5ZXJEYXRhKFxuICAgICAgXyxcbiAgICAgIGFsbERhdGEsXG4gICAgICBmaWx0ZXJlZEluZGV4LFxuICAgICAgb2xkTGF5ZXJEYXRhLFxuICAgICAgb3B0XG4gICAgKTtcblxuICAgIGNvbnN0IHtnZXRQb3NpdGlvbiwgZGF0YX0gPSBmb3JtYXR0ZWREYXRhO1xuXG4gICAgLy8gVE9ETzogZml4IHRoaXMgaW4gZGVjay5nbCBsYXllclxuICAgIGNvbnN0IGNsZWFuZWQgPSBkYXRhLmZpbHRlcihkID0+IHtcbiAgICAgIGNvbnN0IHBvcyA9IGdldFBvc2l0aW9uKGQpO1xuICAgICAgcmV0dXJuIHBvcy5ldmVyeShOdW1iZXIuaXNGaW5pdGUpO1xuICAgIH0pO1xuXG4gICAgLy8gQWxsIGRhdGEgcHJvY2Vzc2luZyBpcyBkb25lIGluIGRlY2suZ2wgbGF5ZXJcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZm9ybWF0dGVkRGF0YSxcbiAgICAgIGRhdGE6IGNsZWFuZWRcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyTGF5ZXIoe1xuICAgIGRhdGEsXG4gICAgaWR4LFxuICAgIG9iamVjdEhvdmVyZWQsXG4gICAgbWFwU3RhdGUsXG4gICAgaW50ZXJhY3Rpb24sXG4gICAgbGF5ZXJDYWxsYmFja3NcbiAgfSkge1xuICAgIGNvbnN0IHpvb21GYWN0b3IgPSB0aGlzLmdldFpvb21GYWN0b3IobWFwU3RhdGUpO1xuICAgIGNvbnN0IGVsZVpvb21GYWN0b3IgPSB0aGlzLmdldEVsZXZhdGlvblpvb21GYWN0b3IobWFwU3RhdGUpO1xuICAgIGNvbnN0IHt2aXNDb25maWd9ID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY2VsbFNpemUgPSB2aXNDb25maWcud29ybGRVbml0U2l6ZSAqIDEwMDA7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEVuaGFuY2VkR3JpZExheWVyKHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgIGlkeCxcbiAgICAgICAgY2VsbFNpemUsXG4gICAgICAgIGNvdmVyYWdlOiB2aXNDb25maWcuY292ZXJhZ2UsXG4gICAgICAgIC8vIGhpZ2hsaWdodFxuICAgICAgICBhdXRvSGlnaGxpZ2h0OiB2aXNDb25maWcuZW5hYmxlM2QsXG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgY29sb3JSYW5nZTogdGhpcy5nZXRDb2xvclJhbmdlKHZpc0NvbmZpZy5jb2xvclJhbmdlKSxcbiAgICAgICAgY29sb3JTY2FsZTogdGhpcy5jb25maWcuY29sb3JTY2FsZSxcbiAgICAgICAgb3BhY2l0eTogdmlzQ29uZmlnLm9wYWNpdHksXG4gICAgICAgIHVwcGVyUGVyY2VudGlsZTogdmlzQ29uZmlnLnBlcmNlbnRpbGVbMV0sXG4gICAgICAgIGxvd2VyUGVyY2VudGlsZTogdmlzQ29uZmlnLnBlcmNlbnRpbGVbMF0sXG5cbiAgICAgICAgLy8gZWxldmF0aW9uXG4gICAgICAgIGV4dHJ1ZGVkOiB2aXNDb25maWcuZW5hYmxlM2QsXG4gICAgICAgIGVsZXZhdGlvblNjYWxlOiB2aXNDb25maWcuZWxldmF0aW9uU2NhbGUgKiBlbGVab29tRmFjdG9yLFxuICAgICAgICBlbGV2YXRpb25Mb3dlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5lbGV2YXRpb25QZXJjZW50aWxlWzBdLFxuICAgICAgICBlbGV2YXRpb25VcHBlclBlcmNlbnRpbGU6IHZpc0NvbmZpZy5lbGV2YXRpb25QZXJjZW50aWxlWzFdLFxuICAgICAgICAvLyBwYXJhbWV0ZXJzXG4gICAgICAgIHBhcmFtZXRlcnM6IHtkZXB0aFRlc3Q6IEJvb2xlYW4odmlzQ29uZmlnLmVuYWJsZTNkIHx8IG1hcFN0YXRlLmRyYWdSb3RhdGUpfSxcblxuICAgICAgICAvLyByZW5kZXJcbiAgICAgICAgZnA2NDogdmlzQ29uZmlnWydoaS1wcmVjaXNpb24nXSxcbiAgICAgICAgcGlja2FibGU6IHRydWUsXG4gICAgICAgIGxpZ2h0U2V0dGluZ3M6IHRoaXMubWV0YSAmJiB0aGlzLm1ldGEubGlnaHRTZXR0aW5ncyxcblxuICAgICAgICAvLyBjYWxsYmFja3NcbiAgICAgICAgb25TZXRDb2xvckRvbWFpbjogbGF5ZXJDYWxsYmFja3Mub25TZXRMYXllckRvbWFpblxuICAgICAgfSksXG5cbiAgICAgIC8vIHJlbmRlciBhbiBvdXRsaW5lIG9mIGVhY2ggY2VsbCBpZiBub3QgZXh0cnVkZWRcbiAgICAgIC4uLih0aGlzLmlzTGF5ZXJIb3ZlcmVkKG9iamVjdEhvdmVyZWQpICYmICF2aXNDb25maWcuZW5hYmxlM2RcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBuZXcgR2VvSnNvbkxheWVyKHtcbiAgICAgICAgICAgICAgaWQ6IGAke3RoaXMuaWR9LWhvdmVyZWRgLFxuICAgICAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICAgICAgcG9pbnRUb1BvbHlnb25HZW8oe1xuICAgICAgICAgICAgICAgICAgb2JqZWN0OiBvYmplY3RIb3ZlcmVkLm9iamVjdCxcbiAgICAgICAgICAgICAgICAgIGNlbGxTaXplLFxuICAgICAgICAgICAgICAgICAgY292ZXJhZ2U6IHZpc0NvbmZpZy5jb3ZlcmFnZSxcbiAgICAgICAgICAgICAgICAgIG1hcFN0YXRlXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiB0aGlzLmNvbmZpZy5oaWdobGlnaHRDb2xvcixcbiAgICAgICAgICAgICAgbGluZVdpZHRoU2NhbGU6IDggKiB6b29tRmFjdG9yXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSlcbiAgICBdO1xuICB9XG59XG4iXX0=