UNPKG

kepler.gl

Version:

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

151 lines (145 loc) 23.9 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.ERROR_MSG = void 0; exports.flattenDeps = flattenDeps; exports.injector = injector; exports.provideRecipesToInjector = provideRecipesToInjector; exports.typeCheckRecipe = typeCheckRecipe; exports.withState = withState; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _react = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _lib = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react-redux/lib"); var _redux = require("redux"); var _window = require("global/window"); var _context = _interopRequireDefault(require("./context")); var _excluded = ["state"]; // SPDX-License-Identifier: MIT // Copyright contributors to the kepler.gl project 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 MissingComp = function MissingComp() { return /*#__PURE__*/_react["default"].createElement("div", null); }; var ERROR_MSG = exports.ERROR_MSG = { wrongRecipeType: "injectComponents takes an array of factories replacement pairs as input, " + "each pair be a array as [originalFactory, replacement].", noDep: function noDep(fac, parent) { return "".concat(fac.name, " is required as a dependency of ").concat(parent.name, ", ") + "but is not provided to injectComponents. It will not be rendered."; }, notFunc: 'factory and its replacement should be a function' }; function injector() { var map = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : new Map(); var cache = new Map(); // map<factory, factory -> ?> var _get = function get(fac, parent) { var factory = map.get(fac); // factory is not injected if (!factory) { _window.console.error(ERROR_MSG.noDep(fac, parent)); return MissingComp; } // check if custom factory deps is declared var instances = cache.get(factory) || factory.apply(void 0, (0, _toConsumableArray2["default"])(factory.deps ? factory.deps.map(function (dep) { return _get(dep, factory); }) : [])); cache.set(fac, instances); return instances; }; // if you have two functions that happen to have the exactly same text // it will be override: 2018-02-05 return { provide: function provide(factory, replacement) { if (!typeCheckRecipe([factory, replacement])) { return injector(map); } return injector(new Map(map).set(factory, replacement)); }, get: _get }; } // entryPoint function flattenDeps(allDeps, factory) { var addToDeps = allDeps.includes(factory) ? allDeps : allDeps.concat([factory]); return Array.isArray(factory.deps) && factory.deps.length ? factory.deps.reduce(function (accu, dep) { return flattenDeps(accu, dep); }, addToDeps) : addToDeps; } function provideRecipesToInjector(recipes, appInjector) { var provided = new Map(); var injector = recipes.reduce(function (inj, recipe) { var _inj; if (!typeCheckRecipe(recipe)) { return inj; } // collect dependencies of custom factories, if there is any. // Add them to the appInjector var customDependencies = flattenDeps([], recipe[1]); inj = customDependencies.reduce(function (ij, factory) { if (provided.get(factory)) { _window.console.warn("".concat(factory.name, " already injected from ").concat(provided.get(factory).name, ", injecting ").concat(recipe[0].name, " after ").concat(provided.get(factory).name, " will override it")); } return ij.provide(factory, factory); }, inj); provided.set(recipe[0], recipe[1]); return (_inj = inj).provide.apply(_inj, (0, _toConsumableArray2["default"])(recipe)); }, appInjector); // make sure all component instance are cached provided.forEach(function (v) { injector.get(v); }); return injector; } function typeCheckRecipe(recipe) { if (!Array.isArray(recipe) || recipe.length < 2) { _window.console.error('Error injecting [factory, replacement]', recipe); _window.console.error(ERROR_MSG.wrongRecipeType); return false; } var _recipe = (0, _slicedToArray2["default"])(recipe, 2), factory = _recipe[0], replacement = _recipe[1]; if (typeof factory !== 'function') { _window.console.error('Error injecting factory: ', factory); _window.console.error(ERROR_MSG.notFunc); return false; } else if (typeof replacement !== 'function') { _window.console.error('Error injecting replacement for: ', factory); _window.console.error(ERROR_MSG.notFunc); return false; } return true; } var identity = function identity(state) { return state; }; // Helper to add reducer state to custom component function withState() { var lenses = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var mapStateToProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : identity; var actions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; return function (Component) { var WrappedComponent = function WrappedComponent(_ref) { var state = _ref.state, props = (0, _objectWithoutProperties2["default"])(_ref, _excluded); return /*#__PURE__*/_react["default"].createElement(_context["default"].Consumer, null, function (context) { return /*#__PURE__*/_react["default"].createElement(Component, lenses.reduce(function (totalState, lens) { return _objectSpread(_objectSpread({}, totalState), lens(context.selector(state))); }, props)); }); }; return (0, _lib.connect)(function (state) { return _objectSpread(_objectSpread({}, mapStateToProps(state)), {}, { state: state }); }, function (dispatch) { return Object.keys(actions).reduce(function (accu, key) { return _objectSpread(_objectSpread({}, accu), {}, (0, _defineProperty2["default"])({}, key, (0, _redux.bindActionCreators)(actions[key], dispatch))); }, {}); })(WrappedComponent); }; } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9saWIiLCJfcmVkdXgiLCJfd2luZG93IiwiX2NvbnRleHQiLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIk1pc3NpbmdDb21wIiwiY3JlYXRlRWxlbWVudCIsIkVSUk9SX01TRyIsImV4cG9ydHMiLCJ3cm9uZ1JlY2lwZVR5cGUiLCJub0RlcCIsImZhYyIsInBhcmVudCIsImNvbmNhdCIsIm5hbWUiLCJub3RGdW5jIiwiaW5qZWN0b3IiLCJtYXAiLCJ1bmRlZmluZWQiLCJNYXAiLCJjYWNoZSIsImdldCIsImZhY3RvcnkiLCJDb25zb2xlIiwiZXJyb3IiLCJpbnN0YW5jZXMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiZGVwcyIsImRlcCIsInNldCIsInByb3ZpZGUiLCJyZXBsYWNlbWVudCIsInR5cGVDaGVja1JlY2lwZSIsImZsYXR0ZW5EZXBzIiwiYWxsRGVwcyIsImFkZFRvRGVwcyIsImluY2x1ZGVzIiwiQXJyYXkiLCJpc0FycmF5IiwicmVkdWNlIiwiYWNjdSIsInByb3ZpZGVSZWNpcGVzVG9JbmplY3RvciIsInJlY2lwZXMiLCJhcHBJbmplY3RvciIsInByb3ZpZGVkIiwiaW5qIiwicmVjaXBlIiwiX2luaiIsImN1c3RvbURlcGVuZGVuY2llcyIsImlqIiwid2FybiIsInYiLCJfcmVjaXBlIiwiX3NsaWNlZFRvQXJyYXkyIiwiaWRlbnRpdHkiLCJzdGF0ZSIsIndpdGhTdGF0ZSIsImxlbnNlcyIsIm1hcFN0YXRlVG9Qcm9wcyIsImFjdGlvbnMiLCJDb21wb25lbnQiLCJXcmFwcGVkQ29tcG9uZW50IiwiX3JlZiIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzMiIsIkNvbnN1bWVyIiwiY29udGV4dCIsInRvdGFsU3RhdGUiLCJsZW5zIiwic2VsZWN0b3IiLCJjb25uZWN0IiwiZGlzcGF0Y2giLCJrZXkiLCJiaW5kQWN0aW9uQ3JlYXRvcnMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zcmMvaW5qZWN0b3IudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7YmluZEFjdGlvbkNyZWF0b3JzfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQge1xuICBNYXBTdGF0ZVRvUHJvcHNQYXJhbSxcbiAgTWFwRGlzcGF0Y2hUb1Byb3BzUGFyYW0sXG4gIEluZmVyYWJsZUNvbXBvbmVudEVuaGFuY2VyV2l0aFByb3BzXG59IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCB7Y29uc29sZSBhcyBDb25zb2xlfSBmcm9tICdnbG9iYWwvd2luZG93JztcbmltcG9ydCBLZXBsZXJHbENvbnRleHQgZnJvbSAnLi9jb250ZXh0JztcblxuZXhwb3J0IHR5cGUgRmFjdG9yeUVsZW1lbnQgPSAoLi4uYXJncykgPT4gUmVhY3QuQ29tcG9uZW50VHlwZTtcbmV4cG9ydCB0eXBlIEZhY3RvcnkgPSBGYWN0b3J5RWxlbWVudCAmIHtcbiAgZGVwczogRmFjdG9yeUVsZW1lbnRbXTtcbn07XG5cbmV4cG9ydCB0eXBlIEluamVjdG9yVHlwZSA9IHtcbiAgcHJvdmlkZTogKGZhY3Rvcnk6IGFueSwgcmVwbGFjZW1lbnQ6IGFueSkgPT4gSW5qZWN0b3JUeXBlO1xuICBnZXQ6IChmYWM6IGFueSwgcGFyZW50PzogYW55KSA9PiBhbnk7XG59O1xuXG5jb25zdCBNaXNzaW5nQ29tcCA9ICgpID0+IDxkaXYgLz47XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9NU0cgPSB7XG4gIHdyb25nUmVjaXBlVHlwZTpcbiAgICBgaW5qZWN0Q29tcG9uZW50cyB0YWtlcyBhbiBhcnJheSBvZiBmYWN0b3JpZXMgcmVwbGFjZW1lbnQgcGFpcnMgYXMgaW5wdXQsIGAgK1xuICAgIGBlYWNoIHBhaXIgYmUgYSBhcnJheSBhcyBbb3JpZ2luYWxGYWN0b3J5LCByZXBsYWNlbWVudF0uYCxcblxuICBub0RlcDogKGZhYywgcGFyZW50KSA9PlxuICAgIGAke2ZhYy5uYW1lfSBpcyByZXF1aXJlZCBhcyBhIGRlcGVuZGVuY3kgb2YgJHtwYXJlbnQubmFtZX0sIGAgK1xuICAgIGBidXQgaXMgbm90IHByb3ZpZGVkIHRvIGluamVjdENvbXBvbmVudHMuIEl0IHdpbGwgbm90IGJlIHJlbmRlcmVkLmAsXG5cbiAgbm90RnVuYzogJ2ZhY3RvcnkgYW5kIGl0cyByZXBsYWNlbWVudCBzaG91bGQgYmUgYSBmdW5jdGlvbidcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RvcihtYXAgPSBuZXcgTWFwKCkpOiBJbmplY3RvclR5cGUge1xuICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTsgLy8gbWFwPGZhY3RvcnksIGZhY3RvcnkgLT4gPz5cbiAgY29uc3QgZ2V0ID0gKGZhYywgcGFyZW50KSA9PiB7XG4gICAgY29uc3QgZmFjdG9yeSA9IG1hcC5nZXQoZmFjKTtcbiAgICAvLyBmYWN0b3J5IGlzIG5vdCBpbmplY3RlZFxuICAgIGlmICghZmFjdG9yeSkge1xuICAgICAgQ29uc29sZS5lcnJvcihFUlJPUl9NU0cubm9EZXAoZmFjLCBwYXJlbnQpKTtcbiAgICAgIHJldHVybiBNaXNzaW5nQ29tcDtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiBjdXN0b20gZmFjdG9yeSBkZXBzIGlzIGRlY2xhcmVkXG4gICAgY29uc3QgaW5zdGFuY2VzID1cbiAgICAgIGNhY2hlLmdldChmYWN0b3J5KSB8fFxuICAgICAgZmFjdG9yeSguLi4oZmFjdG9yeS5kZXBzID8gZmFjdG9yeS5kZXBzLm1hcChkZXAgPT4gZ2V0KGRlcCwgZmFjdG9yeSkpIDogW10pKTtcblxuICAgIGNhY2hlLnNldChmYWMsIGluc3RhbmNlcyk7XG4gICAgcmV0dXJuIGluc3RhbmNlcztcbiAgfTtcblxuICAvLyBpZiB5b3UgaGF2ZSB0d28gZnVuY3Rpb25zIHRoYXQgaGFwcGVuIHRvIGhhdmUgdGhlIGV4YWN0bHkgc2FtZSB0ZXh0XG4gIC8vIGl0IHdpbGwgYmUgb3ZlcnJpZGU6IDIwMTgtMDItMDVcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiAoZmFjdG9yeSwgcmVwbGFjZW1lbnQpID0+IHtcbiAgICAgIGlmICghdHlwZUNoZWNrUmVjaXBlKFtmYWN0b3J5LCByZXBsYWNlbWVudF0pKSB7XG4gICAgICAgIHJldHVybiBpbmplY3RvcihtYXApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluamVjdG9yKG5ldyBNYXAobWFwKS5zZXQoZmFjdG9yeSwgcmVwbGFjZW1lbnQpKTtcbiAgICB9LFxuICAgIGdldFxuICB9O1xufVxuXG4vLyBlbnRyeVBvaW50XG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkRlcHMoYWxsRGVwczogRmFjdG9yeVtdLCBmYWN0b3J5OiBhbnkpOiBGYWN0b3J5W10ge1xuICBjb25zdCBhZGRUb0RlcHMgPSBhbGxEZXBzLmluY2x1ZGVzKGZhY3RvcnkpID8gYWxsRGVwcyA6IGFsbERlcHMuY29uY2F0KFtmYWN0b3J5XSk7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGZhY3RvcnkuZGVwcykgJiYgZmFjdG9yeS5kZXBzLmxlbmd0aFxuICAgID8gZmFjdG9yeS5kZXBzLnJlZHVjZSgoYWNjdSwgZGVwKSA9PiBmbGF0dGVuRGVwcyhhY2N1LCBkZXApLCBhZGRUb0RlcHMpXG4gICAgOiBhZGRUb0RlcHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlUmVjaXBlc1RvSW5qZWN0b3IocmVjaXBlczogW0ZhY3RvcnksIEZhY3RvcnldW10sIGFwcEluamVjdG9yOiBJbmplY3RvclR5cGUpIHtcbiAgY29uc3QgcHJvdmlkZWQgPSBuZXcgTWFwKCk7XG5cbiAgY29uc3QgaW5qZWN0b3IgPSByZWNpcGVzLnJlZHVjZSgoaW5qLCByZWNpcGUpID0+IHtcbiAgICBpZiAoIXR5cGVDaGVja1JlY2lwZShyZWNpcGUpKSB7XG4gICAgICByZXR1cm4gaW5qO1xuICAgIH1cblxuICAgIC8vIGNvbGxlY3QgZGVwZW5kZW5jaWVzIG9mIGN1c3RvbSBmYWN0b3JpZXMsIGlmIHRoZXJlIGlzIGFueS5cbiAgICAvLyBBZGQgdGhlbSB0byB0aGUgYXBwSW5qZWN0b3JcbiAgICBjb25zdCBjdXN0b21EZXBlbmRlbmNpZXMgPSBmbGF0dGVuRGVwcyhbXSwgcmVjaXBlWzFdKTtcbiAgICBpbmogPSBjdXN0b21EZXBlbmRlbmNpZXMucmVkdWNlKChpaiwgZmFjdG9yeSkgPT4ge1xuICAgICAgaWYgKHByb3ZpZGVkLmdldChmYWN0b3J5KSkge1xuICAgICAgICBDb25zb2xlLndhcm4oXG4gICAgICAgICAgYCR7ZmFjdG9yeS5uYW1lfSBhbHJlYWR5IGluamVjdGVkIGZyb20gJHtwcm92aWRlZC5nZXQoZmFjdG9yeSkubmFtZX0sIGluamVjdGluZyAke1xuICAgICAgICAgICAgcmVjaXBlWzBdLm5hbWVcbiAgICAgICAgICB9IGFmdGVyICR7cHJvdmlkZWQuZ2V0KGZhY3RvcnkpLm5hbWV9IHdpbGwgb3ZlcnJpZGUgaXRgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWoucHJvdmlkZShmYWN0b3J5LCBmYWN0b3J5KTtcbiAgICB9LCBpbmopO1xuXG4gICAgcHJvdmlkZWQuc2V0KHJlY2lwZVswXSwgcmVjaXBlWzFdKTtcbiAgICByZXR1cm4gaW5qLnByb3ZpZGUoLi4ucmVjaXBlKTtcbiAgfSwgYXBwSW5qZWN0b3IpO1xuXG4gIC8vIG1ha2Ugc3VyZSBhbGwgY29tcG9uZW50IGluc3RhbmNlIGFyZSBjYWNoZWRcbiAgcHJvdmlkZWQuZm9yRWFjaCh2ID0+IHtcbiAgICBpbmplY3Rvci5nZXQodik7XG4gIH0pO1xuXG4gIHJldHVybiBpbmplY3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVDaGVja1JlY2lwZShyZWNpcGUpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlY2lwZSkgfHwgcmVjaXBlLmxlbmd0aCA8IDIpIHtcbiAgICBDb25zb2xlLmVycm9yKCdFcnJvciBpbmplY3RpbmcgW2ZhY3RvcnksIHJlcGxhY2VtZW50XScsIHJlY2lwZSk7XG4gICAgQ29uc29sZS5lcnJvcihFUlJPUl9NU0cud3JvbmdSZWNpcGVUeXBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBbZmFjdG9yeSwgcmVwbGFjZW1lbnRdID0gcmVjaXBlO1xuICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICBDb25zb2xlLmVycm9yKCdFcnJvciBpbmplY3RpbmcgZmFjdG9yeTogJywgZmFjdG9yeSk7XG4gICAgQ29uc29sZS5lcnJvcihFUlJPUl9NU0cubm90RnVuYyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXBsYWNlbWVudCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIENvbnNvbGUuZXJyb3IoJ0Vycm9yIGluamVjdGluZyByZXBsYWNlbWVudCBmb3I6ICcsIGZhY3RvcnkpO1xuICAgIENvbnNvbGUuZXJyb3IoRVJST1JfTVNHLm5vdEZ1bmMpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTdGF0ZTxSb290U3RhdGU+IHtcbiAgPFRTdGF0ZVByb3BzID0gb2JqZWN0LCBURGlzcGF0Y2hQcm9wcyA9IG9iamVjdCwgVE93blByb3BzID0gb2JqZWN0LCBTdGF0ZSA9IFJvb3RTdGF0ZT4oXG4gICAgbGVuc2VzOiBhbnlbXSxcbiAgICBtYXBTdGF0ZVRvUHJvcHM6IE1hcFN0YXRlVG9Qcm9wc1BhcmFtPFRTdGF0ZVByb3BzLCBUT3duUHJvcHMsIFN0YXRlPixcbiAgICBtYXBEaXNwYXRjaFRvUHJvcHM/OiBNYXBEaXNwYXRjaFRvUHJvcHNQYXJhbTxURGlzcGF0Y2hQcm9wcywgVE93blByb3BzPlxuICApOiBJbmZlcmFibGVDb21wb25lbnRFbmhhbmNlcldpdGhQcm9wczxUU3RhdGVQcm9wcyAmIFREaXNwYXRjaFByb3BzLCBUT3duUHJvcHM+O1xufVxuXG5jb25zdCBpZGVudGl0eSA9IHN0YXRlID0+IHN0YXRlO1xuLy8gSGVscGVyIHRvIGFkZCByZWR1Y2VyIHN0YXRlIHRvIGN1c3RvbSBjb21wb25lbnRcbmV4cG9ydCBmdW5jdGlvbiB3aXRoU3RhdGUobGVuc2VzOiBhbnlbXSA9IFtdLCBtYXBTdGF0ZVRvUHJvcHMgPSBpZGVudGl0eSwgYWN0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBDb21wb25lbnQgPT4ge1xuICAgIGNvbnN0IFdyYXBwZWRDb21wb25lbnQgPSAoe3N0YXRlLCAuLi5wcm9wc30pID0+IChcbiAgICAgIDxLZXBsZXJHbENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgIHtjb250ZXh0ID0+IChcbiAgICAgICAgICA8Q29tcG9uZW50XG4gICAgICAgICAgICB7Li4ubGVuc2VzLnJlZHVjZShcbiAgICAgICAgICAgICAgKHRvdGFsU3RhdGUsIGxlbnMpID0+ICh7XG4gICAgICAgICAgICAgICAgLi4udG90YWxTdGF0ZSxcbiAgICAgICAgICAgICAgICAuLi5sZW5zKGNvbnRleHQuc2VsZWN0b3Ioc3RhdGUpKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcHJvcHNcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvS2VwbGVyR2xDb250ZXh0LkNvbnN1bWVyPlxuICAgICk7XG5cbiAgICByZXR1cm4gY29ubmVjdChcbiAgICAgIHN0YXRlID0+ICh7Li4ubWFwU3RhdGVUb1Byb3BzKHN0YXRlKSwgc3RhdGV9KSxcbiAgICAgIGRpc3BhdGNoID0+XG4gICAgICAgIE9iamVjdC5rZXlzKGFjdGlvbnMpLnJlZHVjZShcbiAgICAgICAgICAoYWNjdSwga2V5KSA9PiAoe1xuICAgICAgICAgICAgLi4uYWNjdSxcbiAgICAgICAgICAgIFtrZXldOiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uc1trZXldLCBkaXNwYXRjaClcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB7fVxuICAgICAgICApXG4gICAgKShXcmFwcGVkQ29tcG9uZW50KTtcbiAgfTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLElBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQU1BLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3QyxJQUFBSyxTQUFBLGNBWnhDO0FBQ0E7QUFBQSxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEs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