PageSourceSearch

https://www.pangea.es/_next/static/chunks/f818f4e5.fdf6cceaa39569ff.js

js pangea.es collected 2026-10-02 07:10:21 UTC 193,252 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2334],{12894:function(module,__unused_webpack_exports,__webpack_require__){!function(e,n){module.exports=n(__webpack_require__(19755),__webpack_require__(67294))}(self,function(__WEBPACK_EXTERNAL_MODULE_jquery__,__WEBPACK_EXTERNAL_MODULE_react__){return(()=>{var __webpack_modules__={
1"./src/components/MapContainer/MapContainer.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MapContainer": () => (/* binding */ MapContainer)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! classnames */ "../../node_modules/classnames/index.js");\n/* harmony import */ var classnames__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(classnames__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/MapContainer/styles.module.scss");\n\n\n\nconst MapContainer = ({\n  containerRef,\n  className,\n  style\n}) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {\n  style: style,\n  className: classnames__WEBPACK_IMPORTED_MODULE_1___default()(_styles_module_scss__WEBPACK_IMPORTED_MODULE_2__["default"].root, className),\n  ref: containerRef\n});\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/MapContainer/MapContainer.tsx?')},
1"./src/components/MapContainer/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MapContainer": () => (/* reexport safe */ _MapContainer__WEBPACK_IMPORTED_MODULE_0__.MapContainer)\n/* harmony export */ });\n/* harmony import */ var _MapContainer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MapContainer */ "./src/components/MapContainer/MapContainer.tsx");\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/MapContainer/index.ts?')},
1"./src/components/MultiMap/MultiMap.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MultiMap": () => (/* binding */ MultiMap)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "jquery");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _MapContainer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../MapContainer */ "./src/components/MapContainer/index.ts");\n\n\n\nconst MultiMap = ({\n  mapRef,\n  style,\n  className,\n  ...props\n}) => {\n  const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n    const mapContainer = containerRef.current;\n    const {\n      main,\n      ...rest\n    } = props;\n    const {\n      map: {\n        name,\n        content\n      },\n      ...restMain\n    } = main;\n    jquery__WEBPACK_IMPORTED_MODULE_1___default().fn.vectorMap("addMap", name, content);\n\n    if (mapContainer) {\n      jquery__WEBPACK_IMPORTED_MODULE_1___default()(mapContainer).multiMap({\n        main: { ...restMain,\n          map: name\n        },\n        ...rest\n      });\n    }\n  }, [mapRef, props]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MapContainer__WEBPACK_IMPORTED_MODULE_2__.MapContainer, {\n    style: style,\n    className: className,\n    containerRef: containerRef\n  });\n};\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/MultiMap/MultiMap.tsx?')},
1"./src/components/MultiMap/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MultiMap": () => (/* reexport safe */ _MultiMap__WEBPACK_IMPORTED_MODULE_0__.MultiMap)\n/* harmony export */ });\n/* harmony import */ var _MultiMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MultiMap */ "./src/components/MultiMap/MultiMap.tsx");\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/MultiMap/index.ts?')},
1"./src/components/VectorMap/VectorMap.tsx":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "VectorMap": () => (/* binding */ VectorMap)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "jquery");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _MapContainer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../MapContainer */ "./src/components/MapContainer/index.ts");\n\n\n\nconst VectorMap = ({\n  map,\n  mapRef,\n  style,\n  className,\n  series,\n  ...props\n}) => {\n  const containerRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n    const mapContainer = containerRef.current;\n\n    if (!map) {\n      console.error("[react-jvectormap]: no map was loaded!");\n    }\n\n    const {\n      name,\n      content\n    } = map;\n    jquery__WEBPACK_IMPORTED_MODULE_1___default().fn.vectorMap("addMap", name, content);\n\n    if (mapContainer) {\n      jquery__WEBPACK_IMPORTED_MODULE_1___default()(mapContainer).vectorMap({\n        map: name,\n        series,\n        ...props\n      });\n\n      if (map && (mapRef === null || mapRef === void 0 ? void 0 : mapRef.current) === null) {\n        mapRef.current = jquery__WEBPACK_IMPORTED_MODULE_1___default()(mapContainer).vectorMap("get", "mapObject");\n      }\n    }\n  }, [map, mapRef, props, series]);\n  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n    const mapContainer = containerRef.current;\n\n    if (series && mapContainer) {\n      const map = jquery__WEBPACK_IMPORTED_MODULE_1___default()(mapContainer).vectorMap("get", "mapObject");\n      const {\n        markers = [],\n        regions = []\n      } = series;\n      regions.forEach(({\n        values\n      }, index) => {\n        var _map$series;\n\n        if (values && (_map$series = map.series) !== null && _map$series !== void 0 && _map$series.regions) {\n          var _map$series2, _map$series2$regions$;\n\n          (_map$series2 = map.series) === null || _map$series2 === void 0 ? void 0 : (_map$series2$regions$ = _map$series2.regions[index]) === null || _map$series2$regions$ === void 0 ? void 0 : _map$series2$regions$.clearAndSet(values);\n        }\n      });\n      markers.forEach(({\n        values\n      }, index) => {\n        var _map$series3;\n\n        if (values && (_map$series3 = map.series) !== null && _map$series3 !== void 0 && _map$series3.markers) {\n          var _map$series4, _map$series4$markers$;\n\n          (_map$series4 = map.series) === null || _map$series4 === void 0 ? void 0 : (_map$series4$markers$ = _map$series4.markers[index]) === null || _map$series4$markers$ === void 0 ? void 0 : _map$series4$markers$.clearAndSet(values);\n        }\n      });\n    }\n  }, [series]);\n  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MapContainer__WEBPACK_IMPORTED_MODULE_2__.MapContainer, {\n    className: className,\n    style: style,\n    containerRef: containerRef\n  });\n};\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/VectorMap/VectorMap.tsx?')},
1"./src/components/VectorMap/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "VectorMap": () => (/* reexport safe */ _VectorMap__WEBPACK_IMPORTED_MODULE_0__.VectorMap)\n/* harmony export */ });\n/* harmony import */ var _VectorMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VectorMap */ "./src/components/VectorMap/VectorMap.tsx");\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/VectorMap/index.ts?')},
1"./src/components/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "VectorMap": () => (/* reexport safe */ _VectorMap__WEBPACK_IMPORTED_MODULE_0__.VectorMap),\n/* harmony export */   "MultiMap": () => (/* reexport safe */ _MultiMap__WEBPACK_IMPORTED_MODULE_1__.MultiMap)\n/* harmony export */ });\n/* harmony import */ var _VectorMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VectorMap */ "./src/components/VectorMap/index.ts");\n/* harmony import */ var _MultiMap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MultiMap */ "./src/components/MultiMap/index.ts");\n\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/index.ts?')},
1"./src/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MultiMap": () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_2__.MultiMap),\n/* harmony export */   "VectorMap": () => (/* reexport safe */ _components__WEBPACK_IMPORTED_MODULE_2__.VectorMap),\n/* harmony export */   "AttributeSeriesBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.AttributeSeriesBuilder),\n/* harmony export */   "LabelsBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.LabelsBuilder),\n/* harmony export */   "LabelsPropsBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.LabelsPropsBuilder),\n/* harmony export */   "MarkerBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.MarkerBuilder),\n/* harmony export */   "MultiMapBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.MultiMapBuilder),\n/* harmony export */   "SeriesBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.SeriesBuilder),\n/* harmony export */   "StyleBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.StyleBuilder),\n/* harmony export */   "VectorMapBuilder": () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.VectorMapBuilder)\n/* harmony export */ });\n/* harmony import */ var _react_jvectormap_lib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @react-jvectormap/lib */ "../jvectormap/index.js");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "jquery");\n/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components */ "./src/components/index.ts");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/utils/index.ts");\n\n\n\n\n(0,_react_jvectormap_lib__WEBPACK_IMPORTED_MODULE_0__.loadJVectorMap)((jquery__WEBPACK_IMPORTED_MODULE_1___default()));\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/index.ts?')},
1"./src/utils/builders/AttributeSeriesBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "AttributeSeriesBuilder": () => (/* binding */ AttributeSeriesBuilder)\n/* harmony export */ });\nclass AttributeSeriesBuilder {\n  constructor(attribute) {\n    this.attribute = attribute;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setAttribute(value) {\n    this.attribute = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setScale(value) {\n    this.scale = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setValues(value) {\n    this.values = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setNormalizeFunction(value) {\n    this.normalizeFunction = value;\n    return this;\n  }\n\n  build() {\n    return {\n      scale: this.scale,\n      values: this.values,\n      attribute: this.attribute,\n      normalizeFunction: this.normalizeFunction\n    };\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/AttributeSeriesBuilder.ts?')},
1"./src/utils/builders/LabelsBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "LabelsBuilder": () => (/* binding */ LabelsBuilder)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/utils/builders/utils.ts");\n\nclass LabelsBuilder {\n  /**\n   *\n   * @param values\n   */\n  addMarkersLabelProps(...values) {\n    if (!this.markers) {\n      this.markers = [];\n    }\n\n    this.markers.push(...values);\n    return this;\n  }\n  /**\n   *\n   * @param values\n   */\n\n\n  addRegionsLabelProps(...values) {\n    if (!this.regions) {\n      this.regions = [];\n    }\n\n    this.regions.push(...values);\n    return this;\n  }\n\n  build() {\n    return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stripUndefinedValues)({\n      markers: this.markers,\n      regions: this.regions\n    });\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/LabelsBuilder.ts?')},
1"./src/utils/builders/LabelsPropsBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "LabelsPropsBuilder": () => (/* binding */ LabelsPropsBuilder)\n/* harmony export */ });\nclass LabelsPropsBuilder {\n  constructor(render, offsets) {\n    this.render = render;\n    this.offsets = offsets;\n  }\n  /**\n   *\n   * @param render\n   */\n\n\n  setRender(render) {\n    this.render = render;\n    return this;\n  }\n  /**\n   *\n   * @param offsets\n   */\n\n\n  setOffsets(offsets) {\n    this.offsets = offsets;\n    return this;\n  }\n  /**\n   *\n   */\n\n\n  build() {\n    return {\n      render: this.render,\n      offsets: this.offsets\n    };\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/LabelsPropsBuilder.ts?')},
1"./src/utils/builders/MarkerBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MarkerBuilder": () => (/* binding */ MarkerBuilder)\n/* harmony export */ });\nclass MarkerBuilder {\n  constructor(value) {\n    this.name = value;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setName(value) {\n    this.name = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setCoords(value) {\n    this.latLng = undefined;\n    this.coords = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setLatLng(value) {\n    this.coords = undefined;\n    this.latLng = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setStyle(value) {\n    this.style = value;\n    return this;\n  }\n  /**\n   *\n   */\n\n\n  build() {\n    const commonProps = {\n      name: this.name,\n      style: this.style\n    };\n\n    if (this.coords) {\n      return { ...commonProps,\n        coords: this.coords\n      };\n    } else if (this.latLng) {\n      return { ...commonProps,\n        latLng: this.latLng\n      };\n    }\n\n    return { ...commonProps,\n      latLng: [0, 0]\n    };\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/MarkerBuilder.ts?')},
1"./src/utils/builders/MultiMapBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "MultiMapBuilder": () => (/* binding */ MultiMapBuilder)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/utils/builders/utils.ts");\n\nclass MultiMapBuilder {\n  constructor(mainMap, maxLevel = 1) {\n    this.main = {\n      map: mainMap\n    };\n    this.maxLevel = maxLevel;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setMainMap(value) {\n    this.main.map = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setMaxLevel(value) {\n    this.maxLevel = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setMapNameByCode(value) {\n    this.mapNameByCode = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setUrlByCode(value) {\n    this.mapUrlByCode = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setGetDrillDownMap(value) {\n    this.getDrillDownMap = value;\n    return this;\n  }\n\n  build() {\n    const baseProps = {\n      main: this.main,\n      maxLevel: this.maxLevel\n    };\n    return { ...baseProps,\n      ...(0,_utils__WEBPACK_IMPORTED_MODULE_0__.stripUndefinedValues)({\n        mapNameByCode: this.mapNameByCode,\n        mapUrlByCode: this.mapUrlByCode,\n        getDrillDownMap: this.getDrillDownMap\n      })\n    };\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/MultiMapBuilder.ts?')},
1"./src/utils/builders/SeriesBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "SeriesBuilder": () => (/* binding */ SeriesBuilder)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/utils/builders/utils.ts");\n\nclass SeriesBuilder {\n  /**\n   *\n   * @param values\n   */\n  addMarkersSeries(...values) {\n    if (!this.markers) {\n      this.markers = [];\n    }\n\n    this.markers.push(...values);\n    return this;\n  }\n  /**\n   *\n   * @param values\n   */\n\n\n  addRegionsSeries(...values) {\n    if (!this.regions) {\n      this.regions = [];\n    }\n\n    this.regions.push(...values);\n    return this;\n  }\n\n  build() {\n    return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stripUndefinedValues)({\n      markers: this.markers,\n      regions: this.regions\n    });\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/SeriesBuilder.ts?')},
1"./src/utils/builders/StyleBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "StyleBuilder": () => (/* binding */ StyleBuilder)\n/* harmony export */ });\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/utils/builders/utils.ts");\n\nclass StyleBuilder {\n  /**\n   *\n   * @param value\n   */\n  setInitial(value) {\n    this.initial = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setSelected(value) {\n    this.selected = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setHover(value) {\n    this.hover = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setSelectedHover(value) {\n    this.selectedHover = value;\n    return this;\n  }\n\n  build() {\n    return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stripUndefinedValues)({\n      selected: this.selected,\n      selectedHover: this.selectedHover,\n      hover: this.hover,\n      initial: this.initial\n    });\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/StyleBuilder.ts?')},
1"./src/utils/builders/VectorMapBuilder.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "VectorMapBuilder": () => (/* binding */ VectorMapBuilder)\n/* harmony export */ });\nclass VectorMapBuilder {\n  selectedRegions = [];\n\n  constructor(map) {\n    this.map = map;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setMap(value) {\n    this.map = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setBackgroundColor(value) {\n    this.backgroundColor = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setZoomMin(value) {\n    this.zoomMin = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setZoomMax(value) {\n    this.zoomMax = value;\n    return this;\n  }\n  /**\n   *\n   * @param marker\n   */\n\n\n  addMarker(marker) {\n    if (!this.markers) {\n      this.markers = [];\n    }\n\n    this.markers.push(marker);\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setMarkerStyle(value) {\n    this.markerStyle = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setRegionStyle(value) {\n    this.regionStyle = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   * @private\n   */\n\n\n  setMarkersSelectable(value) {\n    this.markersSelectable = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setMarkers(value) {\n    this.markers = value;\n    return this;\n  }\n  /**\n   *\n   * @private\n   * @param value\n   */\n\n\n  setRegionsSelectable(value) {\n    this.regionsSelectable = value;\n    return this;\n  }\n  /**\n   *\n   * @private\n   * @param value\n   */\n\n\n  setOnRegionTipShow(value) {\n    this.onRegionTipShow = value;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setSeries(value) {\n    this.series = value;\n    return this;\n  }\n  /**\n   *\n   * @param values\n   */\n\n\n  setLabels(values) {\n    this.labels = values;\n    return this;\n  }\n  /**\n   *\n   * @param value\n   */\n\n\n  setSelectedRegions(value) {\n    this.selectedRegions = value;\n    return this;\n  }\n  /**\n   *\n   */\n\n\n  build() {\n    return {\n      map: this.map,\n      series: this.series,\n      backgroundColor: this.backgroundColor,\n      zoomMax: this.zoomMax,\n      zoomMin: this.zoomMin,\n      markerStyle: this.markerStyle,\n      regionStyle: this.regionStyle,\n      markersSelectable: this.markersSelectable,\n      regionsSelectable: this.regionsSelectable,\n      markers: this.markers,\n      labels: this.labels,\n      selectedRegions: this.selectedRegions\n    };\n  }\n\n}\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/VectorMapBuilder.ts?')},
1"./src/utils/builders/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "VectorMapBuilder": () => (/* reexport safe */ _VectorMapBuilder__WEBPACK_IMPORTED_MODULE_0__.VectorMapBuilder),\n/* harmony export */   "MarkerBuilder": () => (/* reexport safe */ _MarkerBuilder__WEBPACK_IMPORTED_MODULE_1__.MarkerBuilder),\n/* harmony export */   "StyleBuilder": () => (/* reexport safe */ _StyleBuilder__WEBPACK_IMPORTED_MODULE_2__.StyleBuilder),\n/* harmony export */   "AttributeSeriesBuilder": () => (/* reexport safe */ _AttributeSeriesBuilder__WEBPACK_IMPORTED_MODULE_3__.AttributeSeriesBuilder),\n/* harmony export */   "SeriesBuilder": () => (/* reexport safe */ _SeriesBuilder__WEBPACK_IMPORTED_MODULE_4__.SeriesBuilder),\n/* harmony export */   "LabelsBuilder": () => (/* reexport safe */ _LabelsBuilder__WEBPACK_IMPORTED_MODULE_5__.LabelsBuilder),\n/* harmony export */   "LabelsPropsBuilder": () => (/* reexport safe */ _LabelsPropsBuilder__WEBPACK_IMPORTED_MODULE_6__.LabelsPropsBuilder),\n/* harmony export */   "MultiMapBuilder": () => (/* reexport safe */ _MultiMapBuilder__WEBPACK_IMPORTED_MODULE_7__.MultiMapBuilder)\n/* harmony export */ });\n/* harmony import */ var _VectorMapBuilder__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VectorMapBuilder */ "./src/utils/builders/VectorMapBuilder.ts");\n/* harmony import */ var _MarkerBuilder__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./MarkerBuilder */ "./src/utils/builders/MarkerBuilder.ts");\n/* harmony import */ var _StyleBuilder__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./StyleBuilder */ "./src/utils/builders/StyleBuilder.ts");\n/* harmony import */ var _AttributeSeriesBuilder__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AttributeSeriesBuilder */ "./src/utils/builders/AttributeSeriesBuilder.ts");\n/* harmony import */ var _SeriesBuilder__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./SeriesBuilder */ "./src/utils/builders/SeriesBuilder.ts");\n/* harmony import */ var _LabelsBuilder__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./LabelsBuilder */ "./src/utils/builders/LabelsBuilder.ts");\n/* harmony import */ var _LabelsPropsBuilder__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./LabelsPropsBuilder */ "./src/utils/builders/LabelsPropsBuilder.ts");\n/* harmony import */ var _MultiMapBuilder__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./MultiMapBuilder */ "./src/utils/builders/MultiMapBuilder.ts");\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/index.ts?')},
1"./src/utils/builders/utils.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "stripUndefinedValues": () => (/* binding */ stripUndefinedValues)\n/* harmony export */ });\n/**\n * remove undefined values from object\n * @param object\n */\nconst stripUndefinedValues = object => Object.fromEntries(Object.entries(object).filter(entry => entry[1] !== undefined));\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/builders/utils.ts?')},
1"./src/utils/index.ts":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "AttributeSeriesBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.AttributeSeriesBuilder),\n/* harmony export */   "LabelsBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.LabelsBuilder),\n/* harmony export */   "LabelsPropsBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.LabelsPropsBuilder),\n/* harmony export */   "MarkerBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.MarkerBuilder),\n/* harmony export */   "MultiMapBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.MultiMapBuilder),\n/* harmony export */   "SeriesBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.SeriesBuilder),\n/* harmony export */   "StyleBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.StyleBuilder),\n/* harmony export */   "VectorMapBuilder": () => (/* reexport safe */ _builders__WEBPACK_IMPORTED_MODULE_0__.VectorMapBuilder)\n/* harmony export */ });\n/* harmony import */ var _builders__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./builders */ "./src/utils/builders/index.ts");\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/utils/index.ts?')},
vendor: 16,370 bytes, line 1
1"../../node_modules/classnames/index.js":(module,exports)=>{eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n  Copyright (c) 2018 Jed Watson.\n  Licensed under the MIT License (MIT), see\n  http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n	'use strict';\n\n	var hasOwn = {}.hasOwnProperty;\n\n	function classNames() {\n		var classes = [];\n\n		for (var i = 0; i < arguments.length; i++) {\n			var arg = arguments[i];\n			if (!arg) continue;\n\n			var argType = typeof arg;\n\n			if (argType === 'string' || argType === 'number') {\n				classes.push(arg);\n			} else if (Array.isArray(arg)) {\n				if (arg.length) {\n					var inner = classNames.apply(null, arg);\n					if (inner) {\n						classes.push(inner);\n					}\n				}\n			} else if (argType === 'object') {\n				if (arg.toString === Object.prototype.toString) {\n					for (var key in arg) {\n						if (hasOwn.call(arg, key) && arg[key]) {\n							classes.push(key);\n						}\n					}\n				} else {\n					classes.push(arg.toString());\n				}\n			}\n		}\n\n		return classes.join(' ');\n	}\n\n	if ( true && module.exports) {\n		classNames.default = classNames;\n		module.exports = classNames;\n	} else if (true) {\n		// register as 'classnames', consistent with npm package name\n		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n			return classNames;\n		}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n	} else {}\n}());\n\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/classnames/index.js?")},"../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./src/components/MapContainer/styles.module.scss":(module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/noSourceMaps.js */ "../../node_modules/css-loader/dist/runtime/noSourceMaps.js");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/api.js */ "../../node_modules/css-loader/dist/runtime/api.js");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../node_modules/css-loader/dist/runtime/getUrl.js */ "../../node_modules/css-loader/dist/runtime/getUrl.js");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2__);\n// Imports\n\n\n\nvar ___CSS_LOADER_URL_IMPORT_0___ = new URL(/* asset import */ __webpack_require__(/*! data:image/gif;base64,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 */ "data:image/gif;base64,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"), __webpack_require__.b);\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = _node_modules_css_loader_dist_runtime_getUrl_js__WEBPACK_IMPORTED_MODULE_2___default()(___CSS_LOADER_URL_IMPORT_0___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, ".jvectormap-tip {\\n  position: absolute;\\n  display: none;\\n  border: solid 1px #cdcdcd;\\n  border-radius: 3px;\\n  background: #292929;\\n  color: white;\\n  font-family: sans-serif, Verdana;\\n  font-size: smaller;\\n  padding: 3px;\\n}\\n\\n._u5cITtZnGk9D_6uoElx {\\n  height: 100%;\\n  width: 100%;\\n}\\n._u5cITtZnGk9D_6uoElx svg {\\n  touch-action: none;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-container {\\n  width: 100%;\\n  height: 100%;\\n  position: relative;\\n  overflow: hidden;\\n  touch-action: none;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-zoomin {\\n  position: absolute;\\n  left: 10px;\\n  border-radius: 3px;\\n  background: #292929;\\n  padding: 3px;\\n  color: white;\\n  cursor: pointer;\\n  line-height: 10px;\\n  text-align: center;\\n  box-sizing: content-box;\\n  width: 10px;\\n  height: 10px;\\n  top: 10px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-zoomout {\\n  position: absolute;\\n  left: 10px;\\n  border-radius: 3px;\\n  background: #292929;\\n  padding: 3px;\\n  color: white;\\n  cursor: pointer;\\n  line-height: 10px;\\n  text-align: center;\\n  box-sizing: content-box;\\n  width: 10px;\\n  height: 10px;\\n  top: 30px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-goback {\\n  position: absolute;\\n  left: 10px;\\n  border-radius: 3px;\\n  background: #292929;\\n  color: white;\\n  cursor: pointer;\\n  line-height: 10px;\\n  text-align: center;\\n  box-sizing: content-box;\\n  bottom: 10px;\\n  z-index: 1000;\\n  padding: 6px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-spinner {\\n  position: absolute;\\n  left: 0;\\n  top: 0;\\n  right: 0;\\n  bottom: 0;\\n  background: center no-repeat url(" + ___CSS_LOADER_URL_REPLACEMENT_0___ + ");\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-title {\\n  font-weight: bold;\\n  font-size: 14px;\\n  text-align: center;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt {\\n  position: absolute;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-h {\\n  bottom: 0;\\n  right: 0;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-h .jvectormap-legend {\\n  float: left;\\n  margin: 0 10px 10px 0;\\n  padding: 3px 3px 1px 3px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {\\n  float: left;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-h .jvectormap-legend-tick {\\n  width: 40px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {\\n  height: 15px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-h .jvectormap-legend-tick-text {\\n  text-align: center;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-v {\\n  top: 0;\\n  right: 0;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-v .jvectormap-legend {\\n  margin: 10px 10px 0 0;\\n  padding: 3px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {\\n  height: 20px;\\n  width: 20px;\\n  display: inline-block;\\n  vertical-align: middle;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-cnt-v .jvectormap-legend-tick-text {\\n  display: inline-block;\\n  vertical-align: middle;\\n  line-height: 20px;\\n  padding-left: 3px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend {\\n  background: black;\\n  color: white;\\n  border-radius: 3px;\\n}\\n._u5cITtZnGk9D_6uoElx .jvectormap-legend-tick-text {\\n  font-size: 12px;\\n}", ""]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n	"root": "_u5cITtZnGk9D_6uoElx"\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/MapContainer/styles.module.scss?../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js')},
vendor: 2,599 bytes, line 1
1"../../node_modules/css-loader/dist/runtime/api.js":module=>{"use strict";eval('\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = "";\n      var needLayer = typeof item[5] !== "undefined";\n\n      if (item[4]) {\n        content += "@supports (".concat(item[4], ") {");\n      }\n\n      if (item[2]) {\n        content += "@media ".concat(item[2], " {");\n      }\n\n      if (needLayer) {\n        content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");\n      }\n\n      content += cssWithMappingToString(item);\n\n      if (needLayer) {\n        content += "}";\n      }\n\n      if (item[2]) {\n        content += "}";\n      }\n\n      if (item[4]) {\n        content += "}";\n      }\n\n      return content;\n    }).join("");\n  }; // import a list of modules into the list\n\n\n  list.i = function i(modules, media, dedupe, supports, layer) {\n    if (typeof modules === "string") {\n      modules = [[null, modules, undefined]];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var _i = 0; _i < this.length; _i++) {\n        var id = this[_i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i2 = 0; _i2 < modules.length; _i2++) {\n      var item = [].concat(modules[_i2]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        continue;\n      }\n\n      if (typeof layer !== "undefined") {\n        if (typeof item[5] === "undefined") {\n          item[5] = layer;\n        } else {\n          item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");\n          item[5] = layer;\n        }\n      }\n\n      if (media) {\n        if (!item[2]) {\n          item[2] = media;\n        } else {\n          item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");\n          item[2] = media;\n        }\n      }\n\n      if (supports) {\n        if (!item[4]) {\n          item[4] = "".concat(supports);\n        } else {\n          item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");\n          item[4] = supports;\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/css-loader/dist/runtime/api.js?')},
vendor: 818 bytes, line 1
1"../../node_modules/css-loader/dist/runtime/getUrl.js":module=>{"use strict";eval('\n\nmodule.exports = function (url, options) {\n  if (!options) {\n    options = {};\n  }\n\n  if (!url) {\n    return url;\n  }\n\n  url = String(url.__esModule ? url.default : url); // If url is already wrapped in quotes, remove them\n\n  if (/^[\'"].*[\'"]$/.test(url)) {\n    url = url.slice(1, -1);\n  }\n\n  if (options.hash) {\n    url += options.hash;\n  } // Should url be wrapped?\n  // See https://drafts.csswg.org/css-values-3/#urls\n\n\n  if (/["\'() \\t\\n]|(%20)/.test(url) || options.needQuotes) {\n    return "\\"".concat(url.replace(/"/g, \'\\\\"\').replace(/\\n/g, "\\\\n"), "\\"");\n  }\n\n  return url;\n};\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/css-loader/dist/runtime/getUrl.js?')},
vendor: 258 bytes, line 1
1"../../node_modules/css-loader/dist/runtime/noSourceMaps.js":module=>{"use strict";eval("\n\nmodule.exports = function (i) {\n  return i[1];\n};\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/css-loader/dist/runtime/noSourceMaps.js?")},
1"./src/components/MapContainer/styles.module.scss":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "../../node_modules/style-loader/dist/runtime/styleDomAPI.js");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js */ "../../node_modules/style-loader/dist/runtime/insertBySelector.js");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "../../node_modules/style-loader/dist/runtime/insertStyleElement.js");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "../../node_modules/style-loader/dist/runtime/styleTagTransform.js");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_styles_module_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/sass-loader/dist/cjs.js!./styles.module.scss */ "../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./src/components/MapContainer/styles.module.scss");\n\n      \n      \n      \n      \n      \n      \n      \n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\n\n      options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");\n    \noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_styles_module_scss__WEBPACK_IMPORTED_MODULE_6__["default"], options);\n\n\n\n\n       /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_styles_module_scss__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_styles_module_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_styles_module_scss__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);\n\n\n//# sourceURL=webpack://@react-jvectormap/core/./src/components/MapContainer/styles.module.scss?')},
vendor: 2,821 bytes, line 1
1"../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":module=>{"use strict";eval('\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDOM.length; i++) {\n    if (stylesInDOM[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = "".concat(id, " ").concat(count);\n    idCountMap[id] = count + 1;\n    var indexByIdentifier = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3],\n      supports: item[4],\n      layer: item[5]\n    };\n\n    if (indexByIdentifier !== -1) {\n      stylesInDOM[indexByIdentifier].references++;\n      stylesInDOM[indexByIdentifier].updater(obj);\n    } else {\n      var updater = addElementStyle(obj, options);\n      options.byIndex = i;\n      stylesInDOM.splice(i, 0, {\n        identifier: identifier,\n        updater: updater,\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n  var api = options.domAPI(options);\n  api.update(obj);\n\n  var updater = function updater(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n        return;\n      }\n\n      api.update(obj = newObj);\n    } else {\n      api.remove();\n    }\n  };\n\n  return updater;\n}\n\nmodule.exports = function (list, options) {\n  options = options || {};\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDOM[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDOM[_index].references === 0) {\n        stylesInDOM[_index].updater();\n\n        stylesInDOM.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?')},
vendor: 1,248 bytes, line 1
1"../../node_modules/style-loader/dist/runtime/insertBySelector.js":module=>{"use strict";eval('\n\nvar memo = {};\n/* istanbul ignore next  */\n\nfunction getTarget(target) {\n  if (typeof memo[target] === "undefined") {\n    var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n      try {\n        // This will throw an exception if access to iframe is blocked\n        // due to cross-origin restrictions\n        styleTarget = styleTarget.contentDocument.head;\n      } catch (e) {\n        // istanbul ignore next\n        styleTarget = null;\n      }\n    }\n\n    memo[target] = styleTarget;\n  }\n\n  return memo[target];\n}\n/* istanbul ignore next  */\n\n\nfunction insertBySelector(insert, style) {\n  var target = getTarget(insert);\n\n  if (!target) {\n    throw new Error("Couldn\'t find a style target. This probably means that the value for the \'insert\' parameter is invalid.");\n  }\n\n  target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/style-loader/dist/runtime/insertBySelector.js?')},
vendor: 502 bytes, line 1
1"../../node_modules/style-loader/dist/runtime/insertStyleElement.js":module=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement("style");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\n\nmodule.exports = insertStyleElement;\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/style-loader/dist/runtime/insertStyleElement.js?')},
vendor: 555 bytes, line 1
1"../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction setAttributesWithoutAttributes(styleElement) {\n  var nonce =  true ? __webpack_require__.nc : 0;\n\n  if (nonce) {\n    styleElement.setAttribute("nonce", nonce);\n  }\n}\n\nmodule.exports = setAttributesWithoutAttributes;\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js?')},
vendor: 1,674 bytes, line 1
1"../../node_modules/style-loader/dist/runtime/styleDomAPI.js":module=>{"use strict";eval('\n\n/* istanbul ignore next  */\nfunction apply(styleElement, options, obj) {\n  var css = "";\n\n  if (obj.supports) {\n    css += "@supports (".concat(obj.supports, ") {");\n  }\n\n  if (obj.media) {\n    css += "@media ".concat(obj.media, " {");\n  }\n\n  var needLayer = typeof obj.layer !== "undefined";\n\n  if (needLayer) {\n    css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");\n  }\n\n  css += obj.css;\n\n  if (needLayer) {\n    css += "}";\n  }\n\n  if (obj.media) {\n    css += "}";\n  }\n\n  if (obj.supports) {\n    css += "}";\n  }\n\n  var sourceMap = obj.sourceMap;\n\n  if (sourceMap && typeof btoa !== "undefined") {\n    css += "\\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n  // istanbul ignore if\n  if (styleElement.parentNode === null) {\n    return false;\n  }\n\n  styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next  */\n\n\nfunction domAPI(options) {\n  var styleElement = options.insertStyleElement(options);\n  return {\n    update: function update(obj) {\n      apply(styleElement, options, obj);\n    },\n    remove: function remove() {\n      removeStyleElement(styleElement);\n    }\n  };\n}\n\nmodule.exports = domAPI;\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/style-loader/dist/runtime/styleDomAPI.js?')},
vendor: 601 bytes, line 1
1"../../node_modules/style-loader/dist/runtime/styleTagTransform.js":module=>{"use strict";eval("\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\n\nmodule.exports = styleTagTransform;\n\n//# sourceURL=webpack://@react-jvectormap/core/../../node_modules/style-loader/dist/runtime/styleTagTransform.js?")},
1"../jquery-mousewheel/jquery.mousewheel.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "loadJQueryMouseWheel": () => (/* binding */ loadJQueryMouseWheel)\n/* harmony export */ });\n/*!\n * jQuery Mousewheel 3.1.13\n * Copyright OpenJS Foundation and other contributors\n */\n\nconst loadJQueryMouseWheel = ($) =>\n  (function (factory) {\n    factory($);\n  })(function ($) {\n    var toFix = [\n        "wheel",\n        "mousewheel",\n        "DOMMouseScroll",\n        "MozMousePixelScroll",\n      ],\n      toBind =\n        "onwheel" in window.document || window.document.documentMode >= 9\n          ? ["wheel"]\n          : ["mousewheel", "DomMouseScroll", "MozMousePixelScroll"],\n      slice = Array.prototype.slice,\n      nullLowestDeltaTimeout,\n      lowestDelta;\n\n    if ($.event.fixHooks) {\n      for (var i = toFix.length; i; ) {\n        $.event.fixHooks[toFix[--i]] = $.event.mouseHooks;\n      }\n    }\n\n    var special = ($.event.special.mousewheel = {\n      version: "3.1.12",\n\n      setup: function () {\n        if (this.addEventListener) {\n          for (var i = toBind.length; i; ) {\n            this.addEventListener(toBind[--i], handler, false);\n          }\n        } else {\n          this.onmousewheel = handler;\n        }\n\n        // Store the line height and page height for this particular element\n        $.data(this, "mousewheel-line-height", special.getLineHeight(this));\n        $.data(this, "mousewheel-page-height", special.getPageHeight(this));\n      },\n\n      teardown: function () {\n        if (this.removeEventListener) {\n          for (var i = toBind.length; i; ) {\n            this.removeEventListener(toBind[--i], handler, false);\n          }\n        } else {\n          this.onmousewheel = null;\n        }\n\n        // Clean up the data we added to the element\n        $.removeData(this, "mousewheel-line-height");\n        $.removeData(this, "mousewheel-page-height");\n      },\n\n      getLineHeight: function (elem) {\n        var $elem = $(elem),\n          $parent = $elem["offsetParent" in $.fn ? "offsetParent" : "parent"]();\n        if (!$parent.length) {\n          $parent = $("body");\n        }\n        return (\n          parseInt($parent.css("fontSize"), 10) ||\n          parseInt($elem.css("fontSize"), 10) ||\n          16\n        );\n      },\n\n      getPageHeight: function (elem) {\n        return $(elem).height();\n      },\n\n      settings: {\n        adjustOldDeltas: true, // see shouldAdjustOldDeltas() below\n        normalizeOffset: true, // calls getBoundingClientRect for each event\n      },\n    });\n\n    $.fn.extend({\n      mousewheel: function (fn) {\n        return fn ? this.on("mousewheel", fn) : this.trigger("mousewheel");\n      },\n\n      unmousewheel: function (fn) {\n        return this.off("mousewheel", fn);\n      },\n    });\n\n    function handler(event) {\n      var orgEvent = event || window.event,\n        args = slice.call(arguments, 1),\n        delta = 0,\n        deltaX = 0,\n        deltaY = 0,\n        absDelta = 0;\n      event = $.event.fix(orgEvent);\n      event.type = "mousewheel";\n\n      // Old school scrollwheel delta\n      if ("detail" in orgEvent) {\n        deltaY = orgEvent.detail * -1;\n      }\n      if ("wheelDelta" in orgEvent) {\n        deltaY = orgEvent.wheelDelta;\n      }\n      if ("wheelDeltaY" in orgEvent) {\n        deltaY = orgEvent.wheelDeltaY;\n      }\n      if ("wheelDeltaX" in orgEvent) {\n        deltaX = orgEvent.wheelDeltaX * -1;\n      }\n\n      // Firefox < 17 horizontal scrolling related to DOMMouseScroll event\n      if ("axis" in orgEvent && orgEvent.axis === orgEvent.HORIZONTAL_AXIS) {\n        deltaX = deltaY * -1;\n        deltaY = 0;\n      }\n\n      // Set delta to be deltaY or deltaX if deltaY is 0 for backwards compatabilitiy\n      delta = deltaY === 0 ? deltaX : deltaY;\n\n      // New school wheel delta (wheel event)\n      if ("deltaY" in orgEvent) {\n        deltaY = orgEvent.deltaY * -1;\n        delta = deltaY;\n      }\n      if ("deltaX" in orgEvent) {\n        deltaX = orgEvent.deltaX;\n        if (deltaY === 0) {\n          delta = deltaX * -1;\n        }\n      }\n\n      // No change actually happened, no reason to go any further\n      if (deltaY === 0 && deltaX === 0) {\n        return;\n      }\n\n      // Need to convert lines and pages to pixels if we aren\'t already in pixels\n      // There are three delta modes:\n      //   * deltaMode 0 is by pixels, nothing to do\n      //   * deltaMode 1 is by lines\n      //   * deltaMode 2 is by pages\n      if (orgEvent.deltaMode === 1) {\n        var lineHeight = $.data(this, "mousewheel-line-height");\n        delta *= lineHeight;\n        deltaY *= lineHeight;\n        deltaX *= lineHeight;\n      } else if (orgEvent.deltaMode === 2) {\n        var pageHeight = $.data(this, "mousewheel-page-height");\n        delta *= pageHeight;\n        deltaY *= pageHeight;\n        deltaX *= pageHeight;\n      }\n\n      // Store lowest absolute delta to normalize the delta values\n      absDelta = Math.max(Math.abs(deltaY), Math.abs(deltaX));\n\n      if (!lowestDelta || absDelta < lowestDelta) {\n        lowestDelta = absDelta;\n\n        // Adjust older deltas if necessary\n        if (shouldAdjustOldDeltas(orgEvent, absDelta)) {\n          lowestDelta /= 40;\n        }\n      }\n\n      // Adjust older deltas if necessary\n      if (shouldAdjustOldDeltas(orgEvent, absDelta)) {\n        // Divide all the things by 40!\n        delta /= 40;\n        deltaX /= 40;\n        deltaY /= 40;\n      }\n\n      // Get a whole, normalized value for the deltas\n      delta = Math[delta >= 1 ? "floor" : "ceil"](delta / lowestDelta);\n      deltaX = Math[deltaX >= 1 ? "floor" : "ceil"](deltaX / lowestDelta);\n      deltaY = Math[deltaY >= 1 ? "floor" : "ceil"](deltaY / lowestDelta);\n\n      // Normalise offsetX and offsetY properties\n      if (special.settings.normalizeOffset && this.getBoundingClientRect) {\n        var boundingRect = this.getBoundingClientRect();\n        event.offsetX = event.clientX - boundingRect.left;\n        event.offsetY = event.clientY - boundingRect.top;\n      }\n\n      // Add information to the event object\n      event.deltaX = deltaX;\n      event.deltaY = deltaY;\n      event.deltaFactor = lowestDelta;\n\n      // Go ahead and set deltaMode to 0 since we converted to pixels\n      // Although this is a little odd since we overwrite the deltaX/Y\n      // properties with normalized deltas.\n      event.deltaMode = 0;\n\n      // Add event and delta to the front of the arguments\n      args.unshift(event, delta, deltaX, deltaY);\n\n      // Clearout lowestDelta after sometime to better\n      // handle multiple device types that give different\n      // a different lowestDelta\n      // Ex: trackpad = 3 and mouse wheel = 120\n      if (nullLowestDeltaT
1imeout) {\n        window.clearTimeout(nullLowestDeltaTimeout);\n      }\n      nullLowestDeltaTimeout = window.setTimeout(nullLowestDelta, 200);\n\n      return ($.event.dispatch || $.event.handle).apply(this, args);\n    }\n\n    function nullLowestDelta() {\n      lowestDelta = null;\n    }\n\n    function shouldAdjustOldDeltas(orgEvent, absDelta) {\n      // If this is an older event and the delta is divisable by 120,\n      // then we are assuming that the browser is treating this as an\n      // older mouse wheel event and that we should divide the deltas\n      // by 40 to try and get a more usable deltaFactor.\n      // Side note, this actually impacts the reported scroll distance\n      // in older browsers and can cause scrolling to be slower than native.\n      // Turn this off by setting $.event.special.mousewheel.settings.adjustOldDeltas to false.\n      return (\n        special.settings.adjustOldDeltas &&\n        orgEvent.type === "mousewheel" &&\n        absDelta % 120 === 0\n      );\n    }\n  });\n\n\n//# sourceURL=webpack://@react-jvectormap/core/../jquery-mousewheel/jquery.mousewheel.js?')},
1"../jvectormap/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval('__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   "loadJVectorMap": () => (/* reexport safe */ _jquery_jvectormap_min__WEBPACK_IMPORTED_MODULE_0__.loadJVectorMap)\n/* harmony export */ });\n/* harmony import */ var _jquery_jvectormap_min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jquery.jvectormap.min */ "../jvectormap/jquery.jvectormap.min.js");\n\n\n\n//# sourceURL=webpack://@react-jvectormap/core/../jvectormap/index.js?')},
1"../jvectormap/jquery.jvectormap.min.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */   \"loadJVectorMap\": () => (/* binding */ loadJVectorMap)\n/* harmony export */ });\n/* harmony import */ var _react_jvectormap_jquery_mousewheel__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @react-jvectormap/jquery-mousewheel */ \"../jquery-mousewheel/jquery.mousewheel.js\");\n\n\n/**\n * jVectorMap version 2.0.5\n *\n * Copyright 2011-2014, Kirill Lebedev\n *\n * inspired from: https://github.com/alex-pex/jvectormap/blob/master/jvectormap-next/src/jquery-jvectormap.js\n */\nconst loadJVectorMap = ($) =>\n  (function (factory) {\n    factory($);\n  })(function ($) {\n    (0,_react_jvectormap_jquery_mousewheel__WEBPACK_IMPORTED_MODULE_0__.loadJQueryMouseWheel)($);\n    jvm.$ = $;\n    window.jvm = jvm;\n\n    const apiParams = {\n      set: {\n        colors: 1,\n        values: 1,\n        backgroundColor: 1,\n        scaleColors: 1,\n        normalizeFunction: 1,\n        focus: 1,\n      },\n      get: {\n        selectedRegions: 1,\n        selectedMarkers: 1,\n        mapObject: 1,\n        regionName: 1,\n      },\n    };\n\n    $.fn.multiMap = function (options) {\n      options.container = this;\n      new jvm.MultiMap(options);\n      return this;\n    };\n\n    $.fn.vectorMap = function (options) {\n      let map, methodName;\n      map = this.children(\".jvectormap-container\").data(\"mapObject\");\n      if (options === \"remove\") {\n        this.remove();\n      } else if (options === \"addMap\") {\n        jvm.Map.maps[arguments[1]] = arguments[2];\n      } else if (\n        (options === \"set\" || options === \"get\") &&\n        apiParams[options][arguments[1]]\n      ) {\n        methodName =\n          arguments[1].charAt(0).toUpperCase() + arguments[1].substr(1);\n        return map[options + methodName].apply(\n          map,\n          Array.prototype.slice.call(arguments, 2),\n        );\n      } else if (!map) {\n        options = options || {};\n        options.container = this;\n        map = new jvm.Map(options);\n      }\n\n      return this;\n    };\n  });\n/**\n * @namespace jvm Holds core methods and classes used by jVectorMap.\n */\nvar jvm = {\n  /**\n   * Inherits child's prototype from the parent's one.\n   * @param {Function} child\n   * @param {Function} parent\n   */\n  inherits: function (child, parent) {\n    function temp() {}\n    temp.prototype = parent.prototype;\n    child.prototype = new temp();\n    child.prototype.constructor = child;\n    child.parentClass = parent;\n  },\n\n  /**\n   * Mixes in methods from the source constructor to the target one.\n   * @param {Function} target\n   * @param {Function} source\n   */\n  mixin: function (target, source) {\n    var prop;\n\n    for (prop in source.prototype) {\n      if (source.prototype.hasOwnProperty(prop)) {\n        target.prototype[prop] = source.prototype[prop];\n      }\n    }\n  },\n\n  min: function (values) {\n    var min = Number.MAX_VALUE,\n      i;\n\n    if (values instanceof Array) {\n      for (i = 0; i < values.length; i++) {\n        if (values[i] < min) {\n          min = values[i];\n        }\n      }\n    } else {\n      for (i in values) {\n        if (values[i] < min) {\n          min = values[i];\n        }\n      }\n    }\n    return min;\n  },\n\n  max: function (values) {\n    var max = Number.MIN_VALUE,\n      i;\n\n    if (values instanceof Array) {\n      for (i = 0; i < values.length; i++) {\n        if (values[i] > max) {\n          max = values[i];\n        }\n      }\n    } else {\n      for (i in values) {\n        if (values[i] > max) {\n          max = values[i];\n        }\n      }\n    }\n    return max;\n  },\n\n  keys: function (object) {\n    var keys = [],\n      key;\n\n    for (key in object) {\n      keys.push(key);\n    }\n    return keys;\n  },\n\n  values: function (object) {\n    var values = [],\n      key,\n      i;\n\n    for (i = 0; i < arguments.length;
1 i++) {\n      object = arguments[i];\n      for (key in object) {\n        values.push(object[key]);\n      }\n    }\n    return values;\n  },\n\n  whenImageLoaded: function (url) {\n    var deferred = new jvm.$.Deferred(),\n      img = jvm.$(\"<img/>\");\n\n    img\n      .on(\"error\", function () {\n        deferred.reject();\n      })\n      .on(\"load\", function () {\n        deferred.resolve(img);\n      });\n    img.attr(\"src\", url);\n\n    return deferred;\n  },\n\n  isImageUrl: function (s) {\n    return /\\.\\w{3,4}$/.test(s);\n  },\n};\n\n/**\n * indexOf polyfill for IE < 9\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n */\nif (!Array.prototype.indexOf) {\n  Array.prototype.indexOf = function (searchElement, fromIndex) {\n    var k;\n\n    // 1. Let O be the result of calling ToObject passing\n    //    the this value as the argument.\n    if (this == null) {\n      throw new TypeError('\"this\" is null or not defined');\n    }\n\n    var O = Object(this);\n\n    // 2. Let lenValue be the result of calling the Get\n    //    internal method of O with the argument \"length\".\n    // 3. Let len be ToUint32(lenValue).\n    var len = O.length >>> 0;\n\n    // 4. If len is 0, return -1.\n    if (len === 0) {\n      return -1;\n    }\n\n    // 5. If argument fromIndex was passed let n be\n    //    ToInteger(fromIndex); else let n be 0.\n    var n = +fromIndex || 0;\n\n    if (Math.abs(n) === Infinity) {\n      n = 0;\n    }\n\n    // 6. If n >= len, return -1.\n    if (n >= len) {\n      return -1;\n    }\n\n    // 7. If n >= 0, then Let k be n.\n    // 8. Else, n<0, Let k be len - abs(n).\n    //    If k is less than 0, then let k be 0.\n    k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n    // 9. Repeat, while k < len\n    while (k < len) {\n      // a. Let Pk be ToString(k).\n      //   This is implicit for LHS operands of the in operator\n      // b. Let kPresent be the result of calling the\n      //    HasProperty internal method of O with argument Pk.\n      //   This step can be combined with c\n      // c. If kPresent is true, then\n      //    i.  Let elementK be the result of calling the Get\n      //        internal method of O with the argument ToString(k).\n      //   ii.  Let same be the result of applying the\n      //        Strict Equality Comparison Algorithm to\n      //        searchElement and elementK.\n      //  iii.  If same is true, return k.\n      if (k in O && O[k] === searchElement) {\n        return k;\n      }\n      k++;\n    }\n    return -1;\n  };\n}\n/**\n * Basic wrapper for DOM element.\n * @constructor\n * @param {String} name Tag name of the element\n * @param {Object} config Set of parameters to initialize element with\n */\njvm.AbstractElement = function(name, config){\n  /**\n   * Underlying DOM element\n   * @type {DOMElement}\n   * @private\n   */\n  this.node = this.createElement(name);\n\n  /**\n   * Name of underlying element\n   * @type {String}\n   * @private\n   */\n  this.name = name;\n\n  /**\n   * Internal store of attributes\n   * @type {Object}\n   * @private\n   */\n  this.properties = {};\n\n  if (config) {\n    this.set(config);\n  }\n};\n\n/**\n * Set attribute of the underlying DOM element.\n * @param {String} name Name of attribute\n * @param {Number|String} config Set of parameters to initialize element with\n */\njvm.AbstractElement.prototype.set = function(property, value){\n  var key;\n\n  if (typeof property === 'object') {\n    for (key in property) {\n      this.properties[key] = property[key];\n      this.applyAttr(key, property[key]);\n    }\n  } else {\n    this.properties[property] = value;\n    this.applyAttr(property, value);\n  }\n};\n\n/**\n * Returns value of attribute.\n * @param {String} name Name of attribute\n */\njvm.AbstractElement.prototype.get = function(property){\n  return this.properties[property];\n};\n\n/**\n * Applies attribute value to the underlying DOM element.\n * @param {String} name Name of attribute\n * @param {Number|String} config Value of attribute to apply\n * @private\n */\njvm.AbstractElement.prototype.applyAttr = function(property, value){\n  if (!Number.isNaN(value)) {\n    this.node.setAttribute(property, value);\n  }\n};\n\njvm.AbstractElement.prototype.remove = function(){\n  jvm.$(this.node).remove();\n};/**\n * Implements abstract vector canvas.\n * @constructor\n * @param {HTMLElement} container Container to put element to.\n * @param {Number} width Width of canvas.\n * @param {Number} height Height of canvas.\n */\njvm.AbstractCanvasElement = function(container, width, height){\n  this.container = container;\n  this.setSize(width, height);\n  this.rootElement = new jvm[this.classPrefix+'GroupElement']();\n  this.node.appendChild( this.rootElement.node );\n  this.container.appendChild(this.node);\n}\n\n/**\n * Add element to the certain group inside of the canvas.\n * @param {HTMLElement} element Element to add to canvas.\n * @param {HTMLElement} group Group to add element into or into root group if not provided.\n */\njvm.AbstractCanvasElement.prototype.add = function(element, group){\n  group = group || this.rootElement;\n  group.add(element);\n  element.canvas = this;\n}\n\n/**\n * Create path and add it to the canvas.\n * @param {Object} config Parameters of path to create.\n * @param {Object} style Styles of the path to create.\n * @param {HTMLElement} group Group to add path into.\n */\njvm.AbstractCanvasElement.prototype.addPath = function(config, style, group){\n  var el = new jvm[this.classPrefix+'PathElement'](config, style);\n\n  this.add(el, group);\n  return el;\n};\n\n/**\n * Create circle and add it to the canvas.\n * @param {Object} config Parameters of path to create.\n * @param {Object} style Styles of the path to create.\n * @param {HTMLElement} group Group to add circle into.\n */\njvm.AbstractCanvasElement.prototype.addCircle = function(config, style, group){\n  var el = new jvm[this.classPrefix+'CircleElement'](config, style);\n\n  this.add(el, group);\n  return el;\n};\n\n/**\n * Create circle and add it to the canvas.\n * @param {Object} config Parameters of path to create.\n * @param {Object} style Styles of the path to create.\n * @param {HTMLElement} group Group to add circle into.\n */\njvm.AbstractCanvasElement.prototype.addImage = function(config, style, group){\n  var el = new jvm[this.classPrefix+'ImageElement'](config, style);\n\n  this.add(el, group);\n  return el;\n};\n\n/**\n * Create text and add it to the canvas.\n * @param {Object} config Parameters of path to create.\n * @param {Object} style Styles of the path to create.\n * @param {HTMLElement} group Group to add circle into.\n */\njvm.AbstractCanvasElement.prototype.addText = function(config, style, group){\n  var el = new jvm[this.classPrefix+'TextElement'](config, style);\n\n  this.add(el, group);\n  return el;\n};\n\n/**\n * Add group to the another group inside of the canvas.\n * @param {HTMLElement} group Group to add circle into or root group if not provided.\n */\njvm.AbstractCanvasElement.prototype.addGroup = function(parentGroup){\n  var el = new jvm[this.classPrefix+'GroupElement']();\n\n  if (parentGroup) {\n    parentGroup.node.appendChild(el.node);\n  } else {\n    this.node.appendChild(el.node);\n  }\n  el.canvas = this;\n  return el;\n};/**\n * Abstract shape element. Shape element represents some visual vector or raster object.\n * @constructor\n * @param {String} name Tag name of the element.\n * @param {Object} config Set of parameters to initialize element with.\n * @param {Object} style Object with styles to set on element initialization.\n */\njvm.AbstractShapeElement = function(name, config, style){\n  this.style = style || {};\n  this.style.current = this.style.current || {};\n  this.isHovered = false;\n  this.isSelected = false;\n  this.updateStyle();\n};\n\n/**\n * Set element's style.\n * @param {Object|String} property Could be string to set only one property or object to set several style properties at once.\n * @param {String} value Value to set in case only one property should be set.\n */\njvm.AbstractShapeElement.prototype.setStyle = function(property, value){\n  var styles = {};\n\n  if (typeof property === 'object') {\n    styles = property;\n  } else {\n    styles[property] = value;\n  }\n  jvm.$.extend(this.style.current, styles);\n  this.updateStyle();\n};\n\n\njvm.AbstractShapeElement.prototype.updateStyle = function(){\n  var attrs = {};\n\n  jvm.AbstractShapeElement.mergeStyles(attrs, this.style.initial);\n  jvm.AbstractShapeElement.mergeStyles(attrs, this.style.current);
1\n  if (this.isHovered) {\n    jvm.AbstractShapeElement.mergeStyles(attrs, this.style.hover);\n  }\n  if (this.isSelected) {\n    jvm.AbstractShapeElement.mergeStyles(attrs, this.style.selected);\n    if (this.isHovered) {\n      jvm.AbstractShapeElement.mergeStyles(attrs, this.style.selectedHover);\n    }\n  }\n  this.set(attrs);\n};\n\njvm.AbstractShapeElement.mergeStyles = function(styles, newStyles){\n  var key;\n\n  newStyles = newStyles || {};\n  for (key in newStyles) {\n    if (newStyles[key] === null) {\n      delete styles[key];\n    } else {\n      styles[key] = newStyles[key];\n    }\n  }\n}/**\n * Wrapper for SVG element.\n * @constructor\n * @extends jvm.AbstractElement\n * @param {String} name Tag name of the element\n * @param {Object} config Set of parameters to initialize element with\n */\n\njvm.SVGElement = function(name, config){\n  jvm.SVGElement.parentClass.apply(this, arguments);\n}\n\njvm.inherits(jvm.SVGElement, jvm.AbstractElement);\n\njvm.SVGElement.svgns = \"http://www.w3.org/2000/svg\";\n\n/**\n * Creates DOM element.\n * @param {String} tagName Name of element\n * @private\n * @returns DOMElement\n */\njvm.SVGElement.prototype.createElement = function( tagName ){\n  return document.createElementNS( jvm.SVGElement.svgns, tagName );\n};\n\n/**\n * Adds CSS class for underlying DOM element.\n * @param {String} className Name of CSS class name\n */\njvm.SVGElement.prototype.addClass = function( className ){\n  this.node.setAttribute('class', className);\n};\n\n/**\n * Returns constructor for element by name prefixed with 'VML'.\n * @param {String} ctr Name of basic constructor to return\n * proper implementation for.\n * @returns Function\n * @private\n */\njvm.SVGElement.prototype.getElementCtr = function( ctr ){\n  return jvm['SVG'+ctr];\n};\n\njvm.SVGElement.prototype.getBBox = function(){\n  return this.node.getBBox();\n};jvm.SVGGroupElement = function(){\n  jvm.SVGGroupElement.parentClass.call(this, 'g');\n}\n\njvm.inherits(jvm.SVGGroupElement, jvm.SVGElement);\n\njvm.SVGGroupElement.prototype.add = function(element){\n  this.node.appendChild( element.node );\n};jvm.SVGCanvasElement = function (container, width, height) {\n  this.classPrefix = \"SVG\";\n  jvm.SVGCanvasElement.parentClass.call(this, \"svg\");\n\n  this.defsElement = new jvm.SVGElement(\"defs\");\n  this.node.appendChild(this.defsElement.node);\n\n  jvm.AbstractCanvasElement.apply(this, arguments);\n};\n\njvm.inherits(jvm.SVGCanvasElement, jvm.SVGElement);\njvm.mixin(jvm.SVGCanvasElement, jvm.AbstractCanvasElement);\n\njvm.SVGCanvasElement.prototype.setSize = function (width, height) {\n  this.width = width;\n  this.height = height;\n  this.node.setAttribute(\"width\", width);\n  this.node.setAttribute(\"height\", height);\n};\n\njvm.SVGCanvasElement.prototype.applyTransformParams = function (\n  scale,\n  transX,\n  transY,\n) {\n  this.scale = scale;\n  this.transX = transX;\n  this.transY = transY;\n  if (!isNaN(transX) && !isNaN(transY) && !isNaN(scale)) {\n    this.rootElement.node.setAttribute(\n      \"transform\",\n      \"scale(\" + scale + \") translate(\" + transX + \", \" + transY + \")\",\n    );\n  }\n};\njvm.SVGShapeElement = function(name, config, style){\n  jvm.SVGShapeElement.parentClass.call(this, name, config);\n  jvm.AbstractShapeElement.apply(this, arguments);\n};\n\njvm.inherits(jvm.SVGShapeElement, jvm.SVGElement);\njvm.mixin(jvm.SVGShapeElement, jvm.AbstractShapeElement);\n\njvm.SVGShapeElement.prototype.applyAttr = function(attr, value){\n  var patternEl,\n      imageEl,\n      that = this;\n\n  if (attr === 'fill' && jvm.isImageUrl(value)) {\n    if (!jvm.SVGShapeElement.images[value]) {\n      jvm.whenImageLoaded(value).then(function(img){\n        imageEl = new jvm.SVGElement('image');\n        imageEl.node.setAttributeNS('http://www.w3.org/1999/xlink', 'href', value);\n        imageEl.applyAttr('x', '0');\n        imageEl.applyAttr('y', '0');\n        imageEl.applyAttr('width', img[0].width);\n        imageEl.applyAttr('height', img[0].height);\n\n        patternEl = new jvm.SVGElement('pattern');\n        patternEl.applyAttr('id', 'image'+jvm.SVGShapeElement.imageCounter);\n        patternEl.applyAttr('x', 0);\n        patternEl.applyAttr('y', 0);\n        patternEl.applyAttr('width', img[0].width / 2);\n        patternEl.applyAttr('height', img[0].height / 2);\n        patternEl.applyAttr('viewBox', '0 0 '+img[0].width+' '+img[0].height);\n        patternEl.applyAttr('patternUnits', 'userSpaceOnUse');\n        patternEl.node.appendChild( imageEl.node );\n\n        that.canvas.defsElement.node.appendChild( patternEl.node );\n\n        jvm.SVGShapeElement.images[value] = jvm.SVGShapeElement.imageCounter++;\n\n        that.applyAttr('fill', 'url(#image'+jvm.SVGShapeElement.images[value]+')');\n      });\n    } else {\n      this.applyAttr('fill', 'url(#image'+jvm.SVGShapeElement.images[value]+')');\n    }\n  } else {\n    jvm.SVGShapeElement.parentClass.prototype.applyAttr.apply(this, arguments);\n  }\n};\n\njvm.SVGShapeElement.imageCounter = 1;\njvm.SVGShapeElement.images = {};jvm.SVGPathElement = function(config, style){\n  jvm.SVGPathElement.parentClass.call(this, 'path', config, style);\n  this.node.setAttribute('fill-rule', 'evenodd');\n}\n\njvm.inherits(jvm.SVGPathElement, jvm.SVGShapeElement);jvm.SVGCircleElement = function(config, style){\n  jvm.SVGCircleElement.parentClass.call(this, 'circle', config, style);\n};\n\njvm.inherits(jvm.SVGCircleElement, jvm.SVGShapeElement);jvm.SVGImageElement = function(config, style){\n  jvm.SVGImageElement.parentClass.call(this, 'image', config, style);\n};\n\njvm.inherits(jvm.SVGImageElement, jvm.SVGShapeElement);\n\njvm.SVGImageElement.prototype.applyAttr = function(attr, value){\n  var that = this,\n      imageOffset,\n      imageUrl;\n\n  if (attr == 'image') {\n    if (typeof value == 'object') {\n      imageUrl = value.url;\n      this.offset = value.offset;\n    } else {\n      imageUrl = value;\n      this.offset = [0, 0];\n    }\n\n    jvm.whenImageLoaded(imageUrl).then(function(img){\n      that.node.setAttributeNS('http://www.w3.org/1999/xlink', 'href', imageUrl);\n      that.width = img[0].width;\n      that.height = img[0].height;\n      that.applyAttr('width', that.width);\n      that.applyAttr('height', that.height);\n\n      that.applyAttr('x', that.cx - that.width / 2 + that.offset[0]);\n      that.applyAttr('y', that.cy - that.height / 2 + that.offset[1]);\n\n      jvm.$(that.node).trigger('imageloaded', [img]);\n    });\n  } else if(attr == 'cx') {\n    this.cx = value;\n    if (this.width) {\n      this.applyAttr('x', value - this.width / 2 + this.offset[0]);\n    }\n  } else if(attr == 'cy') {\n    this.cy = value;\n    if (this.height) {\n      this.applyAttr('y', value - this.height / 2 + this.offset[1]);\n    }\n  } else {\n    jvm.SVGImageElement.parentClass.prototype.applyAttr.apply(this, arguments);\n  }\n};jvm.SVGTextElement = function(config, style){\n  jvm.SVGTextElement.parentClass.call(this, 'text', config, style);\n}\n\njvm.inherits(jvm.SVGTextElement, jvm.SVGShapeElement);\n\njvm.SVGTextElement.prototype.applyAttr = function(attr, value){\n  if (attr === 'text') {\n    this.node.textContent = value;\n  } else {\n    jvm.SVGTextElement.parentClass.prototype.applyAttr.apply(this, arguments);\n  }\n};/**\n * Wrapper for VML element.\n * @constructor\n * @extends jvm.AbstractElement\n * @param {String} name Tag name of the element\n * @param {Object} config Set of parameters to initialize element with\n */\n\njvm.VMLElement = function(name, config){\n  if (!jvm.VMLElement.VMLInitialized) {\n    jvm.VMLElement.initializeVML();\n  }\n\n  jvm.VMLElement.parentClass.apply(this, arguments);\n};\n\njvm.inherits(jvm.VMLElement, jvm.AbstractElement);\n\n/**\n * Shows if VML was already initialized for the current document or not.\n * @
1static\n * @private\n * @type {Boolean}\n */\njvm.VMLElement.VMLInitialized = false;\n\n/**\n * Initializes VML handling before creating the first element\n * (adds CSS class and creates namespace). Adds one of two forms\n * of createElement method depending of support by browser.\n * @static\n * @private\n */\n\n // The following method of VML handling is borrowed from the\n // Raphael library by Dmitry Baranovsky.\n\njvm.VMLElement.initializeVML = function(){\n  try {\n    if (!document.namespaces.rvml) {\n      document.namespaces.add(\"rvml\",\"urn:schemas-microsoft-com:vml\");\n    }\n    /**\n     * Creates DOM element.\n     * @param {String} tagName Name of element\n     * @private\n     * @returns DOMElement\n     */\n    jvm.VMLElement.prototype.createElement = function (tagName) {\n      return document.createElement('<rvml:' + tagName + ' class=\"rvml\">');\n    };\n  } catch (e) {\n    /**\n     * @private\n     */\n    jvm.VMLElement.prototype.createElement = function (tagName) {\n      return document.createElement('<' + tagName + ' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"rvml\">');\n    };\n  }\n  document.createStyleSheet().addRule(\".rvml\", \"behavior:url(#default#VML)\");\n  jvm.VMLElement.VMLInitialized = true;\n};\n\n/**\n * Returns constructor for element by name prefixed with 'VML'.\n * @param {String} ctr Name of basic constructor to return\n * proper implementation for.\n * @returns Function\n * @private\n */\njvm.VMLElement.prototype.getElementCtr = function( ctr ){\n  return jvm['VML'
1+ctr];\n};\n\n/**\n * Adds CSS class for underlying DOM element.\n * @param {String} className Name of CSS class name\n */\njvm.VMLElement.prototype.addClass = function( className ){\n  jvm.$(this.node).addClass(className);\n};\n\n/**\n * Applies attribute value to the underlying DOM element.\n * @param {String} name Name of attribute\n * @param {Number|String} config Value of attribute to apply\n * @private\n */\njvm.VMLElement.prototype.applyAttr = function( attr, value ){\n  this.node[attr] = value;\n};\n\n/**\n * Returns boundary box for the element.\n * @returns {Object} Boundary box with numeric fields: x, y, width, height\n * @override\n */\njvm.VMLElement.prototype.getBBox = function(){\n  var node = jvm.$(this.node);\n\n  return {\n    x: node.position().left / this.canvas.scale,\n    y: node.position().top / this.canvas.scale,\n    width: node.width() / this.canvas.scale,\n    height: node.height() / this.canvas.scale\n  };\n};jvm.VMLGroupElement = function(){\n  jvm.VMLGroupElement.parentClass.call(this, 'group');\n\n  this.node.style.left = '0px';\n  this.node.style.top = '0px';\n  this.node.coordorigin = \"0 0\";\n};\n\njvm.inherits(jvm.VMLGroupElement, jvm.VMLElement);\n\njvm.VMLGroupElement.prototype.add = function(element){\n  this.node.appendChild( element.node );\n};jvm.VMLCanvasElement = function(container, width, height){\n  this.classPrefix = 'VML';\n  jvm.VMLCanvasElement.parentClass.call(this, 'group');\n  jvm.AbstractCanvasElement.apply(this, arguments);\n  this.node.style.position = 'absolute';\n};\n\njvm.inherits(jvm.VMLCanvasElement, jvm.VMLElement);\njvm.mixin(jvm.VMLCanvasElement, jvm.AbstractCanvasElement);\n\njvm.VMLCanvasElement.prototype.setSize = function(width, height){\n  var paths,\n      groups,\n      i,\n      l;\n\n  this.width = width;\n  this.height = height;\n  this.node.style.width = width + \"px\";\n  this.node.style.height = height + \"px\";\n  this.node.coordsize = width+' '+height;\n  this.node.coordorigin = \"0 0\";\n  if (this.rootElement) {\n    paths = this.rootElement.node.getElementsByTagName('shape');\n    for(i = 0, l = paths.length; i < l; i++) {\n      paths[i].coordsize = width+' '+height;\n      paths[i].style.width = width+'px';\n      paths[i].style.height = height+'px';\n    }\n    groups = this.node.getElementsByTagName('group');\n    for(i = 0, l = groups.length; i < l; i++) {\n      groups[i].coordsize = width+' '+height;\n      groups[i].style.width = width+'px';\n      groups[i].style.height = height+'px';\n    }\n  }\n};\n\njvm.VMLCanvasElement.prototype.applyTransformParams = function(scale, transX, transY) {\n  this.scale = scale;\n  this.transX = transX;\n  this.transY = transY;\n  this.rootElement.node.coordorigin = (this.width-transX-this.width/100)+','+(this.height-transY-this.height/100);\n  this.rootElement.node.coordsize = this.width/scale+','+this.height/scale;\n};jvm.VMLShapeElement = function(name, config){\n  jvm.VMLShapeElement.parentClass.call(this, name, config);\n\n  this.fillElement = new jvm.VMLElement('fill');\n  this.strokeElement = new jvm.VMLElement('stroke');\n  this.node.appendChild(this.fillElement.node);\n  this.node.appendChild(this.strokeElement.node);\n  this.node.stroked = false;\n\n  jvm.AbstractShapeElement.apply(this, arguments);\n};\n\njvm.inherits(jvm.VMLShapeElement, jvm.VMLElement);\njvm.mixin(jvm.VMLShapeElement, jvm.AbstractShapeElement);\n\njvm.VMLShapeElement.prototype.applyAttr = function(attr, value){\n  switch (attr) {\n    case 'fill':\n      this.node.fillcolor = value;\n      break;\n    case 'fill-opacity':\n      this.fillElement.node.opacity = Math.round(value*100)+'%';\n      break;\n    case 'stroke':\n      if (value === 'none') {\n        this.node.stroked = false;\n      } else {\n        this.node.stroked = true;\n      }\n      this.node.strokecolor = value;\n      break;\n    case 'stroke-opacity':\n      this.strokeElement.node.opacity = Math.round(value*100)+'%';\n      break;\n    case 'stroke-width':\n      if (parseInt(value, 10) === 0) {\n        this.node.stroked = false;\n      } else {\n        this.node.stroked = true;\n      }\n      this.node.strokeweight = value;\n      break;\n    case 'd':\n      this.node.path = jvm.VMLPathElement.pathSvgToVml(value);\n      break;\n    default:\n      jvm.VMLShapeElement.parentClass.prototype.applyAttr.apply(this, arguments);\n  }\n};jvm.VMLPathElement = function(config, style){\n  var scale = new jvm.VMLElement('skew');\n\n  jvm.VMLPathElement.parentClass.call(this, 'shape', config, style);\n\n  this.node.coordorigin = \"0 0\";\n\n  scale.node.on = true;\n  scale.node.matrix = '0.01,0,0,0.01,0,0';\n  scale.node.offset = '0,0';
1\n\n  this.node.appendChild(scale.node);\n};\n\njvm.inherits(jvm.VMLPathElement, jvm.VMLShapeElement);\n\njvm.VMLPathElement.prototype.applyAttr = function(attr, value){\n  if (attr === 'd') {\n    this.node.path = jvm.VMLPathElement.pathSvgToVml(value);\n  } else {\n    jvm.VMLShapeElement.prototype.applyAttr.call(this, attr, value);\n  }\n};\n\njvm.VMLPathElement.pathSvgToVml = function(path) {\n  var cx = 0, cy = 0, ctrlx, ctrly;\n\n  path = path.replace(/(-?\\d+)e(-?\\d+)/g, '0');\n  return path.replace(/([MmLlHhVvCcSs])\\s*((?:-?\\d*(?:\\.\\d+)?\\s*,?\\s*)+)/g, function(segment, letter, coords, index){\n    coords = coords.replace(/(\\d)-/g, '$1,-')\n            .replace(/^\\s+/g, '')\n            .replace(/\\s+$/g, '')\n            .replace(/\\s+/g, ',').split(',');\n    if (!coords[0]) coords.shift();\n    for (var i=0, l=coords.length; i<l; i++) {\n      coords[i] = Math.round(100*coords[i]);\n    }\n    switch (letter) {\n      case 'm':\n        cx += coords[0];\n        cy += coords[1];\n        return 't'+coords.join(',');\n      case 'M':\n        cx = coords[0];\n        cy = coords[1];\n        return 'm'+coords.join(',');\n      case 'l':\n        cx += coords[0];\n        cy += coords[1];\n        return 'r'+coords.join(',');\n      case 'L':\n        cx = coords[0];\n        cy = coords[1];\n        return 'l'+coords.join(',');\n      case 'h':\n        cx += coords[0];\n        return 'r'+coords[0]+',0';\n      case 'H':\n        cx = coords[0];\n        return 'l'+cx+','+cy;\n      case 'v':\n        cy += coords[0];\n        return 'r0,'+coords[0];\n      case 'V':\n        cy = coords[0];\n        return 'l'+cx+','+cy;\n      case 'c':\n        ctrlx = cx + coords[coords.length-4];\n        ctrly = cy + coords[coords.length-3];\n        cx += coords[coords.length-2];\n        cy += coords[coords.length-1];\n        return 'v'+coords.join(',');\n      case 'C':\n        ctrlx = coords[coords.length-4];\n        ctrly = coords[coords.length-3];\n        cx = coords[coords.length-2];\n        cy = coords[coords.length-1];\n        return 'c'+coords.join(',');\n      case 's':\n        coords.unshift(cy-ctrly);\n        coords.unshift(cx-ctrlx);\n        ctrlx = cx + coords[coords.length-4];\n        ctrly = cy + coords[coords.length-3];\n        cx += coords[coords.length-2];\n        cy += coords[coords.length-1];\n        return 'v'+coords.join(',');\n      case 'S':\n        coords.unshift(cy+cy-ctrly);\n        coords.unshift(cx+cx-ctrlx);\n        ctrlx = coords[coords.length-4];\n        ctrly = coords[coords.length-3];\n        cx = coords[coords.length-2];\n        cy = coords[coords.length-1];\n        return 'c'+coords.join(',');\n    }\n    return '';\n  }).replace(/z/g, 'e');\n};jvm.VMLCircleElement = function(config, style){\n  jvm.VMLCircleElement.parentClass.call(this, 'oval', config, style);\n};\n\njvm.inherits(jvm.VMLCircleElement, jvm.VMLShapeElement);\n\njvm.VMLCircleElement.prototype.applyAttr = function(attr, value){\n  switch (attr) {\n    case 'r':\n      this.node.style.width = value*2+'px';\n      this.node.style.height = value*2+'px';\n      this.applyAttr('cx', this.get('cx') || 0);\n      this.applyAttr('cy', this.get('cy') || 0);\n      break;\n    case 'cx':\n      if (!value) return;\n      this.node.style.left = value - (this.get('r') || 0) + 'px';\n      break;\n    case 'cy':\n      if (!value) return;\n      this.node.style.top = value - (this.get('r') || 0) + 'px';\n      break;\n    default:\n      jvm.VMLCircleElement.parentClass.prototype.applyAttr.call(this, attr, value);\n  }\n};/**\n * Class for vector images manipulations.\n * @constructor\n * @param {DOMElement} container to place canvas to\n * @param {Number} width\n * @param {Number} height\n */\njvm.VectorCanvas = function(container, width, height) {\n  this.mode = window.SVGAngle ? 'svg' : 'vml';\n\n  if (this.mode == 'svg') {\n    this.impl = new jvm.SVGCanvasElement(container, width, height);\n  } else {\n    this.impl = new jvm.VMLCanvasElement(container, width, height);\n  }\n  this.impl.mode = this.mode;\n  return this.impl;\n};jvm.SimpleScale = function(scale){\n  this.scale = scale;\n};\n\njvm.SimpleScale.prototype.getValue = function(value){\n  return value;\n};jvm.OrdinalScale = function(scale){\n  this.scale = scale;\n};\n\njvm.OrdinalScale.prototype.getValue = function(value){\n  return this.scale[value];\n};\n\njvm.OrdinalScale.prototype.getTicks = function(){\n  var ticks = [],\n      key;\n\n  for (key in this.scale) {\n    ticks.push({\n      label: ke
1y,\n      value: this.scale[key]\n    });\n  }\n\n  return ticks;\n};jvm.NumericScale = function(scale, normalizeFunction, minValue, maxValue) {\n  this.scale = [];\n\n  normalizeFunction = normalizeFunction || 'linear';\n\n  if (scale) this.setScale(scale);\n  if (normalizeFunction) this.setNormalizeFunction(normalizeFunction);\n  if (typeof minValue !== 'undefined' ) this.setMin(minValue);\n  if (typeof maxValue !== 'undefined' ) this.setMax(maxValue);\n};\n\njvm.NumericScale.prototype = {\n  setMin: function(min) {\n    this.clearMinValue = min;\n    if (typeof this.normalize === 'function') {\n      this.minValue = this.normalize(min);\n    } else {\n      this.minValue = min;\n    }\n  },\n\n  setMax: function(max) {\n    this.clearMaxValue = max;\n    if (typeof this.normalize === 'function') {\n      this.maxValue = this.normalize(max);\n    } else {\n      this.maxValue = max;\n    }\n  },\n\n  setScale: function(scale) {\n    var i;\n\n    this.scale = [];\n    for (i = 0; i < scale.length; i++) {\n      this.scale[i] = [scale[i]];\n    }\n  },\n\n  setNormalizeFunction: function(f) {\n    if (f === 'polynomial') {\n      this.normalize = function(value) {\n        return Math.pow(value, 0.2);\n      }\n    } else if (f === 'linear') {\n      delete this.normalize;\n    } else {\n      this.normalize = f;\n    }\n    this.setMin(this.clearMinValue);\n    this.setMax(this.clearMaxValue);\n  },\n\n  getValue: function(value) {\n    var lengthes = [],\n        fullLength = 0,\n        l,\n        i = 0,\n        c;\n\n    if (typeof this.normalize === 'function') {\n      value = this.normalize(value);\n    }\n    for (i = 0; i < this.scale.length-1; i++) {\n      l = this.vectorLength(this.vectorSubtract(this.scale[i+1], this.scale[i]));\n      lengthes.push(l);\n      fullLength += l;\n    }\n\n    c = (this.maxValue - this.minValue) / fullLength;\n    for (i=0; i<lengthes.length; i++) {\n      lengthes[i] *= c;\n    }\n\n    i = 0;\n    value -= this.minValue;\n    while (value - lengthes[i] >= 0) {\n      value -= lengthes[i];\n      i++;\n    }\n\n    if (i == this.scale.length - 1) {\n      value = this.vectorToNum(this.scale[i])\n    } else {\n      value = (\n        this.vectorToNum(\n          this.vectorAdd(this.scale[i],\n            this.vectorMult(\n              this.vectorSubtract(this.scale[i+1], this.scale[i]),\n              (value) / (lengthes[i])\n            )\n          )\n        )\n      );\n    }\n\n    return value;\n  },\n\n  vectorToNum: function(vector) {\n    var num = 0,\n        i;\n\n    for (i = 0; i < vector.length; i++) {\n      num += Math.round(vector[i])*Math.pow(256, vector.length-i-1);\n    }\n    return num;\n  },\n\n  vectorSubtract: function(vector1, vector2) {\n    var vector = [],\n        i;\n\n    for (i = 0; i < vector1.length; i++) {\n      vector[i] = vector1[i] - vector2[i];\n    }\n    return vector;\n  },\n\n  vectorAdd: function(vector1, vector2) {\n    var vector = [],\n        i;\n\n    for (i = 0; i < vector1.length; i++) {\n      vector[i] = vector1[i] + vector2[i];\n    }\n    return vector;\n  },\n\n  vectorMult: function(vector, num) {\n    var result = [],\n        i;\n\n    for (i = 0; i < vector.length; i++) {\n      result[i] = vector[i] * num;\n    }\n    return result;\n  },\n\n  vectorLength: function(vector) {\n    var result = 0,\n        i;\n    for (i = 0; i < vector.length; i++) {\n      result += vector[i] * vector[i];\n    }\n    return Math.sqrt(result);\n  },\n\n  /* Derived from d3 implementation https://github.com/mbostock/d3/blob/master/src/scale/linear.js#L94 */\n  getTicks: function(){\n    var m = 5,\n        extent = [this.clearMinValue, this.clearMaxValue],\n        span = extent[1] - extent[0],\n        step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)),\n        err = m / span * step,\n        ticks = [],\n        tick,\n        v;\n\n    if (err <= .15) step *= 10;\n    else if (err <= .35) step *= 5;\n    else if (err <= .75) step *= 2;\n\n    extent[0] = Math.floor(extent[0] / step) * step;\n    extent[1] = Math.ceil(extent[1] / step) * step;\n\n    tick = extent[0];\n    while (tick <= extent[1]) {\n      if (tick == extent[0]) {\n        v = this.clearMinValue;\n      } else if (tick == extent[1]) {\n        v = this.clearMaxValue;\n      } else {\n        v = tick;\n      }\n      ticks.push({\n        label: tick,\n        value: this.getValue(v)\n      });\n      tick += step;\n    }\n\n    return ticks;\n  }\n};\njvm.ColorScale = function(colors, normalizeFunction, minValue, maxValue) {\n  jvm.ColorScale.parentClass.apply(this, arguments);\n}\n\njvm.inherits(jvm.ColorScale, jvm.NumericScale);\n\njvm.ColorScale.prototype.setScale = function(scale) {\n  var i;\n\n  for (i = 0; i < scale.length;
1 i++) {\n    this.scale[i] = jvm.ColorScale.rgbToArray(scale[i]);\n  }\n};\n\njvm.ColorScale.prototype.getValue = function(value) {\n  return jvm.ColorScale.numToRgb(jvm.ColorScale.parentClass.prototype.getValue.call(this, value));\n};\n\njvm.ColorScale.arrayToRgb = function(ar) {\n  var rgb = '#',\n      d,\n      i;\n\n  for (i = 0; i < ar.length; i++) {\n    d = ar[i].toString(16);\n    rgb += d.length == 1 ? '0'+d : d;\n  }\n  return rgb;\n};\n\njvm.ColorScale.numToRgb = function(num) {\n  num = num.toString(16);\n\n  while (num.length < 6) {\n    num = '0' + num;\n  }\n\n  return '#'+num;\n};\n\njvm.ColorScale.rgbToArray = function(rgb) {\n  rgb = rgb.substr(1);\n  return [parseInt(rgb.substr(0, 2), 16), parseInt(rgb.substr(2, 2), 16), parseInt(rgb.substr(4, 2), 16)];\n};/**\n * Represents map legend.\n * @constructor\n * @param {Object} params Configuration parameters.\n * @param {String} params.cssClass Additional CSS class to apply to legend element.\n * @param {Boolean} params.vertical If <code>true</code> legend will be rendered as vertical.\n * @param {String} params.title Legend title.\n * @param {Function} params.labelRender Method to convert series values to legend labels.\n */\njvm.Legend = function(params) {\n  this.params = params || {};\n  this.map = this.params.map;\n  this.series = this.params.series;\n  this.body = jvm.$('<div/>');\n  this.body.addClass('jvectormap-legend');\n  if (this.params.cssClass) {\n    this.body.addClass(this.params.cssClass);\n  }\n\n  if (params.vertical) {\n    this.map.legendCntVertical.append( this.body );\n  } else {\n    this.map.legendCntHorizontal.append( this.body );\n  }\n\n  this.render();\n}\n\njvm.Legend.prototype.render = function(){\n  var ticks = this.series.scale.getTicks(),\n      i,\n      inner = jvm.$('<div/>').addClass('jvectormap-legend-inner'),\n      tick,\n      sample,\n      label;\n\n  this.body.html('');\n  if (this.params.title) {\n    this.body.append(\n      jvm.$('<div/>').addClass('jvectormap-legend-title').html(this.params.title)\n    );\n  }\n  this.body.append(inner);\n\n  for (i = 0; i < ticks.length; i++) {\n    tick = jvm.$('<div/>').addClass('jvectormap-legend-tick');\n    sample = jvm.$('<div/>').addClass('jvectormap-legend-tick-sample');\n\n    switch (this.series.params.attribute) {\n      case 'fill':\n        if (jvm.isImageUrl(ticks[i].value)) {\n          sample.css('background', 'url('+ticks[i].value+')');\n        } else {\n          sample.css('background', ticks[i].value);\n        }\n        break;\n      case 'stroke':\n        sample.css('background', ticks[i].value);\n        break;\n      case 'image':\n        sample.css('background', 'url('+(typeof ticks[i].value === 'object' ? ticks[i].value.url : ticks[i].value)+') no-repeat center center');\n        break;\n      case 'r':\n        jvm.$('<div/>').css({\n          'border-radius': ticks[i].value,\n          border: this.map.params.markerStyle.initial['stroke-width']+'px '+\n                  this.map.params.markerStyle.initial['stroke']+' solid',\n          width: ticks[i].value * 2 + 'px',\n          height: ticks[i].value * 2 + 'px',\n          background: this.map.params.markerStyle.initial['fill']\n        }).appendTo(sample);\n        break;\n    }\n    tick.append( sample );\n    label = ticks[i].label;\n    if (this.params.labelRender) {\n      label = this.params.labelRender(label);\n    }\n    tick.append( jvm.$('<div>'+label+' </div>').addClass('jvectormap-legend-tick-text') );\n    inner.append(tick);\n  }\n  inner.append( jvm.$('<div/>').css('clear', 'both') );\n}/**\n * Creates data series.\n * @constructor\n * @param {Object} params Parameters to initialize series with.\n * @param {Array} params.values The data set to visualize.\n * @param {String} params.attribute Numeric, color or image attribute to use for data visualization. This could be: <code>fill</code>, <code>stroke</code>, <code>fill-opacity</code>, <code>stroke-opacity</code> for markers and regions and <code>r</code> (radius) or <code>image</code> for markers only.\n * @param {Array} params.scale Values used to map a dimension of data to a visual representation. The first value sets visualization for minimum value from the data set and the last value sets visualization for the maximum value. There also could be intermidiate values. Default value is <code>['#C8EEFF', '#0071A4']</code>.\n * @param {Function|String} params.normalizeFunction The function used to map input values to the provided scale. This parameter could be provided as function or one of the strings: <code>'linear'</code> or <code>'polynomial'</code>, while <code>'linear'</code> is used by default. The function provided takes value from the data set as an input and returns corresponding value from the scale.\n * @param {Number} params.min Minimum value of the data set. Could be calculated automatically if not provided.\n * @param {Number} params.max Maximum value of the data set. Could be calculated automatically if not provided.\n */\njvm.DataSeries = function (params, elements, map) {\n  var scaleConstructor;\n\n  params = params || {};\n  params.attribute = params.attribute || \"fill\";\n\n  this.elements = elements;\n  this.params = params;\n  this.map = map;\n\n  if (params.attributes) {\n    this.setAttributes(params.attributes);\n  }
1\n\n  if (jvm.$.isArray(params.scale)) {\n    scaleConstructor =\n      params.attribute === \"fill\" || params.attribute === \"stroke\"\n        ? jvm.ColorScale\n        : jvm.NumericScale;\n    this.scale = new scaleConstructor(\n      params.scale,\n      params.normalizeFunction,\n      params.min,\n      params.max,\n    );\n  } else if (params.scale) {\n    this.scale = new jvm.OrdinalScale(params.scale);\n  } else {\n    this.scale = new jvm.SimpleScale(params.scale);\n  }\n\n  this.values = params.values || {};\n  this.setValues(this.values);\n\n  if (this.params.legend) {\n    this.legend = new jvm.Legend(\n      jvm.$.extend(\n        {\n          map: this.map,\n          series: this,\n        },\n        this.params.legend,\n      ),\n    );\n  }\n};\n\njvm.DataSeries.prototype = {\n  setAttributes: function (key, attr) {\n    var attrs = key,\n      code;\n\n    if (typeof key == \"string\") {\n      if (this.elements[key]) {\n        this.elements[key].setStyle(this.params.attribute, attr);\n      }\n    } else {\n      for (code in attrs) {\n        if (this.elements[code]) {\n          this.elements[code].element.setStyle(\n            this.params.attribute,\n            attrs[code],\n          );\n        }\n      }\n    }\n  },\n\n  /**\n   * Set values for the data set.\n   * @param {Object} values Object which maps codes of regions or markers to values.\n   */\n  setValues: function (values) {\n    var max = -Number.MAX_VALUE,\n      min = Number.MAX_VALUE,\n      val,\n      cc,\n      attrs = {};\n\n    if (\n      !(this.scale instanceof jvm.OrdinalScale) &&\n      !(this.scale instanceof jvm.SimpleScale)\n    ) {\n      // we have a color scale as an array\n      if (\n        typeof this.params.min === \"undefined\" ||\n        typeof this.params.max === \"undefined\"\n      ) {\n        // min and/or max are not defined, so calculate them\n        for (cc in values) {\n          val = parseFloat(values[cc]);\n          if (val > max) max = val;\n          if (val < min) min = val;\n        }\n      }\n\n      if (typeof this.params.min === \"undefined\") {\n        this.scale.setMin(min);\n        this.params.min = min;\n      } else {\n        this.scale.setMin(this.params.min);\n      }\n\n      if (typeof this.params.max === \"undefined\") {\n        this.scale.setMax(max);\n        this.params.max = max;\n      } else {\n        this.scale.setMax(this.params.max);\n      }\n\n      for (cc in values) {\n        if (cc != \"indexOf\") {\n          val = parseFloat(values[cc]);\n          if (!isNaN(val)) {\n            attrs[cc] = this.scale.getValue(val);\n          } else {\n            attrs[cc] =\n              this.elements[cc].element.style.initial[this.params.attribute];\n          }\n        }\n      }\n    } else {\n      for (cc in values) {\n        if (values[cc]) {\n          attrs[cc] = this.scale.getValue(values[cc]);\n        } else {\n          attrs[cc] =\n            this.elements[cc].element.style.initial[this.params.attribute];\n        }\n      }\n    }\n\n    this.setAttributes(attrs);\n    jvm.$.extend(this.values, values);\n  },\n\n  clear: function () {\n    var key,\n      attrs = {};\n\n    for (key in this.values) {\n      if (this.elements[key]) {\n        attrs[key] =\n          this.elements[key].element.shape.style.initial[this.params.attribute];\n      }\n    }\n    this.setAttributes(attrs);\n    this.values = {};\n  },\n\n  clearAndSet: function (values) {\n    this.clear();\n    this.setValues(values);\n  },\n\n  /**\n   * Set scale of the data series.\n   * @param {Array} scale Values representing scale.\n   */\n  setScale: function (scale) {\n    this.scale.setScale(scale);\n    if (this.values) {\n      this.setValues(this.values);\n    }\n  },\n\n  /**\n   * Set normalize function of the data series.\n   * @param {Function|String} f Normalize function.\n   */\n  setNormalizeFunction: function (f) {\n    this.scale.setNormalizeFunction(f);\n    if (this.values) {\n      this.setValues(this.values);\n    }\n  },\n};\n/**\n * Contains methods for transforming point on sphere to\n * Cartesian coordinates using various projections.\n * @class\n */\njvm.Proj = {\n  degRad: 180 / Math.PI,\n  radDeg: Math.PI / 180,\n  radius: 6381372,\n\n  sgn: function(n){\n    if (n > 0) {\n      return 1;\n    } else if (n < 0) {\n      return -1;\n    } else {\n      return n;\n    }\n  },\n\n  /**\n   * Converts point on sphere to the Cartesian coordinates using Miller projection\n   * @param {Number} lat Latitude in degrees\n   * @param {Number} lng Longitude in degrees\n   * @param {Number} c Central meridian in degrees\n   */\n  mill: function(lat, lng, c){\n    return {\n      x: this.radius * (lng - c) * this.radDeg,\n      y: - this.radius * Math.log(Math.tan((45 + 0.4 * lat) * this.radDeg)) / 0.8\n    };\n  },\n\n  /**\n   * Inverse function of mill()\n   * Converts Cartesian coordinates to point on sphere using Miller projection\n   * @param {Number} x X of point in Cartesian system as integer\n   * @param {Number} y Y of point in Cartesian system as integer\n   * @param {Number} c Central meridian in degrees\n   */\n  mill_inv: function(x, y, c
1){\n    return {\n      lat: (2.5 * Math.atan(Math.exp(0.8 * y / this.radius)) - 5 * Math.PI / 8) * this.degRad,\n      lng: (c * this.radDeg + x / this.radius) * this.degRad\n    };\n  },\n\n  /**\n   * Converts point on sphere to the Cartesian coordinates using Mercator projection\n   * @param {Number} lat Latitude in degrees\n   * @param {Number} lng Longitude in degrees\n   * @param {Number} c Central meridian in degrees\n   */\n  merc: function(lat, lng, c){\n    return {\n      x: this.radius * (lng - c) * this.radDeg,\n      y: - this.radius * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360))\n    };\n  },\n\n  /**\n   * Inverse function of merc()\n   * Converts Cartesian coordinates to point on sphere using Mercator projection\n   * @param {Number} x X of point in Cartesian system as integer\n   * @param {Number} y Y of point in Cartesian system as integer\n   * @param {Number} c Central meridian in degrees\n   */\n  merc_inv: function(x, y, c){\n    return {\n      lat: (2 * Math.atan(Math.exp(y / this.radius)) - Math.PI / 2) * this.degRad,\n      lng: (c * this.radDeg + x / this.radius) * this.degRad\n    };\n  },\n\n  /**\n   * Converts point on sphere to the Cartesian coordinates using Albers Equal-Area Conic\n   * projection\n   * @see <a href=\"http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html\">Albers Equal-Area Conic projection</a>\n   * @param {Number} lat Latitude in degrees\n   * @param {Number} lng Longitude in degrees\n   * @param {Number} c Central meridian in degrees\n   */\n  aea: function(lat, lng, c){\n    var fi0 = 0,\n        lambda0 = c * this.radDeg,\n        fi1 = 29.5 * this.radDeg,\n        fi2 = 45.5 * this.radDeg,\n        fi = lat * this.radDeg,\n        lambda = lng * this.radDeg,\n        n = (Math.sin(fi1)+Math.sin(fi2)) / 2,\n        C = Math.cos(fi1)*Math.cos(fi1)+2*n*Math.sin(fi1),\n        theta = n*(lambda-lambda0),\n        ro = Math.sqrt(C-2*n*Math.sin(fi))/n,\n        ro0 = Math.sqrt(C-2*n*Math.sin(fi0))/n;\n\n    return {\n      x: ro * Math.sin(theta) * this.radius,\n      y: - (ro0 - ro * Math.cos(theta)) * this.radius\n    };\n  },\n\n  /**\n   * Converts Cartesian coordinates to the point on sphere using Albers Equal-Area Conic\n   * projection\n   * @see <a href=\"http://mathworld.wolfram.com/AlbersEqual-AreaConicProjection.html\">Albers Equal-Area Conic projection</a>\n   * @param {Number} x X of point in Cartesian system as integer\n   * @param {Number} y Y of point in Cartesian system as integer\n   * @param {Number} c Central meridian in degrees\n   */\n  aea_inv: function(xCoord, yCoord, c){\n    var x = xCoord / this.radius,\n        y = yCoord / this.radius,\n        fi0 = 0,\n        lambda0 = c * this.radDeg,\n        fi1 = 29.5 * this.radDeg,\n        fi2 = 45.5 * this.radDeg,\n        n = (Math.sin(fi1)+Math.sin(fi2)) / 2,\n        C = Math.cos(fi1)*Math.cos(fi1)+2*n*Math.sin(fi1),\n        ro0 = Math.sqrt(C-2*n*Math.sin(fi0))/n,\n        ro = Math.sqrt(x*x+(ro0-y)*(ro0-y)),\n        theta = Math.atan( x / (ro0 - y) );\n\n    return {\n      lat: (Math.asin((C - ro * ro * n * n) / (2 * n))) * this.degRad,\n      lng: (lambda0 + theta / n) * this.degRad\n    };\n  },\n\n  /**\n   * Converts point on sphere to the Cartesian coordinates using Lambert conformal\n   * conic projection\n   * @see <a href=\"http://mathworld.wolfram.com/LambertConformalConicProjection.html\">Lambert Conformal Conic Projection</a>\n   * @param {Number} lat Latitude in degrees\n   * @param {Number} lng Longitude in degrees\n   * @param {Number} c Central meridian in degrees\n   */\n  lcc: function(lat, lng, c){\n    var fi0 = 0,\n        lambda0 = c * this.radDeg,\n        lambda = lng * this.radDeg,\n        fi1 = 33 * this.radDeg,\n        fi2 = 45 * this.radDeg,\n        fi = lat * this.radDeg,\n        n = Math.log( Math.cos(fi1) * (1 / Math.cos(fi2)) ) / Math.log( Math.tan( Math.PI / 4 + fi2 / 2) * (1 / Math.tan( Math.PI / 4 + fi1 / 2) ) ),\n        F = ( Math.
1cos(fi1) * Math.pow( Math.tan( Math.PI / 4 + fi1 / 2 ), n ) ) / n,\n        ro = F * Math.pow( 1 / Math.tan( Math.PI / 4 + fi / 2 ), n ),\n        ro0 = F * Math.pow( 1 / Math.tan( Math.PI / 4 + fi0 / 2 ), n );\n\n    return {\n      x: ro * Math.sin( n * (lambda - lambda0) ) * this.radius,\n      y: - (ro0 - ro * Math.cos( n * (lambda - lambda0) ) ) * this.radius\n    };\n  },\n\n  /**\n   * Converts Cartesian coordinates to the point on sphere using Lambert conformal conic\n   * projection\n   * @see <a href=\"http://mathworld.wolfram.com/LambertConformalConicProjection.html\">Lambert Conformal Conic Projection</a>\n   * @param {Number} x X of point in Cartesian system as integer\n   * @param {Number} y Y of point in Cartesian system as integer\n   * @param {Number} c Central meridian in degrees\n   */\n  lcc_inv: function(xCoord, yCoord, c){\n    var x = xCoord / this.radius,\n        y = yCoord / this.radius,\n        fi0 = 0,\n        lambda0 = c * this.radDeg,\n        fi1 = 33 * this.radDeg,\n        fi2 = 45 * this.radDeg,\n        n = Math.log( Math.cos(fi1) * (1 / Math.cos(fi2)) ) / Math.log( Math.tan( Math.PI / 4 + fi2 / 2) * (1 / Math.tan( Math.PI / 4 + fi1 / 2) ) ),\n        F = ( Math.
1cos(fi1) * Math.pow( Math.tan( Math.PI / 4 + fi1 / 2 ), n ) ) / n,\n        ro0 = F * Math.pow( 1 / Math.tan( Math.PI / 4 + fi0 / 2 ), n ),\n        ro = this.sgn(n) * Math.sqrt(x*x+(ro0-y)*(ro0-y)),\n        theta = Math.atan( x / (ro0 - y) );\n\n    return {\n      lat: (2 * Math.atan(Math.pow(F/ro, 1/n)) - Math.PI / 2) * this.degRad,\n      lng: (lambda0 + theta / n) * this.degRad\n    };\n  }\n};jvm.MapObject = function(config){};\n\njvm.MapObject.prototype.getLabelText = function(key){\n  var text;\n\n  if (this.config.label) {\n    if (typeof this.config.label.render === 'function') {\n      text = this.config.label.render(key);\n    } else {\n      text = key;\n    }\n  } else {\n    text = null;\n  }\n  return text;\n}\n\njvm.MapObject.prototype.getLabelOffsets = function(key){\n  var offsets;\n\n  if (this.config.label) {\n    if (typeof this.config.label.offsets === 'function') {\n      offsets = this.config.label.offsets(key);\n    } else if (typeof this.config.label.offsets === 'object') {\n      offsets = this.config.label.offsets[key];\n    }\n  }\n  return offsets || [0, 0];\n}\n\n/**\n * Set hovered state to the element. Hovered state means mouse cursor is over element. Styles will be updates respectively.\n * @param {Boolean} isHovered <code>true</code> to make element hovered, <code>false</code> otherwise.\n */\njvm.MapObject.prototype.setHovered = function(isHovered){\n  if (this.isHovered !== isHovered) {\n    this.isHovered = isHovered;\n    this.shape.isHovered = isHovered;\n    this.shape.updateStyle();\n    if (this.label) {\n      this.label.isHovered = isHovered;\n      this.label.updateStyle();\n    }\n  }\n};\n\n/**\n * Set selected state to the element. Styles will be updates respectively.\n * @param {Boolean} isSelected <code>true</code> to make element selected, <code>false</code> otherwise.\n */\njvm.MapObject.prototype.setSelected = function(isSelected){\n  if (this.isSelected !== isSelected) {\n    this.isSelected = isSelected;\n    this.shape.isSelected = isSelected;\n    this.shape.updateStyle();\n    if (this.label) {\n      this.label.isSelected = isSelected;\n      this.label.updateStyle();\n    }\n    jvm.$(this.shape).trigger('selected', [isSelected]);\n  }\n};\n\njvm.MapObject.prototype.setStyle = function(){\n	this.shape.setStyle.apply(this.shape, arguments);\n};\n\njvm.MapObject.prototype.remove = function(){\n  this.shape.remove();\n  if (this.label) {\n    this.label.remove();\n  }\n};jvm.Region = function(config){\n  var bbox,\n      text,\n      offsets,\n      labelDx,\n      labelDy;\n\n  this.config = config;\n  this.map = this.config.map;\n\n  this.shape = config.canvas.addPath({\n    d: config.path,\n    'data-code': config.code\n  }, config.style, config.canvas.rootElement);\n  this.shape.addClass('jvectormap-region jvectormap-element');\n\n  bbox = this.shape.getBBox();\n\n  text = this.getLabelText(config.code);\n  if (this.config.label && text) {\n    offsets = this.getLabelOffsets(config.code);\n    this.labelX = bbox.x + bbox.width / 2 + offsets[0];\n    this.labelY = bbox.y + bbox.height / 2 + offsets[1];\n    this.label = config.canvas.addText({\n      text: text,\n      'text-anchor': 'middle',\n      'alignment-baseline': 'central',\n      x: this.labelX,\n      y: this.labelY,\n      'data-code': config.code\n    }, config.labelStyle, config.labelsGroup);\n    this.label.addClass('jvectormap-region jvectormap-element');\n  }\n};\n\njvm.inherits(jvm.Region, jvm.MapObject);\n\njvm.Region.prototype.updateLabelPosition = function(){\n  if (this.label) {\n    this.label.set({\n      x: this.labelX * this.map.scale + this.map.transX * this.map.scale,\n      y: this.labelY * this.map.scale + this.map.transY * this.map.scale\n    });\n  }\n};jvm.Marker = function(config){\n  var text,\n      offsets;\n\n  this.config = config;\n  this.map = this.config.map;\n\n  this.isImage = !!this.config.style.initial.image;\n  this.createShape();\n\n  text = this.getLabelText(config.index);\n  if (this.config.label && text) {\n    this.offsets = this.getLabelOffsets(config.index);\n    this.labelX = config.cx / this.map.scale - this.map.transX;\n    this.labelY = config.cy / this.map.scale - this.map.transY;\n    this.label = config.canvas.addText({\n      text: text,\n      'data-index': config.index,\n      dy: \"0.6ex\",\n      x: this.labelX,\n      y: this.labelY\n    }, config.labelStyle, config.labelsGroup);\n\n    this.label.addClass('jvectormap-marker jvectormap-element');\n  }\n};\n\njvm.inherits(jvm.Marker, jvm.MapObject);\n\njvm.Marker.prototype.createShape = function(){\n  var that = this;\n\n  if (this.shape) {\n    this.shape.remove();\n  }\n  this.shape = this.config.canvas[this.isImage ? 'addImage' : 'addCircle']({\n    \"data-index\": this.config.index,\n    cx: this.config.cx,\n    cy: this.config.cy\n  }, this.config.style, this.config.group);\n\n  this.shape.addClass('jvectormap-marker jvectormap-element');\n\n  if (this.isImage) {\n    jvm.$(this.shape.node).on('imageloaded', function(){\n      that.updateLabelPosition();\n    });\n  }\n};\n\njvm.Marker.prototype.updateLabelPosition = function(){\n  if (this.label) {\n    this.label.set({\n      x: this.labelX * this.map.scale + this.offsets[0] +\n         this.map.transX * this.map.scale + 5 + (this.isImage ? (this.shape.width || 0) / 2 : this.shape.properties.r),\n      y: this.labelY * this.map.scale + this.map.transY * this.map.scale + this.offsets[1]\n    });\n  }\n};\n\njvm.Marker.prototype.setStyle = function(property, value){\n  var isImage;\n\n  jvm.Marker.parentClass.prototype.setStyle.apply(this, arguments);\n\n  if (property === 'r') {\n    this.updateLabelPosition();\n  }\n\n  isImage = !!this.shape.get('image');\n  if (isImage != this.isImage) {\n    this.isImage = isImage;\n    this.config.style = jvm.$.extend(true, {}, this.shape.style);\n    this.createShape();\n  }\n};/**\n * Creates map, draws paths, binds events.\n * @constructor\n * @param {Object} params Parameters to initialize map with.\n * @param {String} params.map Name of the map in the format <code>territory_proj_lang</code> where <code>territory</code> is a unique code or name of the territory which the map represents (ISO 3166 standard is used where possible), <code>proj</code> is a name of projection used to generate representation of the map on the plane (projections are named according to the conventions of proj4 utility) and <code>lang</code> is a code of the language, used for the names of regions.\n * @param {String}
1 params.backgroundColor Background color of the map in CSS format.\n * @param {Boolean} params.zoomOnScroll When set to true map could be zoomed using mouse scroll. Default value is <code>true</code>.\n * @param {Number} params.zoomOnScrollSpeed Mouse scroll speed. Number from 1 to 10. Default value is <code>3</code>.\n * @param {Boolean} params.panOnDrag When set to true, the map pans when being dragged. Default value is <code>true</code>.\n * @param {Number} params.zoomMax Indicates the maximum zoom ratio which could be reached zooming the map. Default value is <code>8</code>.\n * @param {Number} params.zoomMin Indicates the minimum zoom ratio which could be reached zooming the map. Default value is <code>1</code>.\n * @param {Number} params.zoomStep Indicates the multiplier used to zoom map with +/- buttons. Default value is <code>1.6</code>.\n * @param {Boolean} params.zoomAnimate Indicates whether or not to animate changing of map zoom with zoom buttons.\n * @param {Boolean} params.regionsSelectable When set to true regions of the map could be selected. Default value is <code>false</code>.\n * @param {Boolean} params.regionsSelectableOne Allow only one region to be selected at the moment. Default value is <code>false</code>.\n * @param {Boolean} params.markersSelectable When set to true markers on the map could be selected. Default value is <code>false</code>.\n * @param {Boolean} params.markersSelectableOne Allow only one marker to be selected at the moment. Default value is <code>false</code>.\n * @param {Object} params.regionStyle Set the styles for the map's regions. Each region or marker has four states: <code>initial</code> (default state), <code>hover</code>
1 (when the mouse cursor is over the region or marker), <code>selected</code> (when region or marker is selected), <code>selectedHover</code> (when the mouse cursor is over the region or marker and it's selected simultaneously). Styles could be set for each of this states. Default value for that parameter is:\n<pre>{\n  initial: {\n    fill: 'white',\n    \"fill-opacity\": 1,\n    stroke: 'none',\n    \"stroke-width\": 0,\n    \"stroke-opacity\": 1\n  },\n  hover: {\n    \"fill-opacity\": 0.8,\n    cursor: 'pointer'\n  },\n  selected: {\n    fill: 'yellow'\n  },\n  selectedHover: {\n  }\n}</pre>\n* @param {Object} params.regionLabelStyle Set the styles for the regions' labels. Each region or marker has four states: <code>initial</code> (default state), <code>hover</code> (when the mouse cursor is over the region or marker), <code>selected</code> (when region or marker is selected), <code>selectedHover</code> (when the mouse cursor is over the region or marker and it's selected simultaneously). Styles could be set for each of this states. Default value for that parameter is:\n<pre>{\n  initial: {\n    'font-family': 'Verdana',\n    'font-size': '12',\n    'font-weight': 'bold',\n    cursor: 'default',\n    fill: 'black'\n  },\n  hover: {\n    cursor: 'pointer'\n  }\n}</pre>\n * @param {Object} params.markerStyle Set the styles for the map's markers. Any parameter suitable for <code>regionStyle</code> could be used as well as numeric parameter <code>r</code> to set the marker's radius. Default value for that parameter is:\n<pre>{\n  initial: {\n    fill: 'grey',\n    stroke: '#505050',\n    \"fill-opacity\": 1,\n    \"stroke-width\": 1,\n    \"stroke-opacity\": 1,\n    r: 5\n  },\n  hover: {\n    stroke: 'black',\n    \"stroke-width\": 2,\n    cursor: 'pointer'\n  },\n  selected: {\n    fill: 'blue'\n  },\n  selectedHover: {\n  }\n}</pre>\nYou can also use <code>image</code> style attribute for markers. By default marker images are centered with the target point on map. To supply a custom offset please use the following format:\n<pre>{\n  url: 'image/url',\n  offset: [-10, 5]\n}</pre>\n * @param {Object} params.markerLabelStyle Set the styles for the markers' labels. Default value for that parameter is:\n<pre>{\n  initial: {\n    'font-family': 'Verdana',\n    'font-size': '12',\n    'font-weight': 'bold',\n    cursor: 'default',\n    fill: 'black'\n  },\n  hover: {\n    cursor: 'pointer'\n  }\n}</pre>\n * @param {Object|Array} params.markers Set of markers to add to the map during initialization. In case of array is provided, codes of markers will be set as string representations of array indexes. Each marker is represented by <code>latLng</code> (array of two numeric values), <code>name</code> (string which will be show on marker's tip) and any marker styles.\n * @param {Object} params.series Object with two keys: <code>markers</code> and <code>regions</code>. Each of which is an array of series configs to be applied to the respective map elements. See <a href=\"jvm.DataSeries.html\">DataSeries</a> description for a list of parameters available.\n * @param {Object|String} params.focusOn This parameter sets the initial position and scale of the map viewport. See <code>setFocus</code> docuemntation for possible parameters.\n * @param {Object} params.labels Defines parameters for rendering static labels. Object could contain two keys: <code>regions</code> and <code>markers</code>. Each key value defines configuration object with the following possible options:\n<ul>\n  <li><code>render {Function}</code> - defines method for converting region code or marker index to actual label value.</li>\n  <li><code>offsets {Object|Function}</code> - provides method or object which could be used to define label offset by region code or marker index.</li>\n</ul>\n<b>Plase note: static labels feature is not supported in Internet Explorer 8 and below.</b>\n * @param {Array|Object|String} params.selectedRegions Set initially selected regions.\n * @param {Array|Object|String} params.selectedMarkers Set initially selected markers.\n * @param {Function} params.onRegionTipShow <code>(Event e, Object tip, String code)</code> Will be called right before the region tip is going to be shown.\n * @param {Function} params.onRegionOver <code>(Event e, String code)</code> Will be called on region mouse over event.\n * @param {Function} params.onRegionOut <code>(Event e, String code)</code> Will be called on region mouse out event.\n * @param {Function} params.onRegionClick <code>(Event e, String code)</code> Will be called on region click event.\n * @param {Function} params.onRegionSelected <code>(Event e, String code, Boolean isSelected, Array selectedRegions)</code> Will be called when region is (de)selected. <code>isSelected</code> parameter of the callback indicates whether region is selected or not. <code>selectedRegions</code>
1 contains codes of all currently selected regions.\n * @param {Function} params.onMarkerTipShow <code>(Event e, Object tip, String code)</code> Will be called right before the marker tip is going to be shown.\n * @param {Function} params.onMarkerOver <code>(Event e, String code)</code> Will be called on marker mouse over event.\n * @param {Function} params.onMarkerOut <code>(Event e, String code)</code> Will be called on marker mouse out event.\n * @param {Function} params.onMarkerClick <code>(Event e, String code)</code> Will be called on marker click event.\n * @param {Function} params.onMarkerSelected <code>(Event e, String code, Boolean isSelected, Array selectedMarkers)</code> Will be called when marker is (de)selected. <code>isSelected</code> parameter of the callback indicates whether marker is selected or not. <code>selectedMarkers</code> contains codes of all currently selected markers.\n * @param {Function} params.onViewportChange <code>(Event e, Number scale)</code> Triggered when the map's viewport is changed (map was panned or zoomed).\n */\njvm.Map = function (params) {\n  var map = this,\n    e;\n\n  this.params = jvm.$.extend(true, {}, jvm.Map.defaultParams, params);\n\n  if (!jvm.Map.maps[this.params.map]) {\n    throw new Error(\n      \"Attempt to use map which was not loaded: \" + this.params.map,\n    );\n  }\n\n  this.mapData = jvm.Map.maps[this.params.map];\n  this.markers = {};\n  this.regions = {};\n  this.regionsColors = {};\n  this.regionsData = {};\n\n  this.container = jvm.$(\"<div>\").addClass(\"jvectormap-container\");\n  if (this.params.container) {\n    this.params.container.append(this.container);\n  }\n  this.container.data(\"mapObject\", this);\n\n  this.defaultWidth = this.mapData.width;\n  this.defaultHeight = this.mapData.height;\n\n  this.setBackgroundColor(this.params.backgroundColor);\n\n  this.onResize = function () {\n    map.updateSize();\n  };\n  jvm.$(window).resize(this.onResize);\n\n  for (e in jvm.Map.apiEvents) {\n    if (this.params[e]) {\n      this.container.bind(jvm.Map.apiEvents[e] + \".jve
1ctormap\", this.params[e]);\n    }\n  }\n\n  this.canvas = new jvm.VectorCanvas(\n    this.container[0],\n    this.width,\n    this.height,\n  );\n\n  if (this.params.bindTouchEvents) {\n    if (\n      \"ontouchstart\" in window ||\n      (window.DocumentTouch && document instanceof DocumentTouch)\n    ) {\n      this.bindContainerTouchEvents();\n    } else if (window.MSGesture) {\n      this.bindContainerPointerEvents();\n    }\n  }\n  this.bindContainerEvents();\n  this.bindElementEvents();\n  this.createTip();\n  if (this.params.zoomButtons) {\n    this.bindZoomButtons();\n  }\n\n  this.createRegions();\n  this.createMarkers(this.params.markers || {});\n\n  this.updateSize();\n\n  if (this.params.focusOn) {\n    if (typeof this.params.focusOn === \"string\") {\n      this.params.focusOn = { region: this.params.focusOn };\n    } else if (jvm.$.isArray(this.params.focusOn)) {\n      this.params.focusOn = { regions: this.params.focusOn };\n    }\n    this.setFocus(this.params.focusOn);\n  }\n\n  if (this.params.selectedRegions) {\n    this.setSelectedRegions(this.params.selectedRegions);\n  }\n  if (this.params.selectedMarkers) {\n    this.setSelectedMarkers(this.params.selectedMarkers);\n  }\n\n  this.legendCntHorizontal = jvm\n    .$(\"<div/>\")\n    .addClass(\"jvectormap-legend-cnt jvectormap-legend-cnt-h\");\n  this.legendCntVertical = jvm\n    .$(\"<div/>\")\n    .addClass(\"jvectormap-legend-cnt jvectormap-legend-cnt-v\");\n  this.container.append(this.legendCntHorizontal);\n  this.container.append(this.legendCntVertical);\n\n  if (this.params.series) {\n    this.createSeries();\n  }\n};\n\njvm.Map.prototype = {\n  transX: 0,\n  transY: 0,\n  scale: 1,\n  baseTransX: 0,\n  baseTransY: 0,\n  baseScale: 1,\n\n  width: 0,\n  height: 0,\n\n  /**\n   * Set background color of the map.\n   * @param {String}
1 backgroundColor Background color in CSS format.\n   */\n  setBackgroundColor: function (backgroundColor) {\n    this.container.css(\"background-color\", backgroundColor);\n  },\n\n  resize: function () {\n    var curBaseScale = this.baseScale;\n    if (this.width / this.height > this.defaultWidth / this.defaultHeight) {\n      this.baseScale = this.height / this.defaultHeight;\n      this.baseTransX =\n        Math.abs(this.width - this.defaultWidth * this.baseScale) /\n        (2 * this.baseScale);\n    } else {\n      this.baseScale = this.width / this.defaultWidth;\n      this.baseTransY =\n        Math.abs(this.height - this.defaultHeight * this.baseScale) /\n        (2 * this.baseScale);\n    }\n    this.scale *= this.baseScale / curBaseScale;\n    this.transX *= this.baseScale / curBaseScale;\n    this.transY *= this.baseScale / curBaseScale;\n  },\n\n  /**\n   * Synchronize the size of the map with the size of the container. Suitable in situations where the size of the container is changed programmatically or container is shown after it became visible.\n   */\n  updateSize: function () {\n    this.width = this.container.width();\n    this.height = this.container.height();\n    this.resize();\n    this.canvas.setSize(this.width, this.height);\n    this.applyTransform();\n  },\n\n  /**\n   * Reset all the series and show the map with the initial zoom.\n   */\n  reset: function () {\n    var key, i;\n\n    for (key in this.series) {\n      for (i = 0; i < this.series[key].length; i++) {\n        this.series[key][i].clear();\n      }\n    }\n    this.scale = this.baseScale;\n    this.transX = this.baseTransX;\n    this.transY = this.baseTransY;\n    this.applyTransform();\n  },\n\n  applyTransform: function () {\n    var maxTransX, maxTransY, minTransX, minTransY;\n\n    if (this.defaultWidth * this.scale <= this.width) {\n      maxTransX =\n        (this.width - this.defaultWidth * this.scale) / (2 * this.scale);\n      minTransX =\n        (this.width - this.defaultWidth * this.scale) / (2 * this.scale);\n    } else {\n      maxTransX = 0;\n      minTransX = (this.width - this.defaultWidth * this.scale) / this.scale;\n    }\n\n    if (this.defaultHeight * this.scale <= this.height) {\n      maxTransY =\n        (this.height - this.defaultHeight * this.scale) / (2 * this.scale);\n      minTransY =\n        (this.height - this.defaultHeight * this.scale) / (2 * this.scale);\n    } else {\n      maxTransY = 0;\n      minTransY = (this.height - this.defaultHeight * this.scale) / this.scale;\n    }\n\n    if (this.transY > maxTransY) {\n      this.transY = maxTransY;\n    } else if (this.transY < minTransY) {\n      this.transY = minTransY;\n    }\n    if (this.transX > maxTransX) {\n      this.transX = maxTransX;\n    } else if (this.transX < minTransX) {\n      this.transX = minTransX;\n    }\n\n    this.canvas.applyTransformParams(this.scale, this.transX, this.transY);\n\n    if (this.markers) {\n      this.repositionMarkers();\n    }\n\n    this.repositionLabels();\n\n    this.container.trigger(\"viewportChange\", [\n      this.scale / this.baseScale,\n      this.transX,\n      this.transY,\n    ]);\n  },\n\n  bindContainerEvents: function () {\n    var mouseDown = false,\n      oldPageX,\n      oldPageY,\n      map = this;\n\n    if (this.params.panOnDrag) {\n      this.container\n        .mousemove(function (e) {\n          if (mouseDown) {\n            map.transX -= (oldPageX - e.pageX) / map.scale;\n            map.transY -= (oldPageY - e.pageY) / map.scale;\n\n            map.applyTransform();\n\n            oldPageX = e.pageX;\n            oldPageY = e.pageY;\n          }\n          return false;\n        })\n        .mousedown(function (e) {\n          mouseDown = true;\n          oldPageX = e.pageX;\n          oldPageY = e.pageY;\n          return false;\n        });\n\n      this.onContainerMouseUp = function () {\n        mouseDown = false;\n      };\n      jvm.$(\"body\").mouseup(this.onContainerMouseUp);\n    }\n\n    if (this.params.zoomOnScroll) {\n      this.container.mousewheel(function (event, delta, deltaX, deltaY) {\n        var offset = jvm.$(map.container).offset(),\n          centerX = event.pageX - offset.left,\n          centerY = event.pageY - offset.top,\n          zoomStep 
1= Math.pow(\n            1 + map.params.zoomOnScrollSpeed / 1000,\n            event.deltaFactor * event.deltaY,\n          );\n\n        map.tip.hide();\n\n        map.setScale(map.scale * zoomStep, centerX, centerY);\n        event.preventDefault();\n      });\n    }\n  },\n\n  bindContainerTouchEvents: function () {\n    var touchStartScale,\n      touchStartDistance,\n      map = this,\n      touchX,\n      touchY,\n      centerTouchX,\n      centerTouchY,\n      lastTouchesLength,\n      handleTouchEvent = function (e) {\n        var touches = e.originalEvent.touches,\n          offset,\n          scale,\n          transXOld,\n          transYOld;\n\n        if (e.type == \"touchstart\") {\n          lastTouchesLength = 0;\n        }\n\n        if (touches.length == 1) {\n          if (lastTouchesLength == 1) {\n            transXOld = map.transX;\n            transYOld = map.transY;\n            map.transX -= (touchX - touches[0].pageX) / map.scale;\n            map.transY -= (touchY - touches[0].pageY) / map.scale;\n            map.applyTransform();\n            map.tip.hide();\n            if (transXOld != map.transX || transYOld != map.transY) {\n              e.preventDefault();\n            }\n          }\n          touchX = touches[0].pageX;\n          touchY = touches[0].pageY;\n        } else if (touches.length == 2) {\n          if (lastTouchesLength == 2) {\n            scale =\n              Math.sqrt(\n                Math.pow(touches[0].pageX - touches[1].pageX, 2) +\n                  Math.pow(touches[0].pageY - touches[1].pageY, 2),\n              ) / touchStartDistance;\n            map.setScale(touchStartScale * scale, centerTouchX, centerTouchY);\n            map.tip.hide();\n            e.preventDefault();\n          } else {\n            offset = jvm.$(map.container).offset();\n            if (touches[0].pageX > touches[1].pageX) {\n              centerTouchX =\n                touches[1].pageX + (touches[0].pageX - touches[1].pageX) / 2;\n            } else {\n              centerTouchX =\n                touches[0].pageX + (touches[1].pageX - touches[0].pageX) / 2;\n            }\n            if (touches[0].pageY > touches[1].pageY) {\n              centerTouchY =\n                touches[1].pageY + (touches[0].pageY - touches[1].pageY) / 2;\n            } else {\n              centerTouchY =\n                touches[0].pageY + (touches[1].pageY - touches[0].pageY) / 2;\n            }\n            centerTouchX -= offset.left;\n            centerTouchY -= offset.top;\n            touchStartScale = map.scale;\n            touchStartDistance = Math.sqrt(\n              Math.pow(touches[0].pageX - touches[1].pageX, 2) +\n                Math.pow(touches[0].pageY - touches[1].pageY, 2),\n            );\n          }\n        }\n\n        lastTouchesLength = touches.length;\n      };\n\n    jvm.$(this.container).bind(\"touchstart\", handleTouchEvent);\n    jvm.$(this.container).bind(\"touchmove\", handleTouchEvent);\n  },\n\n  bindContainerPointerEvents: function () {\n    var map = this,\n      gesture = new MSGesture(),\n      element = this.container[0],\n      handlePointerDownEvent = function (e) {\n        gesture.addPointer(e.pointerId);\n      },\n      handleGestureEvent = function (e) {\n        var offset, scale, transXOld, transYOld;\n\n        if (e.translationX != 0 || e.translationY != 0) {\n          transXOld = map.transX;\n          transYOld = map.transY;\n          map.transX += e.translationX / map.scale;\n          map.transY += e.translationY / map.scale;\n          map.applyTransform();\n          map.tip.hide();\n          if (transXOld != map.transX || transYOld != map.transY) {\n            e.preventDefault();\n          }\n        }\n        if (e.scale != 1) {\n          map.setScale(map.scale * e.scale, e.offsetX, e.offsetY);\n          map.tip.hide();\n          e.preventDefault();\n        }\n      };\n\n    gesture.target = element;\n    element.addEventListener(\"MSGestureChange\", handleGestureEvent, false);\n    element.addEventListener(\"pointerdown\", handlePointerDownEvent, false);\n  },\n\n  bindElementEvents: function () {\n    var map = this,\n      pageX,\n      pageY,\n      mouseMoved;\n\n    this.container.mousemove(function (e) {\n      if (Math.abs(pageX - e.pageX) + Math.abs(pageY - e.pageY) > 2) {\n        mouseMoved = true;\n      }\n    });\n\n    /* Can not use common class selectors here because of the bug in jQuery\n       SVG handling, use with caution. */\n    this.container.delegate(\n      \"[class~='jvectormap-element']\",\n      \"mouseover mouseout\",\n      function (e) {\n        var baseVal =\n            jvm.$(this).attr(\"class\").baseVal || jvm.$(this).attr(\"class\"),\n          type =\n            baseVal.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"regi
1on\",\n          code =\n            type == \"region\"\n              ? jvm.$(this).attr(\"data-code\")\n              : jvm.$(this).attr(\"data-index\"),\n          element =\n            type == \"region\"\n              ? map.regions[code].element\n              : map.markers[code].element,\n          tipText =\n            type == \"region\"\n              ? map.mapData.paths[code].name\n              : map.markers[code].config.name || \"\",\n          tipShowEvent = jvm.$.Event(type + \"TipShow.jvectormap\"),\n          overEvent = jvm.$.Event(type + \"Over.jvectormap\");\n\n        if (e.type == \"mouseover\") {\n          map.container.trigger(overEvent, [code]);\n          if (!overEvent.isDefaultPrevented()) {\n            element.setHovered(true);\n          }\n\n          map.tip.text(tipText);\n          map.container.trigger(tipShowEvent, [map.tip, code]);\n          if (!tipShowEvent.isDefaultPrevented()) {\n            map.tip.show();\n            map.tipWidth = map.tip.width();\n            map.tipHeight = map.tip.height();\n          }\n        } else {\n          element.setHovered(false);\n          map.tip.hide();\n          map.container.trigger(type + \"Out.jvectormap\", [code]);\n        }\n      },\n    );\n\n    /* Can not use common class selectors here because of the bug in jQuery\n       SVG handling, use with caution. */\n    this.container.delegate(\n      \"[class~='jvectormap-element']\",\n      \"mousedown\",\n      function (e) {\n        pageX = e.pageX;\n        pageY = e.pageY;\n        mouseMoved = false;\n      },\n    );\n\n    /* Can not use common class selectors here because of the bug in jQuery\n       SVG handling, use with caution. */\n    this.container.delegate(\n      \"[class~='jvectormap-element']\",\n      \"mouseup\",\n      function () {\n        var baseVal = jvm.$(this).attr(\"class\").baseVal\n            ? jvm.$(this).attr(\"class\").baseVal\n            : jvm.$(this).attr(\"class\"),\n          type =\n            baseVal.indexOf(\"jvectormap-region\") === -1 ? \"marker\" : \"regi
1on\",\n          code =\n            type == \"region\"\n              ? jvm.$(this).attr(\"data-code\")\n              : jvm.$(this).attr(\"data-index\"),\n          clickEvent = jvm.$.Event(type + \"Click.jvectormap\"),\n          element =\n            type == \"region\"\n              ? map.regions[code].element\n              : map.markers[code].element;\n\n        if (!mouseMoved) {\n          map.container.trigger(clickEvent, [code]);\n          if (\n            (type === \"region\" && map.params.regionsSelectable) ||\n            (type === \"marker\" && map.params.markersSelectable)\n          ) {\n            if (!clickEvent.isDefaultPrevented()) {\n              if (map.params[type + \"sSelectableOne\"]) {\n                map.clearSelected(type + \"s\");\n              }\n              element.setSelected(!element.isSelected);\n            }\n          }\n        }\n      },\n    );\n  },\n\n  bindZoomButtons: function () {\n    var map = this;\n\n    jvm\n      .$(\"<div/>\")\n      .addClass(\"jvectormap-zoomin\")\n      .text(\"+\")\n      .appendTo(this.container);\n    jvm\n      .$(\"<div/>\")\n      .addClass(\"jvectormap-zoomout\")\n      .html(\"&#x2212;\")\n      .appendTo(this.container);\n\n    this.container.find(\".jvectormap-zoomin\").click(function () {\n      map.setScale(\n        map.scale * map.params.zoomStep,\n        map.width / 2,\n        map.height / 2,\n        false,\n        map.params.zoomAnimate,\n      );\n    });\n    this.container.find(\".jvectormap-zoomout\").click(function () {\n      map.setScale(\n        map.scale / map.params.zoomStep,\n        map.width / 2,\n        map.height / 2,\n        false,\n        map.params.zoomAnimate,\n      );\n    });\n  },\n\n  createTip: function () {\n    var map = this;\n\n    this.tip = jvm\n      .$(\"<div/>\")\n      .addClass(\"jvectormap-tip\")\n      .appendTo(jvm.$(\"body\"));\n\n    this.container.mousemove(function (e) {\n      var left = e.pageX - 15 - map.tipWidth,\n        top = e.pageY - 15 - map.tipHeight;\n\n      if (left < 5) {\n        left = e.pageX + 15;\n      }\n      if (top < 5) {\n        top = e.pageY + 15;\n      }\n\n      map.tip.css({\n        left: left,\n        top: top,\n      });\n    });\n  },\n\n  setScale: function (scale, anchorX, anchorY, isCentered, animate) {\n    var viewportChangeEvent = jvm.$.Event(\"zoom.jvectormap\"),\n      interval,\n      that = this,\n      i = 0,\n      count = Math.abs(\n        Math.round(((scale - this.scale) * 60) / Math.max(scale, this.scale)),\n      ),\n      scaleStart,\n      scaleDiff,\n      transXStart,\n      transXDiff,\n      transYStart,\n      transYDiff,\n      transX,\n      transY,\n      deferred = new jvm.$.Deferred();\n\n    if (scale > this.params.zoomMax * this.baseScale) {\n      scale = this.params.zoomMax * this.baseScale;\n    } else if (scale < this.params.zoomMin * this.baseScale) {\n      scale = this.params.zoomMin * this.baseScale;\n    }\n\n    if (typeof anchorX != \"undefined\" && typeof anchorY != \"undefined\") {\n      const zoomStep = scale / this.scale;\n      if (isCentered) {\n        transX =\n          anchorX +\n          (this.defaultWidth * (this.width / (this.defaultWidth * scale))) / 2;\n        transY =\n          anchorY +\n          (this.defaultHeight * (this.height / (this.defaultHeight * scale))) /\n            2;\n      } else {\n        transX = this.transX - ((zoomStep - 1) / scale) * anchorX;\n        transY = this.transY - ((zoomStep - 1) / scale) * anchorY;\n      }\n    }\n\n    if (animate && count > 0) {\n      scaleStart = this.scale;\n      scaleDiff = (scale - scaleStart) / count;\n      transXStart = this.transX * this.scale;\n      transYStart = this.transY * this.scale;\n      transXDiff = (transX * scale - transXStart) / count;\n      transYDiff = (transY * scale - transYStart) / count;\n      interval = setInterval(function () {\n        i += 1;\n        that.scale = scaleStart + scaleDiff * i;\n        that.transX = (transXStart + transXDiff * i) / that.scale;
1\n        that.transY = (transYStart + transYDiff * i) / that.scale;\n        that.applyTransform();\n        if (i == count) {\n          clearInterval(interval);\n          that.container.trigger(viewportChangeEvent, [scale / that.baseScale]);\n          deferred.resolve();\n        }\n      }, 10);\n    } else {\n      this.transX = transX;\n      this.transY = transY;\n      this.scale = scale;\n      this.applyTransform();\n      this.container.trigger(viewportChangeEvent, [scale / this.baseScale]);\n      deferred.resolve();\n    }\n\n    return deferred;\n  },\n\n  /**\n   * Set the map's viewport to the specific point and set zoom of the map to the specific level. Point and zoom level could be defined in two ways: using the code of some region to focus on or a central point and zoom level as numbers.\n   * @param This method takes a configuration object as the single argument. The options passed to it are the following:\n   * @param {Array} params.regions Array of region codes to zoom to.\n   * @param {String} params.region Region code to zoom to.\n   * @param {Number} params.scale Map scale to set.\n   * @param {Number} params.lat Latitude to set viewport to.\n   * @param {Number} params.lng Longitude to set viewport to.\n   * @param {Number} params.x Number from 0 to 1 specifying the horizontal coordinate of the central point of the viewport.\n   * @param {Number} params.y Number from 0 to 1 specifying the vertical coordinate of the central point of the viewport.\n   * @param {Boolean} params.animate Indicates whether or not to animate the scale change and transition.\n   */\n  setFocus: function (config) {\n    var bbox, itemBbox, newBbox, codes, i, point;\n\n    config = config || {};
1\n\n    if (config.region) {\n      codes = [config.region];\n    } else if (config.regions) {\n      codes = config.regions;\n    }\n\n    if (codes) {\n      for (i = 0; i < codes.length; i++) {\n        if (this.regions[codes[i]]) {\n          itemBbox = this.regions[codes[i]].element.shape.getBBox();\n          if (itemBbox) {\n            if (typeof bbox == \"undefined\") {\n              bbox = itemBbox;\n            } else {\n              newBbox = {\n                x: Math.min(bbox.x, itemBbox.x),\n                y: Math.min(bbox.y, itemBbox.y),\n                width:\n                  Math.max(bbox.x + bbox.width, itemBbox.x + itemBbox.width) -\n                  Math.min(bbox.x, itemBbox.x),\n                height:\n                  Math.max(bbox.y + bbox.height, itemBbox.y + itemBbox.height) -\n                  Math.min(bbox.y, itemBbox.y),\n              };\n              bbox = newBbox;\n            }\n          }\n        }\n      }\n      return this.setScale(\n        Math.min(this.width / bbox.width, this.height / bbox.height),\n        -(bbox.x + bbox.width / 2),\n        -(bbox.y + bbox.height / 2),\n        true,\n        config.animate,\n      );\n    } else {\n      if (config.lat !== undefined && config.lng !== undefined) {\n        point = this.latLngToPoint(config.lat, config.lng);\n        config.x = this.transX - point.x / this.scale;\n        config.y = this.transY - point.y / this.scale;\n      } else if (config.x && config.y) {\n        config.x *= -this.defaultWidth;\n        config.y *= -this.defaultHeight;\n      }\n      return this.setScale(\n        config.scale * this.baseScale,\n        config.x,\n        config.y,\n        true,\n        config.animate,\n      );\n    }\n  },\n\n  getSelected: function (type) {\n    var key,\n      selected = [];\n\n    for (key in this[type]) {\n      if (this[type][key].element.isSelected) {\n        selected.push(key);\n      }\n    }\n    return selected;\n  },\n\n  /**\n   * Return the codes of currently selected regions.\n   * @returns {Array}\n   */\n  getSelectedRegions: function () {\n    return this.getSelected(\"regions\");\n  },\n\n  /**\n   * Return the codes of currently selected markers.\n   * @returns {Array}\n   */\n  getSelectedMarkers: function () {\n    return this.getSelected(\"markers\");\n  },\n\n  setSelected: function (type, keys) {\n    var i;\n\n    if (typeof keys != \"object\") {\n      keys = [keys];\n    }\n\n    if (jvm.$.isArray(keys)) {\n      for (i = 0; i < keys.length; i++) {\n        this[type][keys[i]].element.setSelected(true);\n      }\n    } else {\n      for (i in keys) {\n        this[type][i].element.setSelected(!!keys[i]);\n      }\n    }\n  },\n\n  /**\n   * Set or remove selected state for the regions.\n   * @param {String|Array|Object} keys If <code>String</code> or <code>Array</code> the region(s) with the corresponding code(s) will be selected. If <code>Object</code> was provided its keys are  codes of regions, state of which should be changed. Selected state will be set if value is true, removed otherwise.\n   */\n  setSelectedRegions: function (keys) {\n    this.setSelected(\"regions\", keys);\n  },\n\n  /**\n   * Set or remove selected state for the markers.\n   * @param {String|Array|Object} keys If <code>String</code> or <code>Array</code> the marker(s) with the corresponding code(s) will be selected. If <code>Object</code> was provided its keys are  codes of markers, state of which should be changed. Selected state will be set if value is true, removed otherwise.\n   */\n  setSelectedMarkers: function (keys) {\n    this.setSelected(\"markers\", keys);\n  },\n\n  clearSelected: function (type) {\n    var select = {},\n      selected = this.getSelected(type),\n      i;\n\n    for (i = 0; i < selected.length; i++) {\n      select[selected[i]] = false;\n    }\n\n    this.setSelected(type, select);\n  },\n\n  /**\n   * Remove the selected state from all the currently selected regions.\n   */\n  clearSelectedRegions: function () {\n    this.clearSelected(\"regions\");\n  },\n\n  /**\n   * Remove the selected state from all the currently selected markers.\n   */\n  clearSelectedMarkers: function () {\n    this.clearSelected(\"markers\");\n  },\n\n  /**\n   * Return the instance of Map. Useful when instantiated as a jQuery plug-in.\n   * @returns {Map}\n   */\n  getMapObject: function () {\n    return this;\n  },\n\n  /**\n   * Return the name of the region by region code.\n   * @returns {String}\n   */\n  getRegionName: function (code) {\n    return this.mapData.paths[code].name;\n  },\n\n  createRegions: function () {\n    var key,\n      region,\n      map = this;\n\n    this.regionLabelsGroup = this.regionLabelsGroup || this.canvas.addGroup();\n\n    for (key in this.mapData.paths) {\n      const regionStyle =\n        typeof this.params.regionStyle === \"function\"\n          ? {\n              ...jvm.Map.defaultParams.regionStyle,\n              ...this.params.regionStyle(key),\
1n            }\n          : this.params.regionStyle;\n      region = new jvm.Region({\n        map: this,\n        path: this.mapData.paths[key].path,\n        code: key,\n        style: jvm.$.extend(true, {}, regionStyle),\n        labelStyle: jvm.$.extend(true, {}, this.params.regionLabelStyle),\n        canvas: this.canvas,\n        labelsGroup: this.regionLabelsGroup,\n        label:\n          this.canvas.mode != \"vml\"\n            ? this.params.labels && this.params.labels.regions\n            : null,\n      });\n\n      jvm.$(region.shape).bind(\"selected\", function (e, isSelected) {\n        map.container.trigger(\"regionSelected.jvectormap\", [\n          jvm.$(this.node).attr(\"data-code\"),\n          isSelected,\n          map.getSelectedRegions(),\n        ]);\n      });\n      this.regions[key] = {\n        element: region,\n        config: this.mapData.paths[key],\n      };\n    }\n  },\n\n  createMarkers: function (markers) {\n    var i,\n      marker,\n      point,\n      markerConfig,\n      markersArray,\n      map = this;\n\n    this.markersGroup = this.markersGroup || this.canvas.addGroup();\n    this.markerLabelsGroup = this.markerLabelsGroup || this.canvas.addGroup();\n\n    if (jvm.$.isArray(markers)) {\n      markersArray = markers.slice();\n      markers = {};\n      for (i = 0; i < markersArray.length; i++) {\n        markers[i] = markersArray[i];\n      }\n    }\n\n    for (i in markers) {\n      markerConfig =\n        markers[i] instanceof Array ? { latLng: markers[i] } : markers[i];\n      point = this.getMarkerPosition(markerConfig);\n\n      if (point !== false) {\n        marker = new jvm.Marker({\n          map: this,\n          style: jvm.$.extend(true, {}, this.params.markerStyle, {\n            initial: markerConfig.style || {},\n          }),\n          labelStyle: jvm.$.extend(true, {}, this.params.markerLabelStyle),\n          index: i,\n          cx: point.x,\n          cy: point.y,\n          group: this.markersGroup,\n          canvas: this.canvas,\n          labelsGroup: this.markerLabelsGroup,\n          label:\n            this.canvas.mode != \"vml\"\n              ? this.params.labels && this.params.labels.markers\n              : null,\n        });\n\n        jvm.$(marker.shape).bind(\"selected\", function (e, isSelected) {\n          map.container.trigger(\"markerSelected.jvectormap\", [\n            jvm.$(this.node).attr(\"data-index\"),\n            isSelected,\n            map.getSelectedMarkers(),\n          ]);\n        });\n        if (this.markers[i]) {\n          this.removeMarkers([i]);\n        }\n        this.markers[i] = { element: marker, config: markerConfig };\n      }\n    }\n  },\n\n  repositionMarkers: function () {\n    var i, point;\n\n    for (i in this.markers) {\n      point = this.getMarkerPosition(this.markers[i].config);\n      if (point !== false) {\n        this.markers[i].element.setStyle({ cx: point.x, cy: point.y });\n      }\n    }\n  },\n\n  repositionLabels: function () {\n    var key;\n\n    for (key in this.regions) {\n      this.regions[key].element.updateLabelPosition();\n    }\n\n    for (key in this.markers) {\n      this.markers[key].element.updateLabelPosition();\n    }\n  },\n\n  getMarkerPosition: function (markerConfig) {\n    if (jvm.Map.maps[this.params.map].projection) {\n      return this.latLngToPoint.apply(this, markerConfig.latLng || [0, 0]);\n    } else {\n      return {\n        x: markerConfig.coords[0] * this.scale + this.transX * this.scale,\n        y: markerConfig.coords[1] * this.scale + this.transY * this.scale,\n      };\n    }\n  },\n\n  /**\n   * Add one marker to the map.\n   * @param {String} key Marker unique code.\n   * @param {Object} marker Marker configuration parameters.\n   * @param {Array} seriesData Values to add to the data series.\n   */\n  addMarker: function (key, marker, seriesData) {\n    var markers = {},\n      data = [],\n      values,\n      i,\n      seriesData = seriesData || [];\n\n    markers[key] = marker;\n\n    for (i = 0; i < seriesData.length; i++) {\n      values = {};\n      if (typeof seriesData[i] !== \"undefined\") {\n        values[key] = seriesData[i];\n      }\n      data.push(values);\n    }\n    this.addMarkers(markers, data);\n  },\n\n  /**\n   * Add set of marker to the map.\n   * @param {Object|Array} markers Markers to add to the map. In case of array is provided, codes of markers will be set as string representations of array indexes.\n   * @param {Array} seriesData Values to add to the data series.\n   */\n  addMarkers: function (markers, seriesData) {\
1n    var i;\n\n    seriesData = seriesData || [];\n\n    this.createMarkers(markers);\n    for (i = 0; i < seriesData.length; i++) {\n      this.series.markers[i].setValues(seriesData[i] || {});\n    }\n  },\n\n  /**\n   * Remove some markers from the map.\n   * @param {Array} markers Array of marker codes to be removed.\n   */\n  removeMarkers: function (markers) {\n    var i;\n\n    for (i = 0; i < markers.length; i++) {\n      this.markers[markers[i]].element.remove();\n      delete this.markers[markers[i]];\n    }\n  },\n\n  /**\n   * Remove all markers from the map.\n   */\n  removeAllMarkers: function () {\n    var i,\n      markers = [];\n\n    for (i in this.markers) {\n      markers.push(i);\n    }\n    this.removeMarkers(markers);\n  },\n\n  /**\n   * Converts coordinates expressed as latitude and longitude to the coordinates in pixels on the map.\n   * @param {Number} lat Latitide of point in degrees.\n   * @param {Number} lng Longitude of point in degrees.\n   */\n  latLngToPoint: function (lat, lng) {\n    var point,\n      proj = jvm.Map.maps[this.params.map].projection,\n      centralMeridian = proj.centralMeridian,\n      inset,\n      bbox;\n\n    if (lng < -180 + centralMeridian) {\n      lng += 360;\n    }\n\n    point = jvm.Proj[proj.type](lat, lng, centralMeridian);\n\n    inset = this.getInsetForPoint(point.x, point.y);\n    if (inset) {\n      bbox = inset.bbox;\n\n      point.x =\n        ((point.x - bbox[0].x) / (bbox[1].x - bbox[0].x)) *\n        inset.width *\n        this.scale;\n      point.y =\n        ((point.y - bbox[0].y) / (bbox[1].y - bbox[0].y)) *\n        inset.height *\n        this.scale;\n\n      return {\n        x: point.x + this.transX * this.scale + inset.left * this.scale,\n        y: point.y + this.transY * this.scale + inset.top * this.scale,\n      };\n    } else {\n      return false;\n    }\n  },\n\n  /**\n   * Converts cartesian coordinates into coordinates expressed as latitude and longitude.\n   * @param {Number} x X-axis of point on map in pixels.\n   * @param {Number} y Y-axis of point on map in pixels.\n   */\n  pointToLatLng: function (x, y) {\n    var proj = jvm.Map.maps[this.params.map].projection,\n      centralMeridian = proj.centralMeridian,\n      insets = jvm.Map.maps[this.params.map].insets,\n      i,\n      inset,\n      bbox,\n      nx,\
1n      ny;\n\n    for (i = 0; i < insets.length; i++) {\n      inset = insets[i];\n      bbox = inset.bbox;\n\n      nx = x - (this.transX * this.scale + inset.left * this.scale);\n      ny = y - (this.transY * this.scale + inset.top * this.scale);\n\n      nx =\n        (nx / (inset.width * this.scale)) * (bbox[1].x - bbox[0].x) + bbox[0].x;\n      ny =\n        (ny / (inset.height * this.scale)) * (bbox[1].y - bbox[0].y) +\n        bbox[0].y;\n\n      if (\n        nx > bbox[0].x &&\n        nx < bbox[1].x &&\n        ny > bbox[0].y &&\n        ny < bbox[1].y\n      ) {\n        return jvm.Proj[proj.type + \"_inv\"](nx, -ny, centralMeridian);\n      }\n    }\n\n    return false;\n  },\n\n  getInsetForPoint: function (x, y) {\n    var insets = jvm.Map.maps[this.params.map].insets,\n      i,\n      bbox;\n\n    for (i = 0; i < insets.length; i++) {\n      bbox = insets[i].bbox;\n      if (x > bbox[0].x && x < bbox[1].x && y > bbox[0].y && y < bbox[1].y) {\n        return insets[i];\n      }\n    }\n  },\n\n  createSeries: function () {\n    var i, key;\n\n    this.series = {\n      markers: [],\n      regions: [],\n    };\n\n    for (key in this.params.series) {\n      for (i = 0; i < this.params.series[key].length; i++) {\n        this.series[key][i] = new jvm.DataSeries(\n          this.params.series[key][i],\n          this[key],\n          this,\n        );\n      }\n    }\n  },\n\n  /**\n   * Gracefully remove the map and and all its accessories, unbind event handlers.\n   */\n  remove: function () {\n    this.tip.remove();\n    this.container.remove();\n    jvm.$(window).unbind(\"resize\", this.onResize);\n    jvm.$(\"body\").unbind(\"mouseup\", this.onContainerMouseUp);\n  },\n};\n\njvm.Map.maps = {};\njvm.Map.defaultParams = {\n  map: \"world_mill_en\",\n  backgroundColor: \"#505050\",\n  zoomButtons: true,\n  zoomOnScroll: true,\n  zoomOnScrollSpeed: 3,\n  panOnDrag: true,\n  zoomMax: 8,\n  zoomMin: 1,\n  zoomStep: 1.6,\n  zoomAnimate: true,\n  regionsSelectable: false,\n  markersSelectable: false,\n  bindTouchEvents: true,\n  regionStyle: {\n    initial: {\n      fill: \"white\",\n      \"fill-opacity\": 1,\n      stroke: \"none\",\n      \"stroke-width\": 0,\n      \"stroke-opacity\": 1,\n    },\n    hover: {\n      \"fill-opacity\": 0.8,\n      cursor: \"pointer\",\n    },\n    selected: {\n      fill: \"yellow\",\n    },\n    selectedHover: {},\n  },\n  regionLabelStyle: {\n    initial: {\n      \"font-family\": \"Verdana\",\n      \"font-size\": \"12\",\n      \"font-weight\"
1: \"bold\",\n      cursor: \"default\",\n      fill: \"black\",\n    },\n    hover: {\n      cursor: \"pointer\",\n    },\n  },\n  markerStyle: {\n    initial: {\n      fill: \"grey\",\n      stroke: \"#505050\",\n      \"fill-opacity\": 1,\n      \"stroke-width\": 1,\n      \"stroke-opacity\": 1,\n      r: 5,\n    },\n    hover: {\n      stroke: \"black\",\n      \"stroke-width\": 2,\n      cursor: \"pointer\",\n    },\n    selected: {\n      fill: \"blue\",\n    },\n    selectedHover: {},\n  },\n  markerLabelStyle: {\n    initial: {\n      \"font-family\": \"Verdana\",\n      \"font-size\": \"12\",\n      \"font-weight\": \"bold\",\n      cursor: \"default\",\n      fill: \"black\",\n    },\n    hover: {\n      cursor: \"pointer\",\n    },\n  },\n};\njvm.Map.apiEvents = {\n  onRegionTipShow: \"regionTipShow\",\n  onRegionOver: \"regionOver\",\n  onRegionOut: \"regionOut\",\n  onRegionClick: \"regionClick\",\n  onRegionSelected: \"regionSelected\",\n  onMarkerTipShow: \"markerTipShow\",\n  onMarkerOver: \"markerOver\",\n  onMarkerOut: \"markerOut\",\n  onMarkerClick: \"markerClick\",\n  onMarkerSelected: \"markerSelected\",\n  onViewportChange: \"viewportChange\",\n};\n/**\n * Creates map with drill-down functionality.\n * @constructor\n * @param {Object} params Parameters to initialize map with.\n * @param {Number} params.maxLevel Maximum number of levels user can go through\n * @param {Object} params.main Config of the main map. See <a href=\"./jvm-map/\">jvm.Map</a> for more information.\n * @param {Function} params.mapNameByCode Function to generate map name by region code. Default value is:\n<pre>\nfunction(code, multiMap) {\n  return code.toLowerCase()+'_'+\n         multiMap.defaultProjection+'_en';\n}\n</pre>\n * @param {Function} params.mapUrlByCode Function to generate map url by region code. Default value is:\n<pre>\nfunction(code, multiMap){\n  return 'jquery-jvectormap-data-'+\n         code.toLowerCase()+'-'+\n         multiMap.defaultProjection+'-en.js';\n}\n</pre>\n */\njvm.MultiMap = function (params) {\n  var that = this;\n\n  this.maps = {};\n  this.params = jvm.$.extend(true, {}, jvm.MultiMap.defaultParams, params);\n  this.params.maxLevel = this.params.maxLevel || Number.MAX_VALUE;\n  this.params.main = this.params.main || {};\n  this.params.main.multiMapLevel = 0;\n  this.history = [this.addMap(this.params.main.map, this.params.main)];\n  this.defaultProjection = this.history[0].mapData.projection.type;\n  this.mapsLoaded = {};\n  this.mapsLoadedData = {};\n\n  this.params.container.css({ position: \"relative\" });\n  this.backButton = jvm\n    .$(\"<div/>\")\n    .addClass(\"jvectormap-goback\")\n    .text(\"Back\")\n    .appendTo(this.params.container);\n  this.backButton.hide();\n  this.backButton.click(function () {\n    that.goBack();\n  });\n\n  this.spinner = jvm\n    .$(\"<div/>\")\n    .addClass(\"jvectormap-spinner\")\n    .appendTo(this.params.container);\n  this.spinner.hide();\n};\n\njvm.MultiMap.prototype = {\n  addMap: function (name, config) {\n    var cnt = jvm.$(\"<div/>\").css({\n      width: \"100%\",\n      height: \"100%\",\n    });\n\n    this.params.container.append(cnt);\n\n    this.maps[name] = new jvm.Map(jvm.$.extend(config, { container: cnt }));\n    if (this.params.maxLevel > config.multiMapLevel) {\n      this.maps[name].container.on(\n        \"regionClick.jvectormap\",\n        { scope: this },\n        function (e, code) {\n          var multimap = e.data.scope,\n            mapName = multimap.params.mapNameByCode(code, multimap);\n\n          if (\n            !multimap.drillDownPromise ||\n            multimap.drillDownPromise.state() !== \"pending\"\n          ) {\n            multimap.drillDown(mapName, code);\n          }\n        },\n      );\n    }\n\n    return this.maps[name];\n  },\n\n  downloadMap: function (code) {\n    var that = this,\n      deferred = jvm.$.Deferred();\n    const { getDrillDownMap } = this.params;
1\n\n    const handleMapData = function (data) {\n      that.mapsLoaded[code] = true;\n      that.mapsLoadedData[code] = data;\n      deferred.resolve();\n    };\n\n    if (!this.mapsLoaded[code]) {\n      if (getDrillDownMap && typeof getDrillDownMap === \"function\") {\n        const result = getDrillDownMap(code);\n        if (result && typeof result.then === \"function\") {\n          result\n            .then((data) => {\n              handleMapData(data);\n            })\n            .catch(() => {\n              deferred.reject();\n            });\n        } else {\n          handleMapData(result);\n        }\n        return deferred;\n      }\n      jvm.$.get(this.params.mapUrlByCode(code, this)).then(\n        function (data) {\n          handleMapData(data);\n        },\n        function () {\n          deferred.reject();\n        },\n      );\n    } else {\n      deferred.resolve();\n    }\n    return deferred;\n  },\n\n  drillDown: function (name, code) {\n    var currentMap = this.history[this.history.length - 1],\n      that = this,\n      focusPromise = currentMap.setFocus({ region: code, animate: true }),\n      downloadPromise = this.downloadMap(code);\n\n    focusPromise.then(function () {\n      if (downloadPromise.state() === \"pending\") {\n        that.spinner.show();\n      }\n    });\n    downloadPromise.always(function () {\n      that.spinner.hide();\n    });\n    this.drillDownPromise = jvm.$.when(downloadPromise, focusPromise);\n    this.drillDownPromise.then(function () {\n      const { content } = that.mapsLoadedData[code];\n      currentMap.params.container.hide();\n      if (!that.maps[name]) {\n        jvm.$.fn.vectorMap(\"addMap\", name, content);\n        that.addMap(name, {\n          map: name,\n          multiMapLevel: currentMap.params.multiMapLevel + 1,\n        });\n      } else {\n        that.maps[name].params.container.show();\n      }\n      that.history.push(that.maps[name]);\n      that.backButton.show();\n    });\n  },\n\n  goBack: function () {\n    var currentMap = this.history.pop(),\n      prevMap = this.history[this.history.length - 1],\n      that = this;\n\n    currentMap\n      .setFocus({ scale: 1, x: 0.5, y: 0.5, animate: true })\n      .then(function () {\n        currentMap.params.container.hide();\n        prevMap.params.container.show();\n        prevMap.updateSize();\n        if (that.history.length === 1) {\n          that.backButton.hide();\n        }\n        prevMap.setFocus({ scale: 1, x: 0.5, y: 0.5, animate: true });\n      });\n  },\n};\n\njvm.MultiMap.defaultParams = {\n  mapNameByCode: function (code, multiMap) {\n    return code.toLowerCase() + \"_\" + multiMap.defaultProjection + \"_en\";\n  },\n  mapUrlByCode: function (code, multiMap) {\n    return (\n      \"jquery-jvectormap-data-\" +\n      code.toLowerCase() +\n      \"-\" +\n      multiMap.defaultProjection +\n      \"-en.js\"\n    );\n  },\n};\n\n\n//# sourceURL=webpack://@react-jvectormap/core/../jvectormap/jquery.jvectormap.min.js?")}
1,"data:image/gif;base64,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":module=>{"use strict";eval('module.exports = "data:image/gif;base64,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";\n\n//# sourceURL=webpack://@react-jvectormap/core/data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APd
1pB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==?')},jquery:e=>{"use strict";e.exports=__WEBPACK_EXTERNAL_MODULE_jquery__},react:e=>{"use strict";e.exports=__WEBPACK_EXTERNAL_MODULE_react__}},__webpack_module_cache__={};function __nested_webpack_require_214102__(e){var n=__webpack_module_cache__[e];if(void 0!==n)return n.exports;var t=__webpack_module_cache__[e]={id:e,exports:{}};return __webpack_modules__[e](t,t.exports,__nested_webpack_require_214102__),t.exp
1orts}__nested_webpack_require_214102__.m=__webpack_modules__,(()=>{__nested_webpack_require_214102__.n=e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return __nested_webpack_require_214102__.d(n,{a:n}),n}})(),(()=>{__nested_webpack_require_214102__.d=(e,n)=>{for(var t in n)__nested_webpack_require_214102__.o(n,t)&&!__nested_webpack_require_214102__.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})}})(),(()=>{__nested_webpack_require_214102__.o=(e,n)=>Object.prototype.hasOwnProperty.call(e,n)})(),(()=>{__nested_webpack_require_214102__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})(),(()=>{__nested_webpack_require_214102__.b=document.baseURI||self.location.href})();var __nested_webpack_exports__=__nested_webpack_require_214102__("./src/index.ts");return __nested_webpack_exports__})()})}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.