UNPKG

kepler.gl

Version:

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

163 lines (162 loc) 25.7 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 _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral")); var _react = _interopRequireWildcard(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/react")); var _styledComponents = _interopRequireDefault(require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/node_modules/styled-components")); var _src = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/common-utils/src"); var _src2 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/constants/src"); var _src3 = require("/Users/ihordykhta/Desktop/unfolded/kepler.gl/src/table/src"); var _common = require("../../common"); var _templateObject, _templateObject2, _templateObject3; // 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 TilesetInputContainer = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: grid;\n grid-template-rows: repeat(3, auto);\n row-gap: 18px;\n font-size: 12px;\n"]))); var TilesetInputDescription = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n text-align: center;\n color: ", ";\n font-size: 11px;\n"])), function (props) { return props.theme.AZURE200; }); var ExampleUrlsContainer = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n text-align: left;\n color: ", ";\n font-size: 11px;\n\n .example-url {\n margin-top: 8px;\n display: block;\n }\n"])), function (props) { return props.theme.AZURE200; }); var TilesetWMSForm = function TilesetWMSForm(_ref) { var setResponse = _ref.setResponse; var _useState = (0, _react.useState)(''), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), layerName = _useState2[0], setLayerName = _useState2[1]; var _useState3 = (0, _react.useState)(''), _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), wmsUrl = _useState4[0], setWmsUrl = _useState4[1]; var _useState5 = (0, _react.useState)(false), _useState6 = (0, _slicedToArray2["default"])(_useState5, 2), loading = _useState6[0], setLoading = _useState6[1]; var _useState7 = (0, _react.useState)(null), _useState8 = (0, _slicedToArray2["default"])(_useState7, 2), error = _useState8[0], setError = _useState8[1]; var _useState9 = (0, _react.useState)(null), _useState10 = (0, _slicedToArray2["default"])(_useState9, 2), wmsData = _useState10[0], setWMSData = _useState10[1]; var onLayerNameChange = (0, _react.useCallback)(function (event) { event.preventDefault(); setLayerName(event.target.value); }, [setLayerName]); var onWmsUrlChange = (0, _react.useCallback)( /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(event) { var newWmsUrl, data, datasetMetadata, serviceTitle; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: event.preventDefault(); newWmsUrl = event.target.value; setWmsUrl(newWmsUrl); if ((0, _src.validateUrl)(newWmsUrl)) { _context.next = 6; break; } setWMSData(null); return _context.abrupt("return"); case 6: _context.prev = 6; setLoading(true); setError(null); _context.next = 11; return (0, _src3.getWMSCapabilities)(newWmsUrl); case 11: data = _context.sent; datasetMetadata = (0, _src3.wmsCapabilitiesToDatasetMetadata)(data); // Extract name or title from GetCapabilities response serviceTitle = (data === null || data === void 0 ? void 0 : data.title) || (data === null || data === void 0 ? void 0 : data.name); if (serviceTitle && !layerName) { setLayerName(serviceTitle); } setWMSData({ metadata: data, layers: datasetMetadata.layers, version: datasetMetadata.version }); _context.next = 22; break; case 18: _context.prev = 18; _context.t0 = _context["catch"](6); setError(_context.t0 instanceof Error ? _context.t0 : new Error('Unknown error')); setWMSData(null); case 22: _context.prev = 22; setLoading(false); return _context.finish(22); case 25: case "end": return _context.stop(); } }, _callee, null, [[6, 18, 22, 25]]); })); return function (_x) { return _ref2.apply(this, arguments); }; }(), [layerName]); (0, _react.useEffect)(function () { if (layerName && wmsUrl) { var _wmsData$metadata; var dataset = { name: layerName, type: _src2.DatasetType.WMS_TILE, metadata: { type: _src2.REMOTE_TILE, remoteTileFormat: _src2.RemoteTileFormat.WMS, tilesetDataUrl: wmsUrl, tilesetMetadataUrl: "".concat(wmsUrl, "?service=WMS&request=GetCapabilities"), layers: (wmsData === null || wmsData === void 0 ? void 0 : wmsData.layers) || [], wmsVersion: (wmsData === null || wmsData === void 0 ? void 0 : wmsData.version) || '1.3.0' } }; setResponse({ metadata: (_wmsData$metadata = wmsData === null || wmsData === void 0 ? void 0 : wmsData.metadata) !== null && _wmsData$metadata !== void 0 ? _wmsData$metadata : null, dataset: dataset, loading: loading, error: error }); } else { setResponse({ metadata: null, dataset: null, loading: loading, error: error }); } }, [setResponse, layerName, wmsUrl, wmsData, loading, error]); return /*#__PURE__*/_react["default"].createElement(TilesetInputContainer, null, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", { htmlFor: "layer-name" }, "Name"), /*#__PURE__*/_react["default"].createElement(_common.InputLight, { id: "layer-name", placeholder: "Name your WMS layer", value: layerName, onChange: onLayerNameChange })), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", { htmlFor: "wms-url" }, "WMS URL"), /*#__PURE__*/_react["default"].createElement(_common.InputLight, { id: "wms-url", placeholder: "Enter WMS URL", value: wmsUrl, onChange: onWmsUrlChange }), /*#__PURE__*/_react["default"].createElement(TilesetInputDescription, null, "Provide a valid WMS service URL.")), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(TilesetInputDescription, null, "For example, try a public WMS URL:"), /*#__PURE__*/_react["default"].createElement(ExampleUrlsContainer, null, /*#__PURE__*/_react["default"].createElement("div", { className: "example-url" }, "\u2022 https://ows.terrestris.de/osm/service"), /*#__PURE__*/_react["default"].createElement("div", { className: "example-url" }, "\u2022 https://opengeo.ncep.noaa.gov/geoserver/conus/conus_cref_qcd/ows"), /*#__PURE__*/_react["default"].createElement("div", { className: "example-url" }, "\u2022 https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi")))); }; var _default = exports["default"] = TilesetWMSForm; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfc3JjIiwiX3NyYzIiLCJfc3JjMyIsIl9jb21tb24iLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIlRpbGVzZXRJbnB1dENvbnRhaW5lciIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiVGlsZXNldElucHV0RGVzY3JpcHRpb24iLCJwcm9wcyIsInRoZW1lIiwiQVpVUkUyMDAiLCJFeGFtcGxlVXJsc0NvbnRhaW5lciIsIlRpbGVzZXRXTVNGb3JtIiwiX3JlZiIsInNldFJlc3BvbnNlIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwibGF5ZXJOYW1lIiwic2V0TGF5ZXJOYW1lIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJ3bXNVcmwiLCJzZXRXbXNVcmwiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwid21zRGF0YSIsInNldFdNU0RhdGEiLCJvbkxheWVyTmFtZUNoYW5nZSIsInVzZUNhbGxiYWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInRhcmdldCIsInZhbHVlIiwib25XbXNVcmxDaGFuZ2UiLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwibmV3V21zVXJsIiwiZGF0YSIsImRhdGFzZXRNZXRhZGF0YSIsInNlcnZpY2VUaXRsZSIsIndyYXAiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ2YWxpZGF0ZVVybCIsImFicnVwdCIsImdldFdNU0NhcGFiaWxpdGllcyIsInNlbnQiLCJ3bXNDYXBhYmlsaXRpZXNUb0RhdGFzZXRNZXRhZGF0YSIsInRpdGxlIiwibmFtZSIsIm1ldGFkYXRhIiwibGF5ZXJzIiwidmVyc2lvbiIsInQwIiwiRXJyb3IiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsInVzZUVmZmVjdCIsIl93bXNEYXRhJG1ldGFkYXRhIiwiZGF0YXNldCIsInR5cGUiLCJEYXRhc2V0VHlwZSIsIldNU19USUxFIiwiUkVNT1RFX1RJTEUiLCJyZW1vdGVUaWxlRm9ybWF0IiwiUmVtb3RlVGlsZUZvcm1hdCIsIldNUyIsInRpbGVzZXREYXRhVXJsIiwidGlsZXNldE1ldGFkYXRhVXJsIiwiY29uY2F0Iiwid21zVmVyc2lvbiIsImNyZWF0ZUVsZW1lbnQiLCJodG1sRm9yIiwiSW5wdXRMaWdodCIsImlkIiwicGxhY2Vob2xkZXIiLCJvbkNoYW5nZSIsImNsYXNzTmFtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NyYy9tb2RhbHMvdGlsZXNldHMtbW9kYWxzL3RpbGVzZXQtd21zLWZvcm0udHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7V01TQ2FwYWJpbGl0aWVzfSBmcm9tICdAbG9hZGVycy5nbC93bXMnO1xuXG5pbXBvcnQge3ZhbGlkYXRlVXJsfSBmcm9tICdAa2VwbGVyLmdsL2NvbW1vbi11dGlscyc7XG5pbXBvcnQge0RhdGFzZXRUeXBlLCBSRU1PVEVfVElMRSwgUmVtb3RlVGlsZUZvcm1hdCwgV01TRGF0YXNldE1ldGFkYXRhfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge2dldFdNU0NhcGFiaWxpdGllcywgd21zQ2FwYWJpbGl0aWVzVG9EYXRhc2V0TWV0YWRhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuXG5pbXBvcnQge01ldGFSZXNwb25zZX0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHtJbnB1dExpZ2h0fSBmcm9tICcuLi8uLi9jb21tb24nO1xuXG5jb25zdCBUaWxlc2V0SW5wdXRDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgzLCBhdXRvKTtcbiAgcm93LWdhcDogMThweDtcbiAgZm9udC1zaXplOiAxMnB4O1xuYDtcblxuY29uc3QgVGlsZXNldElucHV0RGVzY3JpcHRpb24gPSBzdHlsZWQuZGl2YFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLkFaVVJFMjAwfTtcbiAgZm9udC1zaXplOiAxMXB4O1xuYDtcblxuY29uc3QgRXhhbXBsZVVybHNDb250YWluZXIgPSBzdHlsZWQuZGl2YFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjb2xvcjogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5BWlVSRTIwMH07XG4gIGZvbnQtc2l6ZTogMTFweDtcblxuICAuZXhhbXBsZS11cmwge1xuICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxuYDtcblxudHlwZSBXTVNUaWxlRm9ybVByb3BzID0ge1xuICBzZXRSZXNwb25zZTogKHJlc3BvbnNlOiBNZXRhUmVzcG9uc2UpID0+IHZvaWQ7XG59O1xuXG50eXBlIFdNU0RhdGEgPSB7XG4gIG1ldGFkYXRhOiBXTVNDYXBhYmlsaXRpZXMgfCBudWxsO1xuICBsYXllcnM6IFdNU0RhdGFzZXRNZXRhZGF0YVsnbGF5ZXJzJ107XG4gIHZlcnNpb246IHN0cmluZztcbn07XG5cbmNvbnN0IFRpbGVzZXRXTVNGb3JtOiBSZWFjdC5GQzxXTVNUaWxlRm9ybVByb3BzPiA9ICh7c2V0UmVzcG9uc2V9KSA9PiB7XG4gIGNvbnN0IFtsYXllck5hbWUsIHNldExheWVyTmFtZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKTtcbiAgY29uc3QgW3dtc1VybCwgc2V0V21zVXJsXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xuICBjb25zdCBbbG9hZGluZywgc2V0TG9hZGluZ10gPSB1c2VTdGF0ZTxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8RXJyb3IgfCBudWxsPihudWxsKTtcbiAgY29uc3QgW3dtc0RhdGEsIHNldFdNU0RhdGFdID0gdXNlU3RhdGU8V01TRGF0YSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IG9uTGF5ZXJOYW1lQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHNldExheWVyTmFtZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0sXG4gICAgW3NldExheWVyTmFtZV1cbiAgKTtcblxuICBjb25zdCBvbldtc1VybENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBuZXdXbXNVcmwgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBzZXRXbXNVcmwobmV3V21zVXJsKTtcblxuICAgICAgaWYgKCF2YWxpZGF0ZVVybChuZXdXbXNVcmwpKSB7XG4gICAgICAgIHNldFdNU0RhdGEobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRmV0Y2ggV01TIEdldENhcGFiaWxpdGllc1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICAgICAgc2V0RXJyb3IobnVsbCk7XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGdldFdNU0NhcGFiaWxpdGllcyhuZXdXbXNVcmwpO1xuXG4gICAgICAgIGNvbnN0IGRhdGFzZXRNZXRhZGF0YSA9IHdtc0NhcGFiaWxpdGllc1RvRGF0YXNldE1ldGFkYXRhKGRhdGEpO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgbmFtZSBvciB0aXRsZSBmcm9tIEdldENhcGFiaWxpdGllcyByZXNwb25zZVxuICAgICAgICBjb25zdCBzZXJ2aWNlVGl0bGUgPSBkYXRhPy50aXRsZSB8fCBkYXRhPy5uYW1lO1xuICAgICAgICBpZiAoc2VydmljZVRpdGxlICYmICFsYXllck5hbWUpIHtcbiAgICAgICAgICBzZXRMYXllck5hbWUoc2VydmljZVRpdGxlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFdNU0RhdGEoe1xuICAgICAgICAgIG1ldGFkYXRhOiBkYXRhLFxuICAgICAgICAgIGxheWVyczogZGF0YXNldE1ldGFkYXRhLmxheWVycyxcbiAgICAgICAgICB2ZXJzaW9uOiBkYXRhc2V0TWV0YWRhdGEudmVyc2lvblxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyciA6IG5ldyBFcnJvcignVW5rbm93biBlcnJvcicpKTtcbiAgICAgICAgc2V0V01TRGF0YShudWxsKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2xheWVyTmFtZV1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsYXllck5hbWUgJiYgd21zVXJsKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0ge1xuICAgICAgICBuYW1lOiBsYXllck5hbWUsXG4gICAgICAgIHR5cGU6IERhdGFzZXRUeXBlLldNU19USUxFLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHR5cGU6IFJFTU9URV9USUxFLFxuICAgICAgICAgIHJlbW90ZVRpbGVGb3JtYXQ6IFJlbW90ZVRpbGVGb3JtYXQuV01TLFxuICAgICAgICAgIHRpbGVzZXREYXRhVXJsOiB3bXNVcmwsXG4gICAgICAgICAgdGlsZXNldE1ldGFkYXRhVXJsOiBgJHt3bXNVcmx9P3NlcnZpY2U9V01TJnJlcXVlc3Q9R2V0Q2FwYWJpbGl0aWVzYCxcbiAgICAgICAgICBsYXllcnM6IHdtc0RhdGE/LmxheWVycyB8fCBbXSxcbiAgICAgICAgICB3bXNWZXJzaW9uOiB3bXNEYXRhPy52ZXJzaW9uIHx8ICcxLjMuMCdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNldFJlc3BvbnNlKHtcbiAgICAgICAgbWV0YWRhdGE6IHdtc0RhdGE/Lm1ldGFkYXRhID8/IG51bGwsXG4gICAgICAgIGRhdGFzZXQsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGVycm9yXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0UmVzcG9uc2Uoe1xuICAgICAgICBtZXRhZGF0YTogbnVsbCxcbiAgICAgICAgZGF0YXNldDogbnVsbCxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW3NldFJlc3BvbnNlLCBsYXllck5hbWUsIHdtc1VybCwgd21zRGF0YSwgbG9hZGluZywgZXJyb3JdKTtcblxuICByZXR1cm4gKFxuICAgIDxUaWxlc2V0SW5wdXRDb250YWluZXI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bGFiZWwgaHRtbEZvcj1cImxheWVyLW5hbWVcIj5OYW1lPC9sYWJlbD5cbiAgICAgICAgPElucHV0TGlnaHRcbiAgICAgICAgICBpZD1cImxheWVyLW5hbWVcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSB5b3VyIFdNUyBsYXllclwiXG4gICAgICAgICAgdmFsdWU9e2xheWVyTmFtZX1cbiAgICAgICAgICBvbkNoYW5nZT17b25MYXllck5hbWVDaGFuZ2V9XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBodG1sRm9yPVwid21zLXVybFwiPldNUyBVUkw8L2xhYmVsPlxuICAgICAgICA8SW5wdXRMaWdodFxuICAgICAgICAgIGlkPVwid21zLXVybFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBXTVMgVVJMXCJcbiAgICAgICAgICB2YWx1ZT17d21zVXJsfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbldtc1VybENoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICAgPFRpbGVzZXRJbnB1dERlc2NyaXB0aW9uPlByb3ZpZGUgYSB2YWxpZCBXTVMgc2VydmljZSBVUkwuPC9UaWxlc2V0SW5wdXREZXNjcmlwdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPFRpbGVzZXRJbnB1dERlc2NyaXB0aW9uPkZvciBleGFtcGxlLCB0cnkgYSBwdWJsaWMgV01TIFVSTDo8L1RpbGVzZXRJbnB1dERlc2NyaXB0aW9uPlxuICAgICAgICA8RXhhbXBsZVVybHNDb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJleGFtcGxlLXVybFwiPuKAoiBodHRwczovL293cy50ZXJyZXN0cmlzLmRlL29zbS9zZXJ2aWNlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJleGFtcGxlLXVybFwiPlxuICAgICAgICAgICAg4oCiIGh0dHBzOi8vb3Blbmdlby5uY2VwLm5vYWEuZ292L2dlb3NlcnZlci9jb251cy9jb251c19jcmVmX3FjZC9vd3NcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImV4YW1wbGUtdXJsXCI+XG4gICAgICAgICAgICDigKIgaHR0cHM6Ly9naWJzLmVhcnRoZGF0YS5uYXNhLmdvdi93bXMvZXBzZzQzMjYvYmVzdC93bXMuY2dpXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvRXhhbXBsZVVybHNDb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L1RpbGVzZXRJbnB1dENvbnRhaW5lcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRpbGVzZXRXTVNGb3JtO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUcsSUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBR0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQXdDLElBQUFPLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFaeEM7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBWix3QkFBQVksQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJ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