kepler.gl.geoiq
Version:
kepler.gl is a webgl based application to visualize large scale location data in the browser
163 lines (138 loc) • 18.1 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _baseWidget = _interopRequireDefault(require("../base-widget"));
var _categoryWidgetIcon = _interopRequireDefault(require("./category-widget-icon"));
var _geoViewport = _interopRequireDefault(require("@mapbox/geo-viewport"));
var _viewportMercatorProject = _interopRequireDefault(require("viewport-mercator-project"));
var _axios = _interopRequireDefault(require("axios"));
var _defaultSettings = require("../../constants/default-settings");
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
var FunctionWidget = exports["default"] = /*#__PURE__*/function (_Widget) {
(0, _inherits2["default"])(FunctionWidget, _Widget);
var _super = _createSuper(FunctionWidget);
function FunctionWidget(props) {
(0, _classCallCheck2["default"])(this, FunctionWidget);
return _super.call(this, props);
}
(0, _createClass2["default"])(FunctionWidget, [{
key: "type",
get: function get() {
return 'Category';
}
}, {
key: "isAggregated",
get: function get() {
return false;
}
}, {
key: "widgetIcon",
get: function get() {
return _categoryWidgetIcon["default"];
}
}, {
key: "widgetAggregatedData",
get: function get() {
return null;
}
}, {
key: "calculateAggregationData",
value: function calculateAggregationData(newWidget, filters, datasets, mapState, auth, project) {
var _newWidget$config = newWidget.config,
dataId = _newWidget$config.dataId,
aggregationType = _newWidget$config.aggregationType,
bounds = _newWidget$config.bounds;
var _datasets$dataId = datasets[dataId],
fields = _datasets$dataId.fields,
indexName = _datasets$dataId.indexName;
var sortableCategories = [];
var categoryField = newWidget.config.categoryField;
var fieldName = newWidget.config.fieldName;
var fieldIdx = fields.findIndex(function (f) {
return f.name === fieldName;
});
var uid = auth.uid;
var isEdit = project.isEdit;
var boundingBox;
var boundingPolygon;
var cLL;
var cLR;
var cUL;
var cUR;
if (!aggregationType || aggregationType !== 'count' && fieldIdx <= 0) return null;
if (mapState && bounds) {
var longitude = mapState.longitude,
latitude = mapState.latitude,
height = mapState.height,
width = mapState.width,
zoom = mapState.zoom,
pitch = mapState.pitch,
bearing = mapState.bearing;
boundingBox = _geoViewport["default"].bounds([longitude, latitude], zoom, [width, height]);
var viewport = new _viewportMercatorProject["default"]({
width: width,
height: height,
longitude: longitude,
latitude: latitude,
zoom: zoom,
pitch: pitch,
bearing: bearing
});
cUL = viewport.unproject([0, 0]);
cUR = viewport.unproject([width, 0]);
cLR = viewport.unproject([width, height]);
cLL = viewport.unproject([0, height]);
boundingPolygon = {
type: 'Polygon',
coordinates: [[cUL, cUR, cLR, cLL, cUL]]
};
} // newWidget.config.fieldName ||
var apiCallData = {
aggregationType: aggregationType,
filters: JSON.stringify(filters.filter(function (f) {
return f.dataId.includes(dataId);
})),
viewport: JSON.stringify(boundingPolygon),
fieldName: fieldName,
dynamic: Boolean(bounds),
categoryField: categoryField,
userId: uid,
fieldType: fieldName ? fields[fieldIdx].type === 'string' ? 'string' : 'numeric' : null,
indexName: indexName,
permissionType: isEdit
};
var config = {
headers: {
'Content-Type': 'application/json'
}
};
var response = _axios["default"].post("".concat(_defaultSettings.ON_PREMESIS_URL, "/geoiqutilities/widget/v1.0/fetch"), apiCallData, config).then(function (result) {
sortableCategories = result.data.aggregatedData;
sortableCategories = sortableCategories.sort(function (a, b) {
return b[1] - a[1];
});
sortableCategories.length = 5;
sortableCategories = sortableCategories.map(function (sc) {
return {
y: sc[0],
x: sc[1]
};
}); // this.updateWidgetConfig({aggregatedData: sortableCategories});
// newWidget.config.aggregatedData = sortableCategories;
return sortableCategories;
});
return response;
}
}]);
return FunctionWidget;
}(_baseWidget["default"]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy93aWRnZXRzL2NhdGVnb3J5LXdpZGdldC9jYXRlZ29yeS13aWRnZXQuanMiXSwibmFtZXMiOlsiRnVuY3Rpb25XaWRnZXQiLCJwcm9wcyIsIkNhdGVnb3J5V2lkZ2V0SWNvbiIsIm5ld1dpZGdldCIsImZpbHRlcnMiLCJkYXRhc2V0cyIsIm1hcFN0YXRlIiwiYXV0aCIsInByb2plY3QiLCJjb25maWciLCJkYXRhSWQiLCJhZ2dyZWdhdGlvblR5cGUiLCJib3VuZHMiLCJmaWVsZHMiLCJpbmRleE5hbWUiLCJzb3J0YWJsZUNhdGVnb3JpZXMiLCJjYXRlZ29yeUZpZWxkIiwiZmllbGROYW1lIiwiZmllbGRJZHgiLCJmaW5kSW5kZXgiLCJmIiwibmFtZSIsInVpZCIsImlzRWRpdCIsImJvdW5kaW5nQm94IiwiYm91bmRpbmdQb2x5Z29uIiwiY0xMIiwiY0xSIiwiY1VMIiwiY1VSIiwibG9uZ2l0dWRlIiwibGF0aXR1ZGUiLCJoZWlnaHQiLCJ3aWR0aCIsInpvb20iLCJwaXRjaCIsImJlYXJpbmciLCJnZW9WaWV3cG9ydCIsInZpZXdwb3J0IiwiV2ViTWVyY2F0b3JWaWV3cG9ydCIsInVucHJvamVjdCIsInR5cGUiLCJjb29yZGluYXRlcyIsImFwaUNhbGxEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsImZpbHRlciIsImluY2x1ZGVzIiwiZHluYW1pYyIsIkJvb2xlYW4iLCJ1c2VySWQiLCJmaWVsZFR5cGUiLCJwZXJtaXNzaW9uVHlwZSIsImhlYWRlcnMiLCJyZXNwb25zZSIsImF4aW9zIiwicG9zdCIsIk9OX1BSRU1FU0lTX1VSTCIsInRoZW4iLCJyZXN1bHQiLCJkYXRhIiwiYWdncmVnYXRlZERhdGEiLCJzb3J0IiwiYSIsImIiLCJsZW5ndGgiLCJtYXAiLCJzYyIsInkiLCJ4IiwiV2lkZ2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7SUFFcUJB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QjNCLFFBQUFBLFNBQVMsRUFBVEEsU0Fia0I7QUFjbEJzQyxRQUFBQSxjQUFjLEVBQUU3QjtBQWRFLE9BQXBCO0FBaUJBLFVBQU1kLE1BQU0sR0FBRztBQUNiNEMsUUFBQUEsT0FBTyxFQUFFO0FBQ1AsMEJBQWdCO0FBRFQ7QUFESSxPQUFmOztBQUtBLFVBQU1DLFFBQVEsR0FBR0Msa0JBQ2RDLElBRGMsV0FFVkMsZ0NBRlUsd0NBR2JkLFdBSGEsRUFJYmxDLE1BSmEsRUFNZGlELElBTmMsQ0FNVCxVQUFBQyxNQUFNLEVBQUk7QUFDZDVDLFFBQUFBLGtCQUFrQixHQUFHNEMsTUFBTSxDQUFDQyxJQUFQLENBQVlDLGNBQWpDO0FBQ0E5QyxRQUFBQSxrQkFBa0IsR0FBR0Esa0JBQWtCLENBQUMrQyxJQUFuQixDQUF3QixVQUFTQyxDQUFULEVBQVlDLENBQVosRUFBZTtBQUMxRCxpQkFBT0EsQ0FBQyxDQUFDLENBQUQsQ0FBRCxHQUFPRCxDQUFDLENBQUMsQ0FBRCxDQUFmO0FBQ0QsU0FGb0IsQ0FBckI7QUFHQWhELFFBQUFBLGtCQUFrQixDQUFDa0QsTUFBbkIsR0FBNEIsQ0FBNUI7QUFDQWxELFFBQUFBLGtCQUFrQixHQUFHQSxrQkFBa0IsQ0FBQ21ELEdBQW5CLENBQXVCLFVBQUFDLEVBQUUsRUFBSTtBQUNoRCxpQkFBTztBQUFDQyxZQUFBQSxDQUFDLEVBQUVELEVBQUUsQ0FBQyxDQUFELENBQU47QUFBV0UsWUFBQUEsQ0FBQyxFQUFFRixFQUFFLENBQUMsQ0FBRDtBQUFoQixXQUFQO0FBQ0QsU0FGb0IsQ0FBckIsQ0FOYyxDQVNkO0FBQ0E7O0FBQ0EsZUFBT3BELGtCQUFQO0FBQ0QsT0FsQmMsQ0FBakI7O0FBb0JBLGFBQU91QyxRQUFQO0FBQ0Q7OztFQXZIeUNnQixzQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgMjAyMyBVYmVyIFRlY2hub2xvZ2llcywgSW5jLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbi8vIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbi8vIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbi8vIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbi8vIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuLy8gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuLy8gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuLy8gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4vLyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbi8vIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbi8vIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4vLyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOXG4vLyBUSEUgU09GVFdBUkUuXG5cbmltcG9ydCBXaWRnZXQgZnJvbSAnLi4vYmFzZS13aWRnZXQnO1xuaW1wb3J0IENhdGVnb3J5V2lkZ2V0SWNvbiBmcm9tICcuL2NhdGVnb3J5LXdpZGdldC1pY29uJztcbmltcG9ydCBnZW9WaWV3cG9ydCBmcm9tICdAbWFwYm94L2dlby12aWV3cG9ydCc7XG5pbXBvcnQgV2ViTWVyY2F0b3JWaWV3cG9ydCBmcm9tICd2aWV3cG9ydC1tZXJjYXRvci1wcm9qZWN0JztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQge09OX1BSRU1FU0lTX1VSTH0gZnJvbSAnY29uc3RhbnRzL2RlZmF1bHQtc2V0dGluZ3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGdW5jdGlvbldpZGdldCBleHRlbmRzIFdpZGdldCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiAnQ2F0ZWdvcnknO1xuICB9XG4gIGdldCBpc0FnZ3JlZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGdldCB3aWRnZXRJY29uKCkge1xuICAgIHJldHVybiBDYXRlZ29yeVdpZGdldEljb247XG4gIH1cbiAgZ2V0IHdpZGdldEFnZ3JlZ2F0ZWREYXRhKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY2FsY3VsYXRlQWdncmVnYXRpb25EYXRhKFxuICAgIG5ld1dpZGdldCxcbiAgICBmaWx0ZXJzLFxuICAgIGRhdGFzZXRzLFxuICAgIG1hcFN0YXRlLFxuICAgIGF1dGgsXG4gICAgcHJvamVjdFxuICApIHtcbiAgICBjb25zdCB7ZGF0YUlkLCBhZ2dyZWdhdGlvblR5cGUsIGJvdW5kc30gPSBuZXdXaWRnZXQuY29uZmlnO1xuICAgIHZhciB7ZmllbGRzLCBpbmRleE5hbWV9ID0gZGF0YXNldHNbZGF0YUlkXTtcbiAgICBsZXQgc29ydGFibGVDYXRlZ29yaWVzID0gW107XG4gICAgY29uc3QgY2F0ZWdvcnlGaWVsZCA9IG5ld1dpZGdldC5jb25maWcuY2F0ZWdvcnlGaWVsZDtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBuZXdXaWRnZXQuY29uZmlnLmZpZWxkTmFtZTtcbiAgICBjb25zdCBmaWVsZElkeCA9IGZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLm5hbWUgPT09IGZpZWxkTmFtZSk7XG4gICAgY29uc3Qge3VpZH0gPSBhdXRoO1xuICAgIGNvbnN0IHtpc0VkaXR9ID0gcHJvamVjdDtcbiAgICBsZXQgYm91bmRpbmdCb3g7IGxldCBib3VuZGluZ1BvbHlnb247XG4gICAgbGV0IGNMTDsgbGV0IGNMUjsgbGV0IGNVTDsgbGV0IGNVUjtcblxuICAgIGlmICghYWdncmVnYXRpb25UeXBlIHx8IChhZ2dyZWdhdGlvblR5cGUgIT09ICdjb3VudCcgJiYgZmllbGRJZHggPD0gMCkpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGlmIChtYXBTdGF0ZSAmJiBib3VuZHMpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgem9vbSxcbiAgICAgICAgcGl0Y2gsXG4gICAgICAgIGJlYXJpbmdcbiAgICAgIH0gPSBtYXBTdGF0ZTtcblxuICAgICAgYm91bmRpbmdCb3ggPSBnZW9WaWV3cG9ydC5ib3VuZHMoW2xvbmdpdHVkZSwgbGF0aXR1ZGVdLCB6b29tLCBbXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCB2aWV3cG9ydCA9IG5ldyBXZWJNZXJjYXRvclZpZXdwb3J0KHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgbG9uZ2l0dWRlLFxuICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgem9vbSxcbiAgICAgICAgcGl0Y2gsXG4gICAgICAgIGJlYXJpbmdcbiAgICAgIH0pO1xuICAgICAgY1VMID0gdmlld3BvcnQudW5wcm9qZWN0KFswLCAwXSk7XG4gICAgICBjVVIgPSB2aWV3cG9ydC51bnByb2plY3QoW3dpZHRoLCAwXSk7XG4gICAgICBjTFIgPSB2aWV3cG9ydC51bnByb2plY3QoW3dpZHRoLCBoZWlnaHRdKTtcbiAgICAgIGNMTCA9IHZpZXdwb3J0LnVucHJvamVjdChbMCwgaGVpZ2h0XSk7XG5cbiAgICAgIGJvdW5kaW5nUG9seWdvbiA9IHtcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogW1tjVUwsIGNVUiwgY0xSLCBjTEwsIGNVTF1dXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBuZXdXaWRnZXQuY29uZmlnLmZpZWxkTmFtZSB8fFxuXG4gICAgY29uc3QgYXBpQ2FsbERhdGEgPSB7XG4gICAgICBhZ2dyZWdhdGlvblR5cGUsXG4gICAgICBmaWx0ZXJzOiBKU09OLnN0cmluZ2lmeShmaWx0ZXJzLmZpbHRlcihmID0+IGYuZGF0YUlkLmluY2x1ZGVzKGRhdGFJZCkpKSxcbiAgICAgIHZpZXdwb3J0OiBKU09OLnN0cmluZ2lmeShib3VuZGluZ1BvbHlnb24pLFxuICAgICAgZmllbGROYW1lLFxuICAgICAgZHluYW1pYzogQm9vbGVhbihib3VuZHMpLFxuICAgICAgY2F0ZWdvcnlGaWVsZCxcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgZmllbGRUeXBlOiBmaWVsZE5hbWVcbiAgICAgICAgPyBmaWVsZHNbZmllbGRJZHhdLnR5cGUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyAnc3RyaW5nJ1xuICAgICAgICAgIDogJ251bWVyaWMnXG4gICAgICAgIDogbnVsbCxcbiAgICAgIGluZGV4TmFtZSxcbiAgICAgIHBlcm1pc3Npb25UeXBlOiBpc0VkaXRcbiAgICB9O1xuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF4aW9zXG4gICAgICAucG9zdChcbiAgICAgICAgYCR7T05fUFJFTUVTSVNfVVJMICB9L2dlb2lxdXRpbGl0aWVzL3dpZGdldC92MS4wL2ZldGNoYCxcbiAgICAgICAgYXBpQ2FsbERhdGEsXG4gICAgICAgIGNvbmZpZ1xuICAgICAgKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgc29ydGFibGVDYXRlZ29yaWVzID0gcmVzdWx0LmRhdGEuYWdncmVnYXRlZERhdGE7XG4gICAgICAgIHNvcnRhYmxlQ2F0ZWdvcmllcyA9IHNvcnRhYmxlQ2F0ZWdvcmllcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgICAgICByZXR1cm4gYlsxXSAtIGFbMV07XG4gICAgICAgIH0pO1xuICAgICAgICBzb3J0YWJsZUNhdGVnb3JpZXMubGVuZ3RoID0gNTtcbiAgICAgICAgc29ydGFibGVDYXRlZ29yaWVzID0gc29ydGFibGVDYXRlZ29yaWVzLm1hcChzYyA9PiB7XG4gICAgICAgICAgcmV0dXJuIHt5OiBzY1swXSwgeDogc2NbMV19O1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdGhpcy51cGRhdGVXaWRnZXRDb25maWcoe2FnZ3JlZ2F0ZWREYXRhOiBzb3J0YWJsZUNhdGVnb3JpZXN9KTtcbiAgICAgICAgLy8gbmV3V2lkZ2V0LmNvbmZpZy5hZ2dyZWdhdGVkRGF0YSA9IHNvcnRhYmxlQ2F0ZWdvcmllcztcbiAgICAgICAgcmV0dXJuIHNvcnRhYmxlQ2F0ZWdvcmllcztcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG59XG4iXX0=