UNPKG

kepler.gl

Version:

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

127 lines (124 loc) 26.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 _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireDefault(require("styled-components")); var _reactIntl = require("react-intl"); var _actions = require("@kepler.gl/actions"); var _constants = require("@kepler.gl/constants"); var _reducers = require("@kepler.gl/reducers"); var _injector = require("../injector"); var _sidePanelTitle = _interopRequireDefault(require("./side-panel-title")); var _effectList = _interopRequireDefault(require("./effect-list")); var _effectTypeSelector = _interopRequireDefault(require("./effect-type-selector")); var _templateObject, _templateObject2, _templateObject3, _templateObject4; // 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 StyledEffectPanelContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n pointer-events: none !important; /* prevent padding from blocking input */\n flex-grow: 1;\n justify-content: space-between;\n overflow: hidden;\n\n & > * {\n /* all children should allow input */\n pointer-events: all;\n }\n"]))); // top right position absolute var StyledEffectPanel = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n top: 0;\n background-color: ", ";\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n overflow: hidden;\n"])), function (props) { return props.theme.sidePanelBg; }); var StyledEffectPanelHeader = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n padding: ", ";\n border-bottom: 1px solid ", ";\n min-width: ", "px;\n"])), function (_ref) { var theme = _ref.theme; return "".concat(theme.effectPanelPaddingTop, "px ").concat(theme.effectPanelPaddingSide, "px 4px ").concat(theme.effectPanelPaddingSide, "px"); }, function (props) { return props.theme.borderColor; }, function (_ref2) { var theme = _ref2.theme; return theme.effectPanelWidth; }); var StyledEffectPanelContent = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n padding: ", ";\n overflow: overlay;\n display: flex;\n flex-direction: column;\n"])), function (props) { return props.theme.sidePanelScrollBar; }, function (props) { return props.extended ? '32px' : '10px 0px 10px 0px'; }); EffectManagerFactory.deps = [_effectList["default"], _sidePanelTitle["default"], _effectTypeSelector["default"]]; function EffectManagerFactory(EffectList, SidePanelTitle, EffectTypeSelector) { var EffectManager = function EffectManager(props) { var intl = props.intl, visStateActions = props.visStateActions, visState = props.visState, children = props.children; var effects = visState.effects, effectOrder = visState.effectOrder; var visStateAddEffect = visStateActions.addEffect; var _useState = (0, _react.useState)(false), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), typeSelectorOpened = _useState2[0], setTypeSelectorOpened = _useState2[1]; // Prevent shadow effect from being added multiple times var effectOptions = (0, _react.useMemo)(function () { var hasShadow = effects.some(function (effect) { return effect.type === _constants.LIGHT_AND_SHADOW_EFFECT.type; }); var hasDistanceFog = effects.some(function (effect) { return effect.type === _constants.DISTANCE_FOG_TYPE; }); var hasSurfaceFog = effects.some(function (effect) { return effect.type === _constants.SURFACE_FOG_TYPE; }); var hasAnyFog = hasDistanceFog || hasSurfaceFog; return _constants.EFFECT_DESCRIPTIONS.map(function (desc) { return _objectSpread(_objectSpread({}, desc), {}, { disabled: Boolean(hasShadow && desc.type === _constants.LIGHT_AND_SHADOW_EFFECT.type || hasAnyFog && (desc.type === _constants.DISTANCE_FOG_TYPE || desc.type === _constants.SURFACE_FOG_TYPE)) }); }); }, [effects]); var onAddEffect = (0, _react.useCallback)(function (type) { visStateAddEffect({ type: type }); }, [visStateAddEffect]); var onTypeSelectOpen = (0, _react.useCallback)(function () { setTypeSelectorOpened(true); }, []); var onTypeSelectClose = (0, _react.useCallback)(function () { setTypeSelectorOpened(false); }, []); return /*#__PURE__*/_react["default"].createElement(StyledEffectPanelContainer, { className: "effect-manager" }, /*#__PURE__*/_react["default"].createElement(StyledEffectPanel, null, /*#__PURE__*/_react["default"].createElement(StyledEffectPanelHeader, { className: "effect-panel-header" }, /*#__PURE__*/_react["default"].createElement(SidePanelTitle, { className: "effect-manager-title", title: intl.formatMessage({ id: 'effectManager.effects' }) }, /*#__PURE__*/_react["default"].createElement(EffectTypeSelector, { options: effectOptions, onSelect: onAddEffect, onOpen: onTypeSelectOpen, onBlur: onTypeSelectClose }))), /*#__PURE__*/_react["default"].createElement(StyledEffectPanelContent, { extended: typeSelectorOpened && effects.length === 0 }, /*#__PURE__*/_react["default"].createElement(EffectList, { effects: effects, effectOrder: effectOrder, visStateActions: visStateActions, isSortable: true }))), children); }; return (0, _injector.withState)([_reducers.visStateLens], function (state) { return state; }, { visStateActions: { addEffect: _actions.addEffect, updateEffect: _actions.updateEffect, removeEffect: _actions.removeEffect, reorderEffect: _actions.reorderEffect } })((0, _reactIntl.injectIntl)(EffectManager)); } var _default = exports["default"] = EffectManagerFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3RJbnRsIiwiX2FjdGlvbnMiLCJfY29uc3RhbnRzIiwiX3JlZHVjZXJzIiwiX2luamVjdG9yIiwiX3NpZGVQYW5lbFRpdGxlIiwiX2VmZmVjdExpc3QiLCJfZWZmZWN0VHlwZVNlbGVjdG9yIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiU3R5bGVkRWZmZWN0UGFuZWxDb250YWluZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsIlN0eWxlZEVmZmVjdFBhbmVsIiwicHJvcHMiLCJ0aGVtZSIsInNpZGVQYW5lbEJnIiwiU3R5bGVkRWZmZWN0UGFuZWxIZWFkZXIiLCJfcmVmIiwiY29uY2F0IiwiZWZmZWN0UGFuZWxQYWRkaW5nVG9wIiwiZWZmZWN0UGFuZWxQYWRkaW5nU2lkZSIsImJvcmRlckNvbG9yIiwiX3JlZjIiLCJlZmZlY3RQYW5lbFdpZHRoIiwiU3R5bGVkRWZmZWN0UGFuZWxDb250ZW50Iiwic2lkZVBhbmVsU2Nyb2xsQmFyIiwiZXh0ZW5kZWQiLCJFZmZlY3RNYW5hZ2VyRmFjdG9yeSIsImRlcHMiLCJFZmZlY3RMaXN0RmFjdG9yeSIsIlNpZGVQYW5lbFRpdGxlRmFjdG9yeSIsIkVmZmVjdFR5cGVTZWxlY3RvckZhY3RvcnkiLCJFZmZlY3RMaXN0IiwiU2lkZVBhbmVsVGl0bGUiLCJFZmZlY3RUeXBlU2VsZWN0b3IiLCJFZmZlY3RNYW5hZ2VyIiwiaW50bCIsInZpc1N0YXRlQWN0aW9ucyIsInZpc1N0YXRlIiwiY2hpbGRyZW4iLCJlZmZlY3RzIiwiZWZmZWN0T3JkZXIiLCJ2aXNTdGF0ZUFkZEVmZmVjdCIsImFkZEVmZmVjdCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInR5cGVTZWxlY3Rvck9wZW5lZCIsInNldFR5cGVTZWxlY3Rvck9wZW5lZCIsImVmZmVjdE9wdGlvbnMiLCJ1c2VNZW1vIiwiaGFzU2hhZG93Iiwic29tZSIsImVmZmVjdCIsInR5cGUiLCJMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVCIsImhhc0Rpc3RhbmNlRm9nIiwiRElTVEFOQ0VfRk9HX1RZUEUiLCJoYXNTdXJmYWNlRm9nIiwiU1VSRkFDRV9GT0dfVFlQRSIsImhhc0FueUZvZyIsIkVGRkVDVF9ERVNDUklQVElPTlMiLCJtYXAiLCJkZXNjIiwiZGlzYWJsZWQiLCJCb29sZWFuIiwib25BZGRFZmZlY3QiLCJ1c2VDYWxsYmFjayIsIm9uVHlwZVNlbGVjdE9wZW4iLCJvblR5cGVTZWxlY3RDbG9zZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0aXRsZSIsImZvcm1hdE1lc3NhZ2UiLCJpZCIsIm9wdGlvbnMiLCJvblNlbGVjdCIsIm9uT3BlbiIsIm9uQmx1ciIsImlzU29ydGFibGUiLCJ3aXRoU3RhdGUiLCJ2aXNTdGF0ZUxlbnMiLCJzdGF0ZSIsInVwZGF0ZUVmZmVjdCIsInJlbW92ZUVmZmVjdCIsInJlb3JkZXJFZmZlY3QiLCJpbmplY3RJbnRsIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VmZmVjdHMvZWZmZWN0LW1hbmFnZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZU1lbW8sIHVzZVN0YXRlLCB1c2VDYWxsYmFja30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge2luamVjdEludGwsIEludGxTaGFwZX0gZnJvbSAncmVhY3QtaW50bCc7XG5cbmltcG9ydCB7XG4gIGFkZEVmZmVjdCxcbiAgdXBkYXRlRWZmZWN0LFxuICByZW1vdmVFZmZlY3QsXG4gIHJlb3JkZXJFZmZlY3QsXG4gIEFjdGlvbkhhbmRsZXJcbn0gZnJvbSAnQGtlcGxlci5nbC9hY3Rpb25zJztcbmltcG9ydCB7XG4gIExJR0hUX0FORF9TSEFET1dfRUZGRUNULFxuICBFRkZFQ1RfREVTQ1JJUFRJT05TLFxuICBESVNUQU5DRV9GT0dfVFlQRSxcbiAgU1VSRkFDRV9GT0dfVFlQRVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge3Zpc1N0YXRlTGVuc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge0VmZmVjdH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuXG5pbXBvcnQge3dpdGhTdGF0ZX0gZnJvbSAnLi4vaW5qZWN0b3InO1xuaW1wb3J0IFNpZGVQYW5lbFRpdGxlRmFjdG9yeSBmcm9tICcuL3NpZGUtcGFuZWwtdGl0bGUnO1xuaW1wb3J0IEVmZmVjdExpc3RGYWN0b3J5IGZyb20gJy4vZWZmZWN0LWxpc3QnO1xuaW1wb3J0IEVmZmVjdFR5cGVTZWxlY3RvckZhY3RvcnksIHtFZmZlY3RUeXBlU2VsZWN0b3JQcm9wc30gZnJvbSAnLi9lZmZlY3QtdHlwZS1zZWxlY3Rvcic7XG5cbmV4cG9ydCB0eXBlIEVmZmVjdE1hbmFnZXJTdGF0ZSA9IHtcbiAgdmlzU3RhdGU6IFZpc1N0YXRlO1xuICB2aXNTdGF0ZUFjdGlvbnM6IHtcbiAgICBhZGRFZmZlY3Q6IEFjdGlvbkhhbmRsZXI8dHlwZW9mIGFkZEVmZmVjdD47XG4gICAgdXBkYXRlRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiB1cGRhdGVFZmZlY3Q+O1xuICAgIHJlbW92ZUVmZmVjdDogQWN0aW9uSGFuZGxlcjx0eXBlb2YgcmVtb3ZlRWZmZWN0PjtcbiAgICByZW9yZGVyRWZmZWN0OiBBY3Rpb25IYW5kbGVyPHR5cGVvZiByZW9yZGVyRWZmZWN0PjtcbiAgfTtcbiAgZWZmZWN0czogRWZmZWN0W107XG4gIGVmZmVjdE9yZGVyOiBzdHJpbmdbXTtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5leHBvcnQgdHlwZSBFZmZlY3RNYW5hZ2VyUHJvcHMgPSBFZmZlY3RNYW5hZ2VyV2l0aEludGxQcm9wICYgRWZmZWN0TWFuYWdlclN0YXRlO1xuXG5leHBvcnQgdHlwZSBFZmZlY3RNYW5hZ2VyV2l0aEludGxQcm9wID0ge2ludGw6IEludGxTaGFwZX07XG5cbmNvbnN0IFN0eWxlZEVmZmVjdFBhbmVsQ29udGFpbmVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDsgLyogcHJldmVudCBwYWRkaW5nIGZyb20gYmxvY2tpbmcgaW5wdXQgKi9cbiAgZmxleC1ncm93OiAxO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgJiA+ICoge1xuICAgIC8qIGFsbCBjaGlsZHJlbiBzaG91bGQgYWxsb3cgaW5wdXQgKi9cbiAgICBwb2ludGVyLWV2ZW50czogYWxsO1xuICB9XG5gO1xuXG4vLyB0b3AgcmlnaHQgcG9zaXRpb24gYWJzb2x1dGVcbmNvbnN0IFN0eWxlZEVmZmVjdFBhbmVsID0gc3R5bGVkLmRpdmBcbiAgdG9wOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnNpZGVQYW5lbEJnfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZmxleC1ncm93OiAxO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuYDtcblxuY29uc3QgU3R5bGVkRWZmZWN0UGFuZWxIZWFkZXIgPSBzdHlsZWQuZGl2YFxuICBwYWRkaW5nOiAkeyh7dGhlbWV9KSA9PlxuICAgIGAke3RoZW1lLmVmZmVjdFBhbmVsUGFkZGluZ1RvcH1weCAke3RoZW1lLmVmZmVjdFBhbmVsUGFkZGluZ1NpZGV9cHggNHB4ICR7dGhlbWUuZWZmZWN0UGFuZWxQYWRkaW5nU2lkZX1weGB9O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5ib3JkZXJDb2xvcn07XG4gIG1pbi13aWR0aDogJHsoe3RoZW1lfSkgPT4gdGhlbWUuZWZmZWN0UGFuZWxXaWR0aH1weDtcbmA7XG5cbnR5cGUgU3R5bGVkRWZmZWN0UGFuZWxDb250ZW50UHJvcHMgPSB7XG4gIGV4dGVuZGVkPzogYm9vbGVhbjtcbn07XG5jb25zdCBTdHlsZWRFZmZlY3RQYW5lbENvbnRlbnQgPSBzdHlsZWQuZGl2PFN0eWxlZEVmZmVjdFBhbmVsQ29udGVudFByb3BzPmBcbiAgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5zaWRlUGFuZWxTY3JvbGxCYXJ9O1xuICBwYWRkaW5nOiAke3Byb3BzID0+IChwcm9wcy5leHRlbmRlZCA/ICczMnB4JyA6ICcxMHB4IDBweCAxMHB4IDBweCcpfTtcbiAgb3ZlcmZsb3c6IG92ZXJsYXk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5gO1xuXG5FZmZlY3RNYW5hZ2VyRmFjdG9yeS5kZXBzID0gW0VmZmVjdExpc3RGYWN0b3J5LCBTaWRlUGFuZWxUaXRsZUZhY3RvcnksIEVmZmVjdFR5cGVTZWxlY3RvckZhY3RvcnldO1xuXG5mdW5jdGlvbiBFZmZlY3RNYW5hZ2VyRmFjdG9yeShcbiAgRWZmZWN0TGlzdDogUmV0dXJuVHlwZTx0eXBlb2YgRWZmZWN0TGlzdEZhY3Rvcnk+LFxuICBTaWRlUGFuZWxUaXRsZTogUmV0dXJuVHlwZTx0eXBlb2YgU2lkZVBhbmVsVGl0bGVGYWN0b3J5PixcbiAgRWZmZWN0VHlwZVNlbGVjdG9yOiBSZXR1cm5UeXBlPHR5cGVvZiBFZmZlY3RUeXBlU2VsZWN0b3JGYWN0b3J5PlxuKTogUmVhY3QuRkM8RWZmZWN0TWFuYWdlclByb3BzPiB7XG4gIGNvbnN0IEVmZmVjdE1hbmFnZXIgPSAocHJvcHM6IEVmZmVjdE1hbmFnZXJXaXRoSW50bFByb3AgJiBFZmZlY3RNYW5hZ2VyU3RhdGUpID0+IHtcbiAgICBjb25zdCB7aW50bCwgdmlzU3RhdGVBY3Rpb25zLCB2aXNTdGF0ZSwgY2hpbGRyZW59ID0gcHJvcHM7XG4gICAgY29uc3Qge2VmZmVjdHMsIGVmZmVjdE9yZGVyfSA9IHZpc1N0YXRlO1xuICAgIGNvbnN0IHthZGRFZmZlY3Q6IHZpc1N0YXRlQWRkRWZmZWN0fSA9IHZpc1N0YXRlQWN0aW9ucztcbiAgICBjb25zdCBbdHlwZVNlbGVjdG9yT3BlbmVkLCBzZXRUeXBlU2VsZWN0b3JPcGVuZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gICAgLy8gUHJldmVudCBzaGFkb3cgZWZmZWN0IGZyb20gYmVpbmcgYWRkZWQgbXVsdGlwbGUgdGltZXNcbiAgICBjb25zdCBlZmZlY3RPcHRpb25zOiBFZmZlY3RUeXBlU2VsZWN0b3JQcm9wc1snb3B0aW9ucyddID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBjb25zdCBoYXNTaGFkb3cgPSBlZmZlY3RzLnNvbWUoZWZmZWN0ID0+IHtcbiAgICAgICAgcmV0dXJuIGVmZmVjdC50eXBlID09PSBMSUdIVF9BTkRfU0hBRE9XX0VGRkVDVC50eXBlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBoYXNEaXN0YW5jZUZvZyA9IGVmZmVjdHMuc29tZShlZmZlY3QgPT4ge1xuICAgICAgICByZXR1cm4gZWZmZWN0LnR5cGUgPT09IERJU1RBTkNFX0ZPR19UWVBFO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBoYXNTdXJmYWNlRm9nID0gZWZmZWN0cy5zb21lKGVmZmVjdCA9PiB7XG4gICAgICAgIHJldHVybiBlZmZlY3QudHlwZSA9PT0gU1VSRkFDRV9GT0dfVFlQRTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaGFzQW55Rm9nID0gaGFzRGlzdGFuY2VGb2cgfHwgaGFzU3VyZmFjZUZvZztcblxuICAgICAgcmV0dXJuIEVGRkVDVF9ERVNDUklQVElPTlMubWFwKGRlc2MgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmRlc2MsXG4gICAgICAgICAgZGlzYWJsZWQ6IEJvb2xlYW4oXG4gICAgICAgICAgICAoaGFzU2hhZG93ICYmIGRlc2MudHlwZSA9PT0gTElHSFRfQU5EX1NIQURPV19FRkZFQ1QudHlwZSkgfHxcbiAgICAgICAgICAgICAgKGhhc0FueUZvZyAmJiAoZGVzYy50eXBlID09PSBESVNUQU5DRV9GT0dfVFlQRSB8fCBkZXNjLnR5cGUgPT09IFNVUkZBQ0VfRk9HX1RZUEUpKVxuICAgICAgICAgIClcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0sIFtlZmZlY3RzXSk7XG5cbiAgICBjb25zdCBvbkFkZEVmZmVjdCA9IHVzZUNhbGxiYWNrKFxuICAgICAgdHlwZSA9PiB7XG4gICAgICAgIHZpc1N0YXRlQWRkRWZmZWN0KHt0eXBlfSk7XG4gICAgICB9LFxuICAgICAgW3Zpc1N0YXRlQWRkRWZmZWN0XVxuICAgICk7XG5cbiAgICBjb25zdCBvblR5cGVTZWxlY3RPcGVuID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0VHlwZVNlbGVjdG9yT3BlbmVkKHRydWUpO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG9uVHlwZVNlbGVjdENsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgc2V0VHlwZVNlbGVjdG9yT3BlbmVkKGZhbHNlKTtcbiAgICB9LCBbXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEVmZmVjdFBhbmVsQ29udGFpbmVyIGNsYXNzTmFtZT1cImVmZmVjdC1tYW5hZ2VyXCI+XG4gICAgICAgIDxTdHlsZWRFZmZlY3RQYW5lbD5cbiAgICAgICAgICA8U3R5bGVkRWZmZWN0UGFuZWxIZWFkZXIgY2xhc3NOYW1lPVwiZWZmZWN0LXBhbmVsLWhlYWRlclwiPlxuICAgICAgICAgICAgPFNpZGVQYW5lbFRpdGxlXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImVmZmVjdC1tYW5hZ2VyLXRpdGxlXCJcbiAgICAgICAgICAgICAgdGl0bGU9e2ludGwuZm9ybWF0TWVzc2FnZSh7aWQ6ICdlZmZlY3RNYW5hZ2VyLmVmZmVjdHMnfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxFZmZlY3RUeXBlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICBvcHRpb25zPXtlZmZlY3RPcHRpb25zfVxuICAgICAgICAgICAgICAgIG9uU2VsZWN0PXtvbkFkZEVmZmVjdH1cbiAgICAgICAgICAgICAgICBvbk9wZW49e29uVHlwZVNlbGVjdE9wZW59XG4gICAgICAgICAgICAgICAgb25CbHVyPXtvblR5cGVTZWxlY3RDbG9zZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU2lkZVBhbmVsVGl0bGU+XG4gICAgICAgICAgPC9TdHlsZWRFZmZlY3RQYW5lbEhlYWRlcj5cblxuICAgICAgICAgIDxTdHlsZWRFZmZlY3RQYW5lbENvbnRlbnQgZXh0ZW5kZWQ9e3R5cGVTZWxlY3Rvck9wZW5lZCAmJiBlZmZlY3RzLmxlbmd0aCA9PT0gMH0+XG4gICAgICAgICAgICA8RWZmZWN0TGlzdFxuICAgICAgICAgICAgICBlZmZlY3RzPXtlZmZlY3RzfVxuICAgICAgICAgICAgICBlZmZlY3RPcmRlcj17ZWZmZWN0T3JkZXJ9XG4gICAgICAgICAgICAgIHZpc1N0YXRlQWN0aW9ucz17dmlzU3RhdGVBY3Rpb25zfVxuICAgICAgICAgICAgICBpc1NvcnRhYmxlPXt0cnVlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1N0eWxlZEVmZmVjdFBhbmVsQ29udGVudD5cbiAgICAgICAgPC9TdHlsZWRFZmZlY3RQYW5lbD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9TdHlsZWRFZmZlY3RQYW5lbENvbnRhaW5lcj5cbiAgICApO1xuICB9O1xuXG4gIHJldHVybiB3aXRoU3RhdGUoW3Zpc1N0YXRlTGVuc10sIHN0YXRlID0+IHN0YXRlLCB7XG4gICAgdmlzU3RhdGVBY3Rpb25zOiB7YWRkRWZmZWN0LCB1cGRhdGVFZmZlY3QsIHJlbW92ZUVmZmVjdCwgcmVvcmRlckVmZmVjdH1cbiAgfSkoaW5qZWN0SW50bChFZmZlY3RNYW5hZ2VyKSkgYXMgUmVhY3QuRkM8RWZmZWN0TWFuYWdlclByb3BzPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgRWZmZWN0TWFuYWdlckZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLFFBQUEsR0FBQUosT0FBQTtBQU9BLElBQUFLLFVBQUEsR0FBQUwsT0FBQTtBQU1BLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQUlBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLGVBQUEsR0FBQU4sc0JBQUEsQ0FB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