UNPKG

kepler.gl.geoiq

Version:

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

248 lines (213 loc) 28.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reselect = require("reselect"); var _styledComponents = require("../common/styled-components"); var _icons = require("../common/icons"); var _sourceDataCatalog = _interopRequireDefault(require("./common/source-data-catalog")); var _filterPanel = _interopRequireDefault(require("./filter-panel/filter-panel")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } FilterManagerFactory.deps = [_sourceDataCatalog["default"], _filterPanel["default"]]; function FilterManagerFactory(SourceDataCatalog, FilterPanel) { var _class, _temp; return _temp = _class = /*#__PURE__*/function (_Component) { (0, _inherits2["default"])(FilterManager, _Component); var _super = _createSuper(FilterManager); function FilterManager() { var _this; (0, _classCallCheck2["default"])(this, FilterManager); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); /* selectors */ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "datasetsSelector", function (state) { return state.datasets; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "defaultDatasetSelector", (0, _reselect.createSelector)(_this.datasetsSelector, function (datasets) { return Object.keys(datasets).length && Object.keys(datasets)[0] || null; })); /* actions */ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_addFilter", function () { var defaultDataset = _this.defaultDatasetSelector(_this.props); _this.props.addFilter(defaultDataset); }); return _this; } (0, _createClass2["default"])(FilterManager, [{ key: "render", value: function render() { var _this2 = this; var _this$props = this.props, filters = _this$props.filters, datasets = _this$props.datasets, mapState = _this$props.mapState, auth = _this$props.auth, project = _this$props.project, layers = _this$props.layers; var isAnyFilterAnimating = filters.some(function (f) { return f.isAnimating; }); var hadEmptyFilter = filters.some(function (f) { return !f.name; }); var hadDataset = Object.keys(datasets).length; return (/*#__PURE__*/_react["default"].createElement("div", { className: "filter-manager" }, /*#__PURE__*/_react["default"].createElement(SourceDataCatalog, { datasets: datasets, showDatasetTable: this.props.showDatasetTable }), /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelDivider, null), /*#__PURE__*/_react["default"].createElement(_styledComponents.SidePanelSection, null, filters && filters.map(function (filter, idx) { return (/*#__PURE__*/_react["default"].createElement(FilterPanel, { key: "".concat(filter.id, "-").concat(idx), idx: idx, filters: filters, filter: filter, layers: layers, datasets: datasets, mapState: mapState, isAnyFilterAnimating: isAnyFilterAnimating, removeFilter: function removeFilter() { return _this2.props.removeFilter(idx, mapState, auth, project); }, enlargeFilter: function enlargeFilter() { return _this2.props.enlargeFilter(idx); }, toggleAnimation: function toggleAnimation() { return _this2.props.toggleAnimation(idx); }, setFilter: _this2.props.setFilter, setFilterAPI: _this2.props.setFilterAPI, auth: auth, project: project }) ); })), /*#__PURE__*/_react["default"].createElement(_styledComponents.Button, { inactive: hadEmptyFilter || !hadDataset, width: "105px", onClick: this._addFilter }, /*#__PURE__*/_react["default"].createElement(_icons.Add, { height: "12px" }), "Add Filter")) ); } }]); return FilterManager; }(_react.Component), (0, _defineProperty2["default"])(_class, "propTypes", { datasets: _propTypes["default"].object, addFilter: _propTypes["default"].func.isRequired, removeFilter: _propTypes["default"].func.isRequired, enlargeFilter: _propTypes["default"].func.isRequired, toggleAnimation: _propTypes["default"].func.isRequired, setFilter: _propTypes["default"].func.isRequired, filters: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired, layers: _propTypes["default"].arrayOf(_propTypes["default"].any).isRequired, showDatasetTable: _propTypes["default"].func, setFilterAPI: _propTypes["default"].func.isRequired, mapState: _propTypes["default"].object, auth: _propTypes["default"].object.isRequired, project: _propTypes["default"].object.isRequired, // fields can be undefined when dataset is not selected fields: _propTypes["default"].arrayOf(_propTypes["default"].any) }), _temp; } var _default = exports["default"] = FilterManagerFactory; // import React, {Component} from 'react'; // import PropTypes from 'prop-types'; // import {createSelector} from 'reselect'; // import { // SidePanelSection, // SidePanelDivider, // Button // } from 'components/common/styled-components'; // import {Add} from 'components/common/icons'; // import SourceDataCatalogFactory from './common/source-data-catalog'; // import FilterPanelFactory from './filter-panel/filter-panel'; // FilterManagerFactory.deps = [SourceDataCatalogFactory, FilterPanelFactory]; // function FilterManagerFactory(SourceDataCatalog, FilterPanel) { // return class FilterManager extends Component { // static propTypes = { // datasets: PropTypes.object, // layers: PropTypes.arrayOf(PropTypes.any).isRequired, // addFilter: PropTypes.func.isRequired, // removeFilter: PropTypes.func.isRequired, // enlargeFilter: PropTypes.func.isRequired, // toggleAnimation: PropTypes.func.isRequired, // setFilter: PropTypes.func.isRequired, // filters: PropTypes.arrayOf(PropTypes.any).isRequired, // showDatasetTable: PropTypes.func, // // fields can be undefined when dataset is not selected // fields: PropTypes.arrayOf(PropTypes.any) // }; // /* selectors */ // datasetsSelector = state => state.datasets; // defaultDatasetSelector = createSelector( // this.datasetsSelector, // datasets => // (Object.keys(datasets).length && Object.keys(datasets)[0]) || null // ); // /* actions */ // _addFilter = () => { // const defaultDataset = this.defaultDatasetSelector(this.props); // this.props.addFilter(defaultDataset); // }; // render() { // const {filters, datasets, layers} = this.props; // const isAnyFilterAnimating = filters.some(f => f.isAnimating); // const hadEmptyFilter = filters.some(f => !f.name); // const hadDataset = Object.keys(datasets).length; // return ( // <div className="filter-manager"> // <SourceDataCatalog // datasets={datasets} // showDatasetTable={this.props.showDatasetTable} // /> // <SidePanelDivider /> // <SidePanelSection> // {filters && // filters.map((filter, idx) => ( // <FilterPanel // key={`${filter.id}-${idx}`} // idx={idx} // filters={filters} // filter={filter} // datasets={datasets} // layers={layers} // isAnyFilterAnimating={isAnyFilterAnimating} // removeFilter={() => this.props.removeFilter(idx)} // enlargeFilter={() => this.props.enlargeFilter(idx)} // toggleAnimation={() => this.props.toggleAnimation(idx)} // setFilter={this.props.setFilter} // /> // ))} // </SidePanelSection> // <Button // inactive={hadEmptyFilter || !hadDataset} // width="105px" // onClick={this._addFilter} // > // <Add height="12px" /> // Add Filter // </Button> // </div> // ); // } // }; // } // export default FilterManagerFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NpZGUtcGFuZWwvZmlsdGVyLW1hbmFnZXIuanMiXSwibmFtZXMiOlsiRmlsdGVyTWFuYWdlckZhY3RvcnkiLCJkZXBzIiwiU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5IiwiRmlsdGVyUGFuZWxGYWN0b3J5IiwiU291cmNlRGF0YUNhdGFsb2ciLCJGaWx0ZXJQYW5lbCIsInN0YXRlIiwiZGF0YXNldHMiLCJkYXRhc2V0c1NlbGVjdG9yIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImRlZmF1bHREYXRhc2V0IiwiZGVmYXVsdERhdGFzZXRTZWxlY3RvciIsInByb3BzIiwiYWRkRmlsdGVyIiwiZmlsdGVycyIsIm1hcFN0YXRlIiwiYXV0aCIsInByb2plY3QiLCJsYXllcnMiLCJpc0FueUZpbHRlckFuaW1hdGluZyIsInNvbWUiLCJmIiwiaXNBbmltYXRpbmciLCJoYWRFbXB0eUZpbHRlciIsIm5hbWUiLCJoYWREYXRhc2V0Iiwic2hvd0RhdGFzZXRUYWJsZSIsIm1hcCIsImZpbHRlciIsImlkeCIsImlkIiwicmVtb3ZlRmlsdGVyIiwiZW5sYXJnZUZpbHRlciIsInRvZ2dsZUFuaW1hdGlvbiIsInNldEZpbHRlciIsInNldEZpbHRlckFQSSIsIl9hZGRGaWx0ZXIiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJvYmplY3QiLCJmdW5jIiwiaXNSZXF1aXJlZCIsImFycmF5T2YiLCJhbnkiLCJmaWVsZHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQUEsb0JBQW9CLENBQUNDLElBQXJCLEdBQTRCLENBQUNDLDZCQUFELEVBQTJCQyx1QkFBM0IsQ0FBNUI7O0FBRUEsU0FBU0gsb0JBQVQsQ0FBOEJJLGlCQUE5QixFQUFpREMsV0FBakQsRUFBOEQ7QUFBQTs7QUFDNUQ7QUFBQTs7QUFBQTs7QUFB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QixJQUFBQSxJQUFJLEVBQUVzQixzQkFBVUMsTUFBVixDQUFpQkUsVUFaTjtBQWFqQnhCLElBQUFBLE9BQU8sRUFBRXFCLHNCQUFVQyxNQUFWLENBQWlCRSxVQWJUO0FBY2pCO0FBQ0FHLElBQUFBLE1BQU0sRUFBRU4sc0JBQVVJLE9BQVYsQ0FBa0JKLHNCQUFVSyxHQUE1QjtBQWZTLEdBRHJCO0FBa0ZEOztvQ0FFYzdDLG9CLEVBQXNCO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSAyMDIzIFViZXIgVGVjaG5vbG9naWVzLCBJbmMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuLy8gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuLy8gaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuLy8gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuLy8gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4vLyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4vLyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4vLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbi8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuLy8gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbi8vIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU5cbi8vIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50fSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHtjcmVhdGVTZWxlY3Rvcn0gZnJvbSAncmVzZWxlY3QnO1xuaW1wb3J0IHtcbiAgU2lkZVBhbmVsU2VjdGlvbixcbiAgU2lkZVBhbmVsRGl2aWRlcixcbiAgQnV0dG9uXG59IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7QWRkfSBmcm9tICdjb21wb25lbnRzL2NvbW1vbi9pY29ucyc7XG5pbXBvcnQgU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5IGZyb20gJy4vY29tbW9uL3NvdXJjZS1kYXRhLWNhdGFsb2cnO1xuaW1wb3J0IEZpbHRlclBhbmVsRmFjdG9yeSBmcm9tICcuL2ZpbHRlci1wYW5lbC9maWx0ZXItcGFuZWwnO1xuXG5GaWx0ZXJNYW5hZ2VyRmFjdG9yeS5kZXBzID0gW1NvdXJjZURhdGFDYXRhbG9nRmFjdG9yeSwgRmlsdGVyUGFuZWxGYWN0b3J5XTtcblxuZnVuY3Rpb24gRmlsdGVyTWFuYWdlckZhY3RvcnkoU291cmNlRGF0YUNhdGFsb2csIEZpbHRlclBhbmVsKSB7XG4gIHJldHVybiBjbGFzcyBGaWx0ZXJNYW5hZ2VyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgZGF0YXNldHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBhZGRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICByZW1vdmVGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBlbmxhcmdlRmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgdG9nZ2xlQW5pbWF0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc2V0RmlsdGVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgZmlsdGVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIGxheWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbiAgICAgIHNob3dEYXRhc2V0VGFibGU6IFByb3BUeXBlcy5mdW5jLFxuICAgICAgc2V0RmlsdGVyQVBJOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgbWFwU3RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBhdXRoOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICBwcm9qZWN0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgICAvLyBmaWVsZHMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGRhdGFzZXQgaXMgbm90IHNlbGVjdGVkXG4gICAgICBmaWVsZHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5hbnkpXG4gICAgfTtcblxuICAgIC8qIHNlbGVjdG9ycyAqL1xuICAgIGRhdGFzZXRzU2VsZWN0b3IgPSBzdGF0ZSA9PiBzdGF0ZS5kYXRhc2V0cztcbiAgICBkZWZhdWx0RGF0YXNldFNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICB0aGlzLmRhdGFzZXRzU2VsZWN0b3IsXG4gICAgICBkYXRhc2V0cyA9PlxuICAgICAgICAoT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aCAmJiBPYmplY3Qua2V5cyhkYXRhc2V0cylbMF0pIHx8IG51bGxcbiAgICApO1xuXG4gICAgLyogYWN0aW9ucyAqL1xuICAgIF9hZGRGaWx0ZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0RGF0YXNldCA9IHRoaXMuZGVmYXVsdERhdGFzZXRTZWxlY3Rvcih0aGlzLnByb3BzKTtcbiAgICAgIHRoaXMucHJvcHMuYWRkRmlsdGVyKGRlZmF1bHREYXRhc2V0KTtcbiAgICB9O1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgY29uc3Qge2ZpbHRlcnMsIGRhdGFzZXRzLCBtYXBTdGF0ZSwgYXV0aCwgcHJvamVjdCwgbGF5ZXJzfSA9IHRoaXMucHJvcHM7XG4gICAgICBjb25zdCBpc0FueUZpbHRlckFuaW1hdGluZyA9IGZpbHRlcnMuc29tZShmID0+IGYuaXNBbmltYXRpbmcpO1xuICAgICAgY29uc3QgaGFkRW1wdHlGaWx0ZXIgPSBmaWx0ZXJzLnNvbWUoZiA9PiAhZi5uYW1lKTtcbiAgICAgIGNvbnN0IGhhZERhdGFzZXQgPSBPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpbHRlci1tYW5hZ2VyXCI+XG4gICAgICAgICAgPFNvdXJjZURhdGFDYXRhbG9nXG4gICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICBzaG93RGF0YXNldFRhYmxlPXt0aGlzLnByb3BzLnNob3dEYXRhc2V0VGFibGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8U2lkZVBhbmVsRGl2aWRlciAvPlxuICAgICAgICAgIDxTaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgICAge2ZpbHRlcnMgJiZcbiAgICAgICAgICAgICAgZmlsdGVycy5tYXAoKGZpbHRlciwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgPEZpbHRlclBhbmVsXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2ZpbHRlci5pZH0tJHtpZHh9YH1cbiAgICAgICAgICAgICAgICAgIGlkeD17aWR4fVxuICAgICAgICAgICAgICAgICAgZmlsdGVycz17ZmlsdGVyc31cbiAgICAgICAgICAgICAgICAgIGZpbHRlcj17ZmlsdGVyfVxuICAgICAgICAgICAgICAgICAgbGF5ZXJzPXtsYXllcnN9XG4gICAgICAgICAgICAgICAgICBkYXRhc2V0cz17ZGF0YXNldHN9XG4gICAgICAgICAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgICAgICAgICBpc0FueUZpbHRlckFuaW1hdGluZz17aXNBbnlGaWx0ZXJBbmltYXRpbmd9XG4gICAgICAgICAgICAgICAgICByZW1vdmVGaWx0ZXI9eygpID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMucmVtb3ZlRmlsdGVyKGlkeCwgbWFwU3RhdGUsIGF1dGgsIHByb2plY3QpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbmxhcmdlRmlsdGVyPXsoKSA9PiB0aGlzLnByb3BzLmVubGFyZ2VGaWx0ZXIoaWR4KX1cbiAgICAgICAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbj17KCkgPT4gdGhpcy5wcm9wcy50b2dnbGVBbmltYXRpb24oaWR4KX1cbiAgICAgICAgICAgICAgICAgIHNldEZpbHRlcj17dGhpcy5wcm9wcy5zZXRGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgICBzZXRGaWx0ZXJBUEk9e3RoaXMucHJvcHMuc2V0RmlsdGVyQVBJfVxuICAgICAgICAgICAgICAgICAgYXV0aD17YXV0aH1cbiAgICAgICAgICAgICAgICAgIHByb2plY3Q9e3Byb2plY3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TaWRlUGFuZWxTZWN0aW9uPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGluYWN0aXZlPXtoYWRFbXB0eUZpbHRlciB8fCAhaGFkRGF0YXNldH1cbiAgICAgICAgICAgIHdpZHRoPVwiMTA1cHhcIlxuICAgICAgICAgICAgb25DbGljaz17dGhpcy5fYWRkRmlsdGVyfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxBZGQgaGVpZ2h0PVwiMTJweFwiIC8+XG4gICAgICAgICAgICBBZGQgRmlsdGVyXG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlck1hbmFnZXJGYWN0b3J5OyAvLyBpbXBvcnQgUmVhY3QsIHtDb21wb25lbnR9IGZyb20gJ3JlYWN0Jztcbi8vIGltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG4vLyBpbXBvcnQge2NyZWF0ZVNlbGVjdG9yfSBmcm9tICdyZXNlbGVjdCc7XG4vLyBpbXBvcnQge1xuLy8gICBTaWRlUGFuZWxTZWN0aW9uLFxuLy8gICBTaWRlUGFuZWxEaXZpZGVyLFxuLy8gICBCdXR0b25cbi8vIH0gZnJvbSAnY29tcG9uZW50cy9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuLy8gaW1wb3J0IHtBZGR9IGZyb20gJ2NvbXBvbmVudHMvY29tbW9uL2ljb25zJztcbi8vIGltcG9ydCBTb3VyY2VEYXRhQ2F0YWxvZ0ZhY3RvcnkgZnJvbSAnLi9jb21tb24vc291cmNlLWRhdGEtY2F0YWxvZyc7XG4vLyBpbXBvcnQgRmlsdGVyUGFuZWxGYWN0b3J5IGZyb20gJy4vZmlsdGVyLXBhbmVsL2ZpbHRlci1wYW5lbCc7XG5cbi8vIEZpbHRlck1hbmFnZXJGYWN0b3J5LmRlcHMgPSBbU291cmNlRGF0YUNhdGFsb2dGYWN0b3J5LCBGaWx0ZXJQYW5lbEZhY3RvcnldO1xuXG4vLyBmdW5jdGlvbiBGaWx0ZXJNYW5hZ2VyRmFjdG9yeShTb3VyY2VEYXRhQ2F0YWxvZywgRmlsdGVyUGFuZWwpIHtcbi8vICAgcmV0dXJuIGNsYXNzIEZpbHRlck1hbmFnZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuLy8gICAgIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4vLyAgICAgICBkYXRhc2V0czogUHJvcFR5cGVzLm9iamVjdCxcbi8vICAgICAgIGxheWVyczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSkuaXNSZXF1aXJlZCxcbi8vICAgICAgIGFkZEZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgICAgIHJlbW92ZUZpbHRlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbi8vICAgICAgIGVubGFyZ2VGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgICAgICB0b2dnbGVBbmltYXRpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgICAgICBzZXRGaWx0ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4vLyAgICAgICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuYW55KS5pc1JlcXVpcmVkLFxuLy8gICAgICAgc2hvd0RhdGFzZXRUYWJsZTogUHJvcFR5cGVzLmZ1bmMsXG5cbi8vICAgICAgIC8vIGZpZWxkcyBjYW4gYmUgdW5kZWZpbmVkIHdoZW4gZGF0YXNldCBpcyBub3Qgc2VsZWN0ZWRcbi8vICAgICAgIGZpZWxkczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLmFueSlcbi8vICAgICB9O1xuXG4vLyAgICAgLyogc2VsZWN0b3JzICovXG4vLyAgICAgZGF0YXNldHNTZWxlY3RvciA9IHN0YXRlID0+IHN0YXRlLmRhdGFzZXRzO1xuLy8gICAgIGRlZmF1bHREYXRhc2V0U2VsZWN0b3IgPSBjcmVhdGVTZWxlY3Rvcihcbi8vICAgICAgIHRoaXMuZGF0YXNldHNTZWxlY3Rvcixcbi8vICAgICAgIGRhdGFzZXRzID0+XG4vLyAgICAgICAgIChPYmplY3Qua2V5cyhkYXRhc2V0cykubGVuZ3RoICYmIE9iamVjdC5rZXlzKGRhdGFzZXRzKVswXSkgfHwgbnVsbFxuLy8gICAgICk7XG5cbi8vICAgICAvKiBhY3Rpb25zICovXG4vLyAgICAgX2FkZEZpbHRlciA9ICgpID0+IHtcbi8vICAgICAgIGNvbnN0IGRlZmF1bHREYXRhc2V0ID0gdGhpcy5kZWZhdWx0RGF0YXNldFNlbGVjdG9yKHRoaXMucHJvcHMpO1xuLy8gICAgICAgdGhpcy5wcm9wcy5hZGRGaWx0ZXIoZGVmYXVsdERhdGFzZXQpO1xuLy8gICAgIH07XG5cbi8vICAgICByZW5kZXIoKSB7XG4vLyAgICAgICBjb25zdCB7ZmlsdGVycywgZGF0YXNldHMsIGxheWVyc30gPSB0aGlzLnByb3BzO1xuLy8gICAgICAgY29uc3QgaXNBbnlGaWx0ZXJBbmltYXRpbmcgPSBmaWx0ZXJzLnNvbWUoZiA9PiBmLmlzQW5pbWF0aW5nKTtcbi8vICAgICAgIGNvbnN0IGhhZEVtcHR5RmlsdGVyID0gZmlsdGVycy5zb21lKGYgPT4gIWYubmFtZSk7XG4vLyAgICAgICBjb25zdCBoYWREYXRhc2V0ID0gT2JqZWN0LmtleXMoZGF0YXNldHMpLmxlbmd0aDtcblxuLy8gICAgICAgcmV0dXJuIChcbi8vICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmaWx0ZXItbWFuYWdlclwiPlxuLy8gICAgICAgICAgIDxTb3VyY2VEYXRhQ2F0YWxvZ1xuLy8gICAgICAgICAgICAgZGF0YXNldHM9e2RhdGFzZXRzfVxuLy8gICAgICAgICAgICAgc2hvd0RhdGFzZXRUYWJsZT17dGhpcy5wcm9wcy5zaG93RGF0YXNldFRhYmxlfVxuLy8gICAgICAgICAgIC8+XG4vLyAgICAgICAgICAgPFNpZGVQYW5lbERpdmlkZXIgLz5cbi8vICAgICAgICAgICA8U2lkZVBhbmVsU2VjdGlvbj5cbi8vICAgICAgICAgICAgIHtmaWx0ZXJzICYmXG4vLyAgICAgICAgICAgICAgIGZpbHRlcnMubWFwKChmaWx0ZXIsIGlkeCkgPT4gKFxuLy8gICAgICAgICAgICAgICAgIDxGaWx0ZXJQYW5lbFxuLy8gICAgICAgICAgICAgICAgICAga2V5PXtgJHtmaWx0ZXIuaWR9LSR7aWR4fWB9XG4vLyAgICAgICAgICAgICAgICAgICBpZHg9e2lkeH1cbi8vICAgICAgICAgICAgICAgICAgIGZpbHRlcnM9e2ZpbHRlcnN9XG4vLyAgICAgICAgICAgICAgICAgICBmaWx0ZXI9e2ZpbHRlcn1cbi8vICAgICAgICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbi8vICAgICAgICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuLy8gICAgICAgICAgICAgICAgICAgaXNBbnlGaWx0ZXJBbmltYXRpbmc9e2lzQW55RmlsdGVyQW5pbWF0aW5nfVxuLy8gICAgICAgICAgICAgICAgICAgcmVtb3ZlRmlsdGVyPXsoKSA9PiB0aGlzLnByb3BzLnJlbW92ZUZpbHRlcihpZHgpfVxuLy8gICAgICAgICAgICAgICAgICAgZW5sYXJnZUZpbHRlcj17KCkgPT4gdGhpcy5wcm9wcy5lbmxhcmdlRmlsdGVyKGlkeCl9XG4vLyAgICAgICAgICAgICAgICAgICB0b2dnbGVBbmltYXRpb249eygpID0+IHRoaXMucHJvcHMudG9nZ2xlQW5pbWF0aW9uKGlkeCl9XG4vLyAgICAgICAgICAgICAgICAgICBzZXRGaWx0ZXI9e3RoaXMucHJvcHMuc2V0RmlsdGVyfVxuLy8gICAgICAgICAgICAgICAgIC8+XG4vLyAgICAgICAgICAgICAgICkpfVxuLy8gICAgICAgICAgIDwvU2lkZVBhbmVsU2VjdGlvbj5cbi8vICAgICAgICAgICA8QnV0dG9uXG4vLyAgICAgICAgICAgICBpbmFjdGl2ZT17aGFkRW1wdHlGaWx0ZXIgfHwgIWhhZERhdGFzZXR9XG4vLyAgICAgICAgICAgICB3aWR0aD1cIjEwNXB4XCJcbi8vICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuX2FkZEZpbHRlcn1cbi8vICAgICAgICAgICA+XG4vLyAgICAgICAgICAgICA8QWRkIGhlaWdodD1cIjEycHhcIiAvPlxuLy8gICAgICAgICAgICAgQWRkIEZpbHRlclxuLy8gICAgICAgICAgIDwvQnV0dG9uPlxuLy8gICAgICAgICA8L2Rpdj5cbi8vICAgICAgICk7XG4vLyAgICAgfVxuLy8gICB9O1xuLy8gfVxuXG4vLyBleHBvcnQgZGVmYXVsdCBGaWx0ZXJNYW5hZ2VyRmFjdG9yeTtcbiJdfQ==