UNPKG

kepler.gl

Version:

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

153 lines (150 loc) 24.1 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 _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("react")); var _styledComponents = _interopRequireWildcard(require("styled-components")); var _classnames = _interopRequireDefault(require("classnames")); var _momentTimezone = _interopRequireDefault(require("moment-timezone")); var _itemSelector = _interopRequireDefault(require("../common/item-selector/item-selector")); var _styledComponents2 = require("../common/styled-components"); var _dropdownList = require("../common/item-selector/dropdown-list"); 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; } var HEADER_ITEM_ID = 'HEADER_ITEM_ID'; var StyledEffectTimeSelector = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n .item-selector {\n background-color: transparent;\n }\n .item-selector .item-selector__dropdown {\n padding: 0px;\n width: 110px;\n height: 30px;\n }\n border: 1px solid ", ";\n border-radius: 4px;\n &:hover {\n border: 1px solid ", ";\n }\n .active {\n border: 1px solid ", ";\n border-radius: 4px 4px 0px 0px;\n }\n"])), function (props) { return props.theme.inputBgd; }, function (props) { return props.theme.inputBgdHover; }, function (props) { return props.theme.activeColor; }); var StyledLabel = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n font-size: ", ";\n height: 13px;\n display: flex;\n align-items: center;\n"])), function (props) { return props.theme.effectPanelTextMain; }, function (props) { return props.theme.inputFontSize; }); var DropdownListWrapper = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n ", ";\n background-color: ", ";\n display: flex;\n flex-wrap: wrap;\n padding: 0px;\n max-height: 160px;\n border-radius: 0px 0px 4px 4px;\n"])), function (props) { return props.theme.dropdownList; }, function (props) { return props.theme.inputBgdHover; }); var StyledDropdownListItem = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 10px 5px 9px 10px;\n width: 100%;\n &:hover {\n background-color: ", ";\n cursor: pointer;\n }\n"])), function (props) { return props.theme.effectPanelElementColorSelected; }); // Generate time options for the dropdown with 30 min intervals. var timeOptions = function () { var m = (0, _momentTimezone["default"])().utcOffset(0); m.set({ hour: 12, minute: 0, second: 0, millisecond: 0 }); var out = []; for (var i = 0; i < 48; i++) { out.push({ name: m.format('hh:mm A'), id: m.format('HH:mm') }); m.add(30, 'minutes'); } return out; }(); var getDisplayOption = function getDisplayOption(op) { return op.name; }; var getOptionValue = function getOptionValue(op) { return op.id; }; /** * A component to render TimePicker as the header for the dropdown component. */ var EffectTimeListItem = function EffectTimeListItem(_ref) { var value = _ref.value; if ((value === null || value === void 0 ? void 0 : value.id) === HEADER_ITEM_ID) { return /*#__PURE__*/_react["default"].createElement(_styledComponents2.StyledTimePicker, { value: value.value, onChange: value.onChange, onClick: value.onClick, disableClock: true, format: 'hh:mm a' }); } return /*#__PURE__*/_react["default"].createElement(StyledLabel, null, value.name); }; var EffectTimeDropdownList = function EffectTimeDropdownList(_ref2) { var onOptionSelected = _ref2.onOptionSelected, options = _ref2.options, selectionIndex = _ref2.selectionIndex, customListItemComponent = _ref2.customListItemComponent; var onSelectOption = (0, _react.useCallback)(function (e, value) { e.preventDefault(); onOptionSelected(value); }, [onOptionSelected]); var ListItemComponent = customListItemComponent; return /*#__PURE__*/_react["default"].createElement(DropdownListWrapper, { className: _dropdownList.classList.list }, options.map(function (value, i) { return /*#__PURE__*/_react["default"].createElement(StyledDropdownListItem, { className: (0, _classnames["default"])('effect-type-selector__item', { hover: selectionIndex === i }), key: "".concat(value.id, "_").concat(i), onMouseDown: function onMouseDown(e) { return onSelectOption(e, value); }, onClick: function onClick(e) { return onSelectOption(e, value); } }, /*#__PURE__*/_react["default"].createElement(ListItemComponent, { value: value })); })); }; EffectTimeSelectorFactory.deps = []; function EffectTimeSelectorFactory() { var EffectTimeSelector = function EffectTimeSelector(_ref3) { var value = _ref3.value, onChange = _ref3.onChange; // Selected item is rendered as TimePicker in EffectTimeListItem var selectedItems = (0, _react.useMemo)(function () { return [{ id: HEADER_ITEM_ID, value: value, onChange: onChange, onClick: function onClick(e) { var _e$target; // DatePicker is used as custom header. // Don't open the dropdown when the user is editing time values directly. var name = e === null || e === void 0 || (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.name; if (name === 'hour12' || name === 'minute' || name === 'amPm') { e.stopPropagation(); } } }]; }, [value, onChange]); return /*#__PURE__*/_react["default"].createElement(StyledEffectTimeSelector, null, /*#__PURE__*/_react["default"].createElement(_itemSelector["default"], { selectedItems: selectedItems, options: timeOptions, multiSelect: false, searchable: false, placeholder: "", filterOption: "name", onChange: onChange, getOptionValue: getOptionValue, displayOption: getDisplayOption, DropDownLineItemRenderComponent: EffectTimeListItem, DropDownRenderComponent: EffectTimeDropdownList })); }; return (0, _styledComponents.withTheme)(EffectTimeSelector); } var _default = exports["default"] = EffectTimeSelectorFactory; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jbGFzc25hbWVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9tb21lbnRUaW1lem9uZSIsIl9pdGVtU2VsZWN0b3IiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfZHJvcGRvd25MaXN0IiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiSEVBREVSX0lURU1fSUQiLCJTdHlsZWRFZmZlY3RUaW1lU2VsZWN0b3IiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJpbnB1dEJnZCIsImlucHV0QmdkSG92ZXIiLCJhY3RpdmVDb2xvciIsIlN0eWxlZExhYmVsIiwiZWZmZWN0UGFuZWxUZXh0TWFpbiIsImlucHV0Rm9udFNpemUiLCJEcm9wZG93bkxpc3RXcmFwcGVyIiwiZHJvcGRvd25MaXN0IiwiU3R5bGVkRHJvcGRvd25MaXN0SXRlbSIsImVmZmVjdFBhbmVsRWxlbWVudENvbG9yU2VsZWN0ZWQiLCJ0aW1lT3B0aW9ucyIsIm0iLCJtb21lbnQiLCJ1dGNPZmZzZXQiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJvdXQiLCJwdXNoIiwibmFtZSIsImZvcm1hdCIsImlkIiwiYWRkIiwiZ2V0RGlzcGxheU9wdGlvbiIsIm9wIiwiZ2V0T3B0aW9uVmFsdWUiLCJFZmZlY3RUaW1lTGlzdEl0ZW0iLCJfcmVmIiwidmFsdWUiLCJjcmVhdGVFbGVtZW50IiwiU3R5bGVkVGltZVBpY2tlciIsIm9uQ2hhbmdlIiwib25DbGljayIsImRpc2FibGVDbG9jayIsIkVmZmVjdFRpbWVEcm9wZG93bkxpc3QiLCJfcmVmMiIsIm9uT3B0aW9uU2VsZWN0ZWQiLCJvcHRpb25zIiwic2VsZWN0aW9uSW5kZXgiLCJjdXN0b21MaXN0SXRlbUNvbXBvbmVudCIsIm9uU2VsZWN0T3B0aW9uIiwidXNlQ2FsbGJhY2siLCJwcmV2ZW50RGVmYXVsdCIsIkxpc3RJdGVtQ29tcG9uZW50IiwiY2xhc3NOYW1lIiwiY2xhc3NMaXN0IiwibGlzdCIsIm1hcCIsImNsYXNzTmFtZXMiLCJob3ZlciIsImtleSIsImNvbmNhdCIsIm9uTW91c2VEb3duIiwiRWZmZWN0VGltZVNlbGVjdG9yRmFjdG9yeSIsImRlcHMiLCJFZmZlY3RUaW1lU2VsZWN0b3IiLCJfcmVmMyIsInNlbGVjdGVkSXRlbXMiLCJ1c2VNZW1vIiwiX2UkdGFyZ2V0IiwidGFyZ2V0Iiwic3RvcFByb3BhZ2F0aW9uIiwibXVsdGlTZWxlY3QiLCJzZWFyY2hhYmxlIiwicGxhY2Vob2xkZXIiLCJmaWx0ZXJPcHRpb24iLCJkaXNwbGF5T3B0aW9uIiwiRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudCIsIkRyb3BEb3duUmVuZGVyQ29tcG9uZW50Iiwid2l0aFRoZW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VmZmVjdHMvZWZmZWN0LXRpbWUtc2VsZWN0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZU1lbW8sIHVzZUNhbGxiYWNrfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcblxuaW1wb3J0IEl0ZW1TZWxlY3RvciBmcm9tICcuLi9jb21tb24vaXRlbS1zZWxlY3Rvci9pdGVtLXNlbGVjdG9yJztcbmltcG9ydCB7U3R5bGVkVGltZVBpY2tlcn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Y2xhc3NMaXN0fSBmcm9tICcuLi9jb21tb24vaXRlbS1zZWxlY3Rvci9kcm9wZG93bi1saXN0JztcblxuY29uc3QgSEVBREVSX0lURU1fSUQgPSAnSEVBREVSX0lURU1fSUQnO1xuXG5leHBvcnQgdHlwZSBFZmZlY3RUaW1lU2VsZWN0b3JQcm9wcyA9IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgb25DaGFuZ2U6IChzdHJpbmcpID0+IHZvaWQ7XG4gIHRoZW1lPzogYW55O1xufTtcblxuY29uc3QgU3R5bGVkRWZmZWN0VGltZVNlbGVjdG9yID0gc3R5bGVkLmRpdmBcbiAgLml0ZW0tc2VsZWN0b3Ige1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICB9XG4gIC5pdGVtLXNlbGVjdG9yIC5pdGVtLXNlbGVjdG9yX19kcm9wZG93biB7XG4gICAgcGFkZGluZzogMHB4O1xuICAgIHdpZHRoOiAxMTBweDtcbiAgICBoZWlnaHQ6IDMwcHg7XG4gIH1cbiAgYm9yZGVyOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEJnZH07XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgJjpob3ZlciB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEJnZEhvdmVyfTtcbiAgfVxuICAuYWN0aXZlIHtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgICBib3JkZXItcmFkaXVzOiA0cHggNHB4IDBweCAwcHg7XG4gIH1cbmA7XG5cbmNvbnN0IFN0eWxlZExhYmVsID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZWZmZWN0UGFuZWxUZXh0TWFpbn07XG4gIGZvbnQtc2l6ZTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEZvbnRTaXplfTtcbiAgaGVpZ2h0OiAxM3B4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuYDtcblxuY29uc3QgRHJvcGRvd25MaXN0V3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuZHJvcGRvd25MaXN0fTtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5pbnB1dEJnZEhvdmVyfTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBwYWRkaW5nOiAwcHg7XG4gIG1heC1oZWlnaHQ6IDE2MHB4O1xuICBib3JkZXItcmFkaXVzOiAwcHggMHB4IDRweCA0cHg7XG5gO1xuXG5jb25zdCBTdHlsZWREcm9wZG93bkxpc3RJdGVtID0gc3R5bGVkLmRpdmBcbiAgcGFkZGluZzogMTBweCA1cHggOXB4IDEwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmVmZmVjdFBhbmVsRWxlbWVudENvbG9yU2VsZWN0ZWR9O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuYDtcblxuLy8gR2VuZXJhdGUgdGltZSBvcHRpb25zIGZvciB0aGUgZHJvcGRvd24gd2l0aCAzMCBtaW4gaW50ZXJ2YWxzLlxuY29uc3QgdGltZU9wdGlvbnMgPSAoKCkgPT4ge1xuICBjb25zdCBtID0gbW9tZW50KCkudXRjT2Zmc2V0KDApO1xuICBtLnNldCh7aG91cjogMTIsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMH0pO1xuXG4gIGNvbnN0IG91dDoge25hbWU6IHN0cmluZzsgaWQ6IHN0cmluZ31bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDQ4OyBpKyspIHtcbiAgICBvdXQucHVzaCh7bmFtZTogbS5mb3JtYXQoJ2hoOm1tIEEnKSwgaWQ6IG0uZm9ybWF0KCdISDptbScpfSk7XG4gICAgbS5hZGQoMzAsICdtaW51dGVzJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn0pKCk7XG5cbmNvbnN0IGdldERpc3BsYXlPcHRpb24gPSBvcCA9PiBvcC5uYW1lO1xuY29uc3QgZ2V0T3B0aW9uVmFsdWUgPSBvcCA9PiBvcC5pZDtcblxuLyoqXG4gKiBBIGNvbXBvbmVudCB0byByZW5kZXIgVGltZVBpY2tlciBhcyB0aGUgaGVhZGVyIGZvciB0aGUgZHJvcGRvd24gY29tcG9uZW50LlxuICovXG5jb25zdCBFZmZlY3RUaW1lTGlzdEl0ZW0gPSAoe3ZhbHVlfSkgPT4ge1xuICBpZiAodmFsdWU/LmlkID09PSBIRUFERVJfSVRFTV9JRCkge1xuICAgIHJldHVybiAoXG4gICAgICA8U3R5bGVkVGltZVBpY2tlclxuICAgICAgICB2YWx1ZT17dmFsdWUudmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXt2YWx1ZS5vbkNoYW5nZX1cbiAgICAgICAgb25DbGljaz17dmFsdWUub25DbGlja31cbiAgICAgICAgZGlzYWJsZUNsb2NrPXt0cnVlfVxuICAgICAgICBmb3JtYXQ9eydoaDptbSBhJ31cbiAgICAgIC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiA8U3R5bGVkTGFiZWw+e3ZhbHVlLm5hbWV9PC9TdHlsZWRMYWJlbD47XG59O1xuXG5jb25zdCBFZmZlY3RUaW1lRHJvcGRvd25MaXN0ID0gKHtcbiAgb25PcHRpb25TZWxlY3RlZCxcbiAgb3B0aW9ucyxcbiAgc2VsZWN0aW9uSW5kZXgsXG4gIGN1c3RvbUxpc3RJdGVtQ29tcG9uZW50XG59KSA9PiB7XG4gIGNvbnN0IG9uU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKGUsIHZhbHVlKSA9PiB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvbk9wdGlvblNlbGVjdGVkKHZhbHVlKTtcbiAgICB9LFxuICAgIFtvbk9wdGlvblNlbGVjdGVkXVxuICApO1xuXG4gIGNvbnN0IExpc3RJdGVtQ29tcG9uZW50ID0gY3VzdG9tTGlzdEl0ZW1Db21wb25lbnQ7XG5cbiAgcmV0dXJuIChcbiAgICA8RHJvcGRvd25MaXN0V3JhcHBlciBjbGFzc05hbWU9e2NsYXNzTGlzdC5saXN0fT5cbiAgICAgIHtvcHRpb25zLm1hcCgodmFsdWUsIGkpID0+IChcbiAgICAgICAgPFN0eWxlZERyb3Bkb3duTGlzdEl0ZW1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ2VmZmVjdC10eXBlLXNlbGVjdG9yX19pdGVtJywge1xuICAgICAgICAgICAgaG92ZXI6IHNlbGVjdGlvbkluZGV4ID09PSBpXG4gICAgICAgICAgfSl9XG4gICAgICAgICAga2V5PXtgJHt2YWx1ZS5pZH1fJHtpfWB9XG4gICAgICAgICAgb25Nb3VzZURvd249e2UgPT4gb25TZWxlY3RPcHRpb24oZSwgdmFsdWUpfVxuICAgICAgICAgIG9uQ2xpY2s9e2UgPT4gb25TZWxlY3RPcHRpb24oZSwgdmFsdWUpfVxuICAgICAgICA+XG4gICAgICAgICAgPExpc3RJdGVtQ29tcG9uZW50IHZhbHVlPXt2YWx1ZX0gLz5cbiAgICAgICAgPC9TdHlsZWREcm9wZG93bkxpc3RJdGVtPlxuICAgICAgKSl9XG4gICAgPC9Ecm9wZG93bkxpc3RXcmFwcGVyPlxuICApO1xufTtcblxuRWZmZWN0VGltZVNlbGVjdG9yRmFjdG9yeS5kZXBzID0gW107XG5cbmZ1bmN0aW9uIEVmZmVjdFRpbWVTZWxlY3RvckZhY3RvcnkoKSB7XG4gIGNvbnN0IEVmZmVjdFRpbWVTZWxlY3RvcjogUmVhY3QuRkM8RWZmZWN0VGltZVNlbGVjdG9yUHJvcHM+ID0gKHtcbiAgICB2YWx1ZSxcbiAgICBvbkNoYW5nZVxuICB9OiBFZmZlY3RUaW1lU2VsZWN0b3JQcm9wcykgPT4ge1xuICAgIC8vIFNlbGVjdGVkIGl0ZW0gaXMgcmVuZGVyZWQgYXMgVGltZVBpY2tlciBpbiBFZmZlY3RUaW1lTGlzdEl0ZW1cbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6IEhFQURFUl9JVEVNX0lELFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG9uQ2hhbmdlLFxuICAgICAgICAgIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgICAgLy8gRGF0ZVBpY2tlciBpcyB1c2VkIGFzIGN1c3RvbSBoZWFkZXIuXG4gICAgICAgICAgICAvLyBEb24ndCBvcGVuIHRoZSBkcm9wZG93biB3aGVuIHRoZSB1c2VyIGlzIGVkaXRpbmcgdGltZSB2YWx1ZXMgZGlyZWN0bHkuXG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZT8udGFyZ2V0Py5uYW1lO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdob3VyMTInIHx8IG5hbWUgPT09ICdtaW51dGUnIHx8IG5hbWUgPT09ICdhbVBtJykge1xuICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9LCBbdmFsdWUsIG9uQ2hhbmdlXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFN0eWxlZEVmZmVjdFRpbWVTZWxlY3Rvcj5cbiAgICAgICAgPEl0ZW1TZWxlY3RvclxuICAgICAgICAgIHNlbGVjdGVkSXRlbXM9e3NlbGVjdGVkSXRlbXN9XG4gICAgICAgICAgb3B0aW9ucz17dGltZU9wdGlvbnN9XG4gICAgICAgICAgbXVsdGlTZWxlY3Q9e2ZhbHNlfVxuICAgICAgICAgIHNlYXJjaGFibGU9e2ZhbHNlfVxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgICAgICBmaWx0ZXJPcHRpb249XCJuYW1lXCJcbiAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgICAgZ2V0T3B0aW9uVmFsdWU9e2dldE9wdGlvblZhbHVlfVxuICAgICAgICAgIGRpc3BsYXlPcHRpb249e2dldERpc3BsYXlPcHRpb259XG4gICAgICAgICAgRHJvcERvd25MaW5lSXRlbVJlbmRlckNvbXBvbmVudD17RWZmZWN0VGltZUxpc3RJdGVtfVxuICAgICAgICAgIERyb3BEb3duUmVuZGVyQ29tcG9uZW50PXtFZmZlY3RUaW1lRHJvcGRvd25MaXN0fVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRFZmZlY3RUaW1lU2VsZWN0b3I+XG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gd2l0aFRoZW1lKEVmZmVjdFRpbWVTZWxlY3RvcikgYXMgUmVhY3QuRkM8T21pdDxFZmZlY3RUaW1lU2VsZWN0b3JQcm9wcywgJ3RoZW1lJz4+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBFZmZlY3RUaW1lU2VsZWN0b3JGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBRix1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsV0FBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksZUFBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBRUEsSUFBQUssYUFBQSxHQUFBRixzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQU0sa0JBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLGFBQUEsR0FBQVAsT0FBQTtBQUFnRSxJQUFBUSxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBVmhFO0FBQ0E7QUFBQSxTQUFBQyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQWQsd0JBQUFjLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QUFXQSxJQUFNVyxjQUFjLEdBQUcsZ0JBQWdCO0FBUXZDLElBQU1DLHdCQUF3QixHQUFHQyw0QkFBTSxDQUFDQyxHQUFHLENBQUEzQixlQUFBLEtBQUFBLGVBQUEsT0FBQTRCLHVCQUFBLG9YQVNyQixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNDLFFBQVE7QUFBQSxHQUczQixVQUFBRixLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNFLGFBQWE7QUFBQSxHQUdsQyxVQUFBSCxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNHLFdBQVc7QUFBQSxFQUd2RDtBQUVELElBQU1DLFdBQVcsR0FBR1IsNEJBQU0sQ0FBQ0MsR0FBRyxDQUFBMUIsZ0JBQUEsS0FBQUEsZ0JBQUEsT0FBQTJCLHVCQUFBLHNIQUNuQixVQUFBQyxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNLLG1CQUFtQjtBQUFBLEdBQ3BDLFVBQUFOLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ00sYUFBYTtBQUFBLEVBSWhEO0FBRUQsSUFBTUMsbUJBQW1CLEdBQUdYLDRCQUFNLENBQUNDLEdBQUcsQ0FBQXpCLGdCQUFBLEtBQUFBLGdCQUFBLE9BQUEwQix1QkFBQSwyS0FDbEMsVUFBQUMsS0FBSztFQUFBLE9BQUlBLEtBQUssQ0FBQ0MsS0FBSyxDQUFDUSxZQUFZO0FBQUEsR0FDZixVQUFBVCxLQUFLO0VBQUEsT0FBSUEsS0FBSyxDQUFDQyxLQUFLLENBQUNFLGFBQWE7QUFBQSxFQU12RDtBQUVELElBQU1PLHNCQUFzQixHQUFHYiw0QkFBTSxDQUFDQyxHQUFHLENBQUF4QixnQkFBQSxLQUFBQSxnQkFBQSxPQUFBeUIsdUJBQUEsMklBSWpCLFVBQUFDLEtBQUs7RUFBQSxPQUFJQSxLQUFLLENBQUNDLEtBQUssQ0FBQ1UsK0JBQStCO0FBQUEsRUFHM0U7O0FBRUQ7QUFDQSxJQUFNQyxXQUFXLEdBQUksWUFBTTtFQUN6QixJQUFNQyxDQUFDLEdBQUcsSUFBQUMsMEJBQU0sRUFBQyxDQUFDLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUM7RUFDL0JGLENBQUMsQ0FBQ25CLEdBQUcsQ0FBQztJQUFDc0IsSUFBSSxFQUFFLEVBQUU7SUFBRUMsTUFBTSxFQUFFLENBQUM7SUFBRUMsTUFBTSxFQUFFLENBQUM7SUFBRUMsV0FBVyxFQUFFO0VBQUMsQ0FBQyxDQUFDO0VBRXZELElBQU1DLEdBQWlDLEdBQUcsRUFBRTtFQUM1QyxLQUFLLElBQUkzQixDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUcsRUFBRSxFQUFFQSxDQUFDLEVBQUUsRUFBRTtJQUMzQjJCLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO01BQUNDLElBQUksRUFBRVQsQ0FBQyxDQUFDVSxNQUFNLENBQUMsU0FBUyxDQUFDO01BQUVDLEVBQUUsRUFBRVgsQ0FBQyxDQUFDVSxNQUFNLENBQUMsT0FBTztJQUFDLENBQUMsQ0FBQztJQUM1RFYsQ0FBQyxDQUFDWSxHQUFHLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQztFQUN0QjtFQUNBLE9BQU9MLEdBQUc7QUFDWixDQUFDLENBQUUsQ0FBQztBQUVKLElBQU1NLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUdDLEVBQUU7RUFBQSxPQUFJQSxFQUFFLENBQUNMLElBQUk7QUFBQTtBQUN0QyxJQUFNTSxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUdELEVBQUU7RUFBQSxPQUFJQSxFQUFFLENBQUNILEVBQUU7QUFBQTs7QUFFbEM7QUFDQTtBQUNBO0FBQ0EsSUFBTUssa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQUMsSUFBQSxFQUFnQjtFQUFBLElBQVhDLEtBQUssR0FBQUQsSUFBQSxDQUFMQyxLQUFLO0VBQ2hDLElBQUksQ0FBQUEsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVQLEVBQUUsTUFBSzdCLGNBQWMsRUFBRTtJQUNoQyxvQkFDRWxDLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQy9ELGtCQUFBLENBQUFnRSxnQkFBZ0I7TUFDZkYsS0FBSyxFQUFFQSxLQUFLLENBQUNBLEtBQU07TUFDbkJHLFFBQVEsRUFBRUgsS0FBSyxDQUFDRyxRQUFTO01BQ3pCQyxPQUFPLEVBQUVKLEtBQUssQ0FBQ0ksT0FBUTtNQUN2QkMsWUFBWSxFQUFFLElBQUs7TUFDbkJiLE1BQU0sRUFBRTtJQUFVLENBQ25CLENBQUM7RUFFTjtFQUVBLG9CQUFPOUQsTUFBQSxZQUFBdUUsYUFBQSxDQUFDM0IsV0FBVyxRQUFFMEIsS0FBSyxDQUFDVCxJQUFrQixDQUFDO0FBQ2hELENBQUM7QUFFRCxJQUFNZSxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBQyxLQUFBLEVBS3RCO0VBQUEsSUFKSkMsZ0JBQWdCLEdBQUFELEtBQUEsQ0FBaEJDLGdCQUFnQjtJQUNoQkMsT0FBTyxHQUFBRixLQUFBLENBQVBFLE9BQU87SUFDUEMsY0FBYyxHQUFBSCxLQUFBLENBQWRHLGNBQWM7SUFDZEMsdUJBQXVCLEdBQUFKLEtBQUEsQ0FBdkJJLHVCQUF1QjtFQUV2QixJQUFNQyxjQUFjLEdBQUcsSUFBQUMsa0JBQVcsRUFDaEMsVUFBQ3BFLENBQUMsRUFBRXVELEtBQUssRUFBSztJQUNadkQsQ0FBQyxDQUFDcUUsY0FBYyxDQUFDLENBQUM7SUFDbEJOLGdCQUFnQixDQUFDUixLQUFLLENBQUM7RUFDekIsQ0FBQyxFQUNELENBQUNRLGdCQUFnQixDQUNuQixDQUFDO0VBRUQsSUFBTU8saUJBQWlCLEdBQUdKLHVCQUF1QjtFQUVqRCxvQkFDRWpGLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ3hCLG1CQUFtQjtJQUFDdUMsU0FBUyxFQUFFQyx1QkFBUyxDQUFDQztFQUFLLEdBQzVDVCxPQUFPLENBQUNVLEdBQUcsQ0FBQyxVQUFDbkIsS0FBSyxFQUFFdEMsQ0FBQztJQUFBLG9CQUNwQmhDLE1BQUEsWUFBQXVFLGFBQUEsQ0FBQ3RCLHNCQUFzQjtNQUNyQnFDLFNBQVMsRUFBRSxJQUFBSSxzQkFBVSxFQUFDLDRCQUE0QixFQUFFO1FBQ2xEQyxLQUFLLEVBQUVYLGNBQWMsS0FBS2hEO01BQzVCLENBQUMsQ0FBRTtNQUNINEQsR0FBRyxLQUFBQyxNQUFBLENBQUt2QixLQUFLLENBQUNQLEVBQUUsT0FBQThCLE1BQUEsQ0FBSTdELENBQUMsQ0FBRztNQUN4QjhELFdBQVcsRUFBRSxTQUFiQSxXQUFXQSxDQUFFL0UsQ0FBQztRQUFBLE9BQUltRSxjQUFjLENBQUNuRSxDQUFDLEVBQUV1RCxLQUFLLENBQUM7TUFBQSxDQUFDO01BQzNDSSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRTNELENBQUM7UUFBQSxPQUFJbUUsY0FBYyxDQUFDbkUsQ0FBQyxFQUFFdUQsS0FBSyxDQUFDO01BQUE7SUFBQyxnQkFFdkN0RSxNQUFBLFlBQUF1RSxhQUFBLENBQUNjLGlCQUFpQjtNQUFDZixLQUFLLEVBQUVBO0lBQU0sQ0FBRSxDQUNaLENBQUM7RUFBQSxDQUMxQixDQUNrQixDQUFDO0FBRTFCLENBQUM7QUFFRHlCLHlCQUF5QixDQUFDQyxJQUFJLEdBQUcsRUFBRTtBQUVuQyxTQUFTRCx5QkFBeUJBLENBQUEsRUFBRztFQUNuQyxJQUFNRSxrQkFBcUQsR0FBRyxTQUF4REEsa0JBQXFEQSxDQUFBQyxLQUFBLEVBRzVCO0lBQUEsSUFGN0I1QixLQUFLLEdBQUE0QixLQUFBLENBQUw1QixLQUFLO01BQ0xHLFFBQVEsR0FBQXlCLEtBQUEsQ0FBUnpCLFFBQVE7SUFFUjtJQUNBLElBQU0wQixhQUFhLEdBQUcsSUFBQUMsY0FBTyxFQUFDLFlBQU07TUFDbEMsT0FBTyxDQUNMO1FBQ0VyQyxFQUFFLEVBQUU3QixjQUFjO1FBQ2xCb0MsS0FBSyxFQUFMQSxLQUFLO1FBQ0xHLFFBQVEsRUFBUkEsUUFBUTtRQUNSQyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRTNELENBQUMsRUFBSTtVQUFBLElBQUFzRixTQUFBO1VBQ1o7VUFDQTtVQUNBLElBQU14QyxJQUFJLEdBQUc5QyxDQUFDLGFBQURBLENBQUMsZ0JBQUFzRixTQUFBLEdBQUR0RixDQUFDLENBQUV1RixNQUFNLGNBQUFELFNBQUEsdUJBQVRBLFNBQUEsQ0FBV3hDLElBQUk7VUFDNUIsSUFBSUEsSUFBSSxLQUFLLFFBQVEsSUFBSUEsSUFBSSxLQUFLLFFBQVEsSUFBSUEsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUM3RDlDLENBQUMsQ0FBQ3dGLGVBQWUsQ0FBQyxDQUFDO1VBQ3JCO1FBQ0Y7TUFDRixDQUFDLENBQ0Y7SUFDSCxDQUFDLEVBQUUsQ0FBQ2pDLEtBQUssRUFBRUcsUUFBUSxDQUFDLENBQUM7SUFFckIsb0JBQ0V6RSxNQUFBLFlBQUF1RSxhQUFBLENBQUNwQyx3QkFBd0IscUJBQ3ZCbkMsTUFBQSxZQUFBdUUsYUFBQSxDQUFDaEUsYUFBQSxXQUFZO01BQ1g0RixhQUFhLEVBQUVBLGFBQWM7TUFDN0JwQixPQUFPLEVBQUU1QixXQUFZO01BQ3JCcUQsV0FBVyxFQUFFLEtBQU07TUFDbkJDLFVBQVUsRUFBRSxLQUFNO01BQ2xCQyxXQUFXLEVBQUMsRUFBRTtNQUNkQyxZQUFZLEVBQUMsTUFBTTtNQUNuQmxDLFFBQVEsRUFBRUEsUUFBUztNQUNuQk4sY0FBYyxFQUFFQSxjQUFlO01BQy9CeUMsYUFBYSxFQUFFM0MsZ0JBQWlCO01BQ2hDNEMsK0JBQStCLEVBQUV6QyxrQkFBbUI7TUFDcEQwQyx1QkFBdUIsRUFBRWxDO0lBQXVCLENBQ2pELENBQ3VCLENBQUM7RUFFL0IsQ0FBQztFQUVELE9BQU8sSUFBQW1DLDJCQUFTLEVBQUNkLGtCQUFrQixDQUFDO0FBQ3RDO0FBQUMsSUFBQWUsUUFBQSxHQUFBQyxPQUFBLGNBRWNsQix5QkFBeUIiLCJpZ25vcmVMaXN0IjpbXX0=