UNPKG

kepler.gl

Version:

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

171 lines (170 loc) 34.9 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"] = exports.ModalTitle = exports.ModalFooter = exports.ModalDialog = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/localization/src"); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _reactModal = _interopRequireDefault(require("react-modal")); var _icons = require("./icons"); var _styledComponents2 = require("./styled-components"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/styles/src"); var _excluded = ["disabled"]; var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13; // 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 _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } 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 ModalContentWrapper = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n overflow-y: auto;\n max-width: 70vw;\n max-height: 85vh;\n padding: 24px 72px 40px;\n position: relative;\n top: 92px;\n left: 0;\n right: 0;\n margin: 0 auto;\n background-color: #ffffff;\n border-radius: 4px;\n transition: ", ";\n box-sizing: border-box;\n font-size: 12px;\n color: ", ";\n\n ", "\n\n ", "\n\n ", ";\n"])), function (props) { return props.theme.transition; }, function (props) { return props.theme.labelColorLT; }, _src2.media.portable(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 12px 36px 24px;\n max-width: 80vw;\n "]))), _src2.media.palm(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n max-width: 100vw;\n "]))), function (props) { return props.cssStyle || ''; }); var ModalContent = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n position: relative;\n z-index: ", ";\n"])), function (props) { return props.theme.modalContentZ; }); var ModalTitle = exports.ModalTitle = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n font-size: ", ";\n color: ", ";\n margin-bottom: 10px;\n position: relative;\n z-index: ", ";\n"])), function (props) { return props.theme.modalTitleFontSize; }, function (props) { return props.theme.modalTitleColor; }, function (props) { return props.theme.modalTitleZ; }); var StyledModalFooter = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n width: 100%;\n left: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n padding-top: 24px;\n ", ";\n\n ", ";\n z-index: ", ";\n"])), _src2.media.portable(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n padding-top: 24px;\n "]))), _src2.media.palm(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n padding-top: 16px;\n "]))), function (props) { return props.theme.modalFooterZ; }); var CloseButton = _styledComponents["default"].div(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n color: ", ";\n display: flex;\n justify-content: flex-end;\n z-index: ", ";\n position: absolute;\n top: 24px;\n right: 24px;\n\n &:hover {\n cursor: pointer;\n }\n"])), function (props) { return props.theme.titleColorLT; }, function (props) { return props.theme.modalButtonZ; }); var FooterActionWrapper = _styledComponents["default"].div(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: flex-end;\n"]))); var defaultCancelButton = { link: true, large: true, children: 'modal.button.defaultCancel' }; var defaultConfirmButton = { cta: true, large: true, width: '160px', children: 'modal.button.defaultConfirm' }; /** * this method removes the `disabled` property from button props when disabled is set to false * to avoid issue with the disabled tag * * @param props */ var processDisabledProperty = function processDisabledProperty(props) { if (!props.disabled) { // eslint-disable-next-line @typescript-eslint/no-unused-vars var disabled = props.disabled, newProps = (0, _objectWithoutProperties2["default"])(props, _excluded); return newProps; } return props; }; var ModalFooter = exports.ModalFooter = function ModalFooter(_ref) { var _cancelButtonProps$ch, _confirmButtonProps$c; var cancel = _ref.cancel, confirm = _ref.confirm, cancelButton = _ref.cancelButton, confirmButton = _ref.confirmButton; var cancelButtonProps = processDisabledProperty(_objectSpread(_objectSpread({}, defaultCancelButton), cancelButton)); var confirmButtonProps = processDisabledProperty(_objectSpread(_objectSpread({}, defaultConfirmButton), confirmButton)); return /*#__PURE__*/_react["default"].createElement(StyledModalFooter, { className: "modal--footer" }, /*#__PURE__*/_react["default"].createElement(FooterActionWrapper, null, /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, (0, _extends2["default"])({ className: "modal--footer--cancel-button" }, cancelButtonProps, { onClick: cancel }), /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: (_cancelButtonProps$ch = cancelButtonProps.children) !== null && _cancelButtonProps$ch !== void 0 ? _cancelButtonProps$ch : '' })), /*#__PURE__*/_react["default"].createElement(_styledComponents2.Button, (0, _extends2["default"])({ className: "modal--footer--confirm-button" }, confirmButtonProps, { onClick: confirm }), /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: (_confirmButtonProps$c = confirmButtonProps.children) !== null && _confirmButtonProps$c !== void 0 ? _confirmButtonProps$c : '' })))); }; var ModalDialog = exports.ModalDialog = /*#__PURE__*/function (_Component) { function ModalDialog() { (0, _classCallCheck2["default"])(this, ModalDialog); return _callSuper(this, ModalDialog, arguments); } (0, _inherits2["default"])(ModalDialog, _Component); return (0, _createClass2["default"])(ModalDialog, [{ key: "render", value: function render() { var props = this.props; return /*#__PURE__*/_react["default"].createElement(_reactModal["default"], (0, _extends2["default"])({ className: props.className }, props, { testId: props['data-testid'], ariaHideApp: false, style: { overlay: _objectSpread({ backgroundColor: props.theme && props.theme.modalOverlayBgd || 'rgba(0, 0, 0, 0.5)', zIndex: props.theme && props.theme.modalOverLayZ || 1000 }, props.style) } }), /*#__PURE__*/_react["default"].createElement(ModalContentWrapper, { className: "modal--wrapper", cssStyle: props.cssStyle }, props.close && /*#__PURE__*/_react["default"].createElement(CloseButton, { className: "modal--close", onClick: props.onCancel }, /*#__PURE__*/_react["default"].createElement(_icons.Delete, { height: "18px" })), /*#__PURE__*/_react["default"].createElement("div", null, props.title && /*#__PURE__*/_react["default"].createElement(ModalTitle, { className: "modal--title" }, /*#__PURE__*/_react["default"].createElement(_src.FormattedMessage, { id: props.title })), /*#__PURE__*/_react["default"].createElement(ModalContent, { className: "modal--body" }, props.children), props.footer && /*#__PURE__*/_react["default"].createElement(ModalFooter, { cancel: props.onCancel, confirm: props.onConfirm, cancelButton: props.cancelButton, confirmButton: props.confirmButton })))); } }]); }(_react.Component); (0, _defineProperty2["default"])(ModalDialog, "defaultProps", { footer: false, close: true, onConfirm: function onConfirm() { return; }, onCancel: function onCancel() { return; }, cancelButton: defaultCancelButton, confirmButton: defaultConfirmButton, cssStyle: [] }); var StyledModal = (0, _styledComponents["default"])(ModalDialog)(_templateObject11 || (_templateObject11 = (0, _taggedTemplateLiteral2["default"])(["\n top: 0;\n left: 0;\n transition: ", ";\n padding-left: 40px;\n padding-right: 40px;\n outline: none;\n\n ", ";\n\n ", ";\n\n &:focus {\n outline: 0;\n }\n"])), function (props) { return props.theme.transition; }, _src2.media.portable(_templateObject12 || (_templateObject12 = (0, _taggedTemplateLiteral2["default"])(["\n padding-left: 24px;\n padding-right: 24px;\n "]))), _src2.media.palm(_templateObject13 || (_templateObject13 = (0, _taggedTemplateLiteral2["default"])(["\n padding-left: 0;\n padding-right: 0;\n "])))); var _default = exports["default"] = StyledModal; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3JjIiwiX3N0eWxlZENvbXBvbmVudHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0TW9kYWwiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfc3JjMiIsIl9leGNsdWRlZCIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MTAiLCJfdGVtcGxhdGVPYmplY3QxMSIsIl90ZW1wbGF0ZU9iamVjdDEyIiwiX3RlbXBsYXRlT2JqZWN0MTMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY2FsbFN1cGVyIiwibyIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiYXBwbHkiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIk1vZGFsQ29udGVudFdyYXBwZXIiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJ0cmFuc2l0aW9uIiwibGFiZWxDb2xvckxUIiwibWVkaWEiLCJwb3J0YWJsZSIsInBhbG0iLCJjc3NTdHlsZSIsIk1vZGFsQ29udGVudCIsIm1vZGFsQ29udGVudFoiLCJNb2RhbFRpdGxlIiwiZXhwb3J0cyIsIm1vZGFsVGl0bGVGb250U2l6ZSIsIm1vZGFsVGl0bGVDb2xvciIsIm1vZGFsVGl0bGVaIiwiU3R5bGVkTW9kYWxGb290ZXIiLCJtb2RhbEZvb3RlcloiLCJDbG9zZUJ1dHRvbiIsInRpdGxlQ29sb3JMVCIsIm1vZGFsQnV0dG9uWiIsIkZvb3RlckFjdGlvbldyYXBwZXIiLCJkZWZhdWx0Q2FuY2VsQnV0dG9uIiwibGluayIsImxhcmdlIiwiY2hpbGRyZW4iLCJkZWZhdWx0Q29uZmlybUJ1dHRvbiIsImN0YSIsIndpZHRoIiwicHJvY2Vzc0Rpc2FibGVkUHJvcGVydHkiLCJkaXNhYmxlZCIsIm5ld1Byb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsIk1vZGFsRm9vdGVyIiwiX3JlZiIsIl9jYW5jZWxCdXR0b25Qcm9wcyRjaCIsIl9jb25maXJtQnV0dG9uUHJvcHMkYyIsImNhbmNlbCIsImNvbmZpcm0iLCJjYW5jZWxCdXR0b24iLCJjb25maXJtQnV0dG9uIiwiY2FuY2VsQnV0dG9uUHJvcHMiLCJjb25maXJtQnV0dG9uUHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiQnV0dG9uIiwiX2V4dGVuZHMyIiwib25DbGljayIsIkZvcm1hdHRlZE1lc3NhZ2UiLCJpZCIsIk1vZGFsRGlhbG9nIiwiX0NvbXBvbmVudCIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwicmVuZGVyIiwidGVzdElkIiwiYXJpYUhpZGVBcHAiLCJzdHlsZSIsIm92ZXJsYXkiLCJiYWNrZ3JvdW5kQ29sb3IiLCJtb2RhbE92ZXJsYXlCZ2QiLCJ6SW5kZXgiLCJtb2RhbE92ZXJMYXlaIiwiY2xvc2UiLCJvbkNhbmNlbCIsIkRlbGV0ZSIsImhlaWdodCIsInRpdGxlIiwiZm9vdGVyIiwib25Db25maXJtIiwiQ29tcG9uZW50IiwiU3R5bGVkTW9kYWwiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9jb21tb24vbW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgUmVhY3ROb2RlLCBQcm9wc1dpdGhDaGlsZHJlbn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtGb3JtYXR0ZWRNZXNzYWdlfSBmcm9tICdAa2VwbGVyLmdsL2xvY2FsaXphdGlvbic7XG5cbmltcG9ydCBzdHlsZWQsIHtjc3N9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQge0RlbGV0ZX0gZnJvbSAnLi9pY29ucyc7XG5pbXBvcnQge0J1dHRvbn0gZnJvbSAnLi9zdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge21lZGlhfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5cbnR5cGUgQ3NzU3R5bGVUeXBlID0gUmV0dXJuVHlwZTx0eXBlb2YgY3NzPjtcblxuaW50ZXJmYWNlIE1vZGFsQ29udGVudFdyYXBwZXJQcm9wcyB7XG4gIGNzc1N0eWxlPzogQ3NzU3R5bGVUeXBlIHwgc3RyaW5nO1xufVxuXG5jb25zdCBNb2RhbENvbnRlbnRXcmFwcGVyID0gc3R5bGVkLmRpdjxNb2RhbENvbnRlbnRXcmFwcGVyUHJvcHM+YFxuICBvdmVyZmxvdy15OiBhdXRvO1xuICBtYXgtd2lkdGg6IDcwdnc7XG4gIG1heC1oZWlnaHQ6IDg1dmg7XG4gIHBhZGRpbmc6IDI0cHggNzJweCA0MHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogOTJweDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHRyYW5zaXRpb246ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudHJhbnNpdGlvbn07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubGFiZWxDb2xvckxUfTtcblxuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmc6IDEycHggMzZweCAyNHB4O1xuICAgIG1heC13aWR0aDogODB2dztcbiAgYH1cblxuICAke21lZGlhLnBhbG1gXG4gICAgbWF4LXdpZHRoOiAxMDB2dztcbiAgYH1cblxuICAke3Byb3BzID0+IHByb3BzLmNzc1N0eWxlIHx8ICcnfTtcbmA7XG5cbmNvbnN0IE1vZGFsQ29udGVudCA9IHN0eWxlZC5kaXZgXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5tb2RhbENvbnRlbnRafTtcbmA7XG5cbnR5cGUgTW9kYWxUaXRsZVByb3BzID0gUHJvcHNXaXRoQ2hpbGRyZW48e1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn0+O1xuXG5leHBvcnQgY29uc3QgTW9kYWxUaXRsZSA9IHN0eWxlZC5kaXY8TW9kYWxUaXRsZVByb3BzPmBcbiAgZm9udC1zaXplOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsVGl0bGVGb250U2l6ZX07XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsVGl0bGVDb2xvcn07XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5tb2RhbFRpdGxlWn07XG5gO1xuXG5jb25zdCBTdHlsZWRNb2RhbEZvb3RlciA9IHN0eWxlZC5kaXZgXG4gIHdpZHRoOiAxMDAlO1xuICBsZWZ0OiAwO1xuICBib3R0b206IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHBhZGRpbmctdG9wOiAyNHB4O1xuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIHBhZGRpbmctdG9wOiAyNHB4O1xuICBgfTtcblxuICAke21lZGlhLnBhbG1gXG4gICAgcGFkZGluZy10b3A6IDE2cHg7XG4gIGB9O1xuICB6LWluZGV4OiAke3Byb3BzID0+IHByb3BzLnRoZW1lLm1vZGFsRm9vdGVyWn07XG5gO1xuXG5jb25zdCBDbG9zZUJ1dHRvbiA9IHN0eWxlZC5kaXZgXG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRpdGxlQ29sb3JMVH07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHotaW5kZXg6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUubW9kYWxCdXR0b25afTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDI0cHg7XG4gIHJpZ2h0OiAyNHB4O1xuXG4gICY6aG92ZXIge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuYDtcblxuY29uc3QgRm9vdGVyQWN0aW9uV3JhcHBlciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG5gO1xuXG5jb25zdCBkZWZhdWx0Q2FuY2VsQnV0dG9uID0ge1xuICBsaW5rOiB0cnVlLFxuICBsYXJnZTogdHJ1ZSxcbiAgY2hpbGRyZW46ICdtb2RhbC5idXR0b24uZGVmYXVsdENhbmNlbCdcbn07XG5cbmNvbnN0IGRlZmF1bHRDb25maXJtQnV0dG9uID0ge1xuICBjdGE6IHRydWUsXG4gIGxhcmdlOiB0cnVlLFxuICB3aWR0aDogJzE2MHB4JyxcbiAgY2hpbGRyZW46ICdtb2RhbC5idXR0b24uZGVmYXVsdENvbmZpcm0nXG59O1xuXG50eXBlIE1vZGFsQnV0dG9uUHJvcHMgPSB7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgbGFyZ2U/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5lZ2F0aXZlPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBzdHJpbmc7XG59O1xuXG50eXBlIE1vZGFsRm9vdGVyUHJvcHMgPSB7XG4gIGNhbmNlbDogKCkgPT4gdm9pZDtcbiAgY29uZmlybTogKGRhdGE/OiBhbnkpID0+IHZvaWQ7XG4gIGNhbmNlbEJ1dHRvbj86IE1vZGFsQnV0dG9uUHJvcHM7XG4gIGNvbmZpcm1CdXR0b24/OiBNb2RhbEJ1dHRvblByb3BzO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIHByb3BlcnR5IGZyb20gYnV0dG9uIHByb3BzIHdoZW4gZGlzYWJsZWQgaXMgc2V0IHRvIGZhbHNlXG4gKiB0byBhdm9pZCBpc3N1ZSB3aXRoIHRoZSBkaXNhYmxlZCB0YWdcbiAqXG4gKiBAcGFyYW0gcHJvcHNcbiAqL1xuY29uc3QgcHJvY2Vzc0Rpc2FibGVkUHJvcGVydHkgPSAocHJvcHM6IE1vZGFsQnV0dG9uUHJvcHMpOiBNb2RhbEJ1dHRvblByb3BzID0+IHtcbiAgaWYgKCFwcm9wcy5kaXNhYmxlZCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBjb25zdCB7ZGlzYWJsZWQsIC4uLm5ld1Byb3BzfSA9IHByb3BzO1xuICAgIHJldHVybiBuZXdQcm9wcztcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59O1xuXG5leHBvcnQgY29uc3QgTW9kYWxGb290ZXI6IFJlYWN0LkZDPE1vZGFsRm9vdGVyUHJvcHM+ID0gKHtcbiAgY2FuY2VsLFxuICBjb25maXJtLFxuICBjYW5jZWxCdXR0b24sXG4gIGNvbmZpcm1CdXR0b25cbn0pID0+IHtcbiAgY29uc3QgY2FuY2VsQnV0dG9uUHJvcHMgPSBwcm9jZXNzRGlzYWJsZWRQcm9wZXJ0eSh7XG4gICAgLi4uZGVmYXVsdENhbmNlbEJ1dHRvbixcbiAgICAuLi5jYW5jZWxCdXR0b25cbiAgfSk7XG4gIGNvbnN0IGNvbmZpcm1CdXR0b25Qcm9wcyA9IHByb2Nlc3NEaXNhYmxlZFByb3BlcnR5KHsuLi5kZWZhdWx0Q29uZmlybUJ1dHRvbiwgLi4uY29uZmlybUJ1dHRvbn0pO1xuICByZXR1cm4gKFxuICAgIDxTdHlsZWRNb2RhbEZvb3RlciBjbGFzc05hbWU9XCJtb2RhbC0tZm9vdGVyXCI+XG4gICAgICA8Rm9vdGVyQWN0aW9uV3JhcHBlcj5cbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJtb2RhbC0tZm9vdGVyLS1jYW5jZWwtYnV0dG9uXCIgey4uLmNhbmNlbEJ1dHRvblByb3BzfSBvbkNsaWNrPXtjYW5jZWx9PlxuICAgICAgICAgIDxGb3JtYXR0ZWRNZXNzYWdlIGlkPXtjYW5jZWxCdXR0b25Qcm9wcy5jaGlsZHJlbiA/PyAnJ30gLz5cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwibW9kYWwtLWZvb3Rlci0tY29uZmlybS1idXR0b25cIiB7Li4uY29uZmlybUJ1dHRvblByb3BzfSBvbkNsaWNrPXtjb25maXJtfT5cbiAgICAgICAgICA8Rm9ybWF0dGVkTWVzc2FnZSBpZD17Y29uZmlybUJ1dHRvblByb3BzLmNoaWxkcmVuID8/ICcnfSAvPlxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvRm9vdGVyQWN0aW9uV3JhcHBlcj5cbiAgICA8L1N0eWxlZE1vZGFsRm9vdGVyPlxuICApO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBNb2RhbERpYWxvZ093blByb3BzIHtcbiAgZm9vdGVyOiBib29sZWFuO1xuICBjbG9zZTogYm9vbGVhbjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICB0aXRsZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNvbmZpcm06ICguLi5hcmdzOiBhbnkpID0+IHZvaWQ7XG4gIG9uQ2FuY2VsOiAoLi4uYXJnczogYW55KSA9PiB2b2lkO1xuICBjb25maXJtQnV0dG9uPzogTW9kYWxCdXR0b25Qcm9wcztcbiAgY29uZmlybUJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBjYW5jZWxCdXR0b24/OiBNb2RhbEJ1dHRvblByb3BzO1xuICBjYW5jZWxCdXR0b25MYWJlbD86IHN0cmluZztcbiAgY3NzU3R5bGU/OiBDc3NTdHlsZVR5cGUgfCBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgdGhlbWU6IGFueTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGFsRGlhbG9nUHJvcHMgPSBNb2RhbERpYWxvZ093blByb3BzICZcbiAgT21pdDxSZWFjdE1vZGFsLlByb3BzLCAnc3R5bGUnIHwgJ2FyaWFIaWRlQXBwJyB8ICdjbGFzc05hbWUnPjtcblxuZXhwb3J0IGNsYXNzIE1vZGFsRGlhbG9nIGV4dGVuZHMgQ29tcG9uZW50PE1vZGFsRGlhbG9nUHJvcHM+IHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBmb290ZXI6IGZhbHNlLFxuICAgIGNsb3NlOiB0cnVlLFxuICAgIG9uQ29uZmlybTogKCkgPT4ge1xuICAgICAgcmV0dXJuO1xuICAgIH0sXG4gICAgb25DYW5jZWw6ICgpID0+IHtcbiAgICAgIHJldHVybjtcbiAgICB9LFxuICAgIGNhbmNlbEJ1dHRvbjogZGVmYXVsdENhbmNlbEJ1dHRvbixcbiAgICBjb25maXJtQnV0dG9uOiBkZWZhdWx0Q29uZmlybUJ1dHRvbixcbiAgICBjc3NTdHlsZTogW11cbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge3Byb3BzfSA9IHRoaXM7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RhbFxuICAgICAgICBjbGFzc05hbWU9e3Byb3BzLmNsYXNzTmFtZX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgICB0ZXN0SWQ9e3Byb3BzWydkYXRhLXRlc3RpZCddfVxuICAgICAgICBhcmlhSGlkZUFwcD17ZmFsc2V9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgb3ZlcmxheToge1xuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAocHJvcHMudGhlbWUgJiYgcHJvcHMudGhlbWUubW9kYWxPdmVybGF5QmdkKSB8fCAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICAgICAgICAgIHpJbmRleDogKHByb3BzLnRoZW1lICYmIHByb3BzLnRoZW1lLm1vZGFsT3ZlckxheVopIHx8IDEwMDAsXG4gICAgICAgICAgICAvLyBpbiBjYXNlIHdlIHdhbnQgdG8gb3ZlcnJpZGUgdGhlIG1vZGFsIGRpYWxvZyBzdHlsZVxuICAgICAgICAgICAgLi4ucHJvcHMuc3R5bGVcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxNb2RhbENvbnRlbnRXcmFwcGVyIGNsYXNzTmFtZT1cIm1vZGFsLS13cmFwcGVyXCIgY3NzU3R5bGU9e3Byb3BzLmNzc1N0eWxlfT5cbiAgICAgICAgICB7cHJvcHMuY2xvc2UgJiYgKFxuICAgICAgICAgICAgPENsb3NlQnV0dG9uIGNsYXNzTmFtZT1cIm1vZGFsLS1jbG9zZVwiIG9uQ2xpY2s9e3Byb3BzLm9uQ2FuY2VsfT5cbiAgICAgICAgICAgICAgPERlbGV0ZSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgIDwvQ2xvc2VCdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAge3Byb3BzLnRpdGxlICYmIChcbiAgICAgICAgICAgICAgPE1vZGFsVGl0bGUgY2xhc3NOYW1lPVwibW9kYWwtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPEZvcm1hdHRlZE1lc3NhZ2UgaWQ9e3Byb3BzLnRpdGxlfSAvPlxuICAgICAgICAgICAgICA8L01vZGFsVGl0bGU+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPE1vZGFsQ29udGVudCBjbGFzc05hbWU9XCJtb2RhbC0tYm9keVwiPntwcm9wcy5jaGlsZHJlbn08L01vZGFsQ29udGVudD5cbiAgICAgICAgICAgIHtwcm9wcy5mb290ZXIgJiYgKFxuICAgICAgICAgICAgICA8TW9kYWxGb290ZXJcbiAgICAgICAgICAgICAgICBjYW5jZWw9e3Byb3BzLm9uQ2FuY2VsfVxuICAgICAgICAgICAgICAgIGNvbmZpcm09e3Byb3BzLm9uQ29uZmlybX1cbiAgICAgICAgICAgICAgICBjYW5jZWxCdXR0b249e3Byb3BzLmNhbmNlbEJ1dHRvbn1cbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uPXtwcm9wcy5jb25maXJtQnV0dG9ufVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9Nb2RhbENvbnRlbnRXcmFwcGVyPlxuICAgICAgPC9Nb2RhbD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IFN0eWxlZE1vZGFsID0gc3R5bGVkKE1vZGFsRGlhbG9nKWBcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB0cmFuc2l0aW9uOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLnRyYW5zaXRpb259O1xuICBwYWRkaW5nLWxlZnQ6IDQwcHg7XG4gIHBhZGRpbmctcmlnaHQ6IDQwcHg7XG4gIG91dGxpbmU6IG5vbmU7XG5cbiAgJHttZWRpYS5wb3J0YWJsZWBcbiAgICBwYWRkaW5nLWxlZnQ6IDI0cHg7XG4gICAgcGFkZGluZy1yaWdodDogMjRweDtcbiAgYH07XG5cbiAgJHttZWRpYS5wYWxtYFxuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICBgfTtcblxuICAmOmZvY3VzIHtcbiAgICBvdXRsaW5lOiAwO1xuICB9XG5gO1xuXG5leHBvcnQgZGVmYXVsdCBTdHlsZWRNb2RhbDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxJQUFBLEdBQUFELE9BQUE7QUFFQSxJQUFBRSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBRCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUssTUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sa0JBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLEtBQUEsR0FBQVAsT0FBQTtBQUF3QyxJQUFBUSxTQUFBO0FBQUEsSUFBQUMsZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxpQkFBQSxFQVZ4QztBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUF4Qix3QkFBQXdCLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFH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