UNPKG

kepler.gl.geoiq

Version:

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

206 lines (187 loc) 18.7 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; 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 _utils = require("../utils/utils"); var _defaultLayerIcon = _interopRequireDefault(require("./default-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 Widget = /*#__PURE__*/ function () { function Widget() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; (0, _classCallCheck2["default"])(this, Widget); this.id = props.id || (0, _utils.generateHashId)(6); // meta this.meta = {}; // visConfigSettings // this.visConfigSettings = {}; this.config = this.getDefaultWidgetConfig(_objectSpread({}, props)); } (0, _createClass2["default"])(Widget, [{ key: "calculateAggregationData", value: function calculateAggregationData(widget, state) { return { newWidget: widget, updatedState: state }; } }, { key: "getDefaultWidgetConfig", value: function getDefaultWidgetConfig() { var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return { categoryField: props.categoryField || null, dataId: props.dataId || null, label: props.label || 'new widget', isVisible: props.isVisible || false, isConfigActive: props.isConfigActive || false, fieldName: null, selectedLayer: props.selectedLayer || null, isCalculating: props.isCalculating || false, bounds: props.bounds || true, aggregatedData: props.aggregatedData || null, aggregationType: props.aggregationType || null }; } }, { key: "updateWidgetConfig", value: function updateWidgetConfig(newConfig) { this.config = _objectSpread({}, this.config, {}, newConfig); return this; } }, { key: "updateMeta", value: function updateMeta(meta) { this.meta = _objectSpread({}, this.meta, {}, meta); } }, { key: "assignConfigToWidget", value: function assignConfigToWidget(configToCopy) { var currentConfig = this.config; var copied = this.copyWidgetConfig(currentConfig, configToCopy); this.updateWidgetConfig(copied); } }, { key: "hasAllValues", /** * Check whether layer has all columns * * @param {object} widget * @returns {boolean} yes or no */ value: function hasAllValues() { var aggregationType = this.config.aggregationType; return aggregationType; } }, { key: "isValidToSave", value: function isValidToSave() { return this.type && this.hasAllValues(); } }, { key: "shouldCalculateAggregatedData", value: function shouldCalculateAggregatedData(props) { var _this = this; return props.some(function (p) { return _this.aggregatedDataAffectingProps.includes(p); }); } /* * Recursively copy config over to an empty layer * when received saved config, or copy config over from a different layer type * make sure to only copy over value to existing keys * @param {object} currentConfig - existing config to be override * @param {object} configToCopy - new Config to copy over * @param {string[]} notToDeepMerge - array of properties to not to be deep copied * @param {string[]} notToCopy - array of properties not to copy * @returns {object} - copied config */ }, { key: "copyWidgetConfig", value: function copyWidgetConfig(currentConfig, configToCopy) { var _this2 = this; var copied = {}; Object.keys(currentConfig).forEach(function (key) { if ((0, _utils.isPlainObject)(currentConfig[key]) && (0, _utils.isPlainObject)(configToCopy[key])) { // recursively assign object value copied[key] = _this2.copyWidgetConfig(currentConfig[key], configToCopy[key]); } else if ((0, _utils.notNullorUndefined)(configToCopy[key])) { // copy copied[key] = configToCopy[key]; } else { // keep existing copied[key] = currentConfig[key]; } }); return copied; } /** * Assign a field to layer column, return column config * @param key - Column Key * @param field - Selected field * @returns {{}} - Column config */ }, { key: "assignColumn", value: function assignColumn(key, field) { // field value could be null for optional columns var update = field ? { value: field.name, fieldIdx: field.tableFieldIndex - 1 } : { value: null, fieldIdx: -1 }; return _objectSpread({}, this.config.columns, (0, _defineProperty2["default"])({}, key, _objectSpread({}, this.config.columns[key], {}, update))); } }, { key: "type", get: function get() { return null; } }, { key: "name", get: function get() { return this.type; } }, { key: "widgetIcon", get: function get() { return _defaultLayerIcon["default"]; } }, { key: "isWidgetAggregated", get: function get() { return false; } }, { key: "requiredLayer", get: function get() { return []; } }, { key: "widgetInfoModal", get: function get() { return null; } }, { key: "widgetAggregatedData", get: function get() { return null; } }, { key: "aggregatedDataAffectingProps", get: function get() { // console.log('inside aggregatedDataAffectingProps'); return ['aggregationType', 'fieldName', 'mapState', 'bounds']; } }]); return Widget; }(); exports["default"] = Widget; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93aWRnZXRzL2Jhc2Utd2lkZ2V0LmpzIl0sIm5hbWVzIjpbIldpZGdldCIsInByb3BzIiwiaWQiLCJtZXRhIiwiY29uZmlnIiwiZ2V0RGVmYXVsdFdpZGdldENvbmZpZyIsIndpZGdldCIsInN0YXRlIiwibmV3V2lkZ2V0IiwidXBkYXRlZFN0YXRlIiwiY2F0ZWdvcnlGaWVsZCIsImRhdGFJZCIsImxhYmVsIiwiaXNWaXNpYmxlIiwiaXNDb25maWdBY3RpdmUiLCJmaWVsZE5hbWUiLCJzZWxlY3RlZExheWVyIiwiaXNDYWxjdWxhdGluZyIsImJvdW5kcyIsImFnZ3JlZ2F0ZWREYXRhIiwiYWdncmVnYXRpb25UeXBlIiwibmV3Q29uZmlnIiwiY29uZmlnVG9Db3B5IiwiY3VycmVudENvbmZpZyIsImNvcGllZCIsImNvcHlXaWRnZXRDb25maWciLCJ1cGRhdGVXaWRnZXRDb25maWciLCJ0eXBlIiwiaGFzQWxsVmFsdWVzIiwic29tZSIsInAiLCJhZ2dyZWdhdGVkRGF0YUFmZmVjdGluZ1Byb3BzIiwiaW5jbHVkZXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImZpZWxkIiwidXBkYXRlIiwidmFsdWUiLCJuYW1lIiwiZmllbGRJZHgiLCJ0YWJsZUZpZWxkSW5kZXgiLCJjb2x1bW5zIiwiRGVmYXVsdFdpZGdldEljb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQW9CQTs7QUFLQTs7Ozs7O0lBRXFCQSxNOzs7QUFDbkIsb0JBQXdCO0FBQUEsUUFBWkMsS0FBWSx1RUFBSixFQUFJO0FBQUE7QUFDdEIsU0FBS0MsRUFBTCxHQUFVRCxLQUFLLENBQUNDLEVBQU4sSUFBWSwyQkFBZSxDQUFmLENBQXRCLENBRHNCLENBR3RCOztBQUNBLFNBQUtDLElBQUwsR0FBWSxFQUFaLENBSnNCLENBTXRCO0FBQ0E7O0FBRUEsU0FBS0MsTUFBTCxHQUFjLEtBQUtDLHNCQUFMLG1CQUNUSixLQURTLEVBQWQ7QUFHRDs7Ozs2Q0FzQndC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LFVBQUFBLE1BQU0sQ0FBQ1ksR0FBRCxDQUFOLEdBQWNiLGFBQWEsQ0FBQ2EsR0FBRCxDQUEzQjtBQUNEO0FBQ0YsT0FqQkQ7QUFtQkEsYUFBT1osTUFBUDtBQUNEO0FBRUQ7Ozs7Ozs7OztpQ0FNYVksRyxFQUFLQyxLLEVBQU87QUFDdkI7QUFDQSxVQUFNQyxNQUFNLEdBQUdELEtBQUssR0FDaEI7QUFDRUUsUUFBQUEsS0FBSyxFQUFFRixLQUFLLENBQUNHLElBRGY7QUFFRUMsUUFBQUEsUUFBUSxFQUFFSixLQUFLLENBQUNLLGVBQU4sR0FBd0I7QUFGcEMsT0FEZ0IsR0FLaEI7QUFBQ0gsUUFBQUEsS0FBSyxFQUFFLElBQVI7QUFBY0UsUUFBQUEsUUFBUSxFQUFFLENBQUM7QUFBekIsT0FMSjtBQU9BLCtCQUNLLEtBQUtyQyxNQUFMLENBQVl1QyxPQURqQix1Q0FFR1AsR0FGSCxvQkFHTyxLQUFLaEMsTUFBTCxDQUFZdUMsT0FBWixDQUFvQlAsR0FBcEIsQ0FIUCxNQUlPRSxNQUpQO0FBT0Q7Ozt3QkF6SVU7QUFDVCxhQUFPLElBQVA7QUFDRDs7O3dCQUNVO0FBQ1QsYUFBTyxLQUFLWCxJQUFaO0FBQ0Q7Ozt3QkFDZ0I7QUFDZixhQUFPaUIsNEJBQVA7QUFDRDs7O3dCQUN3QjtBQUN2QixhQUFPLEtBQVA7QUFDRDs7O3dCQUNtQjtBQUNsQixhQUFPLEVBQVA7QUFDRDs7O3dCQUNxQjtBQUNwQixhQUFPLElBQVA7QUFDRDs7O3dCQUMwQjtBQUN6QixhQUFPLElBQVA7QUFDRDs7O3dCQW9Da0M7QUFDakM7QUFDQSxhQUFPLENBQUMsaUJBQUQsRUFBb0IsV0FBcEIsRUFBaUMsVUFBakMsRUFBNkMsUUFBN0MsQ0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDE5IFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHtcbiAgZ2VuZXJhdGVIYXNoSWQsXG4gIG5vdE51bGxvclVuZGVmaW5lZCxcbiAgaXNQbGFpbk9iamVjdFxufSBmcm9tICcuLi91dGlscy91dGlscyc7XG5pbXBvcnQgRGVmYXVsdFdpZGdldEljb24gZnJvbSAnLi9kZWZhdWx0LWxheWVyLWljb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaWRnZXQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IHByb3BzLmlkIHx8IGdlbmVyYXRlSGFzaElkKDYpO1xuXG4gICAgLy8gbWV0YVxuICAgIHRoaXMubWV0YSA9IHt9O1xuXG4gICAgLy8gdmlzQ29uZmlnU2V0dGluZ3NcbiAgICAvLyB0aGlzLnZpc0NvbmZpZ1NldHRpbmdzID0ge307XG5cbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMuZ2V0RGVmYXVsdFdpZGdldENvbmZpZyh7XG4gICAgICAuLi5wcm9wc1xuICAgIH0pO1xuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cbiAgZ2V0IHdpZGdldEljb24oKSB7XG4gICAgcmV0dXJuIERlZmF1bHRXaWRnZXRJY29uO1xuICB9XG4gIGdldCBpc1dpZGdldEFnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldCByZXF1aXJlZExheWVyKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBnZXQgd2lkZ2V0SW5mb01vZGFsKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldCB3aWRnZXRBZ2dyZWdhdGVkRGF0YSgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjYWxjdWxhdGVBZ2dyZWdhdGlvbkRhdGEod2lkZ2V0LCBzdGF0ZSkge1xuICAgIHJldHVybiB7bmV3V2lkZ2V0OiB3aWRnZXQsIHVwZGF0ZWRTdGF0ZTogc3RhdGV9O1xuICB9XG5cbiAgZ2V0RGVmYXVsdFdpZGdldENvbmZpZyhwcm9wcyA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhdGVnb3J5RmllbGQ6IHByb3BzLmNhdGVnb3J5RmllbGQgfHwgbnVsbCxcbiAgICAgIGRhdGFJZDogcHJvcHMuZGF0YUlkIHx8IG51bGwsXG4gICAgICBsYWJlbDogcHJvcHMubGFiZWwgfHwgJ25ldyB3aWRnZXQnLFxuICAgICAgaXNWaXNpYmxlOiBwcm9wcy5pc1Zpc2libGUgfHwgZmFsc2UsXG4gICAgICBpc0NvbmZpZ0FjdGl2ZTogcHJvcHMuaXNDb25maWdBY3RpdmUgfHwgZmFsc2UsXG4gICAgICBmaWVsZE5hbWU6IG51bGwsXG4gICAgICBzZWxlY3RlZExheWVyOiBwcm9wcy5zZWxlY3RlZExheWVyIHx8IG51bGwsXG4gICAgICBpc0NhbGN1bGF0aW5nOiBwcm9wcy5pc0NhbGN1bGF0aW5nIHx8IGZhbHNlLFxuICAgICAgYm91bmRzOiBwcm9wcy5ib3VuZHMgfHwgdHJ1ZSxcbiAgICAgIGFnZ3JlZ2F0ZWREYXRhOiBwcm9wcy5hZ2dyZWdhdGVkRGF0YSB8fCBudWxsLFxuICAgICAgYWdncmVnYXRpb25UeXBlOiBwcm9wcy5hZ2dyZWdhdGlvblR5cGUgfHwgbnVsbFxuICAgIH07XG4gIH1cbiAgdXBkYXRlV2lkZ2V0Q29uZmlnKG5ld0NvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gey4uLnRoaXMuY29uZmlnLCAuLi5uZXdDb25maWd9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdXBkYXRlTWV0YShtZXRhKSB7XG4gICAgdGhpcy5tZXRhID0gey4uLnRoaXMubWV0YSwgLi4ubWV0YX07XG4gIH1cblxuICBhc3NpZ25Db25maWdUb1dpZGdldChjb25maWdUb0NvcHkpIHtcbiAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgY29waWVkID0gdGhpcy5jb3B5V2lkZ2V0Q29uZmlnKGN1cnJlbnRDb25maWcsIGNvbmZpZ1RvQ29weSk7XG5cbiAgICB0aGlzLnVwZGF0ZVdpZGdldENvbmZpZyhjb3BpZWQpO1xuICB9XG5cbiAgZ2V0IGFnZ3JlZ2F0ZWREYXRhQWZmZWN0aW5nUHJvcHMoKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhZ2dyZWdhdGVkRGF0YUFmZmVjdGluZ1Byb3BzJyk7XG4gICAgcmV0dXJuIFsnYWdncmVnYXRpb25UeXBlJywgJ2ZpZWxkTmFtZScsICdtYXBTdGF0ZScsICdib3VuZHMnXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGxheWVyIGhhcyBhbGwgY29sdW1uc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gd2lkZ2V0XG4gICAqIEByZXR1cm5zIHtib29sZWFufSB5ZXMgb3Igbm9cbiAgICovXG4gIGhhc0FsbFZhbHVlcygpIHtcbiAgICBjb25zdCB7YWdncmVnYXRpb25UeXBlfSA9IHRoaXMuY29uZmlnO1xuICAgIHJldHVybiBhZ2dyZWdhdGlvblR5cGU7XG4gIH1cblxuICBpc1ZhbGlkVG9TYXZlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgJiYgdGhpcy5oYXNBbGxWYWx1ZXMoKTtcbiAgfVxuXG4gIHNob3VsZENhbGN1bGF0ZUFnZ3JlZ2F0ZWREYXRhKHByb3BzKSB7XG4gICAgcmV0dXJuIHByb3BzLnNvbWUocCA9PiB0aGlzLmFnZ3JlZ2F0ZWREYXRhQWZmZWN0aW5nUHJvcHMuaW5jbHVkZXMocCkpO1xuICB9XG5cbiAgLypcbiAgICogUmVjdXJzaXZlbHkgY29weSBjb25maWcgb3ZlciB0byBhbiBlbXB0eSBsYXllclxuICAgKiB3aGVuIHJlY2VpdmVkIHNhdmVkIGNvbmZpZywgb3IgY29weSBjb25maWcgb3ZlciBmcm9tIGEgZGlmZmVyZW50IGxheWVyIHR5cGVcbiAgICogbWFrZSBzdXJlIHRvIG9ubHkgY29weSBvdmVyIHZhbHVlIHRvIGV4aXN0aW5nIGtleXNcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb25maWcgLSBleGlzdGluZyBjb25maWcgdG8gYmUgb3ZlcnJpZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1RvQ29weSAtIG5ldyBDb25maWcgdG8gY29weSBvdmVyXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IG5vdFRvRGVlcE1lcmdlIC0gYXJyYXkgb2YgcHJvcGVydGllcyB0byBub3QgdG8gYmUgZGVlcCBjb3BpZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gbm90VG9Db3B5IC0gYXJyYXkgb2YgcHJvcGVydGllcyBub3QgdG8gY29weVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSAtIGNvcGllZCBjb25maWdcbiAgICovXG5cbiAgY29weVdpZGdldENvbmZpZyhjdXJyZW50Q29uZmlnLCBjb25maWdUb0NvcHkpIHtcbiAgICBjb25zdCBjb3BpZWQgPSB7fTtcbiAgICBPYmplY3Qua2V5cyhjdXJyZW50Q29uZmlnKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGlzUGxhaW5PYmplY3QoY3VycmVudENvbmZpZ1trZXldKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KGNvbmZpZ1RvQ29weVtrZXldKVxuICAgICAgKSB7XG4gICAgICAgIC8vIHJlY3Vyc2l2ZWx5IGFzc2lnbiBvYmplY3QgdmFsdWVcbiAgICAgICAgY29waWVkW2tleV0gPSB0aGlzLmNvcHlXaWRnZXRDb25maWcoXG4gICAgICAgICAgY3VycmVudENvbmZpZ1trZXldLFxuICAgICAgICAgIGNvbmZpZ1RvQ29weVtrZXldXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKG5vdE51bGxvclVuZGVmaW5lZChjb25maWdUb0NvcHlba2V5XSkpIHtcbiAgICAgICAgLy8gY29weVxuICAgICAgICBjb3BpZWRba2V5XSA9IGNvbmZpZ1RvQ29weVtrZXldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZ1xuICAgICAgICBjb3BpZWRba2V5XSA9IGN1cnJlbnRDb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb3BpZWQ7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIGEgZmllbGQgdG8gbGF5ZXIgY29sdW1uLCByZXR1cm4gY29sdW1uIGNvbmZpZ1xuICAgKiBAcGFyYW0ga2V5IC0gQ29sdW1uIEtleVxuICAgKiBAcGFyYW0gZmllbGQgLSBTZWxlY3RlZCBmaWVsZFxuICAgKiBAcmV0dXJucyB7e319IC0gQ29sdW1uIGNvbmZpZ1xuICAgKi9cbiAgYXNzaWduQ29sdW1uKGtleSwgZmllbGQpIHtcbiAgICAvLyBmaWVsZCB2YWx1ZSBjb3VsZCBiZSBudWxsIGZvciBvcHRpb25hbCBjb2x1bW5zXG4gICAgY29uc3QgdXBkYXRlID0gZmllbGRcbiAgICAgID8ge1xuICAgICAgICAgIHZhbHVlOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIGZpZWxkSWR4OiBmaWVsZC50YWJsZUZpZWxkSW5kZXggLSAxXG4gICAgICAgIH1cbiAgICAgIDoge3ZhbHVlOiBudWxsLCBmaWVsZElkeDogLTF9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uZmlnLmNvbHVtbnMsXG4gICAgICBba2V5XToge1xuICAgICAgICAuLi50aGlzLmNvbmZpZy5jb2x1bW5zW2tleV0sXG4gICAgICAgIC4uLnVwZGF0ZVxuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==