kepler.gl
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
163 lines (162 loc) • 25.5 kB
JavaScript
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("react"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _commonUtils = require("@kepler.gl/common-utils");
var _constants = require("@kepler.gl/constants");
var _table = require("@kepler.gl/table");
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, _commonUtils.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, _table.getWMSCapabilities)(newWmsUrl);
case 11:
data = _context.sent;
datasetMetadata = (0, _table.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: _constants.DatasetType.WMS_TILE,
metadata: {
type: _constants.REMOTE_TILE,
remoteTileFormat: _constants.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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29tbW9uVXRpbHMiLCJfY29uc3RhbnRzIiwiX3RhYmxlIiwiX2NvbW1vbiIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiVGlsZXNldElucHV0Q29udGFpbmVyIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJUaWxlc2V0SW5wdXREZXNjcmlwdGlvbiIsInByb3BzIiwidGhlbWUiLCJBWlVSRTIwMCIsIkV4YW1wbGVVcmxzQ29udGFpbmVyIiwiVGlsZXNldFdNU0Zvcm0iLCJfcmVmIiwic2V0UmVzcG9uc2UiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJsYXllck5hbWUiLCJzZXRMYXllck5hbWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIndtc1VybCIsInNldFdtc1VybCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMTAiLCJ3bXNEYXRhIiwic2V0V01TRGF0YSIsIm9uTGF5ZXJOYW1lQ2hhbmdlIiwidXNlQ2FsbGJhY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0IiwidmFsdWUiLCJvbldtc1VybENoYW5nZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJuZXdXbXNVcmwiLCJkYXRhIiwiZGF0YXNldE1ldGFkYXRhIiwic2VydmljZVRpdGxlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInZhbGlkYXRlVXJsIiwiYWJydXB0IiwiZ2V0V01TQ2FwYWJpbGl0aWVzIiwic2VudCIsIndtc0NhcGFiaWxpdGllc1RvRGF0YXNldE1ldGFkYXRhIiwidGl0bGUiLCJuYW1lIiwibWV0YWRhdGEiLCJsYXllcnMiLCJ2ZXJzaW9uIiwidDAiLCJFcnJvciIsImZpbmlzaCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlRWZmZWN0IiwiX3dtc0RhdGEkbWV0YWRhdGEiLCJkYXRhc2V0IiwidHlwZSIsIkRhdGFzZXRUeXBlIiwiV01TX1RJTEUiLCJSRU1PVEVfVElMRSIsInJlbW90ZVRpbGVGb3JtYXQiLCJSZW1vdGVUaWxlRm9ybWF0IiwiV01TIiwidGlsZXNldERhdGFVcmwiLCJ0aWxlc2V0TWV0YWRhdGFVcmwiLCJjb25jYXQiLCJ3bXNWZXJzaW9uIiwiY3JlYXRlRWxlbWVudCIsImh0bWxGb3IiLCJJbnB1dExpZ2h0IiwiaWQiLCJwbGFjZWhvbGRlciIsIm9uQ2hhbmdlIiwiY2xhc3NOYW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGFscy90aWxlc2V0cy1tb2RhbHMvdGlsZXNldC13bXMtZm9ybS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtXTVNDYXBhYmlsaXRpZXN9IGZyb20gJ0Bsb2FkZXJzLmdsL3dtcyc7XG5cbmltcG9ydCB7dmFsaWRhdGVVcmx9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7RGF0YXNldFR5cGUsIFJFTU9URV9USUxFLCBSZW1vdGVUaWxlRm9ybWF0LCBXTVNEYXRhc2V0TWV0YWRhdGF9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7Z2V0V01TQ2FwYWJpbGl0aWVzLCB3bXNDYXBhYmlsaXRpZXNUb0RhdGFzZXRNZXRhZGF0YX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5cbmltcG9ydCB7TWV0YVJlc3BvbnNlfSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQge0lucHV0TGlnaHR9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5cbmNvbnN0IFRpbGVzZXRJbnB1dENvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtcm93czogcmVwZWF0KDMsIGF1dG8pO1xuICByb3ctZ2FwOiAxOHB4O1xuICBmb250LXNpemU6IDEycHg7XG5gO1xuXG5jb25zdCBUaWxlc2V0SW5wdXREZXNjcmlwdGlvbiA9IHN0eWxlZC5kaXZgXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuQVpVUkUyMDB9O1xuICBmb250LXNpemU6IDExcHg7XG5gO1xuXG5jb25zdCBFeGFtcGxlVXJsc0NvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLkFaVVJFMjAwfTtcbiAgZm9udC1zaXplOiAxMXB4O1xuXG4gIC5leGFtcGxlLXVybCB7XG4gICAgbWFyZ2luLXRvcDogOHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5gO1xuXG50eXBlIFdNU1RpbGVGb3JtUHJvcHMgPSB7XG4gIHNldFJlc3BvbnNlOiAocmVzcG9uc2U6IE1ldGFSZXNwb25zZSkgPT4gdm9pZDtcbn07XG5cbnR5cGUgV01TRGF0YSA9IHtcbiAgbWV0YWRhdGE6IFdNU0NhcGFiaWxpdGllcyB8IG51bGw7XG4gIGxheWVyczogV01TRGF0YXNldE1ldGFkYXRhWydsYXllcnMnXTtcbiAgdmVyc2lvbjogc3RyaW5nO1xufTtcblxuY29uc3QgVGlsZXNldFdNU0Zvcm06IFJlYWN0LkZDPFdNU1RpbGVGb3JtUHJvcHM+ID0gKHtzZXRSZXNwb25zZX0pID0+IHtcbiAgY29uc3QgW2xheWVyTmFtZSwgc2V0TGF5ZXJOYW1lXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpO1xuICBjb25zdCBbd21zVXJsLCBzZXRXbXNVcmxdID0gdXNlU3RhdGU8c3RyaW5nPignJyk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbd21zRGF0YSwgc2V0V01TRGF0YV0gPSB1c2VTdGF0ZTxXTVNEYXRhIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3Qgb25MYXllck5hbWVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgc2V0TGF5ZXJOYW1lKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0TGF5ZXJOYW1lXVxuICApO1xuXG4gIGNvbnN0IG9uV21zVXJsQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGV2ZW50OiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IG5ld1dtc1VybCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIHNldFdtc1VybChuZXdXbXNVcmwpO1xuXG4gICAgICBpZiAoIXZhbGlkYXRlVXJsKG5ld1dtc1VybCkpIHtcbiAgICAgICAgc2V0V01TRGF0YShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBGZXRjaCBXTVMgR2V0Q2FwYWJpbGl0aWVzXG4gICAgICB0cnkge1xuICAgICAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcblxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgZ2V0V01TQ2FwYWJpbGl0aWVzKG5ld1dtc1VybCk7XG5cbiAgICAgICAgY29uc3QgZGF0YXNldE1ldGFkYXRhID0gd21zQ2FwYWJpbGl0aWVzVG9EYXRhc2V0TWV0YWRhdGEoZGF0YSk7XG5cbiAgICAgICAgLy8gRXh0cmFjdCBuYW1lIG9yIHRpdGxlIGZyb20gR2V0Q2FwYWJpbGl0aWVzIHJlc3BvbnNlXG4gICAgICAgIGNvbnN0IHNlcnZpY2VUaXRsZSA9IGRhdGE/LnRpdGxlIHx8IGRhdGE/Lm5hbWU7XG4gICAgICAgIGlmIChzZXJ2aWNlVGl0bGUgJiYgIWxheWVyTmFtZSkge1xuICAgICAgICAgIHNldExheWVyTmFtZShzZXJ2aWNlVGl0bGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0V01TRGF0YSh7XG4gICAgICAgICAgbWV0YWRhdGE6IGRhdGEsXG4gICAgICAgICAgbGF5ZXJzOiBkYXRhc2V0TWV0YWRhdGEubGF5ZXJzLFxuICAgICAgICAgIHZlcnNpb246IGRhdGFzZXRNZXRhZGF0YS52ZXJzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHNldEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyIDogbmV3IEVycm9yKCdVbmtub3duIGVycm9yJykpO1xuICAgICAgICBzZXRXTVNEYXRhKG51bGwpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbbGF5ZXJOYW1lXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxheWVyTmFtZSAmJiB3bXNVcmwpIHtcbiAgICAgIGNvbnN0IGRhdGFzZXQgPSB7XG4gICAgICAgIG5hbWU6IGxheWVyTmFtZSxcbiAgICAgICAgdHlwZTogRGF0YXNldFR5cGUuV01TX1RJTEUsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgdHlwZTogUkVNT1RFX1RJTEUsXG4gICAgICAgICAgcmVtb3RlVGlsZUZvcm1hdDogUmVtb3RlVGlsZUZvcm1hdC5XTVMsXG4gICAgICAgICAgdGlsZXNldERhdGFVcmw6IHdtc1VybCxcbiAgICAgICAgICB0aWxlc2V0TWV0YWRhdGFVcmw6IGAke3dtc1VybH0/c2VydmljZT1XTVMmcmVxdWVzdD1HZXRDYXBhYmlsaXRpZXNgLFxuICAgICAgICAgIGxheWVyczogd21zRGF0YT8ubGF5ZXJzIHx8IFtdLFxuICAgICAgICAgIHdtc1ZlcnNpb246IHdtc0RhdGE/LnZlcnNpb24gfHwgJzEuMy4wJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgc2V0UmVzcG9uc2Uoe1xuICAgICAgICBtZXRhZGF0YTogd21zRGF0YT8ubWV0YWRhdGEgPz8gbnVsbCxcbiAgICAgICAgZGF0YXNldCxcbiAgICAgICAgbG9hZGluZyxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRSZXNwb25zZSh7XG4gICAgICAgIG1ldGFkYXRhOiBudWxsLFxuICAgICAgICBkYXRhc2V0OiBudWxsLFxuICAgICAgICBsb2FkaW5nLFxuICAgICAgICBlcnJvclxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbc2V0UmVzcG9uc2UsIGxheWVyTmFtZSwgd21zVXJsLCB3bXNEYXRhLCBsb2FkaW5nLCBlcnJvcl0pO1xuXG4gIHJldHVybiAoXG4gICAgPFRpbGVzZXRJbnB1dENvbnRhaW5lcj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxsYWJlbCBodG1sRm9yPVwibGF5ZXItbmFtZVwiPk5hbWU8L2xhYmVsPlxuICAgICAgICA8SW5wdXRMaWdodFxuICAgICAgICAgIGlkPVwibGF5ZXItbmFtZVwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIHlvdXIgV01TIGxheWVyXCJcbiAgICAgICAgICB2YWx1ZT17bGF5ZXJOYW1lfVxuICAgICAgICAgIG9uQ2hhbmdlPXtvbkxheWVyTmFtZUNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdj5cbiAgICAgICAgPGxhYmVsIGh0bWxGb3I9XCJ3bXMtdXJsXCI+V01TIFVSTDwvbGFiZWw+XG4gICAgICAgIDxJbnB1dExpZ2h0XG4gICAgICAgICAgaWQ9XCJ3bXMtdXJsXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIFdNUyBVUkxcIlxuICAgICAgICAgIHZhbHVlPXt3bXNVcmx9XG4gICAgICAgICAgb25DaGFuZ2U9e29uV21zVXJsQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgICA8VGlsZXNldElucHV0RGVzY3JpcHRpb24+UHJvdmlkZSBhIHZhbGlkIFdNUyBzZXJ2aWNlIFVSTC48L1RpbGVzZXRJbnB1dERlc2NyaXB0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8VGlsZXNldElucHV0RGVzY3JpcHRpb24+Rm9yIGV4YW1wbGUsIHRyeSBhIHB1YmxpYyBXTVMgVVJMOjwvVGlsZXNldElucHV0RGVzY3JpcHRpb24+XG4gICAgICAgIDxFeGFtcGxlVXJsc0NvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImV4YW1wbGUtdXJsXCI+4oCiIGh0dHBzOi8vb3dzLnRlcnJlc3RyaXMuZGUvb3NtL3NlcnZpY2U8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImV4YW1wbGUtdXJsXCI+XG4gICAgICAgICAgICDigKIgaHR0cHM6Ly9vcGVuZ2VvLm5jZXAubm9hYS5nb3YvZ2Vvc2VydmVyL2NvbnVzL2NvbnVzX2NyZWZfcWNkL293c1xuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZXhhbXBsZS11cmxcIj5cbiAgICAgICAgICAgIOKAoiBodHRwczovL2dpYnMuZWFydGhkYXRhLm5hc2EuZ292L3dtcy9lcHNnNDMyNi9iZXN0L3dtcy5jZ2lcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9FeGFtcGxlVXJsc0NvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvVGlsZXNldElucHV0Q29udGFpbmVyPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgVGlsZXNldFdNU0Zvcm07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFHQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFMLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFBd0MsSUFBQU8sZUFBQSxFQUFBQyxnQkFBQSxFQUFBQyxnQkFBQSxFQVp4QztBQUNBO0FBQUEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEseUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxHQUFBRyxDQUFBLEdBQUFELENBQUEsS0FBQUYsQ0FBQTtBQUFBLFNBQUFaLHdCQUFBWSxDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFB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
;