kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
214 lines (210 loc) • 39 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.StyledSidePanelContent = void 0;
exports["default"] = SidePanelFactory;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _react = _interopRequireWildcard(require("react"));
var _constants = require("@kepler.gl/constants");
var _icons = require("./common/icons");
var _sideBar = _interopRequireDefault(require("./side-panel/side-bar"));
var _panelHeader = _interopRequireDefault(require("./side-panel/panel-header"));
var _panelToggle = _interopRequireDefault(require("./side-panel/panel-toggle"));
var _layerManager = _interopRequireDefault(require("./side-panel/layer-manager"));
var _filterManager = _interopRequireDefault(require("./side-panel/filter-manager"));
var _interactionManager = _interopRequireDefault(require("./side-panel/interaction-manager"));
var _mapManager = _interopRequireDefault(require("./side-panel/map-manager"));
var _customPanel = _interopRequireDefault(require("./side-panel/custom-panel"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _templateObject; // SPDX-License-Identifier: MIT
// Copyright contributors to the kepler.gl project
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
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; }
var StyledSidePanelContent = exports.StyledSidePanelContent = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n flex-grow: 1;\n padding: ", "px;\n overflow-y: scroll;\n overflow-x: hidden;\n\n .side-panel__content__inner {\n display: flex;\n height: 100%;\n flex-direction: column;\n }\n"])), function (props) {
return props.theme.sidePanelScrollBar;
}, function (props) {
return props.theme.sidePanelInnerPadding;
});
SidePanelFactory.deps = [_sideBar["default"], _panelHeader["default"], _panelToggle["default"], _layerManager["default"], _filterManager["default"], _interactionManager["default"], _mapManager["default"], _customPanel["default"]];
/**
* Vertical sidebar containing input components for the rendering layers
*/
function SidePanelFactory(Sidebar, PanelHeader, PanelToggle, LayerManager, FilterManager, InteractionManager, MapManager, CustomPanels) {
// inject components
var SIDEBAR_COMPONENTS = {
layer: LayerManager,
filter: FilterManager,
interaction: InteractionManager,
map: MapManager
};
var SIDEBAR_ICONS = {
layer: _icons.Layers,
filter: _icons.FilterFunnel,
interaction: _icons.Settings,
map: _icons.CursorClick
};
// We should defined sidebar panels here but keeping them for backward compatible
var defaultSidePanels = _constants.SIDEBAR_PANELS.map(function (component) {
return _objectSpread(_objectSpread({}, component), {}, {
component: SIDEBAR_COMPONENTS[component.id],
iconComponent: SIDEBAR_ICONS[component.id]
});
});
var fullPanels = [].concat((0, _toConsumableArray2["default"])(defaultSidePanels), (0, _toConsumableArray2["default"])(CustomPanels.panels || []));
var getCustomPanelProps = CustomPanels.getProps || function () {
return {};
};
// eslint-disable-next-line max-statements
var SidePanel = function SidePanel(props) {
var appName = props.appName,
appWebsite = props.appWebsite,
_props$availableProvi = props.availableProviders,
availableProviders = _props$availableProvi === void 0 ? {} : _props$availableProvi,
datasets = props.datasets,
filters = props.filters,
layers = props.layers,
layerBlending = props.layerBlending,
overlayBlending = props.overlayBlending,
layerClasses = props.layerClasses,
layerOrder = props.layerOrder,
interactionConfig = props.interactionConfig,
_props$panels = props.panels,
panels = _props$panels === void 0 ? fullPanels : _props$panels,
_props$mapInfo = props.mapInfo,
mapInfo = _props$mapInfo === void 0 ? {} : _props$mapInfo,
mapSaved = props.mapSaved,
mapStateActions = props.mapStateActions,
mapStyle = props.mapStyle,
mapStyleActions = props.mapStyleActions,
onSaveMap = props.onSaveMap,
uiState = props.uiState,
uiStateActions = props.uiStateActions,
visStateActions = props.visStateActions,
version = props.version,
width = props.width;
var openDeleteModal = uiStateActions.openDeleteModal,
toggleModal = uiStateActions.toggleModal,
toggleSidePanel = uiStateActions.toggleSidePanel;
var activeSidePanel = uiState.activeSidePanel;
var setMapInfo = visStateActions.setMapInfo,
showDatasetTable = visStateActions.showDatasetTable,
updateTableColor = visStateActions.updateTableColor;
var hasShare = availableProviders.hasShare,
hasStorage = availableProviders.hasStorage;
var title = mapInfo.title;
var isOpen = Boolean(activeSidePanel);
var _onOpenOrClose = (0, _react.useCallback)(function () {
return toggleSidePanel(activeSidePanel ? '' : 'layer');
}, [activeSidePanel, toggleSidePanel]);
var onClickExportImage = (0, _react.useCallback)(function () {
return toggleModal(_constants.EXPORT_IMAGE_ID);
}, [toggleModal]);
var onClickExportData = (0, _react.useCallback)(function () {
return toggleModal(_constants.EXPORT_DATA_ID);
}, [toggleModal]);
var onClickExportMap = (0, _react.useCallback)(function () {
return toggleModal(_constants.EXPORT_MAP_ID);
}, [toggleModal]);
var onClickSaveToStorage = (0, _react.useCallback)(function () {
return toggleModal(mapSaved ? _constants.OVERWRITE_MAP_ID : _constants.SAVE_MAP_ID);
}, [mapSaved, toggleModal]);
var onClickSaveAsToStorage = (0, _react.useCallback)(function () {
setMapInfo({
title: "".concat(title || 'Kepler.gl', " (Copy)")
});
toggleModal(_constants.SAVE_MAP_ID);
}, [title, setMapInfo, toggleModal]);
var onClickShareMap = (0, _react.useCallback)(function () {
return toggleModal(_constants.SHARE_MAP_ID);
}, [toggleModal]);
var onShowDatasetTable = (0, _react.useCallback)(function (dataId) {
return showDatasetTable(dataId);
}, [showDatasetTable]);
var onUpdateTableColor = (0, _react.useCallback)(function (dataId, newColor) {
return updateTableColor(dataId, newColor);
}, [updateTableColor]);
var onShowAddDataModal = (0, _react.useCallback)(function () {
return toggleModal(_constants.ADD_DATA_ID);
}, [toggleModal]);
var onShowAddMapStyleModal = (0, _react.useCallback)(function () {
return toggleModal(_constants.ADD_MAP_STYLE_ID);
}, [toggleModal]);
var onRemoveDataset = (0, _react.useCallback)(function (dataId) {
return openDeleteModal(dataId);
}, [openDeleteModal]);
var currentPanel = (0, _react.useMemo)(function () {
return panels.find(function (_ref) {
var id = _ref.id;
return id === activeSidePanel;
}) || null;
}, [activeSidePanel, panels]);
var customPanelProps = (0, _react.useMemo)(function () {
return getCustomPanelProps(props);
}, [props]);
var PanelComponent = currentPanel === null || currentPanel === void 0 ? void 0 : currentPanel.component;
return /*#__PURE__*/_react["default"].createElement(Sidebar, {
width: width,
isOpen: isOpen,
shouldShowCollapseButton: uiState.isSidePanelCloseButtonVisible,
minifiedWidth: 0,
onOpenOrClose: _onOpenOrClose
}, /*#__PURE__*/_react["default"].createElement(PanelHeader, {
appName: appName,
version: version,
appWebsite: appWebsite,
visibleDropdown: uiState.visibleDropdown,
showExportDropdown: uiStateActions.showExportDropdown,
hideExportDropdown: uiStateActions.hideExportDropdown,
onExportImage: onClickExportImage,
onExportData: onClickExportData,
onExportMap: onClickExportMap,
onSaveMap: hasStorage ? onSaveMap : undefined,
onSaveToStorage: hasStorage ? onClickSaveToStorage : null,
onSaveAsToStorage: hasStorage && mapSaved ? onClickSaveAsToStorage : null,
onShareMap: hasShare ? onClickShareMap : null
}), /*#__PURE__*/_react["default"].createElement(PanelToggle, {
panels: panels,
activePanel: activeSidePanel,
togglePanel: uiStateActions.toggleSidePanel
}), /*#__PURE__*/_react["default"].createElement(StyledSidePanelContent, {
className: "side-panel__content"
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "side-panel__content__inner"
}, PanelComponent ? /*#__PURE__*/_react["default"].createElement(PanelComponent, {
datasets: datasets,
filters: filters,
layers: layers,
layerClasses: layerClasses,
layerOrder: layerOrder,
layerBlending: layerBlending,
overlayBlending: overlayBlending,
mapStyle: mapStyle,
mapStyleActions: mapStyleActions,
mapStateActions: mapStateActions,
interactionConfig: interactionConfig,
removeDataset: onRemoveDataset,
showDatasetTable: onShowDatasetTable,
updateTableColor: onUpdateTableColor,
showAddDataModal: onShowAddDataModal,
showAddMapStyleModal: onShowAddMapStyleModal,
uiStateActions: uiStateActions,
visStateActions: visStateActions,
panelMetadata: currentPanel,
panelListView: (currentPanel === null || currentPanel === void 0 ? void 0 : currentPanel.id) === 'layer' ? uiState.layerPanelListView : (currentPanel === null || currentPanel === void 0 ? void 0 : currentPanel.id) === 'filter' ? uiState.filterPanelListView : null
}) : null, /*#__PURE__*/_react["default"].createElement(CustomPanels, (0, _extends2["default"])({}, customPanelProps, {
activeSidePanel: activeSidePanel,
updateTableColor: onUpdateTableColor
})))));
};
SidePanel.defaultPanels = fullPanels;
return SidePanel;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2ljb25zIiwiX3NpZGVCYXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BhbmVsSGVhZGVyIiwiX3BhbmVsVG9nZ2xlIiwiX2xheWVyTWFuYWdlciIsIl9maWx0ZXJNYW5hZ2VyIiwiX2ludGVyYWN0aW9uTWFuYWdlciIsIl9tYXBNYW5hZ2VyIiwiX2N1c3RvbVBhbmVsIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJTdHlsZWRTaWRlUGFuZWxDb250ZW50IiwiZXhwb3J0cyIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsInNpZGVQYW5lbFNjcm9sbEJhciIsInNpZGVQYW5lbElubmVyUGFkZGluZyIsIlNpZGVQYW5lbEZhY3RvcnkiLCJkZXBzIiwiU2lkZWJhckZhY3RvcnkiLCJQYW5lbEhlYWRlckZhY3RvcnkiLCJQYW5lbFRvZ2dsZUZhY3RvcnkiLCJMYXllck1hbmFnZXJGYWN0b3J5IiwiRmlsdGVyTWFuYWdlckZhY3RvcnkiLCJJbnRlcmFjdGlvbk1hbmFnZXJGYWN0b3J5IiwiTWFwTWFuYWdlckZhY3RvcnkiLCJDdXN0b21QYW5lbHNGYWN0b3J5IiwiU2lkZWJhciIsIlBhbmVsSGVhZGVyIiwiUGFuZWxUb2dnbGUiLCJMYXllck1hbmFnZXIiLCJGaWx0ZXJNYW5hZ2VyIiwiSW50ZXJhY3Rpb25NYW5hZ2VyIiwiTWFwTWFuYWdlciIsIkN1c3RvbVBhbmVscyIsIlNJREVCQVJfQ09NUE9ORU5UUyIsImxheWVyIiwiaW50ZXJhY3Rpb24iLCJtYXAiLCJTSURFQkFSX0lDT05TIiwiTGF5ZXJzIiwiRmlsdGVyRnVubmVsIiwiU2V0dGluZ3MiLCJDdXJzb3JDbGljayIsImRlZmF1bHRTaWRlUGFuZWxzIiwiU0lERUJBUl9QQU5FTFMiLCJjb21wb25lbnQiLCJpZCIsImljb25Db21wb25lbnQiLCJmdWxsUGFuZWxzIiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsInBhbmVscyIsImdldEN1c3RvbVBhbmVsUHJvcHMiLCJnZXRQcm9wcyIsIlNpZGVQYW5lbCIsImFwcE5hbWUiLCJhcHBXZWJzaXRlIiwiX3Byb3BzJGF2YWlsYWJsZVByb3ZpIiwiYXZhaWxhYmxlUHJvdmlkZXJzIiwiZGF0YXNldHMiLCJmaWx0ZXJzIiwibGF5ZXJzIiwibGF5ZXJCbGVuZGluZyIsIm92ZXJsYXlCbGVuZGluZyIsImxheWVyQ2xhc3NlcyIsImxheWVyT3JkZXIiLCJpbnRlcmFjdGlvbkNvbmZpZyIsIl9wcm9wcyRwYW5lbHMiLCJfcHJvcHMkbWFwSW5mbyIsIm1hcEluZm8iLCJtYXBTYXZlZCIsIm1hcFN0YXRlQWN0aW9ucyIsIm1hcFN0eWxlIiwibWFwU3R5bGVBY3Rpb25zIiwib25TYXZlTWFwIiwidWlTdGF0ZSIsInVpU3RhdGVBY3Rpb25zIiwidmlzU3RhdGVBY3Rpb25zIiwidmVyc2lvbiIsIndpZHRoIiwib3BlbkRlbGV0ZU1vZGFsIiwidG9nZ2xlTW9kYWwiLCJ0b2dnbGVTaWRlUGFuZWwiLCJhY3RpdmVTaWRlUGFuZWwiLCJzZXRNYXBJbmZvIiwic2hvd0RhdGFzZXRUYWJsZSIsInVwZGF0ZVRhYmxlQ29sb3IiLCJoYXNTaGFyZSIsImhhc1N0b3JhZ2UiLCJ0aXRsZSIsImlzT3BlbiIsIkJvb2xlYW4iLCJfb25PcGVuT3JDbG9zZSIsInVzZUNhbGxiYWNrIiwib25DbGlja0V4cG9ydEltYWdlIiwiRVhQT1JUX0lNQUdFX0lEIiwib25DbGlja0V4cG9ydERhdGEiLCJFWFBPUlRfREFUQV9JRCIsIm9uQ2xpY2tFeHBvcnRNYXAiLCJFWFBPUlRfTUFQX0lEIiwib25DbGlja1NhdmVUb1N0b3JhZ2UiLCJPVkVSV1JJVEVfTUFQX0lEIiwiU0FWRV9NQVBfSUQiLCJvbkNsaWNrU2F2ZUFzVG9TdG9yYWdlIiwib25DbGlja1NoYXJlTWFwIiwiU0hBUkVfTUFQX0lEIiwib25TaG93RGF0YXNldFRhYmxlIiwiZGF0YUlkIiwib25VcGRhdGVUYWJsZUNvbG9yIiwibmV3Q29sb3IiLCJvblNob3dBZGREYXRhTW9kYWwiLCJBRERfREFUQV9JRCIsIm9uU2hvd0FkZE1hcFN0eWxlTW9kYWwiLCJBRERfTUFQX1NUWUxFX0lEIiwib25SZW1vdmVEYXRhc2V0IiwiY3VycmVudFBhbmVsIiwidXNlTWVtbyIsImZpbmQiLCJfcmVmIiwiY3VzdG9tUGFuZWxQcm9wcyIsIlBhbmVsQ29tcG9uZW50IiwiY3JlYXRlRWxlbWVudCIsInNob3VsZFNob3dDb2xsYXBzZUJ1dHRvbiIsImlzU2lkZVBhbmVsQ2xvc2VCdXR0b25WaXNpYmxlIiwibWluaWZpZWRXaWR0aCIsIm9uT3Blbk9yQ2xvc2UiLCJ2aXNpYmxlRHJvcGRvd24iLCJzaG93RXhwb3J0RHJvcGRvd24iLCJoaWRlRXhwb3J0RHJvcGRvd24iLCJvbkV4cG9ydEltYWdlIiwib25FeHBvcnREYXRhIiwib25FeHBvcnRNYXAiLCJ1bmRlZmluZWQiLCJvblNhdmVUb1N0b3JhZ2UiLCJvblNhdmVBc1RvU3RvcmFnZSIsIm9uU2hhcmVNYXAiLCJhY3RpdmVQYW5lbCIsInRvZ2dsZVBhbmVsIiwiY2xhc3NOYW1lIiwicmVtb3ZlRGF0YXNldCIsInNob3dBZGREYXRhTW9kYWwiLCJzaG93QWRkTWFwU3R5bGVNb2RhbCIsInBhbmVsTWV0YWRhdGEiLCJwYW5lbExpc3RWaWV3IiwibGF5ZXJQYW5lbExpc3RWaWV3IiwiZmlsdGVyUGFuZWxMaXN0VmlldyIsIl9leHRlbmRzMiIsImRlZmF1bHRQYW5lbHMiXSwic291cmNlcyI6WyIuLi9zcmMvc2lkZS1wYW5lbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZU1lbW99IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHtcbiAgRVhQT1JUX0RBVEFfSUQsXG4gIEVYUE9SVF9NQVBfSUQsXG4gIFNIQVJFX01BUF9JRCxcbiAgU0lERUJBUl9QQU5FTFMsXG4gIE9WRVJXUklURV9NQVBfSUQsXG4gIFNBVkVfTUFQX0lELFxuICBFWFBPUlRfSU1BR0VfSUQsXG4gIEFERF9EQVRBX0lELFxuICBBRERfTUFQX1NUWUxFX0lEXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcblxuaW1wb3J0IHtDdXJzb3JDbGljaywgTGF5ZXJzLCBGaWx0ZXJGdW5uZWwsIFNldHRpbmdzfSBmcm9tICcuL2NvbW1vbi9pY29ucyc7XG5cbmltcG9ydCBTaWRlYmFyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvc2lkZS1iYXInO1xuaW1wb3J0IFBhbmVsSGVhZGVyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvcGFuZWwtaGVhZGVyJztcbmltcG9ydCBQYW5lbFRvZ2dsZUZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsL3BhbmVsLXRvZ2dsZSc7XG5pbXBvcnQgTGF5ZXJNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvbGF5ZXItbWFuYWdlcic7XG5pbXBvcnQgRmlsdGVyTWFuYWdlckZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsL2ZpbHRlci1tYW5hZ2VyJztcbmltcG9ydCBJbnRlcmFjdGlvbk1hbmFnZXJGYWN0b3J5IGZyb20gJy4vc2lkZS1wYW5lbC9pbnRlcmFjdGlvbi1tYW5hZ2VyJztcbmltcG9ydCBNYXBNYW5hZ2VyRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwvbWFwLW1hbmFnZXInO1xuaW1wb3J0IEN1c3RvbVBhbmVsc0ZhY3RvcnkgZnJvbSAnLi9zaWRlLXBhbmVsL2N1c3RvbS1wYW5lbCc7XG5cbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtTaWRlUGFuZWxQcm9wcywgU2lkZVBhbmVsSXRlbX0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBTdHlsZWRTaWRlUGFuZWxDb250ZW50ID0gc3R5bGVkLmRpdmBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxTY3JvbGxCYXJ9O1xuICBmbGV4LWdyb3c6IDE7XG4gIHBhZGRpbmc6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuc2lkZVBhbmVsSW5uZXJQYWRkaW5nfXB4O1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcblxuICAuc2lkZS1wYW5lbF9fY29udGVudF9faW5uZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIH1cbmA7XG5cblNpZGVQYW5lbEZhY3RvcnkuZGVwcyA9IFtcbiAgU2lkZWJhckZhY3RvcnksXG4gIFBhbmVsSGVhZGVyRmFjdG9yeSxcbiAgUGFuZWxUb2dnbGVGYWN0b3J5LFxuICBMYXllck1hbmFnZXJGYWN0b3J5LFxuICBGaWx0ZXJNYW5hZ2VyRmFjdG9yeSxcbiAgSW50ZXJhY3Rpb25NYW5hZ2VyRmFjdG9yeSxcbiAgTWFwTWFuYWdlckZhY3RvcnksXG4gIEN1c3RvbVBhbmVsc0ZhY3Rvcnlcbl07XG5cbi8qKlxuICogVmVydGljYWwgc2lkZWJhciBjb250YWluaW5nIGlucHV0IGNvbXBvbmVudHMgZm9yIHRoZSByZW5kZXJpbmcgbGF5ZXJzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNpZGVQYW5lbEZhY3RvcnkoXG4gIFNpZGViYXI6IFJldHVyblR5cGU8dHlwZW9mIFNpZGViYXJGYWN0b3J5PixcbiAgUGFuZWxIZWFkZXI6IFJldHVyblR5cGU8dHlwZW9mIFBhbmVsSGVhZGVyRmFjdG9yeT4sXG4gIFBhbmVsVG9nZ2xlOiBSZXR1cm5UeXBlPHR5cGVvZiBQYW5lbFRvZ2dsZUZhY3Rvcnk+LFxuICBMYXllck1hbmFnZXI6IFJldHVyblR5cGU8dHlwZW9mIExheWVyTWFuYWdlckZhY3Rvcnk+LFxuICBGaWx0ZXJNYW5hZ2VyOiBSZXR1cm5UeXBlPHR5cGVvZiBGaWx0ZXJNYW5hZ2VyRmFjdG9yeT4sXG4gIEludGVyYWN0aW9uTWFuYWdlcjogUmV0dXJuVHlwZTx0eXBlb2YgSW50ZXJhY3Rpb25NYW5hZ2VyRmFjdG9yeT4sXG4gIE1hcE1hbmFnZXI6IFJldHVyblR5cGU8dHlwZW9mIE1hcE1hbmFnZXJGYWN0b3J5PixcbiAgQ3VzdG9tUGFuZWxzOiBSZXR1cm5UeXBlPHR5cGVvZiBDdXN0b21QYW5lbHNGYWN0b3J5PlxuKSB7XG4gIC8vIGluamVjdCBjb21wb25lbnRzXG4gIGNvbnN0IFNJREVCQVJfQ09NUE9ORU5UUyA9IHtcbiAgICBsYXllcjogTGF5ZXJNYW5hZ2VyLFxuICAgIGZpbHRlcjogRmlsdGVyTWFuYWdlcixcbiAgICBpbnRlcmFjdGlvbjogSW50ZXJhY3Rpb25NYW5hZ2VyLFxuICAgIG1hcDogTWFwTWFuYWdlclxuICB9O1xuXG4gIGNvbnN0IFNJREVCQVJfSUNPTlMgPSB7XG4gICAgbGF5ZXI6IExheWVycyxcbiAgICBmaWx0ZXI6IEZpbHRlckZ1bm5lbCxcbiAgICBpbnRlcmFjdGlvbjogU2V0dGluZ3MsXG4gICAgbWFwOiBDdXJzb3JDbGlja1xuICB9O1xuXG4gIC8vIFdlIHNob3VsZCBkZWZpbmVkIHNpZGViYXIgcGFuZWxzIGhlcmUgYnV0IGtlZXBpbmcgdGhlbSBmb3IgYmFja3dhcmQgY29tcGF0aWJsZVxuICBjb25zdCBkZWZhdWx0U2lkZVBhbmVsczogU2lkZVBhbmVsSXRlbVtdID0gU0lERUJBUl9QQU5FTFMubWFwKGNvbXBvbmVudCA9PiAoe1xuICAgIC4uLmNvbXBvbmVudCxcbiAgICBjb21wb25lbnQ6IFNJREVCQVJfQ09NUE9ORU5UU1tjb21wb25lbnQuaWRdLFxuICAgIGljb25Db21wb25lbnQ6IFNJREVCQVJfSUNPTlNbY29tcG9uZW50LmlkXVxuICB9KSk7XG5cbiAgY29uc3QgZnVsbFBhbmVscyA9IFsuLi5kZWZhdWx0U2lkZVBhbmVscywgLi4uKEN1c3RvbVBhbmVscy5wYW5lbHMgfHwgW10pXTtcblxuICBjb25zdCBnZXRDdXN0b21QYW5lbFByb3BzID0gQ3VzdG9tUGFuZWxzLmdldFByb3BzIHx8ICgoKSA9PiAoe30pKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgY29uc3QgU2lkZVBhbmVsOiBSZWFjdC5GQzxTaWRlUGFuZWxQcm9wcz4gJiB7ZGVmYXVsdFBhbmVsczogU2lkZVBhbmVsUHJvcHNbJ3BhbmVscyddfSA9IChcbiAgICBwcm9wczogU2lkZVBhbmVsUHJvcHNcbiAgKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgYXBwTmFtZSxcbiAgICAgIGFwcFdlYnNpdGUsXG4gICAgICBhdmFpbGFibGVQcm92aWRlcnMgPSB7fSxcbiAgICAgIGRhdGFzZXRzLFxuICAgICAgZmlsdGVycyxcbiAgICAgIGxheWVycyxcbiAgICAgIGxheWVyQmxlbmRpbmcsXG4gICAgICBvdmVybGF5QmxlbmRpbmcsXG4gICAgICBsYXllckNsYXNzZXMsXG4gICAgICBsYXllck9yZGVyLFxuICAgICAgaW50ZXJhY3Rpb25Db25maWcsXG4gICAgICBwYW5lbHMgPSBmdWxsUGFuZWxzLFxuICAgICAgbWFwSW5mbyA9IHt9LFxuICAgICAgbWFwU2F2ZWQsXG4gICAgICBtYXBTdGF0ZUFjdGlvbnMsXG4gICAgICBtYXBTdHlsZSxcbiAgICAgIG1hcFN0eWxlQWN0aW9ucyxcbiAgICAgIG9uU2F2ZU1hcCxcbiAgICAgIHVpU3RhdGUsXG4gICAgICB1aVN0YXRlQWN0aW9ucyxcbiAgICAgIHZpc1N0YXRlQWN0aW9ucyxcbiAgICAgIHZlcnNpb24sXG4gICAgICB3aWR0aFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCB7b3BlbkRlbGV0ZU1vZGFsLCB0b2dnbGVNb2RhbCwgdG9nZ2xlU2lkZVBhbmVsfSA9IHVpU3RhdGVBY3Rpb25zO1xuICAgIGNvbnN0IHthY3RpdmVTaWRlUGFuZWx9ID0gdWlTdGF0ZTtcbiAgICBjb25zdCB7c2V0TWFwSW5mbywgc2hvd0RhdGFzZXRUYWJsZSwgdXBkYXRlVGFibGVDb2xvcn0gPSB2aXNTdGF0ZUFjdGlvbnM7XG4gICAgY29uc3Qge2hhc1NoYXJlLCBoYXNTdG9yYWdlfSA9IGF2YWlsYWJsZVByb3ZpZGVycztcblxuICAgIGNvbnN0IHt0aXRsZX0gPSBtYXBJbmZvO1xuXG4gICAgY29uc3QgaXNPcGVuID0gQm9vbGVhbihhY3RpdmVTaWRlUGFuZWwpO1xuXG4gICAgY29uc3QgX29uT3Blbk9yQ2xvc2UgPSB1c2VDYWxsYmFjayhcbiAgICAgICgpID0+IHRvZ2dsZVNpZGVQYW5lbChhY3RpdmVTaWRlUGFuZWwgPyAnJyA6ICdsYXllcicpLFxuICAgICAgW2FjdGl2ZVNpZGVQYW5lbCwgdG9nZ2xlU2lkZVBhbmVsXVxuICAgICk7XG5cbiAgICBjb25zdCBvbkNsaWNrRXhwb3J0SW1hZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVNb2RhbChFWFBPUlRfSU1BR0VfSUQpLCBbdG9nZ2xlTW9kYWxdKTtcbiAgICBjb25zdCBvbkNsaWNrRXhwb3J0RGF0YSA9IHVzZUNhbGxiYWNrKCgpID0+IHRvZ2dsZU1vZGFsKEVYUE9SVF9EQVRBX0lEKSwgW3RvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25DbGlja0V4cG9ydE1hcCA9IHVzZUNhbGxiYWNrKCgpID0+IHRvZ2dsZU1vZGFsKEVYUE9SVF9NQVBfSUQpLCBbdG9nZ2xlTW9kYWxdKTtcbiAgICBjb25zdCBvbkNsaWNrU2F2ZVRvU3RvcmFnZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgKCkgPT4gdG9nZ2xlTW9kYWwobWFwU2F2ZWQgPyBPVkVSV1JJVEVfTUFQX0lEIDogU0FWRV9NQVBfSUQpLFxuICAgICAgW21hcFNhdmVkLCB0b2dnbGVNb2RhbF1cbiAgICApO1xuICAgIGNvbnN0IG9uQ2xpY2tTYXZlQXNUb1N0b3JhZ2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICBzZXRNYXBJbmZvKHtcbiAgICAgICAgdGl0bGU6IGAke3RpdGxlIHx8ICdLZXBsZXIuZ2wnfSAoQ29weSlgXG4gICAgICB9KTtcblxuICAgICAgdG9nZ2xlTW9kYWwoU0FWRV9NQVBfSUQpO1xuICAgIH0sIFt0aXRsZSwgc2V0TWFwSW5mbywgdG9nZ2xlTW9kYWxdKTtcbiAgICBjb25zdCBvbkNsaWNrU2hhcmVNYXAgPSB1c2VDYWxsYmFjaygoKSA9PiB0b2dnbGVNb2RhbChTSEFSRV9NQVBfSUQpLCBbdG9nZ2xlTW9kYWxdKTtcbiAgICBjb25zdCBvblNob3dEYXRhc2V0VGFibGUgPSB1c2VDYWxsYmFjayhkYXRhSWQgPT4gc2hvd0RhdGFzZXRUYWJsZShkYXRhSWQpLCBbc2hvd0RhdGFzZXRUYWJsZV0pO1xuICAgIGNvbnN0IG9uVXBkYXRlVGFibGVDb2xvciA9IHVzZUNhbGxiYWNrKFxuICAgICAgKGRhdGFJZCwgbmV3Q29sb3IpID0+IHVwZGF0ZVRhYmxlQ29sb3IoZGF0YUlkLCBuZXdDb2xvciksXG4gICAgICBbdXBkYXRlVGFibGVDb2xvcl1cbiAgICApO1xuICAgIGNvbnN0IG9uU2hvd0FkZERhdGFNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHRvZ2dsZU1vZGFsKEFERF9EQVRBX0lEKSwgW3RvZ2dsZU1vZGFsXSk7XG4gICAgY29uc3Qgb25TaG93QWRkTWFwU3R5bGVNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHRvZ2dsZU1vZGFsKEFERF9NQVBfU1RZTEVfSUQpLCBbdG9nZ2xlTW9kYWxdKTtcbiAgICBjb25zdCBvblJlbW92ZURhdGFzZXQgPSB1c2VDYWxsYmFjayhkYXRhSWQgPT4gb3BlbkRlbGV0ZU1vZGFsKGRhdGFJZCksIFtvcGVuRGVsZXRlTW9kYWxdKTtcblxuICAgIGNvbnN0IGN1cnJlbnRQYW5lbCA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiBwYW5lbHMuZmluZCgoe2lkfSkgPT4gaWQgPT09IGFjdGl2ZVNpZGVQYW5lbCkgfHwgbnVsbCxcbiAgICAgIFthY3RpdmVTaWRlUGFuZWwsIHBhbmVsc11cbiAgICApO1xuXG4gICAgY29uc3QgY3VzdG9tUGFuZWxQcm9wcyA9IHVzZU1lbW8oKCkgPT4gZ2V0Q3VzdG9tUGFuZWxQcm9wcyhwcm9wcyksIFtwcm9wc10pIGFzIFJlY29yZDxcbiAgICAgIHN0cmluZyxcbiAgICAgIGFueVxuICAgID47XG4gICAgY29uc3QgUGFuZWxDb21wb25lbnQgPSBjdXJyZW50UGFuZWw/LmNvbXBvbmVudDtcblxuICAgIHJldHVybiAoXG4gICAgICA8U2lkZWJhclxuICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICBzaG91bGRTaG93Q29sbGFwc2VCdXR0b249e3VpU3RhdGUuaXNTaWRlUGFuZWxDbG9zZUJ1dHRvblZpc2libGV9XG4gICAgICAgIG1pbmlmaWVkV2lkdGg9ezB9XG4gICAgICAgIG9uT3Blbk9yQ2xvc2U9e19vbk9wZW5PckNsb3NlfVxuICAgICAgPlxuICAgICAgICA8UGFuZWxIZWFkZXJcbiAgICAgICAgICBhcHBOYW1lPXthcHBOYW1lfVxuICAgICAgICAgIHZlcnNpb249e3ZlcnNpb259XG4gICAgICAgICAgYXBwV2Vic2l0ZT17YXBwV2Vic2l0ZX1cbiAgICAgICAgICB2aXNpYmxlRHJvcGRvd249e3VpU3RhdGUudmlzaWJsZURyb3Bkb3dufVxuICAgICAgICAgIHNob3dFeHBvcnREcm9wZG93bj17dWlTdGF0ZUFjdGlvbnMuc2hvd0V4cG9ydERyb3Bkb3dufVxuICAgICAgICAgIGhpZGVFeHBvcnREcm9wZG93bj17dWlTdGF0ZUFjdGlvbnMuaGlkZUV4cG9ydERyb3Bkb3dufVxuICAgICAgICAgIG9uRXhwb3J0SW1hZ2U9e29uQ2xpY2tFeHBvcnRJbWFnZX1cbiAgICAgICAgICBvbkV4cG9ydERhdGE9e29uQ2xpY2tFeHBvcnREYXRhfVxuICAgICAgICAgIG9uRXhwb3J0TWFwPXtvbkNsaWNrRXhwb3J0TWFwfVxuICAgICAgICAgIG9uU2F2ZU1hcD17aGFzU3RvcmFnZSA/IG9uU2F2ZU1hcCA6IHVuZGVmaW5lZH1cbiAgICAgICAgICBvblNhdmVUb1N0b3JhZ2U9e2hhc1N0b3JhZ2UgPyBvbkNsaWNrU2F2ZVRvU3RvcmFnZSA6IG51bGx9XG4gICAgICAgICAgb25TYXZlQXNUb1N0b3JhZ2U9e2hhc1N0b3JhZ2UgJiYgbWFwU2F2ZWQgPyBvbkNsaWNrU2F2ZUFzVG9TdG9yYWdlIDogbnVsbH1cbiAgICAgICAgICBvblNoYXJlTWFwPXtoYXNTaGFyZSA/IG9uQ2xpY2tTaGFyZU1hcCA6IG51bGx9XG4gICAgICAgIC8+XG4gICAgICAgIHsvKiB0aGUgbmV4dCB0d28gY29tcG9uZW50cyBzaG91bGQgYmUgbW92ZWQgaW50byBvbmUgKi99XG4gICAgICAgIHsvKiBidXQgaSBhbSBrZWVwaW5nIHRoZW0gYmVjYXVzZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovfVxuICAgICAgICA8UGFuZWxUb2dnbGVcbiAgICAgICAgICBwYW5lbHM9e3BhbmVsc31cbiAgICAgICAgICBhY3RpdmVQYW5lbD17YWN0aXZlU2lkZVBhbmVsfVxuICAgICAgICAgIHRvZ2dsZVBhbmVsPXt1aVN0YXRlQWN0aW9ucy50b2dnbGVTaWRlUGFuZWx9XG4gICAgICAgIC8+XG4gICAgICAgIDxTdHlsZWRTaWRlUGFuZWxDb250ZW50IGNsYXNzTmFtZT1cInNpZGUtcGFuZWxfX2NvbnRlbnRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNpZGUtcGFuZWxfX2NvbnRlbnRfX2lubmVyXCI+XG4gICAgICAgICAgICB7UGFuZWxDb21wb25lbnQgPyAoXG4gICAgICAgICAgICAgIDxQYW5lbENvbXBvbmVudFxuICAgICAgICAgICAgICAgIGRhdGFzZXRzPXtkYXRhc2V0c31cbiAgICAgICAgICAgICAgICBmaWx0ZXJzPXtmaWx0ZXJzfVxuICAgICAgICAgICAgICAgIGxheWVycz17bGF5ZXJzfVxuICAgICAgICAgICAgICAgIGxheWVyQ2xhc3Nlcz17bGF5ZXJDbGFzc2VzfVxuICAgICAgICAgICAgICAgIGxheWVyT3JkZXI9e2xheWVyT3JkZXJ9XG4gICAgICAgICAgICAgICAgbGF5ZXJCbGVuZGluZz17bGF5ZXJCbGVuZGluZ31cbiAgICAgICAgICAgICAgICBvdmVybGF5QmxlbmRpbmc9e292ZXJsYXlCbGVuZGluZ31cbiAgICAgICAgICAgICAgICBtYXBTdHlsZT17bWFwU3R5bGV9XG4gICAgICAgICAgICAgICAgbWFwU3R5bGVBY3Rpb25zPXttYXBTdHlsZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgbWFwU3RhdGVBY3Rpb25zPXttYXBTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb25Db25maWc9e2ludGVyYWN0aW9uQ29uZmlnfVxuICAgICAgICAgICAgICAgIHJlbW92ZURhdGFzZXQ9e29uUmVtb3ZlRGF0YXNldH1cbiAgICAgICAgICAgICAgICBzaG93RGF0YXNldFRhYmxlPXtvblNob3dEYXRhc2V0VGFibGV9XG4gICAgICAgICAgICAgICAgdXBkYXRlVGFibGVDb2xvcj17b25VcGRhdGVUYWJsZUNvbG9yfVxuICAgICAgICAgICAgICAgIHNob3dBZGREYXRhTW9kYWw9e29uU2hvd0FkZERhdGFNb2RhbH1cbiAgICAgICAgICAgICAgICBzaG93QWRkTWFwU3R5bGVNb2RhbD17b25TaG93QWRkTWFwU3R5bGVNb2RhbH1cbiAgICAgICAgICAgICAgICB1aVN0YXRlQWN0aW9ucz17dWlTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgdmlzU3RhdGVBY3Rpb25zPXt2aXNTdGF0ZUFjdGlvbnN9XG4gICAgICAgICAgICAgICAgcGFuZWxNZXRhZGF0YT17Y3VycmVudFBhbmVsfVxuICAgICAgICAgICAgICAgIHBhbmVsTGlzdFZpZXc9e1xuICAgICAgICAgICAgICAgICAgY3VycmVudFBhbmVsPy5pZCA9PT0gJ2xheWVyJ1xuICAgICAgICAgICAgICAgICAgICA/IHVpU3RhdGUubGF5ZXJQYW5lbExpc3RWaWV3XG4gICAgICAgICAgICAgICAgICAgIDogY3VycmVudFBhbmVsPy5pZCA9PT0gJ2ZpbHRlcidcbiAgICAgICAgICAgICAgICAgICAgPyB1aVN0YXRlLmZpbHRlclBhbmVsTGlzdFZpZXdcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8Q3VzdG9tUGFuZWxzXG4gICAgICAgICAgICAgIHsuLi5jdXN0b21QYW5lbFByb3BzfVxuICAgICAgICAgICAgICBhY3RpdmVTaWRlUGFuZWw9e2FjdGl2ZVNpZGVQYW5lbH1cbiAgICAgICAgICAgICAgdXBkYXRlVGFibGVDb2xvcj17b25VcGRhdGVUYWJsZUNvbG9yfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9TdHlsZWRTaWRlUGFuZWxDb250ZW50PlxuICAgICAgPC9TaWRlYmFyPlxuICAgICk7XG4gIH07XG5cbiAgU2lkZVBhbmVsLmRlZmF1bHRQYW5lbHMgPSBmdWxsUGFuZWxzO1xuICByZXR1cm4gU2lkZVBhbmVsO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxP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