!function (t, e) {
  "object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define && define.amd ? define([], e) : "object" == typeof exports ? exports.ol = e() : t.ol = e()
}(window, (function () {
  return function (t) {
    var e = {};

    function r(n) {
      if (e[n]) return e[n].exports;
      var i = e[n] = {i: n, l: !1, exports: {}};
      return t[n].call(i.exports, i, i.exports, r), i.l = !0, i.exports
    }

    return r.m = t, r.c = e, r.d = function (t, e, n) {
      r.o(t, e) || Object.defineProperty(t, e, {enumerable: !0, get: n})
    }, r.r = function (t) {
      "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {value: "Module"}), Object.defineProperty(t, "__esModule", {value: !0})
    }, r.t = function (t, e) {
      if (1 & e && (t = r(t)), 8 & e) return t;
      if (4 & e && "object" == typeof t && t && t.__esModule) return t;
      var n = Object.create(null);
      if (r.r(n), Object.defineProperty(n, "default", {
        enumerable: !0,
        value: t
      }), 2 & e && "string" != typeof t) for (var i in t) r.d(n, i, function (e) {
        return t[e]
      }.bind(null, i));
      return n
    }, r.n = function (t) {
      var e = t && t.__esModule ? function () {
        return t.default
      } : function () {
        return t
      };
      return r.d(e, "a", e), e
    }, r.o = function (t, e) {
      return Object.prototype.hasOwnProperty.call(t, e)
    }, r.p = "", r(r.s = 10)
  }([function (t, e, r) {
    "use strict";
    (function (t, n) {
      r.d(e, "a", (function () {
        return J
      })), r.d(e, "b", (function () {
        return br
      })), r.d(e, "c", (function () {
        return $r
      })), r.d(e, "d", (function () {
        return hr
      })), r.d(e, "e", (function () {
        return Jr
      })), r.d(e, "f", (function () {
        return i
      }));
      var i = {
        $version: 8,
        $root: {
          version: {
            required: !0,
            type: "enum",
            values: [8],
            doc: "Style specification version number. Must be 8.",
            example: 8
          },
          name: {type: "string", doc: "A human-readable name for the style.", example: "Bright"},
          metadata: {
            type: "*",
            doc: "Arbitrary properties useful to track with the stylesheet, but do not influence rendering. Properties should be prefixed to avoid collisions, like 'mapbox:'."
          },
          center: {
            type: "array",
            value: "number",
            doc: "Default map center in longitude and latitude.  The style center will be used only if the map has not been positioned by other means (e.g. map options or user interaction).",
            example: [-73.9749, 40.7736]
          },
          zoom: {
            type: "number",
            doc: "Default zoom level.  The style zoom will be used only if the map has not been positioned by other means (e.g. map options or user interaction).",
            example: 12.5
          },
          bearing: {
            type: "number",
            default: 0,
            period: 360,
            units: "degrees",
            doc: 'Default bearing, in degrees. The bearing is the compass direction that is "up"; for example, a bearing of 90° orients the map so that east is up. This value will be used only if the map has not been positioned by other means (e.g. map options or user interaction).',
            example: 29
          },
          pitch: {
            type: "number",
            default: 0,
            units: "degrees",
            doc: "Default pitch, in degrees. Zero is perpendicular to the surface, for a look straight down at the map, while a greater value like 60 looks ahead towards the horizon. The style pitch will be used only if the map has not been positioned by other means (e.g. map options or user interaction).",
            example: 50
          },
          light: {
            type: "light",
            doc: "The global light source.",
            example: {anchor: "viewport", color: "white", intensity: .4}
          },
          terrain: {
            type: "terrain",
            doc: "A global modifier that elevates layers and markers based on a DEM data source."
          },
          sources: {
            required: !0,
            type: "sources",
            doc: "Data source specifications.",
            example: {"mapbox-streets": {type: "vector", url: "mapbox://mapbox.mapbox-streets-v6"}}
          },
          sprite: {
            type: "string",
            doc: "A base URL for retrieving the sprite image and metadata. The extensions `.png`, `.json` and scale factor `@2x.png` will be automatically appended. This property is required if any layer uses the `background-pattern`, `fill-pattern`, `line-pattern`, `fill-extrusion-pattern`, or `icon-image` properties. The URL must be absolute, containing the [scheme, authority and path components](https://en.wikipedia.org/wiki/URL#Syntax).",
            example: "mapbox://sprites/mapbox/bright-v8"
          },
          glyphs: {
            type: "string",
            doc: "A URL template for loading signed-distance-field glyph sets in PBF format. The URL must include `{fontstack}` and `{range}` tokens. This property is required if any layer uses the `text-field` layout property. The URL must be absolute, containing the [scheme, authority and path components](https://en.wikipedia.org/wiki/URL#Syntax).",
            example: "mapbox://fonts/mapbox/{fontstack}/{range}.pbf"
          },
          transition: {
            type: "transition",
            doc: "A global transition definition to use as a default across properties, to be used for timing transitions between one value and the next when no property-specific transition is set. Collision-based symbol fading is controlled independently of the style's `transition` property.",
            example: {duration: 300, delay: 0}
          },
          layers: {
            required: !0,
            type: "array",
            value: "layer",
            doc: "Layers will be drawn in the order of this array.",
            example: [{
              id: "water",
              source: "mapbox-streets",
              "source-layer": "water",
              type: "fill",
              paint: {"fill-color": "#00ffff"}
            }]
          }
        },
        sources: {
          "*": {
            type: "source",
            doc: "Specification of a data source. For vector and raster sources, either TileJSON or a URL to a TileJSON must be provided. For image and video sources, a URL must be provided. For GeoJSON sources, a URL or inline GeoJSON must be provided."
          }
        },
        source: ["source_vector", "source_raster", "source_raster_dem", "source_geojson", "source_video", "source_image"],
        source_vector: {
          type: {
            required: !0,
            type: "enum",
            values: {vector: {doc: "A vector tile source."}},
            doc: "The type of the source."
          },
          url: {
            type: "string",
            doc: "A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://<Tileset ID>`."
          },
          tiles: {
            type: "array",
            value: "string",
            doc: "An array of one or more tile source URLs, as in the TileJSON spec."
          },
          bounds: {
            type: "array",
            value: "number",
            length: 4,
            default: [-180, -85.051129, 180, 85.051129],
            doc: "An array containing the longitude and latitude of the southwest and northeast corners of the source's bounding box in the following order: `[sw.lng, sw.lat, ne.lng, ne.lat]`. When this property is included in a source, no tiles outside of the given bounds are requested by Mapbox GL."
          },
          scheme: {
            type: "enum",
            values: {xyz: {doc: "Slippy map tilenames scheme."}, tms: {doc: "OSGeo spec scheme."}},
            default: "xyz",
            doc: "Influences the y direction of the tile coordinates. The global-mercator (aka Spherical Mercator) profile is assumed."
          },
          minzoom: {
            type: "number",
            default: 0,
            doc: "Minimum zoom level for which tiles are available, as in the TileJSON spec."
          },
          maxzoom: {
            type: "number",
            default: 22,
            doc: "Maximum zoom level for which tiles are available, as in the TileJSON spec. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."
          },
          attribution: {
            type: "string",
            doc: "Contains an attribution to be displayed when the map is shown to a user."
          },
          promoteId: {
            type: "promoteId",
            doc: "A property to use as a feature id (for feature state). Either a property name, or an object of the form `{<sourceLayer>: <propertyName>}`. If specified as a string for a vector tile source, the same property is used across all its source layers."
          },
          volatile: {
            type: "boolean",
            default: !1,
            doc: "A setting to determine whether a source's tiles are cached locally.",
            "sdk-support": {"basic functionality": {android: "9.3.0", ios: "5.10.0"}}
          },
          "*": {type: "*", doc: "Other keys to configure the data source."}
        },
        source_raster: {
          type: {
            required: !0,
            type: "enum",
            values: {raster: {doc: "A raster tile source."}},
            doc: "The type of the source."
          },
          url: {
            type: "string",
            doc: "A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://<Tileset ID>`."
          },
          tiles: {
            type: "array",
            value: "string",
            doc: "An array of one or more tile source URLs, as in the TileJSON spec."
          },
          bounds: {
            type: "array",
            value: "number",
            length: 4,
            default: [-180, -85.051129, 180, 85.051129],
            doc: "An array containing the longitude and latitude of the southwest and northeast corners of the source's bounding box in the following order: `[sw.lng, sw.lat, ne.lng, ne.lat]`. When this property is included in a source, no tiles outside of the given bounds are requested by Mapbox GL."
          },
          minzoom: {
            type: "number",
            default: 0,
            doc: "Minimum zoom level for which tiles are available, as in the TileJSON spec."
          },
          maxzoom: {
            type: "number",
            default: 22,
            doc: "Maximum zoom level for which tiles are available, as in the TileJSON spec. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."
          },
          tileSize: {
            type: "number",
            default: 512,
            units: "pixels",
            doc: "The minimum visual size to display tiles for this layer. Only configurable for raster layers."
          },
          scheme: {
            type: "enum",
            values: {xyz: {doc: "Slippy map tilenames scheme."}, tms: {doc: "OSGeo spec scheme."}},
            default: "xyz",
            doc: "Influences the y direction of the tile coordinates. The global-mercator (aka Spherical Mercator) profile is assumed."
          },
          attribution: {
            type: "string",
            doc: "Contains an attribution to be displayed when the map is shown to a user."
          },
          volatile: {
            type: "boolean",
            default: !1,
            doc: "A setting to determine whether a source's tiles are cached locally.",
            "sdk-support": {"basic functionality": {android: "9.3.0", ios: "5.10.0"}}
          },
          "*": {type: "*", doc: "Other keys to configure the data source."}
        },
        source_raster_dem: {
          type: {
            required: !0,
            type: "enum",
            values: {"raster-dem": {doc: "A RGB-encoded raster DEM source"}},
            doc: "The type of the source."
          },
          url: {
            type: "string",
            doc: "A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://<Tileset ID>`."
          },
          tiles: {
            type: "array",
            value: "string",
            doc: "An array of one or more tile source URLs, as in the TileJSON spec."
          },
          bounds: {
            type: "array",
            value: "number",
            length: 4,
            default: [-180, -85.051129, 180, 85.051129],
            doc: "An array containing the longitude and latitude of the southwest and northeast corners of the source's bounding box in the following order: `[sw.lng, sw.lat, ne.lng, ne.lat]`. When this property is included in a source, no tiles outside of the given bounds are requested by Mapbox GL."
          },
          minzoom: {
            type: "number",
            default: 0,
            doc: "Minimum zoom level for which tiles are available, as in the TileJSON spec."
          },
          maxzoom: {
            type: "number",
            default: 22,
            doc: "Maximum zoom level for which tiles are available, as in the TileJSON spec. Data from tiles at the maxzoom are used when displaying the map at higher zoom levels."
          },
          tileSize: {
            type: "number",
            default: 512,
            units: "pixels",
            doc: "The minimum visual size to display tiles for this layer. Only configurable for raster layers."
          },
          attribution: {
            type: "string",
            doc: "Contains an attribution to be displayed when the map is shown to a user."
          },
          encoding: {
            type: "enum",
            values: {
              terrarium: {doc: "Terrarium format PNG tiles. See https://aws.amazon.com/es/public-datasets/terrain/ for more info."},
              mapbox: {doc: "Mapbox Terrain RGB tiles. See https://www.mapbox.com/help/access-elevation-data/#mapbox-terrain-rgb for more info."}
            },
            default: "mapbox",
            doc: "The encoding used by this source. Mapbox Terrain RGB is used by default"
          },
          volatile: {
            type: "boolean",
            default: !1,
            doc: "A setting to determine whether a source's tiles are cached locally.",
            "sdk-support": {"basic functionality": {android: "9.3.0", ios: "5.10.0"}}
          },
          "*": {type: "*", doc: "Other keys to configure the data source."}
        },
        source_geojson: {
          type: {
            required: !0,
            type: "enum",
            values: {geojson: {doc: "A GeoJSON data source."}},
            doc: "The data type of the GeoJSON source."
          },
          data: {type: "*", doc: "A URL to a GeoJSON file, or inline GeoJSON."},
          maxzoom: {
            type: "number",
            default: 18,
            doc: "Maximum zoom level at which to create vector tiles (higher means greater detail at high zoom levels)."
          },
          attribution: {
            type: "string",
            doc: "Contains an attribution to be displayed when the map is shown to a user."
          },
          buffer: {
            type: "number",
            default: 128,
            maximum: 512,
            minimum: 0,
            doc: "Size of the tile buffer on each side. A value of 0 produces no buffer. A value of 512 produces a buffer as wide as the tile itself. Larger values produce fewer rendering artifacts near tile edges and slower performance."
          },
          filter: {type: "*", doc: "An expression for filtering features prior to processing them for rendering."},
          tolerance: {
            type: "number",
            default: .375,
            doc: "Douglas-Peucker simplification tolerance (higher means simpler geometries and faster performance)."
          },
          cluster: {
            type: "boolean",
            default: !1,
            doc: "If the data is a collection of point features, setting this to true clusters the points by radius into groups. Cluster groups become new `Point` features in the source with additional properties:\n * `cluster` Is `true` if the point is a cluster \n * `cluster_id` A unqiue id for the cluster to be used in conjunction with the [cluster inspection methods](https://www.mapbox.com/mapbox-gl-js/api/#geojsonsource#getclusterexpansionzoom)\n * `point_count` Number of original points grouped into this cluster\n * `point_count_abbreviated` An abbreviated point count"
          },
          clusterRadius: {
            type: "number",
            default: 50,
            minimum: 0,
            doc: "Radius of each cluster if clustering is enabled. A value of 512 indicates a radius equal to the width of a tile."
          },
          clusterMaxZoom: {
            type: "number",
            doc: "Max zoom on which to cluster points if clustering is enabled. Defaults to one zoom less than maxzoom (so that last zoom features are not clustered). Clusters are re-evaluated at integer zoom levels so setting clusterMaxZoom to 14 means the clusters will be displayed until z15."
          },
          clusterMinPoints: {
            type: "number",
            doc: "Minimum number of points necessary to form a cluster if clustering is enabled. Defaults to `2`."
          },
          clusterProperties: {
            type: "*",
            doc: 'An object defining custom properties on the generated clusters if clustering is enabled, aggregating values from clustered points. Has the form `{"property_name": [operator, map_expression]}`. `operator` is any expression function that accepts at least 2 operands (e.g. `"+"` or `"max"`) — it accumulates the property value from clusters/points the cluster contains; `map_expression` produces the value of a single point.\n\nExample: `{"sum": ["+", ["get", "scalerank"]]}`.\n\nFor more advanced use cases, in place of `operator`, you can use a custom reduce expression that references a special `["accumulated"]` value, e.g.:\n`{"sum": [["+", ["accumulated"], ["get", "sum"]], ["get", "scalerank"]]}`'
          },
          lineMetrics: {
            type: "boolean",
            default: !1,
            doc: "Whether to calculate line distance metrics. This is required for line layers that specify `line-gradient` values."
          },
          generateId: {
            type: "boolean",
            default: !1,
            doc: "Whether to generate ids for the geojson features. When enabled, the `feature.id` property will be auto assigned based on its index in the `features` array, over-writing any previous values."
          },
          promoteId: {
            type: "promoteId",
            doc: "A property to use as a feature id (for feature state). Either a property name, or an object of the form `{<sourceLayer>: <propertyName>}`."
          }
        },
        source_video: {
          type: {
            required: !0,
            type: "enum",
            values: {video: {doc: "A video data source."}},
            doc: "The data type of the video source."
          },
          urls: {
            required: !0,
            type: "array",
            value: "string",
            doc: "URLs to video content in order of preferred format."
          },
          coordinates: {
            required: !0,
            doc: "Corners of video specified in longitude, latitude pairs.",
            type: "array",
            length: 4,
            value: {type: "array", length: 2, value: "number", doc: "A single longitude, latitude pair."}
          }
        },
        source_image: {
          type: {
            required: !0,
            type: "enum",
            values: {image: {doc: "An image data source."}},
            doc: "The data type of the image source."
          },
          url: {required: !0, type: "string", doc: "URL that points to an image."},
          coordinates: {
            required: !0,
            doc: "Corners of image specified in longitude, latitude pairs.",
            type: "array",
            length: 4,
            value: {type: "array", length: 2, value: "number", doc: "A single longitude, latitude pair."}
          }
        },
        layer: {
          id: {type: "string", doc: "Unique layer name.", required: !0},
          type: {
            type: "enum", values: {
              fill: {
                doc: "A filled polygon with an optional stroked border.",
                "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}}
              },
              line: {
                doc: "A stroked line.",
                "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}}
              },
              symbol: {
                doc: "An icon or a text label.",
                "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}}
              },
              circle: {
                doc: "A filled circle.",
                "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}}
              },
              heatmap: {
                doc: "A heatmap.",
                "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
              },
              "fill-extrusion": {
                doc: "An extruded (3D) polygon.",
                "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}}
              },
              raster: {
                doc: "Raster map textures such as satellite imagery.",
                "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}}
              },
              hillshade: {
                doc: "Client-side hillshading visualization based on DEM data. Currently, the implementation only supports Mapbox Terrain RGB and Mapzen Terrarium tiles.",
                "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
              },
              background: {
                doc: "The background color or pattern of the map.",
                "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}}
              },
              sky: {
                doc: "A spherical dome around the map that is always rendered behind all other layers.",
                "sdk-support": {"basic functionality": {js: "2.0.0"}}
              }
            }, doc: "Rendering type of this layer.", required: !0
          },
          metadata: {
            type: "*",
            doc: "Arbitrary properties useful to track with the layer, but do not influence rendering. Properties should be prefixed to avoid collisions, like 'mapbox:'."
          },
          source: {
            type: "string",
            doc: "Name of a source description to be used for this layer. Required for all layer types except `background`."
          },
          "source-layer": {
            type: "string",
            doc: "Layer to use from a vector tile source. Required for vector tile sources; prohibited for all other source types, including GeoJSON sources."
          },
          minzoom: {
            type: "number",
            minimum: 0,
            maximum: 24,
            doc: "The minimum zoom level for the layer. At zoom levels less than the minzoom, the layer will be hidden."
          },
          maxzoom: {
            type: "number",
            minimum: 0,
            maximum: 24,
            doc: "The maximum zoom level for the layer. At zoom levels equal to or greater than the maxzoom, the layer will be hidden."
          },
          filter: {
            type: "filter",
            doc: "A expression specifying conditions on source features. Only features that match the filter are displayed. Zoom expressions in filters are only evaluated at integer zoom levels. The `feature-state` expression is not supported in filter expressions."
          },
          layout: {type: "layout", doc: "Layout properties for the layer."},
          paint: {type: "paint", doc: "Default paint properties for this layer."}
        },
        layout: ["layout_fill", "layout_line", "layout_circle", "layout_heatmap", "layout_fill-extrusion", "layout_symbol", "layout_raster", "layout_hillshade", "layout_background", "layout_sky"],
        layout_background: {
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            "property-type": "constant"
          }
        },
        layout_sky: {
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            "property-type": "constant"
          }
        },
        layout_fill: {
          "fill-sort-key": {
            type: "number",
            doc: "Sorts features in ascending order based on this value. Features with a higher sort key will appear above features with a lower sort key.",
            "sdk-support": {
              "basic functionality": {js: "1.2.0", android: "9.1.0", ios: "5.8.0", macos: "0.15.0"},
              "data-driven styling": {js: "1.2.0", android: "9.1.0", ios: "5.8.0", macos: "0.15.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            "property-type": "constant"
          }
        },
        layout_circle: {
          "circle-sort-key": {
            type: "number",
            doc: "Sorts features in ascending order based on this value. Features with a higher sort key will appear above features with a lower sort key.",
            "sdk-support": {
              "basic functionality": {js: "1.2.0", android: "9.2.0", ios: "5.9.0", macos: "0.16.0"},
              "data-driven styling": {js: "1.2.0", android: "9.2.0", ios: "5.9.0", macos: "0.16.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            "property-type": "constant"
          }
        },
        layout_heatmap: {
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            "property-type": "constant"
          }
        },
        "layout_fill-extrusion": {
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}},
            "property-type": "constant"
          }
        },
        layout_line: {
          "line-cap": {
            type: "enum",
            values: {
              butt: {doc: "A cap with a squared-off end which is drawn to the exact endpoint of the line."},
              round: {doc: "A cap with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's width and centered on the endpoint of the line."},
              square: {doc: "A cap with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the line's width."}
            },
            default: "butt",
            doc: "The display of line endings.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "line-join": {
            type: "enum",
            values: {
              bevel: {doc: "A join with a squared-off end which is drawn beyond the endpoint of the line at a distance of one-half of the line's width."},
              round: {doc: "A join with a rounded end which is drawn beyond the endpoint of the line at a radius of one-half of the line's width and centered on the endpoint of the line."},
              miter: {doc: "A join with a sharp, angled corner which is drawn with the outer sides beyond the endpoint of the path until they meet."}
            },
            default: "miter",
            doc: "The display of lines when joining.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.40.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "line-miter-limit": {
            type: "number",
            default: 2,
            doc: "Used to automatically convert miter joins to bevel joins for sharp angles.",
            requires: [{"line-join": "miter"}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "line-round-limit": {
            type: "number",
            default: 1.05,
            doc: "Used to automatically convert round joins to miter joins for shallow angles.",
            requires: [{"line-join": "round"}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "line-sort-key": {
            type: "number",
            doc: "Sorts features in ascending order based on this value. Features with a higher sort key will appear above features with a lower sort key.",
            "sdk-support": {
              "basic functionality": {js: "1.2.0", android: "9.1.0", ios: "5.8.0", macos: "0.15.0"},
              "data-driven styling": {js: "1.2.0", android: "9.1.0", ios: "5.8.0", macos: "0.15.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            "property-type": "constant"
          }
        },
        layout_symbol: {
          "symbol-placement": {
            type: "enum",
            values: {
              point: {doc: "The label is placed at the point where the geometry is located."},
              line: {doc: "The label is placed along the line of the geometry. Can only be used on `LineString` and `Polygon` geometries."},
              "line-center": {doc: "The label is placed at the center of the line of the geometry. Can only be used on `LineString` and `Polygon` geometries. Note that a single feature in a vector tile may contain multiple line geometries."}
            },
            default: "point",
            doc: "Label placement relative to its geometry.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "`line-center` value": {js: "0.47.0", android: "6.4.0", ios: "4.3.0", macos: "0.10.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "symbol-spacing": {
            type: "number",
            default: 250,
            minimum: 1,
            units: "pixels",
            doc: "Distance between two symbol anchors.",
            requires: [{"symbol-placement": "line"}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "symbol-avoid-edges": {
            type: "boolean",
            default: !1,
            doc: "If true, the symbols will not cross tile edges to avoid mutual collisions. Recommended in layers that don't have enough padding in the vector tile to prevent collisions, or if it is a point symbol layer placed after a line symbol layer. When using a client that supports global collision detection, like Mapbox GL JS version 0.42.0 or greater, enabling this property is not needed to prevent clipped labels at tile boundaries.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "symbol-sort-key": {
            type: "number",
            doc: "Sorts features in ascending order based on this value. Features with lower sort keys are drawn and placed first.  When `icon-allow-overlap` or `text-allow-overlap` is `false`, features with a lower sort key will have priority during placement. When `icon-allow-overlap` or `text-allow-overlap` is set to `true`, features with a higher sort key will overlap over features with a lower sort key.",
            "sdk-support": {
              "basic functionality": {js: "0.53.0", android: "7.4.0", ios: "4.11.0", macos: "0.14.0"},
              "data-driven styling": {js: "0.53.0", android: "7.4.0", ios: "4.11.0", macos: "0.14.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "symbol-z-order": {
            type: "enum",
            values: {
              auto: {doc: "Sorts symbols by `symbol-sort-key` if set. Otherwise, sorts symbols by their y-position relative to the viewport if `icon-allow-overlap` or `text-allow-overlap` is set to `true` or `icon-ignore-placement` or `text-ignore-placement` is `false`."},
              "viewport-y": {doc: "Sorts symbols by their y-position relative to the viewport if `icon-allow-overlap` or `text-allow-overlap` is set to `true` or `icon-ignore-placement` or `text-ignore-placement` is `false`."},
              source: {doc: "Sorts symbols by `symbol-sort-key` if set. Otherwise, no sorting is applied; symbols are rendered in the same order as the source data."}
            },
            default: "auto",
            doc: "Determines whether overlapping symbols in the same layer are rendered in the order that they appear in the data source or by their y-position relative to the viewport. To control the order and prioritization of symbols otherwise, use `symbol-sort-key`.",
            "sdk-support": {"basic functionality": {js: "0.49.0", android: "6.6.0", ios: "4.5.0", macos: "0.12.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-allow-overlap": {
            type: "boolean",
            default: !1,
            doc: "If true, the icon will be visible even if it collides with other previously drawn symbols.",
            requires: ["icon-image"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-ignore-placement": {
            type: "boolean",
            default: !1,
            doc: "If true, other symbols can be visible even if they collide with the icon.",
            requires: ["icon-image"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-optional": {
            type: "boolean",
            default: !1,
            doc: "If true, text will display without their corresponding icons when the icon collides with other symbols and the text does not.",
            requires: ["icon-image", "text-field"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-rotation-alignment": {
            type: "enum",
            values: {
              map: {doc: "When `symbol-placement` is set to `point`, aligns icons east-west. When `symbol-placement` is set to `line` or `line-center`, aligns icon x-axes with the line."},
              viewport: {doc: "Produces icons whose x-axes are aligned with the x-axis of the viewport, regardless of the value of `symbol-placement`."},
              auto: {doc: "When `symbol-placement` is set to `point`, this is equivalent to `viewport`. When `symbol-placement` is set to `line` or `line-center`, this is equivalent to `map`."}
            },
            default: "auto",
            doc: "In combination with `symbol-placement`, determines the rotation behavior of icons.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "`auto` value": {js: "0.25.0", android: "4.2.0", ios: "3.4.0", macos: "0.3.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-size": {
            type: "number",
            default: 1,
            minimum: 0,
            units: "factor of the original icon size",
            doc: "Scales the original size of the icon by the provided factor. The new pixel size of the image will be the original pixel size multiplied by `icon-size`. 1 is the original size; 3 triples the size of the image.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.35.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "icon-text-fit": {
            type: "enum",
            values: {
              none: {doc: "The icon is displayed at its intrinsic aspect ratio."},
              width: {doc: "The icon is scaled in the x-dimension to fit the width of the text."},
              height: {doc: "The icon is scaled in the y-dimension to fit the height of the text."},
              both: {doc: "The icon is scaled in both x- and y-dimensions."}
            },
            default: "none",
            doc: "Scales the icon to fit around the associated text.",
            requires: ["icon-image", "text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.21.0", android: "4.2.0", ios: "3.4.0", macos: "0.2.1"},
              "stretchable icons": {js: "1.6.0", android: "9.2.0", ios: "5.8.0", macos: "0.15.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-text-fit-padding": {
            type: "array",
            value: "number",
            length: 4,
            default: [0, 0, 0, 0],
            units: "pixels",
            doc: "Size of the additional area added to dimensions determined by `icon-text-fit`, in clockwise order: top, right, bottom, left.",
            requires: ["icon-image", "text-field", {"icon-text-fit": ["both", "width", "height"]}],
            "sdk-support": {"basic functionality": {js: "0.21.0", android: "4.2.0", ios: "3.4.0", macos: "0.2.1"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-image": {
            type: "resolvedImage",
            doc: "Name of image in sprite to use for drawing an image background.",
            tokens: !0,
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.35.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "icon-rotate": {
            type: "number",
            default: 0,
            period: 360,
            units: "degrees",
            doc: "Rotates the icon clockwise.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.21.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "icon-padding": {
            type: "number",
            default: 2,
            minimum: 0,
            units: "pixels",
            doc: "Size of the additional area around the icon bounding box used for detecting symbol collisions.",
            requires: ["icon-image"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-keep-upright": {
            type: "boolean",
            default: !1,
            doc: "If true, the icon may be flipped to prevent it from being rendered upside-down.",
            requires: ["icon-image", {"icon-rotation-alignment": "map"}, {"symbol-placement": ["line", "line-center"]}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-offset": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            doc: "Offset distance of icon from its anchor. Positive values indicate right and down, while negative values indicate left and up. Each component is multiplied by the value of `icon-size` to obtain the final offset in pixels. When combined with `icon-rotate` the offset will be as if the rotated direction was up.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "icon-anchor": {
            type: "enum",
            values: {
              center: {doc: "The center of the icon is placed closest to the anchor."},
              left: {doc: "The left side of the icon is placed closest to the anchor."},
              right: {doc: "The right side of the icon is placed closest to the anchor."},
              top: {doc: "The top of the icon is placed closest to the anchor."},
              bottom: {doc: "The bottom of the icon is placed closest to the anchor."},
              "top-left": {doc: "The top left corner of the icon is placed closest to the anchor."},
              "top-right": {doc: "The top right corner of the icon is placed closest to the anchor."},
              "bottom-left": {doc: "The bottom left corner of the icon is placed closest to the anchor."},
              "bottom-right": {doc: "The bottom right corner of the icon is placed closest to the anchor."}
            },
            default: "center",
            doc: "Part of the icon placed closest to the anchor.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.40.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"},
              "data-driven styling": {js: "0.40.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "icon-pitch-alignment": {
            type: "enum",
            values: {
              map: {doc: "The icon is aligned to the plane of the map."},
              viewport: {doc: "The icon is aligned to the plane of the viewport."},
              auto: {doc: "Automatically matches the value of `icon-rotation-alignment`."}
            },
            default: "auto",
            doc: "Orientation of icon when map is pitched.",
            requires: ["icon-image"],
            "sdk-support": {"basic functionality": {js: "0.39.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-pitch-alignment": {
            type: "enum",
            values: {
              map: {doc: "The text is aligned to the plane of the map."},
              viewport: {doc: "The text is aligned to the plane of the viewport."},
              auto: {doc: "Automatically matches the value of `text-rotation-alignment`."}
            },
            default: "auto",
            doc: "Orientation of text when map is pitched.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.21.0", android: "4.2.0", ios: "3.4.0", macos: "0.2.1"},
              "`auto` value": {js: "0.25.0", android: "4.2.0", ios: "3.4.0", macos: "0.3.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-rotation-alignment": {
            type: "enum",
            values: {
              map: {doc: "When `symbol-placement` is set to `point`, aligns text east-west. When `symbol-placement` is set to `line` or `line-center`, aligns text x-axes with the line."},
              viewport: {doc: "Produces glyphs whose x-axes are aligned with the x-axis of the viewport, regardless of the value of `symbol-placement`."},
              auto: {doc: "When `symbol-placement` is set to `point`, this is equivalent to `viewport`. When `symbol-placement` is set to `line` or `line-center`, this is equivalent to `map`."}
            },
            default: "auto",
            doc: "In combination with `symbol-placement`, determines the rotation behavior of the individual glyphs forming the text.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "`auto` value": {js: "0.25.0", android: "4.2.0", ios: "3.4.0", macos: "0.3.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-field": {
            type: "formatted",
            default: "",
            tokens: !0,
            doc: "Value to use for a text label. If a plain `string` is provided, it will be treated as a `formatted` with default/inherited formatting options.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-font": {
            type: "array",
            value: "string",
            default: ["Open Sans Regular", "Arial Unicode MS Regular"],
            doc: "Font stack to use for displaying text.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-size": {
            type: "number",
            default: 16,
            minimum: 0,
            units: "pixels",
            doc: "Font size.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.35.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-max-width": {
            type: "number",
            default: 10,
            minimum: 0,
            units: "ems",
            doc: "The maximum line width for text wrapping.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.40.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-line-height": {
            type: "number",
            default: 1.2,
            units: "ems",
            doc: "Text leading value for multi-line text.",
            requires: ["text-field"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-letter-spacing": {
            type: "number",
            default: 0,
            units: "ems",
            doc: "Text tracking amount.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.40.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-justify": {
            type: "enum",
            values: {
              auto: {doc: "The text is aligned towards the anchor position."},
              left: {doc: "The text is aligned to the left."},
              center: {doc: "The text is centered."},
              right: {doc: "The text is aligned to the right."}
            },
            default: "center",
            doc: "Text justification options.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.39.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"},
              auto: {js: "0.54.0", android: "7.4.0", ios: "4.10.0", macos: "0.14.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-radial-offset": {
            type: "number",
            units: "ems",
            default: 0,
            doc: "Radial offset of text, in the direction of the symbol's anchor. Useful in combination with `text-variable-anchor`, which defaults to using the two-dimensional `text-offset` if present.",
            "sdk-support": {
              "basic functionality": {js: "0.54.0", android: "7.4.0", ios: "4.10.0", macos: "0.14.0"},
              "data-driven styling": {js: "0.54.0", android: "7.4.0", ios: "4.10.0", macos: "0.14.0"}
            },
            requires: ["text-field"],
            "property-type": "data-driven",
            expression: {interpolated: !0, parameters: ["zoom", "feature"]}
          },
          "text-variable-anchor": {
            type: "array",
            value: "enum",
            values: {
              center: {doc: "The center of the text is placed closest to the anchor."},
              left: {doc: "The left side of the text is placed closest to the anchor."},
              right: {doc: "The right side of the text is placed closest to the anchor."},
              top: {doc: "The top of the text is placed closest to the anchor."},
              bottom: {doc: "The bottom of the text is placed closest to the anchor."},
              "top-left": {doc: "The top left corner of the text is placed closest to the anchor."},
              "top-right": {doc: "The top right corner of the text is placed closest to the anchor."},
              "bottom-left": {doc: "The bottom left corner of the text is placed closest to the anchor."},
              "bottom-right": {doc: "The bottom right corner of the text is placed closest to the anchor."}
            },
            requires: ["text-field", {"symbol-placement": ["point"]}],
            doc: "To increase the chance of placing high-priority labels on the map, you can provide an array of `text-anchor` locations: the renderer will attempt to place the label at each location, in order, before moving onto the next label. Use `text-justify: auto` to choose justification based on anchor position. To apply an offset, use the `text-radial-offset` or the two-dimensional `text-offset`.",
            "sdk-support": {"basic functionality": {js: "0.54.0", android: "7.4.0", ios: "4.10.0", macos: "0.14.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-anchor": {
            type: "enum",
            values: {
              center: {doc: "The center of the text is placed closest to the anchor."},
              left: {doc: "The left side of the text is placed closest to the anchor."},
              right: {doc: "The right side of the text is placed closest to the anchor."},
              top: {doc: "The top of the text is placed closest to the anchor."},
              bottom: {doc: "The bottom of the text is placed closest to the anchor."},
              "top-left": {doc: "The top left corner of the text is placed closest to the anchor."},
              "top-right": {doc: "The top right corner of the text is placed closest to the anchor."},
              "bottom-left": {doc: "The bottom left corner of the text is placed closest to the anchor."},
              "bottom-right": {doc: "The bottom right corner of the text is placed closest to the anchor."}
            },
            default: "center",
            doc: "Part of the text placed closest to the anchor.",
            requires: ["text-field", {"!": "text-variable-anchor"}],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.39.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-max-angle": {
            type: "number",
            default: 45,
            units: "degrees",
            doc: "Maximum angle change between adjacent characters.",
            requires: ["text-field", {"symbol-placement": ["line", "line-center"]}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-writing-mode": {
            type: "array",
            value: "enum",
            values: {
              horizontal: {doc: "If a text's language supports horizontal writing mode, symbols with point placement would be laid out horizontally."},
              vertical: {doc: "If a text's language supports vertical writing mode, symbols with point placement would be laid out vertically."}
            },
            doc: "The property allows control over a symbol's orientation. Note that the property values act as a hint, so that a symbol whose language doesn’t support the provided orientation will be laid out in its natural orientation. Example: English point symbol will be rendered horizontally even if array value contains single 'vertical' enum value. The order of elements in an array define priority order for the placement of an orientation variant.",
            requires: ["text-field", {"symbol-placement": ["point"]}],
            "sdk-support": {"basic functionality": {js: "1.3.0", android: "8.3.0", ios: "5.3.0", macos: "0.15.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-rotate": {
            type: "number",
            default: 0,
            period: 360,
            units: "degrees",
            doc: "Rotates the text clockwise.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.35.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-padding": {
            type: "number",
            default: 2,
            minimum: 0,
            units: "pixels",
            doc: "Size of the additional area around the text bounding box used for detecting symbol collisions.",
            requires: ["text-field"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-keep-upright": {
            type: "boolean",
            default: !0,
            doc: "If true, the text may be flipped vertically to prevent it from being rendered upside-down.",
            requires: ["text-field", {"text-rotation-alignment": "map"}, {"symbol-placement": ["line", "line-center"]}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-transform": {
            type: "enum",
            values: {
              none: {doc: "The text is not altered."},
              uppercase: {doc: "Forces all letters to be displayed in uppercase."},
              lowercase: {doc: "Forces all letters to be displayed in lowercase."}
            },
            default: "none",
            doc: "Specifies how to capitalize text, similar to the CSS `text-transform` property.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-offset": {
            type: "array",
            doc: "Offset distance of text from its anchor. Positive values indicate right and down, while negative values indicate left and up. If used with text-variable-anchor, input values will be taken as absolute values. Offsets along the x- and y-axis will be applied automatically based on the anchor position.",
            value: "number",
            units: "ems",
            length: 2,
            default: [0, 0],
            requires: ["text-field", {"!": "text-radial-offset"}],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.35.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature"]},
            "property-type": "data-driven"
          },
          "text-allow-overlap": {
            type: "boolean",
            default: !1,
            doc: "If true, the text will be visible even if it collides with other previously drawn symbols.",
            requires: ["text-field"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-ignore-placement": {
            type: "boolean",
            default: !1,
            doc: "If true, other symbols can be visible even if they collide with the text.",
            requires: ["text-field"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-optional": {
            type: "boolean",
            default: !1,
            doc: "If true, icons will display without their corresponding text when the text collides with other symbols and the icon does not.",
            requires: ["text-field", "icon-image"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            "property-type": "constant"
          }
        },
        layout_raster: {
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            "property-type": "constant"
          }
        },
        layout_hillshade: {
          visibility: {
            type: "enum",
            values: {visible: {doc: "The layer is shown."}, none: {doc: "The layer is not shown."}},
            default: "visible",
            doc: "Whether this layer is displayed.",
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            "property-type": "constant"
          }
        },
        filter: {type: "array", value: "*", doc: "A filter selects specific features from a layer."},
        filter_operator: {
          type: "enum",
          values: {
            "==": {doc: '`["==", key, value]` equality: `feature[key] = value`'},
            "!=": {doc: '`["!=", key, value]` inequality: `feature[key] ≠ value`'},
            ">": {doc: '`[">", key, value]` greater than: `feature[key] > value`'},
            ">=": {doc: '`[">=", key, value]` greater than or equal: `feature[key] ≥ value`'},
            "<": {doc: '`["<", key, value]` less than: `feature[key] < value`'},
            "<=": {doc: '`["<=", key, value]` less than or equal: `feature[key] ≤ value`'},
            in: {doc: '`["in", key, v0, ..., vn]` set inclusion: `feature[key] ∈ {v0, ..., vn}`'},
            "!in": {doc: '`["!in", key, v0, ..., vn]` set exclusion: `feature[key] ∉ {v0, ..., vn}`'},
            all: {doc: '`["all", f0, ..., fn]` logical `AND`: `f0 ∧ ... ∧ fn`'},
            any: {doc: '`["any", f0, ..., fn]` logical `OR`: `f0 ∨ ... ∨ fn`'},
            none: {doc: '`["none", f0, ..., fn]` logical `NOR`: `¬f0 ∧ ... ∧ ¬fn`'},
            has: {doc: '`["has", key]` `feature[key]` exists'},
            "!has": {doc: '`["!has", key]` `feature[key]` does not exist'},
            within: {doc: '`["within", object]` feature geometry is within object geometry'}
          },
          doc: "The filter operator."
        },
        geometry_type: {
          type: "enum",
          values: {
            Point: {doc: "Filter to point geometries."},
            LineString: {doc: "Filter to line geometries."},
            Polygon: {doc: "Filter to polygon geometries."}
          },
          doc: "The geometry type for the filter to select."
        },
        function: {
          expression: {type: "expression", doc: "An expression."},
          stops: {type: "array", doc: "An array of stops.", value: "function_stop"},
          base: {
            type: "number",
            default: 1,
            minimum: 0,
            doc: "The exponential base of the interpolation curve. It controls the rate at which the result increases. Higher values make the result increase more towards the high end of the range. With `1` the stops are interpolated linearly."
          },
          property: {
            type: "string",
            doc: "The name of a feature property to use as the function input.",
            default: "$zoom"
          },
          type: {
            type: "enum",
            values: {
              identity: {doc: "Return the input value as the output value."},
              exponential: {doc: "Generate an output by interpolating between stops just less than and just greater than the function input."},
              interval: {doc: "Return the output value of the stop just less than the function input."},
              categorical: {doc: "Return the output value of the stop equal to the function input."}
            },
            doc: "The interpolation strategy to use in function evaluation.",
            default: "exponential"
          },
          colorSpace: {
            type: "enum",
            values: {
              rgb: {doc: "Use the RGB color space to interpolate color values"},
              lab: {doc: "Use the LAB color space to interpolate color values."},
              hcl: {doc: "Use the HCL color space to interpolate color values, interpolating the Hue, Chroma, and Luminance channels individually."}
            },
            doc: "The color space in which colors interpolated. Interpolating colors in perceptual color spaces like LAB and HCL tend to produce color ramps that look more consistent and produce colors that can be differentiated more easily than those interpolated in RGB space.",
            default: "rgb"
          },
          default: {
            type: "*",
            required: !1,
            doc: "A value to serve as a fallback function result when a value isn't otherwise available. It is used in the following circumstances:\n* In categorical functions, when the feature value does not match any of the stop domain values.\n* In property and zoom-and-property functions, when a feature does not contain a value for the specified property.\n* In identity functions, when the feature value is not valid for the style property (for example, if the function is being used for a `circle-color` property but the feature property value is not a string or not a valid color).\n* In interval or exponential property and zoom-and-property functions, when the feature value is not numeric.\nIf no default is provided, the style property's default is used in these circumstances."
          }
        },
        function_stop: {
          type: "array",
          minimum: 0,
          maximum: 24,
          value: ["number", "color"],
          length: 2,
          doc: "Zoom level and value pair."
        },
        expression: {
          type: "array",
          value: "*",
          minimum: 1,
          doc: "An expression defines a function that can be used for data-driven style properties or feature filters."
        },
        expression_name: {
          doc: "", type: "enum", values: {
            let: {
              doc: 'Binds expressions to named variables, which can then be referenced in the result expression using ["var", "variable_name"].',
              group: "Variable binding",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            var: {
              doc: 'References variable bound using "let".',
              group: "Variable binding",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            literal: {
              doc: "Provides a literal array or object value.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            array: {
              doc: "Asserts that the input is an array (optionally with a specific item type and length).  If, when the input expression is evaluated, it is not of the asserted type, then this assertion will cause the whole expression to be aborted.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            at: {
              doc: "Retrieves an item from an array.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            in: {
              doc: "Determines whether an item exists in an array or a substring exists in a string.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "1.6.0", android: "9.1.0", ios: "5.8.0", macos: "0.15.0"}}
            },
            "index-of": {
              doc: "Returns the first position at which an item can be found in an array or a substring can be found in a string, or `-1` if the input cannot be found. Accepts an optional index from where to begin the search.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "1.10.0"}}
            },
            slice: {
              doc: "Returns an item from an array or a substring from a string from a specified start index, or between a start index and an end index if set. The return value is inclusive of the start index but not of the end index.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "1.10.0"}}
            },
            case: {
              doc: "Selects the first output whose corresponding test condition evaluates to true, or the fallback value otherwise.",
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            match: {
              doc: 'Selects the output whose label value matches the input value, or the fallback value if no match is found. The input can be any expression (e.g. `["get", "building_type"]`). Each label must be either:\n - a single literal value; or\n - an array of literal values, whose values must be all strings or all numbers (e.g. `[100, 101]` or `["c", "b"]`). The input matches if any of the values in the array matches, similar to the `"in"` operator.\nEach label must be unique. If the input type does not match the type of the labels, the result will be the fallback value.',
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            coalesce: {
              doc: "Evaluates each expression in turn until the first non-null value is obtained, and returns that value.",
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            step: {
              doc: 'Produces discrete, stepped results by evaluating a piecewise-constant function defined by pairs of input and output values ("stops"). The `input` may be any numeric expression (e.g., `["get", "population"]`). Stop inputs must be numeric literals in strictly ascending order. Returns the output value of the stop just less than the input, or the first output if the input is less than the first stop.',
              group: "Ramps, scales, curves",
              "sdk-support": {"basic functionality": {js: "0.42.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            interpolate: {
              doc: 'Produces continuous, smooth results by interpolating between pairs of input and output values ("stops"). The `input` may be any numeric expression (e.g., `["get", "population"]`). Stop inputs must be numeric literals in strictly ascending order. The output type must be `number`, `array<number>`, or `color`.\n\nInterpolation types:\n- `["linear"]`: Interpolates linearly between the pair of stops just less than and just greater than the input.\n- `["exponential", base]`: Interpolates exponentially between the stops just less than and just greater than the input. `base` controls the rate at which the output increases: higher values make the output increase more towards the high end of the range. With values close to 1 the output increases linearly.\n- `["cubic-bezier", x1, y1, x2, y2]`: Interpolates using the cubic bezier curve defined by the given control points.',
              group: "Ramps, scales, curves",
              "sdk-support": {"basic functionality": {js: "0.42.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "interpolate-hcl": {
              doc: 'Produces continuous, smooth results by interpolating between pairs of input and output values ("stops"). Works like `interpolate`, but the output type must be `color`, and the interpolation is performed in the Hue-Chroma-Luminance color space.',
              group: "Ramps, scales, curves",
              "sdk-support": {"basic functionality": {js: "0.49.0"}}
            },
            "interpolate-lab": {
              doc: 'Produces continuous, smooth results by interpolating between pairs of input and output values ("stops"). Works like `interpolate`, but the output type must be `color`, and the interpolation is performed in the CIELAB color space.',
              group: "Ramps, scales, curves",
              "sdk-support": {"basic functionality": {js: "0.49.0"}}
            },
            ln2: {
              doc: "Returns mathematical constant ln(2).",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            pi: {
              doc: "Returns the mathematical constant pi.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            e: {
              doc: "Returns the mathematical constant e.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            typeof: {
              doc: "Returns a string describing the type of the given value.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            string: {
              doc: "Asserts that the input value is a string. If multiple values are provided, each one is evaluated in order until a string is obtained. If none of the inputs are strings, the expression is an error.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            number: {
              doc: "Asserts that the input value is a number. If multiple values are provided, each one is evaluated in order until a number is obtained. If none of the inputs are numbers, the expression is an error.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            boolean: {
              doc: "Asserts that the input value is a boolean. If multiple values are provided, each one is evaluated in order until a boolean is obtained. If none of the inputs are booleans, the expression is an error.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            object: {
              doc: "Asserts that the input value is an object. If multiple values are provided, each one is evaluated in order until an object is obtained. If none of the inputs are objects, the expression is an error.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            collator: {
              doc: "Returns a `collator` for use in locale-dependent comparison operations. The `case-sensitive` and `diacritic-sensitive` options default to `false`. The `locale` argument specifies the IETF language tag of the locale to use. If none is provided, the default locale is used. If the requested locale is not available, the `collator` will use a system-defined fallback locale. Use `resolved-locale` to test the results of locale fallback behavior.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}}
            },
            format: {
              doc: 'Returns a `formatted` string for displaying mixed-format text in the `text-field` property. The input may contain a string literal or expression, including an [`\'image\'`](#types-image) expression. Strings may be followed by a style override object that supports the following properties:\n- `"text-font"`: Overrides the font stack specified by the root layout property.\n- `"text-color"`: Overrides the color specified by the root paint property.\n- `"font-scale"`: Applies a scaling factor on `text-size` as specified by the root layout property.',
              group: "Types",
              "sdk-support": {
                "basic functionality": {js: "0.48.0", android: "6.7.0", ios: "4.6.0", macos: "0.12.0"},
                "text-font": {js: "0.48.0", android: "6.7.0", ios: "4.6.0", macos: "0.12.0"},
                "font-scale": {js: "0.48.0", android: "6.7.0", ios: "4.6.0", macos: "0.12.0"},
                "text-color": {js: "1.3.0", android: "7.3.0", ios: "4.10.0", macos: "0.14.0"},
                image: {js: "1.6.0", android: "8.6.0", ios: "5.7.0", macos: "0.15.0"}
              }
            },
            image: {
              doc: "Returns an `image` type for use in `icon-image`, `*-pattern` entries and as a section in the `format` expression. If set, the `image` argument will check that the requested image exists in the style and will return either the resolved image name or `null`, depending on whether or not the image is currently in the style. This validation process is synchronous and requires the image to have been added to the style before requesting it in the `image` argument.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "1.4.0", android: "8.6.0", ios: "5.7.0", macos: "0.15.0"}}
            },
            "number-format": {
              doc: "Converts the input number into a string representation using the providing formatting rules. If set, the `locale` argument specifies the locale to use, as a BCP 47 language tag. If set, the `currency` argument specifies an ISO 4217 code to use for currency-style formatting. If set, the `min-fraction-digits` and `max-fraction-digits` arguments specify the minimum and maximum number of fractional digits to include.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.54.0"}}
            },
            "to-string": {
              doc: 'Converts the input value to a string. If the input is `null`, the result is `""`. If the input is a boolean, the result is `"true"` or `"false"`. If the input is a number, it is converted to a string as specified by the ["NumberToString" algorithm](https://tc39.github.io/ecma262/#sec-tostring-applied-to-the-number-type) of the ECMAScript Language Specification. If the input is a color, it is converted to a string of the form `"rgba(r,g,b,a)"`, where `r`, `g`, and `b` are numerals ranging from 0 to 255, and `a` ranges from 0 to 1. Otherwise, the input is converted to a string in the format specified by the [`JSON.stringify`](https://tc39.github.io/ecma262/#sec-json.stringify) function of the ECMAScript Language Specification.',
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "to-number": {
              doc: 'Converts the input value to a number, if possible. If the input is `null` or `false`, the result is 0. If the input is `true`, the result is 1. If the input is a string, it is converted to a number as specified by the ["ToNumber Applied to the String Type" algorithm](https://tc39.github.io/ecma262/#sec-tonumber-applied-to-the-string-type) of the ECMAScript Language Specification. If multiple values are provided, each one is evaluated in order until the first successful conversion is obtained. If none of the inputs can be converted, the expression is an error.',
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "to-boolean": {
              doc: "Converts the input value to a boolean. The result is `false` when then input is an empty string, 0, `false`, `null`, or `NaN`; otherwise it is `true`.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "to-rgba": {
              doc: "Returns a four-element array containing the input color's red, green, blue, and alpha components, in that order.",
              group: "Color",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "to-color": {
              doc: "Converts the input value to a color. If multiple values are provided, each one is evaluated in order until the first successful conversion is obtained. If none of the inputs can be converted, the expression is an error.",
              group: "Types",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            rgb: {
              doc: "Creates a color value from red, green, and blue components, which must range between 0 and 255, and an alpha component of 1. If any component is out of range, the expression is an error.",
              group: "Color",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            rgba: {
              doc: "Creates a color value from red, green, blue components, which must range between 0 and 255, and an alpha component which must range between 0 and 1. If any component is out of range, the expression is an error.",
              group: "Color",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            get: {
              doc: "Retrieves a property value from the current feature's properties, or from another object if a second argument is provided. Returns null if the requested property is missing.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            has: {
              doc: "Tests for the presence of an property value in the current feature's properties, or from another object if a second argument is provided.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            length: {
              doc: "Gets the length of an array or string.",
              group: "Lookup",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            properties: {
              doc: 'Gets the feature properties object.  Note that in some cases, it may be more efficient to use ["get", "property_name"] directly.',
              group: "Feature data",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "feature-state": {
              doc: "Retrieves a property value from the current feature's state. Returns null if the requested property is not present on the feature's state. A feature's state is not part of the GeoJSON or vector tile data, and must be set programmatically on each feature. Features are identified by their `id` attribute, which must be an integer or a string that can be cast to an integer. Note that [\"feature-state\"] can only be used with paint properties that support data-driven styling.",
              group: "Feature data",
              "sdk-support": {"basic functionality": {js: "0.46.0"}}
            },
            "geometry-type": {
              doc: "Gets the feature's geometry type: `Point`, `MultiPoint`, `LineString`, `MultiLineString`, `Polygon`, `MultiPolygon`.",
              group: "Feature data",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            id: {
              doc: "Gets the feature's id, if it has one.",
              group: "Feature data",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            zoom: {
              doc: 'Gets the current zoom level.  Note that in style layout and paint properties, ["zoom"] may only appear as the input to a top-level "step" or "interpolate" expression.',
              group: "Zoom",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "heatmap-density": {
              doc: "Gets the kernel density estimation of a pixel in a heatmap layer, which is a relative measure of how many data points are crowded around a particular pixel. Can only be used in the `heatmap-color` property.",
              group: "Heatmap",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "line-progress": {
              doc: "Gets the progress along a gradient line. Can only be used in the `line-gradient` property.",
              group: "Feature data",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.5.0", ios: "4.6.0", macos: "0.12.0"}}
            },
            "sky-radial-progress": {
              doc: "Gets the distance of a point on the sky from the sun position. Returns 0 at sun position and 1 when the distance reaches `sky-gradient-radius`. Can only be used in the `sky-gradient` property.",
              group: "sky",
              "sdk-support": {"basic functionality": {js: "2.0.0"}}
            },
            accumulated: {
              doc: "Gets the value of a cluster property accumulated so far. Can only be used in the `clusterProperties` option of a clustered GeoJSON source.",
              group: "Feature data",
              "sdk-support": {"basic functionality": {js: "0.53.0"}}
            },
            "+": {
              doc: "Returns the sum of the inputs.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "*": {
              doc: "Returns the product of the inputs.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "-": {
              doc: "For two inputs, returns the result of subtracting the second input from the first. For a single input, returns the result of subtracting it from 0.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "/": {
              doc: "Returns the result of floating point division of the first input by the second.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "%": {
              doc: "Returns the remainder after integer division of the first input by the second.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "^": {
              doc: "Returns the result of raising the first input to the power specified by the second.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            sqrt: {
              doc: "Returns the square root of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.42.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            log10: {
              doc: "Returns the base-ten logarithm of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            ln: {
              doc: "Returns the natural logarithm of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            log2: {
              doc: "Returns the base-two logarithm of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            sin: {
              doc: "Returns the sine of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            cos: {
              doc: "Returns the cosine of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            tan: {
              doc: "Returns the tangent of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            asin: {
              doc: "Returns the arcsine of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            acos: {
              doc: "Returns the arccosine of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            atan: {
              doc: "Returns the arctangent of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            min: {
              doc: "Returns the minimum value of the inputs.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            max: {
              doc: "Returns the maximum value of the inputs.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            round: {
              doc: 'Rounds the input to the nearest integer. Halfway values are rounded away from zero. For example, `["round", -1.5]` evaluates to -2.',
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            abs: {
              doc: "Returns the absolute value of the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            ceil: {
              doc: "Returns the smallest integer that is greater than or equal to the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            floor: {
              doc: "Returns the largest integer that is less than or equal to the input.",
              group: "Math",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            distance: {
              doc: "Returns the shortest distance in meters between the evaluated feature and the input geometry. The input value can be a valid GeoJSON of type `Point`, `MultiPoint`, `LineString`, `MultiLineString`, `Polygon`, `MultiPolygon`, `Feature`, or `FeatureCollection`. Distance values returned may vary in precision due to loss in precision from encoding geometries, particularly below zoom level 13.",
              group: "Math",
              "sdk-support": {"basic functionality": {android: "9.2.0", ios: "5.9.0", macos: "0.16.0"}}
            },
            "==": {
              doc: "Returns `true` if the input values are equal, `false` otherwise. The comparison is strictly typed: values of different runtime types are always considered unequal. Cases where the types are known to be different at parse time are considered invalid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",
              group: "Decision",
              "sdk-support": {
                "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
                collator: {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}
              }
            },
            "!=": {
              doc: "Returns `true` if the input values are not equal, `false` otherwise. The comparison is strictly typed: values of different runtime types are always considered unequal. Cases where the types are known to be different at parse time are considered invalid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",
              group: "Decision",
              "sdk-support": {
                "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
                collator: {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}
              }
            },
            ">": {
              doc: "Returns `true` if the first input is strictly greater than the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",
              group: "Decision",
              "sdk-support": {
                "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
                collator: {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}
              }
            },
            "<": {
              doc: "Returns `true` if the first input is strictly less than the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",
              group: "Decision",
              "sdk-support": {
                "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
                collator: {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}
              }
            },
            ">=": {
              doc: "Returns `true` if the first input is greater than or equal to the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",
              group: "Decision",
              "sdk-support": {
                "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
                collator: {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}
              }
            },
            "<=": {
              doc: "Returns `true` if the first input is less than or equal to the second, `false` otherwise. The arguments are required to be either both strings or both numbers; if during evaluation they are not, expression evaluation produces an error. Cases where this constraint is known not to hold at parse time are considered in valid and will produce a parse error. Accepts an optional `collator` argument to control locale-dependent string comparisons.",
              group: "Decision",
              "sdk-support": {
                "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
                collator: {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}
              }
            },
            all: {
              doc: "Returns `true` if all the inputs are `true`, `false` otherwise. The inputs are evaluated in order, and evaluation is short-circuiting: once an input expression evaluates to `false`, the result is `false` and no further input expressions are evaluated.",
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            any: {
              doc: "Returns `true` if any of the inputs are `true`, `false` otherwise. The inputs are evaluated in order, and evaluation is short-circuiting: once an input expression evaluates to `true`, the result is `true` and no further input expressions are evaluated.",
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "!": {
              doc: "Logical negation. Returns `true` if the input is `false`, and `false` if the input is `true`.",
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            within: {
              doc: "Returns `true` if the evaluated feature is fully contained inside a boundary of the input geometry, `false` otherwise. The input value can be a valid GeoJSON of type `Polygon`, `MultiPolygon`, `Feature`, or `FeatureCollection`. Supported features for evaluation:\n- `Point`: Returns `false` if a point is on the boundary or falls outside the boundary.\n- `LineString`: Returns `false` if any part of a line falls outside the boundary, the line intersects the boundary, or a line's endpoint is on the boundary.",
              group: "Decision",
              "sdk-support": {"basic functionality": {js: "1.9.0", android: "9.1.0", ios: "5.8.0", macos: "0.15.0"}}
            },
            "is-supported-script": {
              doc: "Returns `true` if the input string is expected to render legibly. Returns `false` if the input string contains sections that cannot be rendered without potential loss of meaning (e.g. Indic scripts that require complex text shaping, or right-to-left scripts if the the `mapbox-gl-rtl-text` plugin is not in use in Mapbox GL JS).",
              group: "String",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.6.0"}}
            },
            upcase: {
              doc: "Returns the input string converted to uppercase. Follows the Unicode Default Case Conversion algorithm and the locale-insensitive case mappings in the Unicode Character Database.",
              group: "String",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            downcase: {
              doc: "Returns the input string converted to lowercase. Follows the Unicode Default Case Conversion algorithm and the locale-insensitive case mappings in the Unicode Character Database.",
              group: "String",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            concat: {
              doc: "Returns a `string` consisting of the concatenation of the inputs. Each input is converted to a string as if by `to-string`.",
              group: "String",
              "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}}
            },
            "resolved-locale": {
              doc: "Returns the IETF language tag of the locale being used by the provided `collator`. This can be used to determine the default system locale, or to determine if a requested locale was successfully loaded.",
              group: "String",
              "sdk-support": {"basic functionality": {js: "0.45.0", android: "6.5.0", ios: "4.2.0", macos: "0.9.0"}}
            }
          }
        },
        light: {
          anchor: {
            type: "enum",
            default: "viewport",
            values: {
              map: {doc: "The position of the light source is aligned to the rotation of the map."},
              viewport: {doc: "The position of the light source is aligned to the rotation of the viewport."}
            },
            "property-type": "data-constant",
            transition: !1,
            expression: {interpolated: !1, parameters: ["zoom"]},
            doc: "Whether extruded geometries are lit relative to the map or viewport.",
            example: "map",
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}}
          },
          position: {
            type: "array",
            default: [1.15, 210, 30],
            length: 3,
            value: "number",
            "property-type": "data-constant",
            transition: !0,
            expression: {interpolated: !0, parameters: ["zoom"]},
            doc: "Position of the light source relative to lit (extruded) geometries, in [r radial coordinate, a azimuthal angle, p polar angle] where r indicates the distance from the center of the base of an object to its light, a indicates the position of the light relative to 0° (0° when `light.anchor` is set to `viewport` corresponds to the top of the viewport, or 0° when `light.anchor` is set to `map` corresponds to due north, and degrees proceed clockwise), and p indicates the height of the light (from 0°, directly above, to 180°, directly below).",
            example: [1.5, 90, 80],
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}}
          },
          color: {
            type: "color",
            "property-type": "data-constant",
            default: "#ffffff",
            expression: {interpolated: !0, parameters: ["zoom"]},
            transition: !0,
            doc: "Color tint for lighting extruded geometries.",
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}}
          },
          intensity: {
            type: "number",
            "property-type": "data-constant",
            default: .5,
            minimum: 0,
            maximum: 1,
            expression: {interpolated: !0, parameters: ["zoom"]},
            transition: !0,
            doc: "Intensity of lighting (on a scale from 0 to 1). Higher numbers will present as more extreme contrast.",
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}}
          }
        },
        terrain: {
          source: {
            type: "string",
            doc: "Name of a source of `raster_dem` type to be used for terrain elevation.",
            required: !0
          },
          exaggeration: {
            type: "number",
            "property-type": "data-constant",
            default: 1,
            minimum: 0,
            maximum: 1e3,
            expression: {interpolated: !0, parameters: ["zoom"]},
            transition: !0,
            doc: "Exaggerates the elevation of the terrain by multiplying the data from the DEM with this value.",
            "sdk-support": {"basic functionality": {js: "2.0.0"}}
          }
        },
        paint: ["paint_fill", "paint_line", "paint_circle", "paint_heatmap", "paint_fill-extrusion", "paint_symbol", "paint_raster", "paint_hillshade", "paint_background", "paint_sky"],
        paint_fill: {
          "fill-antialias": {
            type: "boolean",
            default: !0,
            doc: "Whether or not the fill should be antialiased.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "fill-opacity": {
            type: "number",
            default: 1,
            minimum: 0,
            maximum: 1,
            doc: "The opacity of the entire fill layer. In contrast to the `fill-color`, this value will also affect the 1px stroke around the fill, if the stroke is used.",
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.21.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "fill-color": {
            type: "color",
            default: "#000000",
            doc: "The color of the filled part of this layer. This color can be specified as `rgba` with an alpha component and the color's opacity will not affect the opacity of the 1px stroke, if it is used.",
            transition: !0,
            requires: [{"!": "fill-pattern"}],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.19.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "fill-outline-color": {
            type: "color",
            doc: "The outline color of the fill. Matches the value of `fill-color` if unspecified.",
            transition: !0,
            requires: [{"!": "fill-pattern"}, {"fill-antialias": !0}],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.19.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "fill-translate": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            transition: !0,
            units: "pixels",
            doc: "The geometry's offset. Values are [x, y] where negatives indicate left and up, respectively.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "fill-translate-anchor": {
            type: "enum",
            values: {
              map: {doc: "The fill is translated relative to the map."},
              viewport: {doc: "The fill is translated relative to the viewport."}
            },
            doc: "Controls the frame of reference for `fill-translate`.",
            default: "map",
            requires: ["fill-translate"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "fill-pattern": {
            type: "resolvedImage",
            transition: !0,
            doc: "Name of image in sprite to use for drawing image fills. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.49.0", android: "6.5.0", macos: "0.11.0", ios: "4.4.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "cross-faded-data-driven"
          }
        },
        "paint_fill-extrusion": {
          "fill-extrusion-opacity": {
            type: "number",
            default: 1,
            minimum: 0,
            maximum: 1,
            doc: "The opacity of the entire fill extrusion layer. This is rendered on a per-layer, not per-feature, basis, and data-driven styling is not available.",
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "fill-extrusion-color": {
            type: "color",
            default: "#000000",
            doc: "The base color of the extruded fill. The extrusion's surfaces will be shaded differently based on this color in combination with the root `light` settings. If this color is specified as `rgba` with an alpha component, the alpha component will be ignored; use `fill-extrusion-opacity` to set layer opacity.",
            transition: !0,
            requires: [{"!": "fill-extrusion-pattern"}],
            "sdk-support": {
              "basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"},
              "data-driven styling": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "fill-extrusion-translate": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            transition: !0,
            units: "pixels",
            doc: "The geometry's offset. Values are [x, y] where negatives indicate left and up (on the flat plane), respectively.",
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "fill-extrusion-translate-anchor": {
            type: "enum",
            values: {
              map: {doc: "The fill extrusion is translated relative to the map."},
              viewport: {doc: "The fill extrusion is translated relative to the viewport."}
            },
            doc: "Controls the frame of reference for `fill-extrusion-translate`.",
            default: "map",
            requires: ["fill-extrusion-translate"],
            "sdk-support": {"basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "fill-extrusion-pattern": {
            type: "resolvedImage",
            transition: !0,
            doc: "Name of image in sprite to use for drawing images on extruded fills. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.",
            "sdk-support": {
              "basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"},
              "data-driven styling": {js: "0.49.0", android: "6.5.0", macos: "0.11.0", ios: "4.4.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "cross-faded-data-driven"
          },
          "fill-extrusion-height": {
            type: "number",
            default: 0,
            minimum: 0,
            units: "meters",
            doc: "The height with which to extrude this layer.",
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"},
              "data-driven styling": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "fill-extrusion-base": {
            type: "number",
            default: 0,
            minimum: 0,
            units: "meters",
            doc: "The height with which to extrude the base of this layer. Must be less than or equal to `fill-extrusion-height`.",
            transition: !0,
            requires: ["fill-extrusion-height"],
            "sdk-support": {
              "basic functionality": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"},
              "data-driven styling": {js: "0.27.0", android: "5.1.0", ios: "3.6.0", macos: "0.5.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "fill-extrusion-vertical-gradient": {
            type: "boolean",
            default: !0,
            doc: "Whether to apply a vertical gradient to the sides of a fill-extrusion layer. If true, sides will be shaded slightly darker farther down.",
            transition: !1,
            "sdk-support": {"basic functionality": {js: "0.50.0", ios: "4.7.0", macos: "0.13.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        paint_line: {
          "line-opacity": {
            type: "number",
            doc: "The opacity at which the line will be drawn.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "line-color": {
            type: "color",
            doc: "The color with which the line will be drawn.",
            default: "#000000",
            transition: !0,
            requires: [{"!": "line-pattern"}],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.23.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "line-translate": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            transition: !0,
            units: "pixels",
            doc: "The geometry's offset. Values are [x, y] where negatives indicate left and up, respectively.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "line-translate-anchor": {
            type: "enum",
            values: {
              map: {doc: "The line is translated relative to the map."},
              viewport: {doc: "The line is translated relative to the viewport."}
            },
            doc: "Controls the frame of reference for `line-translate`.",
            default: "map",
            requires: ["line-translate"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "line-width": {
            type: "number",
            default: 1,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "Stroke thickness.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.39.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "line-gap-width": {
            type: "number",
            default: 0,
            minimum: 0,
            doc: "Draws a line casing outside of a line's actual path. Value indicates the width of the inner gap.",
            transition: !0,
            units: "pixels",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "line-offset": {
            type: "number",
            default: 0,
            doc: "The line's offset. For linear features, a positive value offsets the line to the right, relative to the direction of the line, and a negative value to the left. For polygon features, a positive value results in an inset, and a negative value results in an outset.",
            transition: !0,
            units: "pixels",
            "sdk-support": {
              "basic functionality": {js: "0.12.1", android: "3.0.0", ios: "3.1.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "line-blur": {
            type: "number",
            default: 0,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "Blur applied to the line, in pixels.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "line-dasharray": {
            type: "array",
            value: "number",
            doc: "Specifies the lengths of the alternating dashes and gaps that form the dash pattern. The lengths are later scaled by the line width. To convert a dash length to pixels, multiply the length by the current line width. Note that GeoJSON sources with `lineMetrics: true` specified won't render dashed lines to the expected scale. Also note that zoom-dependent expressions will be evaluated only at integer zoom levels.",
            minimum: 0,
            transition: !0,
            units: "line widths",
            requires: [{"!": "line-pattern"}],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "cross-faded"
          },
          "line-pattern": {
            type: "resolvedImage",
            transition: !0,
            doc: "Name of image in sprite to use for drawing image lines. For seamless patterns, image width must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.49.0", android: "6.5.0", macos: "0.11.0", ios: "4.4.0"}
            },
            expression: {interpolated: !1, parameters: ["zoom", "feature"]},
            "property-type": "cross-faded-data-driven"
          },
          "line-gradient": {
            type: "color",
            doc: 'Defines a gradient with which to color a line feature. Can only be used with GeoJSON sources that specify `"lineMetrics": true`.',
            transition: !1,
            requires: [{"!": "line-dasharray"}, {"!": "line-pattern"}, {source: "geojson", has: {lineMetrics: !0}}],
            "sdk-support": {
              "basic functionality": {js: "0.45.0", android: "6.5.0", ios: "4.4.0", macos: "0.11.0"},
              "data-driven styling": {}
            },
            expression: {interpolated: !0, parameters: ["line-progress"]},
            "property-type": "color-ramp"
          }
        },
        paint_circle: {
          "circle-radius": {
            type: "number",
            default: 5,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "Circle radius.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.18.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "circle-color": {
            type: "color",
            default: "#000000",
            doc: "The fill color of the circle.",
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.18.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "circle-blur": {
            type: "number",
            default: 0,
            doc: "Amount to blur the circle. 1 blurs the circle such that only the centerpoint is full opacity.",
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.20.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "circle-opacity": {
            type: "number",
            doc: "The opacity at which the circle will be drawn.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.20.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "circle-translate": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            transition: !0,
            units: "pixels",
            doc: "The geometry's offset. Values are [x, y] where negatives indicate left and up, respectively.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "circle-translate-anchor": {
            type: "enum",
            values: {
              map: {doc: "The circle is translated relative to the map."},
              viewport: {doc: "The circle is translated relative to the viewport."}
            },
            doc: "Controls the frame of reference for `circle-translate`.",
            default: "map",
            requires: ["circle-translate"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "circle-pitch-scale": {
            type: "enum",
            values: {
              map: {doc: "Circles are scaled according to their apparent distance to the camera."},
              viewport: {doc: "Circles are not scaled."}
            },
            default: "map",
            doc: "Controls the scaling behavior of the circle when the map is pitched.",
            "sdk-support": {"basic functionality": {js: "0.21.0", android: "4.2.0", ios: "3.4.0", macos: "0.2.1"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "circle-pitch-alignment": {
            type: "enum",
            values: {
              map: {doc: "The circle is aligned to the plane of the map."},
              viewport: {doc: "The circle is aligned to the plane of the viewport."}
            },
            default: "viewport",
            doc: "Orientation of circle when map is pitched.",
            "sdk-support": {"basic functionality": {js: "0.39.0", android: "5.2.0", ios: "3.7.0", macos: "0.6.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "circle-stroke-width": {
            type: "number",
            default: 0,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "The width of the circle's stroke. Strokes are placed outside of the `circle-radius`.",
            "sdk-support": {
              "basic functionality": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "circle-stroke-color": {
            type: "color",
            default: "#000000",
            doc: "The stroke color of the circle.",
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "circle-stroke-opacity": {
            type: "number",
            doc: "The opacity of the circle's stroke.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {
              "basic functionality": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"},
              "data-driven styling": {js: "0.29.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          }
        },
        paint_heatmap: {
          "heatmap-radius": {
            type: "number",
            default: 30,
            minimum: 1,
            transition: !0,
            units: "pixels",
            doc: "Radius of influence of one heatmap point in pixels. Increasing the value makes the heatmap smoother, but less detailed.",
            "sdk-support": {
              "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
              "data-driven styling": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "heatmap-weight": {
            type: "number",
            default: 1,
            minimum: 0,
            transition: !1,
            doc: "A measure of how much an individual point contributes to the heatmap. A value of 10 would be equivalent to having 10 points of weight 1 in the same spot. Especially useful when combined with clustering.",
            "sdk-support": {
              "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
              "data-driven styling": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "heatmap-intensity": {
            type: "number",
            default: 1,
            minimum: 0,
            transition: !0,
            doc: "Similar to `heatmap-weight` but controls the intensity of the heatmap globally. Primarily used for adjusting the heatmap based on zoom level.",
            "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "heatmap-color": {
            type: "color",
            default: ["interpolate", ["linear"], ["heatmap-density"], 0, "rgba(0, 0, 255, 0)", .1, "royalblue", .3, "cyan", .5, "lime", .7, "yellow", 1, "red"],
            doc: 'Defines the color of each pixel based on its density value in a heatmap.  Should be an expression that uses `["heatmap-density"]` as input.',
            transition: !1,
            "sdk-support": {
              "basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"},
              "data-driven styling": {}
            },
            expression: {interpolated: !0, parameters: ["heatmap-density"]},
            "property-type": "color-ramp"
          },
          "heatmap-opacity": {
            type: "number",
            doc: "The global opacity at which the heatmap layer will be drawn.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.41.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        paint_symbol: {
          "icon-opacity": {
            doc: "The opacity at which the icon will be drawn.",
            type: "number",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "icon-color": {
            type: "color",
            default: "#000000",
            transition: !0,
            doc: "The color of the icon. This can only be used with sdf icons.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "icon-halo-color": {
            type: "color",
            default: "rgba(0, 0, 0, 0)",
            transition: !0,
            doc: "The color of the icon's halo. Icon halos can only be used with SDF icons.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "icon-halo-width": {
            type: "number",
            default: 0,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "Distance of halo to the icon outline.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "icon-halo-blur": {
            type: "number",
            default: 0,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "Fade out the halo towards the outside.",
            requires: ["icon-image"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "icon-translate": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            transition: !0,
            units: "pixels",
            doc: "Distance that the icon's anchor is moved from its original placement. Positive values indicate right and down, while negative values indicate left and up.",
            requires: ["icon-image"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "icon-translate-anchor": {
            type: "enum",
            values: {
              map: {doc: "Icons are translated relative to the map."},
              viewport: {doc: "Icons are translated relative to the viewport."}
            },
            doc: "Controls the frame of reference for `icon-translate`.",
            default: "map",
            requires: ["icon-image", "icon-translate"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-opacity": {
            type: "number",
            doc: "The opacity at which the text will be drawn.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "text-color": {
            type: "color",
            doc: "The color with which the text will be drawn.",
            default: "#000000",
            transition: !0,
            overridable: !0,
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "text-halo-color": {
            type: "color",
            default: "rgba(0, 0, 0, 0)",
            transition: !0,
            doc: "The color of the text's halo, which helps it stand out from backgrounds.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "text-halo-width": {
            type: "number",
            default: 0,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "Distance of halo to the font outline. Max text halo width is 1/4 of the font-size.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "text-halo-blur": {
            type: "number",
            default: 0,
            minimum: 0,
            transition: !0,
            units: "pixels",
            doc: "The halo's fadeout distance towards the outside.",
            requires: ["text-field"],
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {js: "0.33.0", android: "5.0.0", ios: "3.5.0", macos: "0.4.0"}
            },
            expression: {interpolated: !0, parameters: ["zoom", "feature", "feature-state"]},
            "property-type": "data-driven"
          },
          "text-translate": {
            type: "array",
            value: "number",
            length: 2,
            default: [0, 0],
            transition: !0,
            units: "pixels",
            doc: "Distance that the text's anchor is moved from its original placement. Positive values indicate right and down, while negative values indicate left and up.",
            requires: ["text-field"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "text-translate-anchor": {
            type: "enum",
            values: {
              map: {doc: "The text is translated relative to the map."},
              viewport: {doc: "The text is translated relative to the viewport."}
            },
            doc: "Controls the frame of reference for `text-translate`.",
            default: "map",
            requires: ["text-field", "text-translate"],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        paint_raster: {
          "raster-opacity": {
            type: "number",
            doc: "The opacity at which the image will be drawn.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-hue-rotate": {
            type: "number",
            default: 0,
            period: 360,
            transition: !0,
            units: "degrees",
            doc: "Rotates hues around the color wheel.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-brightness-min": {
            type: "number",
            doc: "Increase or reduce the brightness of the image. The value is the minimum brightness.",
            default: 0,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-brightness-max": {
            type: "number",
            doc: "Increase or reduce the brightness of the image. The value is the maximum brightness.",
            default: 1,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-saturation": {
            type: "number",
            doc: "Increase or reduce the saturation of the image.",
            default: 0,
            minimum: -1,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-contrast": {
            type: "number",
            doc: "Increase or reduce the contrast of the image.",
            default: 0,
            minimum: -1,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-resampling": {
            type: "enum",
            doc: "The resampling/interpolation method to use for overscaling, also known as texture magnification filter",
            values: {
              linear: {doc: "(Bi)linear filtering interpolates pixel values using the weighted average of the four closest original source pixels creating a smooth but blurry look when overscaled"},
              nearest: {doc: "Nearest neighbor filtering interpolates pixel values using the nearest original source pixel creating a sharp but pixelated look when overscaled"}
            },
            default: "linear",
            "sdk-support": {"basic functionality": {js: "0.47.0", android: "6.3.0", ios: "4.2.0", macos: "0.9.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "raster-fade-duration": {
            type: "number",
            default: 300,
            minimum: 0,
            transition: !1,
            units: "milliseconds",
            doc: "Fade duration when a new tile is added.",
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        paint_hillshade: {
          "hillshade-illumination-direction": {
            type: "number",
            default: 335,
            minimum: 0,
            maximum: 359,
            doc: "The direction of the light source used to generate the hillshading with 0 as the top of the viewport if `hillshade-illumination-anchor` is set to `viewport` and due north if `hillshade-illumination-anchor` is set to `map`.",
            transition: !1,
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "hillshade-illumination-anchor": {
            type: "enum",
            values: {
              map: {doc: "The hillshade illumination is relative to the north direction."},
              viewport: {doc: "The hillshade illumination is relative to the top of the viewport."}
            },
            default: "viewport",
            doc: "Direction of light source when map is rotated.",
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "hillshade-exaggeration": {
            type: "number",
            doc: "Intensity of the hillshade",
            default: .5,
            minimum: 0,
            maximum: 1,
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "hillshade-shadow-color": {
            type: "color",
            default: "#000000",
            doc: "The shading color of areas that face away from the light source.",
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "hillshade-highlight-color": {
            type: "color",
            default: "#FFFFFF",
            doc: "The shading color of areas that faces towards the light source.",
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "hillshade-accent-color": {
            type: "color",
            default: "#000000",
            doc: "The shading color used to accentuate rugged terrain like sharp cliffs and gorges.",
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.43.0", android: "6.0.0", ios: "4.0.0", macos: "0.7.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        paint_background: {
          "background-color": {
            type: "color",
            default: "#000000",
            doc: "The color with which the background will be drawn.",
            transition: !0,
            requires: [{"!": "background-pattern"}],
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "background-pattern": {
            type: "resolvedImage",
            transition: !0,
            doc: "Name of image in sprite to use for drawing an image background. For seamless patterns, image width and height must be a factor of two (2, 4, 8, ..., 512). Note that zoom-dependent expressions will be evaluated only at integer zoom levels.",
            "sdk-support": {
              "basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"},
              "data-driven styling": {}
            },
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "cross-faded"
          },
          "background-opacity": {
            type: "number",
            default: 1,
            minimum: 0,
            maximum: 1,
            doc: "The opacity at which the background will be drawn.",
            transition: !0,
            "sdk-support": {"basic functionality": {js: "0.10.0", android: "2.0.1", ios: "2.0.0", macos: "0.1.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        paint_sky: {
          "sky-type": {
            type: "enum",
            values: {
              gradient: {doc: "Renders the sky with a gradient that can be configured with `sky-gradient-radius` and `sky-gradient`."},
              atmosphere: {doc: "Renders the sky with a simulated atmospheric scattering algorithm, the sun direction can be attached to the light position or explicitly set through `sky-atmosphere-sun`."}
            },
            default: "atmosphere",
            doc: "The type of the sky",
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "sky-atmosphere-sun": {
            type: "array",
            value: "number",
            length: 2,
            transition: !1,
            doc: "Position of the sun center [a azimuthal angle, p polar angle]. The azimuthal angle indicates the position of the sun relative to 0° north, where degrees proceed clockwise. The polar angle indicates the height of the sun, where 0° is directly above, at zenith, and 90° at the horizon. When this property is ommitted, the sun center is directly inherited from the light position.",
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            requires: [{"sky-type": "atmosphere"}],
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "sky-atmosphere-sun-intensity": {
            type: "number",
            requires: [{"sky-type": "atmosphere"}],
            default: 10,
            minimum: 0,
            maximum: 100,
            transition: !1,
            doc: "Intensity of the sun as a light source in the atmosphere (on a scale from 0 to a 100). Setting higher values will brighten up the sky.",
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            "property-type": "data-constant"
          },
          "sky-gradient-center": {
            type: "array",
            requires: [{"sky-type": "gradient"}],
            value: "number",
            default: [0, 0],
            length: 2,
            transition: !1,
            doc: "Position of the gradient center [a azimuthal angle, p polar angle]. The azimuthal angle indicates the position of the gradient center relative to 0° north, where degrees proceed clockwise. The polar angle indicates the height of the gradient center, where 0° is directly above, at zenith, and 90° at the horizon.",
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "sky-gradient-radius": {
            type: "number",
            requires: [{"sky-type": "gradient"}],
            default: 90,
            minimum: 0,
            maximum: 180,
            transition: !1,
            doc: "The angular distance (measured in degrees) from `sky-gradient-center` up to which the gradient extends. A value of 180 causes the gradient to wrap around to the opposite direction from `sky-gradient-center`.",
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            expression: {interpolated: !1, parameters: ["zoom"]},
            "property-type": "data-constant"
          },
          "sky-gradient": {
            type: "color",
            default: ["interpolate", ["linear"], ["sky-radial-progress"], .8, "#87ceeb", 1, "white"],
            doc: "Defines a radial color gradient with which to color the sky. The color values can be interpolated with an expression using `sky-radial-progress`. The range [0, 1] for the interpolant covers a radial distance (in degrees) of [0, `sky-gradient-radius`] centered at the position specified by `sky-gradient-center`.",
            transition: !1,
            requires: [{"sky-type": "gradient"}],
            "sdk-support": {"basic functionality": {js: "2.0.0"}, "data-driven styling": {}},
            expression: {interpolated: !0, parameters: ["sky-radial-progress"]},
            "property-type": "color-ramp"
          },
          "sky-atmosphere-halo-color": {
            type: "color",
            default: "white",
            doc: "A color applied to the atmosphere sun halo. The alpha channel describes how strongly the sun halo is represented in an atmosphere sky layer.",
            transition: !1,
            requires: [{"sky-type": "atmosphere"}],
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            "property-type": "data-constant"
          },
          "sky-atmosphere-color": {
            type: "color",
            default: "white",
            doc: "A color used to tweak the main atmospheric scattering coefficients. Using white applies the default coefficients giving the natural blue color to the atmosphere. This color affects how heavily the corresponding wavelength is represented during scattering. The alpha channel describes the density of the atmosphere, with 1 maximum density and 0 no density.",
            transition: !1,
            requires: [{"sky-type": "atmosphere"}],
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            "property-type": "data-constant"
          },
          "sky-opacity": {
            type: "number",
            default: 1,
            minimum: 0,
            maximum: 1,
            doc: "The opacity of the entire sky layer.",
            transition: !0,
            "sdk-support": {"basic functionality": {js: "2.0.0"}},
            expression: {interpolated: !0, parameters: ["zoom"]},
            "property-type": "data-constant"
          }
        },
        transition: {
          duration: {
            type: "number",
            default: 300,
            minimum: 0,
            units: "milliseconds",
            doc: "Time allotted for transitions to complete."
          },
          delay: {
            type: "number",
            default: 0,
            minimum: 0,
            units: "milliseconds",
            doc: "Length of time before a transition begins."
          }
        },
        "property-type": {
          "data-driven": {
            type: "property-type",
            doc: "Property is interpolable and can be represented using a property expression."
          },
          "cross-faded": {
            type: "property-type",
            doc: "Property is non-interpolable; rather, its values will be cross-faded to smoothly transition between integer zooms."
          },
          "cross-faded-data-driven": {
            type: "property-type",
            doc: "Property is non-interpolable; rather, its values will be cross-faded to smoothly transition between integer zooms. It can be represented using a property expression."
          },
          "color-ramp": {
            type: "property-type",
            doc: "Property should be specified using a color ramp from which the output color can be sampled based on a property calculation."
          },
          "data-constant": {
            type: "property-type",
            doc: "Property is interpolable but cannot be represented using a property expression."
          },
          constant: {type: "property-type", doc: "Property is constant across all zoom levels and property values."}
        },
        promoteId: {"*": {type: "string", doc: "A name of a feature property to use as ID for feature state."}}
      };
      var o = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : void 0 !== t ? t : "undefined" != typeof self ? self : {};

      function a() {
        throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")
      }

      function s(t, e) {
        return t(e = {exports: {}}, e.exports), e.exports
      }

      var l = s((function (t, e) {
        !function (r) {
          var n = e && !e.nodeType && e, i = t && !t.nodeType && t, a = "object" == typeof o && o;
          a.global !== a && a.window !== a && a.self !== a || (r = a);
          var s, l, u = 2147483647, c = /^xn--/, h = /[^\x20-\x7E]/, p = /[\x2E\u3002\uFF0E\uFF61]/g, f = {
            overflow: "Overflow: input needs wider integers to process",
            "not-basic": "Illegal input >= 0x80 (not a basic code point)",
            "invalid-input": "Invalid input"
          }, d = Math.floor, g = String.fromCharCode;

          function y(t) {
            throw RangeError(f[t])
          }

          function m(t, e) {
            for (var r = t.length, n = []; r--;) n[r] = e(t[r]);
            return n
          }

          function v(t, e) {
            var r = t.split("@"), n = "";
            return r.length > 1 && (n = r[0] + "@", t = r[1]), n + m((t = t.replace(p, ".")).split("."), e).join(".")
          }

          function _(t) {
            for (var e, r, n = [], i = 0, o = t.length; i < o;) (e = t.charCodeAt(i++)) >= 55296 && e <= 56319 && i < o ? 56320 == (64512 & (r = t.charCodeAt(i++))) ? n.push(((1023 & e) << 10) + (1023 & r) + 65536) : (n.push(e), i--) : n.push(e);
            return n
          }

          function b(t) {
            return m(t, (function (t) {
              var e = "";
              return t > 65535 && (e += g((t -= 65536) >>> 10 & 1023 | 55296), t = 56320 | 1023 & t), e += g(t)
            })).join("")
          }

          function x(t, e) {
            return t + 22 + 75 * (t < 26) - ((0 != e) << 5)
          }

          function w(t, e, r) {
            var n = 0;
            for (t = r ? d(t / 700) : t >> 1, t += d(t / e); t > 455; n += 36) t = d(t / 35);
            return d(n + 36 * t / (t + 38))
          }

          function S(t) {
            var e, r, n, i, o, a, s, l, c, h, p, f = [], g = t.length, m = 0, v = 128, _ = 72;
            for ((r = t.lastIndexOf("-")) < 0 && (r = 0), n = 0; n < r; ++n) t.charCodeAt(n) >= 128 && y("not-basic"), f.push(t.charCodeAt(n));
            for (i = r > 0 ? r + 1 : 0; i < g;) {
              for (o = m, a = 1, s = 36; i >= g && y("invalid-input"), ((l = (p = t.charCodeAt(i++)) - 48 < 10 ? p - 22 : p - 65 < 26 ? p - 65 : p - 97 < 26 ? p - 97 : 36) >= 36 || l > d((u - m) / a)) && y("overflow"), m += l * a, !(l < (c = s <= _ ? 1 : s >= _ + 26 ? 26 : s - _)); s += 36) a > d(u / (h = 36 - c)) && y("overflow"), a *= h;
              _ = w(m - o, e = f.length + 1, 0 == o), d(m / e) > u - v && y("overflow"), v += d(m / e), m %= e, f.splice(m++, 0, v)
            }
            return b(f)
          }

          function E(t) {
            var e, r, n, i, o, a, s, l, c, h, p, f, m, v, b, S = [];
            for (f = (t = _(t)).length, e = 128, r = 0, o = 72, a = 0; a < f; ++a) (p = t[a]) < 128 && S.push(g(p));
            for (n = i = S.length, i && S.push("-"); n < f;) {
              for (s = u, a = 0; a < f; ++a) (p = t[a]) >= e && p < s && (s = p);
              for (s - e > d((u - r) / (m = n + 1)) && y("overflow"), r += (s - e) * m, e = s, a = 0; a < f; ++a) if ((p = t[a]) < e && ++r > u && y("overflow"), p == e) {
                for (l = r, c = 36; !(l < (h = c <= o ? 1 : c >= o + 26 ? 26 : c - o)); c += 36) b = l - h, v = 36 - h, S.push(g(x(h + b % v, 0))), l = d(b / v);
                S.push(g(x(l, 0))), o = w(r, m, n == i), r = 0, ++n
              }
              ++r, ++e
            }
            return S.join("")
          }

          if (s = {
            version: "1.3.2", ucs2: {decode: _, encode: b}, decode: S, encode: E, toASCII: function (t) {
              return v(t, (function (t) {
                return h.test(t) ? "xn--" + E(t) : t
              }))
            }, toUnicode: function (t) {
              return v(t, (function (t) {
                return c.test(t) ? S(t.slice(4).toLowerCase()) : t
              }))
            }
          }, n && i) if (t.exports == n) i.exports = s; else for (l in s) s.hasOwnProperty(l) && (n[l] = s[l]); else r.punycode = s
        }(o)
      })), u = function (t) {
        return "string" == typeof t
      }, c = function (t) {
        return "object" == typeof t && null !== t
      }, h = function (t) {
        return null === t
      }, p = function (t) {
        return null == t
      };

      function f(t, e) {
        return Object.prototype.hasOwnProperty.call(t, e)
      }

      var d = function (t, e, r, n) {
        e = e || "&", r = r || "=";
        var i = {};
        if ("string" != typeof t || 0 === t.length) return i;
        var o = /\+/g;
        t = t.split(e);
        var a = 1e3;
        n && "number" == typeof n.maxKeys && (a = n.maxKeys);
        var s = t.length;
        a > 0 && s > a && (s = a);
        for (var l = 0; l < s; ++l) {
          var u, c, h, p, d = t[l].replace(o, "%20"), g = d.indexOf(r);
          g >= 0 ? (u = d.substr(0, g), c = d.substr(g + 1)) : (u = d, c = ""), h = decodeURIComponent(u), p = decodeURIComponent(c), f(i, h) ? Array.isArray(i[h]) ? i[h].push(p) : i[h] = [i[h], p] : i[h] = p
        }
        return i
      }, g = function (t) {
        switch (typeof t) {
          case"string":
            return t;
          case"boolean":
            return t ? "true" : "false";
          case"number":
            return isFinite(t) ? t : "";
          default:
            return ""
        }
      }, y = function (t, e, r, n) {
        return e = e || "&", r = r || "=", null === t && (t = void 0), "object" == typeof t ? Object.keys(t).map((function (n) {
          var i = encodeURIComponent(g(n)) + r;
          return Array.isArray(t[n]) ? t[n].map((function (t) {
            return i + encodeURIComponent(g(t))
          })).join(e) : i + encodeURIComponent(g(t[n]))
        })).join(e) : n ? encodeURIComponent(g(n)) + r + encodeURIComponent(g(t)) : ""
      }, m = s((function (t, e) {
        e.decode = e.parse = d, e.encode = e.stringify = y
      }));
      m.decode, m.parse, m.encode, m.stringify;

      function v() {
        this.protocol = null, this.slashes = null, this.auth = null, this.host = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.query = null, this.pathname = null, this.path = null, this.href = null
      }

      var _ = /^([a-z0-9.+-]+:)/i, b = /:[0-9]*$/, x = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,
        w = ["{", "}", "|", "\\", "^", "`"].concat(["<", ">", '"', "`", " ", "\r", "\n", "\t"]), S = ["'"].concat(w),
        E = ["%", "/", "?", ";", "#"].concat(S), T = ["/", "?", "#"], C = /^[+a-z0-9A-Z_-]{0,63}$/,
        O = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, P = {javascript: !0, "javascript:": !0},
        R = {javascript: !0, "javascript:": !0}, I = {
          http: !0,
          https: !0,
          ftp: !0,
          gopher: !0,
          file: !0,
          "http:": !0,
          "https:": !0,
          "ftp:": !0,
          "gopher:": !0,
          "file:": !0
        };

      function L(t, e, r) {
        if (t && c(t) && t instanceof v) return t;
        var n = new v;
        return n.parse(t, e, r), n
      }

      v.prototype.parse = function (t, e, r) {
        if (!u(t)) throw new TypeError("Parameter 'url' must be a string, not " + typeof t);
        var n = t.indexOf("?"), i = -1 !== n && n < t.indexOf("#") ? "?" : "#", o = t.split(i);
        o[0] = o[0].replace(/\\/g, "/");
        var a = t = o.join(i);
        if (a = a.trim(), !r && 1 === t.split("#").length) {
          var s = x.exec(a);
          if (s) return this.path = a, this.href = a, this.pathname = s[1], s[2] ? (this.search = s[2], this.query = e ? m.parse(this.search.substr(1)) : this.search.substr(1)) : e && (this.search = "", this.query = {}), this
        }
        var c = _.exec(a);
        if (c) {
          var h = (c = c[0]).toLowerCase();
          this.protocol = h, a = a.substr(c.length)
        }
        if (r || c || a.match(/^\/\/[^@\/]+@[^@\/]+/)) {
          var p = "//" === a.substr(0, 2);
          !p || c && R[c] || (a = a.substr(2), this.slashes = !0)
        }
        if (!R[c] && (p || c && !I[c])) {
          for (var f, d, g = -1, y = 0; y < T.length; y++) {
            -1 !== (v = a.indexOf(T[y])) && (-1 === g || v < g) && (g = v)
          }
          -1 !== (d = -1 === g ? a.lastIndexOf("@") : a.lastIndexOf("@", g)) && (f = a.slice(0, d), a = a.slice(d + 1), this.auth = decodeURIComponent(f)), g = -1;
          for (y = 0; y < E.length; y++) {
            var v;
            -1 !== (v = a.indexOf(E[y])) && (-1 === g || v < g) && (g = v)
          }
          -1 === g && (g = a.length), this.host = a.slice(0, g), a = a.slice(g), this.parseHost(), this.hostname = this.hostname || "";
          var b = "[" === this.hostname[0] && "]" === this.hostname[this.hostname.length - 1];
          if (!b) for (var w = this.hostname.split(/\./), L = (y = 0, w.length); y < L; y++) {
            var M = w[y];
            if (M && !M.match(C)) {
              for (var F = "", A = 0, k = M.length; A < k; A++) M.charCodeAt(A) > 127 ? F += "x" : F += M[A];
              if (!F.match(C)) {
                var j = w.slice(0, y), N = w.slice(y + 1), D = M.match(O);
                D && (j.push(D[1]), N.unshift(D[2])), N.length && (a = "/" + N.join(".") + a), this.hostname = j.join(".");
                break
              }
            }
          }
          this.hostname.length > 255 ? this.hostname = "" : this.hostname = this.hostname.toLowerCase(), b || (this.hostname = l.toASCII(this.hostname));
          var G = this.port ? ":" + this.port : "", z = this.hostname || "";
          this.host = z + G, this.href += this.host, b && (this.hostname = this.hostname.substr(1, this.hostname.length - 2), "/" !== a[0] && (a = "/" + a))
        }
        if (!P[h]) for (y = 0, L = S.length; y < L; y++) {
          var U = S[y];
          if (-1 !== a.indexOf(U)) {
            var B = encodeURIComponent(U);
            B === U && (B = escape(U)), a = a.split(U).join(B)
          }
        }
        var V = a.indexOf("#");
        -1 !== V && (this.hash = a.substr(V), a = a.slice(0, V));
        var Y = a.indexOf("?");
        if (-1 !== Y ? (this.search = a.substr(Y), this.query = a.substr(Y + 1), e && (this.query = m.parse(this.query)), a = a.slice(0, Y)) : e && (this.search = "", this.query = {}), a && (this.pathname = a), I[h] && this.hostname && !this.pathname && (this.pathname = "/"), this.pathname || this.search) {
          G = this.pathname || "";
          var W = this.search || "";
          this.path = G + W
        }
        return this.href = this.format(), this
      }, v.prototype.format = function () {
        var t = this.auth || "";
        t && (t = (t = encodeURIComponent(t)).replace(/%3A/i, ":"), t += "@");
        var e = this.protocol || "", r = this.pathname || "", n = this.hash || "", i = !1, o = "";
        this.host ? i = t + this.host : this.hostname && (i = t + (-1 === this.hostname.indexOf(":") ? this.hostname : "[" + this.hostname + "]"), this.port && (i += ":" + this.port)), this.query && c(this.query) && Object.keys(this.query).length && (o = m.stringify(this.query));
        var a = this.search || o && "?" + o || "";
        return e && ":" !== e.substr(-1) && (e += ":"), this.slashes || (!e || I[e]) && !1 !== i ? (i = "//" + (i || ""), r && "/" !== r.charAt(0) && (r = "/" + r)) : i || (i = ""), n && "#" !== n.charAt(0) && (n = "#" + n), a && "?" !== a.charAt(0) && (a = "?" + a), e + i + (r = r.replace(/[?#]/g, (function (t) {
          return encodeURIComponent(t)
        }))) + (a = a.replace("#", "%23")) + n
      }, v.prototype.resolve = function (t) {
        return this.resolveObject(L(t, !1, !0)).format()
      }, v.prototype.resolveObject = function (t) {
        if (u(t)) {
          var e = new v;
          e.parse(t, !1, !0), t = e
        }
        for (var r = new v, n = Object.keys(this), i = 0; i < n.length; i++) {
          var o = n[i];
          r[o] = this[o]
        }
        if (r.hash = t.hash, "" === t.href) return r.href = r.format(), r;
        if (t.slashes && !t.protocol) {
          for (var a = Object.keys(t), s = 0; s < a.length; s++) {
            var l = a[s];
            "protocol" !== l && (r[l] = t[l])
          }
          return I[r.protocol] && r.hostname && !r.pathname && (r.path = r.pathname = "/"), r.href = r.format(), r
        }
        if (t.protocol && t.protocol !== r.protocol) {
          if (!I[t.protocol]) {
            for (var c = Object.keys(t), f = 0; f < c.length; f++) {
              var d = c[f];
              r[d] = t[d]
            }
            return r.href = r.format(), r
          }
          if (r.protocol = t.protocol, t.host || R[t.protocol]) r.pathname = t.pathname; else {
            for (var g = (t.pathname || "").split("/"); g.length && !(t.host = g.shift());) ;
            t.host || (t.host = ""), t.hostname || (t.hostname = ""), "" !== g[0] && g.unshift(""), g.length < 2 && g.unshift(""), r.pathname = g.join("/")
          }
          if (r.search = t.search, r.query = t.query, r.host = t.host || "", r.auth = t.auth, r.hostname = t.hostname || t.host, r.port = t.port, r.pathname || r.search) {
            var y = r.pathname || "", m = r.search || "";
            r.path = y + m
          }
          return r.slashes = r.slashes || t.slashes, r.href = r.format(), r
        }
        var _ = r.pathname && "/" === r.pathname.charAt(0), b = t.host || t.pathname && "/" === t.pathname.charAt(0),
          x = b || _ || r.host && t.pathname, w = x, S = r.pathname && r.pathname.split("/") || [],
          E = (g = t.pathname && t.pathname.split("/") || [], r.protocol && !I[r.protocol]);
        if (E && (r.hostname = "", r.port = null, r.host && ("" === S[0] ? S[0] = r.host : S.unshift(r.host)), r.host = "", t.protocol && (t.hostname = null, t.port = null, t.host && ("" === g[0] ? g[0] = t.host : g.unshift(t.host)), t.host = null), x = x && ("" === g[0] || "" === S[0])), b) r.host = t.host || "" === t.host ? t.host : r.host, r.hostname = t.hostname || "" === t.hostname ? t.hostname : r.hostname, r.search = t.search, r.query = t.query, S = g; else if (g.length) S || (S = []), S.pop(), S = S.concat(g), r.search = t.search, r.query = t.query; else if (!p(t.search)) {
          if (E) r.hostname = r.host = S.shift(), (L = !!(r.host && r.host.indexOf("@") > 0) && r.host.split("@")) && (r.auth = L.shift(), r.host = r.hostname = L.shift());
          return r.search = t.search, r.query = t.query, h(r.pathname) && h(r.search) || (r.path = (r.pathname ? r.pathname : "") + (r.search ? r.search : "")), r.href = r.format(), r
        }
        if (!S.length) return r.pathname = null, r.search ? r.path = "/" + r.search : r.path = null, r.href = r.format(), r;
        for (var T = S.slice(-1)[0], C = (r.host || t.host || S.length > 1) && ("." === T || ".." === T) || "" === T, O = 0, P = S.length; P >= 0; P--) "." === (T = S[P]) ? S.splice(P, 1) : ".." === T ? (S.splice(P, 1), O++) : O && (S.splice(P, 1), O--);
        if (!x && !w) for (; O--; O) S.unshift("..");
        !x || "" === S[0] || S[0] && "/" === S[0].charAt(0) || S.unshift(""), C && "/" !== S.join("/").substr(-1) && S.push("");
        var L, M = "" === S[0] || S[0] && "/" === S[0].charAt(0);
        E && (r.hostname = r.host = M ? "" : S.length ? S.shift() : "", (L = !!(r.host && r.host.indexOf("@") > 0) && r.host.split("@")) && (r.auth = L.shift(), r.host = r.hostname = L.shift()));
        return (x = x || r.host && S.length) && !M && S.unshift(""), S.length ? r.pathname = S.join("/") : (r.pathname = null, r.path = null), h(r.pathname) && h(r.search) || (r.path = (r.pathname ? r.pathname : "") + (r.search ? r.search : "")), r.auth = t.auth || r.auth, r.slashes = r.slashes || t.slashes, r.href = r.format(), r
      }, v.prototype.parseHost = function () {
        var t = this.host, e = b.exec(t);
        e && (":" !== (e = e[0]) && (this.port = e.substr(1)), t = t.substr(0, t.length - e.length)), t && (this.hostname = t)
      };

      function M(t, ...e) {
        for (const r of e) for (const e in r) t[e] = r[e];
        return t
      }

      class F extends Error {
        constructor(t, e) {
          super(e), this.message = e, this.key = t
        }
      }

      class A {
        constructor(t, e = []) {
          this.parent = t, this.bindings = {};
          for (const [t, r] of e) this.bindings[t] = r
        }

        concat(t) {
          return new A(this, t)
        }

        get(t) {
          if (this.bindings[t]) return this.bindings[t];
          if (this.parent) return this.parent.get(t);
          throw new Error(t + " not found in scope.")
        }

        has(t) {
          return !!this.bindings[t] || !!this.parent && this.parent.has(t)
        }
      }

      const k = {kind: "null"}, j = {kind: "number"}, N = {kind: "string"}, D = {kind: "boolean"}, G = {kind: "color"},
        z = {kind: "object"}, U = {kind: "value"}, B = {kind: "collator"}, V = {kind: "formatted"},
        Y = {kind: "resolvedImage"};

      function W(t, e) {
        return {kind: "array", itemType: t, N: e}
      }

      function q(t) {
        if ("array" === t.kind) {
          const e = q(t.itemType);
          return "number" == typeof t.N ? `array<${e}, ${t.N}>` : "value" === t.itemType.kind ? "array" : `array<${e}>`
        }
        return t.kind
      }

      const X = [k, j, N, D, G, V, z, W(U), Y];

      function Z(t, e) {
        if ("error" === e.kind) return null;
        if ("array" === t.kind) {
          if ("array" === e.kind && (0 === e.N && "value" === e.itemType.kind || !Z(t.itemType, e.itemType)) && ("number" != typeof t.N || t.N === e.N)) return null
        } else {
          if (t.kind === e.kind) return null;
          if ("value" === t.kind) for (const t of X) if (!Z(t, e)) return null
        }
        return `Expected ${q(t)} but found ${q(e)} instead.`
      }

      function K(t, e) {
        return e.some(e => e.kind === t.kind)
      }

      function H(t, e) {
        return e.some(e => "null" === e ? null === t : "array" === e ? Array.isArray(t) : "object" === e ? t && !Array.isArray(t) && "object" == typeof t : e === typeof t)
      }

      var $ = s((function (t, e) {
        var r = {
          transparent: [0, 0, 0, 0],
          aliceblue: [240, 248, 255, 1],
          antiquewhite: [250, 235, 215, 1],
          aqua: [0, 255, 255, 1],
          aquamarine: [127, 255, 212, 1],
          azure: [240, 255, 255, 1],
          beige: [245, 245, 220, 1],
          bisque: [255, 228, 196, 1],
          black: [0, 0, 0, 1],
          blanchedalmond: [255, 235, 205, 1],
          blue: [0, 0, 255, 1],
          blueviolet: [138, 43, 226, 1],
          brown: [165, 42, 42, 1],
          burlywood: [222, 184, 135, 1],
          cadetblue: [95, 158, 160, 1],
          chartreuse: [127, 255, 0, 1],
          chocolate: [210, 105, 30, 1],
          coral: [255, 127, 80, 1],
          cornflowerblue: [100, 149, 237, 1],
          cornsilk: [255, 248, 220, 1],
          crimson: [220, 20, 60, 1],
          cyan: [0, 255, 255, 1],
          darkblue: [0, 0, 139, 1],
          darkcyan: [0, 139, 139, 1],
          darkgoldenrod: [184, 134, 11, 1],
          darkgray: [169, 169, 169, 1],
          darkgreen: [0, 100, 0, 1],
          darkgrey: [169, 169, 169, 1],
          darkkhaki: [189, 183, 107, 1],
          darkmagenta: [139, 0, 139, 1],
          darkolivegreen: [85, 107, 47, 1],
          darkorange: [255, 140, 0, 1],
          darkorchid: [153, 50, 204, 1],
          darkred: [139, 0, 0, 1],
          darksalmon: [233, 150, 122, 1],
          darkseagreen: [143, 188, 143, 1],
          darkslateblue: [72, 61, 139, 1],
          darkslategray: [47, 79, 79, 1],
          darkslategrey: [47, 79, 79, 1],
          darkturquoise: [0, 206, 209, 1],
          darkviolet: [148, 0, 211, 1],
          deeppink: [255, 20, 147, 1],
          deepskyblue: [0, 191, 255, 1],
          dimgray: [105, 105, 105, 1],
          dimgrey: [105, 105, 105, 1],
          dodgerblue: [30, 144, 255, 1],
          firebrick: [178, 34, 34, 1],
          floralwhite: [255, 250, 240, 1],
          forestgreen: [34, 139, 34, 1],
          fuchsia: [255, 0, 255, 1],
          gainsboro: [220, 220, 220, 1],
          ghostwhite: [248, 248, 255, 1],
          gold: [255, 215, 0, 1],
          goldenrod: [218, 165, 32, 1],
          gray: [128, 128, 128, 1],
          green: [0, 128, 0, 1],
          greenyellow: [173, 255, 47, 1],
          grey: [128, 128, 128, 1],
          honeydew: [240, 255, 240, 1],
          hotpink: [255, 105, 180, 1],
          indianred: [205, 92, 92, 1],
          indigo: [75, 0, 130, 1],
          ivory: [255, 255, 240, 1],
          khaki: [240, 230, 140, 1],
          lavender: [230, 230, 250, 1],
          lavenderblush: [255, 240, 245, 1],
          lawngreen: [124, 252, 0, 1],
          lemonchiffon: [255, 250, 205, 1],
          lightblue: [173, 216, 230, 1],
          lightcoral: [240, 128, 128, 1],
          lightcyan: [224, 255, 255, 1],
          lightgoldenrodyellow: [250, 250, 210, 1],
          lightgray: [211, 211, 211, 1],
          lightgreen: [144, 238, 144, 1],
          lightgrey: [211, 211, 211, 1],
          lightpink: [255, 182, 193, 1],
          lightsalmon: [255, 160, 122, 1],
          lightseagreen: [32, 178, 170, 1],
          lightskyblue: [135, 206, 250, 1],
          lightslategray: [119, 136, 153, 1],
          lightslategrey: [119, 136, 153, 1],
          lightsteelblue: [176, 196, 222, 1],
          lightyellow: [255, 255, 224, 1],
          lime: [0, 255, 0, 1],
          limegreen: [50, 205, 50, 1],
          linen: [250, 240, 230, 1],
          magenta: [255, 0, 255, 1],
          maroon: [128, 0, 0, 1],
          mediumaquamarine: [102, 205, 170, 1],
          mediumblue: [0, 0, 205, 1],
          mediumorchid: [186, 85, 211, 1],
          mediumpurple: [147, 112, 219, 1],
          mediumseagreen: [60, 179, 113, 1],
          mediumslateblue: [123, 104, 238, 1],
          mediumspringgreen: [0, 250, 154, 1],
          mediumturquoise: [72, 209, 204, 1],
          mediumvioletred: [199, 21, 133, 1],
          midnightblue: [25, 25, 112, 1],
          mintcream: [245, 255, 250, 1],
          mistyrose: [255, 228, 225, 1],
          moccasin: [255, 228, 181, 1],
          navajowhite: [255, 222, 173, 1],
          navy: [0, 0, 128, 1],
          oldlace: [253, 245, 230, 1],
          olive: [128, 128, 0, 1],
          olivedrab: [107, 142, 35, 1],
          orange: [255, 165, 0, 1],
          orangered: [255, 69, 0, 1],
          orchid: [218, 112, 214, 1],
          palegoldenrod: [238, 232, 170, 1],
          palegreen: [152, 251, 152, 1],
          paleturquoise: [175, 238, 238, 1],
          palevioletred: [219, 112, 147, 1],
          papayawhip: [255, 239, 213, 1],
          peachpuff: [255, 218, 185, 1],
          peru: [205, 133, 63, 1],
          pink: [255, 192, 203, 1],
          plum: [221, 160, 221, 1],
          powderblue: [176, 224, 230, 1],
          purple: [128, 0, 128, 1],
          rebeccapurple: [102, 51, 153, 1],
          red: [255, 0, 0, 1],
          rosybrown: [188, 143, 143, 1],
          royalblue: [65, 105, 225, 1],
          saddlebrown: [139, 69, 19, 1],
          salmon: [250, 128, 114, 1],
          sandybrown: [244, 164, 96, 1],
          seagreen: [46, 139, 87, 1],
          seashell: [255, 245, 238, 1],
          sienna: [160, 82, 45, 1],
          silver: [192, 192, 192, 1],
          skyblue: [135, 206, 235, 1],
          slateblue: [106, 90, 205, 1],
          slategray: [112, 128, 144, 1],
          slategrey: [112, 128, 144, 1],
          snow: [255, 250, 250, 1],
          springgreen: [0, 255, 127, 1],
          steelblue: [70, 130, 180, 1],
          tan: [210, 180, 140, 1],
          teal: [0, 128, 128, 1],
          thistle: [216, 191, 216, 1],
          tomato: [255, 99, 71, 1],
          turquoise: [64, 224, 208, 1],
          violet: [238, 130, 238, 1],
          wheat: [245, 222, 179, 1],
          white: [255, 255, 255, 1],
          whitesmoke: [245, 245, 245, 1],
          yellow: [255, 255, 0, 1],
          yellowgreen: [154, 205, 50, 1]
        };

        function n(t) {
          return (t = Math.round(t)) < 0 ? 0 : t > 255 ? 255 : t
        }

        function i(t) {
          return t < 0 ? 0 : t > 1 ? 1 : t
        }

        function o(t) {
          return "%" === t[t.length - 1] ? n(parseFloat(t) / 100 * 255) : n(parseInt(t))
        }

        function a(t) {
          return "%" === t[t.length - 1] ? i(parseFloat(t) / 100) : i(parseFloat(t))
        }

        function s(t, e, r) {
          return r < 0 ? r += 1 : r > 1 && (r -= 1), 6 * r < 1 ? t + (e - t) * r * 6 : 2 * r < 1 ? e : 3 * r < 2 ? t + (e - t) * (2 / 3 - r) * 6 : t
        }

        try {
          e.parseCSSColor = function (t) {
            var e, i = t.replace(/ /g, "").toLowerCase();
            if (i in r) return r[i].slice();
            if ("#" === i[0]) return 4 === i.length ? (e = parseInt(i.substr(1), 16)) >= 0 && e <= 4095 ? [(3840 & e) >> 4 | (3840 & e) >> 8, 240 & e | (240 & e) >> 4, 15 & e | (15 & e) << 4, 1] : null : 7 === i.length && (e = parseInt(i.substr(1), 16)) >= 0 && e <= 16777215 ? [(16711680 & e) >> 16, (65280 & e) >> 8, 255 & e, 1] : null;
            var l = i.indexOf("("), u = i.indexOf(")");
            if (-1 !== l && u + 1 === i.length) {
              var c = i.substr(0, l), h = i.substr(l + 1, u - (l + 1)).split(","), p = 1;
              switch (c) {
                case"rgba":
                  if (4 !== h.length) return null;
                  p = a(h.pop());
                case"rgb":
                  return 3 !== h.length ? null : [o(h[0]), o(h[1]), o(h[2]), p];
                case"hsla":
                  if (4 !== h.length) return null;
                  p = a(h.pop());
                case"hsl":
                  if (3 !== h.length) return null;
                  var f = (parseFloat(h[0]) % 360 + 360) % 360 / 360, d = a(h[1]), g = a(h[2]),
                    y = g <= .5 ? g * (d + 1) : g + d - g * d, m = 2 * g - y;
                  return [n(255 * s(m, y, f + 1 / 3)), n(255 * s(m, y, f)), n(255 * s(m, y, f - 1 / 3)), p];
                default:
                  return null
              }
            }
            return null
          }
        } catch (t) {
        }
      })).parseCSSColor;

      class J {
        constructor(t, e, r, n = 1) {
          this.r = t, this.g = e, this.b = r, this.a = n
        }

        static parse(t) {
          if (!t) return;
          if (t instanceof J) return t;
          if ("string" != typeof t) return;
          const e = $(t);
          return e ? new J(e[0] / 255 * e[3], e[1] / 255 * e[3], e[2] / 255 * e[3], e[3]) : void 0
        }

        toString() {
          const [t, e, r, n] = this.toArray();
          return `rgba(${Math.round(t)},${Math.round(e)},${Math.round(r)},${n})`
        }

        toArray() {
          const {r: t, g: e, b: r, a: n} = this;
          return 0 === n ? [0, 0, 0, 0] : [255 * t / n, 255 * e / n, 255 * r / n, n]
        }
      }

      J.black = new J(0, 0, 0, 1), J.white = new J(1, 1, 1, 1), J.transparent = new J(0, 0, 0, 0), J.red = new J(1, 0, 0, 1), J.blue = new J(0, 0, 1, 1);

      class Q {
        constructor(t, e, r) {
          this.sensitivity = t ? e ? "variant" : "case" : e ? "accent" : "base", this.locale = r, this.collator = new Intl.Collator(this.locale ? this.locale : [], {
            sensitivity: this.sensitivity,
            usage: "search"
          })
        }

        compare(t, e) {
          return this.collator.compare(t, e)
        }

        resolvedLocale() {
          return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale
        }
      }

      class tt {
        constructor(t, e, r, n, i) {
          this.text = t, this.image = e, this.scale = r, this.fontStack = n, this.textColor = i
        }
      }

      class et {
        constructor(t) {
          this.sections = t
        }

        static fromString(t) {
          return new et([new tt(t, null, null, null, null)])
        }

        isEmpty() {
          return 0 === this.sections.length || !this.sections.some(t => 0 !== t.text.length || t.image && 0 !== t.image.name.length)
        }

        static factory(t) {
          return t instanceof et ? t : et.fromString(t)
        }

        toString() {
          return 0 === this.sections.length ? "" : this.sections.map(t => t.text).join("")
        }

        serialize() {
          const t = ["format"];
          for (const e of this.sections) {
            if (e.image) {
              t.push(["image", e.image.name]);
              continue
            }
            t.push(e.text);
            const r = {};
            e.fontStack && (r["text-font"] = ["literal", e.fontStack.split(",")]), e.scale && (r["font-scale"] = e.scale), e.textColor && (r["text-color"] = ["rgba"].concat(e.textColor.toArray())), t.push(r)
          }
          return t
        }
      }

      class rt {
        constructor(t) {
          this.name = t.name, this.available = t.available
        }

        toString() {
          return this.name
        }

        static fromString(t) {
          return t ? new rt({name: t, available: !1}) : null
        }

        serialize() {
          return ["image", this.name]
        }
      }

      function nt(t, e, r, n) {
        if (!("number" == typeof t && t >= 0 && t <= 255 && "number" == typeof e && e >= 0 && e <= 255 && "number" == typeof r && r >= 0 && r <= 255)) {
          return `Invalid rgba value [${("number" == typeof n ? [t, e, r, n] : [t, e, r]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`
        }
        return void 0 === n || "number" == typeof n && n >= 0 && n <= 1 ? null : `Invalid rgba value [${[t, e, r, n].join(", ")}]: 'a' must be between 0 and 1.`
      }

      function it(t) {
        if (null === t) return !0;
        if ("string" == typeof t) return !0;
        if ("boolean" == typeof t) return !0;
        if ("number" == typeof t) return !0;
        if (t instanceof J) return !0;
        if (t instanceof Q) return !0;
        if (t instanceof et) return !0;
        if (t instanceof rt) return !0;
        if (Array.isArray(t)) {
          for (const e of t) if (!it(e)) return !1;
          return !0
        }
        if ("object" == typeof t) {
          for (const e in t) if (!it(t[e])) return !1;
          return !0
        }
        return !1
      }

      function ot(t) {
        if (null === t) return k;
        if ("string" == typeof t) return N;
        if ("boolean" == typeof t) return D;
        if ("number" == typeof t) return j;
        if (t instanceof J) return G;
        if (t instanceof Q) return B;
        if (t instanceof et) return V;
        if (t instanceof rt) return Y;
        if (Array.isArray(t)) {
          const e = t.length;
          let r;
          for (const e of t) {
            const t = ot(e);
            if (r) {
              if (r === t) continue;
              r = U;
              break
            }
            r = t
          }
          return W(r || U, e)
        }
        return z
      }

      function at(t) {
        const e = typeof t;
        return null === t ? "" : "string" === e || "number" === e || "boolean" === e ? String(t) : t instanceof J || t instanceof et || t instanceof rt ? t.toString() : JSON.stringify(t)
      }

      class st {
        constructor(t, e) {
          this.type = t, this.value = e
        }

        static parse(t, e) {
          if (2 !== t.length) return e.error(`'literal' expression requires exactly one argument, but found ${t.length - 1} instead.`);
          if (!it(t[1])) return e.error("invalid value");
          const r = t[1];
          let n = ot(r);
          const i = e.expectedType;
          return "array" !== n.kind || 0 !== n.N || !i || "array" !== i.kind || "number" == typeof i.N && 0 !== i.N || (n = i), new st(n, r)
        }

        evaluate() {
          return this.value
        }

        eachChild() {
        }

        outputDefined() {
          return !0
        }

        serialize() {
          return "array" === this.type.kind || "object" === this.type.kind ? ["literal", this.value] : this.value instanceof J ? ["rgba"].concat(this.value.toArray()) : this.value instanceof et ? this.value.serialize() : this.value
        }
      }

      class lt {
        constructor(t) {
          this.name = "ExpressionEvaluationError", this.message = t
        }

        toJSON() {
          return this.message
        }
      }

      const ut = {string: N, number: j, boolean: D, object: z};

      class ct {
        constructor(t, e) {
          this.type = t, this.args = e
        }

        static parse(t, e) {
          if (t.length < 2) return e.error("Expected at least one argument.");
          let r, n = 1;
          const i = t[0];
          if ("array" === i) {
            let i, o;
            if (t.length > 2) {
              const r = t[1];
              if ("string" != typeof r || !(r in ut) || "object" === r) return e.error('The item type argument of "array" must be one of string, number, boolean', 1);
              i = ut[r], n++
            } else i = U;
            if (t.length > 3) {
              if (null !== t[2] && ("number" != typeof t[2] || t[2] < 0 || t[2] !== Math.floor(t[2]))) return e.error('The length argument to "array" must be a positive integer literal', 2);
              o = t[2], n++
            }
            r = W(i, o)
          } else r = ut[i];
          const o = [];
          for (; n < t.length; n++) {
            const r = e.parse(t[n], n, U);
            if (!r) return null;
            o.push(r)
          }
          return new ct(r, o)
        }

        evaluate(t) {
          for (let e = 0; e < this.args.length; e++) {
            const r = this.args[e].evaluate(t);
            if (!Z(this.type, ot(r))) return r;
            if (e === this.args.length - 1) throw new lt(`Expected value to be of type ${q(this.type)}, but found ${q(ot(r))} instead.`)
          }
          return null
        }

        eachChild(t) {
          this.args.forEach(t)
        }

        outputDefined() {
          return this.args.every(t => t.outputDefined())
        }

        serialize() {
          const t = this.type, e = [t.kind];
          if ("array" === t.kind) {
            const r = t.itemType;
            if ("string" === r.kind || "number" === r.kind || "boolean" === r.kind) {
              e.push(r.kind);
              const n = t.N;
              ("number" == typeof n || this.args.length > 1) && e.push(n)
            }
          }
          return e.concat(this.args.map(t => t.serialize()))
        }
      }

      class ht {
        constructor(t) {
          this.type = V, this.sections = t
        }

        static parse(t, e) {
          if (t.length < 2) return e.error("Expected at least one argument.");
          const r = t[1];
          if (!Array.isArray(r) && "object" == typeof r) return e.error("First argument must be an image or text section.");
          const n = [];
          let i = !1;
          for (let r = 1; r <= t.length - 1; ++r) {
            const o = t[r];
            if (i && "object" == typeof o && !Array.isArray(o)) {
              i = !1;
              let t = null;
              if (o["font-scale"] && (t = e.parse(o["font-scale"], 1, j), !t)) return null;
              let r = null;
              if (o["text-font"] && (r = e.parse(o["text-font"], 1, W(N)), !r)) return null;
              let a = null;
              if (o["text-color"] && (a = e.parse(o["text-color"], 1, G), !a)) return null;
              const s = n[n.length - 1];
              s.scale = t, s.font = r, s.textColor = a
            } else {
              const o = e.parse(t[r], 1, U);
              if (!o) return null;
              const a = o.type.kind;
              if ("string" !== a && "value" !== a && "null" !== a && "resolvedImage" !== a) return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");
              i = !0, n.push({content: o, scale: null, font: null, textColor: null})
            }
          }
          return new ht(n)
        }

        evaluate(t) {
          return new et(this.sections.map(e => {
            const r = e.content.evaluate(t);
            return ot(r) === Y ? new tt("", r, null, null, null) : new tt(at(r), null, e.scale ? e.scale.evaluate(t) : null, e.font ? e.font.evaluate(t).join(",") : null, e.textColor ? e.textColor.evaluate(t) : null)
          }))
        }

        eachChild(t) {
          for (const e of this.sections) t(e.content), e.scale && t(e.scale), e.font && t(e.font), e.textColor && t(e.textColor)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          const t = ["format"];
          for (const e of this.sections) {
            t.push(e.content.serialize());
            const r = {};
            e.scale && (r["font-scale"] = e.scale.serialize()), e.font && (r["text-font"] = e.font.serialize()), e.textColor && (r["text-color"] = e.textColor.serialize()), t.push(r)
          }
          return t
        }
      }

      class pt {
        constructor(t) {
          this.type = Y, this.input = t
        }

        static parse(t, e) {
          if (2 !== t.length) return e.error("Expected two arguments.");
          const r = e.parse(t[1], 1, N);
          return r ? new pt(r) : e.error("No image name provided.")
        }

        evaluate(t) {
          const e = this.input.evaluate(t), r = rt.fromString(e);
          return r && t.availableImages && (r.available = t.availableImages.indexOf(e) > -1), r
        }

        eachChild(t) {
          t(this.input)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          return ["image", this.input.serialize()]
        }
      }

      const ft = {"to-boolean": D, "to-color": G, "to-number": j, "to-string": N};

      class dt {
        constructor(t, e) {
          this.type = t, this.args = e
        }

        static parse(t, e) {
          if (t.length < 2) return e.error("Expected at least one argument.");
          const r = t[0];
          if (("to-boolean" === r || "to-string" === r) && 2 !== t.length) return e.error("Expected one argument.");
          const n = ft[r], i = [];
          for (let r = 1; r < t.length; r++) {
            const n = e.parse(t[r], r, U);
            if (!n) return null;
            i.push(n)
          }
          return new dt(n, i)
        }

        evaluate(t) {
          if ("boolean" === this.type.kind) return Boolean(this.args[0].evaluate(t));
          if ("color" === this.type.kind) {
            let e, r;
            for (const n of this.args) {
              if (e = n.evaluate(t), r = null, e instanceof J) return e;
              if ("string" == typeof e) {
                const r = t.parseColor(e);
                if (r) return r
              } else if (Array.isArray(e) && (r = e.length < 3 || e.length > 4 ? `Invalid rbga value ${JSON.stringify(e)}: expected an array containing either three or four numeric values.` : nt(e[0], e[1], e[2], e[3]), !r)) return new J(e[0] / 255, e[1] / 255, e[2] / 255, e[3])
            }
            throw new lt(r || `Could not parse color from value '${"string" == typeof e ? e : String(JSON.stringify(e))}'`)
          }
          if ("number" === this.type.kind) {
            let e = null;
            for (const r of this.args) {
              if (e = r.evaluate(t), null === e) return 0;
              const n = Number(e);
              if (!isNaN(n)) return n
            }
            throw new lt(`Could not convert ${JSON.stringify(e)} to number.`)
          }
          return "formatted" === this.type.kind ? et.fromString(at(this.args[0].evaluate(t))) : "resolvedImage" === this.type.kind ? rt.fromString(at(this.args[0].evaluate(t))) : at(this.args[0].evaluate(t))
        }

        eachChild(t) {
          this.args.forEach(t)
        }

        outputDefined() {
          return this.args.every(t => t.outputDefined())
        }

        serialize() {
          if ("formatted" === this.type.kind) return new ht([{
            content: this.args[0],
            scale: null,
            font: null,
            textColor: null
          }]).serialize();
          if ("resolvedImage" === this.type.kind) return new pt(this.args[0]).serialize();
          const t = ["to-" + this.type.kind];
          return this.eachChild(e => {
            t.push(e.serialize())
          }), t
        }
      }

      const gt = ["Unknown", "Point", "LineString", "Polygon"];

      class yt {
        constructor() {
          this.globals = null, this.feature = null, this.featureState = null, this.formattedSection = null, this._parseColorCache = {}, this.availableImages = null, this.canonical = null
        }

        id() {
          return this.feature && "id" in this.feature ? this.feature.id : null
        }

        geometryType() {
          return this.feature ? "number" == typeof this.feature.type ? gt[this.feature.type] : this.feature.type : null
        }

        geometry() {
          return this.feature && "geometry" in this.feature ? this.feature.geometry : null
        }

        canonicalID() {
          return this.canonical
        }

        properties() {
          return this.feature && this.feature.properties || {}
        }

        parseColor(t) {
          let e = this._parseColorCache[t];
          return e || (e = this._parseColorCache[t] = J.parse(t)), e
        }
      }

      class mt {
        constructor(t, e, r, n) {
          this.name = t, this.type = e, this._evaluate = r, this.args = n
        }

        evaluate(t) {
          return this._evaluate(t, this.args)
        }

        eachChild(t) {
          this.args.forEach(t)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          return [this.name].concat(this.args.map(t => t.serialize()))
        }

        static parse(t, e) {
          const r = t[0], n = mt.definitions[r];
          if (!n) return e.error(`Unknown expression "${r}". If you wanted a literal array, use ["literal", [...]].`, 0);
          const i = Array.isArray(n) ? n[0] : n.type, o = Array.isArray(n) ? [[n[1], n[2]]] : n.overloads,
            a = o.filter(([e]) => !Array.isArray(e) || e.length === t.length - 1);
          let s = null;
          for (const [n, o] of a) {
            s = new zt(e.registry, e.path, null, e.scope);
            const a = [];
            let l = !1;
            for (let e = 1; e < t.length; e++) {
              const r = t[e], i = Array.isArray(n) ? n[e - 1] : n.type, o = s.parse(r, 1 + a.length, i);
              if (!o) {
                l = !0;
                break
              }
              a.push(o)
            }
            if (!l) if (Array.isArray(n) && n.length !== a.length) s.error(`Expected ${n.length} arguments, but found ${a.length} instead.`); else {
              for (let t = 0; t < a.length; t++) {
                const e = Array.isArray(n) ? n[t] : n.type, r = a[t];
                s.concat(t + 1).checkSubtype(e, r.type)
              }
              if (0 === s.errors.length) return new mt(r, i, o, a)
            }
          }
          if (1 === a.length) e.errors.push(...s.errors); else {
            const r = (a.length ? a : o).map(([t]) => {
              return e = t, Array.isArray(e) ? `(${e.map(q).join(", ")})` : `(${q(e.type)}...)`;
              var e
            }).join(" | "), n = [];
            for (let r = 1; r < t.length; r++) {
              const i = e.parse(t[r], 1 + n.length);
              if (!i) return null;
              n.push(q(i.type))
            }
            e.error(`Expected arguments of type ${r}, but found (${n.join(", ")}) instead.`)
          }
          return null
        }

        static register(t, e) {
          mt.definitions = e;
          for (const r in e) t[r] = mt
        }
      }

      class vt {
        constructor(t, e, r) {
          this.type = B, this.locale = r, this.caseSensitive = t, this.diacriticSensitive = e
        }

        static parse(t, e) {
          if (2 !== t.length) return e.error("Expected one argument.");
          const r = t[1];
          if ("object" != typeof r || Array.isArray(r)) return e.error("Collator options argument must be an object.");
          const n = e.parse(void 0 !== r["case-sensitive"] && r["case-sensitive"], 1, D);
          if (!n) return null;
          const i = e.parse(void 0 !== r["diacritic-sensitive"] && r["diacritic-sensitive"], 1, D);
          if (!i) return null;
          let o = null;
          return r.locale && (o = e.parse(r.locale, 1, N), !o) ? null : new vt(n, i, o)
        }

        evaluate(t) {
          return new Q(this.caseSensitive.evaluate(t), this.diacriticSensitive.evaluate(t), this.locale ? this.locale.evaluate(t) : null)
        }

        eachChild(t) {
          t(this.caseSensitive), t(this.diacriticSensitive), this.locale && t(this.locale)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          const t = {};
          return t["case-sensitive"] = this.caseSensitive.serialize(), t["diacritic-sensitive"] = this.diacriticSensitive.serialize(), this.locale && (t.locale = this.locale.serialize()), ["collator", t]
        }
      }

      function _t(t, e) {
        t[0] = Math.min(t[0], e[0]), t[1] = Math.min(t[1], e[1]), t[2] = Math.max(t[2], e[0]), t[3] = Math.max(t[3], e[1])
      }

      function bt(t, e) {
        return !(t[0] <= e[0]) && (!(t[2] >= e[2]) && (!(t[1] <= e[1]) && !(t[3] >= e[3])))
      }

      function xt(t, e) {
        const r = (180 + t[0]) / 360;
        const n = (i = t[1], (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + i * Math.PI / 360))) / 360);
        var i;
        const o = Math.pow(2, e.z);
        return [Math.round(r * o * 8192), Math.round(n * o * 8192)]
      }

      function wt(t, e, r) {
        const n = t[0] - e[0], i = t[1] - e[1], o = t[0] - r[0], a = t[1] - r[1];
        return n * a - o * i == 0 && n * o <= 0 && i * a <= 0
      }

      function St(t, e) {
        let r = !1;
        for (let a = 0, s = e.length; a < s; a++) {
          const s = e[a];
          for (let e = 0, a = s.length; e < a - 1; e++) {
            if (wt(t, s[e], s[e + 1])) return !1;
            n = t, i = s[e], o = s[e + 1], i[1] > n[1] != o[1] > n[1] && n[0] < (o[0] - i[0]) * (n[1] - i[1]) / (o[1] - i[1]) + i[0] && (r = !r)
          }
        }
        var n, i, o;
        return r
      }

      function Et(t, e) {
        for (let r = 0; r < e.length; r++) if (St(t, e[r])) return !0;
        return !1
      }

      function Tt(t, e, r, n) {
        const i = t[0] - r[0], o = t[1] - r[1], a = e[0] - r[0], s = e[1] - r[1], l = n[0] - r[0], u = n[1] - r[1],
          c = i * u - l * o, h = a * u - l * s;
        return c > 0 && h < 0 || c < 0 && h > 0
      }

      function Ct(t, e, r, n) {
        const i = [e[0] - t[0], e[1] - t[1]], o = [n[0] - r[0], n[1] - r[1]];
        return 0 != (a = o)[0] * (s = i)[1] - a[1] * s[0] && !(!Tt(t, e, r, n) || !Tt(r, n, t, e));
        var a, s
      }

      function Ot(t, e, r) {
        for (const n of r) for (let r = 0; r < n.length - 1; ++r) if (Ct(t, e, n[r], n[r + 1])) return !0;
        return !1
      }

      function Pt(t, e) {
        for (let r = 0; r < t.length; ++r) if (!St(t[r], e)) return !1;
        for (let r = 0; r < t.length - 1; ++r) if (Ot(t[r], t[r + 1], e)) return !1;
        return !0
      }

      function Rt(t, e) {
        for (let r = 0; r < e.length; r++) if (Pt(t, e[r])) return !0;
        return !1
      }

      function It(t, e, r) {
        const n = [];
        for (let i = 0; i < t.length; i++) {
          const o = [];
          for (let n = 0; n < t[i].length; n++) {
            const a = xt(t[i][n], r);
            _t(e, a), o.push(a)
          }
          n.push(o)
        }
        return n
      }

      function Lt(t, e, r) {
        const n = [];
        for (let i = 0; i < t.length; i++) {
          const o = It(t[i], e, r);
          n.push(o)
        }
        return n
      }

      function Mt(t, e, r, n) {
        if (t[0] < r[0] || t[0] > r[2]) {
          const e = .5 * n;
          let i = t[0] - r[0] > e ? -n : r[0] - t[0] > e ? n : 0;
          0 === i && (i = t[0] - r[2] > e ? -n : r[2] - t[0] > e ? n : 0), t[0] += i
        }
        _t(e, t)
      }

      function Ft(t, e, r, n) {
        const i = 8192 * Math.pow(2, n.z), o = [8192 * n.x, 8192 * n.y], a = [];
        for (const n of t) for (const t of n) {
          const n = [t.x + o[0], t.y + o[1]];
          Mt(n, e, r, i), a.push(n)
        }
        return a
      }

      function At(t, e, r, n) {
        const i = 8192 * Math.pow(2, n.z), o = [8192 * n.x, 8192 * n.y], a = [];
        for (const r of t) {
          const t = [];
          for (const n of r) {
            const r = [n.x + o[0], n.y + o[1]];
            _t(e, r), t.push(r)
          }
          a.push(t)
        }
        if (e[2] - e[0] <= i / 2) {
          (s = e)[0] = s[1] = 1 / 0, s[2] = s[3] = -1 / 0;
          for (const t of a) for (const n of t) Mt(n, e, r, i)
        }
        var s;
        return a
      }

      class kt {
        constructor(t, e) {
          this.type = D, this.geojson = t, this.geometries = e
        }

        static parse(t, e) {
          if (2 !== t.length) return e.error(`'within' expression requires exactly one argument, but found ${t.length - 1} instead.`);
          if (it(t[1])) {
            const e = t[1];
            if ("FeatureCollection" === e.type) for (let t = 0; t < e.features.length; ++t) {
              const r = e.features[t].geometry.type;
              if ("Polygon" === r || "MultiPolygon" === r) return new kt(e, e.features[t].geometry)
            } else if ("Feature" === e.type) {
              const t = e.geometry.type;
              if ("Polygon" === t || "MultiPolygon" === t) return new kt(e, e.geometry)
            } else if ("Polygon" === e.type || "MultiPolygon" === e.type) return new kt(e, e)
          }
          return e.error("'within' expression requires valid geojson object that contains polygon geometry type.")
        }

        evaluate(t) {
          if (null != t.geometry() && null != t.canonicalID()) {
            if ("Point" === t.geometryType()) return function (t, e) {
              const r = [1 / 0, 1 / 0, -1 / 0, -1 / 0], n = [1 / 0, 1 / 0, -1 / 0, -1 / 0], i = t.canonicalID();
              if ("Polygon" === e.type) {
                const o = It(e.coordinates, n, i), a = Ft(t.geometry(), r, n, i);
                if (!bt(r, n)) return !1;
                for (const t of a) if (!St(t, o)) return !1
              }
              if ("MultiPolygon" === e.type) {
                const o = Lt(e.coordinates, n, i), a = Ft(t.geometry(), r, n, i);
                if (!bt(r, n)) return !1;
                for (const t of a) if (!Et(t, o)) return !1
              }
              return !0
            }(t, this.geometries);
            if ("LineString" === t.geometryType()) return function (t, e) {
              const r = [1 / 0, 1 / 0, -1 / 0, -1 / 0], n = [1 / 0, 1 / 0, -1 / 0, -1 / 0], i = t.canonicalID();
              if ("Polygon" === e.type) {
                const o = It(e.coordinates, n, i), a = At(t.geometry(), r, n, i);
                if (!bt(r, n)) return !1;
                for (const t of a) if (!Pt(t, o)) return !1
              }
              if ("MultiPolygon" === e.type) {
                const o = Lt(e.coordinates, n, i), a = At(t.geometry(), r, n, i);
                if (!bt(r, n)) return !1;
                for (const t of a) if (!Rt(t, o)) return !1
              }
              return !0
            }(t, this.geometries)
          }
          return !1
        }

        eachChild() {
        }

        outputDefined() {
          return !0
        }

        serialize() {
          return ["within", this.geojson]
        }
      }

      function jt(t) {
        if (t instanceof mt) {
          if ("get" === t.name && 1 === t.args.length) return !1;
          if ("feature-state" === t.name) return !1;
          if ("has" === t.name && 1 === t.args.length) return !1;
          if ("properties" === t.name || "geometry-type" === t.name || "id" === t.name) return !1;
          if (/^filter-/.test(t.name)) return !1
        }
        if (t instanceof kt) return !1;
        let e = !0;
        return t.eachChild(t => {
          e && !jt(t) && (e = !1)
        }), e
      }

      function Nt(t) {
        if (t instanceof mt && "feature-state" === t.name) return !1;
        let e = !0;
        return t.eachChild(t => {
          e && !Nt(t) && (e = !1)
        }), e
      }

      function Dt(t, e) {
        if (t instanceof mt && e.indexOf(t.name) >= 0) return !1;
        let r = !0;
        return t.eachChild(t => {
          r && !Dt(t, e) && (r = !1)
        }), r
      }

      class Gt {
        constructor(t, e) {
          this.type = e.type, this.name = t, this.boundExpression = e
        }

        static parse(t, e) {
          if (2 !== t.length || "string" != typeof t[1]) return e.error("'var' expression requires exactly one string literal argument.");
          const r = t[1];
          return e.scope.has(r) ? new Gt(r, e.scope.get(r)) : e.error(`Unknown variable "${r}". Make sure "${r}" has been bound in an enclosing "let" expression before using it.`, 1)
        }

        evaluate(t) {
          return this.boundExpression.evaluate(t)
        }

        eachChild() {
        }

        outputDefined() {
          return !1
        }

        serialize() {
          return ["var", this.name]
        }
      }

      class zt {
        constructor(t, e = [], r, n = new A, i = []) {
          this.registry = t, this.path = e, this.key = e.map(t => `[${t}]`).join(""), this.scope = n, this.errors = i, this.expectedType = r
        }

        parse(t, e, r, n, i = {}) {
          return e ? this.concat(e, r, n)._parse(t, i) : this._parse(t, i)
        }

        _parse(t, e) {
          function r(t, e, r) {
            return "assert" === r ? new ct(e, [t]) : "coerce" === r ? new dt(e, [t]) : t
          }

          if (null !== t && "string" != typeof t && "boolean" != typeof t && "number" != typeof t || (t = ["literal", t]), Array.isArray(t)) {
            if (0 === t.length) return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');
            const n = t[0];
            if ("string" != typeof n) return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`, 0), null;
            const i = this.registry[n];
            if (i) {
              let n = i.parse(t, this);
              if (!n) return null;
              if (this.expectedType) {
                const t = this.expectedType, i = n.type;
                if ("string" !== t.kind && "number" !== t.kind && "boolean" !== t.kind && "object" !== t.kind && "array" !== t.kind || "value" !== i.kind) if ("color" !== t.kind && "formatted" !== t.kind && "resolvedImage" !== t.kind || "value" !== i.kind && "string" !== i.kind) {
                  if (this.checkSubtype(t, i)) return null
                } else n = r(n, t, e.typeAnnotation || "coerce"); else n = r(n, t, e.typeAnnotation || "assert")
              }
              if (!(n instanceof st) && "resolvedImage" !== n.type.kind && function t(e) {
                if (e instanceof Gt) return t(e.boundExpression);
                if (e instanceof mt && "error" === e.name) return !1;
                if (e instanceof vt) return !1;
                if (e instanceof kt) return !1;
                const r = e instanceof dt || e instanceof ct;
                let n = !0;
                if (e.eachChild(e => {
                  n = r ? n && t(e) : n && e instanceof st
                }), !n) return !1;
                return jt(e) && Dt(e, ["zoom", "heatmap-density", "line-progress", "sky-radial-progress", "accumulated", "is-supported-script"])
              }(n)) {
                const t = new yt;
                try {
                  n = new st(n.type, n.evaluate(t))
                } catch (t) {
                  return this.error(t.message), null
                }
              }
              return n
            }
            return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`, 0)
          }
          return void 0 === t ? this.error("'undefined' value invalid. Use null instead.") : "object" == typeof t ? this.error('Bare objects invalid. Use ["literal", {...}] instead.') : this.error(`Expected an array, but found ${typeof t} instead.`)
        }

        concat(t, e, r) {
          const n = "number" == typeof t ? this.path.concat(t) : this.path, i = r ? this.scope.concat(r) : this.scope;
          return new zt(this.registry, n, e || null, i, this.errors)
        }

        error(t, ...e) {
          const r = `${this.key}${e.map(t => `[${t}]`).join("")}`;
          this.errors.push(new F(r, t))
        }

        checkSubtype(t, e) {
          const r = Z(t, e);
          return r && this.error(r), r
        }
      }

      function Ut(t, e) {
        const r = t.length - 1;
        let n, i, o = 0, a = r, s = 0;
        for (; o <= a;) if (s = Math.floor((o + a) / 2), n = t[s], i = t[s + 1], n <= e) {
          if (s === r || e < i) return s;
          o = s + 1
        } else {
          if (!(n > e)) throw new lt("Input is not a number.");
          a = s - 1
        }
        return 0
      }

      class Bt {
        constructor(t, e, r) {
          this.type = t, this.input = e, this.labels = [], this.outputs = [];
          for (const [t, e] of r) this.labels.push(t), this.outputs.push(e)
        }

        static parse(t, e) {
          if (t.length - 1 < 4) return e.error(`Expected at least 4 arguments, but found only ${t.length - 1}.`);
          if ((t.length - 1) % 2 != 0) return e.error("Expected an even number of arguments.");
          const r = e.parse(t[1], 1, j);
          if (!r) return null;
          const n = [];
          let i = null;
          e.expectedType && "value" !== e.expectedType.kind && (i = e.expectedType);
          for (let r = 1; r < t.length; r += 2) {
            const o = 1 === r ? -1 / 0 : t[r], a = t[r + 1], s = r, l = r + 1;
            if ("number" != typeof o) return e.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', s);
            if (n.length && n[n.length - 1][0] >= o) return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', s);
            const u = e.parse(a, l, i);
            if (!u) return null;
            i = i || u.type, n.push([o, u])
          }
          return new Bt(i, r, n)
        }

        evaluate(t) {
          const e = this.labels, r = this.outputs;
          if (1 === e.length) return r[0].evaluate(t);
          const n = this.input.evaluate(t);
          if (n <= e[0]) return r[0].evaluate(t);
          const i = e.length;
          if (n >= e[i - 1]) return r[i - 1].evaluate(t);
          return r[Ut(e, n)].evaluate(t)
        }

        eachChild(t) {
          t(this.input);
          for (const e of this.outputs) t(e)
        }

        outputDefined() {
          return this.outputs.every(t => t.outputDefined())
        }

        serialize() {
          const t = ["step", this.input.serialize()];
          for (let e = 0; e < this.labels.length; e++) e > 0 && t.push(this.labels[e]), t.push(this.outputs[e].serialize());
          return t
        }
      }

      var Vt = Yt;

      function Yt(t, e, r, n) {
        this.cx = 3 * t, this.bx = 3 * (r - t) - this.cx, this.ax = 1 - this.cx - this.bx, this.cy = 3 * e, this.by = 3 * (n - e) - this.cy, this.ay = 1 - this.cy - this.by, this.p1x = t, this.p1y = n, this.p2x = r, this.p2y = n
      }

      function Wt(t, e, r) {
        return t * (1 - r) + e * r
      }

      Yt.prototype.sampleCurveX = function (t) {
        return ((this.ax * t + this.bx) * t + this.cx) * t
      }, Yt.prototype.sampleCurveY = function (t) {
        return ((this.ay * t + this.by) * t + this.cy) * t
      }, Yt.prototype.sampleCurveDerivativeX = function (t) {
        return (3 * this.ax * t + 2 * this.bx) * t + this.cx
      }, Yt.prototype.solveCurveX = function (t, e) {
        var r, n, i, o, a;
        for (void 0 === e && (e = 1e-6), i = t, a = 0; a < 8; a++) {
          if (o = this.sampleCurveX(i) - t, Math.abs(o) < e) return i;
          var s = this.sampleCurveDerivativeX(i);
          if (Math.abs(s) < 1e-6) break;
          i -= o / s
        }
        if ((i = t) < (r = 0)) return r;
        if (i > (n = 1)) return n;
        for (; r < n;) {
          if (o = this.sampleCurveX(i), Math.abs(o - t) < e) return i;
          t > o ? r = i : n = i, i = .5 * (n - r) + r
        }
        return i
      }, Yt.prototype.solve = function (t, e) {
        return this.sampleCurveY(this.solveCurveX(t, e))
      };
      var qt = Object.freeze({
        __proto__: null, number: Wt, color: function (t, e, r) {
          return new J(Wt(t.r, e.r, r), Wt(t.g, e.g, r), Wt(t.b, e.b, r), Wt(t.a, e.a, r))
        }, array: function (t, e, r) {
          return t.map((t, n) => Wt(t, e[n], r))
        }
      });
      const Xt = 6 / 29, Zt = 3 * Xt * Xt, Kt = Math.PI / 180, Ht = 180 / Math.PI;

      function $t(t) {
        return t > .008856451679035631 ? Math.pow(t, 1 / 3) : t / Zt + 4 / 29
      }

      function Jt(t) {
        return t > Xt ? t * t * t : Zt * (t - 4 / 29)
      }

      function Qt(t) {
        return 255 * (t <= .0031308 ? 12.92 * t : 1.055 * Math.pow(t, 1 / 2.4) - .055)
      }

      function te(t) {
        return (t /= 255) <= .04045 ? t / 12.92 : Math.pow((t + .055) / 1.055, 2.4)
      }

      function ee(t) {
        const e = te(t.r), r = te(t.g), n = te(t.b), i = $t((.4124564 * e + .3575761 * r + .1804375 * n) / .95047),
          o = $t((.2126729 * e + .7151522 * r + .072175 * n) / 1);
        return {
          l: 116 * o - 16,
          a: 500 * (i - o),
          b: 200 * (o - $t((.0193339 * e + .119192 * r + .9503041 * n) / 1.08883)),
          alpha: t.a
        }
      }

      function re(t) {
        let e = (t.l + 16) / 116, r = isNaN(t.a) ? e : e + t.a / 500, n = isNaN(t.b) ? e : e - t.b / 200;
        return e = 1 * Jt(e), r = .95047 * Jt(r), n = 1.08883 * Jt(n), new J(Qt(3.2404542 * r - 1.5371385 * e - .4985314 * n), Qt(-.969266 * r + 1.8760108 * e + .041556 * n), Qt(.0556434 * r - .2040259 * e + 1.0572252 * n), t.alpha)
      }

      function ne(t, e, r) {
        const n = e - t;
        return t + r * (n > 180 || n < -180 ? n - 360 * Math.round(n / 360) : n)
      }

      const ie = {
        forward: ee, reverse: re, interpolate: function (t, e, r) {
          return {l: Wt(t.l, e.l, r), a: Wt(t.a, e.a, r), b: Wt(t.b, e.b, r), alpha: Wt(t.alpha, e.alpha, r)}
        }
      }, oe = {
        forward: function (t) {
          const {l: e, a: r, b: n} = ee(t), i = Math.atan2(n, r) * Ht;
          return {h: i < 0 ? i + 360 : i, c: Math.sqrt(r * r + n * n), l: e, alpha: t.a}
        }, reverse: function (t) {
          const e = t.h * Kt, r = t.c;
          return re({l: t.l, a: Math.cos(e) * r, b: Math.sin(e) * r, alpha: t.alpha})
        }, interpolate: function (t, e, r) {
          return {h: ne(t.h, e.h, r), c: Wt(t.c, e.c, r), l: Wt(t.l, e.l, r), alpha: Wt(t.alpha, e.alpha, r)}
        }
      };
      var ae = Object.freeze({__proto__: null, lab: ie, hcl: oe});

      class se {
        constructor(t, e, r, n, i) {
          this.type = t, this.operator = e, this.interpolation = r, this.input = n, this.labels = [], this.outputs = [];
          for (const [t, e] of i) this.labels.push(t), this.outputs.push(e)
        }

        static interpolationFactor(t, e, r, n) {
          let i = 0;
          if ("exponential" === t.name) i = le(e, t.base, r, n); else if ("linear" === t.name) i = le(e, 1, r, n); else if ("cubic-bezier" === t.name) {
            const o = t.controlPoints;
            i = new Vt(o[0], o[1], o[2], o[3]).solve(le(e, 1, r, n))
          }
          return i
        }

        static parse(t, e) {
          let [r, n, i, ...o] = t;
          if (!Array.isArray(n) || 0 === n.length) return e.error("Expected an interpolation type expression.", 1);
          if ("linear" === n[0]) n = {name: "linear"}; else if ("exponential" === n[0]) {
            const t = n[1];
            if ("number" != typeof t) return e.error("Exponential interpolation requires a numeric base.", 1, 1);
            n = {name: "exponential", base: t}
          } else {
            if ("cubic-bezier" !== n[0]) return e.error("Unknown interpolation type " + String(n[0]), 1, 0);
            {
              const t = n.slice(1);
              if (4 !== t.length || t.some(t => "number" != typeof t || t < 0 || t > 1)) return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.", 1);
              n = {name: "cubic-bezier", controlPoints: t}
            }
          }
          if (t.length - 1 < 4) return e.error(`Expected at least 4 arguments, but found only ${t.length - 1}.`);
          if ((t.length - 1) % 2 != 0) return e.error("Expected an even number of arguments.");
          if (i = e.parse(i, 2, j), !i) return null;
          const a = [];
          let s = null;
          "interpolate-hcl" === r || "interpolate-lab" === r ? s = G : e.expectedType && "value" !== e.expectedType.kind && (s = e.expectedType);
          for (let t = 0; t < o.length; t += 2) {
            const r = o[t], n = o[t + 1], i = t + 3, l = t + 4;
            if ("number" != typeof r) return e.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.', i);
            if (a.length && a[a.length - 1][0] >= r) return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.', i);
            const u = e.parse(n, l, s);
            if (!u) return null;
            s = s || u.type, a.push([r, u])
          }
          return "number" === s.kind || "color" === s.kind || "array" === s.kind && "number" === s.itemType.kind && "number" == typeof s.N ? new se(s, r, n, i, a) : e.error(`Type ${q(s)} is not interpolatable.`)
        }

        evaluate(t) {
          const e = this.labels, r = this.outputs;
          if (1 === e.length) return r[0].evaluate(t);
          const n = this.input.evaluate(t);
          if (n <= e[0]) return r[0].evaluate(t);
          const i = e.length;
          if (n >= e[i - 1]) return r[i - 1].evaluate(t);
          const o = Ut(e, n), a = e[o], s = e[o + 1], l = se.interpolationFactor(this.interpolation, n, a, s),
            u = r[o].evaluate(t), c = r[o + 1].evaluate(t);
          return "interpolate" === this.operator ? qt[this.type.kind.toLowerCase()](u, c, l) : "interpolate-hcl" === this.operator ? oe.reverse(oe.interpolate(oe.forward(u), oe.forward(c), l)) : ie.reverse(ie.interpolate(ie.forward(u), ie.forward(c), l))
        }

        eachChild(t) {
          t(this.input);
          for (const e of this.outputs) t(e)
        }

        outputDefined() {
          return this.outputs.every(t => t.outputDefined())
        }

        serialize() {
          let t;
          t = "linear" === this.interpolation.name ? ["linear"] : "exponential" === this.interpolation.name ? 1 === this.interpolation.base ? ["linear"] : ["exponential", this.interpolation.base] : ["cubic-bezier"].concat(this.interpolation.controlPoints);
          const e = [this.operator, t, this.input.serialize()];
          for (let t = 0; t < this.labels.length; t++) e.push(this.labels[t], this.outputs[t].serialize());
          return e
        }
      }

      function le(t, e, r, n) {
        const i = n - r, o = t - r;
        return 0 === i ? 0 : 1 === e ? o / i : (Math.pow(e, o) - 1) / (Math.pow(e, i) - 1)
      }

      class ue {
        constructor(t, e) {
          this.type = t, this.args = e
        }

        static parse(t, e) {
          if (t.length < 2) return e.error("Expectected at least one argument.");
          let r = null;
          const n = e.expectedType;
          n && "value" !== n.kind && (r = n);
          const i = [];
          for (const n of t.slice(1)) {
            const t = e.parse(n, 1 + i.length, r, void 0, {typeAnnotation: "omit"});
            if (!t) return null;
            r = r || t.type, i.push(t)
          }
          const o = n && i.some(t => Z(n, t.type));
          return new ue(o ? U : r, i)
        }

        evaluate(t) {
          let e, r = null, n = 0;
          for (const i of this.args) if (n++, r = i.evaluate(t), r && r instanceof rt && !r.available && (e || (e = r.name), r = null, n === this.args.length && (r = e)), null !== r) break;
          return r
        }

        eachChild(t) {
          this.args.forEach(t)
        }

        outputDefined() {
          return this.args.every(t => t.outputDefined())
        }

        serialize() {
          const t = ["coalesce"];
          return this.eachChild(e => {
            t.push(e.serialize())
          }), t
        }
      }

      class ce {
        constructor(t, e) {
          this.type = e.type, this.bindings = [].concat(t), this.result = e
        }

        evaluate(t) {
          return this.result.evaluate(t)
        }

        eachChild(t) {
          for (const e of this.bindings) t(e[1]);
          t(this.result)
        }

        static parse(t, e) {
          if (t.length < 4) return e.error(`Expected at least 3 arguments, but found ${t.length - 1} instead.`);
          const r = [];
          for (let n = 1; n < t.length - 1; n += 2) {
            const i = t[n];
            if ("string" != typeof i) return e.error(`Expected string, but found ${typeof i} instead.`, n);
            if (/[^a-zA-Z0-9_]/.test(i)) return e.error("Variable names must contain only alphanumeric characters or '_'.", n);
            const o = e.parse(t[n + 1], n + 1);
            if (!o) return null;
            r.push([i, o])
          }
          const n = e.parse(t[t.length - 1], t.length - 1, e.expectedType, r);
          return n ? new ce(r, n) : null
        }

        outputDefined() {
          return this.result.outputDefined()
        }

        serialize() {
          const t = ["let"];
          for (const [e, r] of this.bindings) t.push(e, r.serialize());
          return t.push(this.result.serialize()), t
        }
      }

      class he {
        constructor(t, e, r) {
          this.type = t, this.index = e, this.input = r
        }

        static parse(t, e) {
          if (3 !== t.length) return e.error(`Expected 2 arguments, but found ${t.length - 1} instead.`);
          const r = e.parse(t[1], 1, j), n = e.parse(t[2], 2, W(e.expectedType || U));
          if (!r || !n) return null;
          const i = n.type;
          return new he(i.itemType, r, n)
        }

        evaluate(t) {
          const e = this.index.evaluate(t), r = this.input.evaluate(t);
          if (e < 0) throw new lt(`Array index out of bounds: ${e} < 0.`);
          if (e >= r.length) throw new lt(`Array index out of bounds: ${e} > ${r.length - 1}.`);
          if (e !== Math.floor(e)) throw new lt(`Array index must be an integer, but found ${e} instead.`);
          return r[e]
        }

        eachChild(t) {
          t(this.index), t(this.input)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          return ["at", this.index.serialize(), this.input.serialize()]
        }
      }

      class pe {
        constructor(t, e) {
          this.type = D, this.needle = t, this.haystack = e
        }

        static parse(t, e) {
          if (3 !== t.length) return e.error(`Expected 2 arguments, but found ${t.length - 1} instead.`);
          const r = e.parse(t[1], 1, U), n = e.parse(t[2], 2, U);
          return r && n ? K(r.type, [D, N, j, k, U]) ? new pe(r, n) : e.error(`Expected first argument to be of type boolean, string, number or null, but found ${q(r.type)} instead`) : null
        }

        evaluate(t) {
          const e = this.needle.evaluate(t), r = this.haystack.evaluate(t);
          if (!r) return !1;
          if (!H(e, ["boolean", "string", "number", "null"])) throw new lt(`Expected first argument to be of type boolean, string, number or null, but found ${q(ot(e))} instead.`);
          if (!H(r, ["string", "array"])) throw new lt(`Expected second argument to be of type array or string, but found ${q(ot(r))} instead.`);
          return r.indexOf(e) >= 0
        }

        eachChild(t) {
          t(this.needle), t(this.haystack)
        }

        outputDefined() {
          return !0
        }

        serialize() {
          return ["in", this.needle.serialize(), this.haystack.serialize()]
        }
      }

      class fe {
        constructor(t, e, r) {
          this.type = j, this.needle = t, this.haystack = e, this.fromIndex = r
        }

        static parse(t, e) {
          if (t.length <= 2 || t.length >= 5) return e.error(`Expected 3 or 4 arguments, but found ${t.length - 1} instead.`);
          const r = e.parse(t[1], 1, U), n = e.parse(t[2], 2, U);
          if (!r || !n) return null;
          if (!K(r.type, [D, N, j, k, U])) return e.error(`Expected first argument to be of type boolean, string, number or null, but found ${q(r.type)} instead`);
          if (4 === t.length) {
            const i = e.parse(t[3], 3, j);
            return i ? new fe(r, n, i) : null
          }
          return new fe(r, n)
        }

        evaluate(t) {
          const e = this.needle.evaluate(t), r = this.haystack.evaluate(t);
          if (!H(e, ["boolean", "string", "number", "null"])) throw new lt(`Expected first argument to be of type boolean, string, number or null, but found ${q(ot(e))} instead.`);
          if (!H(r, ["string", "array"])) throw new lt(`Expected second argument to be of type array or string, but found ${q(ot(r))} instead.`);
          if (this.fromIndex) {
            const n = this.fromIndex.evaluate(t);
            return r.indexOf(e, n)
          }
          return r.indexOf(e)
        }

        eachChild(t) {
          t(this.needle), t(this.haystack), this.fromIndex && t(this.fromIndex)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          if (null != this.fromIndex && void 0 !== this.fromIndex) {
            const t = this.fromIndex.serialize();
            return ["index-of", this.needle.serialize(), this.haystack.serialize(), t]
          }
          return ["index-of", this.needle.serialize(), this.haystack.serialize()]
        }
      }

      class de {
        constructor(t, e, r, n, i, o) {
          this.inputType = t, this.type = e, this.input = r, this.cases = n, this.outputs = i, this.otherwise = o
        }

        static parse(t, e) {
          if (t.length < 5) return e.error(`Expected at least 4 arguments, but found only ${t.length - 1}.`);
          if (t.length % 2 != 1) return e.error("Expected an even number of arguments.");
          let r, n;
          e.expectedType && "value" !== e.expectedType.kind && (n = e.expectedType);
          const i = {}, o = [];
          for (let a = 2; a < t.length - 1; a += 2) {
            let s = t[a];
            const l = t[a + 1];
            Array.isArray(s) || (s = [s]);
            const u = e.concat(a);
            if (0 === s.length) return u.error("Expected at least one branch label.");
            for (const t of s) {
              if ("number" != typeof t && "string" != typeof t) return u.error("Branch labels must be numbers or strings.");
              if ("number" == typeof t && Math.abs(t) > Number.MAX_SAFE_INTEGER) return u.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);
              if ("number" == typeof t && Math.floor(t) !== t) return u.error("Numeric branch labels must be integer values.");
              if (r) {
                if (u.checkSubtype(r, ot(t))) return null
              } else r = ot(t);
              if (void 0 !== i[String(t)]) return u.error("Branch labels must be unique.");
              i[String(t)] = o.length
            }
            const c = e.parse(l, a, n);
            if (!c) return null;
            n = n || c.type, o.push(c)
          }
          const a = e.parse(t[1], 1, U);
          if (!a) return null;
          const s = e.parse(t[t.length - 1], t.length - 1, n);
          return s ? "value" !== a.type.kind && e.concat(1).checkSubtype(r, a.type) ? null : new de(r, n, a, i, o, s) : null
        }

        evaluate(t) {
          const e = this.input.evaluate(t);
          return (ot(e) === this.inputType && this.outputs[this.cases[e]] || this.otherwise).evaluate(t)
        }

        eachChild(t) {
          t(this.input), this.outputs.forEach(t), t(this.otherwise)
        }

        outputDefined() {
          return this.outputs.every(t => t.outputDefined()) && this.otherwise.outputDefined()
        }

        serialize() {
          const t = ["match", this.input.serialize()], e = Object.keys(this.cases).sort(), r = [], n = {};
          for (const t of e) {
            const e = n[this.cases[t]];
            void 0 === e ? (n[this.cases[t]] = r.length, r.push([this.cases[t], [t]])) : r[e][1].push(t)
          }
          const i = t => "number" === this.inputType.kind ? Number(t) : t;
          for (const [e, n] of r) 1 === n.length ? t.push(i(n[0])) : t.push(n.map(i)), t.push(this.outputs[e].serialize());
          return t.push(this.otherwise.serialize()), t
        }
      }

      class ge {
        constructor(t, e, r) {
          this.type = t, this.branches = e, this.otherwise = r
        }

        static parse(t, e) {
          if (t.length < 4) return e.error(`Expected at least 3 arguments, but found only ${t.length - 1}.`);
          if (t.length % 2 != 0) return e.error("Expected an odd number of arguments.");
          let r;
          e.expectedType && "value" !== e.expectedType.kind && (r = e.expectedType);
          const n = [];
          for (let i = 1; i < t.length - 1; i += 2) {
            const o = e.parse(t[i], i, D);
            if (!o) return null;
            const a = e.parse(t[i + 1], i + 1, r);
            if (!a) return null;
            n.push([o, a]), r = r || a.type
          }
          const i = e.parse(t[t.length - 1], t.length - 1, r);
          return i ? new ge(r, n, i) : null
        }

        evaluate(t) {
          for (const [e, r] of this.branches) if (e.evaluate(t)) return r.evaluate(t);
          return this.otherwise.evaluate(t)
        }

        eachChild(t) {
          for (const [e, r] of this.branches) t(e), t(r);
          t(this.otherwise)
        }

        outputDefined() {
          return this.branches.every(([t, e]) => e.outputDefined()) && this.otherwise.outputDefined()
        }

        serialize() {
          const t = ["case"];
          return this.eachChild(e => {
            t.push(e.serialize())
          }), t
        }
      }

      class ye {
        constructor(t, e, r, n) {
          this.type = t, this.input = e, this.beginIndex = r, this.endIndex = n
        }

        static parse(t, e) {
          if (t.length <= 2 || t.length >= 5) return e.error(`Expected 3 or 4 arguments, but found ${t.length - 1} instead.`);
          const r = e.parse(t[1], 1, U), n = e.parse(t[2], 2, j);
          if (!r || !n) return null;
          if (!K(r.type, [W(U), N, U])) return e.error(`Expected first argument to be of type array or string, but found ${q(r.type)} instead`);
          if (4 === t.length) {
            const i = e.parse(t[3], 3, j);
            return i ? new ye(r.type, r, n, i) : null
          }
          return new ye(r.type, r, n)
        }

        evaluate(t) {
          const e = this.input.evaluate(t), r = this.beginIndex.evaluate(t);
          if (!H(e, ["string", "array"])) throw new lt(`Expected first argument to be of type array or string, but found ${q(ot(e))} instead.`);
          if (this.endIndex) {
            const n = this.endIndex.evaluate(t);
            return e.slice(r, n)
          }
          return e.slice(r)
        }

        eachChild(t) {
          t(this.input), t(this.beginIndex), this.endIndex && t(this.endIndex)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          if (null != this.endIndex && void 0 !== this.endIndex) {
            const t = this.endIndex.serialize();
            return ["slice", this.input.serialize(), this.beginIndex.serialize(), t]
          }
          return ["slice", this.input.serialize(), this.beginIndex.serialize()]
        }
      }

      function me(t, e) {
        return "==" === t || "!=" === t ? "boolean" === e.kind || "string" === e.kind || "number" === e.kind || "null" === e.kind || "value" === e.kind : "string" === e.kind || "number" === e.kind || "value" === e.kind
      }

      function ve(t, e, r, n) {
        return 0 === n.compare(e, r)
      }

      function _e(t, e, r) {
        const n = "==" !== t && "!=" !== t;
        return class i {
          constructor(t, e, r) {
            this.type = D, this.lhs = t, this.rhs = e, this.collator = r, this.hasUntypedArgument = "value" === t.type.kind || "value" === e.type.kind
          }

          static parse(t, e) {
            if (3 !== t.length && 4 !== t.length) return e.error("Expected two or three arguments.");
            const r = t[0];
            let o = e.parse(t[1], 1, U);
            if (!o) return null;
            if (!me(r, o.type)) return e.concat(1).error(`"${r}" comparisons are not supported for type '${q(o.type)}'.`);
            let a = e.parse(t[2], 2, U);
            if (!a) return null;
            if (!me(r, a.type)) return e.concat(2).error(`"${r}" comparisons are not supported for type '${q(a.type)}'.`);
            if (o.type.kind !== a.type.kind && "value" !== o.type.kind && "value" !== a.type.kind) return e.error(`Cannot compare types '${q(o.type)}' and '${q(a.type)}'.`);
            n && ("value" === o.type.kind && "value" !== a.type.kind ? o = new ct(a.type, [o]) : "value" !== o.type.kind && "value" === a.type.kind && (a = new ct(o.type, [a])));
            let s = null;
            if (4 === t.length) {
              if ("string" !== o.type.kind && "string" !== a.type.kind && "value" !== o.type.kind && "value" !== a.type.kind) return e.error("Cannot use collator to compare non-string types.");
              if (s = e.parse(t[3], 3, B), !s) return null
            }
            return new i(o, a, s)
          }

          evaluate(i) {
            const o = this.lhs.evaluate(i), a = this.rhs.evaluate(i);
            if (n && this.hasUntypedArgument) {
              const e = ot(o), r = ot(a);
              if (e.kind !== r.kind || "string" !== e.kind && "number" !== e.kind) throw new lt(`Expected arguments for "${t}" to be (string, string) or (number, number), but found (${e.kind}, ${r.kind}) instead.`)
            }
            if (this.collator && !n && this.hasUntypedArgument) {
              const t = ot(o), r = ot(a);
              if ("string" !== t.kind || "string" !== r.kind) return e(i, o, a)
            }
            return this.collator ? r(i, o, a, this.collator.evaluate(i)) : e(i, o, a)
          }

          eachChild(t) {
            t(this.lhs), t(this.rhs), this.collator && t(this.collator)
          }

          outputDefined() {
            return !0
          }

          serialize() {
            const e = [t];
            return this.eachChild(t => {
              e.push(t.serialize())
            }), e
          }
        }
      }

      const be = _e("==", (function (t, e, r) {
        return e === r
      }), ve), xe = _e("!=", (function (t, e, r) {
        return e !== r
      }), (function (t, e, r, n) {
        return !ve(0, e, r, n)
      })), we = _e("<", (function (t, e, r) {
        return e < r
      }), (function (t, e, r, n) {
        return n.compare(e, r) < 0
      })), Se = _e(">", (function (t, e, r) {
        return e > r
      }), (function (t, e, r, n) {
        return n.compare(e, r) > 0
      })), Ee = _e("<=", (function (t, e, r) {
        return e <= r
      }), (function (t, e, r, n) {
        return n.compare(e, r) <= 0
      })), Te = _e(">=", (function (t, e, r) {
        return e >= r
      }), (function (t, e, r, n) {
        return n.compare(e, r) >= 0
      }));

      class Ce {
        constructor(t, e, r, n, i) {
          this.type = N, this.number = t, this.locale = e, this.currency = r, this.minFractionDigits = n, this.maxFractionDigits = i
        }

        static parse(t, e) {
          if (3 !== t.length) return e.error("Expected two arguments.");
          const r = e.parse(t[1], 1, j);
          if (!r) return null;
          const n = t[2];
          if ("object" != typeof n || Array.isArray(n)) return e.error("NumberFormat options argument must be an object.");
          let i = null;
          if (n.locale && (i = e.parse(n.locale, 1, N), !i)) return null;
          let o = null;
          if (n.currency && (o = e.parse(n.currency, 1, N), !o)) return null;
          let a = null;
          if (n["min-fraction-digits"] && (a = e.parse(n["min-fraction-digits"], 1, j), !a)) return null;
          let s = null;
          return n["max-fraction-digits"] && (s = e.parse(n["max-fraction-digits"], 1, j), !s) ? null : new Ce(r, i, o, a, s)
        }

        evaluate(t) {
          return new Intl.NumberFormat(this.locale ? this.locale.evaluate(t) : [], {
            style: this.currency ? "currency" : "decimal",
            currency: this.currency ? this.currency.evaluate(t) : void 0,
            minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(t) : void 0,
            maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(t) : void 0
          }).format(this.number.evaluate(t))
        }

        eachChild(t) {
          t(this.number), this.locale && t(this.locale), this.currency && t(this.currency), this.minFractionDigits && t(this.minFractionDigits), this.maxFractionDigits && t(this.maxFractionDigits)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          const t = {};
          return this.locale && (t.locale = this.locale.serialize()), this.currency && (t.currency = this.currency.serialize()), this.minFractionDigits && (t["min-fraction-digits"] = this.minFractionDigits.serialize()), this.maxFractionDigits && (t["max-fraction-digits"] = this.maxFractionDigits.serialize()), ["number-format", this.number.serialize(), t]
        }
      }

      class Oe {
        constructor(t) {
          this.type = j, this.input = t
        }

        static parse(t, e) {
          if (2 !== t.length) return e.error(`Expected 1 argument, but found ${t.length - 1} instead.`);
          const r = e.parse(t[1], 1);
          return r ? "array" !== r.type.kind && "string" !== r.type.kind && "value" !== r.type.kind ? e.error(`Expected argument of type string or array, but found ${q(r.type)} instead.`) : new Oe(r) : null
        }

        evaluate(t) {
          const e = this.input.evaluate(t);
          if ("string" == typeof e) return e.length;
          if (Array.isArray(e)) return e.length;
          throw new lt(`Expected value to be of type string or array, but found ${q(ot(e))} instead.`)
        }

        eachChild(t) {
          t(this.input)
        }

        outputDefined() {
          return !1
        }

        serialize() {
          const t = ["length"];
          return this.eachChild(e => {
            t.push(e.serialize())
          }), t
        }
      }

      const Pe = {
        "==": be,
        "!=": xe,
        ">": Se,
        "<": we,
        ">=": Te,
        "<=": Ee,
        array: ct,
        at: he,
        boolean: ct,
        case: ge,
        coalesce: ue,
        collator: vt,
        format: ht,
        image: pt,
        in: pe,
        "index-of": fe,
        interpolate: se,
        "interpolate-hcl": se,
        "interpolate-lab": se,
        length: Oe,
        let: ce,
        literal: st,
        match: de,
        number: ct,
        "number-format": Ce,
        object: ct,
        slice: ye,
        step: Bt,
        string: ct,
        "to-boolean": dt,
        "to-color": dt,
        "to-number": dt,
        "to-string": dt,
        var: Gt,
        within: kt
      };

      function Re(t, [e, r, n, i]) {
        e = e.evaluate(t), r = r.evaluate(t), n = n.evaluate(t);
        const o = i ? i.evaluate(t) : 1, a = nt(e, r, n, o);
        if (a) throw new lt(a);
        return new J(e / 255 * o, r / 255 * o, n / 255 * o, o)
      }

      function Ie(t, e) {
        return t in e
      }

      function Le(t, e) {
        const r = e[t];
        return void 0 === r ? null : r
      }

      function Me(t) {
        return {type: t}
      }

      function Fe(t) {
        return {result: "success", value: t}
      }

      function Ae(t) {
        return {result: "error", value: t}
      }

      function ke(t) {
        return "data-driven" === t["property-type"] || "cross-faded-data-driven" === t["property-type"]
      }

      function je(t) {
        return !!t.expression && t.expression.parameters.indexOf("zoom") > -1
      }

      function Ne(t) {
        return !!t.expression && t.expression.interpolated
      }

      function De(t) {
        return t instanceof Number ? "number" : t instanceof String ? "string" : t instanceof Boolean ? "boolean" : Array.isArray(t) ? "array" : null === t ? "null" : typeof t
      }

      function Ge(t) {
        return "object" == typeof t && null !== t && !Array.isArray(t)
      }

      function ze(t) {
        return t
      }

      function Ue(t, e) {
        const r = "color" === e.type, n = t.stops && "object" == typeof t.stops[0][0], i = n || void 0 !== t.property,
          o = n || !i, a = t.type || (Ne(e) ? "exponential" : "interval");
        if (r && ((t = M({}, t)).stops && (t.stops = t.stops.map(t => [t[0], J.parse(t[1])])), t.default ? t.default = J.parse(t.default) : t.default = J.parse(e.default)), t.colorSpace && "rgb" !== t.colorSpace && !ae[t.colorSpace]) throw new Error("Unknown color space: " + t.colorSpace);
        let s, l, u;
        if ("exponential" === a) s = We; else if ("interval" === a) s = Ye; else if ("categorical" === a) {
          s = Ve, l = Object.create(null);
          for (const e of t.stops) l[e[0]] = e[1];
          u = typeof t.stops[0][0]
        } else {
          if ("identity" !== a) throw new Error(`Unknown function type "${a}"`);
          s = qe
        }
        if (n) {
          const r = {}, n = [];
          for (let e = 0; e < t.stops.length; e++) {
            const i = t.stops[e], o = i[0].zoom;
            void 0 === r[o] && (r[o] = {
              zoom: o,
              type: t.type,
              property: t.property,
              default: t.default,
              stops: []
            }, n.push(o)), r[o].stops.push([i[0].value, i[1]])
          }
          const i = [];
          for (const t of n) i.push([r[t].zoom, Ue(r[t], e)]);
          const o = {name: "linear"};
          return {
            kind: "composite",
            interpolationType: o,
            interpolationFactor: se.interpolationFactor.bind(void 0, o),
            zoomStops: i.map(t => t[0]),
            evaluate: ({zoom: r}, n) => We({stops: i, base: t.base}, e, r).evaluate(r, n)
          }
        }
        if (o) {
          const r = "exponential" === a ? {name: "exponential", base: void 0 !== t.base ? t.base : 1} : null;
          return {
            kind: "camera",
            interpolationType: r,
            interpolationFactor: se.interpolationFactor.bind(void 0, r),
            zoomStops: t.stops.map(t => t[0]),
            evaluate: ({zoom: r}) => s(t, e, r, l, u)
          }
        }
        return {
          kind: "source", evaluate(r, n) {
            const i = n && n.properties ? n.properties[t.property] : void 0;
            return void 0 === i ? Be(t.default, e.default) : s(t, e, i, l, u)
          }
        }
      }

      function Be(t, e, r) {
        return void 0 !== t ? t : void 0 !== e ? e : void 0 !== r ? r : void 0
      }

      function Ve(t, e, r, n, i) {
        return Be(typeof r === i ? n[r] : void 0, t.default, e.default)
      }

      function Ye(t, e, r) {
        if ("number" !== De(r)) return Be(t.default, e.default);
        const n = t.stops.length;
        if (1 === n) return t.stops[0][1];
        if (r <= t.stops[0][0]) return t.stops[0][1];
        if (r >= t.stops[n - 1][0]) return t.stops[n - 1][1];
        const i = Ut(t.stops.map(t => t[0]), r);
        return t.stops[i][1]
      }

      function We(t, e, r) {
        const n = void 0 !== t.base ? t.base : 1;
        if ("number" !== De(r)) return Be(t.default, e.default);
        const i = t.stops.length;
        if (1 === i) return t.stops[0][1];
        if (r <= t.stops[0][0]) return t.stops[0][1];
        if (r >= t.stops[i - 1][0]) return t.stops[i - 1][1];
        const o = Ut(t.stops.map(t => t[0]), r), a = function (t, e, r, n) {
          const i = n - r, o = t - r;
          return 0 === i ? 0 : 1 === e ? o / i : (Math.pow(e, o) - 1) / (Math.pow(e, i) - 1)
        }(r, n, t.stops[o][0], t.stops[o + 1][0]), s = t.stops[o][1], l = t.stops[o + 1][1];
        let u = qt[e.type] || ze;
        if (t.colorSpace && "rgb" !== t.colorSpace) {
          const e = ae[t.colorSpace];
          u = (t, r) => e.reverse(e.interpolate(e.forward(t), e.forward(r), a))
        }
        return "function" == typeof s.evaluate ? {
          evaluate(...t) {
            const e = s.evaluate.apply(void 0, t), r = l.evaluate.apply(void 0, t);
            if (void 0 !== e && void 0 !== r) return u(e, r, a)
          }
        } : u(s, l, a)
      }

      function qe(t, e, r) {
        return "color" === e.type ? r = J.parse(r) : "formatted" === e.type ? r = et.fromString(r.toString()) : "resolvedImage" === e.type ? r = rt.fromString(r.toString()) : De(r) === e.type || "enum" === e.type && e.values[r] || (r = void 0), Be(r, t.default, e.default)
      }

      mt.register(Pe, {
        error: [{kind: "error"}, [N], (t, [e]) => {
          throw new lt(e.evaluate(t))
        }],
        typeof: [N, [U], (t, [e]) => q(ot(e.evaluate(t)))],
        "to-rgba": [W(j, 4), [G], (t, [e]) => e.evaluate(t).toArray()],
        rgb: [G, [j, j, j], Re],
        rgba: [G, [j, j, j, j], Re],
        has: {
          type: D,
          overloads: [[[N], (t, [e]) => Ie(e.evaluate(t), t.properties())], [[N, z], (t, [e, r]) => Ie(e.evaluate(t), r.evaluate(t))]]
        },
        get: {
          type: U,
          overloads: [[[N], (t, [e]) => Le(e.evaluate(t), t.properties())], [[N, z], (t, [e, r]) => Le(e.evaluate(t), r.evaluate(t))]]
        },
        "feature-state": [U, [N], (t, [e]) => Le(e.evaluate(t), t.featureState || {})],
        properties: [z, [], t => t.properties()],
        "geometry-type": [N, [], t => t.geometryType()],
        id: [U, [], t => t.id()],
        zoom: [j, [], t => t.globals.zoom],
        "heatmap-density": [j, [], t => t.globals.heatmapDensity || 0],
        "line-progress": [j, [], t => t.globals.lineProgress || 0],
        "sky-radial-progress": [j, [], t => t.globals.skyRadialProgress || 0],
        accumulated: [U, [], t => void 0 === t.globals.accumulated ? null : t.globals.accumulated],
        "+": [j, Me(j), (t, e) => {
          let r = 0;
          for (const n of e) r += n.evaluate(t);
          return r
        }],
        "*": [j, Me(j), (t, e) => {
          let r = 1;
          for (const n of e) r *= n.evaluate(t);
          return r
        }],
        "-": {
          type: j,
          overloads: [[[j, j], (t, [e, r]) => e.evaluate(t) - r.evaluate(t)], [[j], (t, [e]) => -e.evaluate(t)]]
        },
        "/": [j, [j, j], (t, [e, r]) => e.evaluate(t) / r.evaluate(t)],
        "%": [j, [j, j], (t, [e, r]) => e.evaluate(t) % r.evaluate(t)],
        ln2: [j, [], () => Math.LN2],
        pi: [j, [], () => Math.PI],
        e: [j, [], () => Math.E],
        "^": [j, [j, j], (t, [e, r]) => Math.pow(e.evaluate(t), r.evaluate(t))],
        sqrt: [j, [j], (t, [e]) => Math.sqrt(e.evaluate(t))],
        log10: [j, [j], (t, [e]) => Math.log(e.evaluate(t)) / Math.LN10],
        ln: [j, [j], (t, [e]) => Math.log(e.evaluate(t))],
        log2: [j, [j], (t, [e]) => Math.log(e.evaluate(t)) / Math.LN2],
        sin: [j, [j], (t, [e]) => Math.sin(e.evaluate(t))],
        cos: [j, [j], (t, [e]) => Math.cos(e.evaluate(t))],
        tan: [j, [j], (t, [e]) => Math.tan(e.evaluate(t))],
        asin: [j, [j], (t, [e]) => Math.asin(e.evaluate(t))],
        acos: [j, [j], (t, [e]) => Math.acos(e.evaluate(t))],
        atan: [j, [j], (t, [e]) => Math.atan(e.evaluate(t))],
        min: [j, Me(j), (t, e) => Math.min(...e.map(e => e.evaluate(t)))],
        max: [j, Me(j), (t, e) => Math.max(...e.map(e => e.evaluate(t)))],
        abs: [j, [j], (t, [e]) => Math.abs(e.evaluate(t))],
        round: [j, [j], (t, [e]) => {
          const r = e.evaluate(t);
          return r < 0 ? -Math.round(-r) : Math.round(r)
        }],
        floor: [j, [j], (t, [e]) => Math.floor(e.evaluate(t))],
        ceil: [j, [j], (t, [e]) => Math.ceil(e.evaluate(t))],
        "filter-==": [D, [N, U], (t, [e, r]) => t.properties()[e.value] === r.value],
        "filter-id-==": [D, [U], (t, [e]) => t.id() === e.value],
        "filter-type-==": [D, [N], (t, [e]) => t.geometryType() === e.value],
        "filter-<": [D, [N, U], (t, [e, r]) => {
          const n = t.properties()[e.value], i = r.value;
          return typeof n == typeof i && n < i
        }],
        "filter-id-<": [D, [U], (t, [e]) => {
          const r = t.id(), n = e.value;
          return typeof r == typeof n && r < n
        }],
        "filter->": [D, [N, U], (t, [e, r]) => {
          const n = t.properties()[e.value], i = r.value;
          return typeof n == typeof i && n > i
        }],
        "filter-id->": [D, [U], (t, [e]) => {
          const r = t.id(), n = e.value;
          return typeof r == typeof n && r > n
        }],
        "filter-<=": [D, [N, U], (t, [e, r]) => {
          const n = t.properties()[e.value], i = r.value;
          return typeof n == typeof i && n <= i
        }],
        "filter-id-<=": [D, [U], (t, [e]) => {
          const r = t.id(), n = e.value;
          return typeof r == typeof n && r <= n
        }],
        "filter->=": [D, [N, U], (t, [e, r]) => {
          const n = t.properties()[e.value], i = r.value;
          return typeof n == typeof i && n >= i
        }],
        "filter-id->=": [D, [U], (t, [e]) => {
          const r = t.id(), n = e.value;
          return typeof r == typeof n && r >= n
        }],
        "filter-has": [D, [U], (t, [e]) => e.value in t.properties()],
        "filter-has-id": [D, [], t => null !== t.id() && void 0 !== t.id()],
        "filter-type-in": [D, [W(N)], (t, [e]) => e.value.indexOf(t.geometryType()) >= 0],
        "filter-id-in": [D, [W(U)], (t, [e]) => e.value.indexOf(t.id()) >= 0],
        "filter-in-small": [D, [N, W(U)], (t, [e, r]) => r.value.indexOf(t.properties()[e.value]) >= 0],
        "filter-in-large": [D, [N, W(U)], (t, [e, r]) => function (t, e, r, n) {
          for (; r <= n;) {
            const i = r + n >> 1;
            if (e[i] === t) return !0;
            e[i] > t ? n = i - 1 : r = i + 1
          }
          return !1
        }(t.properties()[e.value], r.value, 0, r.value.length - 1)],
        all: {
          type: D, overloads: [[[D, D], (t, [e, r]) => e.evaluate(t) && r.evaluate(t)], [Me(D), (t, e) => {
            for (const r of e) if (!r.evaluate(t)) return !1;
            return !0
          }]]
        },
        any: {
          type: D, overloads: [[[D, D], (t, [e, r]) => e.evaluate(t) || r.evaluate(t)], [Me(D), (t, e) => {
            for (const r of e) if (r.evaluate(t)) return !0;
            return !1
          }]]
        },
        "!": [D, [D], (t, [e]) => !e.evaluate(t)],
        "is-supported-script": [D, [N], (t, [e]) => {
          const r = t.globals && t.globals.isSupportedScript;
          return !r || r(e.evaluate(t))
        }],
        upcase: [N, [N], (t, [e]) => e.evaluate(t).toUpperCase()],
        downcase: [N, [N], (t, [e]) => e.evaluate(t).toLowerCase()],
        concat: [N, Me(U), (t, e) => e.map(e => at(e.evaluate(t))).join("")],
        "resolved-locale": [N, [B], (t, [e]) => e.evaluate(t).resolvedLocale()]
      });

      class Xe {
        constructor(t, e) {
          var r;
          this.expression = t, this._warningHistory = {}, this._evaluator = new yt, this._defaultValue = e ? "color" === (r = e).type && Ge(r.default) ? new J(0, 0, 0, 0) : "color" === r.type ? J.parse(r.default) || null : void 0 === r.default ? null : r.default : null, this._enumValues = e && "enum" === e.type ? e.values : null
        }

        evaluateWithoutErrorHandling(t, e, r, n, i, o) {
          return this._evaluator.globals = t, this._evaluator.feature = e, this._evaluator.featureState = r, this._evaluator.canonical = n, this._evaluator.availableImages = i || null, this._evaluator.formattedSection = o, this.expression.evaluate(this._evaluator)
        }

        evaluate(t, e, r, n, i, o) {
          this._evaluator.globals = t, this._evaluator.feature = e || null, this._evaluator.featureState = r || null, this._evaluator.canonical = n, this._evaluator.availableImages = i || null, this._evaluator.formattedSection = o || null;
          try {
            const t = this.expression.evaluate(this._evaluator);
            if (null == t || "number" == typeof t && t != t) return this._defaultValue;
            if (this._enumValues && !(t in this._enumValues)) throw new lt(`Expected value to be one of ${Object.keys(this._enumValues).map(t => JSON.stringify(t)).join(", ")}, but found ${JSON.stringify(t)} instead.`);
            return t
          } catch (t) {
            return this._warningHistory[t.message] || (this._warningHistory[t.message] = !0, "undefined" != typeof console && console.warn(t.message)), this._defaultValue
          }
        }
      }

      function Ze(t) {
        return Array.isArray(t) && t.length > 0 && "string" == typeof t[0] && t[0] in Pe
      }

      function Ke(t, e) {
        const r = new zt(Pe, [], e ? function (t) {
            const e = {color: G, string: N, number: j, enum: N, boolean: D, formatted: V, resolvedImage: Y};
            if ("array" === t.type) return W(e[t.value] || U, t.length);
            return e[t.type]
          }(e) : void 0),
          n = r.parse(t, void 0, void 0, void 0, e && "string" === e.type ? {typeAnnotation: "coerce"} : void 0);
        return n ? Fe(new Xe(n, e)) : Ae(r.errors)
      }

      class He {
        constructor(t, e) {
          this.kind = t, this._styleExpression = e, this.isStateDependent = "constant" !== t && !Nt(e.expression)
        }

        evaluateWithoutErrorHandling(t, e, r, n, i, o) {
          return this._styleExpression.evaluateWithoutErrorHandling(t, e, r, n, i, o)
        }

        evaluate(t, e, r, n, i, o) {
          return this._styleExpression.evaluate(t, e, r, n, i, o)
        }
      }

      class $e {
        constructor(t, e, r, n) {
          this.kind = t, this.zoomStops = r, this._styleExpression = e, this.isStateDependent = "camera" !== t && !Nt(e.expression), this.interpolationType = n
        }

        evaluateWithoutErrorHandling(t, e, r, n, i, o) {
          return this._styleExpression.evaluateWithoutErrorHandling(t, e, r, n, i, o)
        }

        evaluate(t, e, r, n, i, o) {
          return this._styleExpression.evaluate(t, e, r, n, i, o)
        }

        interpolationFactor(t, e, r) {
          return this.interpolationType ? se.interpolationFactor(this.interpolationType, t, e, r) : 0
        }
      }

      function Je(t, e) {
        if ("error" === (t = Ke(t, e)).result) return t;
        const r = t.value.expression, n = jt(r);
        if (!n && !ke(e)) return Ae([new F("", "data expressions not supported")]);
        const i = Dt(r, ["zoom"]);
        if (!i && !je(e)) return Ae([new F("", "zoom expressions not supported")]);
        const o = function t(e) {
          let r = null;
          if (e instanceof ce) r = t(e.result); else if (e instanceof ue) {
            for (const n of e.args) if (r = t(n), r) break
          } else (e instanceof Bt || e instanceof se) && e.input instanceof mt && "zoom" === e.input.name && (r = e);
          if (r instanceof F) return r;
          return e.eachChild(e => {
            const n = t(e);
            n instanceof F ? r = n : !r && n ? r = new F("", '"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.') : r && n && r !== n && (r = new F("", 'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))
          }), r
        }(r);
        if (!o && !i) return Ae([new F("", '"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);
        if (o instanceof F) return Ae([o]);
        if (o instanceof se && !Ne(e)) return Ae([new F("", '"interpolate" expressions cannot be used with this property')]);
        if (!o) return Fe(new He(n ? "constant" : "source", t.value));
        const a = o instanceof se ? o.interpolation : void 0;
        return Fe(new $e(n ? "camera" : "composite", t.value, o.labels, a))
      }

      class Qe {
        constructor(t, e) {
          this._parameters = t, this._specification = e, M(this, Ue(this._parameters, this._specification))
        }

        static deserialize(t) {
          return new Qe(t._parameters, t._specification)
        }

        static serialize(t) {
          return {_parameters: t._parameters, _specification: t._specification}
        }
      }

      function tr(t) {
        return "object" == typeof t ? ["literal", t] : t
      }

      function er(t, e) {
        let r = t.stops;
        if (!r) return function (t, e) {
          const r = ["get", t.property];
          if (void 0 === t.default) return "string" === e.type ? ["string", r] : r;
          if ("enum" === e.type) return ["match", r, Object.keys(e.values), r, t.default];
          {
            const n = ["color" === e.type ? "to-color" : e.type, r, tr(t.default)];
            return "array" === e.type && n.splice(1, 0, e.value, e.length || null), n
          }
        }(t, e);
        const n = r && "object" == typeof r[0][0], i = n || void 0 !== t.property, o = n || !i;
        return r = r.map(t => !i && e.tokens && "string" == typeof t[1] ? [t[0], lr(t[1])] : [t[0], tr(t[1])]), n ? function (t, e, r) {
          const n = {}, i = {}, o = [];
          for (let e = 0; e < r.length; e++) {
            const a = r[e], s = a[0].zoom;
            void 0 === n[s] && (n[s] = {
              zoom: s,
              type: t.type,
              property: t.property,
              default: t.default
            }, i[s] = [], o.push(s)), i[s].push([a[0].value, a[1]])
          }
          if ("exponential" === sr({}, e)) {
            const r = [rr(t), ["linear"], ["zoom"]];
            for (const t of o) {
              const o = ir(n[t], e, i[t]);
              ar(r, t, o, !1)
            }
            return r
          }
          {
            const t = ["step", ["zoom"]];
            for (const r of o) {
              const o = ir(n[r], e, i[r]);
              ar(t, r, o, !0)
            }
            return or(t), t
          }
        }(t, e, r) : o ? function (t, e, r, n = ["zoom"]) {
          const i = sr(t, e);
          let o, a = !1;
          if ("interval" === i) o = ["step", n], a = !0; else {
            if ("exponential" !== i) throw new Error(`Unknown zoom function type "${i}"`);
            {
              const e = void 0 !== t.base ? t.base : 1;
              o = [rr(t), 1 === e ? ["linear"] : ["exponential", e], n]
            }
          }
          for (const t of r) ar(o, t[0], t[1], a);
          return or(o), o
        }(t, e, r) : ir(t, e, r)
      }

      function rr(t) {
        switch (t.colorSpace) {
          case"hcl":
            return "interpolate-hcl";
          case"lab":
            return "interpolate-lab";
          default:
            return "interpolate"
        }
      }

      function nr(t, e) {
        const r = tr((n = t.default, i = e.default, void 0 !== n ? n : void 0 !== i ? i : void 0));
        var n, i;
        return void 0 === r && "resolvedImage" === e.type ? "" : r
      }

      function ir(t, e, r) {
        const n = sr(t, e), i = ["get", t.property];
        if ("categorical" === n && "boolean" == typeof r[0][0]) {
          const n = ["case"];
          for (const t of r) n.push(["==", i, t[0]], t[1]);
          return n.push(nr(t, e)), n
        }
        if ("categorical" === n) {
          const n = ["match", i];
          for (const t of r) ar(n, t[0], t[1], !1);
          return n.push(nr(t, e)), n
        }
        if ("interval" === n) {
          const e = ["step", ["number", i]];
          for (const t of r) ar(e, t[0], t[1], !0);
          return or(e), void 0 === t.default ? e : ["case", ["==", ["typeof", i], "number"], e, tr(t.default)]
        }
        if ("exponential" === n) {
          const e = void 0 !== t.base ? t.base : 1,
            n = [rr(t), 1 === e ? ["linear"] : ["exponential", e], ["number", i]];
          for (const t of r) ar(n, t[0], t[1], !1);
          return void 0 === t.default ? n : ["case", ["==", ["typeof", i], "number"], n, tr(t.default)]
        }
        throw new Error("Unknown property function type " + n)
      }

      function or(t) {
        "step" === t[0] && 3 === t.length && (t.push(0), t.push(t[3]))
      }

      function ar(t, e, r, n) {
        t.length > 3 && e === t[t.length - 2] || (n && 2 === t.length || t.push(e), t.push(r))
      }

      function sr(t, e) {
        return t.type ? t.type : e.expression.interpolated ? "exponential" : "interval"
      }

      function lr(t) {
        const e = ["concat"], r = /{([^{}]+)}/g;
        let n = 0;
        for (let i = r.exec(t); null !== i; i = r.exec(t)) {
          const o = t.slice(n, r.lastIndex - i[0].length);
          n = r.lastIndex, o.length > 0 && e.push(o), e.push(["get", i[1]])
        }
        if (1 === e.length) return t;
        if (n < t.length) e.push(t.slice(n)); else if (2 === e.length) return ["to-string", e[1]];
        return e
      }

      function ur(t) {
        if (!0 === t || !1 === t) return !0;
        if (!Array.isArray(t) || 0 === t.length) return !1;
        switch (t[0]) {
          case"has":
            return t.length >= 2 && "$id" !== t[1] && "$type" !== t[1];
          case"in":
            return t.length >= 3 && ("string" != typeof t[1] || Array.isArray(t[2]));
          case"!in":
          case"!has":
          case"none":
            return !1;
          case"==":
          case"!=":
          case">":
          case">=":
          case"<":
          case"<=":
            return 3 !== t.length || Array.isArray(t[1]) || Array.isArray(t[2]);
          case"any":
          case"all":
            for (const e of t.slice(1)) if (!ur(e) && "boolean" != typeof e) return !1;
            return !0;
          default:
            return !0
        }
      }

      const cr = {
        type: "boolean",
        default: !1,
        transition: !1,
        "property-type": "data-driven",
        expression: {interpolated: !1, parameters: ["zoom", "feature"]}
      };

      function hr(t) {
        if (null == t) return {filter: () => !0, needGeometry: !1};
        ur(t) || (t = fr(t));
        const e = Ke(t, cr);
        if ("error" === e.result) throw new Error(e.value.map(t => `${t.key}: ${t.message}`).join(", "));
        return {
          filter: (t, r, n) => e.value.evaluate(t, r, {}, n), needGeometry: function t(e) {
            if (!Array.isArray(e)) return !1;
            if ("within" === e[0]) return !0;
            for (let r = 1; r < e.length; r++) if (t(e[r])) return !0;
            return !1
          }(t)
        }
      }

      function pr(t, e) {
        return t < e ? -1 : t > e ? 1 : 0
      }

      function fr(t) {
        if (!t) return !0;
        const e = t[0];
        if (t.length <= 1) return "any" !== e;
        var r;
        return "==" === e ? dr(t[1], t[2], "==") : "!=" === e ? mr(dr(t[1], t[2], "==")) : "<" === e || ">" === e || "<=" === e || ">=" === e ? dr(t[1], t[2], e) : "any" === e ? (r = t.slice(1), ["any"].concat(r.map(fr))) : "all" === e ? ["all"].concat(t.slice(1).map(fr)) : "none" === e ? ["all"].concat(t.slice(1).map(fr).map(mr)) : "in" === e ? gr(t[1], t.slice(2)) : "!in" === e ? mr(gr(t[1], t.slice(2))) : "has" === e ? yr(t[1]) : "!has" === e ? mr(yr(t[1])) : "within" !== e || t
      }

      function dr(t, e, r) {
        switch (t) {
          case"$type":
            return ["filter-type-" + r, e];
          case"$id":
            return ["filter-id-" + r, e];
          default:
            return ["filter-" + r, t, e]
        }
      }

      function gr(t, e) {
        if (0 === e.length) return !1;
        switch (t) {
          case"$type":
            return ["filter-type-in", ["literal", e]];
          case"$id":
            return ["filter-id-in", ["literal", e]];
          default:
            return e.length > 200 && !e.some(t => typeof t != typeof e[0]) ? ["filter-in-large", t, ["literal", e.sort(pr)]] : ["filter-in-small", t, ["literal", e]]
        }
      }

      function yr(t) {
        switch (t) {
          case"$type":
            return !0;
          case"$id":
            return ["filter-has-id"];
          default:
            return ["filter-has", t]
        }
      }

      function mr(t) {
        return ["!", t]
      }

      var vr = ["type", "source", "source-layer", "minzoom", "maxzoom", "filter", "layout"];

      function _r(t, e) {
        const r = {};
        for (const e in t) "ref" !== e && (r[e] = t[e]);
        return vr.forEach(t => {
          t in e && (r[t] = e[t])
        }), r
      }

      function br(t) {
        t = t.slice();
        const e = Object.create(null);
        for (let r = 0; r < t.length; r++) e[t[r].id] = t[r];
        for (let r = 0; r < t.length; r++) "ref" in t[r] && (t[r] = _r(t[r], e[t[r].ref]));
        return t
      }

      class xr {
        constructor(t, e, r, n) {
          this.message = (t ? t + ": " : "") + r, n && (this.identifier = n), null != e && e.__line__ && (this.line = e.__line__)
        }
      }

      class wr {
        constructor(t) {
          this.error = t, this.message = t.message;
          const e = t.message.match(/line (\d+)/);
          this.line = e ? parseInt(e[1], 10) : 0
        }
      }

      function Sr(t) {
        const e = t.key, r = t.value;
        return r ? [new xr(e, r, "constants have been deprecated as of v8")] : []
      }

      function Er(t) {
        return t instanceof Number || t instanceof String || t instanceof Boolean ? t.valueOf() : t
      }

      function Tr(t) {
        if (Array.isArray(t)) return t.map(Tr);
        if (t instanceof Object && !(t instanceof Number || t instanceof String || t instanceof Boolean)) {
          const e = {};
          for (const r in t) e[r] = Tr(t[r]);
          return e
        }
        return Er(t)
      }

      function Cr(t) {
        const e = t.key, r = t.value, n = t.valueSpec || {}, i = t.objectElementValidators || {}, o = t.style,
          a = t.styleSpec;
        let s = [];
        const l = De(r);
        if ("object" !== l) return [new xr(e, r, `object expected, ${l} found`)];
        for (const t in r) {
          const l = t.split(".")[0], u = n[l] || n["*"];
          let c;
          if (i[l]) c = i[l]; else if (n[l]) c = Vr; else if (i["*"]) c = i["*"]; else {
            if (!n["*"]) {
              s.push(new xr(e, r[t], `unknown property "${t}"`));
              continue
            }
            c = Vr
          }
          s = s.concat(c({
            key: (e ? e + "." : e) + t,
            value: r[t],
            valueSpec: u,
            style: o,
            styleSpec: a,
            object: r,
            objectKey: t
          }, r))
        }
        for (const t in n) i[t] || n[t].required && void 0 === n[t].default && void 0 === r[t] && s.push(new xr(e, r, `missing required property "${t}"`));
        return s
      }

      function Or(t) {
        const e = t.value, r = t.valueSpec, n = t.style, i = t.styleSpec, o = t.key, a = t.arrayElementValidator || Vr;
        if ("array" !== De(e)) return [new xr(o, e, `array expected, ${De(e)} found`)];
        if (r.length && e.length !== r.length) return [new xr(o, e, `array length ${r.length} expected, length ${e.length} found`)];
        if (r["min-length"] && e.length < r["min-length"]) return [new xr(o, e, `array length at least ${r["min-length"]} expected, length ${e.length} found`)];
        let s = {type: r.value, values: r.values};
        i.$version < 7 && (s.function = r.function), "object" === De(r.value) && (s = r.value);
        let l = [];
        for (let t = 0; t < e.length; t++) l = l.concat(a({
          array: e,
          arrayIndex: t,
          value: e[t],
          valueSpec: s,
          style: n,
          styleSpec: i,
          key: `${o}[${t}]`
        }));
        return l
      }

      function Pr(t) {
        const e = t.key, r = t.value, n = t.valueSpec;
        let i = De(r);
        return "number" === i && r != r && (i = "NaN"), "number" !== i ? [new xr(e, r, `number expected, ${i} found`)] : "minimum" in n && r < n.minimum ? [new xr(e, r, `${r} is less than the minimum value ${n.minimum}`)] : "maximum" in n && r > n.maximum ? [new xr(e, r, `${r} is greater than the maximum value ${n.maximum}`)] : []
      }

      function Rr(t) {
        const e = t.valueSpec, r = Er(t.value.type);
        let n, i, o, a = {};
        const s = "categorical" !== r && void 0 === t.value.property, l = !s,
          u = "array" === De(t.value.stops) && "array" === De(t.value.stops[0]) && "object" === De(t.value.stops[0][0]),
          c = Cr({
            key: t.key,
            value: t.value,
            valueSpec: t.styleSpec.function,
            style: t.style,
            styleSpec: t.styleSpec,
            objectElementValidators: {
              stops: function (t) {
                if ("identity" === r) return [new xr(t.key, t.value, 'identity function may not have a "stops" property')];
                let e = [];
                const n = t.value;
                e = e.concat(Or({
                  key: t.key,
                  value: n,
                  valueSpec: t.valueSpec,
                  style: t.style,
                  styleSpec: t.styleSpec,
                  arrayElementValidator: h
                })), "array" === De(n) && 0 === n.length && e.push(new xr(t.key, n, "array must have at least one stop"));
                return e
              }, default: function (t) {
                return Vr({key: t.key, value: t.value, valueSpec: e, style: t.style, styleSpec: t.styleSpec})
              }
            }
          });
        return "identity" === r && s && c.push(new xr(t.key, t.value, 'missing required property "property"')), "identity" === r || t.value.stops || c.push(new xr(t.key, t.value, 'missing required property "stops"')), "exponential" === r && t.valueSpec.expression && !Ne(t.valueSpec) && c.push(new xr(t.key, t.value, "exponential functions not supported")), t.styleSpec.$version >= 8 && (l && !ke(t.valueSpec) ? c.push(new xr(t.key, t.value, "property functions not supported")) : s && !je(t.valueSpec) && c.push(new xr(t.key, t.value, "zoom functions not supported"))), "categorical" !== r && !u || void 0 !== t.value.property || c.push(new xr(t.key, t.value, '"property" property is required')), c;

        function h(t) {
          let r = [];
          const n = t.value, s = t.key;
          if ("array" !== De(n)) return [new xr(s, n, `array expected, ${De(n)} found`)];
          if (2 !== n.length) return [new xr(s, n, `array length 2 expected, length ${n.length} found`)];
          if (u) {
            if ("object" !== De(n[0])) return [new xr(s, n, `object expected, ${De(n[0])} found`)];
            if (void 0 === n[0].zoom) return [new xr(s, n, "object stop key must have zoom")];
            if (void 0 === n[0].value) return [new xr(s, n, "object stop key must have value")];
            if (o && o > Er(n[0].zoom)) return [new xr(s, n[0].zoom, "stop zoom values must appear in ascending order")];
            Er(n[0].zoom) !== o && (o = Er(n[0].zoom), i = void 0, a = {}), r = r.concat(Cr({
              key: s + "[0]",
              value: n[0],
              valueSpec: {zoom: {}},
              style: t.style,
              styleSpec: t.styleSpec,
              objectElementValidators: {zoom: Pr, value: p}
            }))
          } else r = r.concat(p({
            key: s + "[0]",
            value: n[0],
            valueSpec: {},
            style: t.style,
            styleSpec: t.styleSpec
          }, n));
          return Ze(Tr(n[1])) ? r.concat([new xr(s + "[1]", n[1], "expressions are not allowed in function stops.")]) : r.concat(Vr({
            key: s + "[1]",
            value: n[1],
            valueSpec: e,
            style: t.style,
            styleSpec: t.styleSpec
          }))
        }

        function p(t, o) {
          const s = De(t.value), l = Er(t.value), u = null !== t.value ? t.value : o;
          if (n) {
            if (s !== n) return [new xr(t.key, u, `${s} stop domain type must match previous stop domain type ${n}`)]
          } else n = s;
          if ("number" !== s && "string" !== s && "boolean" !== s) return [new xr(t.key, u, "stop domain value must be a number, string, or boolean")];
          if ("number" !== s && "categorical" !== r) {
            let n = `number expected, ${s} found`;
            return ke(e) && void 0 === r && (n += '\nIf you intended to use a categorical function, specify `"type": "categorical"`.'), [new xr(t.key, u, n)]
          }
          return "categorical" !== r || "number" !== s || isFinite(l) && Math.floor(l) === l ? "categorical" !== r && "number" === s && void 0 !== i && l < i ? [new xr(t.key, u, "stop domain values must appear in ascending order")] : (i = l, "categorical" === r && l in a ? [new xr(t.key, u, "stop domain values must be unique")] : (a[l] = !0, [])) : [new xr(t.key, u, "integer expected, found " + l)]
        }
      }

      function Ir(t) {
        const e = ("property" === t.expressionContext ? Je : Ke)(Tr(t.value), t.valueSpec);
        if ("error" === e.result) return e.value.map(e => new xr(`${t.key}${e.key}`, t.value, e.message));
        const r = e.value.expression || e.value._styleExpression.expression;
        if ("property" === t.expressionContext && "text-font" === t.propertyKey && !r.outputDefined()) return [new xr(t.key, t.value, `Invalid data expression for "${t.propertyKey}". Output values must be contained as literals within the expression.`)];
        if ("property" === t.expressionContext && "layout" === t.propertyType && !Nt(r)) return [new xr(t.key, t.value, '"feature-state" data expressions are not supported with layout properties.')];
        if ("filter" === t.expressionContext && !Nt(r)) return [new xr(t.key, t.value, '"feature-state" data expressions are not supported with filters.')];
        if (t.expressionContext && 0 === t.expressionContext.indexOf("cluster")) {
          if (!Dt(r, ["zoom", "feature-state"])) return [new xr(t.key, t.value, '"zoom" and "feature-state" expressions are not supported with cluster properties.')];
          if ("cluster-initial" === t.expressionContext && !jt(r)) return [new xr(t.key, t.value, "Feature data expressions are not supported with initial expression part of cluster properties.")]
        }
        return []
      }

      function Lr(t) {
        const e = t.key, r = t.value, n = t.valueSpec, i = [];
        return Array.isArray(n.values) ? -1 === n.values.indexOf(Er(r)) && i.push(new xr(e, r, `expected one of [${n.values.join(", ")}], ${JSON.stringify(r)} found`)) : -1 === Object.keys(n.values).indexOf(Er(r)) && i.push(new xr(e, r, `expected one of [${Object.keys(n.values).join(", ")}], ${JSON.stringify(r)} found`)), i
      }

      function Mr(t) {
        return ur(Tr(t.value)) ? Ir(M({}, t, {
          expressionContext: "filter",
          valueSpec: {value: "boolean"}
        })) : function t(e) {
          const r = e.value, n = e.key;
          if ("array" !== De(r)) return [new xr(n, r, `array expected, ${De(r)} found`)];
          const i = e.styleSpec;
          let o, a = [];
          if (r.length < 1) return [new xr(n, r, "filter array must have at least 1 element")];
          switch (a = a.concat(Lr({
            key: n + "[0]",
            value: r[0],
            valueSpec: i.filter_operator,
            style: e.style,
            styleSpec: e.styleSpec
          })), Er(r[0])) {
            case"<":
            case"<=":
            case">":
            case">=":
              r.length >= 2 && "$type" === Er(r[1]) && a.push(new xr(n, r, `"$type" cannot be use with operator "${r[0]}"`));
            case"==":
            case"!=":
              3 !== r.length && a.push(new xr(n, r, `filter array for operator "${r[0]}" must have 3 elements`));
            case"in":
            case"!in":
              r.length >= 2 && (o = De(r[1]), "string" !== o && a.push(new xr(n + "[1]", r[1], `string expected, ${o} found`)));
              for (let t = 2; t < r.length; t++) o = De(r[t]), "$type" === Er(r[1]) ? a = a.concat(Lr({
                key: `${n}[${t}]`,
                value: r[t],
                valueSpec: i.geometry_type,
                style: e.style,
                styleSpec: e.styleSpec
              })) : "string" !== o && "number" !== o && "boolean" !== o && a.push(new xr(`${n}[${t}]`, r[t], `string, number, or boolean expected, ${o} found`));
              break;
            case"any":
            case"all":
            case"none":
              for (let i = 1; i < r.length; i++) a = a.concat(t({
                key: `${n}[${i}]`,
                value: r[i],
                style: e.style,
                styleSpec: e.styleSpec
              }));
              break;
            case"has":
            case"!has":
              o = De(r[1]), 2 !== r.length ? a.push(new xr(n, r, `filter array for "${r[0]}" operator must have 2 elements`)) : "string" !== o && a.push(new xr(n + "[1]", r[1], `string expected, ${o} found`));
              break;
            case"within":
              o = De(r[1]), 2 !== r.length ? a.push(new xr(n, r, `filter array for "${r[0]}" operator must have 2 elements`)) : "object" !== o && a.push(new xr(n + "[1]", r[1], `object expected, ${o} found`))
          }
          return a
        }(t)
      }

      function Fr(t, e) {
        const r = t.key, n = t.style, i = t.styleSpec, o = t.value, a = t.objectKey, s = i[`${e}_${t.layerType}`];
        if (!s) return [];
        const l = a.match(/^(.*)-transition$/);
        if ("paint" === e && l && s[l[1]] && s[l[1]].transition) return Vr({
          key: r,
          value: o,
          valueSpec: i.transition,
          style: n,
          styleSpec: i
        });
        const u = t.valueSpec || s[a];
        if (!u) return [new xr(r, o, `unknown property "${a}"`)];
        let c;
        if ("string" === De(o) && ke(u) && !u.tokens && (c = /^{([^}]+)}$/.exec(o))) return [new xr(r, o, `"${a}" does not support interpolation syntax\nUse an identity property function instead: \`{ "type": "identity", "property": ${JSON.stringify(c[1])} }\`.`)];
        const h = [];
        return "symbol" === t.layerType && ("text-field" === a && n && !n.glyphs && h.push(new xr(r, o, 'use of "text-field" requires a style "glyphs" property')), "text-font" === a && Ge(Tr(o)) && "identity" === Er(o.type) && h.push(new xr(r, o, '"text-font" does not support identity functions'))), h.concat(Vr({
          key: t.key,
          value: o,
          valueSpec: u,
          style: n,
          styleSpec: i,
          expressionContext: "property",
          propertyType: e,
          propertyKey: a
        }))
      }

      function Ar(t) {
        return Fr(t, "paint")
      }

      function kr(t) {
        return Fr(t, "layout")
      }

      function jr(t) {
        let e = [];
        const r = t.value, n = t.key, i = t.style, o = t.styleSpec;
        r.type || r.ref || e.push(new xr(n, r, 'either "type" or "ref" is required'));
        let a = Er(r.type);
        const s = Er(r.ref);
        if (r.id) {
          const o = Er(r.id);
          for (let a = 0; a < t.arrayIndex; a++) {
            const t = i.layers[a];
            Er(t.id) === o && e.push(new xr(n, r.id, `duplicate layer id "${r.id}", previously used at line ${t.id.__line__}`))
          }
        }
        if ("ref" in r) {
          let t;
          ["type", "source", "source-layer", "filter", "layout"].forEach(t => {
            t in r && e.push(new xr(n, r[t], `"${t}" is prohibited for ref layers`))
          }), i.layers.forEach(e => {
            Er(e.id) === s && (t = e)
          }), t ? t.ref ? e.push(new xr(n, r.ref, "ref cannot reference another ref layer")) : a = Er(t.type) : e.push(new xr(n, r.ref, `ref layer "${s}" not found`))
        } else if ("background" !== a && "sky" !== a) if (r.source) {
          const t = i.sources && i.sources[r.source], o = t && Er(t.type);
          t ? "vector" === o && "raster" === a ? e.push(new xr(n, r.source, `layer "${r.id}" requires a raster source`)) : "raster" === o && "raster" !== a ? e.push(new xr(n, r.source, `layer "${r.id}" requires a vector source`)) : "vector" !== o || r["source-layer"] ? "raster-dem" === o && "hillshade" !== a ? e.push(new xr(n, r.source, "raster-dem source can only be used with layer type 'hillshade'.")) : "line" !== a || !r.paint || !r.paint["line-gradient"] || "geojson" === o && t.lineMetrics || e.push(new xr(n, r, `layer "${r.id}" specifies a line-gradient, which requires a GeoJSON source with \`lineMetrics\` enabled.`)) : e.push(new xr(n, r, `layer "${r.id}" must specify a "source-layer"`)) : e.push(new xr(n, r.source, `source "${r.source}" not found`))
        } else e.push(new xr(n, r, 'missing required property "source"'));
        return e = e.concat(Cr({
          key: n,
          value: r,
          valueSpec: o.layer,
          style: t.style,
          styleSpec: t.styleSpec,
          objectElementValidators: {
            "*": () => [],
            type: () => Vr({
              key: n + ".type",
              value: r.type,
              valueSpec: o.layer.type,
              style: t.style,
              styleSpec: t.styleSpec,
              object: r,
              objectKey: "type"
            }),
            filter: Mr,
            layout: t => Cr({
              layer: r,
              key: t.key,
              value: t.value,
              style: t.style,
              styleSpec: t.styleSpec,
              objectElementValidators: {"*": t => kr(M({layerType: a}, t))}
            }),
            paint: t => Cr({
              layer: r,
              key: t.key,
              value: t.value,
              style: t.style,
              styleSpec: t.styleSpec,
              objectElementValidators: {"*": t => Ar(M({layerType: a}, t))}
            })
          }
        })), e
      }

      function Nr(t) {
        const e = t.value, r = t.key, n = De(e);
        return "string" !== n ? [new xr(r, e, `string expected, ${n} found`)] : []
      }

      const Dr = {
        promoteId: function ({key: t, value: e}) {
          if ("string" === De(e)) return Nr({key: t, value: e});
          {
            const r = [];
            for (const n in e) r.push(...Nr({key: `${t}.${n}`, value: e[n]}));
            return r
          }
        }
      };

      function Gr(t) {
        const e = t.value, r = t.key, n = t.styleSpec, i = t.style;
        if (!e.type) return [new xr(r, e, '"type" is required')];
        const o = Er(e.type);
        let a;
        switch (o) {
          case"vector":
          case"raster":
          case"raster-dem":
            return a = Cr({
              key: r,
              value: e,
              valueSpec: n["source_" + o.replace("-", "_")],
              style: t.style,
              styleSpec: n,
              objectElementValidators: Dr
            }), a;
          case"geojson":
            if (a = Cr({
              key: r,
              value: e,
              valueSpec: n.source_geojson,
              style: i,
              styleSpec: n,
              objectElementValidators: Dr
            }), e.cluster) for (const t in e.clusterProperties) {
              const [n, i] = e.clusterProperties[t], o = "string" == typeof n ? [n, ["accumulated"], ["get", t]] : n;
              a.push(...Ir({
                key: `${r}.${t}.map`,
                value: i,
                expressionContext: "cluster-map"
              })), a.push(...Ir({key: `${r}.${t}.reduce`, value: o, expressionContext: "cluster-reduce"}))
            }
            return a;
          case"video":
            return Cr({key: r, value: e, valueSpec: n.source_video, style: i, styleSpec: n});
          case"image":
            return Cr({key: r, value: e, valueSpec: n.source_image, style: i, styleSpec: n});
          case"canvas":
            return [new xr(r, null, "Please use runtime APIs to add canvas sources, rather than including them in stylesheets.", "source.canvas")];
          default:
            return Lr({
              key: r + ".type",
              value: e.type,
              valueSpec: {values: ["vector", "raster", "raster-dem", "geojson", "video", "image"]},
              style: i,
              styleSpec: n
            })
        }
      }

      function zr(t) {
        const e = t.value, r = t.styleSpec, n = r.light, i = t.style;
        let o = [];
        const a = De(e);
        if (void 0 === e) return o;
        if ("object" !== a) return o = o.concat([new xr("light", e, `object expected, ${a} found`)]), o;
        for (const t in e) {
          const a = t.match(/^(.*)-transition$/);
          o = a && n[a[1]] && n[a[1]].transition ? o.concat(Vr({
            key: t,
            value: e[t],
            valueSpec: r.transition,
            style: i,
            styleSpec: r
          })) : n[t] ? o.concat(Vr({
            key: t,
            value: e[t],
            valueSpec: n[t],
            style: i,
            styleSpec: r
          })) : o.concat([new xr(t, e[t], `unknown property "${t}"`)])
        }
        return o
      }

      function Ur(t) {
        const e = t.value, r = t.key, n = t.style, i = t.styleSpec, o = i.terrain;
        let a = [];
        const s = De(e);
        if (void 0 === e) return a;
        if ("object" !== s) return a = a.concat([new xr("terrain", e, `object expected, ${s} found`)]), a;
        for (const t in e) {
          const r = t.match(/^(.*)-transition$/);
          a = r && o[r[1]] && o[r[1]].transition ? a.concat(Vr({
            key: t,
            value: e[t],
            valueSpec: i.transition,
            style: n,
            styleSpec: i
          })) : o[t] ? a.concat(Vr({
            key: t,
            value: e[t],
            valueSpec: o[t],
            style: n,
            styleSpec: i
          })) : a.concat([new xr(t, e[t], `unknown property "${t}"`)])
        }
        if (e.source) {
          const t = n.sources && n.sources[e.source], i = t && Er(t.type);
          t ? "raster-dem" !== i && a.push(new xr(r, e.source, `terrain cannot be used with a source of type ${i}, it only be used with a "raster-dem" source type`)) : a.push(new xr(r, e.source, `source "${e.source}" not found`))
        } else a.push(new xr(r, e, 'terrain is missing required property "source"'));
        return a
      }

      const Br = {
        "*": () => [],
        array: Or,
        boolean: function (t) {
          const e = t.value, r = t.key, n = De(e);
          return "boolean" !== n ? [new xr(r, e, `boolean expected, ${n} found`)] : []
        },
        number: Pr,
        color: function (t) {
          const e = t.key, r = t.value, n = De(r);
          return "string" !== n ? [new xr(e, r, `color expected, ${n} found`)] : null === $(r) ? [new xr(e, r, `color expected, "${r}" found`)] : []
        },
        constants: Sr,
        enum: Lr,
        filter: Mr,
        function: Rr,
        layer: jr,
        object: Cr,
        source: Gr,
        light: zr,
        terrain: Ur,
        string: Nr,
        formatted: function (t) {
          return 0 === Nr(t).length ? [] : Ir(t)
        },
        resolvedImage: function (t) {
          return 0 === Nr(t).length ? [] : Ir(t)
        }
      };

      function Vr(t) {
        const e = t.value, r = t.valueSpec, n = t.styleSpec;
        if (r.expression && Ge(Er(e))) return Rr(t);
        if (r.expression && Ze(Tr(e))) return Ir(t);
        if (r.type && Br[r.type]) return Br[r.type](t);
        return Cr(M({}, t, {valueSpec: r.type ? n[r.type] : r}))
      }

      function Yr(t) {
        const e = t.value, r = t.key, n = Nr(t);
        return n.length || (-1 === e.indexOf("{fontstack}") && n.push(new xr(r, e, '"glyphs" url must include a "{fontstack}" token')), -1 === e.indexOf("{range}") && n.push(new xr(r, e, '"glyphs" url must include a "{range}" token'))), n
      }

      function Wr(t, e = i) {
        let r = [];
        return r = r.concat(Vr({
          key: "",
          value: t,
          valueSpec: e.$root,
          styleSpec: e,
          style: t,
          objectElementValidators: {glyphs: Yr, "*": () => []}
        })), t.constants && (r = r.concat(Sr({key: "constants", value: t.constants, style: t, styleSpec: e}))), qr(r)
      }

      function qr(t) {
        return [].concat(t).sort((t, e) => t.line - e.line)
      }

      function Xr(t) {
        return function (...e) {
          return qr(t.apply(this, e))
        }
      }

      Wr.source = Xr(Gr), Wr.light = Xr(zr), Wr.terrain = Xr(Ur), Wr.layer = Xr(jr), Wr.filter = Xr(Mr), Wr.paintProperty = Xr(Ar), Wr.layoutProperty = Xr(kr);
      var Zr = s((function (t, e) {
        var r = function () {
          var t = function (t, e, r, n) {
              for (r = r || {}, n = t.length; n--; r[t[n]] = e) ;
              return r
            }, e = [1, 12], r = [1, 13], n = [1, 9], i = [1, 10], o = [1, 11], a = [1, 14], s = [1, 15],
            l = [14, 18, 22, 24], u = [18, 22], c = [22, 24], h = {
              trace: function () {
              },
              yy: {},
              symbols_: {
                error: 2,
                JSONString: 3,
                STRING: 4,
                JSONNumber: 5,
                NUMBER: 6,
                JSONNullLiteral: 7,
                NULL: 8,
                JSONBooleanLiteral: 9,
                TRUE: 10,
                FALSE: 11,
                JSONText: 12,
                JSONValue: 13,
                EOF: 14,
                JSONObject: 15,
                JSONArray: 16,
                "{": 17,
                "}": 18,
                JSONMemberList: 19,
                JSONMember: 20,
                ":": 21,
                ",": 22,
                "[": 23,
                "]": 24,
                JSONElementList: 25,
                $accept: 0,
                $end: 1
              },
              terminals_: {
                2: "error",
                4: "STRING",
                6: "NUMBER",
                8: "NULL",
                10: "TRUE",
                11: "FALSE",
                14: "EOF",
                17: "{",
                18: "}",
                21: ":",
                22: ",",
                23: "[",
                24: "]"
              },
              productions_: [0, [3, 1], [5, 1], [7, 1], [9, 1], [9, 1], [12, 2], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [13, 1], [15, 2], [15, 3], [20, 3], [19, 1], [19, 3], [16, 2], [16, 3], [25, 1], [25, 3]],
              performAction: function (t, e, r, n, i, o, a) {
                var s = o.length - 1;
                switch (i) {
                  case 1:
                    this.$ = new String(t.replace(/\\(\\|")/g, "$1").replace(/\\n/g, "\n").replace(/\\r/g, "\r").replace(/\\t/g, "\t").replace(/\\v/g, "\v").replace(/\\f/g, "\f").replace(/\\b/g, "\b")), this.$.__line__ = this._$.first_line;
                    break;
                  case 2:
                    this.$ = new Number(t), this.$.__line__ = this._$.first_line;
                    break;
                  case 3:
                    this.$ = null;
                    break;
                  case 4:
                    this.$ = new Boolean(!0), this.$.__line__ = this._$.first_line;
                    break;
                  case 5:
                    this.$ = new Boolean(!1), this.$.__line__ = this._$.first_line;
                    break;
                  case 6:
                    return this.$ = o[s - 1];
                  case 13:
                    this.$ = {}, Object.defineProperty(this.$, "__line__", {value: this._$.first_line, enumerable: !1});
                    break;
                  case 14:
                  case 19:
                    this.$ = o[s - 1], Object.defineProperty(this.$, "__line__", {
                      value: this._$.first_line,
                      enumerable: !1
                    });
                    break;
                  case 15:
                    this.$ = [o[s - 2], o[s]];
                    break;
                  case 16:
                    this.$ = {}, this.$[o[s][0]] = o[s][1];
                    break;
                  case 17:
                    this.$ = o[s - 2], o[s - 2][o[s][0]] = o[s][1];
                    break;
                  case 18:
                    this.$ = [], Object.defineProperty(this.$, "__line__", {value: this._$.first_line, enumerable: !1});
                    break;
                  case 20:
                    this.$ = [o[s]];
                    break;
                  case 21:
                    this.$ = o[s - 2], o[s - 2].push(o[s])
                }
              },
              table: [{
                3: 5,
                4: e,
                5: 6,
                6: r,
                7: 3,
                8: n,
                9: 4,
                10: i,
                11: o,
                12: 1,
                13: 2,
                15: 7,
                16: 8,
                17: a,
                23: s
              }, {1: [3]}, {14: [1, 16]}, t(l, [2, 7]), t(l, [2, 8]), t(l, [2, 9]), t(l, [2, 10]), t(l, [2, 11]), t(l, [2, 12]), t(l, [2, 3]), t(l, [2, 4]), t(l, [2, 5]), t([14, 18, 21, 22, 24], [2, 1]), t(l, [2, 2]), {
                3: 20,
                4: e,
                18: [1, 17],
                19: 18,
                20: 19
              }, {
                3: 5,
                4: e,
                5: 6,
                6: r,
                7: 3,
                8: n,
                9: 4,
                10: i,
                11: o,
                13: 23,
                15: 7,
                16: 8,
                17: a,
                23: s,
                24: [1, 21],
                25: 22
              }, {1: [2, 6]}, t(l, [2, 13]), {
                18: [1, 24],
                22: [1, 25]
              }, t(u, [2, 16]), {21: [1, 26]}, t(l, [2, 18]), {
                22: [1, 28],
                24: [1, 27]
              }, t(c, [2, 20]), t(l, [2, 14]), {3: 20, 4: e, 20: 29}, {
                3: 5,
                4: e,
                5: 6,
                6: r,
                7: 3,
                8: n,
                9: 4,
                10: i,
                11: o,
                13: 30,
                15: 7,
                16: 8,
                17: a,
                23: s
              }, t(l, [2, 19]), {
                3: 5,
                4: e,
                5: 6,
                6: r,
                7: 3,
                8: n,
                9: 4,
                10: i,
                11: o,
                13: 31,
                15: 7,
                16: 8,
                17: a,
                23: s
              }, t(u, [2, 17]), t(u, [2, 15]), t(c, [2, 21])],
              defaultActions: {16: [2, 6]},
              parseError: function (t, e) {
                if (!e.recoverable) throw new Error(t);
                this.trace(t)
              },
              parse: function (t) {
                var e = this, r = [0], n = [null], i = [], o = this.table, a = "", s = 0, l = 0, u = 2, c = 1,
                  h = i.slice.call(arguments, 1), p = Object.create(this.lexer), f = {yy: {}};
                for (var d in this.yy) Object.prototype.hasOwnProperty.call(this.yy, d) && (f.yy[d] = this.yy[d]);
                p.setInput(t, f.yy), f.yy.lexer = p, f.yy.parser = this, void 0 === p.yylloc && (p.yylloc = {});
                var g = p.yylloc;
                i.push(g);
                var y = p.options && p.options.ranges;

                function m() {
                  var t;
                  return "number" != typeof (t = p.lex() || c) && (t = e.symbols_[t] || t), t
                }

                "function" == typeof f.yy.parseError ? this.parseError = f.yy.parseError : this.parseError = Object.getPrototypeOf(this).parseError;
                for (var v, _, b, x, w, S, E, T, C = {}; ;) {
                  if (_ = r[r.length - 1], this.defaultActions[_] ? b = this.defaultActions[_] : (null == v && (v = m()), b = o[_] && o[_][v]), void 0 === b || !b.length || !b[0]) {
                    var O = "";
                    for (w in T = [], o[_]) this.terminals_[w] && w > u && T.push("'" + this.terminals_[w] + "'");
                    O = p.showPosition ? "Parse error on line " + (s + 1) + ":\n" + p.showPosition() + "\nExpecting " + T.join(", ") + ", got '" + (this.terminals_[v] || v) + "'" : "Parse error on line " + (s + 1) + ": Unexpected " + (v == c ? "end of input" : "'" + (this.terminals_[v] || v) + "'"), this.parseError(O, {
                      text: p.match,
                      token: this.terminals_[v] || v,
                      line: p.yylineno,
                      loc: g,
                      expected: T
                    })
                  }
                  if (b[0] instanceof Array && b.length > 1) throw new Error("Parse Error: multiple actions possible at state: " + _ + ", token: " + v);
                  switch (b[0]) {
                    case 1:
                      r.push(v), n.push(p.yytext), i.push(p.yylloc), r.push(b[1]), v = null, l = p.yyleng, a = p.yytext, s = p.yylineno, g = p.yylloc;
                      break;
                    case 2:
                      if (S = this.productions_[b[1]][1], C.$ = n[n.length - S], C._$ = {
                        first_line: i[i.length - (S || 1)].first_line,
                        last_line: i[i.length - 1].last_line,
                        first_column: i[i.length - (S || 1)].first_column,
                        last_column: i[i.length - 1].last_column
                      }, y && (C._$.range = [i[i.length - (S || 1)].range[0], i[i.length - 1].range[1]]), void 0 !== (x = this.performAction.apply(C, [a, l, s, f.yy, b[1], n, i].concat(h)))) return x;
                      S && (r = r.slice(0, -1 * S * 2), n = n.slice(0, -1 * S), i = i.slice(0, -1 * S)), r.push(this.productions_[b[1]][0]), n.push(C.$), i.push(C._$), E = o[r[r.length - 2]][r[r.length - 1]], r.push(E);
                      break;
                    case 3:
                      return !0
                  }
                }
                return !0
              }
            }, p = {
              EOF: 1,
              parseError: function (t, e) {
                if (!this.yy.parser) throw new Error(t);
                this.yy.parser.parseError(t, e)
              },
              setInput: function (t, e) {
                return this.yy = e || this.yy || {}, this._input = t, this._more = this._backtrack = this.done = !1, this.yylineno = this.yyleng = 0, this.yytext = this.matched = this.match = "", this.conditionStack = ["INITIAL"], this.yylloc = {
                  first_line: 1,
                  first_column: 0,
                  last_line: 1,
                  last_column: 0
                }, this.options.ranges && (this.yylloc.range = [0, 0]), this.offset = 0, this
              },
              input: function () {
                var t = this._input[0];
                return this.yytext += t, this.yyleng++, this.offset++, this.match += t, this.matched += t, t.match(/(?:\r\n?|\n).*/g) ? (this.yylineno++, this.yylloc.last_line++) : this.yylloc.last_column++, this.options.ranges && this.yylloc.range[1]++, this._input = this._input.slice(1), t
              },
              unput: function (t) {
                var e = t.length, r = t.split(/(?:\r\n?|\n)/g);
                this._input = t + this._input, this.yytext = this.yytext.substr(0, this.yytext.length - e), this.offset -= e;
                var n = this.match.split(/(?:\r\n?|\n)/g);
                this.match = this.match.substr(0, this.match.length - 1), this.matched = this.matched.substr(0, this.matched.length - 1), r.length - 1 && (this.yylineno -= r.length - 1);
                var i = this.yylloc.range;
                return this.yylloc = {
                  first_line: this.yylloc.first_line,
                  last_line: this.yylineno + 1,
                  first_column: this.yylloc.first_column,
                  last_column: r ? (r.length === n.length ? this.yylloc.first_column : 0) + n[n.length - r.length].length - r[0].length : this.yylloc.first_column - e
                }, this.options.ranges && (this.yylloc.range = [i[0], i[0] + this.yyleng - e]), this.yyleng = this.yytext.length, this
              },
              more: function () {
                return this._more = !0, this
              },
              reject: function () {
                return this.options.backtrack_lexer ? (this._backtrack = !0, this) : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                })
              },
              less: function (t) {
                this.unput(this.match.slice(t))
              },
              pastInput: function () {
                var t = this.matched.substr(0, this.matched.length - this.match.length);
                return (t.length > 20 ? "..." : "") + t.substr(-20).replace(/\n/g, "")
              },
              upcomingInput: function () {
                var t = this.match;
                return t.length < 20 && (t += this._input.substr(0, 20 - t.length)), (t.substr(0, 20) + (t.length > 20 ? "..." : "")).replace(/\n/g, "")
              },
              showPosition: function () {
                var t = this.pastInput(), e = new Array(t.length + 1).join("-");
                return t + this.upcomingInput() + "\n" + e + "^"
              },
              test_match: function (t, e) {
                var r, n, i;
                if (this.options.backtrack_lexer && (i = {
                  yylineno: this.yylineno,
                  yylloc: {
                    first_line: this.yylloc.first_line,
                    last_line: this.last_line,
                    first_column: this.yylloc.first_column,
                    last_column: this.yylloc.last_column
                  },
                  yytext: this.yytext,
                  match: this.match,
                  matches: this.matches,
                  matched: this.matched,
                  yyleng: this.yyleng,
                  offset: this.offset,
                  _more: this._more,
                  _input: this._input,
                  yy: this.yy,
                  conditionStack: this.conditionStack.slice(0),
                  done: this.done
                }, this.options.ranges && (i.yylloc.range = this.yylloc.range.slice(0))), (n = t[0].match(/(?:\r\n?|\n).*/g)) && (this.yylineno += n.length), this.yylloc = {
                  first_line: this.yylloc.last_line,
                  last_line: this.yylineno + 1,
                  first_column: this.yylloc.last_column,
                  last_column: n ? n[n.length - 1].length - n[n.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + t[0].length
                }, this.yytext += t[0], this.match += t[0], this.matches = t, this.yyleng = this.yytext.length, this.options.ranges && (this.yylloc.range = [this.offset, this.offset += this.yyleng]), this._more = !1, this._backtrack = !1, this._input = this._input.slice(t[0].length), this.matched += t[0], r = this.performAction.call(this, this.yy, this, e, this.conditionStack[this.conditionStack.length - 1]), this.done && this._input && (this.done = !1), r) return r;
                if (this._backtrack) {
                  for (var o in i) this[o] = i[o];
                  return !1
                }
                return !1
              },
              next: function () {
                if (this.done) return this.EOF;
                var t, e, r, n;
                this._input || (this.done = !0), this._more || (this.yytext = "", this.match = "");
                for (var i = this._currentRules(), o = 0; o < i.length; o++) if ((r = this._input.match(this.rules[i[o]])) && (!e || r[0].length > e[0].length)) {
                  if (e = r, n = o, this.options.backtrack_lexer) {
                    if (!1 !== (t = this.test_match(r, i[o]))) return t;
                    if (this._backtrack) {
                      e = !1;
                      continue
                    }
                    return !1
                  }
                  if (!this.options.flex) break
                }
                return e ? !1 !== (t = this.test_match(e, i[n])) && t : "" === this._input ? this.EOF : this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
                  text: "",
                  token: null,
                  line: this.yylineno
                })
              },
              lex: function () {
                var t = this.next();
                return t || this.lex()
              },
              begin: function (t) {
                this.conditionStack.push(t)
              },
              popState: function () {
                return this.conditionStack.length - 1 > 0 ? this.conditionStack.pop() : this.conditionStack[0]
              },
              _currentRules: function () {
                return this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1] ? this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules : this.conditions.INITIAL.rules
              },
              topState: function (t) {
                return (t = this.conditionStack.length - 1 - Math.abs(t || 0)) >= 0 ? this.conditionStack[t] : "INITIAL"
              },
              pushState: function (t) {
                this.begin(t)
              },
              stateStackSize: function () {
                return this.conditionStack.length
              },
              options: {},
              performAction: function (t, e, r, n) {
                switch (r) {
                  case 0:
                    break;
                  case 1:
                    return 6;
                  case 2:
                    return e.yytext = e.yytext.substr(1, e.yyleng - 2), 4;
                  case 3:
                    return 17;
                  case 4:
                    return 18;
                  case 5:
                    return 23;
                  case 6:
                    return 24;
                  case 7:
                    return 22;
                  case 8:
                    return 21;
                  case 9:
                    return 10;
                  case 10:
                    return 11;
                  case 11:
                    return 8;
                  case 12:
                    return 14;
                  case 13:
                    return "INVALID"
                }
              },
              rules: [/^(?:\s+)/, /^(?:(-?([0-9]|[1-9][0-9]+))(\.[0-9]+)?([eE][-+]?[0-9]+)?\b)/, /^(?:"(?:\\[\\"bfnrt/]|\\u[a-fA-F0-9]{4}|[^\\\0-\x09\x0a-\x1f"])*")/, /^(?:\{)/, /^(?:\})/, /^(?:\[)/, /^(?:\])/, /^(?:,)/, /^(?::)/, /^(?:true\b)/, /^(?:false\b)/, /^(?:null\b)/, /^(?:$)/, /^(?:.)/],
              conditions: {INITIAL: {rules: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], inclusive: !0}}
            };

          function f() {
            this.yy = {}
          }

          return h.lexer = p, f.prototype = h, h.Parser = f, new f
        }();
        void 0 !== a && (e.parser = r, e.Parser = r.Parser, e.parse = function () {
          return r.parse.apply(r, arguments)
        })
      }));
      Zr.parser, Zr.Parser, Zr.parse;

      function Kr(t) {
        if (t instanceof String || "string" == typeof t || t instanceof n) try {
          return Zr.parse(t.toString())
        } catch (t) {
          throw new wr(t)
        }
        return t
      }

      function Hr(t, e = i) {
        let r = t;
        try {
          r = Kr(r)
        } catch (t) {
          return [t]
        }
        return Wr(r, e)
      }

      const $r = {
        StyleExpression: Xe,
        isExpression: Ze,
        isExpressionFilter: ur,
        createExpression: Ke,
        createPropertyExpression: Je,
        normalizePropertyExpression: function (t, e) {
          if (Ge(t)) return new Qe(t, e);
          if (Ze(t)) {
            const r = Je(t, e);
            if ("error" === r.result) throw new Error(r.value.map(t => `${t.key}: ${t.message}`).join(", "));
            return r.value
          }
          {
            let r = t;
            return "string" == typeof t && "color" === e.type && (r = J.parse(t)), {kind: "constant", evaluate: () => r}
          }
        },
        ZoomConstantExpression: He,
        ZoomDependentExpression: $e,
        StylePropertyFunction: Qe
      }, Jr = {convertFunction: er, createFunction: Ue, isFunction: Ge};
      Hr.parsed = Hr, Hr.latest = Hr
    }).call(this, r(4), r(7).Buffer)
  }, function (t, e, r) {
    t.exports = function () {
      "use strict";

      function t(t, n, i, o, a) {
        !function t(r, n, i, o, a) {
          for (; o > i;) {
            if (o - i > 600) {
              var s = o - i + 1, l = n - i + 1, u = Math.log(s), c = .5 * Math.exp(2 * u / 3),
                h = .5 * Math.sqrt(u * c * (s - c) / s) * (l - s / 2 < 0 ? -1 : 1);
              t(r, n, Math.max(i, Math.floor(n - l * c / s + h)), Math.min(o, Math.floor(n + (s - l) * c / s + h)), a)
            }
            var p = r[n], f = i, d = o;
            for (e(r, i, n), a(r[o], p) > 0 && e(r, i, o); f < d;) {
              for (e(r, f, d), f++, d--; a(r[f], p) < 0;) f++;
              for (; a(r[d], p) > 0;) d--
            }
            0 === a(r[i], p) ? e(r, i, d) : e(r, ++d, o), d <= n && (i = d + 1), n <= d && (o = d - 1)
          }
        }(t, n, i || 0, o || t.length - 1, a || r)
      }

      function e(t, e, r) {
        var n = t[e];
        t[e] = t[r], t[r] = n
      }

      function r(t, e) {
        return t < e ? -1 : t > e ? 1 : 0
      }

      var n = function (t) {
        void 0 === t && (t = 9), this._maxEntries = Math.max(4, t), this._minEntries = Math.max(2, Math.ceil(.4 * this._maxEntries)), this.clear()
      };

      function i(t, e, r) {
        if (!r) return e.indexOf(t);
        for (var n = 0; n < e.length; n++) if (r(t, e[n])) return n;
        return -1
      }

      function o(t, e) {
        a(t, 0, t.children.length, e, t)
      }

      function a(t, e, r, n, i) {
        i || (i = d(null)), i.minX = 1 / 0, i.minY = 1 / 0, i.maxX = -1 / 0, i.maxY = -1 / 0;
        for (var o = e; o < r; o++) {
          var a = t.children[o];
          s(i, t.leaf ? n(a) : a)
        }
        return i
      }

      function s(t, e) {
        return t.minX = Math.min(t.minX, e.minX), t.minY = Math.min(t.minY, e.minY), t.maxX = Math.max(t.maxX, e.maxX), t.maxY = Math.max(t.maxY, e.maxY), t
      }

      function l(t, e) {
        return t.minX - e.minX
      }

      function u(t, e) {
        return t.minY - e.minY
      }

      function c(t) {
        return (t.maxX - t.minX) * (t.maxY - t.minY)
      }

      function h(t) {
        return t.maxX - t.minX + (t.maxY - t.minY)
      }

      function p(t, e) {
        return t.minX <= e.minX && t.minY <= e.minY && e.maxX <= t.maxX && e.maxY <= t.maxY
      }

      function f(t, e) {
        return e.minX <= t.maxX && e.minY <= t.maxY && e.maxX >= t.minX && e.maxY >= t.minY
      }

      function d(t) {
        return {children: t, height: 1, leaf: !0, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0}
      }

      function g(e, r, n, i, o) {
        for (var a = [r, n]; a.length;) if (!((n = a.pop()) - (r = a.pop()) <= i)) {
          var s = r + Math.ceil((n - r) / i / 2) * i;
          t(e, s, r, n, o), a.push(r, s, s, n)
        }
      }

      return n.prototype.all = function () {
        return this._all(this.data, [])
      }, n.prototype.search = function (t) {
        var e = this.data, r = [];
        if (!f(t, e)) return r;
        for (var n = this.toBBox, i = []; e;) {
          for (var o = 0; o < e.children.length; o++) {
            var a = e.children[o], s = e.leaf ? n(a) : a;
            f(t, s) && (e.leaf ? r.push(a) : p(t, s) ? this._all(a, r) : i.push(a))
          }
          e = i.pop()
        }
        return r
      }, n.prototype.collides = function (t) {
        var e = this.data;
        if (!f(t, e)) return !1;
        for (var r = []; e;) {
          for (var n = 0; n < e.children.length; n++) {
            var i = e.children[n], o = e.leaf ? this.toBBox(i) : i;
            if (f(t, o)) {
              if (e.leaf || p(t, o)) return !0;
              r.push(i)
            }
          }
          e = r.pop()
        }
        return !1
      }, n.prototype.load = function (t) {
        if (!t || !t.length) return this;
        if (t.length < this._minEntries) {
          for (var e = 0; e < t.length; e++) this.insert(t[e]);
          return this
        }
        var r = this._build(t.slice(), 0, t.length - 1, 0);
        if (this.data.children.length) if (this.data.height === r.height) this._splitRoot(this.data, r); else {
          if (this.data.height < r.height) {
            var n = this.data;
            this.data = r, r = n
          }
          this._insert(r, this.data.height - r.height - 1, !0)
        } else this.data = r;
        return this
      }, n.prototype.insert = function (t) {
        return t && this._insert(t, this.data.height - 1), this
      }, n.prototype.clear = function () {
        return this.data = d([]), this
      }, n.prototype.remove = function (t, e) {
        if (!t) return this;
        for (var r, n, o, a = this.data, s = this.toBBox(t), l = [], u = []; a || l.length;) {
          if (a || (a = l.pop(), n = l[l.length - 1], r = u.pop(), o = !0), a.leaf) {
            var c = i(t, a.children, e);
            if (-1 !== c) return a.children.splice(c, 1), l.push(a), this._condense(l), this
          }
          o || a.leaf || !p(a, s) ? n ? (r++, a = n.children[r], o = !1) : a = null : (l.push(a), u.push(r), r = 0, n = a, a = a.children[0])
        }
        return this
      }, n.prototype.toBBox = function (t) {
        return t
      }, n.prototype.compareMinX = function (t, e) {
        return t.minX - e.minX
      }, n.prototype.compareMinY = function (t, e) {
        return t.minY - e.minY
      }, n.prototype.toJSON = function () {
        return this.data
      }, n.prototype.fromJSON = function (t) {
        return this.data = t, this
      }, n.prototype._all = function (t, e) {
        for (var r = []; t;) t.leaf ? e.push.apply(e, t.children) : r.push.apply(r, t.children), t = r.pop();
        return e
      }, n.prototype._build = function (t, e, r, n) {
        var i, a = r - e + 1, s = this._maxEntries;
        if (a <= s) return o(i = d(t.slice(e, r + 1)), this.toBBox), i;
        n || (n = Math.ceil(Math.log(a) / Math.log(s)), s = Math.ceil(a / Math.pow(s, n - 1))), (i = d([])).leaf = !1, i.height = n;
        var l = Math.ceil(a / s), u = l * Math.ceil(Math.sqrt(s));
        g(t, e, r, u, this.compareMinX);
        for (var c = e; c <= r; c += u) {
          var h = Math.min(c + u - 1, r);
          g(t, c, h, l, this.compareMinY);
          for (var p = c; p <= h; p += l) {
            var f = Math.min(p + l - 1, h);
            i.children.push(this._build(t, p, f, n - 1))
          }
        }
        return o(i, this.toBBox), i
      }, n.prototype._chooseSubtree = function (t, e, r, n) {
        for (; n.push(e), !e.leaf && n.length - 1 !== r;) {
          for (var i = 1 / 0, o = 1 / 0, a = void 0, s = 0; s < e.children.length; s++) {
            var l = e.children[s], u = c(l),
              h = (p = t, f = l, (Math.max(f.maxX, p.maxX) - Math.min(f.minX, p.minX)) * (Math.max(f.maxY, p.maxY) - Math.min(f.minY, p.minY)) - u);
            h < o ? (o = h, i = u < i ? u : i, a = l) : h === o && u < i && (i = u, a = l)
          }
          e = a || e.children[0]
        }
        var p, f;
        return e
      }, n.prototype._insert = function (t, e, r) {
        var n = r ? t : this.toBBox(t), i = [], o = this._chooseSubtree(n, this.data, e, i);
        for (o.children.push(t), s(o, n); e >= 0 && i[e].children.length > this._maxEntries;) this._split(i, e), e--;
        this._adjustParentBBoxes(n, i, e)
      }, n.prototype._split = function (t, e) {
        var r = t[e], n = r.children.length, i = this._minEntries;
        this._chooseSplitAxis(r, i, n);
        var a = this._chooseSplitIndex(r, i, n), s = d(r.children.splice(a, r.children.length - a));
        s.height = r.height, s.leaf = r.leaf, o(r, this.toBBox), o(s, this.toBBox), e ? t[e - 1].children.push(s) : this._splitRoot(r, s)
      }, n.prototype._splitRoot = function (t, e) {
        this.data = d([t, e]), this.data.height = t.height + 1, this.data.leaf = !1, o(this.data, this.toBBox)
      }, n.prototype._chooseSplitIndex = function (t, e, r) {
        for (var n, i, o, s, l, u, h, p = 1 / 0, f = 1 / 0, d = e; d <= r - e; d++) {
          var g = a(t, 0, d, this.toBBox), y = a(t, d, r, this.toBBox),
            m = (i = g, o = y, s = Math.max(i.minX, o.minX), l = Math.max(i.minY, o.minY), u = Math.min(i.maxX, o.maxX), h = Math.min(i.maxY, o.maxY), Math.max(0, u - s) * Math.max(0, h - l)),
            v = c(g) + c(y);
          m < p ? (p = m, n = d, f = v < f ? v : f) : m === p && v < f && (f = v, n = d)
        }
        return n || r - e
      }, n.prototype._chooseSplitAxis = function (t, e, r) {
        var n = t.leaf ? this.compareMinX : l, i = t.leaf ? this.compareMinY : u;
        this._allDistMargin(t, e, r, n) < this._allDistMargin(t, e, r, i) && t.children.sort(n)
      }, n.prototype._allDistMargin = function (t, e, r, n) {
        t.children.sort(n);
        for (var i = this.toBBox, o = a(t, 0, e, i), l = a(t, r - e, r, i), u = h(o) + h(l), c = e; c < r - e; c++) {
          var p = t.children[c];
          s(o, t.leaf ? i(p) : p), u += h(o)
        }
        for (var f = r - e - 1; f >= e; f--) {
          var d = t.children[f];
          s(l, t.leaf ? i(d) : d), u += h(l)
        }
        return u
      }, n.prototype._adjustParentBBoxes = function (t, e, r) {
        for (var n = r; n >= 0; n--) s(e[n], t)
      }, n.prototype._condense = function (t) {
        for (var e = t.length - 1, r = void 0; e >= 0; e--) 0 === t[e].children.length ? e > 0 ? (r = t[e - 1].children).splice(r.indexOf(t[e]), 1) : this.clear() : o(t[e], this.toBBox)
      }, n
    }()
  }, function (t, e) {
    var r = {
      thin: 100,
      hairline: 100,
      "ultra-light": 100,
      "extra-light": 100,
      light: 200,
      book: 300,
      regular: 400,
      normal: 400,
      plain: 400,
      roman: 400,
      standard: 400,
      medium: 500,
      "semi-bold": 600,
      "demi-bold": 600,
      bold: 700,
      heavy: 800,
      black: 800,
      "extra-bold": 800,
      "ultra-black": 900,
      "extra-black": 900,
      "ultra-bold": 900,
      "heavy-black": 900,
      fat: 900,
      poster: 900
    }, n = /(italic|oblique)$/i, i = {};
    t.exports = function (t, e, o) {
      var a = i[t];
      if (!a) {
        Array.isArray(t) || (t = [t]);
        for (var s = 400, l = "normal", u = [], c = 0, h = t.length; c < h; ++c) {
          var p = t[c].split(" "), f = p[p.length - 1].toLowerCase();
          for (var d in "normal" == f || "italic" == f || "oblique" == f ? (l = f, p.pop(), f = p[p.length - 1].toLowerCase()) : n.test(f) && (f = f.replace(n, ""), l = p[p.length - 1].replace(f, "")), r) if (f == d || f == d.replace("-", "") || f == d.replace("-", " ")) {
            s = r[d], p.pop();
            break
          }
          "number" == typeof f && (s = f);
          var g = p.join(" ").replace("Klokantech Noto Sans", "Noto Sans");
          -1 !== g.indexOf(" ") && (g = '"' + g + '"'), u.push(g)
        }
        a = i[t] = [l, s, u]
      }
      return a[0] + " " + a[1] + " " + e + "px" + (o ? "/" + o : "") + " " + a[2]
    }
  }, function (t, e) {
    e.read = function (t, e, r, n, i) {
      var o, a, s = 8 * i - n - 1, l = (1 << s) - 1, u = l >> 1, c = -7, h = r ? i - 1 : 0, p = r ? -1 : 1,
        f = t[e + h];
      for (h += p, o = f & (1 << -c) - 1, f >>= -c, c += s; c > 0; o = 256 * o + t[e + h], h += p, c -= 8) ;
      for (a = o & (1 << -c) - 1, o >>= -c, c += n; c > 0; a = 256 * a + t[e + h], h += p, c -= 8) ;
      if (0 === o) o = 1 - u; else {
        if (o === l) return a ? NaN : 1 / 0 * (f ? -1 : 1);
        a += Math.pow(2, n), o -= u
      }
      return (f ? -1 : 1) * a * Math.pow(2, o - n)
    }, e.write = function (t, e, r, n, i, o) {
      var a, s, l, u = 8 * o - i - 1, c = (1 << u) - 1, h = c >> 1,
        p = 23 === i ? Math.pow(2, -24) - Math.pow(2, -77) : 0, f = n ? 0 : o - 1, d = n ? 1 : -1,
        g = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
      for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (s = isNaN(e) ? 1 : 0, a = c) : (a = Math.floor(Math.log(e) / Math.LN2), e * (l = Math.pow(2, -a)) < 1 && (a--, l *= 2), (e += a + h >= 1 ? p / l : p * Math.pow(2, 1 - h)) * l >= 2 && (a++, l /= 2), a + h >= c ? (s = 0, a = c) : a + h >= 1 ? (s = (e * l - 1) * Math.pow(2, i), a += h) : (s = e * Math.pow(2, h - 1) * Math.pow(2, i), a = 0)); i >= 8; t[r + f] = 255 & s, f += d, s /= 256, i -= 8) ;
      for (a = a << i | s, u += i; u > 0; t[r + f] = 255 & a, f += d, a /= 256, u -= 8) ;
      t[r + f - d] |= 128 * g
    }
  }, function (t, e) {
    var r;
    r = function () {
      return this
    }();
    try {
      r = r || new Function("return this")()
    } catch (t) {
      "object" == typeof window && (r = window)
    }
    t.exports = r
  }, function (t, e, r) {
    "use strict";
    t.exports = i;
    var n = r(3);

    function i(t) {
      this.buf = ArrayBuffer.isView && ArrayBuffer.isView(t) ? t : new Uint8Array(t || 0), this.pos = 0, this.type = 0, this.length = this.buf.length
    }

    i.Varint = 0, i.Fixed64 = 1, i.Bytes = 2, i.Fixed32 = 5;
    var o = "undefined" == typeof TextDecoder ? null : new TextDecoder("utf8");

    function a(t) {
      return t.type === i.Bytes ? t.readVarint() + t.pos : t.pos + 1
    }

    function s(t, e, r) {
      return r ? 4294967296 * e + (t >>> 0) : 4294967296 * (e >>> 0) + (t >>> 0)
    }

    function l(t, e, r) {
      var n = e <= 16383 ? 1 : e <= 2097151 ? 2 : e <= 268435455 ? 3 : Math.floor(Math.log(e) / (7 * Math.LN2));
      r.realloc(n);
      for (var i = r.pos - 1; i >= t; i--) r.buf[i + n] = r.buf[i]
    }

    function u(t, e) {
      for (var r = 0; r < t.length; r++) e.writeVarint(t[r])
    }

    function c(t, e) {
      for (var r = 0; r < t.length; r++) e.writeSVarint(t[r])
    }

    function h(t, e) {
      for (var r = 0; r < t.length; r++) e.writeFloat(t[r])
    }

    function p(t, e) {
      for (var r = 0; r < t.length; r++) e.writeDouble(t[r])
    }

    function f(t, e) {
      for (var r = 0; r < t.length; r++) e.writeBoolean(t[r])
    }

    function d(t, e) {
      for (var r = 0; r < t.length; r++) e.writeFixed32(t[r])
    }

    function g(t, e) {
      for (var r = 0; r < t.length; r++) e.writeSFixed32(t[r])
    }

    function y(t, e) {
      for (var r = 0; r < t.length; r++) e.writeFixed64(t[r])
    }

    function m(t, e) {
      for (var r = 0; r < t.length; r++) e.writeSFixed64(t[r])
    }

    function v(t, e) {
      return (t[e] | t[e + 1] << 8 | t[e + 2] << 16) + 16777216 * t[e + 3]
    }

    function _(t, e, r) {
      t[r] = e, t[r + 1] = e >>> 8, t[r + 2] = e >>> 16, t[r + 3] = e >>> 24
    }

    function b(t, e) {
      return (t[e] | t[e + 1] << 8 | t[e + 2] << 16) + (t[e + 3] << 24)
    }

    i.prototype = {
      destroy: function () {
        this.buf = null
      }, readFields: function (t, e, r) {
        for (r = r || this.length; this.pos < r;) {
          var n = this.readVarint(), i = n >> 3, o = this.pos;
          this.type = 7 & n, t(i, e, this), this.pos === o && this.skip(n)
        }
        return e
      }, readMessage: function (t, e) {
        return this.readFields(t, e, this.readVarint() + this.pos)
      }, readFixed32: function () {
        var t = v(this.buf, this.pos);
        return this.pos += 4, t
      }, readSFixed32: function () {
        var t = b(this.buf, this.pos);
        return this.pos += 4, t
      }, readFixed64: function () {
        var t = v(this.buf, this.pos) + 4294967296 * v(this.buf, this.pos + 4);
        return this.pos += 8, t
      }, readSFixed64: function () {
        var t = v(this.buf, this.pos) + 4294967296 * b(this.buf, this.pos + 4);
        return this.pos += 8, t
      }, readFloat: function () {
        var t = n.read(this.buf, this.pos, !0, 23, 4);
        return this.pos += 4, t
      }, readDouble: function () {
        var t = n.read(this.buf, this.pos, !0, 52, 8);
        return this.pos += 8, t
      }, readVarint: function (t) {
        var e, r, n = this.buf;
        return e = 127 & (r = n[this.pos++]), r < 128 ? e : (e |= (127 & (r = n[this.pos++])) << 7, r < 128 ? e : (e |= (127 & (r = n[this.pos++])) << 14, r < 128 ? e : (e |= (127 & (r = n[this.pos++])) << 21, r < 128 ? e : function (t, e, r) {
          var n, i, o = r.buf;
          if (i = o[r.pos++], n = (112 & i) >> 4, i < 128) return s(t, n, e);
          if (i = o[r.pos++], n |= (127 & i) << 3, i < 128) return s(t, n, e);
          if (i = o[r.pos++], n |= (127 & i) << 10, i < 128) return s(t, n, e);
          if (i = o[r.pos++], n |= (127 & i) << 17, i < 128) return s(t, n, e);
          if (i = o[r.pos++], n |= (127 & i) << 24, i < 128) return s(t, n, e);
          if (i = o[r.pos++], n |= (1 & i) << 31, i < 128) return s(t, n, e);
          throw new Error("Expected varint not more than 10 bytes")
        }(e |= (15 & (r = n[this.pos])) << 28, t, this))))
      }, readVarint64: function () {
        return this.readVarint(!0)
      }, readSVarint: function () {
        var t = this.readVarint();
        return t % 2 == 1 ? (t + 1) / -2 : t / 2
      }, readBoolean: function () {
        return Boolean(this.readVarint())
      }, readString: function () {
        var t = this.readVarint() + this.pos, e = this.pos;
        return this.pos = t, t - e >= 12 && o ? function (t, e, r) {
          return o.decode(t.subarray(e, r))
        }(this.buf, e, t) : function (t, e, r) {
          var n = "", i = e;
          for (; i < r;) {
            var o, a, s, l = t[i], u = null, c = l > 239 ? 4 : l > 223 ? 3 : l > 191 ? 2 : 1;
            if (i + c > r) break;
            1 === c ? l < 128 && (u = l) : 2 === c ? 128 == (192 & (o = t[i + 1])) && (u = (31 & l) << 6 | 63 & o) <= 127 && (u = null) : 3 === c ? (o = t[i + 1], a = t[i + 2], 128 == (192 & o) && 128 == (192 & a) && ((u = (15 & l) << 12 | (63 & o) << 6 | 63 & a) <= 2047 || u >= 55296 && u <= 57343) && (u = null)) : 4 === c && (o = t[i + 1], a = t[i + 2], s = t[i + 3], 128 == (192 & o) && 128 == (192 & a) && 128 == (192 & s) && ((u = (15 & l) << 18 | (63 & o) << 12 | (63 & a) << 6 | 63 & s) <= 65535 || u >= 1114112) && (u = null)), null === u ? (u = 65533, c = 1) : u > 65535 && (u -= 65536, n += String.fromCharCode(u >>> 10 & 1023 | 55296), u = 56320 | 1023 & u), n += String.fromCharCode(u), i += c
          }
          return n
        }(this.buf, e, t)
      }, readBytes: function () {
        var t = this.readVarint() + this.pos, e = this.buf.subarray(this.pos, t);
        return this.pos = t, e
      }, readPackedVarint: function (t, e) {
        if (this.type !== i.Bytes) return t.push(this.readVarint(e));
        var r = a(this);
        for (t = t || []; this.pos < r;) t.push(this.readVarint(e));
        return t
      }, readPackedSVarint: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readSVarint());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readSVarint());
        return t
      }, readPackedBoolean: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readBoolean());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readBoolean());
        return t
      }, readPackedFloat: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readFloat());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readFloat());
        return t
      }, readPackedDouble: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readDouble());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readDouble());
        return t
      }, readPackedFixed32: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readFixed32());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readFixed32());
        return t
      }, readPackedSFixed32: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readSFixed32());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readSFixed32());
        return t
      }, readPackedFixed64: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readFixed64());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readFixed64());
        return t
      }, readPackedSFixed64: function (t) {
        if (this.type !== i.Bytes) return t.push(this.readSFixed64());
        var e = a(this);
        for (t = t || []; this.pos < e;) t.push(this.readSFixed64());
        return t
      }, skip: function (t) {
        var e = 7 & t;
        if (e === i.Varint) for (; this.buf[this.pos++] > 127;) ; else if (e === i.Bytes) this.pos = this.readVarint() + this.pos; else if (e === i.Fixed32) this.pos += 4; else {
          if (e !== i.Fixed64) throw new Error("Unimplemented type: " + e);
          this.pos += 8
        }
      }, writeTag: function (t, e) {
        this.writeVarint(t << 3 | e)
      }, realloc: function (t) {
        for (var e = this.length || 16; e < this.pos + t;) e *= 2;
        if (e !== this.length) {
          var r = new Uint8Array(e);
          r.set(this.buf), this.buf = r, this.length = e
        }
      }, finish: function () {
        return this.length = this.pos, this.pos = 0, this.buf.subarray(0, this.length)
      }, writeFixed32: function (t) {
        this.realloc(4), _(this.buf, t, this.pos), this.pos += 4
      }, writeSFixed32: function (t) {
        this.realloc(4), _(this.buf, t, this.pos), this.pos += 4
      }, writeFixed64: function (t) {
        this.realloc(8), _(this.buf, -1 & t, this.pos), _(this.buf, Math.floor(t * (1 / 4294967296)), this.pos + 4), this.pos += 8
      }, writeSFixed64: function (t) {
        this.realloc(8), _(this.buf, -1 & t, this.pos), _(this.buf, Math.floor(t * (1 / 4294967296)), this.pos + 4), this.pos += 8
      }, writeVarint: function (t) {
        (t = +t || 0) > 268435455 || t < 0 ? function (t, e) {
          var r, n;
          t >= 0 ? (r = t % 4294967296 | 0, n = t / 4294967296 | 0) : (n = ~(-t / 4294967296), 4294967295 ^ (r = ~(-t % 4294967296)) ? r = r + 1 | 0 : (r = 0, n = n + 1 | 0));
          if (t >= 0x10000000000000000 || t < -0x10000000000000000) throw new Error("Given varint doesn't fit into 10 bytes");
          e.realloc(10), function (t, e, r) {
            r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos++] = 127 & t | 128, t >>>= 7, r.buf[r.pos] = 127 & t
          }(r, 0, e), function (t, e) {
            var r = (7 & t) << 4;
            if (e.buf[e.pos++] |= r | ((t >>>= 3) ? 128 : 0), !t) return;
            if (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), !t) return;
            if (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), !t) return;
            if (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), !t) return;
            if (e.buf[e.pos++] = 127 & t | ((t >>>= 7) ? 128 : 0), !t) return;
            e.buf[e.pos++] = 127 & t
          }(n, e)
        }(t, this) : (this.realloc(4), this.buf[this.pos++] = 127 & t | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = 127 & (t >>>= 7) | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = 127 & (t >>>= 7) | (t > 127 ? 128 : 0), t <= 127 || (this.buf[this.pos++] = t >>> 7 & 127))))
      }, writeSVarint: function (t) {
        this.writeVarint(t < 0 ? 2 * -t - 1 : 2 * t)
      }, writeBoolean: function (t) {
        this.writeVarint(Boolean(t))
      }, writeString: function (t) {
        t = String(t), this.realloc(4 * t.length), this.pos++;
        var e = this.pos;
        this.pos = function (t, e, r) {
          for (var n, i, o = 0; o < e.length; o++) {
            if ((n = e.charCodeAt(o)) > 55295 && n < 57344) {
              if (!i) {
                n > 56319 || o + 1 === e.length ? (t[r++] = 239, t[r++] = 191, t[r++] = 189) : i = n;
                continue
              }
              if (n < 56320) {
                t[r++] = 239, t[r++] = 191, t[r++] = 189, i = n;
                continue
              }
              n = i - 55296 << 10 | n - 56320 | 65536, i = null
            } else i && (t[r++] = 239, t[r++] = 191, t[r++] = 189, i = null);
            n < 128 ? t[r++] = n : (n < 2048 ? t[r++] = n >> 6 | 192 : (n < 65536 ? t[r++] = n >> 12 | 224 : (t[r++] = n >> 18 | 240, t[r++] = n >> 12 & 63 | 128), t[r++] = n >> 6 & 63 | 128), t[r++] = 63 & n | 128)
          }
          return r
        }(this.buf, t, this.pos);
        var r = this.pos - e;
        r >= 128 && l(e, r, this), this.pos = e - 1, this.writeVarint(r), this.pos += r
      }, writeFloat: function (t) {
        this.realloc(4), n.write(this.buf, t, this.pos, !0, 23, 4), this.pos += 4
      }, writeDouble: function (t) {
        this.realloc(8), n.write(this.buf, t, this.pos, !0, 52, 8), this.pos += 8
      }, writeBytes: function (t) {
        var e = t.length;
        this.writeVarint(e), this.realloc(e);
        for (var r = 0; r < e; r++) this.buf[this.pos++] = t[r]
      }, writeRawMessage: function (t, e) {
        this.pos++;
        var r = this.pos;
        t(e, this);
        var n = this.pos - r;
        n >= 128 && l(r, n, this), this.pos = r - 1, this.writeVarint(n), this.pos += n
      }, writeMessage: function (t, e, r) {
        this.writeTag(t, i.Bytes), this.writeRawMessage(e, r)
      }, writePackedVarint: function (t, e) {
        e.length && this.writeMessage(t, u, e)
      }, writePackedSVarint: function (t, e) {
        e.length && this.writeMessage(t, c, e)
      }, writePackedBoolean: function (t, e) {
        e.length && this.writeMessage(t, f, e)
      }, writePackedFloat: function (t, e) {
        e.length && this.writeMessage(t, h, e)
      }, writePackedDouble: function (t, e) {
        e.length && this.writeMessage(t, p, e)
      }, writePackedFixed32: function (t, e) {
        e.length && this.writeMessage(t, d, e)
      }, writePackedSFixed32: function (t, e) {
        e.length && this.writeMessage(t, g, e)
      }, writePackedFixed64: function (t, e) {
        e.length && this.writeMessage(t, y, e)
      }, writePackedSFixed64: function (t, e) {
        e.length && this.writeMessage(t, m, e)
      }, writeBytesField: function (t, e) {
        this.writeTag(t, i.Bytes), this.writeBytes(e)
      }, writeFixed32Field: function (t, e) {
        this.writeTag(t, i.Fixed32), this.writeFixed32(e)
      }, writeSFixed32Field: function (t, e) {
        this.writeTag(t, i.Fixed32), this.writeSFixed32(e)
      }, writeFixed64Field: function (t, e) {
        this.writeTag(t, i.Fixed64), this.writeFixed64(e)
      }, writeSFixed64Field: function (t, e) {
        this.writeTag(t, i.Fixed64), this.writeSFixed64(e)
      }, writeVarintField: function (t, e) {
        this.writeTag(t, i.Varint), this.writeVarint(e)
      }, writeSVarintField: function (t, e) {
        this.writeTag(t, i.Varint), this.writeSVarint(e)
      }, writeStringField: function (t, e) {
        this.writeTag(t, i.Bytes), this.writeString(e)
      }, writeFloatField: function (t, e) {
        this.writeTag(t, i.Fixed32), this.writeFloat(e)
      }, writeDoubleField: function (t, e) {
        this.writeTag(t, i.Fixed64), this.writeDouble(e)
      }, writeBooleanField: function (t, e) {
        this.writeVarintField(t, Boolean(e))
      }
    }
  }, function (t, e) {
    (function () {
      var e;
      t.exports = {
        icon: "icons/google.svg",
        name: "google",
        title: "Google Fonts",
        link: "google.com/fonts",
        getNames: function () {
          return e
        },
        getLink: function (t) {
          return "https://fonts.google.com/specimen/" + t.replace(/( )/g, "+")
        },
        normalizeName: function (t) {
          return t
        }
      }, e = ["ABeeZee", "Abel", "Abril Fatface", "Aclonica", "Acme", "Actor", "Adamina", "Advent Pro", "Aguafina Script", "Akronim", "Aladin", "Aldrich", "Alef", "Alegreya", "Alegreya SC", "Alegreya Sans", "Alegreya Sans SC", "Alex Brush", "Alfa Slab One", "Alice", "Alike", "Alike Angular", "Allan", "Allerta", "Allerta Stencil", "Allura", "Almendra", "Almendra Display", "Almendra SC", "Amarante", "Amaranth", "Amatic SC", "Amethysta", "Amiri", "Amita", "Anaheim", "Andada", "Andika", "Angkor", "Annie Use Your Telescope", "Anonymous Pro", "Antic", "Antic Didone", "Antic Slab", "Anton", "Arapey", "Arbutus", "Arbutus Slab", "Architects Daughter", "Archivo Black", "Archivo Narrow", "Arimo", "Arizonia", "Armata", "Artifika", "Arvo", "Arya", "Asap", "Asar", "Asset", "Astloch", "Asul", "Atomic Age", "Aubrey", "Audiowide", "Autour One", "Average", "Average Sans", "Averia Gruesa Libre", "Averia Libre", "Averia Sans Libre", "Averia Serif Libre", "Bad Script", "Balthazar", "Bangers", "Basic", "Battambang", "Baumans", "Bayon", "Belgrano", "Belleza", "BenchNine", "Bentham", "Berkshire Swash", "Bevan", "Bigelow Rules", "Bigshot One", "Bilbo", "Bilbo Swash Caps", "Biryani", "Bitter", "Black Ops One", "Bokor", "Bonbon", "Boogaloo", "Bowlby One", "Bowlby One SC", "Brawler", "Bree Serif", "Bubblegum Sans", "Bubbler One", "Buda", "Buenard", "Butcherman", "Butterfly Kids", "Cabin", "Cabin Condensed", "Cabin Sketch", "Caesar Dressing", "Cagliostro", "Calligraffitti", "Cambay", "Cambo", "Candal", "Cantarell", "Cantata One", "Cantora One", "Capriola", "Cardo", "Carme", "Carrois Gothic", "Carrois Gothic SC", "Carter One", "Catamaran", "Caudex", "Caveat", "Caveat Brush", "Cedarville Cursive", "Ceviche One", "Changa One", "Chango", "Chau Philomene One", "Chela One", "Chelsea Market", "Chenla", "Cherry Cream Soda", "Cherry Swash", "Chewy", "Chicle", "Chivo", "Chonburi", "Cinzel", "Cinzel Decorative", "Clicker Script", "Coda", "Coda Caption", "Codystar", "Combo", "Comfortaa", "Coming Soon", "Concert One", "Condiment", "Content", "Contrail One", "Convergence", "Cookie", "Copse", "Corben", "Courgette", "Cousine", "Coustard", "Covered By Your Grace", "Crafty Girls", "Creepster", "Crete Round", "Crimson Text", "Croissant One", "Crushed", "Cuprum", "Cutive", "Cutive Mono", "Damion", "Dancing Script", "Dangrek", "Dawning of a New Day", "Days One", "Dekko", "Delius", "Delius Swash Caps", "Delius Unicase", "Della Respira", "Denk One", "Devonshire", "Dhurjati", "Didact Gothic", "Diplomata", "Diplomata SC", "Domine", "Donegal One", "Doppio One", "Dorsa", "Dosis", "Dr Sugiyama", "Droid Sans", "Droid Sans Mono", "Droid Serif", "Duru Sans", "Dynalight", "EB Garamond", "Eagle Lake", "Eater", "Economica", "Eczar", "Ek Mukta", "Electrolize", "Elsie", "Elsie Swash Caps", "Emblema One", "Emilys Candy", "Engagement", "Englebert", "Enriqueta", "Erica One", "Esteban", "Euphoria Script", "Ewert", "Exo", "Exo 2", "Expletus Sans", "Fanwood Text", "Fascinate", "Fascinate Inline", "Faster One", "Fasthand", "Fauna One", "Federant", "Federo", "Felipa", "Fenix", "Finger Paint", "Fira Mono", "Fira Sans", "Fjalla One", "Fjord One", "Flamenco", "Flavors", "Fondamento", "Fontdiner Swanky", "Forum", "Francois One", "Freckle Face", "Fredericka the Great", "Fredoka One", "Freehand", "Fresca", "Frijole", "Fruktur", "Fugaz One", "GFS Didot", "GFS Neohellenic", "Gabriela", "Gafata", "Galdeano", "Galindo", "Gentium Basic", "Gentium Book Basic", "Geo", "Geostar", "Geostar Fill", "Germania One", "Gidugu", "Gilda Display", "Give You Glory", "Glass Antiqua", "Glegoo", "Gloria Hallelujah", "Goblin One", "Gochi Hand", "Gorditas", "Goudy Bookletter 1911", "Graduate", "Grand Hotel", "Gravitas One", "Great Vibes", "Griffy", "Gruppo", "Gudea", "Gurajada", "Habibi", "Halant", "Hammersmith One", "Hanalei", "Hanalei Fill", "Handlee", "Hanuman", "Happy Monkey", "Headland One", "Henny Penny", "Herr Von Muellerhoff", "Hind", "Hind Siliguri", "Hind Vadodara", "Holtwood One SC", "Homemade Apple", "Homenaje", "IM Fell DW Pica", "IM Fell DW Pica SC", "IM Fell Double Pica", "IM Fell Double Pica SC", "IM Fell English", "IM Fell English SC", "IM Fell French Canon", "IM Fell French Canon SC", "IM Fell Great Primer", "IM Fell Great Primer SC", "Iceberg", "Iceland", "Imprima", "Inconsolata", "Inder", "Indie Flower", "Inika", "Inknut Antiqua", "Irish Grover", "Istok Web", "Italiana", "Italianno", "Itim", "Jacques Francois", "Jacques Francois Shadow", "Jaldi", "Jim Nightshade", "Jockey One", "Jolly Lodger", "Josefin Sans", "Josefin Slab", "Joti One", "Judson", "Julee", "Julius Sans One", "Junge", "Jura", "Just Another Hand", "Just Me Again Down Here", "Kadwa", "Kalam", "Kameron", "Kantumruy", "Karla", "Karma", "Kaushan Script", "Kavoon", "Kdam Thmor", "Keania One", "Kelly Slab", "Kenia", "Khand", "Khmer", "Khula", "Kite One", "Knewave", "Kotta One", "Koulen", "Kranky", "Kreon", "Kristi", "Krona One", "Kurale", "La Belle Aurore", "Laila", "Lakki Reddy", "Lancelot", "Lateef", "Lato", "League Script", "Leckerli One", "Ledger", "Lekton", "Lemon", "Libre Baskerville", "Life Savers", "Lilita One", "Lily Script One", "Limelight", "Linden Hill", "Lobster", "Lobster Two", "Londrina Outline", "Londrina Shadow", "Londrina Sketch", "Londrina Solid", "Lora", "Love Ya Like A Sister", "Loved by the King", "Lovers Quarrel", "Luckiest Guy", "Lusitana", "Lustria", "Macondo", "Macondo Swash Caps", "Magra", "Maiden Orange", "Mako", "Mallanna", "Mandali", "Marcellus", "Marcellus SC", "Marck Script", "Margarine", "Marko One", "Marmelad", "Martel", "Martel Sans", "Marvel", "Mate", "Mate SC", "Maven Pro", "McLaren", "Meddon", "MedievalSharp", "Medula One", "Megrim", "Meie Script", "Merienda", "Merienda One", "Merriweather", "Merriweather Sans", "Metal", "Metal Mania", "Metamorphous", "Metrophobic", "Michroma", "Milonga", "Miltonian", "Miltonian Tattoo", "Miniver", "Miss Fajardose", "Modak", "Modern Antiqua", "Molengo", "Molle", "Monda", "Monofett", "Monoton", "Monsieur La Doulaise", "Montaga", "Montez", "Montserrat", "Montserrat Alternates", "Montserrat Subrayada", "Moul", "Moulpali", "Mountains of Christmas", "Mouse Memoirs", "Mr Bedfort", "Mr Dafoe", "Mr De Haviland", "Mrs Saint Delafield", "Mrs Sheppards", "Muli", "Mystery Quest", "NTR", "Neucha", "Neuton", "New Rocker", "News Cycle", "Niconne", "Nixie One", "Nobile", "Nokora", "Norican", "Nosifer", "Nothing You Could Do", "Noticia Text", "Noto Sans", "Noto Serif", "Nova Cut", "Nova Flat", "Nova Mono", "Nova Oval", "Nova Round", "Nova Script", "Nova Slim", "Nova Square", "Numans", "Nunito", "Odor Mean Chey", "Offside", "Old Standard TT", "Oldenburg", "Oleo Script", "Oleo Script Swash Caps", "Open Sans", "Open Sans Condensed", "Oranienbaum", "Orbitron", "Oregano", "Orienta", "Original Surfer", "Oswald", "Over the Rainbow", "Overlock", "Overlock SC", "Ovo", "Oxygen", "Oxygen Mono", "PT Mono", "PT Sans", "PT Sans Caption", "PT Sans Narrow", "PT Serif", "PT Serif Caption", "Pacifico", "Palanquin", "Palanquin Dark", "Paprika", "Parisienne", "Passero One", "Passion One", "Pathway Gothic One", "Patrick Hand", "Patrick Hand SC", "Patua One", "Paytone One", "Peddana", "Peralta", "Permanent Marker", "Petit Formal Script", "Petrona", "Philosopher", "Piedra", "Pinyon Script", "Pirata One", "Plaster", "Play", "Playball", "Playfair Display", "Playfair Display SC", "Podkova", "Poiret One", "Poller One", "Poly", "Pompiere", "Pontano Sans", "Poppins", "Port Lligat Sans", "Port Lligat Slab", "Pragati Narrow", "Prata", "Preahvihear", "Press Start 2P", "Princess Sofia", "Prociono", "Prosto One", "Puritan", "Purple Purse", "Quando", "Quantico", "Quattrocento", "Quattrocento Sans", "Questrial", "Quicksand", "Quintessential", "Qwigley", "Racing Sans One", "Radley", "Rajdhani", "Raleway", "Raleway Dots", "Ramabhadra", "Ramaraja", "Rambla", "Rammetto One", "Ranchers", "Rancho", "Ranga", "Rationale", "Ravi Prakash", "Redressed", "Reenie Beanie", "Revalia", "Rhodium Libre", "Ribeye", "Ribeye Marrow", "Righteous", "Risque", "Roboto", "Roboto Condensed", "Roboto Mono", "Roboto Slab", "Rochester", "Rock Salt", "Rokkitt", "Romanesco", "Ropa Sans", "Rosario", "Rosarivo", "Rouge Script", "Rozha One", "Rubik", "Rubik Mono One", "Rubik One", "Ruda", "Rufina", "Ruge Boogie", "Ruluko", "Rum Raisin", "Ruslan Display", "Russo One", "Ruthie", "Rye", "Sacramento", "Sahitya", "Sail", "Salsa", "Sanchez", "Sancreek", "Sansita One", "Sarala", "Sarina", "Sarpanch", "Satisfy", "Scada", "Scheherazade", "Schoolbell", "Seaweed Script", "Sevillana", "Seymour One", "Shadows Into Light", "Shadows Into Light Two", "Shanti", "Share", "Share Tech", "Share Tech Mono", "Shojumaru", "Short Stack", "Siemreap", "Sigmar One", "Signika", "Signika Negative", "Simonetta", "Sintony", "Sirin Stencil", "Six Caps", "Skranji", "Slabo 13px", "Slabo 27px", "Slackey", "Smokum", "Smythe", "Sniglet", "Snippet", "Snowburst One", "Sofadi One", "Sofia", "Sonsie One", "Sorts Mill Goudy", "Source Code Pro", "Source Sans Pro", "Source Serif Pro", "Special Elite", "Spicy Rice", "Spinnaker", "Spirax", "Squada One", "Sree Krushnadevaraya", "Stalemate", "Stalinist One", "Stardos Stencil", "Stint Ultra Condensed", "Stint Ultra Expanded", "Stoke", "Strait", "Sue Ellen Francisco", "Sumana", "Sunshiney", "Supermercado One", "Sura", "Suranna", "Suravaram", "Suwannaphum", "Swanky and Moo Moo", "Syncopate", "Tangerine", "Taprom", "Tauri", "Teko", "Telex", "Tenali Ramakrishna", "Tenor Sans", "Text Me One", "The Girl Next Door", "Tienne", "Tillana", "Timmana", "Tinos", "Titan One", "Titillium Web", "Trade Winds", "Trocchi", "Trochut", "Trykker", "Tulpen One", "Ubuntu", "Ubuntu Condensed", "Ubuntu Mono", "Ultra", "Uncial Antiqua", "Underdog", "Unica One", "UnifrakturCook", "UnifrakturMaguntia", "Unkempt", "Unlock", "Unna", "VT323", "Vampiro One", "Varela", "Varela Round", "Vast Shadow", "Vesper Libre", "Vibur", "Vidaloka", "Viga", "Voces", "Volkhov", "Vollkorn", "Voltaire", "Waiting for the Sunrise", "Wallpoet", "Walter Turncoat", "Warnes", "Wellfleet", "Wendy One", "Wire One", "Work Sans", "Yanone Kaffeesatz", "Yantramanav", "Yellowtail", "Yeseva One", "Yesteryear", "Zeyada"]
    }).call(this)
  }, function (t, e, r) {
    "use strict";
    (function (t) {
      /*!
   * The buffer module from node.js, for the browser.
   *
   * @author   Feross Aboukhadijeh <http://feross.org>
   * @license  MIT
   */
      var n = r(8), i = r(3), o = r(9);

      function a() {
        return l.TYPED_ARRAY_SUPPORT ? 2147483647 : 1073741823
      }

      function s(t, e) {
        if (a() < e) throw new RangeError("Invalid typed array length");
        return l.TYPED_ARRAY_SUPPORT ? (t = new Uint8Array(e)).__proto__ = l.prototype : (null === t && (t = new l(e)), t.length = e), t
      }

      function l(t, e, r) {
        if (!(l.TYPED_ARRAY_SUPPORT || this instanceof l)) return new l(t, e, r);
        if ("number" == typeof t) {
          if ("string" == typeof e) throw new Error("If encoding is specified then the first argument must be a string");
          return h(this, t)
        }
        return u(this, t, e, r)
      }

      function u(t, e, r, n) {
        if ("number" == typeof e) throw new TypeError('"value" argument must not be a number');
        return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer ? function (t, e, r, n) {
          if (e.byteLength, r < 0 || e.byteLength < r) throw new RangeError("'offset' is out of bounds");
          if (e.byteLength < r + (n || 0)) throw new RangeError("'length' is out of bounds");
          e = void 0 === r && void 0 === n ? new Uint8Array(e) : void 0 === n ? new Uint8Array(e, r) : new Uint8Array(e, r, n);
          l.TYPED_ARRAY_SUPPORT ? (t = e).__proto__ = l.prototype : t = p(t, e);
          return t
        }(t, e, r, n) : "string" == typeof e ? function (t, e, r) {
          "string" == typeof r && "" !== r || (r = "utf8");
          if (!l.isEncoding(r)) throw new TypeError('"encoding" must be a valid string encoding');
          var n = 0 | d(e, r), i = (t = s(t, n)).write(e, r);
          i !== n && (t = t.slice(0, i));
          return t
        }(t, e, r) : function (t, e) {
          if (l.isBuffer(e)) {
            var r = 0 | f(e.length);
            return 0 === (t = s(t, r)).length || e.copy(t, 0, 0, r), t
          }
          if (e) {
            if ("undefined" != typeof ArrayBuffer && e.buffer instanceof ArrayBuffer || "length" in e) return "number" != typeof e.length || (n = e.length) != n ? s(t, 0) : p(t, e);
            if ("Buffer" === e.type && o(e.data)) return p(t, e.data)
          }
          var n;
          throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")
        }(t, e)
      }

      function c(t) {
        if ("number" != typeof t) throw new TypeError('"size" argument must be a number');
        if (t < 0) throw new RangeError('"size" argument must not be negative')
      }

      function h(t, e) {
        if (c(e), t = s(t, e < 0 ? 0 : 0 | f(e)), !l.TYPED_ARRAY_SUPPORT) for (var r = 0; r < e; ++r) t[r] = 0;
        return t
      }

      function p(t, e) {
        var r = e.length < 0 ? 0 : 0 | f(e.length);
        t = s(t, r);
        for (var n = 0; n < r; n += 1) t[n] = 255 & e[n];
        return t
      }

      function f(t) {
        if (t >= a()) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + a().toString(16) + " bytes");
        return 0 | t
      }

      function d(t, e) {
        if (l.isBuffer(t)) return t.length;
        if ("undefined" != typeof ArrayBuffer && "function" == typeof ArrayBuffer.isView && (ArrayBuffer.isView(t) || t instanceof ArrayBuffer)) return t.byteLength;
        "string" != typeof t && (t = "" + t);
        var r = t.length;
        if (0 === r) return 0;
        for (var n = !1; ;) switch (e) {
          case"ascii":
          case"latin1":
          case"binary":
            return r;
          case"utf8":
          case"utf-8":
          case void 0:
            return z(t).length;
          case"ucs2":
          case"ucs-2":
          case"utf16le":
          case"utf-16le":
            return 2 * r;
          case"hex":
            return r >>> 1;
          case"base64":
            return U(t).length;
          default:
            if (n) return z(t).length;
            e = ("" + e).toLowerCase(), n = !0
        }
      }

      function g(t, e, r) {
        var n = !1;
        if ((void 0 === e || e < 0) && (e = 0), e > this.length) return "";
        if ((void 0 === r || r > this.length) && (r = this.length), r <= 0) return "";
        if ((r >>>= 0) <= (e >>>= 0)) return "";
        for (t || (t = "utf8"); ;) switch (t) {
          case"hex":
            return R(this, e, r);
          case"utf8":
          case"utf-8":
            return C(this, e, r);
          case"ascii":
            return O(this, e, r);
          case"latin1":
          case"binary":
            return P(this, e, r);
          case"base64":
            return T(this, e, r);
          case"ucs2":
          case"ucs-2":
          case"utf16le":
          case"utf-16le":
            return I(this, e, r);
          default:
            if (n) throw new TypeError("Unknown encoding: " + t);
            t = (t + "").toLowerCase(), n = !0
        }
      }

      function y(t, e, r) {
        var n = t[e];
        t[e] = t[r], t[r] = n
      }

      function m(t, e, r, n, i) {
        if (0 === t.length) return -1;
        if ("string" == typeof r ? (n = r, r = 0) : r > 2147483647 ? r = 2147483647 : r < -2147483648 && (r = -2147483648), r = +r, isNaN(r) && (r = i ? 0 : t.length - 1), r < 0 && (r = t.length + r), r >= t.length) {
          if (i) return -1;
          r = t.length - 1
        } else if (r < 0) {
          if (!i) return -1;
          r = 0
        }
        if ("string" == typeof e && (e = l.from(e, n)), l.isBuffer(e)) return 0 === e.length ? -1 : v(t, e, r, n, i);
        if ("number" == typeof e) return e &= 255, l.TYPED_ARRAY_SUPPORT && "function" == typeof Uint8Array.prototype.indexOf ? i ? Uint8Array.prototype.indexOf.call(t, e, r) : Uint8Array.prototype.lastIndexOf.call(t, e, r) : v(t, [e], r, n, i);
        throw new TypeError("val must be string, number or Buffer")
      }

      function v(t, e, r, n, i) {
        var o, a = 1, s = t.length, l = e.length;
        if (void 0 !== n && ("ucs2" === (n = String(n).toLowerCase()) || "ucs-2" === n || "utf16le" === n || "utf-16le" === n)) {
          if (t.length < 2 || e.length < 2) return -1;
          a = 2, s /= 2, l /= 2, r /= 2
        }

        function u(t, e) {
          return 1 === a ? t[e] : t.readUInt16BE(e * a)
        }

        if (i) {
          var c = -1;
          for (o = r; o < s; o++) if (u(t, o) === u(e, -1 === c ? 0 : o - c)) {
            if (-1 === c && (c = o), o - c + 1 === l) return c * a
          } else -1 !== c && (o -= o - c), c = -1
        } else for (r + l > s && (r = s - l), o = r; o >= 0; o--) {
          for (var h = !0, p = 0; p < l; p++) if (u(t, o + p) !== u(e, p)) {
            h = !1;
            break
          }
          if (h) return o
        }
        return -1
      }

      function _(t, e, r, n) {
        r = Number(r) || 0;
        var i = t.length - r;
        n ? (n = Number(n)) > i && (n = i) : n = i;
        var o = e.length;
        if (o % 2 != 0) throw new TypeError("Invalid hex string");
        n > o / 2 && (n = o / 2);
        for (var a = 0; a < n; ++a) {
          var s = parseInt(e.substr(2 * a, 2), 16);
          if (isNaN(s)) return a;
          t[r + a] = s
        }
        return a
      }

      function b(t, e, r, n) {
        return B(z(e, t.length - r), t, r, n)
      }

      function x(t, e, r, n) {
        return B(function (t) {
          for (var e = [], r = 0; r < t.length; ++r) e.push(255 & t.charCodeAt(r));
          return e
        }(e), t, r, n)
      }

      function w(t, e, r, n) {
        return x(t, e, r, n)
      }

      function S(t, e, r, n) {
        return B(U(e), t, r, n)
      }

      function E(t, e, r, n) {
        return B(function (t, e) {
          for (var r, n, i, o = [], a = 0; a < t.length && !((e -= 2) < 0); ++a) r = t.charCodeAt(a), n = r >> 8, i = r % 256, o.push(i), o.push(n);
          return o
        }(e, t.length - r), t, r, n)
      }

      function T(t, e, r) {
        return 0 === e && r === t.length ? n.fromByteArray(t) : n.fromByteArray(t.slice(e, r))
      }

      function C(t, e, r) {
        r = Math.min(t.length, r);
        for (var n = [], i = e; i < r;) {
          var o, a, s, l, u = t[i], c = null, h = u > 239 ? 4 : u > 223 ? 3 : u > 191 ? 2 : 1;
          if (i + h <= r) switch (h) {
            case 1:
              u < 128 && (c = u);
              break;
            case 2:
              128 == (192 & (o = t[i + 1])) && (l = (31 & u) << 6 | 63 & o) > 127 && (c = l);
              break;
            case 3:
              o = t[i + 1], a = t[i + 2], 128 == (192 & o) && 128 == (192 & a) && (l = (15 & u) << 12 | (63 & o) << 6 | 63 & a) > 2047 && (l < 55296 || l > 57343) && (c = l);
              break;
            case 4:
              o = t[i + 1], a = t[i + 2], s = t[i + 3], 128 == (192 & o) && 128 == (192 & a) && 128 == (192 & s) && (l = (15 & u) << 18 | (63 & o) << 12 | (63 & a) << 6 | 63 & s) > 65535 && l < 1114112 && (c = l)
          }
          null === c ? (c = 65533, h = 1) : c > 65535 && (c -= 65536, n.push(c >>> 10 & 1023 | 55296), c = 56320 | 1023 & c), n.push(c), i += h
        }
        return function (t) {
          var e = t.length;
          if (e <= 4096) return String.fromCharCode.apply(String, t);
          var r = "", n = 0;
          for (; n < e;) r += String.fromCharCode.apply(String, t.slice(n, n += 4096));
          return r
        }(n)
      }

      e.Buffer = l, e.SlowBuffer = function (t) {
        +t != t && (t = 0);
        return l.alloc(+t)
      }, e.INSPECT_MAX_BYTES = 50, l.TYPED_ARRAY_SUPPORT = void 0 !== t.TYPED_ARRAY_SUPPORT ? t.TYPED_ARRAY_SUPPORT : function () {
        try {
          var t = new Uint8Array(1);
          return t.__proto__ = {
            __proto__: Uint8Array.prototype, foo: function () {
              return 42
            }
          }, 42 === t.foo() && "function" == typeof t.subarray && 0 === t.subarray(1, 1).byteLength
        } catch (t) {
          return !1
        }
      }(), e.kMaxLength = a(), l.poolSize = 8192, l._augment = function (t) {
        return t.__proto__ = l.prototype, t
      }, l.from = function (t, e, r) {
        return u(null, t, e, r)
      }, l.TYPED_ARRAY_SUPPORT && (l.prototype.__proto__ = Uint8Array.prototype, l.__proto__ = Uint8Array, "undefined" != typeof Symbol && Symbol.species && l[Symbol.species] === l && Object.defineProperty(l, Symbol.species, {
        value: null,
        configurable: !0
      })), l.alloc = function (t, e, r) {
        return function (t, e, r, n) {
          return c(e), e <= 0 ? s(t, e) : void 0 !== r ? "string" == typeof n ? s(t, e).fill(r, n) : s(t, e).fill(r) : s(t, e)
        }(null, t, e, r)
      }, l.allocUnsafe = function (t) {
        return h(null, t)
      }, l.allocUnsafeSlow = function (t) {
        return h(null, t)
      }, l.isBuffer = function (t) {
        return !(null == t || !t._isBuffer)
      }, l.compare = function (t, e) {
        if (!l.isBuffer(t) || !l.isBuffer(e)) throw new TypeError("Arguments must be Buffers");
        if (t === e) return 0;
        for (var r = t.length, n = e.length, i = 0, o = Math.min(r, n); i < o; ++i) if (t[i] !== e[i]) {
          r = t[i], n = e[i];
          break
        }
        return r < n ? -1 : n < r ? 1 : 0
      }, l.isEncoding = function (t) {
        switch (String(t).toLowerCase()) {
          case"hex":
          case"utf8":
          case"utf-8":
          case"ascii":
          case"latin1":
          case"binary":
          case"base64":
          case"ucs2":
          case"ucs-2":
          case"utf16le":
          case"utf-16le":
            return !0;
          default:
            return !1
        }
      }, l.concat = function (t, e) {
        if (!o(t)) throw new TypeError('"list" argument must be an Array of Buffers');
        if (0 === t.length) return l.alloc(0);
        var r;
        if (void 0 === e) for (e = 0, r = 0; r < t.length; ++r) e += t[r].length;
        var n = l.allocUnsafe(e), i = 0;
        for (r = 0; r < t.length; ++r) {
          var a = t[r];
          if (!l.isBuffer(a)) throw new TypeError('"list" argument must be an Array of Buffers');
          a.copy(n, i), i += a.length
        }
        return n
      }, l.byteLength = d, l.prototype._isBuffer = !0, l.prototype.swap16 = function () {
        var t = this.length;
        if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits");
        for (var e = 0; e < t; e += 2) y(this, e, e + 1);
        return this
      }, l.prototype.swap32 = function () {
        var t = this.length;
        if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits");
        for (var e = 0; e < t; e += 4) y(this, e, e + 3), y(this, e + 1, e + 2);
        return this
      }, l.prototype.swap64 = function () {
        var t = this.length;
        if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits");
        for (var e = 0; e < t; e += 8) y(this, e, e + 7), y(this, e + 1, e + 6), y(this, e + 2, e + 5), y(this, e + 3, e + 4);
        return this
      }, l.prototype.toString = function () {
        var t = 0 | this.length;
        return 0 === t ? "" : 0 === arguments.length ? C(this, 0, t) : g.apply(this, arguments)
      }, l.prototype.equals = function (t) {
        if (!l.isBuffer(t)) throw new TypeError("Argument must be a Buffer");
        return this === t || 0 === l.compare(this, t)
      }, l.prototype.inspect = function () {
        var t = "", r = e.INSPECT_MAX_BYTES;
        return this.length > 0 && (t = this.toString("hex", 0, r).match(/.{2}/g).join(" "), this.length > r && (t += " ... ")), "<Buffer " + t + ">"
      }, l.prototype.compare = function (t, e, r, n, i) {
        if (!l.isBuffer(t)) throw new TypeError("Argument must be a Buffer");
        if (void 0 === e && (e = 0), void 0 === r && (r = t ? t.length : 0), void 0 === n && (n = 0), void 0 === i && (i = this.length), e < 0 || r > t.length || n < 0 || i > this.length) throw new RangeError("out of range index");
        if (n >= i && e >= r) return 0;
        if (n >= i) return -1;
        if (e >= r) return 1;
        if (this === t) return 0;
        for (var o = (i >>>= 0) - (n >>>= 0), a = (r >>>= 0) - (e >>>= 0), s = Math.min(o, a), u = this.slice(n, i), c = t.slice(e, r), h = 0; h < s; ++h) if (u[h] !== c[h]) {
          o = u[h], a = c[h];
          break
        }
        return o < a ? -1 : a < o ? 1 : 0
      }, l.prototype.includes = function (t, e, r) {
        return -1 !== this.indexOf(t, e, r)
      }, l.prototype.indexOf = function (t, e, r) {
        return m(this, t, e, r, !0)
      }, l.prototype.lastIndexOf = function (t, e, r) {
        return m(this, t, e, r, !1)
      }, l.prototype.write = function (t, e, r, n) {
        if (void 0 === e) n = "utf8", r = this.length, e = 0; else if (void 0 === r && "string" == typeof e) n = e, r = this.length, e = 0; else {
          if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
          e |= 0, isFinite(r) ? (r |= 0, void 0 === n && (n = "utf8")) : (n = r, r = void 0)
        }
        var i = this.length - e;
        if ((void 0 === r || r > i) && (r = i), t.length > 0 && (r < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds");
        n || (n = "utf8");
        for (var o = !1; ;) switch (n) {
          case"hex":
            return _(this, t, e, r);
          case"utf8":
          case"utf-8":
            return b(this, t, e, r);
          case"ascii":
            return x(this, t, e, r);
          case"latin1":
          case"binary":
            return w(this, t, e, r);
          case"base64":
            return S(this, t, e, r);
          case"ucs2":
          case"ucs-2":
          case"utf16le":
          case"utf-16le":
            return E(this, t, e, r);
          default:
            if (o) throw new TypeError("Unknown encoding: " + n);
            n = ("" + n).toLowerCase(), o = !0
        }
      }, l.prototype.toJSON = function () {
        return {type: "Buffer", data: Array.prototype.slice.call(this._arr || this, 0)}
      };

      function O(t, e, r) {
        var n = "";
        r = Math.min(t.length, r);
        for (var i = e; i < r; ++i) n += String.fromCharCode(127 & t[i]);
        return n
      }

      function P(t, e, r) {
        var n = "";
        r = Math.min(t.length, r);
        for (var i = e; i < r; ++i) n += String.fromCharCode(t[i]);
        return n
      }

      function R(t, e, r) {
        var n = t.length;
        (!e || e < 0) && (e = 0), (!r || r < 0 || r > n) && (r = n);
        for (var i = "", o = e; o < r; ++o) i += G(t[o]);
        return i
      }

      function I(t, e, r) {
        for (var n = t.slice(e, r), i = "", o = 0; o < n.length; o += 2) i += String.fromCharCode(n[o] + 256 * n[o + 1]);
        return i
      }

      function L(t, e, r) {
        if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint");
        if (t + e > r) throw new RangeError("Trying to access beyond buffer length")
      }

      function M(t, e, r, n, i, o) {
        if (!l.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance');
        if (e > i || e < o) throw new RangeError('"value" argument is out of bounds');
        if (r + n > t.length) throw new RangeError("Index out of range")
      }

      function F(t, e, r, n) {
        e < 0 && (e = 65535 + e + 1);
        for (var i = 0, o = Math.min(t.length - r, 2); i < o; ++i) t[r + i] = (e & 255 << 8 * (n ? i : 1 - i)) >>> 8 * (n ? i : 1 - i)
      }

      function A(t, e, r, n) {
        e < 0 && (e = 4294967295 + e + 1);
        for (var i = 0, o = Math.min(t.length - r, 4); i < o; ++i) t[r + i] = e >>> 8 * (n ? i : 3 - i) & 255
      }

      function k(t, e, r, n, i, o) {
        if (r + n > t.length) throw new RangeError("Index out of range");
        if (r < 0) throw new RangeError("Index out of range")
      }

      function j(t, e, r, n, o) {
        return o || k(t, 0, r, 4), i.write(t, e, r, n, 23, 4), r + 4
      }

      function N(t, e, r, n, o) {
        return o || k(t, 0, r, 8), i.write(t, e, r, n, 52, 8), r + 8
      }

      l.prototype.slice = function (t, e) {
        var r, n = this.length;
        if ((t = ~~t) < 0 ? (t += n) < 0 && (t = 0) : t > n && (t = n), (e = void 0 === e ? n : ~~e) < 0 ? (e += n) < 0 && (e = 0) : e > n && (e = n), e < t && (e = t), l.TYPED_ARRAY_SUPPORT) (r = this.subarray(t, e)).__proto__ = l.prototype; else {
          var i = e - t;
          r = new l(i, void 0);
          for (var o = 0; o < i; ++o) r[o] = this[o + t]
        }
        return r
      }, l.prototype.readUIntLE = function (t, e, r) {
        t |= 0, e |= 0, r || L(t, e, this.length);
        for (var n = this[t], i = 1, o = 0; ++o < e && (i *= 256);) n += this[t + o] * i;
        return n
      }, l.prototype.readUIntBE = function (t, e, r) {
        t |= 0, e |= 0, r || L(t, e, this.length);
        for (var n = this[t + --e], i = 1; e > 0 && (i *= 256);) n += this[t + --e] * i;
        return n
      }, l.prototype.readUInt8 = function (t, e) {
        return e || L(t, 1, this.length), this[t]
      }, l.prototype.readUInt16LE = function (t, e) {
        return e || L(t, 2, this.length), this[t] | this[t + 1] << 8
      }, l.prototype.readUInt16BE = function (t, e) {
        return e || L(t, 2, this.length), this[t] << 8 | this[t + 1]
      }, l.prototype.readUInt32LE = function (t, e) {
        return e || L(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3]
      }, l.prototype.readUInt32BE = function (t, e) {
        return e || L(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3])
      }, l.prototype.readIntLE = function (t, e, r) {
        t |= 0, e |= 0, r || L(t, e, this.length);
        for (var n = this[t], i = 1, o = 0; ++o < e && (i *= 256);) n += this[t + o] * i;
        return n >= (i *= 128) && (n -= Math.pow(2, 8 * e)), n
      }, l.prototype.readIntBE = function (t, e, r) {
        t |= 0, e |= 0, r || L(t, e, this.length);
        for (var n = e, i = 1, o = this[t + --n]; n > 0 && (i *= 256);) o += this[t + --n] * i;
        return o >= (i *= 128) && (o -= Math.pow(2, 8 * e)), o
      }, l.prototype.readInt8 = function (t, e) {
        return e || L(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t]
      }, l.prototype.readInt16LE = function (t, e) {
        e || L(t, 2, this.length);
        var r = this[t] | this[t + 1] << 8;
        return 32768 & r ? 4294901760 | r : r
      }, l.prototype.readInt16BE = function (t, e) {
        e || L(t, 2, this.length);
        var r = this[t + 1] | this[t] << 8;
        return 32768 & r ? 4294901760 | r : r
      }, l.prototype.readInt32LE = function (t, e) {
        return e || L(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24
      }, l.prototype.readInt32BE = function (t, e) {
        return e || L(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]
      }, l.prototype.readFloatLE = function (t, e) {
        return e || L(t, 4, this.length), i.read(this, t, !0, 23, 4)
      }, l.prototype.readFloatBE = function (t, e) {
        return e || L(t, 4, this.length), i.read(this, t, !1, 23, 4)
      }, l.prototype.readDoubleLE = function (t, e) {
        return e || L(t, 8, this.length), i.read(this, t, !0, 52, 8)
      }, l.prototype.readDoubleBE = function (t, e) {
        return e || L(t, 8, this.length), i.read(this, t, !1, 52, 8)
      }, l.prototype.writeUIntLE = function (t, e, r, n) {
        (t = +t, e |= 0, r |= 0, n) || M(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
        var i = 1, o = 0;
        for (this[e] = 255 & t; ++o < r && (i *= 256);) this[e + o] = t / i & 255;
        return e + r
      }, l.prototype.writeUIntBE = function (t, e, r, n) {
        (t = +t, e |= 0, r |= 0, n) || M(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
        var i = r - 1, o = 1;
        for (this[e + i] = 255 & t; --i >= 0 && (o *= 256);) this[e + i] = t / o & 255;
        return e + r
      }, l.prototype.writeUInt8 = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 1, 255, 0), l.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), this[e] = 255 & t, e + 1
      }, l.prototype.writeUInt16LE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 2, 65535, 0), l.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : F(this, t, e, !0), e + 2
      }, l.prototype.writeUInt16BE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 2, 65535, 0), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : F(this, t, e, !1), e + 2
      }, l.prototype.writeUInt32LE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 4, 4294967295, 0), l.TYPED_ARRAY_SUPPORT ? (this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t) : A(this, t, e, !0), e + 4
      }, l.prototype.writeUInt32BE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 4, 4294967295, 0), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : A(this, t, e, !1), e + 4
      }, l.prototype.writeIntLE = function (t, e, r, n) {
        if (t = +t, e |= 0, !n) {
          var i = Math.pow(2, 8 * r - 1);
          M(this, t, e, r, i - 1, -i)
        }
        var o = 0, a = 1, s = 0;
        for (this[e] = 255 & t; ++o < r && (a *= 256);) t < 0 && 0 === s && 0 !== this[e + o - 1] && (s = 1), this[e + o] = (t / a >> 0) - s & 255;
        return e + r
      }, l.prototype.writeIntBE = function (t, e, r, n) {
        if (t = +t, e |= 0, !n) {
          var i = Math.pow(2, 8 * r - 1);
          M(this, t, e, r, i - 1, -i)
        }
        var o = r - 1, a = 1, s = 0;
        for (this[e + o] = 255 & t; --o >= 0 && (a *= 256);) t < 0 && 0 === s && 0 !== this[e + o + 1] && (s = 1), this[e + o] = (t / a >> 0) - s & 255;
        return e + r
      }, l.prototype.writeInt8 = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 1, 127, -128), l.TYPED_ARRAY_SUPPORT || (t = Math.floor(t)), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1
      }, l.prototype.writeInt16LE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 2, 32767, -32768), l.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8) : F(this, t, e, !0), e + 2
      }, l.prototype.writeInt16BE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 2, 32767, -32768), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 8, this[e + 1] = 255 & t) : F(this, t, e, !1), e + 2
      }, l.prototype.writeInt32LE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 4, 2147483647, -2147483648), l.TYPED_ARRAY_SUPPORT ? (this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24) : A(this, t, e, !0), e + 4
      }, l.prototype.writeInt32BE = function (t, e, r) {
        return t = +t, e |= 0, r || M(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), l.TYPED_ARRAY_SUPPORT ? (this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t) : A(this, t, e, !1), e + 4
      }, l.prototype.writeFloatLE = function (t, e, r) {
        return j(this, t, e, !0, r)
      }, l.prototype.writeFloatBE = function (t, e, r) {
        return j(this, t, e, !1, r)
      }, l.prototype.writeDoubleLE = function (t, e, r) {
        return N(this, t, e, !0, r)
      }, l.prototype.writeDoubleBE = function (t, e, r) {
        return N(this, t, e, !1, r)
      }, l.prototype.copy = function (t, e, r, n) {
        if (r || (r = 0), n || 0 === n || (n = this.length), e >= t.length && (e = t.length), e || (e = 0), n > 0 && n < r && (n = r), n === r) return 0;
        if (0 === t.length || 0 === this.length) return 0;
        if (e < 0) throw new RangeError("targetStart out of bounds");
        if (r < 0 || r >= this.length) throw new RangeError("sourceStart out of bounds");
        if (n < 0) throw new RangeError("sourceEnd out of bounds");
        n > this.length && (n = this.length), t.length - e < n - r && (n = t.length - e + r);
        var i, o = n - r;
        if (this === t && r < e && e < n) for (i = o - 1; i >= 0; --i) t[i + e] = this[i + r]; else if (o < 1e3 || !l.TYPED_ARRAY_SUPPORT) for (i = 0; i < o; ++i) t[i + e] = this[i + r]; else Uint8Array.prototype.set.call(t, this.subarray(r, r + o), e);
        return o
      }, l.prototype.fill = function (t, e, r, n) {
        if ("string" == typeof t) {
          if ("string" == typeof e ? (n = e, e = 0, r = this.length) : "string" == typeof r && (n = r, r = this.length), 1 === t.length) {
            var i = t.charCodeAt(0);
            i < 256 && (t = i)
          }
          if (void 0 !== n && "string" != typeof n) throw new TypeError("encoding must be a string");
          if ("string" == typeof n && !l.isEncoding(n)) throw new TypeError("Unknown encoding: " + n)
        } else "number" == typeof t && (t &= 255);
        if (e < 0 || this.length < e || this.length < r) throw new RangeError("Out of range index");
        if (r <= e) return this;
        var o;
        if (e >>>= 0, r = void 0 === r ? this.length : r >>> 0, t || (t = 0), "number" == typeof t) for (o = e; o < r; ++o) this[o] = t; else {
          var a = l.isBuffer(t) ? t : z(new l(t, n).toString()), s = a.length;
          for (o = 0; o < r - e; ++o) this[o + e] = a[o % s]
        }
        return this
      };
      var D = /[^+\/0-9A-Za-z-_]/g;

      function G(t) {
        return t < 16 ? "0" + t.toString(16) : t.toString(16)
      }

      function z(t, e) {
        var r;
        e = e || 1 / 0;
        for (var n = t.length, i = null, o = [], a = 0; a < n; ++a) {
          if ((r = t.charCodeAt(a)) > 55295 && r < 57344) {
            if (!i) {
              if (r > 56319) {
                (e -= 3) > -1 && o.push(239, 191, 189);
                continue
              }
              if (a + 1 === n) {
                (e -= 3) > -1 && o.push(239, 191, 189);
                continue
              }
              i = r;
              continue
            }
            if (r < 56320) {
              (e -= 3) > -1 && o.push(239, 191, 189), i = r;
              continue
            }
            r = 65536 + (i - 55296 << 10 | r - 56320)
          } else i && (e -= 3) > -1 && o.push(239, 191, 189);
          if (i = null, r < 128) {
            if ((e -= 1) < 0) break;
            o.push(r)
          } else if (r < 2048) {
            if ((e -= 2) < 0) break;
            o.push(r >> 6 | 192, 63 & r | 128)
          } else if (r < 65536) {
            if ((e -= 3) < 0) break;
            o.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128)
          } else {
            if (!(r < 1114112)) throw new Error("Invalid code point");
            if ((e -= 4) < 0) break;
            o.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128)
          }
        }
        return o
      }

      function U(t) {
        return n.toByteArray(function (t) {
          if ((t = function (t) {
            return t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "")
          }(t).replace(D, "")).length < 2) return "";
          for (; t.length % 4 != 0;) t += "=";
          return t
        }(t))
      }

      function B(t, e, r, n) {
        for (var i = 0; i < n && !(i + r >= e.length || i >= t.length); ++i) e[i + r] = t[i];
        return i
      }
    }).call(this, r(4))
  }, function (t, e, r) {
    "use strict";
    e.byteLength = function (t) {
      var e = u(t), r = e[0], n = e[1];
      return 3 * (r + n) / 4 - n
    }, e.toByteArray = function (t) {
      var e, r, n = u(t), a = n[0], s = n[1], l = new o(function (t, e, r) {
        return 3 * (e + r) / 4 - r
      }(0, a, s)), c = 0, h = s > 0 ? a - 4 : a;
      for (r = 0; r < h; r += 4) e = i[t.charCodeAt(r)] << 18 | i[t.charCodeAt(r + 1)] << 12 | i[t.charCodeAt(r + 2)] << 6 | i[t.charCodeAt(r + 3)], l[c++] = e >> 16 & 255, l[c++] = e >> 8 & 255, l[c++] = 255 & e;
      2 === s && (e = i[t.charCodeAt(r)] << 2 | i[t.charCodeAt(r + 1)] >> 4, l[c++] = 255 & e);
      1 === s && (e = i[t.charCodeAt(r)] << 10 | i[t.charCodeAt(r + 1)] << 4 | i[t.charCodeAt(r + 2)] >> 2, l[c++] = e >> 8 & 255, l[c++] = 255 & e);
      return l
    }, e.fromByteArray = function (t) {
      for (var e, r = t.length, i = r % 3, o = [], a = 0, s = r - i; a < s; a += 16383) o.push(c(t, a, a + 16383 > s ? s : a + 16383));
      1 === i ? (e = t[r - 1], o.push(n[e >> 2] + n[e << 4 & 63] + "==")) : 2 === i && (e = (t[r - 2] << 8) + t[r - 1], o.push(n[e >> 10] + n[e >> 4 & 63] + n[e << 2 & 63] + "="));
      return o.join("")
    };
    for (var n = [], i = [], o = "undefined" != typeof Uint8Array ? Uint8Array : Array, a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", s = 0, l = a.length; s < l; ++s) n[s] = a[s], i[a.charCodeAt(s)] = s;

    function u(t) {
      var e = t.length;
      if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4");
      var r = t.indexOf("=");
      return -1 === r && (r = e), [r, r === e ? 0 : 4 - r % 4]
    }

    function c(t, e, r) {
      for (var i, o, a = [], s = e; s < r; s += 3) i = (t[s] << 16 & 16711680) + (t[s + 1] << 8 & 65280) + (255 & t[s + 2]), a.push(n[(o = i) >> 18 & 63] + n[o >> 12 & 63] + n[o >> 6 & 63] + n[63 & o]);
      return a.join("")
    }

    i["-".charCodeAt(0)] = 62, i["_".charCodeAt(0)] = 63
  }, function (t, e) {
    var r = {}.toString;
    t.exports = Array.isArray || function (t) {
      return "[object Array]" == r.call(t)
    }
  }, function (t, e, r) {
    "use strict";

    function n() {
      return function () {
        throw new Error("Unimplemented abstract method.")
      }()
    }

    r.r(e);
    var i = 0;

    function o(t) {
      return t.ol_uid || (t.ol_uid = String(++i))
    }

    var a, s = (a = function (t, e) {
      return (a = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
        t.__proto__ = e
      } || function (t, e) {
        for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
      })(t, e)
    }, function (t, e) {
      function r() {
        this.constructor = t
      }

      a(t, e), t.prototype = null === e ? Object.create(e) : (r.prototype = e.prototype, new r)
    }), l = function (t) {
      function e(e) {
        var r = this,
          n = "Assertion failed. See https://openlayers.org/en/" + ("v" + "6.5.0".split("-")[0]) + "/doc/errors/#" + e + " for details.";
        return (r = t.call(this, n) || this).code = e, r.name = "AssertionError", r.message = n, r
      }

      return s(e, t), e
    }(Error);

    function u(t) {
      t.stopPropagation()
    }

    var c = function () {
      function t(t) {
        this.propagationStopped, this.type = t, this.target = null
      }

      return t.prototype.preventDefault = function () {
        this.propagationStopped = !0
      }, t.prototype.stopPropagation = function () {
        this.propagationStopped = !0
      }, t
    }(), h = "propertychange", p = function () {
      function t() {
        this.disposed = !1
      }

      return t.prototype.dispose = function () {
        this.disposed || (this.disposed = !0, this.disposeInternal())
      }, t.prototype.disposeInternal = function () {
      }, t
    }();

    function f(t, e, r) {
      for (var n, i, o = r || d, a = 0, s = t.length, l = !1; a < s;) (i = +o(t[n = a + (s - a >> 1)], e)) < 0 ? a = n + 1 : (s = n, l = !i);
      return l ? a : ~a
    }

    function d(t, e) {
      return t > e ? 1 : t < e ? -1 : 0
    }

    function g(t, e) {
      return t.indexOf(e) >= 0
    }

    function y(t, e, r) {
      var n = t.length;
      if (t[0] <= e) return 0;
      if (e <= t[n - 1]) return n - 1;
      var i = void 0;
      if (r > 0) {
        for (i = 1; i < n; ++i) if (t[i] < e) return i - 1
      } else if (r < 0) {
        for (i = 1; i < n; ++i) if (t[i] <= e) return i
      } else for (i = 1; i < n; ++i) {
        if (t[i] == e) return i;
        if (t[i] < e) return t[i - 1] - e < e - t[i] ? i - 1 : i
      }
      return n - 1
    }

    function m(t, e, r) {
      for (; e < r;) {
        var n = t[e];
        t[e] = t[r], t[r] = n, ++e, --r
      }
    }

    function v(t, e) {
      for (var r = Array.isArray(e) ? e : [e], n = r.length, i = 0; i < n; i++) t[t.length] = r[i]
    }

    function _(t, e) {
      for (var r, n = t.length >>> 0, i = 0; i < n; i++) if (e(r = t[i], i, t)) return r;
      return null
    }

    function b(t, e) {
      var r = t.length;
      if (r !== e.length) return !1;
      for (var n = 0; n < r; n++) if (t[n] !== e[n]) return !1;
      return !0
    }

    function x(t, e) {
      var r;
      return !t.every((function (n, i) {
        return r = i, !e(n, i, t)
      })) ? r : -1
    }

    function w(t, e, r) {
      var n = e || d;
      return t.every((function (e, i) {
        if (0 === i) return !0;
        var o = n(t[i - 1], e);
        return !(o > 0 || r && 0 === o)
      }))
    }

    function S() {
      return !0
    }

    function E() {
      return !1
    }

    function T() {
    }

    function C(t) {
      var e, r, n, i = !1;
      return function () {
        var o = Array.prototype.slice.call(arguments);
        return i && this === n && b(o, r) || (i = !0, n = this, r = o, e = t.apply(this, arguments)), e
      }
    }

    var O = "function" == typeof Object.assign ? Object.assign : function (t, e) {
      if (null == t) throw new TypeError("Cannot convert undefined or null to object");
      for (var r = Object(t), n = 1, i = arguments.length; n < i; ++n) {
        var o = arguments[n];
        if (null != o) for (var a in o) o.hasOwnProperty(a) && (r[a] = o[a])
      }
      return r
    };

    function P(t) {
      for (var e in t) delete t[e]
    }

    var R = "function" == typeof Object.values ? Object.values : function (t) {
      var e = [];
      for (var r in t) e.push(t[r]);
      return e
    };

    function I(t) {
      var e;
      for (e in t) return !1;
      return !e
    }

    var L = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), M = function (t) {
        function e(e) {
          var r = t.call(this) || this;
          return r.eventTarget_ = e, r.pendingRemovals_ = null, r.dispatching_ = null, r.listeners_ = null, r
        }

        return L(e, t), e.prototype.addEventListener = function (t, e) {
          if (t && e) {
            var r = this.listeners_ || (this.listeners_ = {}), n = r[t] || (r[t] = []);
            -1 === n.indexOf(e) && n.push(e)
          }
        }, e.prototype.dispatchEvent = function (t) {
          var e = "string" == typeof t ? new c(t) : t, r = e.type;
          e.target || (e.target = this.eventTarget_ || this);
          var n, i = this.listeners_ && this.listeners_[r];
          if (i) {
            var o = this.dispatching_ || (this.dispatching_ = {}),
              a = this.pendingRemovals_ || (this.pendingRemovals_ = {});
            r in o || (o[r] = 0, a[r] = 0), ++o[r];
            for (var s = 0, l = i.length; s < l; ++s) if (!1 === (n = "handleEvent" in i[s] ? i[s].handleEvent(e) : i[s].call(this, e)) || e.propagationStopped) {
              n = !1;
              break
            }
            if (--o[r], 0 === o[r]) {
              var u = a[r];
              for (delete a[r]; u--;) this.removeEventListener(r, T);
              delete o[r]
            }
            return n
          }
        }, e.prototype.disposeInternal = function () {
          this.listeners_ && P(this.listeners_)
        }, e.prototype.getListeners = function (t) {
          return this.listeners_ && this.listeners_[t] || void 0
        }, e.prototype.hasListener = function (t) {
          return !!this.listeners_ && (t ? t in this.listeners_ : Object.keys(this.listeners_).length > 0)
        }, e.prototype.removeEventListener = function (t, e) {
          var r = this.listeners_ && this.listeners_[t];
          if (r) {
            var n = r.indexOf(e);
            -1 !== n && (this.pendingRemovals_ && t in this.pendingRemovals_ ? (r[n] = T, ++this.pendingRemovals_[t]) : (r.splice(n, 1), 0 === r.length && delete this.listeners_[t]))
          }
        }, e
      }(p), F = "change", A = "error", k = "clear", j = "contextmenu", N = "click", D = "dblclick", G = "dragenter",
      z = "dragover", U = "drop", B = "keydown", V = "keypress", Y = "load", W = "resize", q = "touchmove", X = "wheel";

    function Z(t, e, r, n, i) {
      if (n && n !== t && (r = r.bind(n)), i) {
        var o = r;
        r = function () {
          t.removeEventListener(e, r), o.apply(this, arguments)
        }
      }
      var a = {target: t, type: e, listener: r};
      return t.addEventListener(e, r), a
    }

    function K(t, e, r, n) {
      return Z(t, e, r, n, !0)
    }

    function H(t) {
      t && t.target && (t.target.removeEventListener(t.type, t.listener), P(t))
    }

    var $ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function J(t) {
      if (Array.isArray(t)) for (var e = 0, r = t.length; e < r; ++e) H(t[e]); else H(t)
    }

    var Q = function (t) {
      function e() {
        var e = t.call(this) || this;
        return e.revision_ = 0, e
      }

      return $(e, t), e.prototype.changed = function () {
        ++this.revision_, this.dispatchEvent(F)
      }, e.prototype.getRevision = function () {
        return this.revision_
      }, e.prototype.on = function (t, e) {
        if (Array.isArray(t)) {
          for (var r = t.length, n = new Array(r), i = 0; i < r; ++i) n[i] = Z(this, t[i], e);
          return n
        }
        return Z(this, t, e)
      }, e.prototype.once = function (t, e) {
        var r;
        if (Array.isArray(t)) {
          var n = t.length;
          r = new Array(n);
          for (var i = 0; i < n; ++i) r[i] = K(this, t[i], e)
        } else r = K(this, t, e);
        return e.ol_key = r, r
      }, e.prototype.un = function (t, e) {
        var r = e.ol_key;
        if (r) J(r); else if (Array.isArray(t)) for (var n = 0, i = t.length; n < i; ++n) this.removeEventListener(t[n], e); else this.removeEventListener(t, e)
      }, e
    }(M), tt = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), et = function (t) {
      function e(e, r, n) {
        var i = t.call(this, e) || this;
        return i.key = r, i.oldValue = n, i
      }

      return tt(e, t), e
    }(c), rt = function (t) {
      function e(e) {
        var r = t.call(this) || this;
        return o(r), r.values_ = null, void 0 !== e && r.setProperties(e), r
      }

      return tt(e, t), e.prototype.get = function (t) {
        var e;
        return this.values_ && this.values_.hasOwnProperty(t) && (e = this.values_[t]), e
      }, e.prototype.getKeys = function () {
        return this.values_ && Object.keys(this.values_) || []
      }, e.prototype.getProperties = function () {
        return this.values_ && O({}, this.values_) || {}
      }, e.prototype.hasProperties = function () {
        return !!this.values_
      }, e.prototype.notify = function (t, e) {
        var r;
        r = it(t), this.dispatchEvent(new et(r, t, e)), r = h, this.dispatchEvent(new et(r, t, e))
      }, e.prototype.set = function (t, e, r) {
        var n = this.values_ || (this.values_ = {});
        if (r) n[t] = e; else {
          var i = n[t];
          n[t] = e, i !== e && this.notify(t, i)
        }
      }, e.prototype.setProperties = function (t, e) {
        for (var r in t) this.set(r, t[r], e)
      }, e.prototype.applyProperties = function (t) {
        t.values_ && O(this.values_ || (this.values_ = {}), t.values_)
      }, e.prototype.unset = function (t, e) {
        if (this.values_ && t in this.values_) {
          var r = this.values_[t];
          delete this.values_[t], I(this.values_) && (this.values_ = null), e || this.notify(t, r)
        }
      }, e
    }(Q), nt = {};

    function it(t) {
      return nt.hasOwnProperty(t) ? nt[t] : nt[t] = "change:" + t
    }

    var ot = rt, at = "add", st = "remove", lt = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), ut = "length", ct = function (t) {
      function e(e, r, n) {
        var i = t.call(this, e) || this;
        return i.element = r, i.index = n, i
      }

      return lt(e, t), e
    }(c), ht = function (t) {
      function e(e, r) {
        var n = t.call(this) || this, i = r || {};
        if (n.unique_ = !!i.unique, n.array_ = e || [], n.unique_) for (var o = 0, a = n.array_.length; o < a; ++o) n.assertUnique_(n.array_[o], o);
        return n.updateLength_(), n
      }

      return lt(e, t), e.prototype.clear = function () {
        for (; this.getLength() > 0;) this.pop()
      }, e.prototype.extend = function (t) {
        for (var e = 0, r = t.length; e < r; ++e) this.push(t[e]);
        return this
      }, e.prototype.forEach = function (t) {
        for (var e = this.array_, r = 0, n = e.length; r < n; ++r) t(e[r], r, e)
      }, e.prototype.getArray = function () {
        return this.array_
      }, e.prototype.item = function (t) {
        return this.array_[t]
      }, e.prototype.getLength = function () {
        return this.get(ut)
      }, e.prototype.insertAt = function (t, e) {
        this.unique_ && this.assertUnique_(e), this.array_.splice(t, 0, e), this.updateLength_(), this.dispatchEvent(new ct(at, e, t))
      }, e.prototype.pop = function () {
        return this.removeAt(this.getLength() - 1)
      }, e.prototype.push = function (t) {
        this.unique_ && this.assertUnique_(t);
        var e = this.getLength();
        return this.insertAt(e, t), this.getLength()
      }, e.prototype.remove = function (t) {
        for (var e = this.array_, r = 0, n = e.length; r < n; ++r) if (e[r] === t) return this.removeAt(r)
      }, e.prototype.removeAt = function (t) {
        var e = this.array_[t];
        return this.array_.splice(t, 1), this.updateLength_(), this.dispatchEvent(new ct(st, e, t)), e
      }, e.prototype.setAt = function (t, e) {
        var r = this.getLength();
        if (t < r) {
          this.unique_ && this.assertUnique_(e, t);
          var n = this.array_[t];
          this.array_[t] = e, this.dispatchEvent(new ct(st, n, t)), this.dispatchEvent(new ct(at, e, t))
        } else {
          for (var i = r; i < t; ++i) this.insertAt(i, void 0);
          this.insertAt(t, e)
        }
      }, e.prototype.updateLength_ = function () {
        this.set(ut, this.array_.length)
      }, e.prototype.assertUnique_ = function (t, e) {
        for (var r = 0, n = this.array_.length; r < n; ++r) if (this.array_[r] === t && r !== e) throw new l(58)
      }, e
    }(ot);

    function pt(t, e) {
      if (!t) throw new l(e)
    }

    var ft = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function dt(t) {
      return "function" == typeof t ? t : (Array.isArray(t) ? e = t : (pt("function" == typeof t.getZIndex, 41), e = [t]), function () {
        return e
      });
      var e
    }

    var gt = function (t) {
        function e(e) {
          var r = t.call(this) || this;
          if (r.id_ = void 0, r.geometryName_ = "geometry", r.style_ = null, r.styleFunction_ = void 0, r.geometryChangeKey_ = null, r.addEventListener(it(r.geometryName_), r.handleGeometryChanged_), e) if ("function" == typeof e.getSimplifiedGeometry) {
            var n = e;
            r.setGeometry(n)
          } else {
            var i = e;
            r.setProperties(i)
          }
          return r
        }

        return ft(e, t), e.prototype.clone = function () {
          var t = new e(this.hasProperties() ? this.getProperties() : null);
          t.setGeometryName(this.getGeometryName());
          var r = this.getGeometry();
          r && t.setGeometry(r.clone());
          var n = this.getStyle();
          return n && t.setStyle(n), t
        }, e.prototype.getGeometry = function () {
          return this.get(this.geometryName_)
        }, e.prototype.getId = function () {
          return this.id_
        }, e.prototype.getGeometryName = function () {
          return this.geometryName_
        }, e.prototype.getStyle = function () {
          return this.style_
        }, e.prototype.getStyleFunction = function () {
          return this.styleFunction_
        }, e.prototype.handleGeometryChange_ = function () {
          this.changed()
        }, e.prototype.handleGeometryChanged_ = function () {
          this.geometryChangeKey_ && (H(this.geometryChangeKey_), this.geometryChangeKey_ = null);
          var t = this.getGeometry();
          t && (this.geometryChangeKey_ = Z(t, F, this.handleGeometryChange_, this)), this.changed()
        }, e.prototype.setGeometry = function (t) {
          this.set(this.geometryName_, t)
        }, e.prototype.setStyle = function (t) {
          this.style_ = t, this.styleFunction_ = t ? dt(t) : void 0, this.changed()
        }, e.prototype.setId = function (t) {
          this.id_ = t, this.changed()
        }, e.prototype.setGeometryName = function (t) {
          this.removeEventListener(it(this.geometryName_), this.handleGeometryChanged_), this.geometryName_ = t, this.addEventListener(it(this.geometryName_), this.handleGeometryChanged_), this.handleGeometryChanged_()
        }, e
      }(ot), yt = "XY", mt = "XYZ", vt = "XYM", _t = "XYZM", bt = {
        POINT: "Point",
        LINE_STRING: "LineString",
        LINEAR_RING: "LinearRing",
        POLYGON: "Polygon",
        MULTI_POINT: "MultiPoint",
        MULTI_LINE_STRING: "MultiLineString",
        MULTI_POLYGON: "MultiPolygon",
        GEOMETRY_COLLECTION: "GeometryCollection",
        CIRCLE: "Circle"
      },
      xt = {DEGREES: "degrees", FEET: "ft", METERS: "m", PIXELS: "pixels", TILE_PIXELS: "tile-pixels", USFEET: "us-ft"},
      wt = {};
    wt[xt.DEGREES] = 2 * Math.PI * 6370997 / 360, wt[xt.FEET] = .3048, wt[xt.METERS] = 1, wt[xt.USFEET] = 1200 / 3937;
    var St = xt, Et = new Array(6);

    function Tt() {
      return [1, 0, 0, 1, 0, 0]
    }

    function Ct(t) {
      return Pt(t, 1, 0, 0, 1, 0, 0)
    }

    function Ot(t, e) {
      var r = t[0], n = t[1], i = t[2], o = t[3], a = t[4], s = t[5], l = e[0], u = e[1], c = e[2], h = e[3], p = e[4],
        f = e[5];
      return t[0] = r * l + i * u, t[1] = n * l + o * u, t[2] = r * c + i * h, t[3] = n * c + o * h, t[4] = r * p + i * f + a, t[5] = n * p + o * f + s, t
    }

    function Pt(t, e, r, n, i, o, a) {
      return t[0] = e, t[1] = r, t[2] = n, t[3] = i, t[4] = o, t[5] = a, t
    }

    function Rt(t, e) {
      return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t
    }

    function It(t, e) {
      var r = e[0], n = e[1];
      return e[0] = t[0] * r + t[2] * n + t[4], e[1] = t[1] * r + t[3] * n + t[5], e
    }

    function Lt(t, e) {
      var r = Math.cos(e), n = Math.sin(e);
      return Ot(t, Pt(Et, r, n, -n, r, 0, 0))
    }

    function Mt(t, e, r) {
      return Ot(t, Pt(Et, e, 0, 0, r, 0, 0))
    }

    function Ft(t, e, r) {
      return Pt(t, e, 0, 0, r, 0, 0)
    }

    function At(t, e, r) {
      return Ot(t, Pt(Et, 1, 0, 0, 1, e, r))
    }

    function kt(t, e, r, n, i, o, a, s) {
      var l = Math.sin(o), u = Math.cos(o);
      return t[0] = n * u, t[1] = i * l, t[2] = -n * l, t[3] = i * u, t[4] = a * n * u - s * n * l + e, t[5] = a * i * l + s * i * u + r, t
    }

    function jt(t, e) {
      var r = Nt(e);
      pt(0 !== r, 32);
      var n = e[0], i = e[1], o = e[2], a = e[3], s = e[4], l = e[5];
      return t[0] = a / r, t[1] = -i / r, t[2] = -o / r, t[3] = n / r, t[4] = (o * l - a * s) / r, t[5] = -(n * l - i * s) / r, t
    }

    function Nt(t) {
      return t[0] * t[3] - t[1] * t[2]
    }

    function Dt(t) {
      return "matrix(" + t.join(", ") + ")"
    }

    var Gt = "bottom-left", zt = "bottom-right", Ut = "top-left", Bt = "top-right", Vt = 0, Yt = 1, Wt = 2, qt = 4,
      Xt = 8, Zt = 16;

    function Kt(t) {
      for (var e = ne(), r = 0, n = t.length; r < n; ++r) pe(e, t[r]);
      return e
    }

    function Ht(t, e, r) {
      return r ? (r[0] = t[0] - e, r[1] = t[1] - e, r[2] = t[2] + e, r[3] = t[3] + e, r) : [t[0] - e, t[1] - e, t[2] + e, t[3] + e]
    }

    function $t(t, e) {
      return e ? (e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e) : t.slice()
    }

    function Jt(t, e, r) {
      var n, i;
      return (n = e < t[0] ? t[0] - e : t[2] < e ? e - t[2] : 0) * n + (i = r < t[1] ? t[1] - r : t[3] < r ? r - t[3] : 0) * i
    }

    function Qt(t, e) {
      return ee(t, e[0], e[1])
    }

    function te(t, e) {
      return t[0] <= e[0] && e[2] <= t[2] && t[1] <= e[1] && e[3] <= t[3]
    }

    function ee(t, e, r) {
      return t[0] <= e && e <= t[2] && t[1] <= r && r <= t[3]
    }

    function re(t, e) {
      var r = t[0], n = t[1], i = t[2], o = t[3], a = e[0], s = e[1], l = Vt;
      return a < r ? l |= Zt : a > i && (l |= qt), s < n ? l |= Xt : s > o && (l |= Wt), l === Vt && (l = Yt), l
    }

    function ne() {
      return [1 / 0, 1 / 0, -1 / 0, -1 / 0]
    }

    function ie(t, e, r, n, i) {
      return i ? (i[0] = t, i[1] = e, i[2] = r, i[3] = n, i) : [t, e, r, n]
    }

    function oe(t) {
      return ie(1 / 0, 1 / 0, -1 / 0, -1 / 0, t)
    }

    function ae(t, e) {
      var r = t[0], n = t[1];
      return ie(r, n, r, n, e)
    }

    function se(t, e) {
      return fe(oe(e), t)
    }

    function le(t, e, r, n, i) {
      return de(oe(i), t, e, r, n)
    }

    function ue(t, e) {
      return t[0] == e[0] && t[2] == e[2] && t[1] == e[1] && t[3] == e[3]
    }

    function ce(t, e, r) {
      return Math.abs(t[0] - e[0]) < r && Math.abs(t[2] - e[2]) < r && Math.abs(t[1] - e[1]) < r && Math.abs(t[3] - e[3]) < r
    }

    function he(t, e) {
      return e[0] < t[0] && (t[0] = e[0]), e[2] > t[2] && (t[2] = e[2]), e[1] < t[1] && (t[1] = e[1]), e[3] > t[3] && (t[3] = e[3]), t
    }

    function pe(t, e) {
      e[0] < t[0] && (t[0] = e[0]), e[0] > t[2] && (t[2] = e[0]), e[1] < t[1] && (t[1] = e[1]), e[1] > t[3] && (t[3] = e[1])
    }

    function fe(t, e) {
      for (var r = 0, n = e.length; r < n; ++r) pe(t, e[r]);
      return t
    }

    function de(t, e, r, n, i) {
      for (; r < n; r += i) ye(t, e[r], e[r + 1]);
      return t
    }

    function ge(t, e) {
      for (var r = 0, n = e.length; r < n; ++r) fe(t, e[r]);
      return t
    }

    function ye(t, e, r) {
      t[0] = Math.min(t[0], e), t[1] = Math.min(t[1], r), t[2] = Math.max(t[2], e), t[3] = Math.max(t[3], r)
    }

    function me(t, e) {
      var r;
      return (r = e(_e(t))) || (r = e(be(t))) || (r = e(Oe(t))) ? r : (r = e(Ce(t))) || !1
    }

    function ve(t) {
      var e = 0;
      return Ie(t) || (e = Pe(t) * Ee(t)), e
    }

    function _e(t) {
      return [t[0], t[1]]
    }

    function be(t) {
      return [t[2], t[1]]
    }

    function xe(t) {
      return [(t[0] + t[2]) / 2, (t[1] + t[3]) / 2]
    }

    function we(t, e) {
      var r;
      return e === Gt ? r = _e(t) : e === zt ? r = be(t) : e === Ut ? r = Ce(t) : e === Bt ? r = Oe(t) : pt(!1, 13), r
    }

    function Se(t, e, r, n, i) {
      var o = e * n[0] / 2, a = e * n[1] / 2, s = Math.cos(r), l = Math.sin(r), u = o * s, c = o * l, h = a * s,
        p = a * l, f = t[0], d = t[1], g = f - u + p, y = f - u - p, m = f + u - p, v = f + u + p, _ = d - c - h,
        b = d - c + h, x = d + c + h, w = d + c - h;
      return ie(Math.min(g, y, m, v), Math.min(_, b, x, w), Math.max(g, y, m, v), Math.max(_, b, x, w), i)
    }

    function Ee(t) {
      return t[3] - t[1]
    }

    function Te(t, e, r) {
      var n = r || [1 / 0, 1 / 0, -1 / 0, -1 / 0];
      return Re(t, e) ? (t[0] > e[0] ? n[0] = t[0] : n[0] = e[0], t[1] > e[1] ? n[1] = t[1] : n[1] = e[1], t[2] < e[2] ? n[2] = t[2] : n[2] = e[2], t[3] < e[3] ? n[3] = t[3] : n[3] = e[3]) : oe(n), n
    }

    function Ce(t) {
      return [t[0], t[3]]
    }

    function Oe(t) {
      return [t[2], t[3]]
    }

    function Pe(t) {
      return t[2] - t[0]
    }

    function Re(t, e) {
      return t[0] <= e[2] && t[2] >= e[0] && t[1] <= e[3] && t[3] >= e[1]
    }

    function Ie(t) {
      return t[2] < t[0] || t[3] < t[1]
    }

    function Le(t, e) {
      return e ? (e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e) : t
    }

    function Me(t, e) {
      var r = (t[2] - t[0]) / 2 * (e - 1), n = (t[3] - t[1]) / 2 * (e - 1);
      t[0] -= r, t[2] += r, t[1] -= n, t[3] += n
    }

    function Fe(t, e, r) {
      var n = !1, i = re(t, e), o = re(t, r);
      if (i === Yt || o === Yt) n = !0; else {
        var a = t[0], s = t[1], l = t[2], u = t[3], c = e[0], h = e[1], p = r[0], f = r[1], d = (f - h) / (p - c),
          g = void 0, y = void 0;
        o & Wt && !(i & Wt) && (n = (g = p - (f - u) / d) >= a && g <= l), n || !(o & qt) || i & qt || (n = (y = f - (p - l) * d) >= s && y <= u), n || !(o & Xt) || i & Xt || (n = (g = p - (f - s) / d) >= a && g <= l), n || !(o & Zt) || i & Zt || (n = (y = f - (p - a) * d) >= s && y <= u)
      }
      return n
    }

    function Ae(t, e, r, n) {
      var i = [];
      if (n > 1) for (var o = t[2] - t[0], a = t[3] - t[1], s = 0; s < n; ++s) i.push(t[0] + o * s / n, t[1], t[2], t[1] + a * s / n, t[2] - o * s / n, t[3], t[0], t[3] - a * s / n); else i = [t[0], t[1], t[2], t[1], t[2], t[3], t[0], t[3]];
      e(i, i, 2);
      for (var l = [], u = [], c = (s = 0, i.length); s < c; s += 2) l.push(i[s]), u.push(i[s + 1]);
      return function (t, e, r) {
        return ie(Math.min.apply(null, t), Math.min.apply(null, e), Math.max.apply(null, t), Math.max.apply(null, e), r)
      }(l, u, r)
    }

    function ke(t, e) {
      var r = e.getExtent(), n = xe(t);
      if (e.canWrapX() && (n[0] < r[0] || n[0] >= r[2])) {
        var i = Pe(r), o = Math.floor((n[0] - r[0]) / i) * i;
        t[0] -= o, t[2] -= o
      }
      return t
    }

    var je = function () {
      function t(t) {
        this.code_ = t.code, this.units_ = t.units, this.extent_ = void 0 !== t.extent ? t.extent : null, this.worldExtent_ = void 0 !== t.worldExtent ? t.worldExtent : null, this.axisOrientation_ = void 0 !== t.axisOrientation ? t.axisOrientation : "enu", this.global_ = void 0 !== t.global && t.global, this.canWrapX_ = !(!this.global_ || !this.extent_), this.getPointResolutionFunc_ = t.getPointResolution, this.defaultTileGrid_ = null, this.metersPerUnit_ = t.metersPerUnit
      }

      return t.prototype.canWrapX = function () {
        return this.canWrapX_
      }, t.prototype.getCode = function () {
        return this.code_
      }, t.prototype.getExtent = function () {
        return this.extent_
      }, t.prototype.getUnits = function () {
        return this.units_
      }, t.prototype.getMetersPerUnit = function () {
        return this.metersPerUnit_ || wt[this.units_]
      }, t.prototype.getWorldExtent = function () {
        return this.worldExtent_
      }, t.prototype.getAxisOrientation = function () {
        return this.axisOrientation_
      }, t.prototype.isGlobal = function () {
        return this.global_
      }, t.prototype.setGlobal = function (t) {
        this.global_ = t, this.canWrapX_ = !(!t || !this.extent_)
      }, t.prototype.getDefaultTileGrid = function () {
        return this.defaultTileGrid_
      }, t.prototype.setDefaultTileGrid = function (t) {
        this.defaultTileGrid_ = t
      }, t.prototype.setExtent = function (t) {
        this.extent_ = t, this.canWrapX_ = !(!this.global_ || !t)
      }, t.prototype.setWorldExtent = function (t) {
        this.worldExtent_ = t
      }, t.prototype.setGetPointResolution = function (t) {
        this.getPointResolutionFunc_ = t
      }, t.prototype.getPointResolutionFunc = function () {
        return this.getPointResolutionFunc_
      }, t
    }();

    function Ne(t, e, r) {
      return Math.min(Math.max(t, e), r)
    }

    var De = "cosh" in Math ? Math.cosh : function (t) {
      var e = Math.exp(t);
      return (e + 1 / e) / 2
    }, Ge = "log2" in Math ? Math.log2 : function (t) {
      return Math.log(t) * Math.LOG2E
    };

    function ze(t, e, r, n, i, o) {
      var a = i - r, s = o - n;
      if (0 !== a || 0 !== s) {
        var l = ((t - r) * a + (e - n) * s) / (a * a + s * s);
        l > 1 ? (r = i, n = o) : l > 0 && (r += a * l, n += s * l)
      }
      return Ue(t, e, r, n)
    }

    function Ue(t, e, r, n) {
      var i = r - t, o = n - e;
      return i * i + o * o
    }

    function Be(t) {
      for (var e = t.length, r = 0; r < e; r++) {
        for (var n = r, i = Math.abs(t[r][r]), o = r + 1; o < e; o++) {
          var a = Math.abs(t[o][r]);
          a > i && (i = a, n = o)
        }
        if (0 === i) return null;
        var s = t[n];
        t[n] = t[r], t[r] = s;
        for (var l = r + 1; l < e; l++) for (var u = -t[l][r] / t[r][r], c = r; c < e + 1; c++) r == c ? t[l][c] = 0 : t[l][c] += u * t[r][c]
      }
      for (var h = new Array(e), p = e - 1; p >= 0; p--) {
        h[p] = t[p][e] / t[p][p];
        for (var f = p - 1; f >= 0; f--) t[f][e] -= t[f][p] * h[p]
      }
      return h
    }

    function Ve(t) {
      return 180 * t / Math.PI
    }

    function Ye(t) {
      return t * Math.PI / 180
    }

    function We(t, e) {
      var r = t % e;
      return r * e < 0 ? r + e : r
    }

    function qe(t, e, r) {
      return t + r * (e - t)
    }

    var Xe = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Ze = 6378137 * Math.PI, Ke = [-Ze, -Ze, Ze, Ze], He = [-180, -85, 180, 85],
      $e = 6378137 * Math.log(Math.tan(Math.PI / 2)), Je = function (t) {
        function e(e) {
          return t.call(this, {
            code: e,
            units: St.METERS,
            extent: Ke,
            global: !0,
            worldExtent: He,
            getPointResolution: function (t, e) {
              return t / De(e[1] / 6378137)
            }
          }) || this
        }

        return Xe(e, t), e
      }(je),
      Qe = [new Je("EPSG:3857"), new Je("EPSG:102100"), new Je("EPSG:102113"), new Je("EPSG:900913"), new Je("http://www.opengis.net/gml/srs/epsg.xml#3857")];

    function tr(t, e, r) {
      var n = t.length, i = r > 1 ? r : 2, o = e;
      void 0 === o && (o = i > 2 ? t.slice() : new Array(n));
      for (var a = 0; a < n; a += i) {
        o[a] = Ze * t[a] / 180;
        var s = 6378137 * Math.log(Math.tan(Math.PI * (+t[a + 1] + 90) / 360));
        s > $e ? s = $e : s < -$e && (s = -$e), o[a + 1] = s
      }
      return o
    }

    function er(t, e, r) {
      var n = t.length, i = r > 1 ? r : 2, o = e;
      void 0 === o && (o = i > 2 ? t.slice() : new Array(n));
      for (var a = 0; a < n; a += i) o[a] = 180 * t[a] / Ze, o[a + 1] = 360 * Math.atan(Math.exp(t[a + 1] / 6378137)) / Math.PI - 90;
      return o
    }

    var rr = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), nr = [-180, -90, 180, 90], ir = 6378137 * Math.PI / 180, or = function (t) {
        function e(e, r) {
          return t.call(this, {
            code: e,
            units: St.DEGREES,
            extent: nr,
            axisOrientation: r,
            global: !0,
            metersPerUnit: ir,
            worldExtent: nr
          }) || this
        }

        return rr(e, t), e
      }(je),
      ar = [new or("CRS:84"), new or("EPSG:4326", "neu"), new or("urn:ogc:def:crs:OGC:1.3:CRS84"), new or("urn:ogc:def:crs:OGC:2:84"), new or("http://www.opengis.net/gml/srs/epsg.xml#4326", "neu")],
      sr = {};

    function lr() {
      sr = {}
    }

    function ur(t) {
      return sr[t] || sr[t.replace(/urn:(x-)?ogc:def:crs:EPSG:(.*:)?(\w+)$/, "EPSG:$3")] || null
    }

    function cr(t, e) {
      sr[t] = e
    }

    var hr = {};

    function pr() {
      hr = {}
    }

    function fr(t, e, r) {
      var n = t.getCode(), i = e.getCode();
      n in hr || (hr[n] = {}), hr[n][i] = r
    }

    function dr(t, e) {
      var r;
      return t in hr && e in hr[t] && (r = hr[t][e]), r
    }

    function gr(t, e, r) {
      var n = r || 6371008.8, i = Ye(t[1]), o = Ye(e[1]), a = (o - i) / 2, s = Ye(e[0] - t[0]) / 2,
        l = Math.sin(a) * Math.sin(a) + Math.sin(s) * Math.sin(s) * Math.cos(i) * Math.cos(o);
      return 2 * n * Math.atan2(Math.sqrt(l), Math.sqrt(1 - l))
    }

    function yr(t, e) {
      for (var r = 0, n = 0, i = t.length; n < i - 1; ++n) r += gr(t[n], t[n + 1], e);
      return r
    }

    function mr(t, e) {
      for (var r = 0, n = t.length, i = t[n - 1][0], o = t[n - 1][1], a = 0; a < n; a++) {
        var s = t[a][0], l = t[a][1];
        r += Ye(s - i) * (2 + Math.sin(Ye(o)) + Math.sin(Ye(l))), i = s, o = l
      }
      return r * e * e / 2
    }

    function vr(t, e, r, n) {
      var i = n || 6371008.8, o = Ye(t[1]), a = Ye(t[0]), s = e / i,
        l = Math.asin(Math.sin(o) * Math.cos(s) + Math.cos(o) * Math.sin(s) * Math.cos(r));
      return [Ve(a + Math.atan2(Math.sin(r) * Math.sin(s) * Math.cos(o), Math.cos(s) - Math.sin(o) * Math.sin(l))), Ve(l)]
    }

    function _r(t, e, r) {
      var n = void 0 !== r ? t.toFixed(r) : "" + t, i = n.indexOf(".");
      return (i = -1 === i ? n.length : i) > e ? n : new Array(1 + e - i).join("0") + n
    }

    function br(t, e) {
      for (var r = ("" + t).split("."), n = ("" + e).split("."), i = 0; i < Math.max(r.length, n.length); i++) {
        var o = parseInt(r[i] || "0", 10), a = parseInt(n[i] || "0", 10);
        if (o > a) return 1;
        if (a > o) return -1
      }
      return 0
    }

    function xr(t, e) {
      return t[0] += +e[0], t[1] += +e[1], t
    }

    function wr(t, e) {
      var r = e.getRadius(), n = e.getCenter(), i = n[0], o = n[1], a = t[0] - i, s = t[1] - o;
      0 === a && 0 === s && (a = 1);
      var l = Math.sqrt(a * a + s * s);
      return [i + r * a / l, o + r * s / l]
    }

    function Sr(t, e) {
      var r, n, i = t[0], o = t[1], a = e[0], s = e[1], l = a[0], u = a[1], c = s[0], h = s[1], p = c - l, f = h - u,
        d = 0 === p && 0 === f ? 0 : (p * (i - l) + f * (o - u)) / (p * p + f * f || 0);
      return d <= 0 ? (r = l, n = u) : d >= 1 ? (r = c, n = h) : (r = l + d * p, n = u + d * f), [r, n]
    }

    function Er(t, e, r) {
      var n = We(e + 180, 360) - 180, i = Math.abs(3600 * n), o = r || 0, a = Math.pow(10, o), s = Math.floor(i / 3600),
        l = Math.floor((i - 3600 * s) / 60), u = i - 3600 * s - 60 * l;
      return (u = Math.ceil(u * a) / a) >= 60 && (u = 0, l += 1), l >= 60 && (l = 0, s += 1), s + "° " + _r(l, 2) + "′ " + _r(u, 2, o) + "″" + (0 == n ? "" : " " + t.charAt(n < 0 ? 1 : 0))
    }

    function Tr(t, e, r) {
      return t ? e.replace("{x}", t[0].toFixed(r)).replace("{y}", t[1].toFixed(r)) : ""
    }

    function Cr(t, e) {
      for (var r = !0, n = t.length - 1; n >= 0; --n) if (t[n] != e[n]) {
        r = !1;
        break
      }
      return r
    }

    function Or(t, e) {
      var r = Math.cos(e), n = Math.sin(e), i = t[0] * r - t[1] * n, o = t[1] * r + t[0] * n;
      return t[0] = i, t[1] = o, t
    }

    function Pr(t, e) {
      return t[0] *= e, t[1] *= e, t
    }

    function Rr(t, e) {
      var r = t[0] - e[0], n = t[1] - e[1];
      return r * r + n * n
    }

    function Ir(t, e) {
      return Math.sqrt(Rr(t, e))
    }

    function Lr(t, e) {
      return Rr(t, Sr(t, e))
    }

    function Mr(t, e) {
      return Tr(t, "{x}, {y}", e)
    }

    function Fr(t, e) {
      if (e.canWrapX()) {
        var r = Pe(e.getExtent()), n = Ar(t, e, r);
        n && (t[0] -= n * r)
      }
      return t
    }

    function Ar(t, e, r) {
      var n = e.getExtent(), i = 0;
      if (e.canWrapX() && (t[0] < n[0] || t[0] > n[2])) {
        var o = r || Pe(n);
        i = Math.floor((t[0] - n[0]) / o)
      }
      return i
    }

    function kr(t, e, r) {
      var n;
      if (void 0 !== e) {
        for (var i = 0, o = t.length; i < o; ++i) e[i] = t[i];
        n = e
      } else n = t.slice();
      return n
    }

    function jr(t, e, r) {
      if (void 0 !== e && t !== e) {
        for (var n = 0, i = t.length; n < i; ++n) e[n] = t[n];
        t = e
      }
      return t
    }

    function Nr(t) {
      cr(t.getCode(), t), fr(t, t, kr)
    }

    function Dr(t) {
      t.forEach(Nr)
    }

    function Gr(t) {
      return "string" == typeof t ? ur(t) : t || null
    }

    function zr(t, e, r, n) {
      var i, o = (t = Gr(t)).getPointResolutionFunc();
      if (o) {
        if (i = o(e, r), n && n !== t.getUnits()) (s = t.getMetersPerUnit()) && (i = i * s / wt[n])
      } else {
        var a = t.getUnits();
        if (a == St.DEGREES && !n || n == St.DEGREES) i = e; else {
          var s, l = Zr(t, Gr("EPSG:4326"));
          if (l === jr && a !== St.DEGREES) i = e * t.getMetersPerUnit(); else {
            var u = [r[0] - e / 2, r[1], r[0] + e / 2, r[1], r[0], r[1] - e / 2, r[0], r[1] + e / 2];
            i = (gr((u = l(u, u, 2)).slice(0, 2), u.slice(2, 4)) + gr(u.slice(4, 6), u.slice(6, 8))) / 2
          }
          void 0 !== (s = n ? wt[n] : t.getMetersPerUnit()) && (i /= s)
        }
      }
      return i
    }

    function Ur(t) {
      Dr(t), t.forEach((function (e) {
        t.forEach((function (t) {
          e !== t && fr(e, t, kr)
        }))
      }))
    }

    function Br(t, e, r, n) {
      t.forEach((function (t) {
        e.forEach((function (e) {
          fr(t, e, r), fr(e, t, n)
        }))
      }))
    }

    function Vr(t, e) {
      return t ? "string" == typeof t ? Gr(t) : t : Gr(e)
    }

    function Yr(t) {
      return function (e, r, n) {
        for (var i = e.length, o = void 0 !== n ? n : 2, a = void 0 !== r ? r : new Array(i), s = 0; s < i; s += o) {
          var l = t([e[s], e[s + 1]]);
          a[s] = l[0], a[s + 1] = l[1];
          for (var u = o - 1; u >= 2; --u) a[s + u] = e[s + u]
        }
        return a
      }
    }

    function Wr(t, e, r, n) {
      var i = Gr(t), o = Gr(e);
      fr(i, o, Yr(r)), fr(o, i, Yr(n))
    }

    function qr(t, e) {
      return Hr(t, "EPSG:4326", void 0 !== e ? e : "EPSG:3857")
    }

    function Xr(t, e) {
      if (t === e) return !0;
      var r = t.getUnits() === e.getUnits();
      return (t.getCode() === e.getCode() || Zr(t, e) === kr) && r
    }

    function Zr(t, e) {
      var r = dr(t.getCode(), e.getCode());
      return r || (r = jr), r
    }

    function Kr(t, e) {
      return Zr(Gr(t), Gr(e))
    }

    function Hr(t, e, r) {
      return Kr(e, r)(t, void 0, t.length)
    }

    function $r(t, e, r, n) {
      return Ae(t, Kr(e, r), void 0, n)
    }

    var Jr = null;

    function Qr(t) {
      Jr = Gr(t)
    }

    function tn() {
      return Jr
    }

    function en(t, e) {
      return Jr ? Hr(t, e, Jr) : t
    }

    function rn(t, e) {
      return Jr ? Hr(t, Jr, e) : t
    }

    function nn(t, e) {
      return Jr ? $r(t, e, Jr) : t
    }

    function on(t, e) {
      return Jr ? $r(t, Jr, e) : t
    }

    function an(t, e, r) {
      return function (n) {
        var i, o, a = n[0], s = n[1];
        if (t.canWrapX()) {
          var l = t.getExtent(), u = Pe(l);
          (o = Ar(n, t, u)) && (a -= o * u), a = Ne(a, l[0], l[2]), s = Ne(s, l[1], l[3]), i = r([a, s])
        } else i = r(n);
        return o && e.canWrapX() && (i[0] += o * Pe(e.getExtent())), i
      }
    }

    function sn() {
      Ur(Qe), Ur(ar), Br(ar, Qe, tr, er)
    }

    function ln(t, e, r, n, i, o) {
      for (var a = o || [], s = 0, l = e; l < r; l += n) {
        var u = t[l], c = t[l + 1];
        a[s++] = i[0] * u + i[2] * c + i[4], a[s++] = i[1] * u + i[3] * c + i[5]
      }
      return o && a.length != s && (a.length = s), a
    }

    function un(t, e, r, n, i, o, a) {
      for (var s = a || [], l = Math.cos(i), u = Math.sin(i), c = o[0], h = o[1], p = 0, f = e; f < r; f += n) {
        var d = t[f] - c, g = t[f + 1] - h;
        s[p++] = c + d * l - g * u, s[p++] = h + d * u + g * l;
        for (var y = f + 2; y < f + n; ++y) s[p++] = t[y]
      }
      return a && s.length != p && (s.length = p), s
    }

    function cn(t, e, r, n, i, o, a, s) {
      for (var l = s || [], u = a[0], c = a[1], h = 0, p = e; p < r; p += n) {
        var f = t[p] - u, d = t[p + 1] - c;
        l[h++] = u + i * f, l[h++] = c + o * d;
        for (var g = p + 2; g < p + n; ++g) l[h++] = t[g]
      }
      return s && l.length != h && (l.length = h), l
    }

    function hn(t, e, r, n, i, o, a) {
      for (var s = a || [], l = 0, u = e; u < r; u += n) {
        s[l++] = t[u] + i, s[l++] = t[u + 1] + o;
        for (var c = u + 2; c < u + n; ++c) s[l++] = t[c]
      }
      return a && s.length != l && (s.length = l), s
    }

    sn();
    var pn = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), fn = [1, 0, 0, 1, 0, 0], dn = function (t) {
      function e() {
        var e = t.call(this) || this;
        return e.extent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], e.extentRevision_ = -1, e.simplifiedGeometryMaxMinSquaredTolerance = 0, e.simplifiedGeometryRevision = 0, e.simplifyTransformedInternal = C((function (t, e, r) {
          if (!r) return this.getSimplifiedGeometry(e);
          var n = this.clone();
          return n.applyTransform(r), n.getSimplifiedGeometry(e)
        })), e
      }

      return pn(e, t), e.prototype.simplifyTransformed = function (t, e) {
        return this.simplifyTransformedInternal(this.getRevision(), t, e)
      }, e.prototype.clone = function () {
        return n()
      }, e.prototype.closestPointXY = function (t, e, r, i) {
        return n()
      }, e.prototype.containsXY = function (t, e) {
        var r = this.getClosestPoint([t, e]);
        return r[0] === t && r[1] === e
      }, e.prototype.getClosestPoint = function (t, e) {
        var r = e || [NaN, NaN];
        return this.closestPointXY(t[0], t[1], r, 1 / 0), r
      }, e.prototype.intersectsCoordinate = function (t) {
        return this.containsXY(t[0], t[1])
      }, e.prototype.computeExtent = function (t) {
        return n()
      }, e.prototype.getExtent = function (t) {
        if (this.extentRevision_ != this.getRevision()) {
          var e = this.computeExtent(this.extent_);
          (isNaN(e[0]) || isNaN(e[1])) && oe(e), this.extentRevision_ = this.getRevision()
        }
        return Le(this.extent_, t)
      }, e.prototype.rotate = function (t, e) {
        n()
      }, e.prototype.scale = function (t, e, r) {
        n()
      }, e.prototype.simplify = function (t) {
        return this.getSimplifiedGeometry(t * t)
      }, e.prototype.getSimplifiedGeometry = function (t) {
        return n()
      }, e.prototype.getType = function () {
        return n()
      }, e.prototype.applyTransform = function (t) {
        n()
      }, e.prototype.intersectsExtent = function (t) {
        return n()
      }, e.prototype.translate = function (t, e) {
        n()
      }, e.prototype.transform = function (t, e) {
        var r = Gr(t), n = r.getUnits() == St.TILE_PIXELS ? function (t, n, i) {
          var o = r.getExtent(), a = r.getWorldExtent(), s = Ee(a) / Ee(o);
          return kt(fn, a[0], a[3], s, -s, 0, 0, 0), ln(t, 0, t.length, i, fn, n), Kr(r, e)(t, n, i)
        } : Kr(r, e);
        return this.applyTransform(n), this
      }, e
    }(ot), gn = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function yn(t) {
      var e;
      return t == yt ? e = 2 : t == mt || t == vt ? e = 3 : t == _t && (e = 4), e
    }

    function mn(t, e, r) {
      var n = t.getFlatCoordinates();
      if (n) {
        var i = t.getStride();
        return ln(n, 0, n.length, i, e, r)
      }
      return null
    }

    var vn = function (t) {
      function e() {
        var e = t.call(this) || this;
        return e.layout = yt, e.stride = 2, e.flatCoordinates = null, e
      }

      return gn(e, t), e.prototype.computeExtent = function (t) {
        return le(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t)
      }, e.prototype.getCoordinates = function () {
        return n()
      }, e.prototype.getFirstCoordinate = function () {
        return this.flatCoordinates.slice(0, this.stride)
      }, e.prototype.getFlatCoordinates = function () {
        return this.flatCoordinates
      }, e.prototype.getLastCoordinate = function () {
        return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride)
      }, e.prototype.getLayout = function () {
        return this.layout
      }, e.prototype.getSimplifiedGeometry = function (t) {
        if (this.simplifiedGeometryRevision !== this.getRevision() && (this.simplifiedGeometryMaxMinSquaredTolerance = 0, this.simplifiedGeometryRevision = this.getRevision()), t < 0 || 0 !== this.simplifiedGeometryMaxMinSquaredTolerance && t <= this.simplifiedGeometryMaxMinSquaredTolerance) return this;
        var e = this.getSimplifiedGeometryInternal(t);
        return e.getFlatCoordinates().length < this.flatCoordinates.length ? e : (this.simplifiedGeometryMaxMinSquaredTolerance = t, this)
      }, e.prototype.getSimplifiedGeometryInternal = function (t) {
        return this
      }, e.prototype.getStride = function () {
        return this.stride
      }, e.prototype.setFlatCoordinates = function (t, e) {
        this.stride = yn(t), this.layout = t, this.flatCoordinates = e
      }, e.prototype.setCoordinates = function (t, e) {
        n()
      }, e.prototype.setLayout = function (t, e, r) {
        var n;
        if (t) n = yn(t); else {
          for (var i = 0; i < r; ++i) {
            if (0 === e.length) return this.layout = yt, void (this.stride = 2);
            e = e[0]
          }
          t = function (t) {
            var e;
            2 == t ? e = yt : 3 == t ? e = mt : 4 == t && (e = _t);
            return e
          }(n = e.length)
        }
        this.layout = t, this.stride = n
      }, e.prototype.applyTransform = function (t) {
        this.flatCoordinates && (t(this.flatCoordinates, this.flatCoordinates, this.stride), this.changed())
      }, e.prototype.rotate = function (t, e) {
        var r = this.getFlatCoordinates();
        if (r) {
          var n = this.getStride();
          un(r, 0, r.length, n, t, e, r), this.changed()
        }
      }, e.prototype.scale = function (t, e, r) {
        var n = e;
        void 0 === n && (n = t);
        var i = r;
        i || (i = xe(this.getExtent()));
        var o = this.getFlatCoordinates();
        if (o) {
          var a = this.getStride();
          cn(o, 0, o.length, a, t, n, i, o), this.changed()
        }
      }, e.prototype.translate = function (t, e) {
        var r = this.getFlatCoordinates();
        if (r) {
          var n = this.getStride();
          hn(r, 0, r.length, n, t, e, r), this.changed()
        }
      }, e
    }(dn);

    function _n(t, e, r, n, i, o, a) {
      var s, l = t[e], u = t[e + 1], c = t[r] - l, h = t[r + 1] - u;
      if (0 === c && 0 === h) s = e; else {
        var p = ((i - l) * c + (o - u) * h) / (c * c + h * h);
        if (p > 1) s = r; else {
          if (p > 0) {
            for (var f = 0; f < n; ++f) a[f] = qe(t[e + f], t[r + f], p);
            return void (a.length = n)
          }
          s = e
        }
      }
      for (f = 0; f < n; ++f) a[f] = t[s + f];
      a.length = n
    }

    function bn(t, e, r, n, i) {
      var o = t[e], a = t[e + 1];
      for (e += n; e < r; e += n) {
        var s = t[e], l = t[e + 1], u = Ue(o, a, s, l);
        u > i && (i = u), o = s, a = l
      }
      return i
    }

    function xn(t, e, r, n, i) {
      for (var o = 0, a = r.length; o < a; ++o) {
        var s = r[o];
        i = bn(t, e, s, n, i), e = s
      }
      return i
    }

    function wn(t, e, r, n, i) {
      for (var o = 0, a = r.length; o < a; ++o) {
        var s = r[o];
        i = xn(t, e, s, n, i), e = s[s.length - 1]
      }
      return i
    }

    function Sn(t, e, r, n, i, o, a, s, l, u, c) {
      if (e == r) return u;
      var h, p;
      if (0 === i) {
        if ((p = Ue(a, s, t[e], t[e + 1])) < u) {
          for (h = 0; h < n; ++h) l[h] = t[e + h];
          return l.length = n, p
        }
        return u
      }
      for (var f = c || [NaN, NaN], d = e + n; d < r;) if (_n(t, d - n, d, n, a, s, f), (p = Ue(a, s, f[0], f[1])) < u) {
        for (u = p, h = 0; h < n; ++h) l[h] = f[h];
        l.length = n, d += n
      } else d += n * Math.max((Math.sqrt(p) - Math.sqrt(u)) / i | 0, 1);
      if (o && (_n(t, r - n, e, n, a, s, f), (p = Ue(a, s, f[0], f[1])) < u)) {
        for (u = p, h = 0; h < n; ++h) l[h] = f[h];
        l.length = n
      }
      return u
    }

    function En(t, e, r, n, i, o, a, s, l, u, c) {
      for (var h = c || [NaN, NaN], p = 0, f = r.length; p < f; ++p) {
        var d = r[p];
        u = Sn(t, e, d, n, i, o, a, s, l, u, h), e = d
      }
      return u
    }

    function Tn(t, e, r, n, i, o, a, s, l, u, c) {
      for (var h = c || [NaN, NaN], p = 0, f = r.length; p < f; ++p) {
        var d = r[p];
        u = En(t, e, d, n, i, o, a, s, l, u, h), e = d[d.length - 1]
      }
      return u
    }

    function Cn(t, e, r, n) {
      for (var i = 0, o = r.length; i < o; ++i) t[e++] = r[i];
      return e
    }

    function On(t, e, r, n) {
      for (var i = 0, o = r.length; i < o; ++i) for (var a = r[i], s = 0; s < n; ++s) t[e++] = a[s];
      return e
    }

    function Pn(t, e, r, n, i) {
      for (var o = i || [], a = 0, s = 0, l = r.length; s < l; ++s) {
        var u = On(t, e, r[s], n);
        o[a++] = u, e = u
      }
      return o.length = a, o
    }

    function Rn(t, e, r, n, i) {
      for (var o = i || [], a = 0, s = 0, l = r.length; s < l; ++s) {
        var u = Pn(t, e, r[s], n, o[a]);
        o[a++] = u, e = u[u.length - 1]
      }
      return o.length = a, o
    }

    function In(t, e, r, n, i, o, a) {
      var s = (r - e) / n;
      if (s < 3) {
        for (; e < r; e += n) o[a++] = t[e], o[a++] = t[e + 1];
        return a
      }
      var l = new Array(s);
      l[0] = 1, l[s - 1] = 1;
      for (var u = [e, r - n], c = 0; u.length > 0;) {
        for (var h = u.pop(), p = u.pop(), f = 0, d = t[p], g = t[p + 1], y = t[h], m = t[h + 1], v = p + n; v < h; v += n) {
          var _ = ze(t[v], t[v + 1], d, g, y, m);
          _ > f && (c = v, f = _)
        }
        f > i && (l[(c - e) / n] = 1, p + n < c && u.push(p, c), c + n < h && u.push(c, h))
      }
      for (v = 0; v < s; ++v) l[v] && (o[a++] = t[e + v * n], o[a++] = t[e + v * n + 1]);
      return a
    }

    function Ln(t, e, r, n, i, o, a, s) {
      for (var l = 0, u = r.length; l < u; ++l) {
        var c = r[l];
        a = In(t, e, c, n, i, o, a), s.push(a), e = c
      }
      return a
    }

    function Mn(t, e, r, n, i, o, a) {
      if (r <= e + n) {
        for (; e < r; e += n) o[a++] = t[e], o[a++] = t[e + 1];
        return a
      }
      var s = t[e], l = t[e + 1];
      o[a++] = s, o[a++] = l;
      var u = s, c = l;
      for (e += n; e < r; e += n) Ue(s, l, u = t[e], c = t[e + 1]) > i && (o[a++] = u, o[a++] = c, s = u, l = c);
      return u == s && c == l || (o[a++] = u, o[a++] = c), a
    }

    function Fn(t, e) {
      return e * Math.round(t / e)
    }

    function An(t, e, r, n, i, o, a) {
      if (e == r) return a;
      var s, l, u = Fn(t[e], i), c = Fn(t[e + 1], i);
      e += n, o[a++] = u, o[a++] = c;
      do {
        if (s = Fn(t[e], i), l = Fn(t[e + 1], i), (e += n) == r) return o[a++] = s, o[a++] = l, a
      } while (s == u && l == c);
      for (; e < r;) {
        var h = Fn(t[e], i), p = Fn(t[e + 1], i);
        if (e += n, h != s || p != l) {
          var f = s - u, d = l - c, g = h - u, y = p - c;
          f * y == d * g && (f < 0 && g < f || f == g || f > 0 && g > f) && (d < 0 && y < d || d == y || d > 0 && y > d) ? (s = h, l = p) : (o[a++] = s, o[a++] = l, u = s, c = l, s = h, l = p)
        }
      }
      return o[a++] = s, o[a++] = l, a
    }

    function kn(t, e, r, n, i, o, a, s) {
      for (var l = 0, u = r.length; l < u; ++l) {
        var c = r[l];
        a = An(t, e, c, n, i, o, a), s.push(a), e = c
      }
      return a
    }

    function jn(t, e, r, n, i, o, a, s) {
      for (var l = 0, u = r.length; l < u; ++l) {
        var c = r[l], h = [];
        a = kn(t, e, c, n, i, o, a, h), s.push(h), e = c[c.length - 1]
      }
      return a
    }

    function Nn(t, e, r, n, i) {
      for (var o = void 0 !== i ? i : [], a = 0, s = e; s < r; s += n) o[a++] = t.slice(s, s + n);
      return o.length = a, o
    }

    function Dn(t, e, r, n, i) {
      for (var o = void 0 !== i ? i : [], a = 0, s = 0, l = r.length; s < l; ++s) {
        var u = r[s];
        o[a++] = Nn(t, e, u, n, o[a]), e = u
      }
      return o.length = a, o
    }

    function Gn(t, e, r, n, i) {
      for (var o = void 0 !== i ? i : [], a = 0, s = 0, l = r.length; s < l; ++s) {
        var u = r[s];
        o[a++] = Dn(t, e, u, n, o[a]), e = u[u.length - 1]
      }
      return o.length = a, o
    }

    function zn(t, e, r, n) {
      for (var i = 0, o = t[r - n], a = t[r - n + 1]; e < r; e += n) {
        var s = t[e], l = t[e + 1];
        i += a * s - o * l, o = s, a = l
      }
      return i / 2
    }

    function Un(t, e, r, n) {
      for (var i = 0, o = 0, a = r.length; o < a; ++o) {
        var s = r[o];
        i += zn(t, e, s, n), e = s
      }
      return i
    }

    function Bn(t, e, r, n) {
      for (var i = 0, o = 0, a = r.length; o < a; ++o) {
        var s = r[o];
        i += Un(t, e, s, n), e = s[s.length - 1]
      }
      return i
    }

    var Vn = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Yn = function (t) {
      function e(e, r) {
        var n = t.call(this) || this;
        return n.maxDelta_ = -1, n.maxDeltaRevision_ = -1, void 0 === r || Array.isArray(e[0]) ? n.setCoordinates(e, r) : n.setFlatCoordinates(r, e), n
      }

      return Vn(e, t), e.prototype.clone = function () {
        return new e(this.flatCoordinates.slice(), this.layout)
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        return n < Jt(this.getExtent(), t, e) ? n : (this.maxDeltaRevision_ != this.getRevision() && (this.maxDelta_ = Math.sqrt(bn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), Sn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, !0, t, e, r, n))
      }, e.prototype.getArea = function () {
        return zn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
      }, e.prototype.getCoordinates = function () {
        return Nn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
      }, e.prototype.getSimplifiedGeometryInternal = function (t) {
        var r = [];
        return r.length = In(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t, r, 0), new e(r, yt)
      }, e.prototype.getType = function () {
        return bt.LINEAR_RING
      }, e.prototype.intersectsExtent = function (t) {
        return !1
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 1), this.flatCoordinates || (this.flatCoordinates = []), this.flatCoordinates.length = On(this.flatCoordinates, 0, t, this.stride), this.changed()
      }, e
    }(vn), Wn = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), qn = function (t) {
      function e(e, r) {
        var n = t.call(this) || this;
        return n.setCoordinates(e, r), n
      }

      return Wn(e, t), e.prototype.clone = function () {
        var t = new e(this.flatCoordinates.slice(), this.layout);
        return t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        var i = this.flatCoordinates, o = Ue(t, e, i[0], i[1]);
        if (o < n) {
          for (var a = this.stride, s = 0; s < a; ++s) r[s] = i[s];
          return r.length = a, o
        }
        return n
      }, e.prototype.getCoordinates = function () {
        return this.flatCoordinates ? this.flatCoordinates.slice() : []
      }, e.prototype.computeExtent = function (t) {
        return ae(this.flatCoordinates, t)
      }, e.prototype.getType = function () {
        return bt.POINT
      }, e.prototype.intersectsExtent = function (t) {
        return ee(t, this.flatCoordinates[0], this.flatCoordinates[1])
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 0), this.flatCoordinates || (this.flatCoordinates = []), this.flatCoordinates.length = Cn(this.flatCoordinates, 0, t, this.stride), this.changed()
      }, e
    }(vn);

    function Xn(t, e, r, n, i) {
      return !me(i, (function (i) {
        return !Zn(t, e, r, n, i[0], i[1])
      }))
    }

    function Zn(t, e, r, n, i, o) {
      for (var a = 0, s = t[r - n], l = t[r - n + 1]; e < r; e += n) {
        var u = t[e], c = t[e + 1];
        l <= o ? c > o && (u - s) * (o - l) - (i - s) * (c - l) > 0 && a++ : c <= o && (u - s) * (o - l) - (i - s) * (c - l) < 0 && a--, s = u, l = c
      }
      return 0 !== a
    }

    function Kn(t, e, r, n, i, o) {
      if (0 === r.length) return !1;
      if (!Zn(t, e, r[0], n, i, o)) return !1;
      for (var a = 1, s = r.length; a < s; ++a) if (Zn(t, r[a - 1], r[a], n, i, o)) return !1;
      return !0
    }

    function Hn(t, e, r, n, i, o) {
      if (0 === r.length) return !1;
      for (var a = 0, s = r.length; a < s; ++a) {
        var l = r[a];
        if (Kn(t, e, l, n, i, o)) return !0;
        e = l[l.length - 1]
      }
      return !1
    }

    function $n(t, e, r, n, i, o, a) {
      for (var s, l, u, c, h, p, f, g = i[o + 1], y = [], m = 0, v = r.length; m < v; ++m) {
        var _ = r[m];
        for (c = t[_ - n], p = t[_ - n + 1], s = e; s < _; s += n) h = t[s], f = t[s + 1], (g <= p && f <= g || p <= g && g <= f) && (u = (g - p) / (f - p) * (h - c) + c, y.push(u)), c = h, p = f
      }
      var b = NaN, x = -1 / 0;
      for (y.sort(d), c = y[0], s = 1, l = y.length; s < l; ++s) {
        h = y[s];
        var w = Math.abs(h - c);
        w > x && Kn(t, e, r, n, u = (c + h) / 2, g) && (b = u, x = w), c = h
      }
      return isNaN(b) && (b = i[o]), a ? (a.push(b, g, x), a) : [b, g, x]
    }

    function Jn(t, e, r, n, i) {
      for (var o = [], a = 0, s = r.length; a < s; ++a) {
        var l = r[a];
        o = $n(t, e, l, n, i, 2 * a, o), e = l[l.length - 1]
      }
      return o
    }

    function Qn(t, e, r, n, i) {
      for (var o, a = [t[e], t[e + 1]], s = []; e + n < r; e += n) {
        if (s[0] = t[e + n], s[1] = t[e + n + 1], o = i(a, s)) return o;
        a[0] = s[0], a[1] = s[1]
      }
      return !1
    }

    function ti(t, e, r, n, i) {
      var o = de([1 / 0, 1 / 0, -1 / 0, -1 / 0], t, e, r, n);
      return !!Re(i, o) && (!!te(i, o) || (o[0] >= i[0] && o[2] <= i[2] || (o[1] >= i[1] && o[3] <= i[3] || Qn(t, e, r, n, (function (t, e) {
        return Fe(i, t, e)
      })))))
    }

    function ei(t, e, r, n, i) {
      for (var o = 0, a = r.length; o < a; ++o) {
        if (ti(t, e, r[o], n, i)) return !0;
        e = r[o]
      }
      return !1
    }

    function ri(t, e, r, n, i) {
      return !!ti(t, e, r, n, i) || (!!Zn(t, e, r, n, i[0], i[1]) || (!!Zn(t, e, r, n, i[0], i[3]) || (!!Zn(t, e, r, n, i[2], i[1]) || !!Zn(t, e, r, n, i[2], i[3]))))
    }

    function ni(t, e, r, n, i) {
      if (!ri(t, e, r[0], n, i)) return !1;
      if (1 === r.length) return !0;
      for (var o = 1, a = r.length; o < a; ++o) if (Xn(t, r[o - 1], r[o], n, i) && !ti(t, r[o - 1], r[o], n, i)) return !1;
      return !0
    }

    function ii(t, e, r, n, i) {
      for (var o = 0, a = r.length; o < a; ++o) {
        var s = r[o];
        if (ni(t, e, s, n, i)) return !0;
        e = s[s.length - 1]
      }
      return !1
    }

    function oi(t, e, r, n) {
      for (; e < r - n;) {
        for (var i = 0; i < n; ++i) {
          var o = t[e + i];
          t[e + i] = t[r - n + i], t[r - n + i] = o
        }
        e += n, r -= n
      }
    }

    function ai(t, e, r, n) {
      for (var i = 0, o = t[r - n], a = t[r - n + 1]; e < r; e += n) {
        var s = t[e], l = t[e + 1];
        i += (s - o) * (l + a), o = s, a = l
      }
      return 0 === i ? void 0 : i > 0
    }

    function si(t, e, r, n, i) {
      for (var o = void 0 !== i && i, a = 0, s = r.length; a < s; ++a) {
        var l = r[a], u = ai(t, e, l, n);
        if (0 === a) {
          if (o && u || !o && !u) return !1
        } else if (o && !u || !o && u) return !1;
        e = l
      }
      return !0
    }

    function li(t, e, r, n, i) {
      for (var o = 0, a = r.length; o < a; ++o) {
        var s = r[o];
        if (!si(t, e, s, n, i)) return !1;
        s.length && (e = s[s.length - 1])
      }
      return !0
    }

    function ui(t, e, r, n, i) {
      for (var o = void 0 !== i && i, a = 0, s = r.length; a < s; ++a) {
        var l = r[a], u = ai(t, e, l, n);
        (0 === a ? o && u || !o && !u : o && !u || !o && u) && oi(t, e, l, n), e = l
      }
      return e
    }

    function ci(t, e, r, n, i) {
      for (var o = 0, a = r.length; o < a; ++o) e = ui(t, e, r[o], n, i);
      return e
    }

    var hi = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), pi = function (t) {
      function e(e, r, n) {
        var i = t.call(this) || this;
        return i.ends_ = [], i.flatInteriorPointRevision_ = -1, i.flatInteriorPoint_ = null, i.maxDelta_ = -1, i.maxDeltaRevision_ = -1, i.orientedRevision_ = -1, i.orientedFlatCoordinates_ = null, void 0 !== r && n ? (i.setFlatCoordinates(r, e), i.ends_ = n) : i.setCoordinates(e, r), i
      }

      return hi(e, t), e.prototype.appendLinearRing = function (t) {
        this.flatCoordinates ? v(this.flatCoordinates, t.getFlatCoordinates()) : this.flatCoordinates = t.getFlatCoordinates().slice(), this.ends_.push(this.flatCoordinates.length), this.changed()
      }, e.prototype.clone = function () {
        var t = new e(this.flatCoordinates.slice(), this.layout, this.ends_.slice());
        return t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        return n < Jt(this.getExtent(), t, e) ? n : (this.maxDeltaRevision_ != this.getRevision() && (this.maxDelta_ = Math.sqrt(xn(this.flatCoordinates, 0, this.ends_, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), En(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, !0, t, e, r, n))
      }, e.prototype.containsXY = function (t, e) {
        return Kn(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, t, e)
      }, e.prototype.getArea = function () {
        return Un(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride)
      }, e.prototype.getCoordinates = function (t) {
        var e;
        return void 0 !== t ? ui(e = this.getOrientedFlatCoordinates().slice(), 0, this.ends_, this.stride, t) : e = this.flatCoordinates, Dn(e, 0, this.ends_, this.stride)
      }, e.prototype.getEnds = function () {
        return this.ends_
      }, e.prototype.getFlatInteriorPoint = function () {
        if (this.flatInteriorPointRevision_ != this.getRevision()) {
          var t = xe(this.getExtent());
          this.flatInteriorPoint_ = $n(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, t, 0), this.flatInteriorPointRevision_ = this.getRevision()
        }
        return this.flatInteriorPoint_
      }, e.prototype.getInteriorPoint = function () {
        return new qn(this.getFlatInteriorPoint(), vt)
      }, e.prototype.getLinearRingCount = function () {
        return this.ends_.length
      }, e.prototype.getLinearRing = function (t) {
        return t < 0 || this.ends_.length <= t ? null : new Yn(this.flatCoordinates.slice(0 === t ? 0 : this.ends_[t - 1], this.ends_[t]), this.layout)
      }, e.prototype.getLinearRings = function () {
        for (var t = this.layout, e = this.flatCoordinates, r = this.ends_, n = [], i = 0, o = 0, a = r.length; o < a; ++o) {
          var s = r[o], l = new Yn(e.slice(i, s), t);
          n.push(l), i = s
        }
        return n
      }, e.prototype.getOrientedFlatCoordinates = function () {
        if (this.orientedRevision_ != this.getRevision()) {
          var t = this.flatCoordinates;
          si(t, 0, this.ends_, this.stride) ? this.orientedFlatCoordinates_ = t : (this.orientedFlatCoordinates_ = t.slice(), this.orientedFlatCoordinates_.length = ui(this.orientedFlatCoordinates_, 0, this.ends_, this.stride)), this.orientedRevision_ = this.getRevision()
        }
        return this.orientedFlatCoordinates_
      }, e.prototype.getSimplifiedGeometryInternal = function (t) {
        var r = [], n = [];
        return r.length = kn(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(t), r, 0, n), new e(r, yt, n)
      }, e.prototype.getType = function () {
        return bt.POLYGON
      }, e.prototype.intersectsExtent = function (t) {
        return ni(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, t)
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 2), this.flatCoordinates || (this.flatCoordinates = []);
        var r = Pn(this.flatCoordinates, 0, t, this.stride, this.ends_);
        this.flatCoordinates.length = 0 === r.length ? 0 : r[r.length - 1], this.changed()
      }, e
    }(vn), fi = pi;

    function di(t, e, r, n) {
      for (var i = r || 32, o = [], a = 0; a < i; ++a) v(o, vr(t, e, 2 * Math.PI * a / i, n));
      return o.push(o[0], o[1]), new pi(o, yt, [o.length])
    }

    function gi(t) {
      var e = t[0], r = t[1], n = t[2], i = t[3], o = [e, r, e, i, n, i, n, r, e, r];
      return new pi(o, yt, [o.length])
    }

    function yi(t, e, r) {
      for (var n = e || 32, i = t.getStride(), o = t.getLayout(), a = t.getCenter(), s = i * (n + 1), l = new Array(s), u = 0; u < s; u += i) {
        l[u] = 0, l[u + 1] = 0;
        for (var c = 2; c < i; c++) l[u + c] = a[c]
      }
      var h = [l.length], p = new pi(l, o, h);
      return mi(p, a, t.getRadius(), r), p
    }

    function mi(t, e, r, n) {
      for (var i = t.getFlatCoordinates(), o = t.getStride(), a = i.length / o - 1, s = n || 0, l = 0; l <= a; ++l) {
        var u = l * o, c = s + 2 * We(l, a) * Math.PI / a;
        i[u] = e[0] + r * Math.cos(c), i[u + 1] = e[1] + r * Math.sin(c)
      }
      t.changed()
    }

    var vi = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), _i = "accuracy", bi = "accuracyGeometry", xi = "altitude", wi = "altitudeAccuracy", Si = "heading",
      Ei = "position", Ti = "projection", Ci = "speed", Oi = "tracking", Pi = "trackingOptions", Ri = function (t) {
        function e(e) {
          var r = t.call(this, A) || this;
          return r.code = e.code, r.message = e.message, r
        }

        return vi(e, t), e
      }(c), Ii = function (t) {
        function e(e) {
          var r = t.call(this) || this, n = e || {};
          return r.position_ = null, r.transform_ = jr, r.watchId_ = void 0, r.addEventListener(it(Ti), r.handleProjectionChanged_), r.addEventListener(it(Oi), r.handleTrackingChanged_), void 0 !== n.projection && r.setProjection(n.projection), void 0 !== n.trackingOptions && r.setTrackingOptions(n.trackingOptions), r.setTracking(void 0 !== n.tracking && n.tracking), r
        }

        return vi(e, t), e.prototype.disposeInternal = function () {
          this.setTracking(!1), t.prototype.disposeInternal.call(this)
        }, e.prototype.handleProjectionChanged_ = function () {
          var t = this.getProjection();
          t && (this.transform_ = Zr(Gr("EPSG:4326"), t), this.position_ && this.set(Ei, this.transform_(this.position_)))
        }, e.prototype.handleTrackingChanged_ = function () {
          if ("geolocation" in navigator) {
            var t = this.getTracking();
            t && void 0 === this.watchId_ ? this.watchId_ = navigator.geolocation.watchPosition(this.positionChange_.bind(this), this.positionError_.bind(this), this.getTrackingOptions()) : t || void 0 === this.watchId_ || (navigator.geolocation.clearWatch(this.watchId_), this.watchId_ = void 0)
          }
        }, e.prototype.positionChange_ = function (t) {
          var e = t.coords;
          this.set(_i, e.accuracy), this.set(xi, null === e.altitude ? void 0 : e.altitude), this.set(wi, null === e.altitudeAccuracy ? void 0 : e.altitudeAccuracy), this.set(Si, null === e.heading ? void 0 : Ye(e.heading)), this.position_ ? (this.position_[0] = e.longitude, this.position_[1] = e.latitude) : this.position_ = [e.longitude, e.latitude];
          var r = this.transform_(this.position_);
          this.set(Ei, r), this.set(Ci, null === e.speed ? void 0 : e.speed);
          var n = di(this.position_, e.accuracy);
          n.applyTransform(this.transform_), this.set(bi, n), this.changed()
        }, e.prototype.positionError_ = function (t) {
          this.dispatchEvent(new Ri(t))
        }, e.prototype.getAccuracy = function () {
          return this.get(_i)
        }, e.prototype.getAccuracyGeometry = function () {
          return this.get(bi) || null
        }, e.prototype.getAltitude = function () {
          return this.get(xi)
        }, e.prototype.getAltitudeAccuracy = function () {
          return this.get(wi)
        }, e.prototype.getHeading = function () {
          return this.get(Si)
        }, e.prototype.getPosition = function () {
          return this.get(Ei)
        }, e.prototype.getProjection = function () {
          return this.get(Ti)
        }, e.prototype.getSpeed = function () {
          return this.get(Ci)
        }, e.prototype.getTracking = function () {
          return this.get(Oi)
        }, e.prototype.getTrackingOptions = function () {
          return this.get(Pi)
        }, e.prototype.setProjection = function (t) {
          this.set(Ti, Gr(t))
        }, e.prototype.setTracking = function (t) {
          this.set(Oi, t)
        }, e.prototype.setTrackingOptions = function (t) {
          this.set(Pi, t)
        }, e
      }(ot), Li = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Mi = function (t) {
        function e(e, r, n, i) {
          var o = t.call(this) || this;
          return o.extent = e, o.pixelRatio_ = n, o.resolution = r, o.state = i, o
        }

        return Li(e, t), e.prototype.changed = function () {
          this.dispatchEvent(F)
        }, e.prototype.getExtent = function () {
          return this.extent
        }, e.prototype.getImage = function () {
          return n()
        }, e.prototype.getPixelRatio = function () {
          return this.pixelRatio_
        }, e.prototype.getResolution = function () {
          return this.resolution
        }, e.prototype.getState = function () {
          return this.state
        }, e.prototype.load = function () {
          n()
        }, e
      }(M), Fi = 0, Ai = 1, ki = 2, ji = 3, Ni = 4,
      Di = "undefined" != typeof navigator && void 0 !== navigator.userAgent ? navigator.userAgent.toLowerCase() : "",
      Gi = -1 !== Di.indexOf("firefox"), zi = -1 !== Di.indexOf("safari") && -1 == Di.indexOf("chrom"),
      Ui = -1 !== Di.indexOf("webkit") && -1 == Di.indexOf("edge"), Bi = -1 !== Di.indexOf("macintosh"),
      Vi = "undefined" != typeof devicePixelRatio ? devicePixelRatio : 1,
      Yi = "undefined" != typeof WorkerGlobalScope && "undefined" != typeof OffscreenCanvas && self instanceof WorkerGlobalScope,
      Wi = "undefined" != typeof Image && Image.prototype.decode, qi = function () {
        var t = !1;
        try {
          var e = Object.defineProperty({}, "passive", {
            get: function () {
              t = !0
            }
          });
          window.addEventListener("_", null, e), window.removeEventListener("_", null, e)
        } catch (t) {
        }
        return t
      }(), Xi = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }();

    function Zi(t, e, r) {
      var n = t;
      if (n.src && Wi) {
        var i = n.decode(), o = !0;
        return i.then((function () {
          o && e()
        })).catch((function (t) {
          o && ("EncodingError" === t.name && "Invalid image type." === t.message ? e() : r())
        })), function () {
          o = !1
        }
      }
      var a = [K(n, Y, e), K(n, A, r)];
      return function () {
        a.forEach(H)
      }
    }

    var Ki = function (t) {
      function e(e, r, n, i, o, a) {
        var s = t.call(this, e, r, n, Fi) || this;
        return s.src_ = i, s.image_ = new Image, null !== o && (s.image_.crossOrigin = o), s.unlisten_ = null, s.state = Fi, s.imageLoadFunction_ = a, s
      }

      return Xi(e, t), e.prototype.getImage = function () {
        return this.image_
      }, e.prototype.handleImageError_ = function () {
        this.state = ji, this.unlistenImage_(), this.changed()
      }, e.prototype.handleImageLoad_ = function () {
        void 0 === this.resolution && (this.resolution = Ee(this.extent) / this.image_.height), this.state = ki, this.unlistenImage_(), this.changed()
      }, e.prototype.load = function () {
        this.state != Fi && this.state != ji || (this.state = Ai, this.changed(), this.imageLoadFunction_(this, this.src_), this.unlisten_ = Zi(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this)))
      }, e.prototype.setImage = function (t) {
        this.image_ = t
      }, e.prototype.unlistenImage_ = function () {
        this.unlisten_ && (this.unlisten_(), this.unlisten_ = null)
      }, e
    }(Mi), Hi = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), $i = function (t) {
      function e(e, r, n, i, o) {
        var a = this, s = void 0 !== o ? Fi : ki;
        return (a = t.call(this, e, r, n, s) || this).loader_ = void 0 !== o ? o : null, a.canvas_ = i, a.error_ = null, a
      }

      return Hi(e, t), e.prototype.getError = function () {
        return this.error_
      }, e.prototype.handleLoad_ = function (t) {
        t ? (this.error_ = t, this.state = ji) : this.state = ki, this.changed()
      }, e.prototype.load = function () {
        this.state == Fi && (this.state = Ai, this.changed(), this.loader_(this.handleLoad_.bind(this)))
      }, e.prototype.getImage = function () {
        return this.canvas_
      }, e
    }(Mi), Ji = 0, Qi = 1, to = 2, eo = 3, ro = 4;

    function no(t) {
      return Math.pow(t, 3)
    }

    function io(t) {
      return 1 - no(1 - t)
    }

    function oo(t) {
      return 3 * t * t - 2 * t * t * t
    }

    function ao(t) {
      return t
    }

    var so = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), lo = function (t) {
      function e(e, r, n) {
        var i = t.call(this) || this, o = n || {};
        return i.tileCoord = e, i.state = r, i.interimTile = null, i.hifi = !0, i.key = "", i.transition_ = void 0 === o.transition ? 250 : o.transition, i.transitionStarts_ = {}, i
      }

      return so(e, t), e.prototype.changed = function () {
        this.dispatchEvent(F)
      }, e.prototype.release = function () {
      }, e.prototype.getKey = function () {
        return this.key + "/" + this.tileCoord
      }, e.prototype.getInterimTile = function () {
        if (!this.interimTile) return this;
        var t = this.interimTile;
        do {
          if (t.getState() == to) return this.transition_ = 0, t;
          t = t.interimTile
        } while (t);
        return this
      }, e.prototype.refreshInterimChain = function () {
        if (this.interimTile) {
          var t = this.interimTile, e = this;
          do {
            if (t.getState() == to) {
              t.interimTile = null;
              break
            }
            t.getState() == Qi ? e = t : t.getState() == Ji ? e.interimTile = t.interimTile : e = t, t = e.interimTile
          } while (t)
        }
      }, e.prototype.getTileCoord = function () {
        return this.tileCoord
      }, e.prototype.getState = function () {
        return this.state
      }, e.prototype.setState = function (t) {
        if (this.state !== eo && this.state > t) throw new Error("Tile load sequence violation");
        this.state = t, this.changed()
      }, e.prototype.load = function () {
        n()
      }, e.prototype.getAlpha = function (t, e) {
        if (!this.transition_) return 1;
        var r = this.transitionStarts_[t];
        if (r) {
          if (-1 === r) return 1
        } else r = e, this.transitionStarts_[t] = r;
        var n = e - r + 1e3 / 60;
        return n >= this.transition_ ? 1 : no(n / this.transition_)
      }, e.prototype.inTransition = function (t) {
        return !!this.transition_ && -1 !== this.transitionStarts_[t]
      }, e.prototype.endTransition = function (t) {
        this.transition_ && (this.transitionStarts_[t] = -1)
      }, e
    }(M);

    function uo(t, e, r) {
      var n = r && r.length ? r.shift() : Yi ? new OffscreenCanvas(t || 300, e || 300) : document.createElement("canvas");
      return t && (n.width = t), e && (n.height = e), n.getContext("2d")
    }

    function co(t) {
      var e = t.offsetWidth, r = getComputedStyle(t);
      return e += parseInt(r.marginLeft, 10) + parseInt(r.marginRight, 10)
    }

    function ho(t) {
      var e = t.offsetHeight, r = getComputedStyle(t);
      return e += parseInt(r.marginTop, 10) + parseInt(r.marginBottom, 10)
    }

    function po(t, e) {
      var r = e.parentNode;
      r && r.replaceChild(t, e)
    }

    function fo(t) {
      return t && t.parentNode ? t.parentNode.removeChild(t) : null
    }

    function go(t) {
      for (; t.lastChild;) t.removeChild(t.lastChild)
    }

    function yo(t, e) {
      for (var r = t.childNodes, n = 0; ; ++n) {
        var i = r[n], o = e[n];
        if (!i && !o) break;
        i !== o && (i ? o ? t.insertBefore(o, i) : (t.removeChild(i), --n) : t.appendChild(o))
      }
    }

    var mo = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();
    var vo = function (t) {
      function e(e, r, n, i, o, a) {
        var s = t.call(this, e, r, a) || this;
        return s.crossOrigin_ = i, s.src_ = n, s.key = n, s.image_ = new Image, null !== i && (s.image_.crossOrigin = i), s.unlisten_ = null, s.tileLoadFunction_ = o, s
      }

      return mo(e, t), e.prototype.getImage = function () {
        return this.image_
      }, e.prototype.handleImageError_ = function () {
        var t;
        this.state = eo, this.unlistenImage_(), this.image_ = ((t = uo(1, 1)).fillStyle = "rgba(0,0,0,0)", t.fillRect(0, 0, 1, 1), t.canvas), this.changed()
      }, e.prototype.handleImageLoad_ = function () {
        var t = this.image_;
        t.naturalWidth && t.naturalHeight ? this.state = to : this.state = ro, this.unlistenImage_(), this.changed()
      }, e.prototype.load = function () {
        this.state == eo && (this.state = Ji, this.image_ = new Image, null !== this.crossOrigin_ && (this.image_.crossOrigin = this.crossOrigin_)), this.state == Ji && (this.state = Qi, this.changed(), this.tileLoadFunction_(this, this.src_), this.unlisten_ = Zi(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this)))
      }, e.prototype.unlistenImage_ = function () {
        this.unlisten_ && (this.unlisten_(), this.unlisten_ = null)
      }, e
    }(lo), _o = function () {
      function t(t, e, r) {
        this.decay_ = t, this.minVelocity_ = e, this.delay_ = r, this.points_ = [], this.angle_ = 0, this.initialVelocity_ = 0
      }

      return t.prototype.begin = function () {
        this.points_.length = 0, this.angle_ = 0, this.initialVelocity_ = 0
      }, t.prototype.update = function (t, e) {
        this.points_.push(t, e, Date.now())
      }, t.prototype.end = function () {
        if (this.points_.length < 6) return !1;
        var t = Date.now() - this.delay_, e = this.points_.length - 3;
        if (this.points_[e + 2] < t) return !1;
        for (var r = e - 3; r > 0 && this.points_[r + 2] > t;) r -= 3;
        var n = this.points_[e + 2] - this.points_[r + 2];
        if (n < 1e3 / 60) return !1;
        var i = this.points_[e] - this.points_[r], o = this.points_[e + 1] - this.points_[r + 1];
        return this.angle_ = Math.atan2(o, i), this.initialVelocity_ = Math.sqrt(i * i + o * o) / n, this.initialVelocity_ > this.minVelocity_
      }, t.prototype.getDistance = function () {
        return (this.minVelocity_ - this.initialVelocity_) / this.decay_
      }, t.prototype.getAngle = function () {
        return this.angle_
      }, t
    }(), bo = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i, xo = /^([a-z]*)$|^hsla?\(.*\)$/i;

    function wo(t) {
      return "string" == typeof t ? t : Ro(t)
    }

    function So(t) {
      var e = document.createElement("div");
      if (e.style.color = t, "" !== e.style.color) {
        document.body.appendChild(e);
        var r = getComputedStyle(e).color;
        return document.body.removeChild(e), r
      }
      return ""
    }

    var Eo, To, Co = (Eo = {}, To = 0, function (t) {
      var e;
      if (Eo.hasOwnProperty(t)) e = Eo[t]; else {
        if (To >= 1024) {
          var r = 0;
          for (var n in Eo) 0 == (3 & r++) && (delete Eo[n], --To)
        }
        e = function (t) {
          var e, r, n, i, o;
          if (xo.exec(t) && (t = So(t)), bo.exec(t)) {
            var a = t.length - 1, s = void 0;
            s = a <= 4 ? 1 : 2;
            var l = 4 === a || 8 === a;
            e = parseInt(t.substr(1 + 0 * s, s), 16), r = parseInt(t.substr(1 + 1 * s, s), 16), n = parseInt(t.substr(1 + 2 * s, s), 16), i = l ? parseInt(t.substr(1 + 3 * s, s), 16) : 255, 1 == s && (e = (e << 4) + e, r = (r << 4) + r, n = (n << 4) + n, l && (i = (i << 4) + i)), o = [e, r, n, i / 255]
          } else 0 == t.indexOf("rgba(") ? Po(o = t.slice(5, -1).split(",").map(Number)) : 0 == t.indexOf("rgb(") ? ((o = t.slice(4, -1).split(",").map(Number)).push(1), Po(o)) : pt(!1, 14);
          return o
        }(t), Eo[t] = e, ++To
      }
      return e
    });

    function Oo(t) {
      return Array.isArray(t) ? t : Co(t)
    }

    function Po(t) {
      return t[0] = Ne(t[0] + .5 | 0, 0, 255), t[1] = Ne(t[1] + .5 | 0, 0, 255), t[2] = Ne(t[2] + .5 | 0, 0, 255), t[3] = Ne(t[3], 0, 1), t
    }

    function Ro(t) {
      var e = t[0];
      e != (0 | e) && (e = e + .5 | 0);
      var r = t[1];
      r != (0 | r) && (r = r + .5 | 0);
      var n = t[2];
      return n != (0 | n) && (n = n + .5 | 0), "rgba(" + e + "," + r + "," + n + "," + (void 0 === t[3] ? 1 : t[3]) + ")"
    }

    function Io(t) {
      return xo.test(t) && (t = So(t)), bo.test(t) || 0 === t.indexOf("rgba(") || 0 === t.indexOf("rgb(")
    }

    var Lo = function () {
      function t() {
        this.cache_ = {}, this.cacheSize_ = 0, this.maxCacheSize_ = 32
      }

      return t.prototype.clear = function () {
        this.cache_ = {}, this.cacheSize_ = 0
      }, t.prototype.canExpireCache = function () {
        return this.cacheSize_ > this.maxCacheSize_
      }, t.prototype.expire = function () {
        if (this.canExpireCache()) {
          var t = 0;
          for (var e in this.cache_) {
            var r = this.cache_[e];
            0 != (3 & t++) || r.hasListener() || (delete this.cache_[e], --this.cacheSize_)
          }
        }
      }, t.prototype.get = function (t, e, r) {
        var n = Mo(t, e, r);
        return n in this.cache_ ? this.cache_[n] : null
      }, t.prototype.set = function (t, e, r, n) {
        var i = Mo(t, e, r);
        this.cache_[i] = n, ++this.cacheSize_
      }, t.prototype.setSize = function (t) {
        this.maxCacheSize_ = t, this.expire()
      }, t
    }();

    function Mo(t, e, r) {
      return e + ":" + t + ":" + (r ? wo(r) : "null")
    }

    var Fo = Lo, Ao = new Lo, ko = "opacity", jo = "visible", No = "extent", Do = "zIndex", Go = "maxResolution",
      zo = "minResolution", Uo = "maxZoom", Bo = "minZoom", Vo = "source", Yo = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Wo = function (t) {
        function e(e) {
          var r = t.call(this) || this, n = O({}, e);
          return n[ko] = void 0 !== e.opacity ? e.opacity : 1, pt("number" == typeof n[ko], 64), n[jo] = void 0 === e.visible || e.visible, n[Do] = e.zIndex, n[Go] = void 0 !== e.maxResolution ? e.maxResolution : 1 / 0, n[zo] = void 0 !== e.minResolution ? e.minResolution : 0, n[Bo] = void 0 !== e.minZoom ? e.minZoom : -1 / 0, n[Uo] = void 0 !== e.maxZoom ? e.maxZoom : 1 / 0, r.className_ = void 0 !== n.className ? e.className : "ol-layer", delete n.className, r.setProperties(n), r.state_ = null, r
        }

        return Yo(e, t), e.prototype.getClassName = function () {
          return this.className_
        }, e.prototype.getLayerState = function (t) {
          var e = this.state_ || {layer: this, managed: void 0 === t || t}, r = this.getZIndex();
          return e.opacity = Ne(Math.round(100 * this.getOpacity()) / 100, 0, 1), e.sourceState = this.getSourceState(), e.visible = this.getVisible(), e.extent = this.getExtent(), e.zIndex = void 0 !== r ? r : !1 === e.managed ? 1 / 0 : 0, e.maxResolution = this.getMaxResolution(), e.minResolution = Math.max(this.getMinResolution(), 0), e.minZoom = this.getMinZoom(), e.maxZoom = this.getMaxZoom(), this.state_ = e, e
        }, e.prototype.getLayersArray = function (t) {
          return n()
        }, e.prototype.getLayerStatesArray = function (t) {
          return n()
        }, e.prototype.getExtent = function () {
          return this.get(No)
        }, e.prototype.getMaxResolution = function () {
          return this.get(Go)
        }, e.prototype.getMinResolution = function () {
          return this.get(zo)
        }, e.prototype.getMinZoom = function () {
          return this.get(Bo)
        }, e.prototype.getMaxZoom = function () {
          return this.get(Uo)
        }, e.prototype.getOpacity = function () {
          return this.get(ko)
        }, e.prototype.getSourceState = function () {
          return n()
        }, e.prototype.getVisible = function () {
          return this.get(jo)
        }, e.prototype.getZIndex = function () {
          return this.get(Do)
        }, e.prototype.setExtent = function (t) {
          this.set(No, t)
        }, e.prototype.setMaxResolution = function (t) {
          this.set(Go, t)
        }, e.prototype.setMinResolution = function (t) {
          this.set(zo, t)
        }, e.prototype.setMaxZoom = function (t) {
          this.set(Uo, t)
        }, e.prototype.setMinZoom = function (t) {
          this.set(Bo, t)
        }, e.prototype.setOpacity = function (t) {
          pt("number" == typeof t, 64), this.set(ko, t)
        }, e.prototype.setVisible = function (t) {
          this.set(jo, t)
        }, e.prototype.setZIndex = function (t) {
          this.set(Do, t)
        }, e.prototype.disposeInternal = function () {
          this.state_ && (this.state_.layer = null, this.state_ = null), t.prototype.disposeInternal.call(this)
        }, e
      }(ot), qo = "prerender", Xo = "postrender", Zo = "precompose", Ko = "postcompose", Ho = "rendercomplete",
      $o = "undefined", Jo = "loading", Qo = "ready", ta = "error", ea = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }();

    function ra(t, e) {
      if (!t.visible) return !1;
      var r = e.resolution;
      if (r < t.minResolution || r >= t.maxResolution) return !1;
      var n = e.zoom;
      return n > t.minZoom && n <= t.maxZoom
    }

    var na = function (t) {
      function e(e) {
        var r = this, n = O({}, e);
        delete n.source, (r = t.call(this, n) || this).mapPrecomposeKey_ = null, r.mapRenderKey_ = null, r.sourceChangeKey_ = null, r.renderer_ = null, e.render && (r.render = e.render), e.map && r.setMap(e.map), r.addEventListener(it(Vo), r.handleSourcePropertyChange_);
        var i = e.source ? e.source : null;
        return r.setSource(i), r
      }

      return ea(e, t), e.prototype.getLayersArray = function (t) {
        var e = t || [];
        return e.push(this), e
      }, e.prototype.getLayerStatesArray = function (t) {
        var e = t || [];
        return e.push(this.getLayerState()), e
      }, e.prototype.getSource = function () {
        return this.get(Vo) || null
      }, e.prototype.getSourceState = function () {
        var t = this.getSource();
        return t ? t.getState() : $o
      }, e.prototype.handleSourceChange_ = function () {
        this.changed()
      }, e.prototype.handleSourcePropertyChange_ = function () {
        this.sourceChangeKey_ && (H(this.sourceChangeKey_), this.sourceChangeKey_ = null);
        var t = this.getSource();
        t && (this.sourceChangeKey_ = Z(t, F, this.handleSourceChange_, this)), this.changed()
      }, e.prototype.getFeatures = function (t) {
        return this.renderer_.getFeatures(t)
      }, e.prototype.render = function (t, e) {
        var r = this.getRenderer();
        if (r.prepareFrame(t)) return r.renderFrame(t, e)
      }, e.prototype.setMap = function (t) {
        this.mapPrecomposeKey_ && (H(this.mapPrecomposeKey_), this.mapPrecomposeKey_ = null), t || this.changed(), this.mapRenderKey_ && (H(this.mapRenderKey_), this.mapRenderKey_ = null), t && (this.mapPrecomposeKey_ = Z(t, Zo, (function (t) {
          var e = t.frameState.layerStatesArray, r = this.getLayerState(!1);
          pt(!e.some((function (t) {
            return t.layer === r.layer
          })), 67), e.push(r)
        }), this), this.mapRenderKey_ = Z(this, F, t.render, t), this.changed())
      }, e.prototype.setSource = function (t) {
        this.set(Vo, t)
      }, e.prototype.getRenderer = function () {
        return this.renderer_ || (this.renderer_ = this.createRenderer()), this.renderer_
      }, e.prototype.hasRenderer = function () {
        return !!this.renderer_
      }, e.prototype.createRenderer = function () {
        return null
      }, e.prototype.disposeInternal = function () {
        this.setSource(null), t.prototype.disposeInternal.call(this)
      }, e
    }(Wo), ia = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function oa(t, e) {
      Ao.expire()
    }

    var aa = function (t) {
        function e(e) {
          var r = t.call(this) || this;
          return r.map_ = e, r
        }

        return ia(e, t), e.prototype.dispatchRenderEvent = function (t, e) {
          n()
        }, e.prototype.calculateMatrices2D = function (t) {
          var e = t.viewState, r = t.coordinateToPixelTransform, n = t.pixelToCoordinateTransform;
          kt(r, t.size[0] / 2, t.size[1] / 2, 1 / e.resolution, -1 / e.resolution, -e.rotation, -e.center[0], -e.center[1]), jt(n, r)
        }, e.prototype.forEachFeatureAtCoordinate = function (t, e, r, n, i, o, a, s) {
          var l, u = e.viewState;

          function c(t, e, r, n) {
            return i.call(o, e, t ? r : null, n)
          }

          var h = u.projection, p = Fr(t.slice(), h), f = [[0, 0]];
          if (h.canWrapX() && n) {
            var d = Pe(h.getExtent());
            f.push([-d, 0], [d, 0])
          }
          for (var g = e.layerStatesArray, y = g.length, m = [], v = [], _ = 0; _ < f.length; _++) for (var b = y - 1; b >= 0; --b) {
            var x = g[b], w = x.layer;
            if (w.hasRenderer() && ra(x, u) && a.call(s, w)) {
              var S = w.getRenderer(), E = w.getSource();
              if (S && E) {
                var T = E.getWrapX() ? p : t, C = c.bind(null, x.managed);
                v[0] = T[0] + f[_][0], v[1] = T[1] + f[_][1], l = S.forEachFeatureAtCoordinate(v, e, r, C, m)
              }
              if (l) return l
            }
          }
          if (0 !== m.length) {
            var O = 1 / m.length;
            return m.forEach((function (t, e) {
              return t.distanceSq += e * O
            })), m.sort((function (t, e) {
              return t.distanceSq - e.distanceSq
            })), m.some((function (t) {
              return l = t.callback(t.feature, t.layer, t.geometry)
            })), l
          }
        }, e.prototype.forEachLayerAtPixel = function (t, e, r, i, o) {
          return n()
        }, e.prototype.hasFeatureAtCoordinate = function (t, e, r, n, i, o) {
          return void 0 !== this.forEachFeatureAtCoordinate(t, e, r, n, S, this, i, o)
        }, e.prototype.getMap = function () {
          return this.map_
        }, e.prototype.renderFrame = function (t) {
          n()
        }, e.prototype.scheduleExpireIconCache = function (t) {
          Ao.canExpireCache() && t.postRenderFunctions.push(oa)
        }, e
      }(p), sa = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), la = function (t) {
        function e(e, r, n, i) {
          var o = t.call(this, e) || this;
          return o.inversePixelTransform = r, o.frameState = n, o.context = i, o
        }

        return sa(e, t), e
      }(c),
      ua = new RegExp(["^\\s*(?=(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)", "(?=(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)", "(?=(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00 ))?)", "(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?", "(?:small|large)|medium|smaller|larger|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))", "(?:\\s*\\/\\s*(normal|[\\.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])?))", "?\\s*([-,\\\"\\'\\sa-z]+?)\\s*$"].join(""), "i"),
      ca = ["style", "variant", "weight", "size", "lineHeight", "family"], ha = function (t) {
        var e = t.match(ua);
        if (!e) return null;
        for (var r = {
          lineHeight: "normal",
          size: "1.2em",
          style: "normal",
          weight: "normal",
          variant: "normal"
        }, n = 0, i = ca.length; n < i; ++n) {
          var o = e[n + 1];
          void 0 !== o && (r[ca[n]] = o)
        }
        return r.families = r.family.split(/,\s?/), r
      }, pa = [], fa = [0, 0, 0, 0], da = new ot, ga = new M;
    ga.setSize = function () {
      console.warn("labelCache is deprecated.")
    };
    var ya, ma, va = null, _a = {}, ba = function () {
      var t, e, r = ["monospace", "serif"], n = r.length, i = "wmytzilWMYTZIL@#/&?$%10";

      function o(t, o, a) {
        for (var s = !0, l = 0; l < n; ++l) {
          var u = r[l];
          if (e = Sa(t + " " + o + " 32px " + u, i), a != u) {
            var c = Sa(t + " " + o + " 32px " + a + "," + u, i);
            s = s && c != e
          }
        }
        return !!s
      }

      function a() {
        for (var e = !0, r = da.getKeys(), n = 0, i = r.length; n < i; ++n) {
          var a = r[n];
          da.get(a) < 100 && (o.apply(this, a.split("\n")) ? (P(_a), va = null, ya = void 0, da.set(a, 100)) : (da.set(a, da.get(a) + 1, !0), e = !1))
        }
        e && (clearInterval(t), t = void 0)
      }

      return function (e) {
        var r = ha(e);
        if (r) for (var n = r.families, i = 0, s = n.length; i < s; ++i) {
          var l = n[i], u = r.style + "\n" + r.weight + "\n" + l;
          void 0 === da.get(u) && (da.set(u, 100, !0), o(r.style, r.weight, l) || (da.set(u, 0, !0), void 0 === t && (t = setInterval(a, 32))))
        }
      }
    }(), xa = function (t) {
      var e = _a[t];
      if (null == e) {
        if (Yi) {
          var r = ha(t), n = wa(t, "Žg");
          e = (isNaN(Number(r.lineHeight)) ? 1.2 : Number(r.lineHeight)) * (n.actualBoundingBoxAscent + n.actualBoundingBoxDescent)
        } else ma || ((ma = document.createElement("div")).innerHTML = "M", ma.style.margin = "0 !important", ma.style.padding = "0 !important", ma.style.position = "absolute !important", ma.style.left = "-99999px !important"), ma.style.font = t, document.body.appendChild(ma), e = ma.offsetHeight, document.body.removeChild(ma);
        _a[t] = e
      }
      return e
    };

    function wa(t, e) {
      return va || (va = uo(1, 1)), t != ya && (va.font = t, ya = va.font), va.measureText(e)
    }

    function Sa(t, e) {
      return wa(t, e).width
    }

    function Ea(t, e, r) {
      if (e in r) return r[e];
      var n = Sa(t, e);
      return r[e] = n, n
    }

    function Ta(t, e, r) {
      for (var n = e.length, i = 0, o = 0; o < n; ++o) {
        var a = Sa(t, e[o]);
        i = Math.max(i, a), r.push(a)
      }
      return i
    }

    function Ca(t, e, r, n) {
      0 !== e && (t.translate(r, n), t.rotate(e), t.translate(-r, -n))
    }

    function Oa(t, e, r, n, i, o, a, s, l, u, c) {
      t.save(), 1 !== r && (t.globalAlpha *= r), e && t.setTransform.apply(t, e), n.contextInstructions ? (t.translate(l, u), t.scale(c[0], c[1]), function (t, e) {
        for (var r = t.contextInstructions, n = 0, i = r.length; n < i; n += 2) Array.isArray(r[n + 1]) ? e[r[n]].apply(e, r[n + 1]) : e[r[n]] = r[n + 1]
      }(n, t)) : c[0] < 0 || c[1] < 0 ? (t.translate(l, u), t.scale(c[0], c[1]), t.drawImage(n, i, o, a, s, 0, 0, a, s)) : t.drawImage(n, i, o, a, s, l, u, a * c[0], s * c[1]), t.restore()
    }

    var Pa = null;

    function Ra(t) {
      return Yi ? Dt(t) : (Pa || (Pa = uo(1, 1).canvas), Pa.style.transform = Dt(t), Pa.style.transform)
    }

    var Ia = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), La = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          r.fontChangeListenerKey_ = Z(da, h, e.redrawText.bind(e)), r.element_ = document.createElement("div");
          var n = r.element_.style;
          n.position = "absolute", n.width = "100%", n.height = "100%", n.zIndex = "0", r.element_.className = "ol-unselectable ol-layers";
          var i = e.getViewport();
          return i.insertBefore(r.element_, i.firstChild || null), r.children_ = [], r.renderedVisible_ = !0, r
        }

        return Ia(e, t), e.prototype.dispatchRenderEvent = function (t, e) {
          var r = this.getMap();
          if (r.hasListener(t)) {
            var n = new la(t, void 0, e);
            r.dispatchEvent(n)
          }
        }, e.prototype.disposeInternal = function () {
          H(this.fontChangeListenerKey_), this.element_.parentNode.removeChild(this.element_), t.prototype.disposeInternal.call(this)
        }, e.prototype.renderFrame = function (t) {
          if (t) {
            this.calculateMatrices2D(t), this.dispatchRenderEvent(Zo, t);
            var e = t.layerStatesArray.sort((function (t, e) {
              return t.zIndex - e.zIndex
            })), r = t.viewState;
            this.children_.length = 0;
            for (var n = [], i = null, o = 0, a = e.length; o < a; ++o) {
              var s = e[o];
              if (t.layerIndex = o, ra(s, r) && (s.sourceState == Qo || s.sourceState == $o)) {
                var l = s.layer, u = l.render(t, i);
                u && (u !== i && (this.children_.push(u), i = u), "getDeclutter" in l && n.push(l))
              }
            }
            for (o = n.length - 1; o >= 0; --o) n[o].renderDeclutter(t);
            yo(this.element_, this.children_), this.dispatchRenderEvent(Ko, t), this.renderedVisible_ || (this.element_.style.display = "", this.renderedVisible_ = !0), this.scheduleExpireIconCache(t)
          } else this.renderedVisible_ && (this.element_.style.display = "none", this.renderedVisible_ = !1)
        }, e.prototype.forEachLayerAtPixel = function (t, e, r, n, i) {
          for (var o = e.viewState, a = e.layerStatesArray, s = a.length - 1; s >= 0; --s) {
            var l = a[s], u = l.layer;
            if (u.hasRenderer() && ra(l, o) && i(u)) {
              var c = u.getRenderer().getDataAtPixel(t, e, r);
              if (c) {
                var h = n(u, c);
                if (h) return h
              }
            }
          }
        }, e
      }(aa), Ma = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Fa = "layers", Aa = function (t) {
        function e(e) {
          var r = this, n = e || {}, i = O({}, n);
          delete i.layers;
          var o = n.layers;
          return (r = t.call(this, i) || this).layersListenerKeys_ = [], r.listenerKeys_ = {}, r.addEventListener(it(Fa), r.handleLayersChanged_), o ? Array.isArray(o) ? o = new ht(o.slice(), {unique: !0}) : pt("function" == typeof o.getArray, 43) : o = new ht(void 0, {unique: !0}), r.setLayers(o), r
        }

        return Ma(e, t), e.prototype.handleLayerChange_ = function () {
          this.changed()
        }, e.prototype.handleLayersChanged_ = function () {
          this.layersListenerKeys_.forEach(H), this.layersListenerKeys_.length = 0;
          var t = this.getLayers();
          for (var e in this.layersListenerKeys_.push(Z(t, at, this.handleLayersAdd_, this), Z(t, st, this.handleLayersRemove_, this)), this.listenerKeys_) this.listenerKeys_[e].forEach(H);
          P(this.listenerKeys_);
          for (var r = t.getArray(), n = 0, i = r.length; n < i; n++) {
            var a = r[n];
            this.listenerKeys_[o(a)] = [Z(a, h, this.handleLayerChange_, this), Z(a, F, this.handleLayerChange_, this)]
          }
          this.changed()
        }, e.prototype.handleLayersAdd_ = function (t) {
          var e = t.element;
          this.listenerKeys_[o(e)] = [Z(e, h, this.handleLayerChange_, this), Z(e, F, this.handleLayerChange_, this)], this.changed()
        }, e.prototype.handleLayersRemove_ = function (t) {
          var e = o(t.element);
          this.listenerKeys_[e].forEach(H), delete this.listenerKeys_[e], this.changed()
        }, e.prototype.getLayers = function () {
          return this.get(Fa)
        }, e.prototype.setLayers = function (t) {
          this.set(Fa, t)
        }, e.prototype.getLayersArray = function (t) {
          var e = void 0 !== t ? t : [];
          return this.getLayers().forEach((function (t) {
            t.getLayersArray(e)
          })), e
        }, e.prototype.getLayerStatesArray = function (t) {
          var e = void 0 !== t ? t : [], r = e.length;
          this.getLayers().forEach((function (t) {
            t.getLayerStatesArray(e)
          }));
          for (var n = this.getLayerState(), i = r, o = e.length; i < o; i++) {
            var a = e[i];
            a.opacity *= n.opacity, a.visible = a.visible && n.visible, a.maxResolution = Math.min(a.maxResolution, n.maxResolution), a.minResolution = Math.max(a.minResolution, n.minResolution), a.minZoom = Math.max(a.minZoom, n.minZoom), a.maxZoom = Math.min(a.maxZoom, n.maxZoom), void 0 !== n.extent && (void 0 !== a.extent ? a.extent = Te(a.extent, n.extent) : a.extent = n.extent)
          }
          return e
        }, e.prototype.getSourceState = function () {
          return Qo
        }, e
      }(Wo), ka = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ja = function (t) {
        function e(e, r, n) {
          var i = t.call(this, e) || this;
          return i.map = r, i.frameState = void 0 !== n ? n : null, i
        }

        return ka(e, t), e
      }(c), Na = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Da = function (t) {
        function e(e, r, n, i, o) {
          var a = t.call(this, e, r, o) || this;
          return a.originalEvent = n, a.pixel_ = null, a.coordinate_ = null, a.dragging = void 0 !== i && i, a
        }

        return Na(e, t), Object.defineProperty(e.prototype, "pixel", {
          get: function () {
            return this.pixel_ || (this.pixel_ = this.map.getEventPixel(this.originalEvent)), this.pixel_
          }, set: function (t) {
            this.pixel_ = t
          }, enumerable: !1, configurable: !0
        }), Object.defineProperty(e.prototype, "coordinate", {
          get: function () {
            return this.coordinate_ || (this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel)), this.coordinate_
          }, set: function (t) {
            this.coordinate_ = t
          }, enumerable: !1, configurable: !0
        }), e.prototype.preventDefault = function () {
          t.prototype.preventDefault.call(this), this.originalEvent.preventDefault()
        }, e.prototype.stopPropagation = function () {
          t.prototype.stopPropagation.call(this), this.originalEvent.stopPropagation()
        }, e
      }(ja), Ga = {
        SINGLECLICK: "singleclick",
        CLICK: N,
        DBLCLICK: D,
        POINTERDRAG: "pointerdrag",
        POINTERMOVE: "pointermove",
        POINTERDOWN: "pointerdown",
        POINTERUP: "pointerup",
        POINTEROVER: "pointerover",
        POINTEROUT: "pointerout",
        POINTERENTER: "pointerenter",
        POINTERLEAVE: "pointerleave",
        POINTERCANCEL: "pointercancel"
      }, za = "pointermove", Ua = "pointerdown", Ba = "pointerup", Va = "pointerout", Ya = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Wa = function (t) {
        function e(e, r) {
          var n = t.call(this, e) || this;
          n.map_ = e, n.clickTimeoutId_, n.emulateClicks_ = !1, n.dragging_ = !1, n.dragListenerKeys_ = [], n.moveTolerance_ = r ? r * Vi : Vi, n.down_ = null;
          var i = n.map_.getViewport();
          return n.activePointers_ = 0, n.trackedTouches_ = {}, n.element_ = i, n.pointerdownListenerKey_ = Z(i, Ua, n.handlePointerDown_, n), n.originalPointerMoveEvent_, n.relayedListenerKey_ = Z(i, za, n.relayEvent_, n), n.boundHandleTouchMove_ = n.handleTouchMove_.bind(n), n.element_.addEventListener(q, n.boundHandleTouchMove_, !!qi && {passive: !1}), n
        }

        return Ya(e, t), e.prototype.emulateClick_ = function (t) {
          var e = new Da(Ga.CLICK, this.map_, t);
          this.dispatchEvent(e), void 0 !== this.clickTimeoutId_ ? (clearTimeout(this.clickTimeoutId_), this.clickTimeoutId_ = void 0, e = new Da(Ga.DBLCLICK, this.map_, t), this.dispatchEvent(e)) : this.clickTimeoutId_ = setTimeout(function () {
            this.clickTimeoutId_ = void 0;
            var e = new Da(Ga.SINGLECLICK, this.map_, t);
            this.dispatchEvent(e)
          }.bind(this), 250)
        }, e.prototype.updateActivePointers_ = function (t) {
          var e = t;
          e.type == Ga.POINTERUP || e.type == Ga.POINTERCANCEL ? delete this.trackedTouches_[e.pointerId] : e.type == Ga.POINTERDOWN && (this.trackedTouches_[e.pointerId] = !0), this.activePointers_ = Object.keys(this.trackedTouches_).length
        }, e.prototype.handlePointerUp_ = function (t) {
          this.updateActivePointers_(t);
          var e = new Da(Ga.POINTERUP, this.map_, t);
          this.dispatchEvent(e), this.emulateClicks_ && !e.propagationStopped && !this.dragging_ && this.isMouseActionButton_(t) && this.emulateClick_(this.down_), 0 === this.activePointers_ && (this.dragListenerKeys_.forEach(H), this.dragListenerKeys_.length = 0, this.dragging_ = !1, this.down_ = null)
        }, e.prototype.isMouseActionButton_ = function (t) {
          return 0 === t.button
        }, e.prototype.handlePointerDown_ = function (t) {
          this.emulateClicks_ = 0 === this.activePointers_, this.updateActivePointers_(t);
          var e = new Da(Ga.POINTERDOWN, this.map_, t);
          if (this.dispatchEvent(e), this.down_ = t, 0 === this.dragListenerKeys_.length) {
            var r = this.map_.getOwnerDocument();
            this.dragListenerKeys_.push(Z(r, Ga.POINTERMOVE, this.handlePointerMove_, this), Z(r, Ga.POINTERUP, this.handlePointerUp_, this), Z(this.element_, Ga.POINTERCANCEL, this.handlePointerUp_, this)), this.element_.getRootNode && this.element_.getRootNode() !== r && this.dragListenerKeys_.push(Z(this.element_.getRootNode(), Ga.POINTERUP, this.handlePointerUp_, this))
          }
        }, e.prototype.handlePointerMove_ = function (t) {
          if (this.isMoving_(t)) {
            this.dragging_ = !0;
            var e = new Da(Ga.POINTERDRAG, this.map_, t, this.dragging_);
            this.dispatchEvent(e)
          }
        }, e.prototype.relayEvent_ = function (t) {
          this.originalPointerMoveEvent_ = t;
          var e = !(!this.down_ || !this.isMoving_(t));
          this.dispatchEvent(new Da(t.type, this.map_, t, e))
        }, e.prototype.handleTouchMove_ = function (t) {
          this.originalPointerMoveEvent_ && !this.originalPointerMoveEvent_.defaultPrevented || t.preventDefault()
        }, e.prototype.isMoving_ = function (t) {
          return this.dragging_ || Math.abs(t.clientX - this.down_.clientX) > this.moveTolerance_ || Math.abs(t.clientY - this.down_.clientY) > this.moveTolerance_
        }, e.prototype.disposeInternal = function () {
          this.relayedListenerKey_ && (H(this.relayedListenerKey_), this.relayedListenerKey_ = null), this.element_.removeEventListener(q, this.boundHandleTouchMove_), this.pointerdownListenerKey_ && (H(this.pointerdownListenerKey_), this.pointerdownListenerKey_ = null), this.dragListenerKeys_.forEach(H), this.dragListenerKeys_.length = 0, this.element_ = null, t.prototype.disposeInternal.call(this)
        }, e
      }(M), qa = "postrender", Xa = "movestart", Za = "moveend", Ka = "layergroup", Ha = "size", $a = "target",
      Ja = "view", Qa = function () {
        function t(t, e) {
          this.priorityFunction_ = t, this.keyFunction_ = e, this.elements_ = [], this.priorities_ = [], this.queuedElements_ = {}
        }

        return t.prototype.clear = function () {
          this.elements_.length = 0, this.priorities_.length = 0, P(this.queuedElements_)
        }, t.prototype.dequeue = function () {
          var t = this.elements_, e = this.priorities_, r = t[0];
          1 == t.length ? (t.length = 0, e.length = 0) : (t[0] = t.pop(), e[0] = e.pop(), this.siftUp_(0));
          var n = this.keyFunction_(r);
          return delete this.queuedElements_[n], r
        }, t.prototype.enqueue = function (t) {
          pt(!(this.keyFunction_(t) in this.queuedElements_), 31);
          var e = this.priorityFunction_(t);
          return e != 1 / 0 && (this.elements_.push(t), this.priorities_.push(e), this.queuedElements_[this.keyFunction_(t)] = !0, this.siftDown_(0, this.elements_.length - 1), !0)
        }, t.prototype.getCount = function () {
          return this.elements_.length
        }, t.prototype.getLeftChildIndex_ = function (t) {
          return 2 * t + 1
        }, t.prototype.getRightChildIndex_ = function (t) {
          return 2 * t + 2
        }, t.prototype.getParentIndex_ = function (t) {
          return t - 1 >> 1
        }, t.prototype.heapify_ = function () {
          var t;
          for (t = (this.elements_.length >> 1) - 1; t >= 0; t--) this.siftUp_(t)
        }, t.prototype.isEmpty = function () {
          return 0 === this.elements_.length
        }, t.prototype.isKeyQueued = function (t) {
          return t in this.queuedElements_
        }, t.prototype.isQueued = function (t) {
          return this.isKeyQueued(this.keyFunction_(t))
        }, t.prototype.siftUp_ = function (t) {
          for (var e = this.elements_, r = this.priorities_, n = e.length, i = e[t], o = r[t], a = t; t < n >> 1;) {
            var s = this.getLeftChildIndex_(t), l = this.getRightChildIndex_(t), u = l < n && r[l] < r[s] ? l : s;
            e[t] = e[u], r[t] = r[u], t = u
          }
          e[t] = i, r[t] = o, this.siftDown_(a, t)
        }, t.prototype.siftDown_ = function (t, e) {
          for (var r = this.elements_, n = this.priorities_, i = r[e], o = n[e]; e > t;) {
            var a = this.getParentIndex_(e);
            if (!(n[a] > o)) break;
            r[e] = r[a], n[e] = n[a], e = a
          }
          r[e] = i, n[e] = o
        }, t.prototype.reprioritize = function () {
          var t, e, r, n = this.priorityFunction_, i = this.elements_, o = this.priorities_, a = 0, s = i.length;
          for (e = 0; e < s; ++e) (r = n(t = i[e])) == 1 / 0 ? delete this.queuedElements_[this.keyFunction_(t)] : (o[a] = r, i[a++] = t);
          i.length = a, o.length = a, this.heapify_()
        }, t
      }(), ts = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), es = function (t) {
        function e(e, r) {
          var n = t.call(this, (function (t) {
            return e.apply(null, t)
          }), (function (t) {
            return t[0].getKey()
          })) || this;
          return n.boundHandleTileChange_ = n.handleTileChange.bind(n), n.tileChangeCallback_ = r, n.tilesLoading_ = 0, n.tilesLoadingKeys_ = {}, n
        }

        return ts(e, t), e.prototype.enqueue = function (e) {
          var r = t.prototype.enqueue.call(this, e);
          r && e[0].addEventListener(F, this.boundHandleTileChange_);
          return r
        }, e.prototype.getTilesLoading = function () {
          return this.tilesLoading_
        }, e.prototype.handleTileChange = function (t) {
          var e = t.target, r = e.getState();
          if (e.hifi && r === to || r === eo || r === ro) {
            e.removeEventListener(F, this.boundHandleTileChange_);
            var n = e.getKey();
            n in this.tilesLoadingKeys_ && (delete this.tilesLoadingKeys_[n], --this.tilesLoading_), this.tileChangeCallback_()
          }
        }, e.prototype.loadMoreTiles = function (t, e) {
          for (var r, n, i = 0; this.tilesLoading_ < t && i < e && this.getCount() > 0;) n = (r = this.dequeue()[0]).getKey(), r.getState() !== Ji || n in this.tilesLoadingKeys_ || (this.tilesLoadingKeys_[n] = !0, ++this.tilesLoading_, ++i, r.load())
        }, e
      }(Qa);

    function rs(t, e, r, n, i) {
      if (!t || !(r in t.wantedTiles)) return 1 / 0;
      if (!t.wantedTiles[r][e.getKey()]) return 1 / 0;
      var o = t.viewState.center, a = n[0] - o[0], s = n[1] - o[1];
      return 65536 * Math.log(i) + Math.sqrt(a * a + s * s) / i
    }

    var ns = 0, is = 1, os = "center", as = "resolution", ss = "rotation";

    function ls(t, e, r) {
      return function (n, i, o, a, s) {
        if (n) {
          var l = e ? 0 : o[0] * i, u = e ? 0 : o[1] * i, c = s ? s[0] : 0, h = s ? s[1] : 0, p = t[0] + l / 2 + c,
            f = t[2] - l / 2 + c, d = t[1] + u / 2 + h, g = t[3] - u / 2 + h;
          p > f && (f = p = (f + p) / 2), d > g && (g = d = (g + d) / 2);
          var y = Ne(n[0], p, f), m = Ne(n[1], d, g), v = 30 * i;
          return a && r && (y += -v * Math.log(1 + Math.max(0, p - n[0]) / v) + v * Math.log(1 + Math.max(0, n[0] - f) / v), m += -v * Math.log(1 + Math.max(0, d - n[1]) / v) + v * Math.log(1 + Math.max(0, n[1] - g) / v)), [y, m]
        }
      }
    }

    function us(t) {
      return t
    }

    function cs(t, e, r, n) {
      var i = Pe(e) / r[0], o = Ee(e) / r[1];
      return n ? Math.min(t, Math.max(i, o)) : Math.min(t, Math.min(i, o))
    }

    function hs(t, e, r) {
      var n = Math.min(t, e);
      return n *= Math.log(1 + 50 * Math.max(0, t / e - 1)) / 50 + 1, r && (n = Math.max(n, r), n /= Math.log(1 + 50 * Math.max(0, r / t - 1)) / 50 + 1), Ne(n, r / 2, 2 * e)
    }

    function ps(t, e, r, n) {
      return function (i, o, a, s) {
        if (void 0 !== i) {
          var l = t[0], u = t[t.length - 1], c = r ? cs(l, r, a, n) : l;
          if (s) return void 0 === e || e ? hs(i, c, u) : Ne(i, u, c);
          var h = Math.min(c, i), p = Math.floor(y(t, h, o));
          return t[p] > c && p < t.length - 1 ? t[p + 1] : t[p]
        }
      }
    }

    function fs(t, e, r, n, i, o) {
      return function (a, s, l, u) {
        if (void 0 !== a) {
          var c = i ? cs(e, i, l, o) : e, h = void 0 !== r ? r : 0;
          if (u) return void 0 === n || n ? hs(a, c, h) : Ne(a, h, c);
          var p = Math.ceil(Math.log(e / c) / Math.log(t) - 1e-9), f = -s * (.5 - 1e-9) + .5, d = Math.min(c, a),
            g = Math.floor(Math.log(e / d) / Math.log(t) + f), y = Math.max(p, g);
          return Ne(e / Math.pow(t, y), h, c)
        }
      }
    }

    function ds(t, e, r, n, i) {
      return function (o, a, s, l) {
        if (void 0 !== o) {
          var u = n ? cs(t, n, s, i) : t;
          return (void 0 === r || r) && l ? hs(o, u, e) : Ne(o, e, u)
        }
      }
    }

    function gs(t) {
      return void 0 !== t ? 0 : void 0
    }

    function ys(t) {
      return void 0 !== t ? t : void 0
    }

    function ms(t) {
      var e = 2 * Math.PI / t;
      return function (t, r) {
        return r ? t : void 0 !== t ? t = Math.floor(t / e + .5) * e : void 0
      }
    }

    function vs(t) {
      var e = t || Ye(5);
      return function (t, r) {
        return r ? t : void 0 !== t ? Math.abs(t) <= e ? 0 : t : void 0
      }
    }

    var _s = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function bs(t, e) {
      setTimeout((function () {
        t(e)
      }), 0)
    }

    function xs(t) {
      if (void 0 !== t.extent) {
        var e = void 0 === t.smoothExtentConstraint || t.smoothExtentConstraint;
        return ls(t.extent, t.constrainOnlyCenter, e)
      }
      var r = Vr(t.projection, "EPSG:3857");
      if (!0 !== t.multiWorld && r.isGlobal()) {
        var n = r.getExtent().slice();
        return n[0] = -1 / 0, n[2] = 1 / 0, ls(n, !1, !1)
      }
      return us
    }

    function ws(t) {
      var e, r, n, i = void 0 !== t.minZoom ? t.minZoom : 0, o = void 0 !== t.maxZoom ? t.maxZoom : 28,
        a = void 0 !== t.zoomFactor ? t.zoomFactor : 2, s = void 0 !== t.multiWorld && t.multiWorld,
        l = void 0 === t.smoothResolutionConstraint || t.smoothResolutionConstraint,
        u = void 0 !== t.showFullExtent && t.showFullExtent, c = Vr(t.projection, "EPSG:3857"), h = c.getExtent(),
        p = t.constrainOnlyCenter, f = t.extent;
      if (s || f || !c.isGlobal() || (p = !1, f = h), void 0 !== t.resolutions) {
        var d = t.resolutions;
        r = d[i], n = void 0 !== d[o] ? d[o] : d[d.length - 1], e = t.constrainResolution ? ps(d, l, !p && f, u) : ds(r, n, l, !p && f, u)
      } else {
        var g = (h ? Math.max(Pe(h), Ee(h)) : 360 * wt[St.DEGREES] / c.getMetersPerUnit()) / 256 / Math.pow(2, 0),
          y = g / Math.pow(2, 28);
        void 0 !== (r = t.maxResolution) ? i = 0 : r = g / Math.pow(a, i), void 0 === (n = t.minResolution) && (n = void 0 !== t.maxZoom ? void 0 !== t.maxResolution ? r / Math.pow(a, o) : g / Math.pow(a, o) : y), o = i + Math.floor(Math.log(r / n) / Math.log(a)), n = r / Math.pow(a, o - i), e = t.constrainResolution ? fs(a, r, n, l, !p && f, u) : ds(r, n, l, !p && f, u)
      }
      return {constraint: e, maxResolution: r, minResolution: n, minZoom: i, zoomFactor: a}
    }

    function Ss(t) {
      if (void 0 === t.enableRotation || t.enableRotation) {
        var e = t.constrainRotation;
        return void 0 === e || !0 === e ? vs() : !1 === e ? ys : "number" == typeof e ? ms(e) : ys
      }
      return gs
    }

    function Es(t) {
      return !(t.sourceCenter && t.targetCenter && !Cr(t.sourceCenter, t.targetCenter)) && (t.sourceResolution === t.targetResolution && t.sourceRotation === t.targetRotation)
    }

    function Ts(t, e, r, n, i) {
      var o = Math.cos(-i), a = Math.sin(-i), s = t[0] * o - t[1] * a, l = t[1] * o + t[0] * a;
      return [(s += (e[0] / 2 - r[0]) * n) * o - (l += (r[1] - e[1] / 2) * n) * (a = -a), l * o + s * a]
    }

    var Cs = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = O({}, e);
        return r.hints_ = [0, 0], r.animations_ = [], r.updateAnimationKey_, r.projection_ = Vr(n.projection, "EPSG:3857"), r.viewportSize_ = [100, 100], r.targetCenter_ = null, r.targetResolution_, r.targetRotation_, r.cancelAnchor_ = void 0, n.center && (n.center = rn(n.center, r.projection_)), n.extent && (n.extent = on(n.extent, r.projection_)), r.applyOptions_(n), r
      }

      return _s(e, t), e.prototype.applyOptions_ = function (t) {
        var e = ws(t);
        this.maxResolution_ = e.maxResolution, this.minResolution_ = e.minResolution, this.zoomFactor_ = e.zoomFactor, this.resolutions_ = t.resolutions, this.padding = t.padding, this.minZoom_ = e.minZoom;
        var r = xs(t), n = e.constraint, i = Ss(t);
        this.constraints_ = {
          center: r,
          resolution: n,
          rotation: i
        }, this.setRotation(void 0 !== t.rotation ? t.rotation : 0), this.setCenterInternal(void 0 !== t.center ? t.center : null), void 0 !== t.resolution ? this.setResolution(t.resolution) : void 0 !== t.zoom && this.setZoom(t.zoom), this.setProperties({}), this.options_ = t
      }, e.prototype.getUpdatedOptions_ = function (t) {
        var e = O({}, this.options_);
        return void 0 !== e.resolution ? e.resolution = this.getResolution() : e.zoom = this.getZoom(), e.center = this.getCenterInternal(), e.rotation = this.getRotation(), O({}, e, t)
      }, e.prototype.animate = function (t) {
        this.isDef() && !this.getAnimating() && this.resolveConstraints(0);
        for (var e = new Array(arguments.length), r = 0; r < e.length; ++r) {
          var n = arguments[r];
          n.center && ((n = O({}, n)).center = rn(n.center, this.getProjection())), n.anchor && ((n = O({}, n)).anchor = rn(n.anchor, this.getProjection())), e[r] = n
        }
        this.animateInternal.apply(this, e)
      }, e.prototype.animateInternal = function (t) {
        var e, r = arguments.length;
        if (r > 1 && "function" == typeof arguments[r - 1] && (e = arguments[r - 1], --r), !this.isDef()) {
          var n = arguments[r - 1];
          return n.center && this.setCenterInternal(n.center), void 0 !== n.zoom && this.setZoom(n.zoom), void 0 !== n.rotation && this.setRotation(n.rotation), void (e && bs(e, !0))
        }
        for (var i = Date.now(), o = this.targetCenter_.slice(), a = this.targetResolution_, s = this.targetRotation_, l = [], u = 0; u < r; ++u) {
          var c = arguments[u], h = {
            start: i,
            complete: !1,
            anchor: c.anchor,
            duration: void 0 !== c.duration ? c.duration : 1e3,
            easing: c.easing || oo,
            callback: e
          };
          if (c.center && (h.sourceCenter = o, h.targetCenter = c.center.slice(), o = h.targetCenter), void 0 !== c.zoom ? (h.sourceResolution = a, h.targetResolution = this.getResolutionForZoom(c.zoom), a = h.targetResolution) : c.resolution && (h.sourceResolution = a, h.targetResolution = c.resolution, a = h.targetResolution), void 0 !== c.rotation) {
            h.sourceRotation = s;
            var p = We(c.rotation - s + Math.PI, 2 * Math.PI) - Math.PI;
            h.targetRotation = s + p, s = h.targetRotation
          }
          Es(h) ? h.complete = !0 : i += h.duration, l.push(h)
        }
        this.animations_.push(l), this.setHint(ns, 1), this.updateAnimations_()
      }, e.prototype.getAnimating = function () {
        return this.hints_[ns] > 0
      }, e.prototype.getInteracting = function () {
        return this.hints_[is] > 0
      }, e.prototype.cancelAnimations = function () {
        var t;
        this.setHint(ns, -this.hints_[ns]);
        for (var e = 0, r = this.animations_.length; e < r; ++e) {
          var n = this.animations_[e];
          if (n[0].callback && bs(n[0].callback, !1), !t) for (var i = 0, o = n.length; i < o; ++i) {
            var a = n[i];
            if (!a.complete) {
              t = a.anchor;
              break
            }
          }
        }
        this.animations_.length = 0, this.cancelAnchor_ = t
      }, e.prototype.updateAnimations_ = function () {
        if (void 0 !== this.updateAnimationKey_ && (cancelAnimationFrame(this.updateAnimationKey_), this.updateAnimationKey_ = void 0), this.getAnimating()) {
          for (var t = Date.now(), e = !1, r = this.animations_.length - 1; r >= 0; --r) {
            for (var n = this.animations_[r], i = !0, o = 0, a = n.length; o < a; ++o) {
              var s = n[o];
              if (!s.complete) {
                var l = t - s.start, u = s.duration > 0 ? l / s.duration : 1;
                u >= 1 ? (s.complete = !0, u = 1) : i = !1;
                var c = s.easing(u);
                if (s.sourceCenter) {
                  var h = s.sourceCenter[0], p = s.sourceCenter[1], f = h + c * (s.targetCenter[0] - h),
                    d = p + c * (s.targetCenter[1] - p);
                  this.targetCenter_ = [f, d]
                }
                if (s.sourceResolution && s.targetResolution) {
                  var g = 1 === c ? s.targetResolution : s.sourceResolution + c * (s.targetResolution - s.sourceResolution);
                  if (s.anchor) {
                    var y = this.getViewportSize_(this.getRotation()), m = this.constraints_.resolution(g, 0, y, !0);
                    this.targetCenter_ = this.calculateCenterZoom(m, s.anchor)
                  }
                  this.targetResolution_ = g, this.applyTargetState_(!0)
                }
                if (void 0 !== s.sourceRotation && void 0 !== s.targetRotation) {
                  var v = 1 === c ? We(s.targetRotation + Math.PI, 2 * Math.PI) - Math.PI : s.sourceRotation + c * (s.targetRotation - s.sourceRotation);
                  if (s.anchor) {
                    var _ = this.constraints_.rotation(v, !0);
                    this.targetCenter_ = this.calculateCenterRotate(_, s.anchor)
                  }
                  this.targetRotation_ = v
                }
                if (this.applyTargetState_(!0), e = !0, !s.complete) break
              }
            }
            if (i) {
              this.animations_[r] = null, this.setHint(ns, -1);
              var b = n[0].callback;
              b && bs(b, !0)
            }
          }
          this.animations_ = this.animations_.filter(Boolean), e && void 0 === this.updateAnimationKey_ && (this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this)))
        }
      }, e.prototype.calculateCenterRotate = function (t, e) {
        var r, n = this.getCenterInternal();
        return void 0 !== n && (Or(r = [n[0] - e[0], n[1] - e[1]], t - this.getRotation()), xr(r, e)), r
      }, e.prototype.calculateCenterZoom = function (t, e) {
        var r, n = this.getCenterInternal(), i = this.getResolution();
        void 0 !== n && void 0 !== i && (r = [e[0] - t * (e[0] - n[0]) / i, e[1] - t * (e[1] - n[1]) / i]);
        return r
      }, e.prototype.getViewportSize_ = function (t) {
        var e = this.viewportSize_;
        if (t) {
          var r = e[0], n = e[1];
          return [Math.abs(r * Math.cos(t)) + Math.abs(n * Math.sin(t)), Math.abs(r * Math.sin(t)) + Math.abs(n * Math.cos(t))]
        }
        return e
      }, e.prototype.setViewportSize = function (t) {
        this.viewportSize_ = Array.isArray(t) ? t.slice() : [100, 100], this.getAnimating() || this.resolveConstraints(0)
      }, e.prototype.getCenter = function () {
        var t = this.getCenterInternal();
        return t ? en(t, this.getProjection()) : t
      }, e.prototype.getCenterInternal = function () {
        return this.get(os)
      }, e.prototype.getConstraints = function () {
        return this.constraints_
      }, e.prototype.getConstrainResolution = function () {
        return this.options_.constrainResolution
      }, e.prototype.getHints = function (t) {
        return void 0 !== t ? (t[0] = this.hints_[0], t[1] = this.hints_[1], t) : this.hints_.slice()
      }, e.prototype.calculateExtent = function (t) {
        return nn(this.calculateExtentInternal(t), this.getProjection())
      }, e.prototype.calculateExtentInternal = function (t) {
        var e = t || this.getViewportSize_(), r = this.getCenterInternal();
        pt(r, 1);
        var n = this.getResolution();
        pt(void 0 !== n, 2);
        var i = this.getRotation();
        return pt(void 0 !== i, 3), Se(r, n, i, e)
      }, e.prototype.getMaxResolution = function () {
        return this.maxResolution_
      }, e.prototype.getMinResolution = function () {
        return this.minResolution_
      }, e.prototype.getMaxZoom = function () {
        return this.getZoomForResolution(this.minResolution_)
      }, e.prototype.setMaxZoom = function (t) {
        this.applyOptions_(this.getUpdatedOptions_({maxZoom: t}))
      }, e.prototype.getMinZoom = function () {
        return this.getZoomForResolution(this.maxResolution_)
      }, e.prototype.setMinZoom = function (t) {
        this.applyOptions_(this.getUpdatedOptions_({minZoom: t}))
      }, e.prototype.setConstrainResolution = function (t) {
        this.applyOptions_(this.getUpdatedOptions_({constrainResolution: t}))
      }, e.prototype.getProjection = function () {
        return this.projection_
      }, e.prototype.getResolution = function () {
        return this.get(as)
      }, e.prototype.getResolutions = function () {
        return this.resolutions_
      }, e.prototype.getResolutionForExtent = function (t, e) {
        return this.getResolutionForExtentInternal(on(t, this.getProjection()), e)
      }, e.prototype.getResolutionForExtentInternal = function (t, e) {
        var r = e || this.getViewportSize_(), n = Pe(t) / r[0], i = Ee(t) / r[1];
        return Math.max(n, i)
      }, e.prototype.getResolutionForValueFunction = function (t) {
        var e = t || 2, r = this.getConstrainedResolution(this.maxResolution_), n = this.minResolution_,
          i = Math.log(r / n) / Math.log(e);
        return function (t) {
          return r / Math.pow(e, t * i)
        }
      }, e.prototype.getRotation = function () {
        return this.get(ss)
      }, e.prototype.getValueForResolutionFunction = function (t) {
        var e = Math.log(t || 2), r = this.getConstrainedResolution(this.maxResolution_), n = this.minResolution_,
          i = Math.log(r / n) / e;
        return function (t) {
          return Math.log(r / t) / e / i
        }
      }, e.prototype.getViewportSizeMinusPadding_ = function (t) {
        var e = this.getViewportSize_(t), r = this.padding;
        return r && (e = [e[0] - r[1] - r[3], e[1] - r[0] - r[2]]), e
      }, e.prototype.getState = function () {
        var t = this.getProjection(), e = this.getResolution(), r = this.getRotation(), n = this.getCenterInternal(),
          i = this.padding;
        if (i) {
          var o = this.getViewportSizeMinusPadding_();
          n = Ts(n, this.getViewportSize_(), [o[0] / 2 + i[3], o[1] / 2 + i[0]], e, r)
        }
        return {
          center: n.slice(0),
          projection: void 0 !== t ? t : null,
          resolution: e,
          rotation: r,
          zoom: this.getZoom()
        }
      }, e.prototype.getZoom = function () {
        var t, e = this.getResolution();
        return void 0 !== e && (t = this.getZoomForResolution(e)), t
      }, e.prototype.getZoomForResolution = function (t) {
        var e, r, n = this.minZoom_ || 0;
        if (this.resolutions_) {
          var i = y(this.resolutions_, t, 1);
          n = i, e = this.resolutions_[i], r = i == this.resolutions_.length - 1 ? 2 : e / this.resolutions_[i + 1]
        } else e = this.maxResolution_, r = this.zoomFactor_;
        return n + Math.log(e / t) / Math.log(r)
      }, e.prototype.getResolutionForZoom = function (t) {
        if (this.resolutions_) {
          if (this.resolutions_.length <= 1) return 0;
          var e = Ne(Math.floor(t), 0, this.resolutions_.length - 2),
            r = this.resolutions_[e] / this.resolutions_[e + 1];
          return this.resolutions_[e] / Math.pow(r, Ne(t - e, 0, 1))
        }
        return this.maxResolution_ / Math.pow(this.zoomFactor_, t - this.minZoom_)
      }, e.prototype.fit = function (t, e) {
        var r;
        if (pt(Array.isArray(t) || "function" == typeof t.getSimplifiedGeometry, 24), Array.isArray(t)) pt(!Ie(t), 25), r = gi(n = on(t, this.getProjection())); else if (t.getType() === bt.CIRCLE) {
          var n;
          (r = gi(n = on(t.getExtent(), this.getProjection()))).rotate(this.getRotation(), xe(n))
        } else {
          var i = tn();
          r = i ? t.clone().transform(i, this.getProjection()) : t
        }
        this.fitInternal(r, e)
      }, e.prototype.fitInternal = function (t, e) {
        var r = e || {}, n = r.size;
        n || (n = this.getViewportSizeMinusPadding_());
        var i, o = void 0 !== r.padding ? r.padding : [0, 0, 0, 0], a = void 0 !== r.nearest && r.nearest;
        i = void 0 !== r.minResolution ? r.minResolution : void 0 !== r.maxZoom ? this.getResolutionForZoom(r.maxZoom) : 0;
        for (var s = t.getFlatCoordinates(), l = this.getRotation(), u = Math.cos(-l), c = Math.sin(-l), h = 1 / 0, p = 1 / 0, f = -1 / 0, d = -1 / 0, g = t.getStride(), y = 0, m = s.length; y < m; y += g) {
          var v = s[y] * u - s[y + 1] * c, _ = s[y] * c + s[y + 1] * u;
          h = Math.min(h, v), p = Math.min(p, _), f = Math.max(f, v), d = Math.max(d, _)
        }
        var b = this.getResolutionForExtentInternal([h, p, f, d], [n[0] - o[1] - o[3], n[1] - o[0] - o[2]]);
        b = isNaN(b) ? i : Math.max(b, i), b = this.getConstrainedResolution(b, a ? 0 : 1), c = -c;
        var x = (h + f) / 2, w = (p + d) / 2, S = (x += (o[1] - o[3]) / 2 * b) * u - (w += (o[0] - o[2]) / 2 * b) * c,
          E = w * u + x * c, C = this.getConstrainedCenter([S, E], b), O = r.callback ? r.callback : T;
        void 0 !== r.duration ? this.animateInternal({
          resolution: b,
          center: C,
          duration: r.duration,
          easing: r.easing
        }, O) : (this.targetResolution_ = b, this.targetCenter_ = C, this.applyTargetState_(!1, !0), bs(O, !0))
      }, e.prototype.centerOn = function (t, e, r) {
        this.centerOnInternal(rn(t, this.getProjection()), e, r)
      }, e.prototype.centerOnInternal = function (t, e, r) {
        this.setCenterInternal(Ts(t, e, r, this.getResolution(), this.getRotation()))
      }, e.prototype.calculateCenterShift = function (t, e, r, n) {
        var i, o = this.padding;
        if (o && t) {
          var a = this.getViewportSizeMinusPadding_(-r), s = Ts(t, n, [a[0] / 2 + o[3], a[1] / 2 + o[0]], e, r);
          i = [t[0] - s[0], t[1] - s[1]]
        }
        return i
      }, e.prototype.isDef = function () {
        return !!this.getCenterInternal() && void 0 !== this.getResolution()
      }, e.prototype.adjustCenter = function (t) {
        var e = en(this.targetCenter_, this.getProjection());
        this.setCenter([e[0] + t[0], e[1] + t[1]])
      }, e.prototype.adjustCenterInternal = function (t) {
        var e = this.targetCenter_;
        this.setCenterInternal([e[0] + t[0], e[1] + t[1]])
      }, e.prototype.adjustResolution = function (t, e) {
        var r = e && rn(e, this.getProjection());
        this.adjustResolutionInternal(t, r)
      }, e.prototype.adjustResolutionInternal = function (t, e) {
        var r = this.getAnimating() || this.getInteracting(), n = this.getViewportSize_(this.getRotation()),
          i = this.constraints_.resolution(this.targetResolution_ * t, 0, n, r);
        e && (this.targetCenter_ = this.calculateCenterZoom(i, e)), this.targetResolution_ *= t, this.applyTargetState_()
      }, e.prototype.adjustZoom = function (t, e) {
        this.adjustResolution(Math.pow(this.zoomFactor_, -t), e)
      }, e.prototype.adjustRotation = function (t, e) {
        e && (e = rn(e, this.getProjection())), this.adjustRotationInternal(t, e)
      }, e.prototype.adjustRotationInternal = function (t, e) {
        var r = this.getAnimating() || this.getInteracting(),
          n = this.constraints_.rotation(this.targetRotation_ + t, r);
        e && (this.targetCenter_ = this.calculateCenterRotate(n, e)), this.targetRotation_ += t, this.applyTargetState_()
      }, e.prototype.setCenter = function (t) {
        this.setCenterInternal(rn(t, this.getProjection()))
      }, e.prototype.setCenterInternal = function (t) {
        this.targetCenter_ = t, this.applyTargetState_()
      }, e.prototype.setHint = function (t, e) {
        return this.hints_[t] += e, this.changed(), this.hints_[t]
      }, e.prototype.setResolution = function (t) {
        this.targetResolution_ = t, this.applyTargetState_()
      }, e.prototype.setRotation = function (t) {
        this.targetRotation_ = t, this.applyTargetState_()
      }, e.prototype.setZoom = function (t) {
        this.setResolution(this.getResolutionForZoom(t))
      }, e.prototype.applyTargetState_ = function (t, e) {
        var r = this.getAnimating() || this.getInteracting() || e,
          n = this.constraints_.rotation(this.targetRotation_, r), i = this.getViewportSize_(n),
          o = this.constraints_.resolution(this.targetResolution_, 0, i, r),
          a = this.constraints_.center(this.targetCenter_, o, i, r, this.calculateCenterShift(this.targetCenter_, o, n, i));
        this.get(ss) !== n && this.set(ss, n), this.get(as) !== o && this.set(as, o), this.get(os) && Cr(this.get(os), a) || this.set(os, a), this.getAnimating() && !t && this.cancelAnimations(), this.cancelAnchor_ = void 0
      }, e.prototype.resolveConstraints = function (t, e, r) {
        var n = void 0 !== t ? t : 200, i = e || 0, o = this.constraints_.rotation(this.targetRotation_),
          a = this.getViewportSize_(o), s = this.constraints_.resolution(this.targetResolution_, i, a),
          l = this.constraints_.center(this.targetCenter_, s, a, !1, this.calculateCenterShift(this.targetCenter_, s, o, a));
        if (0 === n && !this.cancelAnchor_) return this.targetResolution_ = s, this.targetRotation_ = o, this.targetCenter_ = l, void this.applyTargetState_();
        var u = r || (0 === n ? this.cancelAnchor_ : void 0);
        this.cancelAnchor_ = void 0, this.getResolution() === s && this.getRotation() === o && this.getCenterInternal() && Cr(this.getCenterInternal(), l) || (this.getAnimating() && this.cancelAnimations(), this.animateInternal({
          rotation: o,
          center: l,
          resolution: s,
          duration: n,
          easing: io,
          anchor: u
        }))
      }, e.prototype.beginInteraction = function () {
        this.resolveConstraints(0), this.setHint(is, 1)
      }, e.prototype.endInteraction = function (t, e, r) {
        var n = r && rn(r, this.getProjection());
        this.endInteractionInternal(t, e, n)
      }, e.prototype.endInteractionInternal = function (t, e, r) {
        this.setHint(is, -1), this.resolveConstraints(t, e, r)
      }, e.prototype.getConstrainedCenter = function (t, e) {
        var r = this.getViewportSize_(this.getRotation());
        return this.constraints_.center(t, e || this.getResolution(), r)
      }, e.prototype.getConstrainedZoom = function (t, e) {
        var r = this.getResolutionForZoom(t);
        return this.getZoomForResolution(this.getConstrainedResolution(r, e))
      }, e.prototype.getConstrainedResolution = function (t, e) {
        var r = e || 0, n = this.getViewportSize_(this.getRotation());
        return this.constraints_.resolution(t, r, n)
      }, e
    }(ot);

    function Os(t, e, r) {
      return void 0 === r && (r = [0, 0]), r[0] = t[0] + 2 * e, r[1] = t[1] + 2 * e, r
    }

    function Ps(t) {
      return t[0] > 0 && t[1] > 0
    }

    function Rs(t, e, r) {
      return void 0 === r && (r = [0, 0]), r[0] = t[0] * e + .5 | 0, r[1] = t[1] * e + .5 | 0, r
    }

    function Is(t, e) {
      return Array.isArray(t) ? t : (void 0 === e ? e = [t, t] : (e[0] = t, e[1] = t), e)
    }

    var Ls = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();
    var Ms = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = function (t) {
          var e = null;
          void 0 !== t.keyboardEventTarget && (e = "string" == typeof t.keyboardEventTarget ? document.getElementById(t.keyboardEventTarget) : t.keyboardEventTarget);
          var r, n, i, o = {},
            a = t.layers && "function" == typeof t.layers.getLayers ? t.layers : new Aa({layers: t.layers});
          o[Ka] = a, o[$a] = t.target, o[Ja] = void 0 !== t.view ? t.view : new Cs, void 0 !== t.controls && (Array.isArray(t.controls) ? r = new ht(t.controls.slice()) : (pt("function" == typeof t.controls.getArray, 47), r = t.controls));
          void 0 !== t.interactions && (Array.isArray(t.interactions) ? n = new ht(t.interactions.slice()) : (pt("function" == typeof t.interactions.getArray, 48), n = t.interactions));
          void 0 !== t.overlays ? Array.isArray(t.overlays) ? i = new ht(t.overlays.slice()) : (pt("function" == typeof t.overlays.getArray, 49), i = t.overlays) : i = new ht;
          return {controls: r, interactions: n, keyboardEventTarget: e, overlays: i, values: o}
        }(e);
        return r.boundHandleBrowserEvent_ = r.handleBrowserEvent.bind(r), r.maxTilesLoading_ = void 0 !== e.maxTilesLoading ? e.maxTilesLoading : 16, r.pixelRatio_ = void 0 !== e.pixelRatio ? e.pixelRatio : Vi, r.postRenderTimeoutHandle_, r.animationDelayKey_, r.animationDelay_ = function () {
          this.animationDelayKey_ = void 0, this.renderFrame_(Date.now())
        }.bind(r), r.coordinateToPixelTransform_ = [1, 0, 0, 1, 0, 0], r.pixelToCoordinateTransform_ = [1, 0, 0, 1, 0, 0], r.frameIndex_ = 0, r.frameState_ = null, r.previousExtent_ = null, r.viewPropertyListenerKey_ = null, r.viewChangeListenerKey_ = null, r.layerGroupPropertyListenerKeys_ = null, r.viewport_ = document.createElement("div"), r.viewport_.className = "ol-viewport" + ("ontouchstart" in window ? " ol-touch" : ""), r.viewport_.style.position = "relative", r.viewport_.style.overflow = "hidden", r.viewport_.style.width = "100%", r.viewport_.style.height = "100%", r.overlayContainer_ = document.createElement("div"), r.overlayContainer_.style.position = "absolute", r.overlayContainer_.style.zIndex = "0", r.overlayContainer_.style.width = "100%", r.overlayContainer_.style.height = "100%", r.overlayContainer_.style.pointerEvents = "none", r.overlayContainer_.className = "ol-overlaycontainer", r.viewport_.appendChild(r.overlayContainer_), r.overlayContainerStopEvent_ = document.createElement("div"), r.overlayContainerStopEvent_.style.position = "absolute", r.overlayContainerStopEvent_.style.zIndex = "0", r.overlayContainerStopEvent_.style.width = "100%", r.overlayContainerStopEvent_.style.height = "100%", r.overlayContainerStopEvent_.style.pointerEvents = "none", r.overlayContainerStopEvent_.className = "ol-overlaycontainer-stopevent", r.viewport_.appendChild(r.overlayContainerStopEvent_), r.mapBrowserEventHandler_ = null, r.moveTolerance_ = e.moveTolerance, r.keyboardEventTarget_ = n.keyboardEventTarget, r.keyHandlerKeys_ = null, r.controls = n.controls || new ht, r.interactions = n.interactions || new ht, r.overlays_ = n.overlays, r.overlayIdIndex_ = {}, r.renderer_ = null, r.handleResize_, r.postRenderFunctions_ = [], r.tileQueue_ = new es(r.getTilePriority.bind(r), r.handleTileChange_.bind(r)), r.addEventListener(it(Ka), r.handleLayerGroupChanged_), r.addEventListener(it(Ja), r.handleViewChanged_), r.addEventListener(it(Ha), r.handleSizeChanged_), r.addEventListener(it($a), r.handleTargetChanged_), r.setProperties(n.values), r.controls.forEach(function (t) {
          t.setMap(this)
        }.bind(r)), r.controls.addEventListener(at, function (t) {
          t.element.setMap(this)
        }.bind(r)), r.controls.addEventListener(st, function (t) {
          t.element.setMap(null)
        }.bind(r)), r.interactions.forEach(function (t) {
          t.setMap(this)
        }.bind(r)), r.interactions.addEventListener(at, function (t) {
          t.element.setMap(this)
        }.bind(r)), r.interactions.addEventListener(st, function (t) {
          t.element.setMap(null)
        }.bind(r)), r.overlays_.forEach(r.addOverlayInternal_.bind(r)), r.overlays_.addEventListener(at, function (t) {
          this.addOverlayInternal_(t.element)
        }.bind(r)), r.overlays_.addEventListener(st, function (t) {
          var e = t.element.getId();
          void 0 !== e && delete this.overlayIdIndex_[e.toString()], t.element.setMap(null)
        }.bind(r)), r
      }

      return Ls(e, t), e.prototype.createRenderer = function () {
        throw new Error("Use a map type that has a createRenderer method")
      }, e.prototype.addControl = function (t) {
        this.getControls().push(t)
      }, e.prototype.addInteraction = function (t) {
        this.getInteractions().push(t)
      }, e.prototype.addLayer = function (t) {
        this.getLayerGroup().getLayers().push(t)
      }, e.prototype.addOverlay = function (t) {
        this.getOverlays().push(t)
      }, e.prototype.addOverlayInternal_ = function (t) {
        var e = t.getId();
        void 0 !== e && (this.overlayIdIndex_[e.toString()] = t), t.setMap(this)
      }, e.prototype.disposeInternal = function () {
        this.setTarget(null), t.prototype.disposeInternal.call(this)
      }, e.prototype.forEachFeatureAtPixel = function (t, e, r) {
        if (this.frameState_) {
          var n = this.getCoordinateFromPixelInternal(t),
            i = void 0 !== (r = void 0 !== r ? r : {}).hitTolerance ? r.hitTolerance : 0,
            o = void 0 !== r.layerFilter ? r.layerFilter : S, a = !1 !== r.checkWrapped;
          return this.renderer_.forEachFeatureAtCoordinate(n, this.frameState_, i, a, e, null, o, null)
        }
      }, e.prototype.getFeaturesAtPixel = function (t, e) {
        var r = [];
        return this.forEachFeatureAtPixel(t, (function (t) {
          r.push(t)
        }), e), r
      }, e.prototype.forEachLayerAtPixel = function (t, e, r) {
        if (this.frameState_) {
          var n = r || {}, i = void 0 !== n.hitTolerance ? n.hitTolerance : 0, o = n.layerFilter || S;
          return this.renderer_.forEachLayerAtPixel(t, this.frameState_, i, e, o)
        }
      }, e.prototype.hasFeatureAtPixel = function (t, e) {
        if (!this.frameState_) return !1;
        var r = this.getCoordinateFromPixelInternal(t),
          n = void 0 !== (e = void 0 !== e ? e : {}).layerFilter ? e.layerFilter : S,
          i = void 0 !== e.hitTolerance ? e.hitTolerance : 0, o = !1 !== e.checkWrapped;
        return this.renderer_.hasFeatureAtCoordinate(r, this.frameState_, i, o, n, null)
      }, e.prototype.getEventCoordinate = function (t) {
        return this.getCoordinateFromPixel(this.getEventPixel(t))
      }, e.prototype.getEventCoordinateInternal = function (t) {
        return this.getCoordinateFromPixelInternal(this.getEventPixel(t))
      }, e.prototype.getEventPixel = function (t) {
        var e = this.viewport_.getBoundingClientRect(), r = "changedTouches" in t ? t.changedTouches[0] : t;
        return [r.clientX - e.left, r.clientY - e.top]
      }, e.prototype.getTarget = function () {
        return this.get($a)
      }, e.prototype.getTargetElement = function () {
        var t = this.getTarget();
        return void 0 !== t ? "string" == typeof t ? document.getElementById(t) : t : null
      }, e.prototype.getCoordinateFromPixel = function (t) {
        return en(this.getCoordinateFromPixelInternal(t), this.getView().getProjection())
      }, e.prototype.getCoordinateFromPixelInternal = function (t) {
        var e = this.frameState_;
        return e ? It(e.pixelToCoordinateTransform, t.slice()) : null
      }, e.prototype.getControls = function () {
        return this.controls
      }, e.prototype.getOverlays = function () {
        return this.overlays_
      }, e.prototype.getOverlayById = function (t) {
        var e = this.overlayIdIndex_[t.toString()];
        return void 0 !== e ? e : null
      }, e.prototype.getInteractions = function () {
        return this.interactions
      }, e.prototype.getLayerGroup = function () {
        return this.get(Ka)
      }, e.prototype.getLayers = function () {
        return this.getLayerGroup().getLayers()
      }, e.prototype.getLoading = function () {
        for (var t = this.getLayerGroup().getLayerStatesArray(), e = 0, r = t.length; e < r; ++e) {
          var n = t[e].layer.getSource();
          if (n && n.loading) return !0
        }
        return !1
      }, e.prototype.getPixelFromCoordinate = function (t) {
        var e = rn(t, this.getView().getProjection());
        return this.getPixelFromCoordinateInternal(e)
      }, e.prototype.getPixelFromCoordinateInternal = function (t) {
        var e = this.frameState_;
        return e ? It(e.coordinateToPixelTransform, t.slice(0, 2)) : null
      }, e.prototype.getRenderer = function () {
        return this.renderer_
      }, e.prototype.getSize = function () {
        return this.get(Ha)
      }, e.prototype.getView = function () {
        return this.get(Ja)
      }, e.prototype.getViewport = function () {
        return this.viewport_
      }, e.prototype.getOverlayContainer = function () {
        return this.overlayContainer_
      }, e.prototype.getOverlayContainerStopEvent = function () {
        return this.overlayContainerStopEvent_
      }, e.prototype.getOwnerDocument = function () {
        return this.getTargetElement() ? this.getTargetElement().ownerDocument : document
      }, e.prototype.getTilePriority = function (t, e, r, n) {
        return rs(this.frameState_, t, e, r, n)
      }, e.prototype.handleBrowserEvent = function (t, e) {
        var r = e || t.type, n = new Da(r, this, t);
        this.handleMapBrowserEvent(n)
      }, e.prototype.handleMapBrowserEvent = function (t) {
        if (this.frameState_) {
          var e = t.originalEvent, r = e.type;
          if (r === Ua || r === X || r === B) {
            var n = this.getOwnerDocument(), i = this.viewport_.getRootNode ? this.viewport_.getRootNode() : n,
              o = "host" in i ? i.elementFromPoint(e.clientX, e.clientY) : e.target;
            if (this.overlayContainerStopEvent_.contains(o) || !(i === n ? n.documentElement : i).contains(o)) return
          }
          if (t.frameState = this.frameState_, !1 !== this.dispatchEvent(t)) for (var a = this.getInteractions().getArray().slice(), s = a.length - 1; s >= 0; s--) {
            var l = a[s];
            if (l.getMap() === this && l.getActive() && this.getTargetElement()) if (!l.handleEvent(t) || t.propagationStopped) break
          }
        }
      }, e.prototype.handlePostRender = function () {
        var t = this.frameState_, e = this.tileQueue_;
        if (!e.isEmpty()) {
          var r = this.maxTilesLoading_, n = r;
          if (t) {
            var i = t.viewHints;
            if (i[ns] || i[is]) {
              var o = !Wi && Date.now() - t.time > 8;
              r = o ? 0 : 8, n = o ? 0 : 2
            }
          }
          e.getTilesLoading() < r && (e.reprioritize(), e.loadMoreTiles(r, n))
        }
        !t || !this.hasListener(Ho) || t.animate || this.tileQueue_.getTilesLoading() || this.getLoading() || this.renderer_.dispatchRenderEvent(Ho, t);
        for (var a = this.postRenderFunctions_, s = 0, l = a.length; s < l; ++s) a[s](this, t);
        a.length = 0
      }, e.prototype.handleSizeChanged_ = function () {
        this.getView() && !this.getView().getAnimating() && this.getView().resolveConstraints(0), this.render()
      }, e.prototype.handleTargetChanged_ = function () {
        var t;
        if (this.getTarget() && (t = this.getTargetElement()), this.mapBrowserEventHandler_) {
          for (var e = 0, r = this.keyHandlerKeys_.length; e < r; ++e) H(this.keyHandlerKeys_[e]);
          this.keyHandlerKeys_ = null, this.viewport_.removeEventListener(j, this.boundHandleBrowserEvent_), this.viewport_.removeEventListener(X, this.boundHandleBrowserEvent_), void 0 !== this.handleResize_ && (removeEventListener(W, this.handleResize_, !1), this.handleResize_ = void 0), this.mapBrowserEventHandler_.dispose(), this.mapBrowserEventHandler_ = null, fo(this.viewport_)
        }
        if (t) {
          for (var n in t.appendChild(this.viewport_), this.renderer_ || (this.renderer_ = this.createRenderer()), this.mapBrowserEventHandler_ = new Wa(this, this.moveTolerance_), Ga) this.mapBrowserEventHandler_.addEventListener(Ga[n], this.handleMapBrowserEvent.bind(this));
          this.viewport_.addEventListener(j, this.boundHandleBrowserEvent_, !1), this.viewport_.addEventListener(X, this.boundHandleBrowserEvent_, !!qi && {passive: !1});
          var i = this.keyboardEventTarget_ ? this.keyboardEventTarget_ : t;
          this.keyHandlerKeys_ = [Z(i, B, this.handleBrowserEvent, this), Z(i, V, this.handleBrowserEvent, this)], this.handleResize_ || (this.handleResize_ = this.updateSize.bind(this), window.addEventListener(W, this.handleResize_, !1))
        } else this.renderer_ && (clearTimeout(this.postRenderTimeoutHandle_), this.postRenderTimeoutHandle_ = void 0, this.postRenderFunctions_.length = 0, this.renderer_.dispose(), this.renderer_ = null), this.animationDelayKey_ && (cancelAnimationFrame(this.animationDelayKey_), this.animationDelayKey_ = void 0);
        this.updateSize()
      }, e.prototype.handleTileChange_ = function () {
        this.render()
      }, e.prototype.handleViewPropertyChanged_ = function () {
        this.render()
      }, e.prototype.handleViewChanged_ = function () {
        this.viewPropertyListenerKey_ && (H(this.viewPropertyListenerKey_), this.viewPropertyListenerKey_ = null), this.viewChangeListenerKey_ && (H(this.viewChangeListenerKey_), this.viewChangeListenerKey_ = null);
        var t = this.getView();
        t && (this.updateViewportSize_(), this.viewPropertyListenerKey_ = Z(t, h, this.handleViewPropertyChanged_, this), this.viewChangeListenerKey_ = Z(t, F, this.handleViewPropertyChanged_, this), t.resolveConstraints(0)), this.render()
      }, e.prototype.handleLayerGroupChanged_ = function () {
        this.layerGroupPropertyListenerKeys_ && (this.layerGroupPropertyListenerKeys_.forEach(H), this.layerGroupPropertyListenerKeys_ = null);
        var t = this.getLayerGroup();
        t && (this.layerGroupPropertyListenerKeys_ = [Z(t, h, this.render, this), Z(t, F, this.render, this)]), this.render()
      }, e.prototype.isRendered = function () {
        return !!this.frameState_
      }, e.prototype.renderSync = function () {
        this.animationDelayKey_ && cancelAnimationFrame(this.animationDelayKey_), this.animationDelay_()
      }, e.prototype.redrawText = function () {
        for (var t = this.getLayerGroup().getLayerStatesArray(), e = 0, r = t.length; e < r; ++e) {
          var n = t[e].layer;
          n.hasRenderer() && n.getRenderer().handleFontsChanged()
        }
      }, e.prototype.render = function () {
        this.renderer_ && void 0 === this.animationDelayKey_ && (this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_))
      }, e.prototype.removeControl = function (t) {
        return this.getControls().remove(t)
      }, e.prototype.removeInteraction = function (t) {
        return this.getInteractions().remove(t)
      }, e.prototype.removeLayer = function (t) {
        return this.getLayerGroup().getLayers().remove(t)
      }, e.prototype.removeOverlay = function (t) {
        return this.getOverlays().remove(t)
      }, e.prototype.renderFrame_ = function (t) {
        var e = this, r = this.getSize(), n = this.getView(), i = this.frameState_, o = null;
        if (void 0 !== r && Ps(r) && n && n.isDef()) {
          var a = n.getHints(this.frameState_ ? this.frameState_.viewHints : void 0), s = n.getState();
          o = {
            animate: !1,
            coordinateToPixelTransform: this.coordinateToPixelTransform_,
            declutterTree: null,
            extent: Se(s.center, s.resolution, s.rotation, r),
            index: this.frameIndex_++,
            layerIndex: 0,
            layerStatesArray: this.getLayerGroup().getLayerStatesArray(),
            pixelRatio: this.pixelRatio_,
            pixelToCoordinateTransform: this.pixelToCoordinateTransform_,
            postRenderFunctions: [],
            size: r,
            tileQueue: this.tileQueue_,
            time: t,
            usedTiles: {},
            viewState: s,
            viewHints: a,
            wantedTiles: {}
          }
        }
        if (this.frameState_ = o, this.renderer_.renderFrame(o), o) {
          if (o.animate && this.render(), Array.prototype.push.apply(this.postRenderFunctions_, o.postRenderFunctions), i) (!this.previousExtent_ || !Ie(this.previousExtent_) && !ue(o.extent, this.previousExtent_)) && (this.dispatchEvent(new ja(Xa, this, i)), this.previousExtent_ = oe(this.previousExtent_));
          this.previousExtent_ && !o.viewHints[ns] && !o.viewHints[is] && !ue(o.extent, this.previousExtent_) && (this.dispatchEvent(new ja(Za, this, o)), $t(o.extent, this.previousExtent_))
        }
        this.dispatchEvent(new ja(qa, this, o)), this.postRenderTimeoutHandle_ || (this.postRenderTimeoutHandle_ = setTimeout((function () {
          e.postRenderTimeoutHandle_ = void 0, e.handlePostRender()
        }), 0))
      }, e.prototype.setLayerGroup = function (t) {
        this.set(Ka, t)
      }, e.prototype.setSize = function (t) {
        this.set(Ha, t)
      }, e.prototype.setTarget = function (t) {
        this.set($a, t)
      }, e.prototype.setView = function (t) {
        this.set(Ja, t)
      }, e.prototype.updateSize = function () {
        var t = this.getTargetElement();
        if (t) {
          var e = getComputedStyle(t);
          this.setSize([t.offsetWidth - parseFloat(e.borderLeftWidth) - parseFloat(e.paddingLeft) - parseFloat(e.paddingRight) - parseFloat(e.borderRightWidth), t.offsetHeight - parseFloat(e.borderTopWidth) - parseFloat(e.paddingTop) - parseFloat(e.paddingBottom) - parseFloat(e.borderBottomWidth)])
        } else this.setSize(void 0);
        this.updateViewportSize_()
      }, e.prototype.updateViewportSize_ = function () {
        var t = this.getView();
        if (t) {
          var e = void 0, r = getComputedStyle(this.viewport_);
          r.width && r.height && (e = [parseInt(r.width, 10), parseInt(r.height, 10)]), t.setViewportSize(e)
        }
      }, e
    }(ot), Fs = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), As = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e.element;
        return !n || e.target || n.style.pointerEvents || (n.style.pointerEvents = "auto"), r.element = n || null, r.target_ = null, r.map_ = null, r.listenerKeys = [], e.render && (r.render = e.render), e.target && r.setTarget(e.target), r
      }

      return Fs(e, t), e.prototype.disposeInternal = function () {
        fo(this.element), t.prototype.disposeInternal.call(this)
      }, e.prototype.getMap = function () {
        return this.map_
      }, e.prototype.setMap = function (t) {
        this.map_ && fo(this.element);
        for (var e = 0, r = this.listenerKeys.length; e < r; ++e) H(this.listenerKeys[e]);
        (this.listenerKeys.length = 0, this.map_ = t, this.map_) && ((this.target_ ? this.target_ : t.getOverlayContainerStopEvent()).appendChild(this.element), this.render !== T && this.listenerKeys.push(Z(t, qa, this.render, this)), t.render())
      }, e.prototype.render = function (t) {
      }, e.prototype.setTarget = function (t) {
        this.target_ = "string" == typeof t ? document.getElementById(t) : t
      }, e
    }(ot), ks = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), js = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, {
          element: document.createElement("div"),
          render: n.render,
          target: n.target
        }) || this).ulElement_ = document.createElement("ul"), r.collapsed_ = void 0 === n.collapsed || n.collapsed, r.userCollapsed_ = r.collapsed_, r.overrideCollapsible_ = void 0 !== n.collapsible, r.collapsible_ = void 0 === n.collapsible || n.collapsible, r.collapsible_ || (r.collapsed_ = !1);
        var i = void 0 !== n.className ? n.className : "ol-attribution",
          o = void 0 !== n.tipLabel ? n.tipLabel : "Attributions",
          a = void 0 !== n.expandClassName ? n.expandClassName : i + "-expand",
          s = void 0 !== n.collapseLabel ? n.collapseLabel : "»",
          l = void 0 !== n.collapseClassName ? n.collapseClassName : i + "-collpase";
        "string" == typeof s ? (r.collapseLabel_ = document.createElement("span"), r.collapseLabel_.textContent = s, r.collapseLabel_.className = l) : r.collapseLabel_ = s;
        var u = void 0 !== n.label ? n.label : "i";
        "string" == typeof u ? (r.label_ = document.createElement("span"), r.label_.textContent = u, r.label_.className = a) : r.label_ = u;
        var c = r.collapsible_ && !r.collapsed_ ? r.collapseLabel_ : r.label_, h = document.createElement("button");
        h.setAttribute("type", "button"), h.title = o, h.appendChild(c), h.addEventListener(N, r.handleClick_.bind(r), !1);
        var p = i + " ol-unselectable ol-control" + (r.collapsed_ && r.collapsible_ ? " ol-collapsed" : "") + (r.collapsible_ ? "" : " ol-uncollapsible"),
          f = r.element;
        return f.className = p, f.appendChild(r.ulElement_), f.appendChild(h), r.renderedAttributions_ = [], r.renderedVisible_ = !0, r
      }

      return ks(e, t), e.prototype.collectSourceAttributions_ = function (t) {
        for (var e = {}, r = [], n = !0, i = t.layerStatesArray, o = 0, a = i.length; o < a; ++o) {
          var s = i[o];
          if (ra(s, t.viewState)) {
            var l = s.layer.getSource();
            if (l) {
              var u = l.getAttributions();
              if (u) {
                var c = u(t);
                if (c) if (n = n && !1 !== l.getAttributionsCollapsible(), Array.isArray(c)) for (var h = 0, p = c.length; h < p; ++h) c[h] in e || (r.push(c[h]), e[c[h]] = !0); else c in e || (r.push(c), e[c] = !0)
              }
            }
          }
        }
        return this.overrideCollapsible_ || this.setCollapsible(n), r
      }, e.prototype.updateElement_ = function (t) {
        if (t) {
          var e = this.collectSourceAttributions_(t), r = e.length > 0;
          if (this.renderedVisible_ != r && (this.element.style.display = r ? "" : "none", this.renderedVisible_ = r), !b(e, this.renderedAttributions_)) {
            go(this.ulElement_);
            for (var n = 0, i = e.length; n < i; ++n) {
              var o = document.createElement("li");
              o.innerHTML = e[n], this.ulElement_.appendChild(o)
            }
            this.renderedAttributions_ = e
          }
        } else this.renderedVisible_ && (this.element.style.display = "none", this.renderedVisible_ = !1)
      }, e.prototype.handleClick_ = function (t) {
        t.preventDefault(), this.handleToggle_(), this.userCollapsed_ = this.collapsed_
      }, e.prototype.handleToggle_ = function () {
        this.element.classList.toggle("ol-collapsed"), this.collapsed_ ? po(this.collapseLabel_, this.label_) : po(this.label_, this.collapseLabel_), this.collapsed_ = !this.collapsed_
      }, e.prototype.getCollapsible = function () {
        return this.collapsible_
      }, e.prototype.setCollapsible = function (t) {
        this.collapsible_ !== t && (this.collapsible_ = t, this.element.classList.toggle("ol-uncollapsible"), this.userCollapsed_ && this.handleToggle_())
      }, e.prototype.setCollapsed = function (t) {
        this.userCollapsed_ = t, this.collapsible_ && this.collapsed_ !== t && this.handleToggle_()
      }, e.prototype.getCollapsed = function () {
        return this.collapsed_
      }, e.prototype.render = function (t) {
        this.updateElement_(t.frameState)
      }, e
    }(As), Ns = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Ds = function (t) {
      function e(e) {
        var r = this, n = e || {};
        r = t.call(this, {element: document.createElement("div"), render: n.render, target: n.target}) || this;
        var i = void 0 !== n.className ? n.className : "ol-rotate", o = void 0 !== n.label ? n.label : "⇧",
          a = void 0 !== n.compassClassName ? n.compassClassName : "ol-compass";
        r.label_ = null, "string" == typeof o ? (r.label_ = document.createElement("span"), r.label_.className = a, r.label_.textContent = o) : (r.label_ = o, r.label_.classList.add(a));
        var s = n.tipLabel ? n.tipLabel : "Reset rotation", l = document.createElement("button");
        l.className = i + "-reset", l.setAttribute("type", "button"), l.title = s, l.appendChild(r.label_), l.addEventListener(N, r.handleClick_.bind(r), !1);
        var u = i + " ol-unselectable ol-control", c = r.element;
        return c.className = u, c.appendChild(l), r.callResetNorth_ = n.resetNorth ? n.resetNorth : void 0, r.duration_ = void 0 !== n.duration ? n.duration : 250, r.autoHide_ = void 0 === n.autoHide || n.autoHide, r.rotation_ = void 0, r.autoHide_ && r.element.classList.add("ol-hidden"), r
      }

      return Ns(e, t), e.prototype.handleClick_ = function (t) {
        t.preventDefault(), void 0 !== this.callResetNorth_ ? this.callResetNorth_() : this.resetNorth_()
      }, e.prototype.resetNorth_ = function () {
        var t = this.getMap().getView();
        if (t) {
          var e = t.getRotation();
          void 0 !== e && (this.duration_ > 0 && e % (2 * Math.PI) != 0 ? t.animate({
            rotation: 0,
            duration: this.duration_,
            easing: io
          }) : t.setRotation(0))
        }
      }, e.prototype.render = function (t) {
        var e = t.frameState;
        if (e) {
          var r = e.viewState.rotation;
          if (r != this.rotation_) {
            var n = "rotate(" + r + "rad)";
            if (this.autoHide_) {
              var i = this.element.classList.contains("ol-hidden");
              i || 0 !== r ? i && 0 !== r && this.element.classList.remove("ol-hidden") : this.element.classList.add("ol-hidden")
            }
            this.label_.style.transform = n
          }
          this.rotation_ = r
        }
      }, e
    }(As), Gs = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), zs = function (t) {
      function e(e) {
        var r = this, n = e || {};
        r = t.call(this, {element: document.createElement("div"), target: n.target}) || this;
        var i = void 0 !== n.className ? n.className : "ol-zoom", o = void 0 !== n.delta ? n.delta : 1,
          a = void 0 !== n.zoomInClassName ? n.zoomInClassName : i + "-in",
          s = void 0 !== n.zoomOutClassName ? n.zoomOutClassName : i + "-out",
          l = void 0 !== n.zoomInLabel ? n.zoomInLabel : "+", u = void 0 !== n.zoomOutLabel ? n.zoomOutLabel : "−",
          c = void 0 !== n.zoomInTipLabel ? n.zoomInTipLabel : "Zoom in",
          h = void 0 !== n.zoomOutTipLabel ? n.zoomOutTipLabel : "Zoom out", p = document.createElement("button");
        p.className = a, p.setAttribute("type", "button"), p.title = c, p.appendChild("string" == typeof l ? document.createTextNode(l) : l), p.addEventListener(N, r.handleClick_.bind(r, o), !1);
        var f = document.createElement("button");
        f.className = s, f.setAttribute("type", "button"), f.title = h, f.appendChild("string" == typeof u ? document.createTextNode(u) : u), f.addEventListener(N, r.handleClick_.bind(r, -o), !1);
        var d = i + " ol-unselectable ol-control", g = r.element;
        return g.className = d, g.appendChild(p), g.appendChild(f), r.duration_ = void 0 !== n.duration ? n.duration : 250, r
      }

      return Gs(e, t), e.prototype.handleClick_ = function (t, e) {
        e.preventDefault(), this.zoomByDelta_(t)
      }, e.prototype.zoomByDelta_ = function (t) {
        var e = this.getMap().getView();
        if (e) {
          var r = e.getZoom();
          if (void 0 !== r) {
            var n = e.getConstrainedZoom(r + t);
            this.duration_ > 0 ? (e.getAnimating() && e.cancelAnimations(), e.animate({
              zoom: n,
              duration: this.duration_,
              easing: io
            })) : e.setZoom(n)
          }
        }
      }, e
    }(As);

    function Us(t) {
      var e = t || {}, r = new ht;
      return (void 0 === e.zoom || e.zoom) && r.push(new zs(e.zoomOptions)), (void 0 === e.rotate || e.rotate) && r.push(new Ds(e.rotateOptions)), (void 0 === e.attribution || e.attribution) && r.push(new js(e.attributionOptions)), r
    }

    var Bs = "active", Vs = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Ys(t, e, r) {
      var n = t.getCenterInternal();
      if (n) {
        var i = [n[0] + e[0], n[1] + e[1]];
        t.animateInternal({duration: void 0 !== r ? r : 250, easing: ao, center: t.getConstrainedCenter(i)})
      }
    }

    function Ws(t, e, r, n) {
      var i = t.getZoom();
      if (void 0 !== i) {
        var o = t.getConstrainedZoom(i + e), a = t.getResolutionForZoom(o);
        t.getAnimating() && t.cancelAnimations(), t.animate({
          resolution: a,
          anchor: r,
          duration: void 0 !== n ? n : 250,
          easing: io
        })
      }
    }

    var qs = function (t) {
      function e(e) {
        var r = t.call(this) || this;
        return e && e.handleEvent && (r.handleEvent = e.handleEvent), r.map_ = null, r.setActive(!0), r
      }

      return Vs(e, t), e.prototype.getActive = function () {
        return this.get(Bs)
      }, e.prototype.getMap = function () {
        return this.map_
      }, e.prototype.handleEvent = function (t) {
        return !0
      }, e.prototype.setActive = function (t) {
        this.set(Bs, t)
      }, e.prototype.setMap = function (t) {
        this.map_ = t
      }, e
    }(ot), Xs = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Zs = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.delta_ = n.delta ? n.delta : 1, r.duration_ = void 0 !== n.duration ? n.duration : 250, r
      }

      return Xs(e, t), e.prototype.handleEvent = function (t) {
        var e = !1;
        if (t.type == Ga.DBLCLICK) {
          var r = t.originalEvent, n = t.map, i = t.coordinate, o = r.shiftKey ? -this.delta_ : this.delta_;
          Ws(n.getView(), o, i, this.duration_), r.preventDefault(), e = !0
        }
        return !e
      }, e
    }(qs), Ks = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Hs(t) {
      for (var e = t.length, r = 0, n = 0, i = 0; i < e; i++) r += t[i].clientX, n += t[i].clientY;
      return [r / e, n / e]
    }

    var $s = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return r = t.call(this, n) || this, n.handleDownEvent && (r.handleDownEvent = n.handleDownEvent), n.handleDragEvent && (r.handleDragEvent = n.handleDragEvent), n.handleMoveEvent && (r.handleMoveEvent = n.handleMoveEvent), n.handleUpEvent && (r.handleUpEvent = n.handleUpEvent), n.stopDown && (r.stopDown = n.stopDown), r.handlingDownUpSequence = !1, r.trackedPointers_ = {}, r.targetPointers = [], r
      }

      return Ks(e, t), e.prototype.getPointerCount = function () {
        return this.targetPointers.length
      }, e.prototype.handleDownEvent = function (t) {
        return !1
      }, e.prototype.handleDragEvent = function (t) {
      }, e.prototype.handleEvent = function (t) {
        if (!t.originalEvent) return !0;
        var e = !1;
        if (this.updateTrackedPointers_(t), this.handlingDownUpSequence) {
          if (t.type == Ga.POINTERDRAG) this.handleDragEvent(t), t.originalEvent.preventDefault(); else if (t.type == Ga.POINTERUP) {
            var r = this.handleUpEvent(t);
            this.handlingDownUpSequence = r && this.targetPointers.length > 0
          }
        } else if (t.type == Ga.POINTERDOWN) {
          var n = this.handleDownEvent(t);
          this.handlingDownUpSequence = n, e = this.stopDown(n)
        } else t.type == Ga.POINTERMOVE && this.handleMoveEvent(t);
        return !e
      }, e.prototype.handleMoveEvent = function (t) {
      }, e.prototype.handleUpEvent = function (t) {
        return !1
      }, e.prototype.stopDown = function (t) {
        return t
      }, e.prototype.updateTrackedPointers_ = function (t) {
        if (function (t) {
          var e = t.type;
          return e === Ga.POINTERDOWN || e === Ga.POINTERDRAG || e === Ga.POINTERUP
        }(t)) {
          var e = t.originalEvent, r = e.pointerId.toString();
          t.type == Ga.POINTERUP ? delete this.trackedPointers_[r] : (t.type == Ga.POINTERDOWN || r in this.trackedPointers_) && (this.trackedPointers_[r] = e), this.targetPointers = R(this.trackedPointers_)
        }
      }, e
    }(qs);

    function Js(t) {
      var e = arguments;
      return function (t) {
        for (var r = !0, n = 0, i = e.length; n < i && (r = r && e[n](t)); ++n) ;
        return r
      }
    }

    var Qs = function (t) {
      var e = t.originalEvent;
      return e.altKey && !(e.metaKey || e.ctrlKey) && !e.shiftKey
    }, tl = function (t) {
      var e = t.originalEvent;
      return e.altKey && !(e.metaKey || e.ctrlKey) && e.shiftKey
    }, el = function (t) {
      return t.target.getTargetElement().contains(document.activeElement)
    }, rl = function (t) {
      return !t.map.getTargetElement().hasAttribute("tabindex") || el(t)
    }, nl = S, il = function (t) {
      var e = t.originalEvent;
      return 0 == e.button && !(Ui && Bi && e.ctrlKey)
    }, ol = E, al = function (t) {
      return t.type == Ga.SINGLECLICK
    }, sl = function (t) {
      var e = t.originalEvent;
      return !e.altKey && !(e.metaKey || e.ctrlKey) && !e.shiftKey
    }, ll = function (t) {
      var e = t.originalEvent;
      return !e.altKey && !(e.metaKey || e.ctrlKey) && e.shiftKey
    }, ul = function (t) {
      var e = t.originalEvent.target.tagName;
      return "INPUT" !== e && "SELECT" !== e && "TEXTAREA" !== e
    }, cl = function (t) {
      var e = t.originalEvent;
      return pt(void 0 !== e, 56), "mouse" == e.pointerType
    }, hl = function (t) {
      var e = t.originalEvent;
      return pt(void 0 !== e, 56), e.isPrimary && 0 === e.button
    }, pl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), fl = function (t) {
      function e(e) {
        var r = t.call(this, {stopDown: E}) || this, n = e || {};
        r.kinetic_ = n.kinetic, r.lastCentroid = null, r.lastPointersCount_, r.panning_ = !1;
        var i = n.condition ? n.condition : Js(sl, hl);
        return r.condition_ = n.onFocusOnly ? Js(rl, i) : i, r.noKinetic_ = !1, r
      }

      return pl(e, t), e.prototype.handleDragEvent = function (t) {
        this.panning_ || (this.panning_ = !0, this.getMap().getView().beginInteraction());
        var e = this.targetPointers, r = Hs(e);
        if (e.length == this.lastPointersCount_) {
          if (this.kinetic_ && this.kinetic_.update(r[0], r[1]), this.lastCentroid) {
            var n = [this.lastCentroid[0] - r[0], r[1] - this.lastCentroid[1]], i = t.map.getView();
            Pr(n, i.getResolution()), Or(n, i.getRotation()), i.adjustCenterInternal(n)
          }
        } else this.kinetic_ && this.kinetic_.begin();
        this.lastCentroid = r, this.lastPointersCount_ = e.length, t.originalEvent.preventDefault()
      }, e.prototype.handleUpEvent = function (t) {
        var e = t.map, r = e.getView();
        if (0 === this.targetPointers.length) {
          if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {
            var n = this.kinetic_.getDistance(), i = this.kinetic_.getAngle(), o = r.getCenterInternal(),
              a = e.getPixelFromCoordinateInternal(o),
              s = e.getCoordinateFromPixelInternal([a[0] - n * Math.cos(i), a[1] - n * Math.sin(i)]);
            r.animateInternal({center: r.getConstrainedCenter(s), duration: 500, easing: io})
          }
          return this.panning_ && (this.panning_ = !1, r.endInteraction()), !1
        }
        return this.kinetic_ && this.kinetic_.begin(), this.lastCentroid = null, !0
      }, e.prototype.handleDownEvent = function (t) {
        if (this.targetPointers.length > 0 && this.condition_(t)) {
          var e = t.map.getView();
          return this.lastCentroid = null, e.getAnimating() && e.cancelAnimations(), this.kinetic_ && this.kinetic_.begin(), this.noKinetic_ = this.targetPointers.length > 1, !0
        }
        return !1
      }, e
    }($s), dl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), gl = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, {stopDown: E}) || this).condition_ = n.condition ? n.condition : tl, r.lastAngle_ = void 0, r.duration_ = void 0 !== n.duration ? n.duration : 250, r
      }

      return dl(e, t), e.prototype.handleDragEvent = function (t) {
        if (cl(t)) {
          var e = t.map, r = e.getView();
          if (r.getConstraints().rotation !== gs) {
            var n = e.getSize(), i = t.pixel, o = Math.atan2(n[1] / 2 - i[1], i[0] - n[0] / 2);
            if (void 0 !== this.lastAngle_) {
              var a = o - this.lastAngle_;
              r.adjustRotationInternal(-a)
            }
            this.lastAngle_ = o
          }
        }
      }, e.prototype.handleUpEvent = function (t) {
        return !cl(t) || (t.map.getView().endInteraction(this.duration_), !1)
      }, e.prototype.handleDownEvent = function (t) {
        return !!cl(t) && (!(!il(t) || !this.condition_(t)) && (t.map.getView().beginInteraction(), this.lastAngle_ = void 0, !0))
      }, e
    }($s), yl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), ml = function (t) {
      function e(e) {
        var r = t.call(this) || this;
        return r.geometry_ = null, r.element_ = document.createElement("div"), r.element_.style.position = "absolute", r.element_.style.pointerEvents = "auto", r.element_.className = "ol-box " + e, r.map_ = null, r.startPixel_ = null, r.endPixel_ = null, r
      }

      return yl(e, t), e.prototype.disposeInternal = function () {
        this.setMap(null)
      }, e.prototype.render_ = function () {
        var t = this.startPixel_, e = this.endPixel_, r = this.element_.style;
        r.left = Math.min(t[0], e[0]) + "px", r.top = Math.min(t[1], e[1]) + "px", r.width = Math.abs(e[0] - t[0]) + "px", r.height = Math.abs(e[1] - t[1]) + "px"
      }, e.prototype.setMap = function (t) {
        if (this.map_) {
          this.map_.getOverlayContainer().removeChild(this.element_);
          var e = this.element_.style;
          e.left = "inherit", e.top = "inherit", e.width = "inherit", e.height = "inherit"
        }
        this.map_ = t, this.map_ && this.map_.getOverlayContainer().appendChild(this.element_)
      }, e.prototype.setPixels = function (t, e) {
        this.startPixel_ = t, this.endPixel_ = e, this.createOrUpdateGeometry(), this.render_()
      }, e.prototype.createOrUpdateGeometry = function () {
        var t = this.startPixel_, e = this.endPixel_,
          r = [t, [t[0], e[1]], e, [e[0], t[1]]].map(this.map_.getCoordinateFromPixelInternal, this.map_);
        r[4] = r[0].slice(), this.geometry_ ? this.geometry_.setCoordinates([r]) : this.geometry_ = new fi([r])
      }, e.prototype.getGeometry = function () {
        return this.geometry_
      }, e
    }(p), vl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), _l = "boxstart", bl = "boxdrag", xl = "boxend", wl = "boxcancel", Sl = function (t) {
      function e(e, r, n) {
        var i = t.call(this, e) || this;
        return i.coordinate = r, i.mapBrowserEvent = n, i
      }

      return vl(e, t), e
    }(c), El = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.box_ = new ml(n.className || "ol-dragbox"), r.minArea_ = void 0 !== n.minArea ? n.minArea : 64, n.onBoxEnd && (r.onBoxEnd = n.onBoxEnd), r.startPixel_ = null, r.condition_ = n.condition ? n.condition : il, r.boxEndCondition_ = n.boxEndCondition ? n.boxEndCondition : r.defaultBoxEndCondition, r
      }

      return vl(e, t), e.prototype.defaultBoxEndCondition = function (t, e, r) {
        var n = r[0] - e[0], i = r[1] - e[1];
        return n * n + i * i >= this.minArea_
      }, e.prototype.getGeometry = function () {
        return this.box_.getGeometry()
      }, e.prototype.handleDragEvent = function (t) {
        this.box_.setPixels(this.startPixel_, t.pixel), this.dispatchEvent(new Sl(bl, t.coordinate, t))
      }, e.prototype.handleUpEvent = function (t) {
        this.box_.setMap(null);
        var e = this.boxEndCondition_(t, this.startPixel_, t.pixel);
        return e && this.onBoxEnd(t), this.dispatchEvent(new Sl(e ? xl : wl, t.coordinate, t)), !1
      }, e.prototype.handleDownEvent = function (t) {
        return !!this.condition_(t) && (this.startPixel_ = t.pixel, this.box_.setMap(t.map), this.box_.setPixels(this.startPixel_, this.startPixel_), this.dispatchEvent(new Sl(_l, t.coordinate, t)), !0)
      }, e.prototype.onBoxEnd = function (t) {
      }, e
    }($s), Tl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Cl = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = n.condition ? n.condition : ll;
        return (r = t.call(this, {
          condition: i,
          className: n.className || "ol-dragzoom",
          minArea: n.minArea
        }) || this).duration_ = void 0 !== n.duration ? n.duration : 200, r.out_ = void 0 !== n.out && n.out, r
      }

      return Tl(e, t), e.prototype.onBoxEnd = function (t) {
        var e = this.getMap(), r = e.getView(), n = e.getSize(), i = this.getGeometry().getExtent();
        if (this.out_) {
          var o = r.calculateExtentInternal(n),
            a = se([e.getPixelFromCoordinateInternal(_e(i)), e.getPixelFromCoordinateInternal(Oe(i))]);
          Me(o, 1 / r.getResolutionForExtentInternal(a, n)), i = o
        }
        var s = r.getConstrainedResolution(r.getResolutionForExtentInternal(i, n)),
          l = r.getConstrainedCenter(xe(i), s);
        r.animateInternal({resolution: s, center: l, duration: this.duration_, easing: io})
      }, e
    }(El), Ol = 37, Pl = 38, Rl = 39, Il = 40, Ll = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Ml = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.defaultCondition_ = function (t) {
          return sl(t) && ul(t)
        }, r.condition_ = void 0 !== n.condition ? n.condition : r.defaultCondition_, r.duration_ = void 0 !== n.duration ? n.duration : 100, r.pixelDelta_ = void 0 !== n.pixelDelta ? n.pixelDelta : 128, r
      }

      return Ll(e, t), e.prototype.handleEvent = function (t) {
        var e = !1;
        if (t.type == B) {
          var r = t.originalEvent, n = r.keyCode;
          if (this.condition_(t) && (n == Il || n == Ol || n == Rl || n == Pl)) {
            var i = t.map.getView(), o = i.getResolution() * this.pixelDelta_, a = 0, s = 0;
            n == Il ? s = -o : n == Ol ? a = -o : n == Rl ? a = o : s = o;
            var l = [a, s];
            Or(l, i.getRotation()), Ys(i, l, this.duration_), r.preventDefault(), e = !0
          }
        }
        return !e
      }, e
    }(qs), Fl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Al = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.condition_ = n.condition ? n.condition : ul, r.delta_ = n.delta ? n.delta : 1, r.duration_ = void 0 !== n.duration ? n.duration : 100, r
      }

      return Fl(e, t), e.prototype.handleEvent = function (t) {
        var e = !1;
        if (t.type == B || t.type == V) {
          var r = t.originalEvent, n = r.charCode;
          if (this.condition_(t) && (n == "+".charCodeAt(0) || n == "-".charCodeAt(0))) {
            var i = t.map, o = n == "+".charCodeAt(0) ? this.delta_ : -this.delta_;
            Ws(i.getView(), o, void 0, this.duration_), r.preventDefault(), e = !0
          }
        }
        return !e
      }, e
    }(qs), kl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), jl = "trackpad", Nl = "wheel", Dl = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, n) || this).totalDelta_ = 0, r.lastDelta_ = 0, r.maxDelta_ = void 0 !== n.maxDelta ? n.maxDelta : 1, r.duration_ = void 0 !== n.duration ? n.duration : 250, r.timeout_ = void 0 !== n.timeout ? n.timeout : 80, r.useAnchor_ = void 0 === n.useAnchor || n.useAnchor, r.constrainResolution_ = void 0 !== n.constrainResolution && n.constrainResolution;
        var i = n.condition ? n.condition : nl;
        return r.condition_ = n.onFocusOnly ? Js(rl, i) : i, r.lastAnchor_ = null, r.startTime_ = void 0, r.timeoutId_, r.mode_ = void 0, r.trackpadEventGap_ = 400, r.trackpadTimeoutId_, r.deltaPerZoom_ = 300, r
      }

      return kl(e, t), e.prototype.endInteraction_ = function () {
        this.trackpadTimeoutId_ = void 0, this.getMap().getView().endInteraction(void 0, this.lastDelta_ ? this.lastDelta_ > 0 ? 1 : -1 : 0, this.lastAnchor_)
      }, e.prototype.handleEvent = function (t) {
        if (!this.condition_(t)) return !0;
        if (t.type !== X) return !0;
        var e, r = t.map, n = t.originalEvent;
        if (n.preventDefault(), this.useAnchor_ && (this.lastAnchor_ = t.coordinate), t.type == X && (e = n.deltaY, Gi && n.deltaMode === WheelEvent.DOM_DELTA_PIXEL && (e /= Vi), n.deltaMode === WheelEvent.DOM_DELTA_LINE && (e *= 40)), 0 === e) return !1;
        this.lastDelta_ = e;
        var i = Date.now();
        void 0 === this.startTime_ && (this.startTime_ = i), (!this.mode_ || i - this.startTime_ > this.trackpadEventGap_) && (this.mode_ = Math.abs(e) < 4 ? jl : Nl);
        var o = r.getView();
        if (this.mode_ === jl && !o.getConstrainResolution() && !this.constrainResolution_) return this.trackpadTimeoutId_ ? clearTimeout(this.trackpadTimeoutId_) : (o.getAnimating() && o.cancelAnimations(), o.beginInteraction()), this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.timeout_), o.adjustZoom(-e / this.deltaPerZoom_, this.lastAnchor_), this.startTime_ = i, !1;
        this.totalDelta_ += e;
        var a = Math.max(this.timeout_ - (i - this.startTime_), 0);
        return clearTimeout(this.timeoutId_), this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, r), a), !1
      }, e.prototype.handleWheelZoom_ = function (t) {
        var e = t.getView();
        e.getAnimating() && e.cancelAnimations();
        var r = -Ne(this.totalDelta_, -this.maxDelta_ * this.deltaPerZoom_, this.maxDelta_ * this.deltaPerZoom_) / this.deltaPerZoom_;
        (e.getConstrainResolution() || this.constrainResolution_) && (r = r ? r > 0 ? 1 : -1 : 0), Ws(e, r, this.lastAnchor_, this.duration_), this.mode_ = void 0, this.totalDelta_ = 0, this.lastAnchor_ = null, this.startTime_ = void 0, this.timeoutId_ = void 0
      }, e.prototype.setMouseAnchor = function (t) {
        this.useAnchor_ = t, t || (this.lastAnchor_ = null)
      }, e
    }(qs), Gl = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), zl = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = n;
        return i.stopDown || (i.stopDown = E), (r = t.call(this, i) || this).anchor_ = null, r.lastAngle_ = void 0, r.rotating_ = !1, r.rotationDelta_ = 0, r.threshold_ = void 0 !== n.threshold ? n.threshold : .3, r.duration_ = void 0 !== n.duration ? n.duration : 250, r
      }

      return Gl(e, t), e.prototype.handleDragEvent = function (t) {
        var e = 0, r = this.targetPointers[0], n = this.targetPointers[1],
          i = Math.atan2(n.clientY - r.clientY, n.clientX - r.clientX);
        if (void 0 !== this.lastAngle_) {
          var o = i - this.lastAngle_;
          this.rotationDelta_ += o, !this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_ && (this.rotating_ = !0), e = o
        }
        this.lastAngle_ = i;
        var a = t.map, s = a.getView();
        if (s.getConstraints().rotation !== gs) {
          var l = a.getViewport().getBoundingClientRect(), u = Hs(this.targetPointers);
          u[0] -= l.left, u[1] -= l.top, this.anchor_ = a.getCoordinateFromPixelInternal(u), this.rotating_ && (a.render(), s.adjustRotationInternal(e, this.anchor_))
        }
      }, e.prototype.handleUpEvent = function (t) {
        return !(this.targetPointers.length < 2) || (t.map.getView().endInteraction(this.duration_), !1)
      }, e.prototype.handleDownEvent = function (t) {
        if (this.targetPointers.length >= 2) {
          var e = t.map;
          return this.anchor_ = null, this.lastAngle_ = void 0, this.rotating_ = !1, this.rotationDelta_ = 0, this.handlingDownUpSequence || e.getView().beginInteraction(), !0
        }
        return !1
      }, e
    }($s), Ul = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Bl = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = n;
        return i.stopDown || (i.stopDown = E), (r = t.call(this, i) || this).anchor_ = null, r.duration_ = void 0 !== n.duration ? n.duration : 400, r.lastDistance_ = void 0, r.lastScaleDelta_ = 1, r
      }

      return Ul(e, t), e.prototype.handleDragEvent = function (t) {
        var e = 1, r = this.targetPointers[0], n = this.targetPointers[1], i = r.clientX - n.clientX,
          o = r.clientY - n.clientY, a = Math.sqrt(i * i + o * o);
        void 0 !== this.lastDistance_ && (e = this.lastDistance_ / a), this.lastDistance_ = a;
        var s = t.map, l = s.getView();
        1 != e && (this.lastScaleDelta_ = e);
        var u = s.getViewport().getBoundingClientRect(), c = Hs(this.targetPointers);
        c[0] -= u.left, c[1] -= u.top, this.anchor_ = s.getCoordinateFromPixelInternal(c), s.render(), l.adjustResolutionInternal(e, this.anchor_)
      }, e.prototype.handleUpEvent = function (t) {
        if (this.targetPointers.length < 2) {
          var e = t.map.getView(), r = this.lastScaleDelta_ > 1 ? 1 : -1;
          return e.endInteraction(this.duration_, r), !1
        }
        return !0
      }, e.prototype.handleDownEvent = function (t) {
        if (this.targetPointers.length >= 2) {
          var e = t.map;
          return this.anchor_ = null, this.lastDistance_ = void 0, this.lastScaleDelta_ = 1, this.handlingDownUpSequence || e.getView().beginInteraction(), !0
        }
        return !1
      }, e
    }($s);

    function Vl(t) {
      var e = t || {}, r = new ht, n = new _o(-.005, .05, 100);
      return (void 0 === e.altShiftDragRotate || e.altShiftDragRotate) && r.push(new gl), (void 0 === e.doubleClickZoom || e.doubleClickZoom) && r.push(new Zs({
        delta: e.zoomDelta,
        duration: e.zoomDuration
      })), (void 0 === e.dragPan || e.dragPan) && r.push(new fl({
        onFocusOnly: e.onFocusOnly,
        kinetic: n
      })), (void 0 === e.pinchRotate || e.pinchRotate) && r.push(new zl), (void 0 === e.pinchZoom || e.pinchZoom) && r.push(new Bl({duration: e.zoomDuration})), (void 0 === e.keyboard || e.keyboard) && (r.push(new Ml), r.push(new Al({
        delta: e.zoomDelta,
        duration: e.zoomDuration
      }))), (void 0 === e.mouseWheelZoom || e.mouseWheelZoom) && r.push(new Dl({
        onFocusOnly: e.onFocusOnly,
        duration: e.zoomDuration
      })), (void 0 === e.shiftDragZoom || e.shiftDragZoom) && r.push(new Cl({duration: e.zoomDuration})), r
    }

    var Yl = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Wl = function (t) {
        function e(e) {
          return (e = O({}, e)).controls || (e.controls = Us()), e.interactions || (e.interactions = Vl({onFocusOnly: !0})), t.call(this, e) || this
        }

        return Yl(e, t), e.prototype.createRenderer = function () {
          return new La(this)
        }, e
      }(Ms), ql = "bottom-left", Xl = "bottom-center", Zl = "bottom-right", Kl = "center-left", Hl = "center-center",
      $l = "center-right", Jl = "top-left", Ql = "top-center", tu = "top-right", eu = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ru = "element", nu = "map", iu = "offset", ou = "position", au = "positioning", su = function (t) {
        function e(e) {
          var r = t.call(this) || this;
          r.options = e, r.id = e.id, r.insertFirst = void 0 === e.insertFirst || e.insertFirst, r.stopEvent = void 0 === e.stopEvent || e.stopEvent, r.element = document.createElement("div"), r.element.className = void 0 !== e.className ? e.className : "ol-overlay-container ol-selectable", r.element.style.position = "absolute", r.element.style.pointerEvents = "auto";
          var n = e.autoPan;
          return n && "object" != typeof n && (n = {
            animation: e.autoPanAnimation,
            margin: e.autoPanMargin
          }), r.autoPan = n || !1, r.rendered = {
            transform_: "",
            visible: !0
          }, r.mapPostrenderListenerKey = null, r.addEventListener(it(ru), r.handleElementChanged), r.addEventListener(it(nu), r.handleMapChanged), r.addEventListener(it(iu), r.handleOffsetChanged), r.addEventListener(it(ou), r.handlePositionChanged), r.addEventListener(it(au), r.handlePositioningChanged), void 0 !== e.element && r.setElement(e.element), r.setOffset(void 0 !== e.offset ? e.offset : [0, 0]), r.setPositioning(void 0 !== e.positioning ? e.positioning : Jl), void 0 !== e.position && r.setPosition(e.position), r
        }

        return eu(e, t), e.prototype.getElement = function () {
          return this.get(ru)
        }, e.prototype.getId = function () {
          return this.id
        }, e.prototype.getMap = function () {
          return this.get(nu)
        }, e.prototype.getOffset = function () {
          return this.get(iu)
        }, e.prototype.getPosition = function () {
          return this.get(ou)
        }, e.prototype.getPositioning = function () {
          return this.get(au)
        }, e.prototype.handleElementChanged = function () {
          go(this.element);
          var t = this.getElement();
          t && this.element.appendChild(t)
        }, e.prototype.handleMapChanged = function () {
          this.mapPostrenderListenerKey && (fo(this.element), H(this.mapPostrenderListenerKey), this.mapPostrenderListenerKey = null);
          var t = this.getMap();
          if (t) {
            this.mapPostrenderListenerKey = Z(t, qa, this.render, this), this.updatePixelPosition();
            var e = this.stopEvent ? t.getOverlayContainerStopEvent() : t.getOverlayContainer();
            this.insertFirst ? e.insertBefore(this.element, e.childNodes[0] || null) : e.appendChild(this.element), this.performAutoPan()
          }
        }, e.prototype.render = function () {
          this.updatePixelPosition()
        }, e.prototype.handleOffsetChanged = function () {
          this.updatePixelPosition()
        }, e.prototype.handlePositionChanged = function () {
          this.updatePixelPosition(), this.performAutoPan()
        }, e.prototype.handlePositioningChanged = function () {
          this.updatePixelPosition()
        }, e.prototype.setElement = function (t) {
          this.set(ru, t)
        }, e.prototype.setMap = function (t) {
          this.set(nu, t)
        }, e.prototype.setOffset = function (t) {
          this.set(iu, t)
        }, e.prototype.setPosition = function (t) {
          this.set(ou, t)
        }, e.prototype.performAutoPan = function () {
          this.autoPan && this.panIntoView(this.autoPan)
        }, e.prototype.panIntoView = function (t) {
          var e = this.getMap();
          if (e && e.getTargetElement() && this.get(ou)) {
            var r = this.getRect(e.getTargetElement(), e.getSize()), n = this.getElement(),
              i = this.getRect(n, [co(n), ho(n)]), o = t || {}, a = void 0 === o.margin ? 20 : o.margin;
            if (!te(r, i)) {
              var s = i[0] - r[0], l = r[2] - i[2], u = i[1] - r[1], c = r[3] - i[3], h = [0, 0];
              if (s < 0 ? h[0] = s - a : l < 0 && (h[0] = Math.abs(l) + a), u < 0 ? h[1] = u - a : c < 0 && (h[1] = Math.abs(c) + a), 0 !== h[0] || 0 !== h[1]) {
                var p = e.getView().getCenterInternal(), f = e.getPixelFromCoordinateInternal(p);
                if (!f) return;
                var d = [f[0] + h[0], f[1] + h[1]], g = o.animation || {};
                e.getView().animateInternal({
                  center: e.getCoordinateFromPixelInternal(d),
                  duration: g.duration,
                  easing: g.easing
                })
              }
            }
          }
        }, e.prototype.getRect = function (t, e) {
          var r = t.getBoundingClientRect(), n = r.left + window.pageXOffset, i = r.top + window.pageYOffset;
          return [n, i, n + e[0], i + e[1]]
        }, e.prototype.setPositioning = function (t) {
          this.set(au, t)
        }, e.prototype.setVisible = function (t) {
          this.rendered.visible !== t && (this.element.style.display = t ? "" : "none", this.rendered.visible = t)
        }, e.prototype.updatePixelPosition = function () {
          var t = this.getMap(), e = this.getPosition();
          if (t && t.isRendered() && e) {
            var r = t.getPixelFromCoordinate(e), n = t.getSize();
            this.updateRenderedPosition(r, n)
          } else this.setVisible(!1)
        }, e.prototype.updateRenderedPosition = function (t, e) {
          var r = this.element.style, n = this.getOffset(), i = this.getPositioning();
          this.setVisible(!0);
          var o = Math.round(t[0] + n[0]) + "px", a = Math.round(t[1] + n[1]) + "px", s = "0%", l = "0%";
          i == Zl || i == $l || i == tu ? s = "-100%" : i != Xl && i != Hl && i != Ql || (s = "-50%"), i == ql || i == Xl || i == Zl ? l = "-100%" : i != Kl && i != Hl && i != $l || (l = "-50%");
          var u = "translate(" + s + ", " + l + ") translate(" + o + ", " + a + ")";
          this.rendered.transform_ != u && (this.rendered.transform_ = u, r.transform = u, r.msTransform = u)
        }, e.prototype.getOptions = function () {
          return this.options
        }, e
      }(ot), lu = function () {
        function t(t) {
          this.highWaterMark = void 0 !== t ? t : 2048, this.count_ = 0, this.entries_ = {}, this.oldest_ = null, this.newest_ = null
        }

        return t.prototype.canExpireCache = function () {
          return this.highWaterMark > 0 && this.getCount() > this.highWaterMark
        }, t.prototype.clear = function () {
          this.count_ = 0, this.entries_ = {}, this.oldest_ = null, this.newest_ = null
        }, t.prototype.containsKey = function (t) {
          return this.entries_.hasOwnProperty(t)
        }, t.prototype.forEach = function (t) {
          for (var e = this.oldest_; e;) t(e.value_, e.key_, this), e = e.newer
        }, t.prototype.get = function (t, e) {
          var r = this.entries_[t];
          return pt(void 0 !== r, 15), r === this.newest_ || (r === this.oldest_ ? (this.oldest_ = this.oldest_.newer, this.oldest_.older = null) : (r.newer.older = r.older, r.older.newer = r.newer), r.newer = null, r.older = this.newest_, this.newest_.newer = r, this.newest_ = r), r.value_
        }, t.prototype.remove = function (t) {
          var e = this.entries_[t];
          return pt(void 0 !== e, 15), e === this.newest_ ? (this.newest_ = e.older, this.newest_ && (this.newest_.newer = null)) : e === this.oldest_ ? (this.oldest_ = e.newer, this.oldest_ && (this.oldest_.older = null)) : (e.newer.older = e.older, e.older.newer = e.newer), delete this.entries_[t], --this.count_, e.value_
        }, t.prototype.getCount = function () {
          return this.count_
        }, t.prototype.getKeys = function () {
          var t, e = new Array(this.count_), r = 0;
          for (t = this.newest_; t; t = t.older) e[r++] = t.key_;
          return e
        }, t.prototype.getValues = function () {
          var t, e = new Array(this.count_), r = 0;
          for (t = this.newest_; t; t = t.older) e[r++] = t.value_;
          return e
        }, t.prototype.peekLast = function () {
          return this.oldest_.value_
        }, t.prototype.peekLastKey = function () {
          return this.oldest_.key_
        }, t.prototype.peekFirstKey = function () {
          return this.newest_.key_
        }, t.prototype.pop = function () {
          var t = this.oldest_;
          return delete this.entries_[t.key_], t.newer && (t.newer.older = null), this.oldest_ = t.newer, this.oldest_ || (this.newest_ = null), --this.count_, t.value_
        }, t.prototype.replace = function (t, e) {
          this.get(t), this.entries_[t].value_ = e
        }, t.prototype.set = function (t, e) {
          pt(!(t in this.entries_), 16);
          var r = {key_: t, newer: null, older: this.newest_, value_: e};
          this.newest_ ? this.newest_.newer = r : this.oldest_ = r, this.newest_ = r, this.entries_[t] = r, ++this.count_
        }, t.prototype.setSize = function (t) {
          this.highWaterMark = t
        }, t
      }();

    function uu(t, e, r, n) {
      return void 0 !== n ? (n[0] = t, n[1] = e, n[2] = r, n) : [t, e, r]
    }

    function cu(t, e, r) {
      return t + "/" + e + "/" + r
    }

    function hu(t) {
      return cu(t[0], t[1], t[2])
    }

    function pu(t) {
      return t.split("/").map(Number)
    }

    function fu(t) {
      return (t[1] << t[0]) + t[2]
    }

    function du(t, e) {
      var r = t[0], n = t[1], i = t[2];
      if (e.getMinZoom() > r || r > e.getMaxZoom()) return !1;
      var o = e.getFullTileRange(r);
      return !o || o.containsXY(n, i)
    }

    var gu = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), yu = function (t) {
      function e() {
        return null !== t && t.apply(this, arguments) || this
      }

      return gu(e, t), e.prototype.expireCache = function (t) {
        for (; this.canExpireCache();) {
          if (this.peekLast().getKey() in t) break;
          this.pop().release()
        }
      }, e.prototype.pruneExceptNewestZ = function () {
        if (0 !== this.getCount()) {
          var t = pu(this.peekFirstKey())[0];
          this.forEach(function (e) {
            e.tileCoord[0] !== t && (this.remove(hu(e.tileCoord)), e.release())
          }.bind(this))
        }
      }, e
    }(lu), mu = function () {
      function t(t, e, r, n) {
        this.minX = t, this.maxX = e, this.minY = r, this.maxY = n
      }

      return t.prototype.contains = function (t) {
        return this.containsXY(t[1], t[2])
      }, t.prototype.containsTileRange = function (t) {
        return this.minX <= t.minX && t.maxX <= this.maxX && this.minY <= t.minY && t.maxY <= this.maxY
      }, t.prototype.containsXY = function (t, e) {
        return this.minX <= t && t <= this.maxX && this.minY <= e && e <= this.maxY
      }, t.prototype.equals = function (t) {
        return this.minX == t.minX && this.minY == t.minY && this.maxX == t.maxX && this.maxY == t.maxY
      }, t.prototype.extend = function (t) {
        t.minX < this.minX && (this.minX = t.minX), t.maxX > this.maxX && (this.maxX = t.maxX), t.minY < this.minY && (this.minY = t.minY), t.maxY > this.maxY && (this.maxY = t.maxY)
      }, t.prototype.getHeight = function () {
        return this.maxY - this.minY + 1
      }, t.prototype.getSize = function () {
        return [this.getWidth(), this.getHeight()]
      }, t.prototype.getWidth = function () {
        return this.maxX - this.minX + 1
      }, t.prototype.intersects = function (t) {
        return this.minX <= t.maxX && this.maxX >= t.minX && this.minY <= t.maxY && this.maxY >= t.minY
      }, t
    }();

    function vu(t, e, r, n, i) {
      return void 0 !== i ? (i.minX = t, i.maxX = e, i.minY = r, i.maxY = n, i) : new mu(t, e, r, n)
    }

    var _u = mu, bu = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), xu = [], wu = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e, r, {transition: 0}) || this;
        return o.context_ = {}, o.executorGroups = {}, o.declutterExecutorGroups = {}, o.loadingSourceTiles = 0, o.errorSourceTileKeys = {}, o.hitDetectionImageData = {}, o.replayState_ = {}, o.sourceTiles = null, o.wantedResolution, o.getSourceTiles = i.bind(void 0, o), o.sourceZ = -1, o.hifi = !1, o.wrappedTileCoord = n, o
      }

      return bu(e, t), e.prototype.getContext = function (t) {
        var e = o(t);
        return e in this.context_ || (this.context_[e] = uo(1, 1, xu)), this.context_[e]
      }, e.prototype.hasContext = function (t) {
        return o(t) in this.context_
      }, e.prototype.getImage = function (t) {
        return this.hasContext(t) ? this.getContext(t).canvas : null
      }, e.prototype.getReplayState = function (t) {
        var e = o(t);
        return e in this.replayState_ || (this.replayState_[e] = {
          dirty: !1,
          renderedRenderOrder: null,
          renderedResolution: NaN,
          renderedRevision: -1,
          renderedTileResolution: NaN,
          renderedTileRevision: -1,
          renderedZ: -1,
          renderedTileZ: -1
        }), this.replayState_[e]
      }, e.prototype.load = function () {
        this.getSourceTiles()
      }, e.prototype.release = function () {
        for (var e in this.context_) xu.push(this.context_[e].canvas), delete this.context_[e];
        t.prototype.release.call(this)
      }, e
    }(lo), Su = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Eu = function (t) {
      function e(e, r, n, i, o, a) {
        var s = t.call(this, e, r, a) || this;
        return s.extent = null, s.format_ = i, s.features_ = null, s.loader_, s.projection = null, s.resolution, s.tileLoadFunction_ = o, s.url_ = n, s.key = n, s
      }

      return Su(e, t), e.prototype.getFormat = function () {
        return this.format_
      }, e.prototype.getFeatures = function () {
        return this.features_
      }, e.prototype.load = function () {
        this.state == Ji && (this.setState(Qi), this.tileLoadFunction_(this, this.url_), this.loader_ && this.loader_(this.extent, this.resolution, this.projection))
      }, e.prototype.onLoad = function (t, e) {
        this.setFeatures(t)
      }, e.prototype.onError = function () {
        this.setState(eo)
      }, e.prototype.setFeatures = function (t) {
        this.features_ = t, this.setState(to)
      }, e.prototype.setLoader = function (t) {
        this.loader_ = t
      }, e
    }(lo);

    function Tu(t) {
      return Array.isArray(t) ? Ro(t) : t
    }

    var Cu = "arraybuffer", Ou = "json", Pu = "text", Ru = "xml", Iu = !1;

    function Lu(t, e, r, n, i, o, a) {
      var s = new XMLHttpRequest;
      s.open("GET", "function" == typeof t ? t(r, n, i) : t, !0), e.getType() == Cu && (s.responseType = "arraybuffer"), s.withCredentials = Iu, s.onload = function (t) {
        if (!s.status || s.status >= 200 && s.status < 300) {
          var n = e.getType(), l = void 0;
          n == Ou || n == Pu ? l = s.responseText : n == Ru ? (l = s.responseXML) || (l = (new DOMParser).parseFromString(s.responseText, "application/xml")) : n == Cu && (l = s.response), l ? o(e.readFeatures(l, {
            extent: r,
            featureProjection: i
          }), e.readProjection(l)) : a()
        } else a()
      }, s.onerror = a, s.send()
    }

    function Mu(t, e) {
      return function (r, n, i, o, a) {
        var s = this;
        Lu(t, e, r, n, i, (function (t, e) {
          void 0 !== o && o(t), s.addFeatures(t)
        }), a || T)
      }
    }

    function Fu(t, e) {
      return [[-1 / 0, -1 / 0, 1 / 0, 1 / 0]]
    }

    function Au(t, e, r, n) {
      var i = document.createElement("script"), a = "olc_" + o(e);

      function s() {
        delete window[a], i.parentNode.removeChild(i)
      }

      i.async = !0, i.src = t + (-1 == t.indexOf("?") ? "?" : "&") + (n || "callback") + "=" + a;
      var l = setTimeout((function () {
        s(), r && r()
      }), 1e4);
      window[a] = function (t) {
        clearTimeout(l), s(), e(t)
      }, document.getElementsByTagName("head")[0].appendChild(i)
    }

    var ku = function () {
      function t() {
      }

      return t.prototype.drawCustom = function (t, e, r) {
      }, t.prototype.drawGeometry = function (t) {
      }, t.prototype.setStyle = function (t) {
      }, t.prototype.drawCircle = function (t, e) {
      }, t.prototype.drawFeature = function (t, e) {
      }, t.prototype.drawGeometryCollection = function (t, e) {
      }, t.prototype.drawLineString = function (t, e) {
      }, t.prototype.drawMultiLineString = function (t, e) {
      }, t.prototype.drawMultiPoint = function (t, e) {
      }, t.prototype.drawMultiPolygon = function (t, e) {
      }, t.prototype.drawPoint = function (t, e) {
      }, t.prototype.drawPolygon = function (t, e) {
      }, t.prototype.drawText = function (t, e) {
      }, t.prototype.setFillStrokeStyle = function (t, e) {
      }, t.prototype.setImageStyle = function (t, e) {
      }, t.prototype.setTextStyle = function (t, e) {
      }, t
    }(), ju = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Nu = function (t) {
      function e(e, r, n, i, o, a, s) {
        var l = t.call(this) || this;
        return l.context_ = e, l.pixelRatio_ = r, l.extent_ = n, l.transform_ = i, l.viewRotation_ = o, l.squaredTolerance_ = a, l.userTransform_ = s, l.contextFillState_ = null, l.contextStrokeState_ = null, l.contextTextState_ = null, l.fillState_ = null, l.strokeState_ = null, l.image_ = null, l.imageAnchorX_ = 0, l.imageAnchorY_ = 0, l.imageHeight_ = 0, l.imageOpacity_ = 0, l.imageOriginX_ = 0, l.imageOriginY_ = 0, l.imageRotateWithView_ = !1, l.imageRotation_ = 0, l.imageScale_ = [0, 0], l.imageWidth_ = 0, l.text_ = "", l.textOffsetX_ = 0, l.textOffsetY_ = 0, l.textRotateWithView_ = !1, l.textRotation_ = 0, l.textScale_ = [0, 0], l.textFillState_ = null, l.textStrokeState_ = null, l.textState_ = null, l.pixelCoordinates_ = [], l.tmpLocalTransform_ = [1, 0, 0, 1, 0, 0], l
      }

      return ju(e, t), e.prototype.drawImages_ = function (t, e, r, n) {
        if (this.image_) {
          var i = ln(t, e, r, 2, this.transform_, this.pixelCoordinates_), o = this.context_,
            a = this.tmpLocalTransform_, s = o.globalAlpha;
          1 != this.imageOpacity_ && (o.globalAlpha = s * this.imageOpacity_);
          var l = this.imageRotation_;
          this.imageRotateWithView_ && (l += this.viewRotation_);
          for (var u = 0, c = i.length; u < c; u += 2) {
            var h = i[u] - this.imageAnchorX_, p = i[u + 1] - this.imageAnchorY_;
            if (0 !== l || 1 != this.imageScale_[0] || 1 != this.imageScale_[1]) {
              var f = h + this.imageAnchorX_, d = p + this.imageAnchorY_;
              kt(a, f, d, 1, 1, l, -f, -d), o.setTransform.apply(o, a), o.translate(f, d), o.scale(this.imageScale_[0], this.imageScale_[1]), o.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, -this.imageAnchorX_, -this.imageAnchorY_, this.imageWidth_, this.imageHeight_), o.setTransform(1, 0, 0, 1, 0, 0)
            } else o.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, h, p, this.imageWidth_, this.imageHeight_)
          }
          1 != this.imageOpacity_ && (o.globalAlpha = s)
        }
      }, e.prototype.drawText_ = function (t, e, r, n) {
        if (this.textState_ && "" !== this.text_) {
          this.textFillState_ && this.setContextFillState_(this.textFillState_), this.textStrokeState_ && this.setContextStrokeState_(this.textStrokeState_), this.setContextTextState_(this.textState_);
          var i = ln(t, e, r, n, this.transform_, this.pixelCoordinates_), o = this.context_, a = this.textRotation_;
          for (this.textRotateWithView_ && (a += this.viewRotation_); e < r; e += n) {
            var s = i[e] + this.textOffsetX_, l = i[e + 1] + this.textOffsetY_;
            if (0 !== a || 1 != this.textScale_[0] || 1 != this.textScale_[1]) {
              var u = kt(this.tmpLocalTransform_, s, l, 1, 1, a, -s, -l);
              o.setTransform.apply(o, u), o.translate(s, l), o.scale(this.textScale_[0], this.textScale_[1]), this.textStrokeState_ && o.strokeText(this.text_, 0, 0), this.textFillState_ && o.fillText(this.text_, 0, 0), o.setTransform(1, 0, 0, 1, 0, 0)
            } else this.textStrokeState_ && o.strokeText(this.text_, s, l), this.textFillState_ && o.fillText(this.text_, s, l)
          }
        }
      }, e.prototype.moveToLineTo_ = function (t, e, r, n, i) {
        var o = this.context_, a = ln(t, e, r, n, this.transform_, this.pixelCoordinates_);
        o.moveTo(a[0], a[1]);
        var s = a.length;
        i && (s -= 2);
        for (var l = 2; l < s; l += 2) o.lineTo(a[l], a[l + 1]);
        return i && o.closePath(), r
      }, e.prototype.drawRings_ = function (t, e, r, n) {
        for (var i = 0, o = r.length; i < o; ++i) e = this.moveToLineTo_(t, e, r[i], n, !0);
        return e
      }, e.prototype.drawCircle = function (t) {
        if (Re(this.extent_, t.getExtent())) {
          if (this.fillState_ || this.strokeState_) {
            this.fillState_ && this.setContextFillState_(this.fillState_), this.strokeState_ && this.setContextStrokeState_(this.strokeState_);
            var e = mn(t, this.transform_, this.pixelCoordinates_), r = e[2] - e[0], n = e[3] - e[1],
              i = Math.sqrt(r * r + n * n), o = this.context_;
            o.beginPath(), o.arc(e[0], e[1], i, 0, 2 * Math.PI), this.fillState_ && o.fill(), this.strokeState_ && o.stroke()
          }
          "" !== this.text_ && this.drawText_(t.getCenter(), 0, 2, 2)
        }
      }, e.prototype.setStyle = function (t) {
        this.setFillStrokeStyle(t.getFill(), t.getStroke()), this.setImageStyle(t.getImage()), this.setTextStyle(t.getText())
      }, e.prototype.setTransform = function (t) {
        this.transform_ = t
      }, e.prototype.drawGeometry = function (t) {
        switch (t.getType()) {
          case bt.POINT:
            this.drawPoint(t);
            break;
          case bt.LINE_STRING:
            this.drawLineString(t);
            break;
          case bt.POLYGON:
            this.drawPolygon(t);
            break;
          case bt.MULTI_POINT:
            this.drawMultiPoint(t);
            break;
          case bt.MULTI_LINE_STRING:
            this.drawMultiLineString(t);
            break;
          case bt.MULTI_POLYGON:
            this.drawMultiPolygon(t);
            break;
          case bt.GEOMETRY_COLLECTION:
            this.drawGeometryCollection(t);
            break;
          case bt.CIRCLE:
            this.drawCircle(t)
        }
      }, e.prototype.drawFeature = function (t, e) {
        var r = e.getGeometryFunction()(t);
        r && Re(this.extent_, r.getExtent()) && (this.setStyle(e), this.drawGeometry(r))
      }, e.prototype.drawGeometryCollection = function (t) {
        for (var e = t.getGeometriesArray(), r = 0, n = e.length; r < n; ++r) this.drawGeometry(e[r])
      }, e.prototype.drawPoint = function (t) {
        this.squaredTolerance_ && (t = t.simplifyTransformed(this.squaredTolerance_, this.userTransform_));
        var e = t.getFlatCoordinates(), r = t.getStride();
        this.image_ && this.drawImages_(e, 0, e.length, r), "" !== this.text_ && this.drawText_(e, 0, e.length, r)
      }, e.prototype.drawMultiPoint = function (t) {
        this.squaredTolerance_ && (t = t.simplifyTransformed(this.squaredTolerance_, this.userTransform_));
        var e = t.getFlatCoordinates(), r = t.getStride();
        this.image_ && this.drawImages_(e, 0, e.length, r), "" !== this.text_ && this.drawText_(e, 0, e.length, r)
      }, e.prototype.drawLineString = function (t) {
        if (this.squaredTolerance_ && (t = t.simplifyTransformed(this.squaredTolerance_, this.userTransform_)), Re(this.extent_, t.getExtent())) {
          if (this.strokeState_) {
            this.setContextStrokeState_(this.strokeState_);
            var e = this.context_, r = t.getFlatCoordinates();
            e.beginPath(), this.moveToLineTo_(r, 0, r.length, t.getStride(), !1), e.stroke()
          }
          if ("" !== this.text_) {
            var n = t.getFlatMidpoint();
            this.drawText_(n, 0, 2, 2)
          }
        }
      }, e.prototype.drawMultiLineString = function (t) {
        this.squaredTolerance_ && (t = t.simplifyTransformed(this.squaredTolerance_, this.userTransform_));
        var e = t.getExtent();
        if (Re(this.extent_, e)) {
          if (this.strokeState_) {
            this.setContextStrokeState_(this.strokeState_);
            var r = this.context_, n = t.getFlatCoordinates(), i = 0, o = t.getEnds(), a = t.getStride();
            r.beginPath();
            for (var s = 0, l = o.length; s < l; ++s) i = this.moveToLineTo_(n, i, o[s], a, !1);
            r.stroke()
          }
          if ("" !== this.text_) {
            var u = t.getFlatMidpoints();
            this.drawText_(u, 0, u.length, 2)
          }
        }
      }, e.prototype.drawPolygon = function (t) {
        if (this.squaredTolerance_ && (t = t.simplifyTransformed(this.squaredTolerance_, this.userTransform_)), Re(this.extent_, t.getExtent())) {
          if (this.strokeState_ || this.fillState_) {
            this.fillState_ && this.setContextFillState_(this.fillState_), this.strokeState_ && this.setContextStrokeState_(this.strokeState_);
            var e = this.context_;
            e.beginPath(), this.drawRings_(t.getOrientedFlatCoordinates(), 0, t.getEnds(), t.getStride()), this.fillState_ && e.fill(), this.strokeState_ && e.stroke()
          }
          if ("" !== this.text_) {
            var r = t.getFlatInteriorPoint();
            this.drawText_(r, 0, 2, 2)
          }
        }
      }, e.prototype.drawMultiPolygon = function (t) {
        if (this.squaredTolerance_ && (t = t.simplifyTransformed(this.squaredTolerance_, this.userTransform_)), Re(this.extent_, t.getExtent())) {
          if (this.strokeState_ || this.fillState_) {
            this.fillState_ && this.setContextFillState_(this.fillState_), this.strokeState_ && this.setContextStrokeState_(this.strokeState_);
            var e = this.context_, r = t.getOrientedFlatCoordinates(), n = 0, i = t.getEndss(), o = t.getStride();
            e.beginPath();
            for (var a = 0, s = i.length; a < s; ++a) {
              var l = i[a];
              n = this.drawRings_(r, n, l, o)
            }
            this.fillState_ && e.fill(), this.strokeState_ && e.stroke()
          }
          if ("" !== this.text_) {
            var u = t.getFlatInteriorPoints();
            this.drawText_(u, 0, u.length, 2)
          }
        }
      }, e.prototype.setContextFillState_ = function (t) {
        var e = this.context_, r = this.contextFillState_;
        r ? r.fillStyle != t.fillStyle && (r.fillStyle = t.fillStyle, e.fillStyle = t.fillStyle) : (e.fillStyle = t.fillStyle, this.contextFillState_ = {fillStyle: t.fillStyle})
      }, e.prototype.setContextStrokeState_ = function (t) {
        var e = this.context_, r = this.contextStrokeState_;
        r ? (r.lineCap != t.lineCap && (r.lineCap = t.lineCap, e.lineCap = t.lineCap), e.setLineDash && (b(r.lineDash, t.lineDash) || e.setLineDash(r.lineDash = t.lineDash), r.lineDashOffset != t.lineDashOffset && (r.lineDashOffset = t.lineDashOffset, e.lineDashOffset = t.lineDashOffset)), r.lineJoin != t.lineJoin && (r.lineJoin = t.lineJoin, e.lineJoin = t.lineJoin), r.lineWidth != t.lineWidth && (r.lineWidth = t.lineWidth, e.lineWidth = t.lineWidth), r.miterLimit != t.miterLimit && (r.miterLimit = t.miterLimit, e.miterLimit = t.miterLimit), r.strokeStyle != t.strokeStyle && (r.strokeStyle = t.strokeStyle, e.strokeStyle = t.strokeStyle)) : (e.lineCap = t.lineCap, e.setLineDash && (e.setLineDash(t.lineDash), e.lineDashOffset = t.lineDashOffset), e.lineJoin = t.lineJoin, e.lineWidth = t.lineWidth, e.miterLimit = t.miterLimit, e.strokeStyle = t.strokeStyle, this.contextStrokeState_ = {
          lineCap: t.lineCap,
          lineDash: t.lineDash,
          lineDashOffset: t.lineDashOffset,
          lineJoin: t.lineJoin,
          lineWidth: t.lineWidth,
          miterLimit: t.miterLimit,
          strokeStyle: t.strokeStyle
        })
      }, e.prototype.setContextTextState_ = function (t) {
        var e = this.context_, r = this.contextTextState_, n = t.textAlign ? t.textAlign : "center";
        r ? (r.font != t.font && (r.font = t.font, e.font = t.font), r.textAlign != n && (r.textAlign = n, e.textAlign = n), r.textBaseline != t.textBaseline && (r.textBaseline = t.textBaseline, e.textBaseline = t.textBaseline)) : (e.font = t.font, e.textAlign = n, e.textBaseline = t.textBaseline, this.contextTextState_ = {
          font: t.font,
          textAlign: n,
          textBaseline: t.textBaseline
        })
      }, e.prototype.setFillStrokeStyle = function (t, e) {
        if (t) {
          var r = t.getColor();
          this.fillState_ = {fillStyle: Tu(r || "#000")}
        } else this.fillState_ = null;
        if (e) {
          var n = e.getColor(), i = e.getLineCap(), o = e.getLineDash(), a = e.getLineDashOffset(), s = e.getLineJoin(),
            l = e.getWidth(), u = e.getMiterLimit();
          this.strokeState_ = {
            lineCap: void 0 !== i ? i : "round",
            lineDash: o || pa,
            lineDashOffset: a || 0,
            lineJoin: void 0 !== s ? s : "round",
            lineWidth: this.pixelRatio_ * (void 0 !== l ? l : 1),
            miterLimit: void 0 !== u ? u : 10,
            strokeStyle: Tu(n || "#000")
          }
        } else this.strokeState_ = null
      }, e.prototype.setImageStyle = function (t) {
        if (t) {
          var e = t.getSize();
          if (e) {
            var r = t.getAnchor(), n = t.getImage(1), i = t.getOrigin(), o = t.getScaleArray();
            this.imageAnchorX_ = r[0], this.imageAnchorY_ = r[1], this.imageHeight_ = e[1], this.image_ = n, this.imageOpacity_ = t.getOpacity(), this.imageOriginX_ = i[0], this.imageOriginY_ = i[1], this.imageRotateWithView_ = t.getRotateWithView(), this.imageRotation_ = t.getRotation(), this.imageScale_ = [this.pixelRatio_ * o[0], this.pixelRatio_ * o[1]], this.imageWidth_ = e[0]
          } else this.image_ = null
        } else this.image_ = null
      }, e.prototype.setTextStyle = function (t) {
        if (t) {
          var e = t.getFill();
          if (e) {
            var r = e.getColor();
            this.textFillState_ = {fillStyle: Tu(r || "#000")}
          } else this.textFillState_ = null;
          var n = t.getStroke();
          if (n) {
            var i = n.getColor(), o = n.getLineCap(), a = n.getLineDash(), s = n.getLineDashOffset(),
              l = n.getLineJoin(), u = n.getWidth(), c = n.getMiterLimit();
            this.textStrokeState_ = {
              lineCap: void 0 !== o ? o : "round",
              lineDash: a || pa,
              lineDashOffset: s || 0,
              lineJoin: void 0 !== l ? l : "round",
              lineWidth: void 0 !== u ? u : 1,
              miterLimit: void 0 !== c ? c : 10,
              strokeStyle: Tu(i || "#000")
            }
          } else this.textStrokeState_ = null;
          var h = t.getFont(), p = t.getOffsetX(), f = t.getOffsetY(), d = t.getRotateWithView(), g = t.getRotation(),
            y = t.getScaleArray(), m = t.getText(), v = t.getTextAlign(), _ = t.getTextBaseline();
          this.textState_ = {
            font: void 0 !== h ? h : "10px sans-serif",
            textAlign: void 0 !== v ? v : "center",
            textBaseline: void 0 !== _ ? _ : "middle"
          }, this.text_ = void 0 !== m ? m : "", this.textOffsetX_ = void 0 !== p ? this.pixelRatio_ * p : 0, this.textOffsetY_ = void 0 !== f ? this.pixelRatio_ * f : 0, this.textRotateWithView_ = void 0 !== d && d, this.textRotation_ = void 0 !== g ? g : 0, this.textScale_ = [this.pixelRatio_ * y[0], this.pixelRatio_ * y[1]]
        } else this.text_ = ""
      }, e
    }(ku), Du = "Circle", Gu = "Default", zu = "Image", Uu = "LineString", Bu = "Polygon", Vu = "Text", Yu = {
      Point: function (t, e, r, n, i) {
        var o, a = r.getImage(), s = r.getText();
        i && (t = i, o = a && s && s.getText() ? {} : void 0);
        if (a) {
          if (a.getImageState() != ki) return;
          var l = t.getBuilder(r.getZIndex(), zu);
          l.setImageStyle(a, o), l.drawPoint(e, n)
        }
        if (s && s.getText()) {
          var u = t.getBuilder(r.getZIndex(), Vu);
          u.setTextStyle(s, o), u.drawText(e, n)
        }
      }, LineString: function (t, e, r, n, i) {
        var o = r.getStroke();
        if (o) {
          var a = t.getBuilder(r.getZIndex(), Uu);
          a.setFillStrokeStyle(null, o), a.drawLineString(e, n)
        }
        var s = r.getText();
        if (s && s.getText()) {
          var l = (i || t).getBuilder(r.getZIndex(), Vu);
          l.setTextStyle(s), l.drawText(e, n)
        }
      }, Polygon: function (t, e, r, n, i) {
        var o = r.getFill(), a = r.getStroke();
        if (o || a) {
          var s = t.getBuilder(r.getZIndex(), Bu);
          s.setFillStrokeStyle(o, a), s.drawPolygon(e, n)
        }
        var l = r.getText();
        if (l && l.getText()) {
          var u = (i || t).getBuilder(r.getZIndex(), Vu);
          u.setTextStyle(l), u.drawText(e, n)
        }
      }, MultiPoint: function (t, e, r, n, i) {
        var o, a = r.getImage(), s = r.getText();
        i && (t = i, o = a && s && s.getText() ? {} : void 0);
        if (a) {
          if (a.getImageState() != ki) return;
          var l = t.getBuilder(r.getZIndex(), zu);
          l.setImageStyle(a, o), l.drawMultiPoint(e, n)
        }
        if (s && s.getText()) {
          var u = (i || t).getBuilder(r.getZIndex(), Vu);
          u.setTextStyle(s, o), u.drawText(e, n)
        }
      }, MultiLineString: function (t, e, r, n, i) {
        var o = r.getStroke();
        if (o) {
          var a = t.getBuilder(r.getZIndex(), Uu);
          a.setFillStrokeStyle(null, o), a.drawMultiLineString(e, n)
        }
        var s = r.getText();
        if (s && s.getText()) {
          var l = (i || t).getBuilder(r.getZIndex(), Vu);
          l.setTextStyle(s), l.drawText(e, n)
        }
      }, MultiPolygon: function (t, e, r, n, i) {
        var o = r.getFill(), a = r.getStroke();
        if (a || o) {
          var s = t.getBuilder(r.getZIndex(), Bu);
          s.setFillStrokeStyle(o, a), s.drawMultiPolygon(e, n)
        }
        var l = r.getText();
        if (l && l.getText()) {
          var u = (i || t).getBuilder(r.getZIndex(), Vu);
          u.setTextStyle(l), u.drawText(e, n)
        }
      }, GeometryCollection: function (t, e, r, n, i) {
        var o, a, s = e.getGeometriesArray();
        for (o = 0, a = s.length; o < a; ++o) {
          (0, Yu[s[o].getType()])(t, s[o], r, n, i)
        }
      }, Circle: function (t, e, r, n, i) {
        var o = r.getFill(), a = r.getStroke();
        if (o || a) {
          var s = t.getBuilder(r.getZIndex(), Du);
          s.setFillStrokeStyle(o, a), s.drawCircle(e, n)
        }
        var l = r.getText();
        if (l && l.getText()) {
          var u = (i || t).getBuilder(r.getZIndex(), Vu);
          u.setTextStyle(l), u.drawText(e, n)
        }
      }
    };

    function Wu(t, e) {
      return parseInt(o(t), 10) - parseInt(o(e), 10)
    }

    function qu(t, e) {
      var r = Xu(t, e);
      return r * r
    }

    function Xu(t, e) {
      return .5 * t / e
    }

    function Zu(t, e, r, n, i, o, a) {
      var s = !1, l = r.getImage();
      if (l) {
        var u = l.getImageState();
        u == ki || u == ji ? l.unlistenImageChange(i) : (u == Fi && l.load(), u = l.getImageState(), l.listenImageChange(i), s = !0)
      }
      return function (t, e, r, n, i, o) {
        var a = r.getGeometryFunction()(e);
        if (!a) return;
        var s = a.simplifyTransformed(n, i);
        if (r.getRenderer()) !function t(e, r, n, i) {
          if (r.getType() == bt.GEOMETRY_COLLECTION) {
            for (var o = r.getGeometries(), a = 0, s = o.length; a < s; ++a) t(e, o[a], n, i);
            return
          }
          e.getBuilder(n.getZIndex(), Gu).drawCustom(r, i, n.getRenderer())
        }(t, s, r, e); else {
          (0, Yu[s.getType()])(t, s, r, e, o)
        }
      }(t, e, r, n, o, a), s
    }

    function Ku(t) {
      var e, r = t.frameState, n = Ot(t.inversePixelTransform.slice(), r.coordinateToPixelTransform),
        i = qu(r.viewState.resolution, r.pixelRatio), o = tn();
      return o && (e = Zr(o, r.viewState.projection)), new Nu(t.context, r.pixelRatio, r.extent, n, r.viewState.rotation, i, e)
    }

    var Hu, $u = {imageSmoothingEnabled: !1, msImageSmoothingEnabled: !1};

    function Ju(t, e, r, n, i) {
      t.beginPath(), t.moveTo(0, 0), t.lineTo(e, r), t.lineTo(n, i), t.closePath(), t.save(), t.clip(), t.fillRect(0, 0, Math.max(e, n) + 1, Math.max(r, i)), t.restore()
    }

    function Qu(t, e) {
      return Math.abs(t[4 * e] - 210) > 2 || Math.abs(t[4 * e + 3] - 191.25) > 2
    }

    function tc(t, e, r, n) {
      var i = Hr(r, e, t), o = zr(e, n, r), a = e.getMetersPerUnit();
      void 0 !== a && (o *= a);
      var s = t.getMetersPerUnit();
      void 0 !== s && (o /= s);
      var l = t.getExtent();
      if (!l || Qt(l, i)) {
        var u = zr(t, o, i) / o;
        isFinite(u) && u > 0 && (o /= u)
      }
      return o
    }

    function ec(t, e, r, n) {
      var i = xe(r), o = tc(t, e, i, n);
      return (!isFinite(o) || o <= 0) && me(r, (function (r) {
        return o = tc(t, e, r, n), isFinite(o) && o > 0
      })), o
    }

    function rc(t, e, r, n, i, o, a, s, l, u, c, h) {
      var p = uo(Math.round(r * t), Math.round(r * e));
      if (O(p, h), 0 === l.length) return p.canvas;

      function f(t) {
        return Math.round(t * r) / r
      }

      p.scale(r, r), p.globalCompositeOperation = "lighter";
      var d = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
      l.forEach((function (t, e, r) {
        he(d, t.extent)
      }));
      var g = Pe(d), y = Ee(d), m = uo(Math.round(r * g / n), Math.round(r * y / n));
      O(m, h);
      var v = r / n;
      l.forEach((function (t, e, r) {
        var n = t.extent[0] - d[0], i = -(t.extent[3] - d[3]), o = Pe(t.extent), a = Ee(t.extent);
        t.image.width > 0 && t.image.height > 0 && m.drawImage(t.image, u, u, t.image.width - 2 * u, t.image.height - 2 * u, n * v, i * v, o * v, a * v)
      }));
      var _ = Ce(a);
      return s.getTriangles().forEach((function (t, e, i) {
        var a = t.source, s = t.target, l = a[0][0], u = a[0][1], c = a[1][0], g = a[1][1], y = a[2][0], v = a[2][1],
          b = f((s[0][0] - _[0]) / o), x = f(-(s[0][1] - _[1]) / o), w = f((s[1][0] - _[0]) / o),
          S = f(-(s[1][1] - _[1]) / o), E = f((s[2][0] - _[0]) / o), T = f(-(s[2][1] - _[1]) / o), C = l, O = u;
        l = 0, u = 0;
        var P = Be([[c -= C, g -= O, 0, 0, w - b], [y -= C, v -= O, 0, 0, E - b], [0, 0, c, g, S - x], [0, 0, y, v, T - x]]);
        if (P) {
          if (p.save(), p.beginPath(), function () {
            if (void 0 === Hu) {
              var t = document.createElement("canvas").getContext("2d");
              t.globalCompositeOperation = "lighter", t.fillStyle = "rgba(210, 0, 0, 0.75)", Ju(t, 4, 5, 4, 0), Ju(t, 4, 5, 0, 5);
              var e = t.getImageData(0, 0, 3, 3).data;
              Hu = Qu(e, 0) || Qu(e, 4) || Qu(e, 8)
            }
            return Hu
          }() || h === $u) {
            p.moveTo(w, S);
            for (var R = b - w, I = x - S, L = 0; L < 4; L++) p.lineTo(w + f((L + 1) * R / 4), S + f(L * I / 3)), 3 != L && p.lineTo(w + f((L + 1) * R / 4), S + f((L + 1) * I / 3));
            p.lineTo(E, T)
          } else p.moveTo(w, S), p.lineTo(b, x), p.lineTo(E, T);
          p.clip(), p.transform(P[0], P[2], P[1], P[3], b, x), p.translate(d[0] - C, d[3] - O), p.scale(n / r, -n / r), p.drawImage(m.canvas, 0, 0), p.restore()
        }
      })), c && (p.save(), p.globalCompositeOperation = "source-over", p.strokeStyle = "black", p.lineWidth = 1, s.getTriangles().forEach((function (t, e, r) {
        var n = t.target, i = (n[0][0] - _[0]) / o, a = -(n[0][1] - _[1]) / o, s = (n[1][0] - _[0]) / o,
          l = -(n[1][1] - _[1]) / o, u = (n[2][0] - _[0]) / o, c = -(n[2][1] - _[1]) / o;
        p.beginPath(), p.moveTo(s, l), p.lineTo(i, a), p.lineTo(u, c), p.closePath(), p.stroke()
      })), p.restore()), p.canvas
    }

    var nc = [0, 0, 0], ic = function () {
      function t(t) {
        var e;
        if (this.minZoom = void 0 !== t.minZoom ? t.minZoom : 0, this.resolutions_ = t.resolutions, pt(w(this.resolutions_, (function (t, e) {
          return e - t
        }), !0), 17), !t.origins) for (var r = 0, n = this.resolutions_.length - 1; r < n; ++r) if (e) {
          if (this.resolutions_[r] / this.resolutions_[r + 1] !== e) {
            e = void 0;
            break
          }
        } else e = this.resolutions_[r] / this.resolutions_[r + 1];
        this.zoomFactor_ = e, this.maxZoom = this.resolutions_.length - 1, this.origin_ = void 0 !== t.origin ? t.origin : null, this.origins_ = null, void 0 !== t.origins && (this.origins_ = t.origins, pt(this.origins_.length == this.resolutions_.length, 20));
        var i = t.extent;
        void 0 === i || this.origin_ || this.origins_ || (this.origin_ = Ce(i)), pt(!this.origin_ && this.origins_ || this.origin_ && !this.origins_, 18), this.tileSizes_ = null, void 0 !== t.tileSizes && (this.tileSizes_ = t.tileSizes, pt(this.tileSizes_.length == this.resolutions_.length, 19)), this.tileSize_ = void 0 !== t.tileSize ? t.tileSize : this.tileSizes_ ? null : 256, pt(!this.tileSize_ && this.tileSizes_ || this.tileSize_ && !this.tileSizes_, 22), this.extent_ = void 0 !== i ? i : null, this.fullTileRanges_ = null, this.tmpSize_ = [0, 0], void 0 !== t.sizes ? this.fullTileRanges_ = t.sizes.map((function (t, e) {
          var r = new _u(Math.min(0, t[0]), Math.max(t[0] - 1, -1), Math.min(0, t[1]), Math.max(t[1] - 1, -1));
          if (i) {
            var n = this.getTileRangeForExtentAndZ(i, e);
            r.minX = Math.max(n.minX, r.minX), r.maxX = Math.min(n.maxX, r.maxX), r.minY = Math.max(n.minY, r.minY), r.maxY = Math.min(n.maxY, r.maxY)
          }
          return r
        }), this) : i && this.calculateTileRanges_(i)
      }

      return t.prototype.forEachTileCoord = function (t, e, r) {
        for (var n = this.getTileRangeForExtentAndZ(t, e), i = n.minX, o = n.maxX; i <= o; ++i) for (var a = n.minY, s = n.maxY; a <= s; ++a) r([e, i, a])
      }, t.prototype.forEachTileCoordParentTileRange = function (t, e, r, n) {
        var i, o, a = null, s = t[0] - 1;
        for (2 === this.zoomFactor_ ? (i = t[1], o = t[2]) : a = this.getTileCoordExtent(t, n); s >= this.minZoom;) {
          if (e(s, 2 === this.zoomFactor_ ? vu(i = Math.floor(i / 2), i, o = Math.floor(o / 2), o, r) : this.getTileRangeForExtentAndZ(a, s, r))) return !0;
          --s
        }
        return !1
      }, t.prototype.getExtent = function () {
        return this.extent_
      }, t.prototype.getMaxZoom = function () {
        return this.maxZoom
      }, t.prototype.getMinZoom = function () {
        return this.minZoom
      }, t.prototype.getOrigin = function (t) {
        return this.origin_ ? this.origin_ : this.origins_[t]
      }, t.prototype.getResolution = function (t) {
        return this.resolutions_[t]
      }, t.prototype.getResolutions = function () {
        return this.resolutions_
      }, t.prototype.getTileCoordChildTileRange = function (t, e, r) {
        if (t[0] < this.maxZoom) {
          if (2 === this.zoomFactor_) {
            var n = 2 * t[1], i = 2 * t[2];
            return vu(n, n + 1, i, i + 1, e)
          }
          var o = this.getTileCoordExtent(t, r);
          return this.getTileRangeForExtentAndZ(o, t[0] + 1, e)
        }
        return null
      }, t.prototype.getTileRangeExtent = function (t, e, r) {
        var n = this.getOrigin(t), i = this.getResolution(t), o = Is(this.getTileSize(t), this.tmpSize_),
          a = n[0] + e.minX * o[0] * i, s = n[0] + (e.maxX + 1) * o[0] * i;
        return ie(a, n[1] + e.minY * o[1] * i, s, n[1] + (e.maxY + 1) * o[1] * i, r)
      }, t.prototype.getTileRangeForExtentAndZ = function (t, e, r) {
        var n = nc;
        this.getTileCoordForXYAndZ_(t[0], t[3], e, !1, n);
        var i = n[1], o = n[2];
        return this.getTileCoordForXYAndZ_(t[2], t[1], e, !0, n), vu(i, n[1], o, n[2], r)
      }, t.prototype.getTileCoordCenter = function (t) {
        var e = this.getOrigin(t[0]), r = this.getResolution(t[0]), n = Is(this.getTileSize(t[0]), this.tmpSize_);
        return [e[0] + (t[1] + .5) * n[0] * r, e[1] - (t[2] + .5) * n[1] * r]
      }, t.prototype.getTileCoordExtent = function (t, e) {
        var r = this.getOrigin(t[0]), n = this.getResolution(t[0]), i = Is(this.getTileSize(t[0]), this.tmpSize_),
          o = r[0] + t[1] * i[0] * n, a = r[1] - (t[2] + 1) * i[1] * n;
        return ie(o, a, o + i[0] * n, a + i[1] * n, e)
      }, t.prototype.getTileCoordForCoordAndResolution = function (t, e, r) {
        return this.getTileCoordForXYAndResolution_(t[0], t[1], e, !1, r)
      }, t.prototype.getTileCoordForXYAndResolution_ = function (t, e, r, n, i) {
        var o = this.getZForResolution(r), a = r / this.getResolution(o), s = this.getOrigin(o),
          l = Is(this.getTileSize(o), this.tmpSize_), u = n ? .5 : 0, c = n ? .5 : 0,
          h = Math.floor((t - s[0]) / r + u), p = Math.floor((s[1] - e) / r + c), f = a * h / l[0], d = a * p / l[1];
        return n ? (f = Math.ceil(f) - 1, d = Math.ceil(d) - 1) : (f = Math.floor(f), d = Math.floor(d)), uu(o, f, d, i)
      }, t.prototype.getTileCoordForXYAndZ_ = function (t, e, r, n, i) {
        var o = this.getOrigin(r), a = this.getResolution(r), s = Is(this.getTileSize(r), this.tmpSize_),
          l = n ? .5 : 0, u = n ? .5 : 0, c = Math.floor((t - o[0]) / a + l), h = Math.floor((o[1] - e) / a + u),
          p = c / s[0], f = h / s[1];
        return n ? (p = Math.ceil(p) - 1, f = Math.ceil(f) - 1) : (p = Math.floor(p), f = Math.floor(f)), uu(r, p, f, i)
      }, t.prototype.getTileCoordForCoordAndZ = function (t, e, r) {
        return this.getTileCoordForXYAndZ_(t[0], t[1], e, !1, r)
      }, t.prototype.getTileCoordResolution = function (t) {
        return this.resolutions_[t[0]]
      }, t.prototype.getTileSize = function (t) {
        return this.tileSize_ ? this.tileSize_ : this.tileSizes_[t]
      }, t.prototype.getFullTileRange = function (t) {
        return this.fullTileRanges_ ? this.fullTileRanges_[t] : this.extent_ ? this.getTileRangeForExtentAndZ(this.extent_, t) : null
      }, t.prototype.getZForResolution = function (t, e) {
        return Ne(y(this.resolutions_, t, e || 0), this.minZoom, this.maxZoom)
      }, t.prototype.calculateTileRanges_ = function (t) {
        for (var e = this.resolutions_.length, r = new Array(e), n = this.minZoom; n < e; ++n) r[n] = this.getTileRangeForExtentAndZ(t, n);
        this.fullTileRanges_ = r
      }, t
    }();

    function oc(t) {
      var e = t.getDefaultTileGrid();
      return e || (e = cc(t), t.setDefaultTileGrid(e)), e
    }

    function ac(t, e, r) {
      var n = e[0], i = t.getTileCoordCenter(e), o = hc(r);
      if (Qt(o, i)) return e;
      var a = Pe(o), s = Math.ceil((o[0] - i[0]) / a);
      return i[0] += a * s, t.getTileCoordForCoordAndZ(i, n)
    }

    function sc(t, e, r, n) {
      var i = void 0 !== n ? n : Ut, o = uc(t, e, r);
      return new ic({extent: t, origin: we(t, i), resolutions: o, tileSize: r})
    }

    function lc(t) {
      var e = t || {}, r = e.extent || Gr("EPSG:3857").getExtent(), n = {
        extent: r,
        minZoom: e.minZoom,
        tileSize: e.tileSize,
        resolutions: uc(r, e.maxZoom, e.tileSize, e.maxResolution)
      };
      return new ic(n)
    }

    function uc(t, e, r, n) {
      for (var i = void 0 !== e ? e : 42, o = Ee(t), a = Pe(t), s = Is(void 0 !== r ? r : 256), l = n > 0 ? n : Math.max(a / s[0], o / s[1]), u = i + 1, c = new Array(u), h = 0; h < u; ++h) c[h] = l / Math.pow(2, h);
      return c
    }

    function cc(t, e, r, n) {
      return sc(hc(t), e, r, n)
    }

    function hc(t) {
      var e = (t = Gr(t)).getExtent();
      if (!e) {
        var r = 180 * wt[St.DEGREES] / t.getMetersPerUnit();
        e = ie(-r, -r, r, r)
      }
      return e
    }

    function pc(t, e) {
      var r = /\{z\}/g, n = /\{x\}/g, i = /\{y\}/g, o = /\{-y\}/g;
      return function (a, s, l) {
        return a ? t.replace(r, a[0].toString()).replace(n, a[1].toString()).replace(i, a[2].toString()).replace(o, (function () {
          var t = a[0], r = e.getFullTileRange(t);
          return pt(r, 55), (r.getHeight() - a[2] - 1).toString()
        })) : void 0
      }
    }

    function fc(t, e) {
      for (var r = t.length, n = new Array(r), i = 0; i < r; ++i) n[i] = pc(t[i], e);
      return dc(n)
    }

    function dc(t) {
      return 1 === t.length ? t[0] : function (e, r, n) {
        if (e) {
          var i = We(fu(e), t.length);
          return t[i](e, r, n)
        }
      }
    }

    function gc(t, e, r) {
    }

    function yc(t) {
      var e = [], r = /\{([a-z])-([a-z])\}/.exec(t);
      if (r) {
        var n = r[1].charCodeAt(0), i = r[2].charCodeAt(0), o = void 0;
        for (o = n; o <= i; ++o) e.push(t.replace(r[0], String.fromCharCode(o)));
        return e
      }
      if (r = /\{(\d+)-(\d+)\}/.exec(t)) {
        for (var a = parseInt(r[2], 10), s = parseInt(r[1], 10); s <= a; s++) e.push(t.replace(r[0], s.toString()));
        return e
      }
      return e.push(t), e
    }

    function mc(t, e) {
      var r = [];
      Object.keys(e).forEach((function (t) {
        null !== e[t] && void 0 !== e[t] && r.push(t + "=" + encodeURIComponent(e[t]))
      }));
      var n = r.join("&");
      return (t = -1 === (t = t.replace(/[?&]$/, "")).indexOf("?") ? t + "?" : t + "&") + n
    }

    var vc, _c = ["experimental-webgl", "webgl", "webkit-3d", "moz-webgl"];

    function bc(t, e) {
      for (var r = _c.length, n = 0; n < r; ++n) try {
        var i = t.getContext(_c[n], e);
        if (i) return i
      } catch (t) {
      }
      return null
    }

    function xc() {
      if (!vc) {
        var t = bc(document.createElement("canvas"));
        t && (vc = t.getSupportedExtensions())
      }
      return vc
    }

    var wc = "http://www.w3.org/2001/XMLSchema-instance";

    function Sc(t, e) {
      return Xc().createElementNS(t, e)
    }

    function Ec(t, e) {
      return Tc(t, e, []).join("")
    }

    function Tc(t, e, r) {
      if (t.nodeType == Node.CDATA_SECTION_NODE || t.nodeType == Node.TEXT_NODE) e ? r.push(String(t.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : r.push(t.nodeValue); else {
        var n = void 0;
        for (n = t.firstChild; n; n = n.nextSibling) Tc(n, e, r)
      }
      return r
    }

    function Cc(t) {
      return "documentElement" in t
    }

    function Oc(t, e, r) {
      return t.getAttributeNS(e, r) || ""
    }

    function Pc(t) {
      return (new DOMParser).parseFromString(t, "application/xml")
    }

    function Rc(t, e) {
      return function (r, n) {
        var i = t.call(void 0 !== e ? e : this, r, n);
        void 0 !== i && v(n[n.length - 1], i)
      }
    }

    function Ic(t, e) {
      return function (r, n) {
        var i = t.call(void 0 !== e ? e : this, r, n);
        void 0 !== i && n[n.length - 1].push(i)
      }
    }

    function Lc(t, e) {
      return function (r, n) {
        var i = t.call(void 0 !== e ? e : this, r, n);
        void 0 !== i && (n[n.length - 1] = i)
      }
    }

    function Mc(t, e, r) {
      return function (n, i) {
        var o = t.call(void 0 !== r ? r : this, n, i);
        if (void 0 !== o) {
          var a = i[i.length - 1], s = void 0 !== e ? e : n.localName, l = void 0;
          s in a ? l = a[s] : (l = [], a[s] = l), l.push(o)
        }
      }
    }

    function Fc(t, e, r) {
      return function (n, i) {
        var o = t.call(void 0 !== r ? r : this, n, i);
        void 0 !== o && (i[i.length - 1][void 0 !== e ? e : n.localName] = o)
      }
    }

    function Ac(t, e) {
      return function (r, n, i) {
        t.call(void 0 !== e ? e : this, r, n, i), i[i.length - 1].node.appendChild(r)
      }
    }

    function kc(t, e) {
      var r, n;
      return function (e, i, o) {
        if (void 0 === r) {
          r = {};
          var a = {};
          a[e.localName] = t, r[e.namespaceURI] = a, n = jc(e.localName)
        }
        Bc(r, n, i, o)
      }
    }

    function jc(t, e) {
      var r = t;
      return function (t, n, i) {
        var o = n[n.length - 1].node, a = r;
        return void 0 === a && (a = i), Sc(void 0 !== e ? e : o.namespaceURI, a)
      }
    }

    var Nc = jc();

    function Dc(t, e) {
      for (var r = e.length, n = new Array(r), i = 0; i < r; ++i) n[i] = t[e[i]];
      return n
    }

    function Gc(t, e, r) {
      var n, i, o = void 0 !== r ? r : {};
      for (n = 0, i = t.length; n < i; ++n) o[t[n]] = e;
      return o
    }

    function zc(t, e, r, n) {
      var i;
      for (i = e.firstElementChild; i; i = i.nextElementSibling) {
        var o = t[i.namespaceURI];
        if (void 0 !== o) {
          var a = o[i.localName];
          void 0 !== a && a.call(n, i, r)
        }
      }
    }

    function Uc(t, e, r, n, i) {
      return n.push(t), zc(e, r, n, i), n.pop()
    }

    function Bc(t, e, r, n, i, o) {
      for (var a, s, l = (void 0 !== i ? i : r).length, u = 0; u < l; ++u) void 0 !== (a = r[u]) && void 0 !== (s = e.call(void 0 !== o ? o : this, a, n, void 0 !== i ? i[u] : void 0)) && t[s.namespaceURI][s.localName].call(o, s, a, n)
    }

    function Vc(t, e, r, n, i, o, a) {
      return i.push(t), Bc(e, r, n, i, o, a), i.pop()
    }

    var Yc = void 0;

    function Wc() {
      return void 0 === Yc && "undefined" != typeof XMLSerializer && (Yc = new XMLSerializer), Yc
    }

    var qc = void 0;

    function Xc() {
      return void 0 === qc && "undefined" != typeof document && (qc = document.implementation.createDocument("", "", null)), qc
    }

    var Zc = new Blob(['var e=self;e.onmessage=function(s){console.log("version worker received message:",s.data),e.postMessage("version: ".concat("latest"))};'], {type: "application/javascript"});
    URL.createObjectURL(Zc);
    var Kc = new Blob(['var e="function"==typeof Object.assign?Object.assign:function(e,n){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),r=1,o=arguments.length;r<o;++r){var i=arguments[r];if(null!=i)for(var f in i)i.hasOwnProperty(f)&&(t[f]=i[f])}return t},n="GENERATE_BUFFERS",t=[],r={vertexPosition:0,indexPosition:0};function o(e,n,t,r,o){e[n+0]=t,e[n+1]=r,e[n+2]=o}function i(e,n,i,f,s,u){var a=3+s,l=e[n+0],v=e[n+1],c=t;c.length=s;for(var g=0;g<c.length;g++)c[g]=e[n+2+g];var b=u?u.vertexPosition:0,h=u?u.indexPosition:0,d=b/a;return o(i,b,l,v,0),c.length&&i.set(c,b+3),o(i,b+=a,l,v,1),c.length&&i.set(c,b+3),o(i,b+=a,l,v,2),c.length&&i.set(c,b+3),o(i,b+=a,l,v,3),c.length&&i.set(c,b+3),b+=a,f[h++]=d,f[h++]=d+1,f[h++]=d+3,f[h++]=d+1,f[h++]=d+2,f[h++]=d+3,r.vertexPosition=b,r.indexPosition=h,r}var f=self;f.onmessage=function(t){var r=t.data;if(r.type===n){for(var o=r.customAttributesCount,s=2+o,u=new Float32Array(r.renderInstructions),a=u.length/s,l=4*a*(o+3),v=new Uint32Array(6*a),c=new Float32Array(l),g=null,b=0;b<u.length;b+=s)g=i(u,b,c,v,o,g);var h=e({vertexBuffer:c.buffer,indexBuffer:v.buffer,renderInstructions:u.buffer},r);f.postMessage(h,[c.buffer,v.buffer,u.buffer])}};'], {type: "application/javascript"}),
      Hc = URL.createObjectURL(Kc);
    var $c = 35044;

    function Jc(t) {
      switch (t) {
        case 34962:
          return Float32Array;
        case 34963:
          return Uint32Array;
        default:
          return Float32Array
      }
    }

    var Qc = function () {
      function t(t, e) {
        this.array = null, this.type = t, pt(34962 === t || 34963 === t, 62), this.usage = void 0 !== e ? e : $c
      }

      return t.prototype.ofSize = function (t) {
        this.array = new (Jc(this.type))(t)
      }, t.prototype.fromArray = function (t) {
        this.array = Jc(this.type).from(t)
      }, t.prototype.fromArrayBuffer = function (t) {
        this.array = new (Jc(this.type))(t)
      }, t.prototype.getType = function () {
        return this.type
      }, t.prototype.getArray = function () {
        return this.array
      }, t.prototype.getUsage = function () {
        return this.usage
      }, t.prototype.getSize = function () {
        return this.array ? this.array.length : 0
      }, t
    }(), th = "webglcontextlost", eh = "webglcontextrestored", rh = function () {
      function t(t) {
        this.gl_ = t.webGlContext;
        var e = this.gl_;
        this.scaleRatio_ = t.scaleRatio || 1, this.renderTargetTexture_ = e.createTexture(), this.renderTargetTextureSize_ = null, this.frameBuffer_ = e.createFramebuffer();
        var r = e.createShader(e.VERTEX_SHADER);
        e.shaderSource(r, t.vertexShader || "\n  precision mediump float;\n  \n  attribute vec2 a_position;\n  varying vec2 v_texCoord;\n  varying vec2 v_screenCoord;\n  \n  uniform vec2 u_screenSize;\n   \n  void main() {\n    v_texCoord = a_position * 0.5 + 0.5;\n    v_screenCoord = v_texCoord * u_screenSize;\n    gl_Position = vec4(a_position, 0.0, 1.0);\n  }\n"), e.compileShader(r);
        var n = e.createShader(e.FRAGMENT_SHADER);
        e.shaderSource(n, t.fragmentShader || "\n  precision mediump float;\n   \n  uniform sampler2D u_image;\n   \n  varying vec2 v_texCoord;\n   \n  void main() {\n    gl_FragColor = texture2D(u_image, v_texCoord);\n  }\n"), e.compileShader(n), this.renderTargetProgram_ = e.createProgram(), e.attachShader(this.renderTargetProgram_, r), e.attachShader(this.renderTargetProgram_, n), e.linkProgram(this.renderTargetProgram_), this.renderTargetVerticesBuffer_ = e.createBuffer();
        e.bindBuffer(e.ARRAY_BUFFER, this.renderTargetVerticesBuffer_), e.bufferData(e.ARRAY_BUFFER, new Float32Array([-1, -1, 1, -1, -1, 1, 1, -1, 1, 1, -1, 1]), e.STATIC_DRAW), this.renderTargetAttribLocation_ = e.getAttribLocation(this.renderTargetProgram_, "a_position"), this.renderTargetUniformLocation_ = e.getUniformLocation(this.renderTargetProgram_, "u_screenSize"), this.renderTargetTextureLocation_ = e.getUniformLocation(this.renderTargetProgram_, "u_image"), this.uniforms_ = [], t.uniforms && Object.keys(t.uniforms).forEach(function (r) {
          this.uniforms_.push({value: t.uniforms[r], location: e.getUniformLocation(this.renderTargetProgram_, r)})
        }.bind(this))
      }

      return t.prototype.getGL = function () {
        return this.gl_
      }, t.prototype.init = function (t) {
        var e = this.getGL(), r = [e.drawingBufferWidth * this.scaleRatio_, e.drawingBufferHeight * this.scaleRatio_];
        if (e.bindFramebuffer(e.FRAMEBUFFER, this.getFrameBuffer()), e.viewport(0, 0, r[0], r[1]), !this.renderTargetTextureSize_ || this.renderTargetTextureSize_[0] !== r[0] || this.renderTargetTextureSize_[1] !== r[1]) {
          this.renderTargetTextureSize_ = r;
          var n = e.RGBA, i = e.RGBA, o = e.UNSIGNED_BYTE;
          e.bindTexture(e.TEXTURE_2D, this.renderTargetTexture_), e.texImage2D(e.TEXTURE_2D, 0, n, r[0], r[1], 0, i, o, null), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_MIN_FILTER, e.LINEAR), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_S, e.CLAMP_TO_EDGE), e.texParameteri(e.TEXTURE_2D, e.TEXTURE_WRAP_T, e.CLAMP_TO_EDGE), e.framebufferTexture2D(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0, e.TEXTURE_2D, this.renderTargetTexture_, 0)
        }
      }, t.prototype.apply = function (t, e) {
        var r = this.getGL(), n = t.size;
        r.bindFramebuffer(r.FRAMEBUFFER, e ? e.getFrameBuffer() : null), r.activeTexture(r.TEXTURE0), r.bindTexture(r.TEXTURE_2D, this.renderTargetTexture_), r.clearColor(0, 0, 0, 0), r.clear(r.COLOR_BUFFER_BIT), r.enable(r.BLEND), r.blendFunc(r.ONE, r.ONE_MINUS_SRC_ALPHA), r.viewport(0, 0, r.drawingBufferWidth, r.drawingBufferHeight), r.bindBuffer(r.ARRAY_BUFFER, this.renderTargetVerticesBuffer_), r.useProgram(this.renderTargetProgram_), r.enableVertexAttribArray(this.renderTargetAttribLocation_), r.vertexAttribPointer(this.renderTargetAttribLocation_, 2, r.FLOAT, !1, 0, 0), r.uniform2f(this.renderTargetUniformLocation_, n[0], n[1]), r.uniform1i(this.renderTargetTextureLocation_, 0), this.applyUniforms(t), r.drawArrays(r.TRIANGLES, 0, 6)
      }, t.prototype.getFrameBuffer = function () {
        return this.frameBuffer_
      }, t.prototype.applyUniforms = function (t) {
        var e, r = this.getGL(), n = 1;
        this.uniforms_.forEach((function (i) {
          if ((e = "function" == typeof i.value ? i.value(t) : i.value) instanceof HTMLCanvasElement || e instanceof ImageData) i.texture || (i.texture = r.createTexture()), r.activeTexture(r["TEXTURE" + n]), r.bindTexture(r.TEXTURE_2D, i.texture), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MIN_FILTER, r.LINEAR), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE), e instanceof ImageData ? r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, e.width, e.height, 0, r.UNSIGNED_BYTE, new Uint8Array(e.data)) : r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, r.UNSIGNED_BYTE, e), r.uniform1i(i.location, n++); else if (Array.isArray(e)) switch (e.length) {
            case 2:
              return void r.uniform2f(i.location, e[0], e[1]);
            case 3:
              return void r.uniform3f(i.location, e[0], e[1], e[2]);
            case 4:
              return void r.uniform4f(i.location, e[0], e[1], e[2], e[3]);
            default:
              return
          } else "number" == typeof e && r.uniform1f(i.location, e)
        }))
      }, t
    }();

    function nh() {
      return [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
    }

    function ih(t, e) {
      return t[0] = e[0], t[1] = e[1], t[4] = e[2], t[5] = e[3], t[12] = e[4], t[13] = e[5], t
    }

    var oh = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ah = "u_projectionMatrix", sh = "u_offsetScaleMatrix", lh = "u_offsetRotateMatrix", uh = "u_time",
      ch = "u_zoom", hh = "u_resolution",
      ph = {UNSIGNED_BYTE: 5121, UNSIGNED_SHORT: 5123, UNSIGNED_INT: 5125, FLOAT: 5126};

    function fh(t) {
      for (var e = 0, r = 0; r < t.length; r++) {
        var n = t[r];
        e += n.size * dh(n.type)
      }
      return e
    }

    function dh(t) {
      switch (t) {
        case ph.UNSIGNED_BYTE:
          return Uint8Array.BYTES_PER_ELEMENT;
        case ph.UNSIGNED_SHORT:
          return Uint16Array.BYTES_PER_ELEMENT;
        case ph.UNSIGNED_INT:
          return Uint32Array.BYTES_PER_ELEMENT;
        case ph.FLOAT:
        default:
          return Float32Array.BYTES_PER_ELEMENT
      }
    }

    var gh = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        r.boundHandleWebGLContextLost_ = r.handleWebGLContextLost.bind(r), r.boundHandleWebGLContextRestored_ = r.handleWebGLContextRestored.bind(r), r.canvas_ = document.createElement("canvas"), r.canvas_.style.position = "absolute", r.canvas_.style.left = "0", r.gl_ = bc(r.canvas_);
        var i = r.getGL();
        if (r.bufferCache_ = {}, r.currentProgram_ = null, pt(g(xc(), "OES_element_index_uint"), 63), i.getExtension("OES_element_index_uint"), r.canvas_.addEventListener(th, r.boundHandleWebGLContextLost_), r.canvas_.addEventListener(eh, r.boundHandleWebGLContextRestored_), r.offsetRotateMatrix_ = [1, 0, 0, 1, 0, 0], r.offsetScaleMatrix_ = [1, 0, 0, 1, 0, 0], r.tmpMat4_ = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], r.uniformLocations_ = {}, r.attribLocations_ = {}, r.uniforms_ = [], n.uniforms) for (var o in n.uniforms) r.uniforms_.push({
          name: o,
          value: n.uniforms[o]
        });
        return r.postProcessPasses_ = n.postProcesses ? n.postProcesses.map((function (t) {
          return new rh({
            webGlContext: i,
            scaleRatio: t.scaleRatio,
            vertexShader: t.vertexShader,
            fragmentShader: t.fragmentShader,
            uniforms: t.uniforms
          })
        })) : [new rh({webGlContext: i})], r.shaderCompileErrors_ = null, r.startTime_ = Date.now(), r
      }

      return oh(e, t), e.prototype.bindBuffer = function (t) {
        var e = this.getGL(), r = o(t), n = this.bufferCache_[r];
        n || (n = {buffer: t, webGlBuffer: e.createBuffer()}, this.bufferCache_[r] = n);
        e.bindBuffer(t.getType(), n.webGlBuffer)
      }, e.prototype.flushBufferData = function (t) {
        var e = this.getGL();
        this.bindBuffer(t), e.bufferData(t.getType(), t.getArray(), t.getUsage())
      }, e.prototype.deleteBuffer = function (t) {
        var e = this.getGL(), r = o(t), n = this.bufferCache_[r];
        e.isContextLost() || e.deleteBuffer(n.buffer), delete this.bufferCache_[r]
      }, e.prototype.disposeInternal = function () {
        this.canvas_.removeEventListener(th, this.boundHandleWebGLContextLost_), this.canvas_.removeEventListener(eh, this.boundHandleWebGLContextRestored_)
      }, e.prototype.prepareDraw = function (t) {
        var e = this.getGL(), r = this.getCanvas(), n = t.size, i = t.pixelRatio;
        r.width = n[0] * i, r.height = n[1] * i, r.style.width = n[0] + "px", r.style.height = n[1] + "px", e.useProgram(this.currentProgram_);
        for (var o = this.postProcessPasses_.length - 1; o >= 0; o--) this.postProcessPasses_[o].init(t);
        e.bindTexture(e.TEXTURE_2D, null), e.clearColor(0, 0, 0, 0), e.clear(e.COLOR_BUFFER_BIT), e.enable(e.BLEND), e.blendFunc(e.ONE, e.ONE_MINUS_SRC_ALPHA), e.useProgram(this.currentProgram_), this.applyFrameState(t), this.applyUniforms(t)
      }, e.prototype.prepareDrawToRenderTarget = function (t, e, r) {
        var n = this.getGL(), i = e.getSize();
        n.bindFramebuffer(n.FRAMEBUFFER, e.getFramebuffer()), n.viewport(0, 0, i[0], i[1]), n.bindTexture(n.TEXTURE_2D, e.getTexture()), n.clearColor(0, 0, 0, 0), n.clear(n.COLOR_BUFFER_BIT), n.enable(n.BLEND), n.blendFunc(n.ONE, r ? n.ZERO : n.ONE_MINUS_SRC_ALPHA), n.useProgram(this.currentProgram_), this.applyFrameState(t), this.applyUniforms(t)
      }, e.prototype.drawElements = function (t, e) {
        var r = this.getGL(), n = r.UNSIGNED_INT, i = e - t, o = 4 * t;
        r.drawElements(r.TRIANGLES, i, n, o)
      }, e.prototype.finalizeDraw = function (t) {
        for (var e = 0; e < this.postProcessPasses_.length; e++) this.postProcessPasses_[e].apply(t, this.postProcessPasses_[e + 1] || null)
      }, e.prototype.getCanvas = function () {
        return this.canvas_
      }, e.prototype.getGL = function () {
        return this.gl_
      }, e.prototype.applyFrameState = function (t) {
        var e = t.size, r = t.viewState.rotation, n = Ct(this.offsetScaleMatrix_);
        Mt(n, 2 / e[0], 2 / e[1]);
        var i = Ct(this.offsetRotateMatrix_);
        0 !== r && Lt(i, -r), this.setUniformMatrixValue(sh, ih(this.tmpMat4_, n)), this.setUniformMatrixValue(lh, ih(this.tmpMat4_, i)), this.setUniformFloatValue(uh, .001 * (Date.now() - this.startTime_)), this.setUniformFloatValue(ch, t.viewState.zoom), this.setUniformFloatValue(hh, t.viewState.resolution)
      }, e.prototype.applyUniforms = function (t) {
        var e, r = this.getGL(), n = 0;
        this.uniforms_.forEach(function (i) {
          if ((e = "function" == typeof i.value ? i.value(t) : i.value) instanceof HTMLCanvasElement || e instanceof HTMLImageElement || e instanceof ImageData) i.texture || (i.prevValue = void 0, i.texture = r.createTexture()), r.activeTexture(r["TEXTURE" + n]), r.bindTexture(r.TEXTURE_2D, i.texture), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_MIN_FILTER, r.LINEAR), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_S, r.CLAMP_TO_EDGE), r.texParameteri(r.TEXTURE_2D, r.TEXTURE_WRAP_T, r.CLAMP_TO_EDGE), (!(e instanceof HTMLImageElement) || e.complete) && i.prevValue !== e && (i.prevValue = e, r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, r.UNSIGNED_BYTE, e)), r.uniform1i(this.getUniformLocation(i.name), n++); else if (Array.isArray(e) && 6 === e.length) this.setUniformMatrixValue(i.name, ih(this.tmpMat4_, e)); else if (Array.isArray(e) && e.length <= 4) switch (e.length) {
            case 2:
              return void r.uniform2f(this.getUniformLocation(i.name), e[0], e[1]);
            case 3:
              return void r.uniform3f(this.getUniformLocation(i.name), e[0], e[1], e[2]);
            case 4:
              return void r.uniform4f(this.getUniformLocation(i.name), e[0], e[1], e[2], e[3]);
            default:
              return
          } else "number" == typeof e && r.uniform1f(this.getUniformLocation(i.name), e)
        }.bind(this))
      }, e.prototype.useProgram = function (t) {
        return t != this.currentProgram_ && (this.getGL().useProgram(t), this.currentProgram_ = t, this.uniformLocations_ = {}, this.attribLocations_ = {}, !0)
      }, e.prototype.compileShader = function (t, e) {
        var r = this.getGL(), n = r.createShader(e);
        return r.shaderSource(n, t), r.compileShader(n), n
      }, e.prototype.getProgram = function (t, e) {
        var r = this.getGL(), n = this.compileShader(t, r.FRAGMENT_SHADER), i = this.compileShader(e, r.VERTEX_SHADER);
        this.shaderCompileErrors_ = null, r.getShaderInfoLog(n) && (this.shaderCompileErrors_ = "Fragment shader compilation failed:\n" + r.getShaderInfoLog(n)), r.getShaderInfoLog(i) && (this.shaderCompileErrors_ = (this.shaderCompileErrors_ || "") + "Vertex shader compilation failed:\n" + r.getShaderInfoLog(i));
        var o = r.createProgram();
        return r.attachShader(o, n), r.attachShader(o, i), r.linkProgram(o), o
      }, e.prototype.getShaderCompileErrors = function () {
        return this.shaderCompileErrors_
      }, e.prototype.getUniformLocation = function (t) {
        return void 0 === this.uniformLocations_[t] && (this.uniformLocations_[t] = this.getGL().getUniformLocation(this.currentProgram_, t)), this.uniformLocations_[t]
      }, e.prototype.getAttributeLocation = function (t) {
        return void 0 === this.attribLocations_[t] && (this.attribLocations_[t] = this.getGL().getAttribLocation(this.currentProgram_, t)), this.attribLocations_[t]
      }, e.prototype.makeProjectionTransform = function (t, e) {
        var r = t.size, n = t.viewState.rotation, i = t.viewState.resolution, o = t.viewState.center;
        return Ct(e), kt(e, 0, 0, 2 / (i * r[0]), 2 / (i * r[1]), -n, -o[0], -o[1]), e
      }, e.prototype.setUniformFloatValue = function (t, e) {
        this.getGL().uniform1f(this.getUniformLocation(t), e)
      }, e.prototype.setUniformMatrixValue = function (t, e) {
        this.getGL().uniformMatrix4fv(this.getUniformLocation(t), !1, e)
      }, e.prototype.enableAttributeArray_ = function (t, e, r, n, i) {
        var o = this.getAttributeLocation(t);
        o < 0 || (this.getGL().enableVertexAttribArray(o), this.getGL().vertexAttribPointer(o, e, r, !1, n, i))
      }, e.prototype.enableAttributes = function (t) {
        for (var e = fh(t), r = 0, n = 0; n < t.length; n++) {
          var i = t[n];
          this.enableAttributeArray_(i.name, i.size, i.type || 5126, e, r), r += i.size * dh(i.type)
        }
      }, e.prototype.handleWebGLContextLost = function () {
        P(this.bufferCache_), this.currentProgram_ = null
      }, e.prototype.handleWebGLContextRestored = function () {
      }, e.prototype.createTexture = function (t, e, r) {
        var n = this.getGL(), i = r || n.createTexture(), o = n.RGBA, a = n.RGBA, s = n.UNSIGNED_BYTE;
        return n.bindTexture(n.TEXTURE_2D, i), e ? n.texImage2D(n.TEXTURE_2D, 0, o, a, s, e) : n.texImage2D(n.TEXTURE_2D, 0, o, t[0], t[1], 0, a, s, null), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_MIN_FILTER, n.LINEAR), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_WRAP_S, n.CLAMP_TO_EDGE), n.texParameteri(n.TEXTURE_2D, n.TEXTURE_WRAP_T, n.CLAMP_TO_EDGE), i
      }, e
    }(p), yh = new Uint8Array(4), mh = function () {
      function t(t, e) {
        this.helper_ = t;
        var r = t.getGL();
        this.texture_ = r.createTexture(), this.framebuffer_ = r.createFramebuffer(), this.size_ = e || [1, 1], this.data_ = new Uint8Array(0), this.dataCacheDirty_ = !0, this.updateSize_()
      }

      return t.prototype.setSize = function (t) {
        b(t, this.size_) || (this.size_[0] = t[0], this.size_[1] = t[1], this.updateSize_())
      }, t.prototype.getSize = function () {
        return this.size_
      }, t.prototype.clearCachedData = function () {
        this.dataCacheDirty_ = !0
      }, t.prototype.readAll = function () {
        if (this.dataCacheDirty_) {
          var t = this.size_, e = this.helper_.getGL();
          e.bindFramebuffer(e.FRAMEBUFFER, this.framebuffer_), e.readPixels(0, 0, t[0], t[1], e.RGBA, e.UNSIGNED_BYTE, this.data_), this.dataCacheDirty_ = !1
        }
        return this.data_
      }, t.prototype.readPixel = function (t, e) {
        if (t < 0 || e < 0 || t > this.size_[0] || e >= this.size_[1]) return yh[0] = 0, yh[1] = 0, yh[2] = 0, yh[3] = 0, yh;
        this.readAll();
        var r = Math.floor(t) + (this.size_[1] - Math.floor(e) - 1) * this.size_[0];
        return yh[0] = this.data_[4 * r], yh[1] = this.data_[4 * r + 1], yh[2] = this.data_[4 * r + 2], yh[3] = this.data_[4 * r + 3], yh
      }, t.prototype.getTexture = function () {
        return this.texture_
      }, t.prototype.getFramebuffer = function () {
        return this.framebuffer_
      }, t.prototype.updateSize_ = function () {
        var t = this.size_, e = this.helper_.getGL();
        this.texture_ = this.helper_.createTexture(t, null, this.texture_), e.bindFramebuffer(e.FRAMEBUFFER, this.framebuffer_), e.viewport(0, 0, t[0], t[1]), e.framebufferTexture2D(e.FRAMEBUFFER, e.COLOR_ATTACHMENT0, e.TEXTURE_2D, this.texture_, 0), this.data_ = new Uint8Array(t[0] * t[1] * 4)
      }, t
    }(), vh = 1, _h = 2, bh = 4, xh = 8, wh = 16, Sh = 31, Eh = {};

    function Th(t) {
      if ("number" == typeof t) return vh;
      if ("boolean" == typeof t) return xh;
      if ("string" == typeof t) return Io(t) ? bh | _h : _h;
      if (!Array.isArray(t)) throw new Error("Unhandled value type: " + JSON.stringify(t));
      var e = t;
      if (e.every((function (t) {
        return "number" == typeof t
      }))) return 3 === e.length || 4 === e.length ? bh | wh : wh;
      if ("string" != typeof e[0]) throw new Error("Expected an expression operator but received: " + JSON.stringify(e));
      var r = Eh[e[0]];
      if (void 0 === r) throw new Error("Unrecognized expression operator: " + JSON.stringify(e));
      return r.getReturnType(e.slice(1))
    }

    function Ch(t) {
      return Math.log2(t) % 1 == 0
    }

    function Oh(t) {
      var e = t.toString();
      return -1 === e.indexOf(".") ? e + ".0" : e
    }

    function Ph(t) {
      if (t.length < 2 || t.length > 4) throw new Error("`formatArray` can only output `vec2`, `vec3` or `vec4` arrays.");
      return "vec" + t.length + "(" + t.map(Oh).join(", ") + ")"
    }

    function Rh(t) {
      var e = Oo(t).slice();
      return e.length < 4 && e.push(1), Ph(e.map((function (t, e) {
        return e < 3 ? t / 255 : t
      })))
    }

    function Ih(t, e) {
      return void 0 === t.stringLiteralsMap[e] && (t.stringLiteralsMap[e] = Object.keys(t.stringLiteralsMap).length), t.stringLiteralsMap[e]
    }

    function Lh(t, e) {
      return Oh(Ih(t, e))
    }

    function Mh(t, e, r) {
      if (Array.isArray(e) && "string" == typeof e[0]) {
        var n = Eh[e[0]];
        if (void 0 === n) throw new Error("Unrecognized expression operator: " + JSON.stringify(e));
        return n.toGlsl(t, e.slice(1), r)
      }
      var i = Th(e);
      return (i & vh) > 0 ? Oh(e) : (i & xh) > 0 ? e.toString() : (i & _h) > 0 && (void 0 === r || r == _h) ? Lh(t, e.toString()) : (i & bh) > 0 && (void 0 === r || r == bh) ? Rh(e) : (i & wh) > 0 ? Ph(e) : void 0
    }

    function Fh(t) {
      if (!(Th(t) & vh)) throw new Error("A numeric value was expected, got " + JSON.stringify(t) + " instead")
    }

    function Ah(t) {
      for (var e = 0; e < t.length; e++) Fh(t[e])
    }

    function kh(t) {
      if (!(Th(t) & _h)) throw new Error("A string value was expected, got " + JSON.stringify(t) + " instead")
    }

    function jh(t) {
      if (!(Th(t) & xh)) throw new Error("A boolean value was expected, got " + JSON.stringify(t) + " instead")
    }

    function Nh(t, e) {
      if (t.length !== e) throw new Error("Exactly " + e + " arguments were expected, got " + t.length + " instead")
    }

    function Dh(t, e) {
      if (t.length < e) throw new Error("At least " + e + " arguments were expected, got " + t.length + " instead")
    }

    function Gh(t, e) {
      if (t.length > e) throw new Error("At most " + e + " arguments were expected, got " + t.length + " instead")
    }

    function zh(t) {
      if (t.length % 2 != 0) throw new Error("An even amount of arguments was expected, got " + t + " instead")
    }

    function Uh(t, e) {
      if (!Ch(e)) throw new Error("Could not infer only one type from the following expression: " + JSON.stringify(t))
    }

    function Bh(t) {
      return {
        getReturnType: function (t) {
          return xh
        }, toGlsl: function (e, r) {
          Nh(r, 2);
          for (var n = Sh, i = 0; i < r.length; i++) n &= Th(r[i]);
          if (0 === n) throw new Error("All arguments should be of compatible type, got " + JSON.stringify(r) + " instead");
          return "(" + Mh(e, r[0], n) + " " + t + " " + Mh(e, r[1], n) + ")"
        }
      }
    }

    function Vh(t) {
      return {
        getReturnType: function (t) {
          return xh
        }, toGlsl: function (e, r) {
          Dh(r, 2);
          for (var n = 0; n < r.length; n++) jh(r[n]);
          return "(" + r.map((function (t) {
            return Mh(e, t)
          })).join(" " + t + " ") + ")"
        }
      }
    }

    Eh.get = {
      getReturnType: function (t) {
        return Sh
      }, toGlsl: function (t, e) {
        Nh(e, 1), kh(e[0]);
        var r = e[0].toString();
        return -1 === t.attributes.indexOf(r) && t.attributes.push(r), (t.inFragmentShader ? "v_" : "a_") + r
      }
    }, Eh.var = {
      getReturnType: function (t) {
        return Sh
      }, toGlsl: function (t, e) {
        Nh(e, 1), kh(e[0]);
        var r = e[0].toString();
        return -1 === t.variables.indexOf(r) && t.variables.push(r), "u_" + r
      }
    }, Eh.time = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 0), "u_time"
      }
    }, Eh.zoom = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 0), "u_zoom"
      }
    }, Eh.resolution = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 0), "u_resolution"
      }
    }, Eh["*"] = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " * " + Mh(t, e[1]) + ")"
      }
    }, Eh["/"] = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " / " + Mh(t, e[1]) + ")"
      }
    }, Eh["+"] = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " + " + Mh(t, e[1]) + ")"
      }
    }, Eh["-"] = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " - " + Mh(t, e[1]) + ")"
      }
    }, Eh.clamp = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        Nh(e, 3), Ah(e);
        var r = Mh(t, e[1]), n = Mh(t, e[2]);
        return "clamp(" + Mh(t, e[0]) + ", " + r + ", " + n + ")"
      }
    }, Eh["%"] = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "mod(" + Mh(t, e[0]) + ", " + Mh(t, e[1]) + ")"
      }
    }, Eh["^"] = {
      getReturnType: function (t) {
        return vh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "pow(" + Mh(t, e[0]) + ", " + Mh(t, e[1]) + ")"
      }
    }, Eh[">"] = {
      getReturnType: function (t) {
        return xh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " > " + Mh(t, e[1]) + ")"
      }
    }, Eh[">="] = {
      getReturnType: function (t) {
        return xh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " >= " + Mh(t, e[1]) + ")"
      }
    }, Eh["<"] = {
      getReturnType: function (t) {
        return xh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " < " + Mh(t, e[1]) + ")"
      }
    }, Eh["<="] = {
      getReturnType: function (t) {
        return xh
      }, toGlsl: function (t, e) {
        return Nh(e, 2), Ah(e), "(" + Mh(t, e[0]) + " <= " + Mh(t, e[1]) + ")"
      }
    }, Eh["=="] = Bh("=="), Eh["!="] = Bh("!="), Eh["!"] = {
      getReturnType: function (t) {
        return xh
      }, toGlsl: function (t, e) {
        return Nh(e, 1), jh(e[0]), "(!" + Mh(t, e[0]) + ")"
      }
    }, Eh.all = Vh("&&"), Eh.any = Vh("||"), Eh.between = {
      getReturnType: function (t) {
        return xh
      }, toGlsl: function (t, e) {
        Nh(e, 3), Ah(e);
        var r = Mh(t, e[1]), n = Mh(t, e[2]), i = Mh(t, e[0]);
        return "(" + i + " >= " + r + " && " + i + " <= " + n + ")"
      }
    }, Eh.array = {
      getReturnType: function (t) {
        return wh
      }, toGlsl: function (t, e) {
        Dh(e, 2), Gh(e, 4), Ah(e);
        var r = e.map((function (e) {
          return Mh(t, e, vh)
        }));
        return "vec" + e.length + "(" + r.join(", ") + ")"
      }
    }, Eh.color = {
      getReturnType: function (t) {
        return bh
      }, toGlsl: function (t, e) {
        Dh(e, 3), Gh(e, 4), Ah(e);
        var r = e;
        3 === e.length && r.push(1);
        var n = e.map((function (e, r) {
          return Mh(t, e, vh) + (r < 3 ? " / 255.0" : "")
        }));
        return "vec" + e.length + "(" + n.join(", ") + ")"
      }
    }, Eh.interpolate = {
      getReturnType: function (t) {
        for (var e = bh | vh, r = 3; r < t.length; r += 2) e &= Th(t[r]);
        return e
      }, toGlsl: function (t, e, r) {
        zh(e), Dh(e, 6);
        var n, i = e[0];
        switch (i[0]) {
          case"linear":
            n = 1;
            break;
          case"exponential":
            n = i[1];
            break;
          default:
            n = null
        }
        if (!n) throw new Error('Invalid interpolation type for "interpolate" operator, received: ' + JSON.stringify(i));
        var o = void 0 !== r ? r : Sh, a = Eh.interpolate.getReturnType(e) & o;
        Uh(e, a);
        for (var s = Mh(t, e[1]), l = null, u = 2; u < e.length - 2; u += 2) {
          var c = Mh(t, e[u]), h = Mh(t, e[u + 1], a), p = Mh(t, e[u + 2]);
          l = "mix(" + (l || h) + ", " + Mh(t, e[u + 3], a) + ", pow(clamp((" + s + " - " + c + ") / (" + p + " - " + c + "), 0.0, 1.0), " + Oh(n) + "))"
        }
        return l
      }
    }, Eh.match = {
      getReturnType: function (t) {
        for (var e = Sh, r = 2; r < t.length; r += 2) e &= Th(t[r]);
        return e &= Th(t[t.length - 1])
      }, toGlsl: function (t, e, r) {
        zh(e), Dh(e, 4);
        var n = void 0 !== r ? r : Sh, i = Eh.match.getReturnType(e) & n;
        Uh(e, i);
        for (var o = Mh(t, e[0]), a = Mh(t, e[e.length - 1], i), s = null, l = e.length - 3; l >= 1; l -= 2) {
          s = "(" + o + " == " + Mh(t, e[l]) + " ? " + Mh(t, e[l + 1], i) + " : " + (s || a) + ")"
        }
        return s
      }
    }, Eh.case = {
      getReturnType: function (t) {
        for (var e = Sh, r = 1; r < t.length; r += 2) e &= Th(t[r]);
        return e &= Th(t[t.length - 1])
      }, toGlsl: function (t, e, r) {
        !function (t) {
          if (t.length % 2 == 0) throw new Error("An odd amount of arguments was expected, got " + t + " instead")
        }(e), Dh(e, 3);
        var n = void 0 !== r ? r : Sh, i = Eh.case.getReturnType(e) & n;
        Uh(e, i);
        for (var o = 0; o < e.length - 1; o += 2) jh(e[o]);
        var a = Mh(t, e[e.length - 1], i), s = null;
        for (o = e.length - 3; o >= 0; o -= 2) {
          s = "(" + Mh(t, e[o]) + " ? " + Mh(t, e[o + 1], i) + " : " + (s || a) + ")"
        }
        return s
      }
    };
    var Yh = function () {
      function t() {
        this.uniforms = [], this.attributes = [], this.varyings = [], this.sizeExpression = "vec2(1.0)", this.rotationExpression = "0.0", this.offsetExpression = "vec2(0.0)", this.colorExpression = "vec4(1.0)", this.texCoordExpression = "vec4(0.0, 0.0, 1.0, 1.0)", this.discardExpression = "false", this.rotateWithView = !1
      }

      return t.prototype.addUniform = function (t) {
        return this.uniforms.push(t), this
      }, t.prototype.addAttribute = function (t) {
        return this.attributes.push(t), this
      }, t.prototype.addVarying = function (t, e, r) {
        return this.varyings.push({name: t, type: e, expression: r}), this
      }, t.prototype.setSizeExpression = function (t) {
        return this.sizeExpression = t, this
      }, t.prototype.setRotationExpression = function (t) {
        return this.rotationExpression = t, this
      }, t.prototype.setSymbolOffsetExpression = function (t) {
        return this.offsetExpression = t, this
      }, t.prototype.setColorExpression = function (t) {
        return this.colorExpression = t, this
      }, t.prototype.setTextureCoordinateExpression = function (t) {
        return this.texCoordExpression = t, this
      }, t.prototype.setFragmentDiscardExpression = function (t) {
        return this.discardExpression = t, this
      }, t.prototype.setSymbolRotateWithView = function (t) {
        return this.rotateWithView = t, this
      }, t.prototype.getSizeExpression = function () {
        return this.sizeExpression
      }, t.prototype.getOffsetExpression = function () {
        return this.offsetExpression
      }, t.prototype.getColorExpression = function () {
        return this.colorExpression
      }, t.prototype.getTextureCoordinateExpression = function () {
        return this.texCoordExpression
      }, t.prototype.getFragmentDiscardExpression = function () {
        return this.discardExpression
      }, t.prototype.getSymbolVertexShader = function (t) {
        var e = this.rotateWithView ? "u_offsetScaleMatrix * u_offsetRotateMatrix" : "u_offsetScaleMatrix",
          r = this.attributes, n = this.varyings;
        return t && (r = r.concat("vec4 a_hitColor"), n = n.concat({
          name: "v_hitColor",
          type: "vec4",
          expression: "a_hitColor"
        })), "precision mediump float;\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n" + this.uniforms.map((function (t) {
          return "uniform " + t + ";"
        })).join("\n") + "\nattribute vec2 a_position;\nattribute float a_index;\n" + r.map((function (t) {
          return "attribute " + t + ";"
        })).join("\n") + "\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n" + n.map((function (t) {
          return "varying " + t.type + " " + t.name + ";"
        })).join("\n") + "\nvoid main(void) {\n  mat4 offsetMatrix = " + e + ";\n  vec2 halfSize = " + this.sizeExpression + " * 0.5;\n  vec2 offset = " + this.offsetExpression + ";\n  float angle = " + this.rotationExpression + ";\n  float offsetX;\n  float offsetY;\n  if (a_index == 0.0) {\n    offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n    offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n  } else if (a_index == 1.0) {\n    offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y - halfSize.y) * sin(angle);\n    offsetY = (offset.y - halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n  } else if (a_index == 2.0) {\n    offsetX = (offset.x + halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n    offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x + halfSize.x) * sin(angle);\n  } else {\n    offsetX = (offset.x - halfSize.x) * cos(angle) + (offset.y + halfSize.y) * sin(angle);\n    offsetY = (offset.y + halfSize.y) * cos(angle) - (offset.x - halfSize.x) * sin(angle);\n  }\n  vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n  gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n  vec4 texCoord = " + this.texCoordExpression + ";\n  float u = a_index == 0.0 || a_index == 3.0 ? texCoord.s : texCoord.p;\n  float v = a_index == 2.0 || a_index == 3.0 ? texCoord.t : texCoord.q;\n  v_texCoord = vec2(u, v);\n  u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n  v = a_index == 2.0 || a_index == 3.0 ? 0.0 : 1.0;\n  v_quadCoord = vec2(u, v);\n" + n.map((function (t) {
          return "  " + t.name + " = " + t.expression + ";"
        })).join("\n") + "\n}"
      }, t.prototype.getSymbolFragmentShader = function (t) {
        var e = t ? "  if (gl_FragColor.a < 0.1) { discard; } gl_FragColor = v_hitColor;" : "", r = this.varyings;
        return t && (r = r.concat({
          name: "v_hitColor",
          type: "vec4",
          expression: "a_hitColor"
        })), "precision mediump float;\nuniform float u_time;\nuniform float u_zoom;\nuniform float u_resolution;\n" + this.uniforms.map((function (t) {
          return "uniform " + t + ";"
        })).join("\n") + "\nvarying vec2 v_texCoord;\nvarying vec2 v_quadCoord;\n" + r.map((function (t) {
          return "varying " + t.type + " " + t.name + ";"
        })).join("\n") + "\nvoid main(void) {\n  if (" + this.discardExpression + ") { discard; }\n  gl_FragColor = " + this.colorExpression + ";\n  gl_FragColor.rgb *= gl_FragColor.a;\n" + e + "\n}"
      }, t
    }();

    function Wh(t) {
      var e = t.symbol, r = void 0 !== e.size ? e.size : 1, n = e.color || "white", i = e.textureCoord || [0, 0, 1, 1],
        o = e.offset || [0, 0], a = void 0 !== e.opacity ? e.opacity : 1, s = void 0 !== e.rotation ? e.rotation : 0,
        l = {inFragmentShader: !1, variables: [], attributes: [], stringLiteralsMap: {}}, u = Mh(l, r, wh | vh),
        c = Mh(l, o, wh), h = Mh(l, i, wh), p = Mh(l, s, vh),
        f = {inFragmentShader: !0, variables: l.variables, attributes: [], stringLiteralsMap: l.stringLiteralsMap},
        d = Mh(f, n, bh), g = Mh(f, a, vh), y = "1.0", m = "vec2(" + Mh(f, r, wh | vh) + ").x";
      switch (e.symbolType) {
        case"square":
        case"image":
          break;
        case"circle":
          y = "(1.0-smoothstep(1.-4./" + m + ",1.,dot(v_quadCoord-.5,v_quadCoord-.5)*4.))";
          break;
        case"triangle":
          var v = "(v_quadCoord*2.-1.)", _ = "(atan(" + v + ".x," + v + ".y))";
          y = "(1.0-smoothstep(.5-3./" + m + ",.5,cos(floor(.5+" + _ + "/2.094395102)*2.094395102-" + _ + ")*length(" + v + ")))";
          break;
        default:
          throw new Error("Unexpected symbol type: " + e.symbolType)
      }
      var b = (new Yh).setSizeExpression("vec2(" + u + ")").setRotationExpression(p).setSymbolOffsetExpression(c).setTextureCoordinateExpression(h).setSymbolRotateWithView(!!e.rotateWithView).setColorExpression("vec4(" + d + ".rgb, " + d + ".a * " + g + " * " + y + ")");
      if (t.filter) {
        var x = Mh(f, t.filter, xh);
        b.setFragmentDiscardExpression("!" + x)
      }
      var w = {};
      if (f.variables.forEach((function (e) {
        b.addUniform("float u_" + e), w["u_" + e] = function () {
          if (!t.variables || void 0 === t.variables[e]) throw new Error("The following variable is missing from the style: " + e);
          var r = t.variables[e];
          return "string" == typeof r && (r = Ih(l, r)), void 0 !== r ? r : -9999999
        }
      })), "image" === e.symbolType && e.src) {
        var S = new Image;
        S.src = e.src, b.addUniform("sampler2D u_texture").setColorExpression(b.getColorExpression() + " * texture2D(u_texture, v_texCoord)"), w.u_texture = S
      }
      return f.attributes.forEach((function (t) {
        -1 === l.attributes.indexOf(t) && l.attributes.push(t), b.addVarying("v_" + t, "float", "a_" + t)
      })), l.attributes.forEach((function (t) {
        b.addAttribute("float a_" + t)
      })), {
        builder: b, attributes: l.attributes.map((function (t) {
          return {
            name: t, callback: function (e, r) {
              var n = r[t];
              return "string" == typeof n && (n = Ih(l, n)), void 0 !== n ? n : -9999999
            }
          }
        })), uniforms: w
      }
    }

    var qh = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Xh = function (t) {
      function e(e) {
        var r = t.call(this, {
          extent: e.extent,
          origin: e.origin,
          origins: e.origins,
          resolutions: e.resolutions,
          tileSize: e.tileSize,
          tileSizes: e.tileSizes,
          sizes: e.sizes
        }) || this;
        return r.matrixIds_ = e.matrixIds, r
      }

      return qh(e, t), e.prototype.getMatrixId = function (t) {
        return this.matrixIds_[t]
      }, e.prototype.getMatrixIds = function () {
        return this.matrixIds_
      }, e
    }(ic), Zh = Xh;

    function Kh(t, e, r) {
      var n = [], i = [], o = [], a = [], s = [], l = void 0 !== r ? r : [], u = Gr(t.SupportedCRS),
        c = u.getMetersPerUnit(), h = "ne" == u.getAxisOrientation().substr(0, 2);
      return t.TileMatrix.sort((function (t, e) {
        return e.ScaleDenominator - t.ScaleDenominator
      })), t.TileMatrix.forEach((function (e) {
        if (!(l.length > 0) || _(l, (function (r) {
          return e.Identifier == r.TileMatrix || -1 === e.Identifier.indexOf(":") && t.Identifier + ":" + e.Identifier === r.TileMatrix
        }))) {
          i.push(e.Identifier);
          var r = 28e-5 * e.ScaleDenominator / c, u = e.TileWidth, p = e.TileHeight;
          h ? o.push([e.TopLeftCorner[1], e.TopLeftCorner[0]]) : o.push(e.TopLeftCorner), n.push(r), a.push(u == p ? u : [u, p]), s.push([e.MatrixWidth, e.MatrixHeight])
        }
      })), new Xh({extent: e, origins: o, resolutions: n, matrixIds: i, tileSizes: a, sizes: s})
    }

    var Hh = function () {
        function t(t) {
          this.opacity_ = t.opacity, this.rotateWithView_ = t.rotateWithView, this.rotation_ = t.rotation, this.scale_ = t.scale, this.scaleArray_ = Is(t.scale), this.displacement_ = t.displacement
        }

        return t.prototype.clone = function () {
          var e = this.getScale();
          return new t({
            opacity: this.getOpacity(),
            scale: Array.isArray(e) ? e.slice() : e,
            rotation: this.getRotation(),
            rotateWithView: this.getRotateWithView(),
            displacement: this.getDisplacement().slice()
          })
        }, t.prototype.getOpacity = function () {
          return this.opacity_
        }, t.prototype.getRotateWithView = function () {
          return this.rotateWithView_
        }, t.prototype.getRotation = function () {
          return this.rotation_
        }, t.prototype.getScale = function () {
          return this.scale_
        }, t.prototype.getScaleArray = function () {
          return this.scaleArray_
        }, t.prototype.getDisplacement = function () {
          return this.displacement_
        }, t.prototype.getAnchor = function () {
          return n()
        }, t.prototype.getImage = function (t) {
          return n()
        }, t.prototype.getHitDetectionImage = function () {
          return n()
        }, t.prototype.getPixelRatio = function (t) {
          return 1
        }, t.prototype.getImageState = function () {
          return n()
        }, t.prototype.getImageSize = function () {
          return n()
        }, t.prototype.getHitDetectionImageSize = function () {
          return n()
        }, t.prototype.getOrigin = function () {
          return n()
        }, t.prototype.getSize = function () {
          return n()
        }, t.prototype.setOpacity = function (t) {
          this.opacity_ = t
        }, t.prototype.setRotateWithView = function (t) {
          this.rotateWithView_ = t
        }, t.prototype.setRotation = function (t) {
          this.rotation_ = t
        }, t.prototype.setScale = function (t) {
          this.scale_ = t, this.scaleArray_ = Is(t)
        }, t.prototype.listenImageChange = function (t) {
          n()
        }, t.prototype.load = function () {
          n()
        }, t.prototype.unlistenImageChange = function (t) {
          n()
        }, t
      }(), $h = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Jh = function (t) {
        function e(e) {
          var r = this, n = void 0 !== e.rotateWithView && e.rotateWithView;
          return (r = t.call(this, {
            opacity: 1,
            rotateWithView: n,
            rotation: void 0 !== e.rotation ? e.rotation : 0,
            scale: void 0 !== e.scale ? e.scale : 1,
            displacement: void 0 !== e.displacement ? e.displacement : [0, 0]
          }) || this).canvas_ = {}, r.hitDetectionCanvas_ = null, r.fill_ = void 0 !== e.fill ? e.fill : null, r.origin_ = [0, 0], r.points_ = e.points, r.radius_ = void 0 !== e.radius ? e.radius : e.radius1, r.radius2_ = e.radius2, r.angle_ = void 0 !== e.angle ? e.angle : 0, r.stroke_ = void 0 !== e.stroke ? e.stroke : null, r.anchor_ = null, r.size_ = null, r.imageSize_ = null, r.hitDetectionImageSize_ = null, r.render(), r
        }

        return $h(e, t), e.prototype.clone = function () {
          var t = this.getScale(), r = new e({
            fill: this.getFill() ? this.getFill().clone() : void 0,
            points: this.getPoints(),
            radius: this.getRadius(),
            radius2: this.getRadius2(),
            angle: this.getAngle(),
            stroke: this.getStroke() ? this.getStroke().clone() : void 0,
            rotation: this.getRotation(),
            rotateWithView: this.getRotateWithView(),
            scale: Array.isArray(t) ? t.slice() : t,
            displacement: this.getDisplacement().slice()
          });
          return r.setOpacity(this.getOpacity()), r
        }, e.prototype.getAnchor = function () {
          return this.anchor_
        }, e.prototype.getAngle = function () {
          return this.angle_
        }, e.prototype.getFill = function () {
          return this.fill_
        }, e.prototype.getHitDetectionImage = function () {
          if (!this.hitDetectionCanvas_) {
            var t = this.createRenderOptions();
            this.createHitDetectionCanvas_(t)
          }
          return this.hitDetectionCanvas_
        }, e.prototype.getImage = function (t) {
          if (!this.canvas_[t || 1]) {
            var e = this.createRenderOptions(), r = uo(e.size * t || 1, e.size * t || 1);
            this.draw_(e, r, 0, 0, t || 1), this.canvas_[t || 1] = r.canvas
          }
          return this.canvas_[t || 1]
        }, e.prototype.getPixelRatio = function (t) {
          return t
        }, e.prototype.getImageSize = function () {
          return this.imageSize_
        }, e.prototype.getHitDetectionImageSize = function () {
          return this.hitDetectionImageSize_
        }, e.prototype.getImageState = function () {
          return ki
        }, e.prototype.getOrigin = function () {
          return this.origin_
        }, e.prototype.getPoints = function () {
          return this.points_
        }, e.prototype.getRadius = function () {
          return this.radius_
        }, e.prototype.getRadius2 = function () {
          return this.radius2_
        }, e.prototype.getSize = function () {
          return this.size_
        }, e.prototype.getStroke = function () {
          return this.stroke_
        }, e.prototype.listenImageChange = function (t) {
        }, e.prototype.load = function () {
        }, e.prototype.unlistenImageChange = function (t) {
        }, e.prototype.createRenderOptions = function () {
          var t, e = "round", r = "round", n = 0, i = null, o = 0, a = 0;
          return this.stroke_ && (null === (t = this.stroke_.getColor()) && (t = "#000"), t = Tu(t), void 0 === (a = this.stroke_.getWidth()) && (a = 1), i = this.stroke_.getLineDash(), o = this.stroke_.getLineDashOffset(), void 0 === (r = this.stroke_.getLineJoin()) && (r = "round"), void 0 === (e = this.stroke_.getLineCap()) && (e = "round"), void 0 === (n = this.stroke_.getMiterLimit()) && (n = 10)), {
            strokeStyle: t,
            strokeWidth: a,
            size: 2 * (this.radius_ + a) + 1,
            lineCap: e,
            lineDash: i,
            lineDashOffset: o,
            lineJoin: r,
            miterLimit: n
          }
        }, e.prototype.render = function () {
          var t = this.createRenderOptions(), e = uo(t.size, t.size);
          this.draw_(t, e, 0, 0, 1), this.canvas_ = {}, this.canvas_[1] = e.canvas;
          var r = e.canvas.width, n = r, i = this.getDisplacement();
          this.hitDetectionImageSize_ = [t.size, t.size], this.createHitDetectionCanvas_(t), this.anchor_ = [r / 2 - i[0], r / 2 + i[1]], this.size_ = [r, r], this.imageSize_ = [n, n]
        }, e.prototype.draw_ = function (t, e, r, n, i) {
          var o, a, s;
          e.setTransform(i, 0, 0, i, 0, 0), e.translate(r, n), e.beginPath();
          var l = this.points_;
          if (l === 1 / 0) e.arc(t.size / 2, t.size / 2, this.radius_, 0, 2 * Math.PI, !0); else {
            var u = void 0 !== this.radius2_ ? this.radius2_ : this.radius_;
            for (u !== this.radius_ && (l *= 2), o = 0; o <= l; o++) a = 2 * o * Math.PI / l - Math.PI / 2 + this.angle_, s = o % 2 == 0 ? this.radius_ : u, e.lineTo(t.size / 2 + s * Math.cos(a), t.size / 2 + s * Math.sin(a))
          }
          if (this.fill_) {
            var c = this.fill_.getColor();
            null === c && (c = "#000"), e.fillStyle = Tu(c), e.fill()
          }
          this.stroke_ && (e.strokeStyle = t.strokeStyle, e.lineWidth = t.strokeWidth, e.setLineDash && t.lineDash && (e.setLineDash(t.lineDash), e.lineDashOffset = t.lineDashOffset), e.lineCap = t.lineCap, e.lineJoin = t.lineJoin, e.miterLimit = t.miterLimit, e.stroke()), e.closePath()
        }, e.prototype.createHitDetectionCanvas_ = function (t) {
          if (this.hitDetectionCanvas_ = this.getImage(1), this.fill_) {
            var e = this.fill_.getColor(), r = 0;
            if ("string" == typeof e && (e = Oo(e)), null === e ? r = 1 : Array.isArray(e) && (r = 4 === e.length ? e[3] : 1), 0 === r) {
              var n = uo(t.size, t.size);
              this.hitDetectionCanvas_ = n.canvas, this.drawHitDetectionCanvas_(t, n, 0, 0)
            }
          }
        }, e.prototype.drawHitDetectionCanvas_ = function (t, e, r, n) {
          e.translate(r, n), e.beginPath();
          var i = this.points_;
          if (i === 1 / 0) e.arc(t.size / 2, t.size / 2, this.radius_, 0, 2 * Math.PI, !0); else {
            var o = void 0 !== this.radius2_ ? this.radius2_ : this.radius_;
            o !== this.radius_ && (i *= 2);
            var a = void 0, s = void 0, l = void 0;
            for (a = 0; a <= i; a++) l = 2 * a * Math.PI / i - Math.PI / 2 + this.angle_, s = a % 2 == 0 ? this.radius_ : o, e.lineTo(t.size / 2 + s * Math.cos(l), t.size / 2 + s * Math.sin(l))
          }
          e.fillStyle = "#000", e.fill(), this.stroke_ && (e.strokeStyle = t.strokeStyle, e.lineWidth = t.strokeWidth, t.lineDash && (e.setLineDash(t.lineDash), e.lineDashOffset = t.lineDashOffset), e.stroke()), e.closePath()
        }, e
      }(Hh), Qh = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), tp = function (t) {
        function e(e) {
          var r = e || {};
          return t.call(this, {
            points: 1 / 0,
            fill: r.fill,
            radius: r.radius,
            stroke: r.stroke,
            scale: void 0 !== r.scale ? r.scale : 1,
            rotation: void 0 !== r.rotation ? r.rotation : 0,
            rotateWithView: void 0 !== r.rotateWithView && r.rotateWithView,
            displacement: void 0 !== r.displacement ? r.displacement : [0, 0]
          }) || this
        }

        return Qh(e, t), e.prototype.clone = function () {
          var t = this.getScale(), r = new e({
            fill: this.getFill() ? this.getFill().clone() : void 0,
            stroke: this.getStroke() ? this.getStroke().clone() : void 0,
            radius: this.getRadius(),
            scale: Array.isArray(t) ? t.slice() : t,
            rotation: this.getRotation(),
            rotateWithView: this.getRotateWithView(),
            displacement: this.getDisplacement().slice()
          });
          return r.setOpacity(this.getOpacity()), r
        }, e.prototype.setRadius = function (t) {
          this.radius_ = t, this.render()
        }, e
      }(Jh), ep = function () {
        function t(t) {
          var e = t || {};
          this.color_ = void 0 !== e.color ? e.color : null
        }

        return t.prototype.clone = function () {
          var e = this.getColor();
          return new t({color: Array.isArray(e) ? e.slice() : e || void 0})
        }, t.prototype.getColor = function () {
          return this.color_
        }, t.prototype.setColor = function (t) {
          this.color_ = t
        }, t
      }(), rp = "fraction", np = "pixels", ip = "bottom-left", op = "bottom-right", ap = "top-left", sp = "top-right",
      lp = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), up = null, cp = function (t) {
        function e(e, r, n, i, o, a) {
          var s = t.call(this) || this;
          return s.hitDetectionImage_ = null, s.image_ = e || new Image, null !== i && (s.image_.crossOrigin = i), s.canvas_ = {}, s.color_ = a, s.unlisten_ = null, s.imageState_ = o, s.size_ = n, s.src_ = r, s.tainted_, s
        }

        return lp(e, t), e.prototype.isTainted_ = function () {
          if (void 0 === this.tainted_ && this.imageState_ === ki) {
            up || (up = uo(1, 1)), up.drawImage(this.image_, 0, 0);
            try {
              up.getImageData(0, 0, 1, 1), this.tainted_ = !1
            } catch (t) {
              up = null, this.tainted_ = !0
            }
          }
          return !0 === this.tainted_
        }, e.prototype.dispatchChangeEvent_ = function () {
          this.dispatchEvent(F)
        }, e.prototype.handleImageError_ = function () {
          this.imageState_ = ji, this.unlistenImage_(), this.dispatchChangeEvent_()
        }, e.prototype.handleImageLoad_ = function () {
          this.imageState_ = ki, this.size_ ? (this.image_.width = this.size_[0], this.image_.height = this.size_[1]) : this.size_ = [this.image_.width, this.image_.height], this.unlistenImage_(), this.dispatchChangeEvent_()
        }, e.prototype.getImage = function (t) {
          return this.replaceColor_(t), this.canvas_[t] ? this.canvas_[t] : this.image_
        }, e.prototype.getPixelRatio = function (t) {
          return this.replaceColor_(t), this.canvas_[t] ? t : 1
        }, e.prototype.getImageState = function () {
          return this.imageState_
        }, e.prototype.getHitDetectionImage = function () {
          if (!this.hitDetectionImage_) if (this.isTainted_()) {
            var t = this.size_[0], e = this.size_[1], r = uo(t, e);
            r.fillRect(0, 0, t, e), this.hitDetectionImage_ = r.canvas
          } else this.hitDetectionImage_ = this.image_;
          return this.hitDetectionImage_
        }, e.prototype.getSize = function () {
          return this.size_
        }, e.prototype.getSrc = function () {
          return this.src_
        }, e.prototype.load = function () {
          if (this.imageState_ == Fi) {
            this.imageState_ = Ai;
            try {
              this.image_.src = this.src_
            } catch (t) {
              this.handleImageError_()
            }
            this.unlisten_ = Zi(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this))
          }
        }, e.prototype.replaceColor_ = function (t) {
          if (this.color_ && !this.canvas_[t]) {
            var e = document.createElement("canvas");
            this.canvas_[t] = e, e.width = Math.ceil(this.image_.width * t), e.height = Math.ceil(this.image_.height * t);
            var r = e.getContext("2d");
            if (r.scale(t, t), r.drawImage(this.image_, 0, 0), r.globalCompositeOperation = "multiply", "multiply" === r.globalCompositeOperation || this.isTainted_()) r.fillStyle = wo(this.color_), r.fillRect(0, 0, e.width, e.height), r.globalCompositeOperation = "destination-in", r.drawImage(this.image_, 0, 0); else {
              for (var n = r.getImageData(0, 0, e.width, e.height), i = n.data, o = this.color_[0] / 255, a = this.color_[1] / 255, s = this.color_[2] / 255, l = this.color_[3], u = 0, c = i.length; u < c; u += 4) i[u] *= o, i[u + 1] *= a, i[u + 2] *= s, i[u + 3] *= l;
              r.putImageData(n, 0, 0)
            }
          }
        }, e.prototype.unlistenImage_ = function () {
          this.unlisten_ && (this.unlisten_(), this.unlisten_ = null)
        }, e
      }(M);

    function hp(t, e, r, n, i, o) {
      var a = Ao.get(e, n, o);
      return a || (a = new cp(t, e, r, n, i, o), Ao.set(e, n, o, a)), a
    }

    var pp = cp, fp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), dp = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = void 0 !== n.opacity ? n.opacity : 1, a = void 0 !== n.rotation ? n.rotation : 0,
          s = void 0 !== n.scale ? n.scale : 1, l = void 0 !== n.rotateWithView && n.rotateWithView;
        (r = t.call(this, {
          opacity: i,
          rotation: a,
          scale: s,
          displacement: void 0 !== n.displacement ? n.displacement : [0, 0],
          rotateWithView: l
        }) || this).anchor_ = void 0 !== n.anchor ? n.anchor : [.5, .5], r.normalizedAnchor_ = null, r.anchorOrigin_ = void 0 !== n.anchorOrigin ? n.anchorOrigin : ap, r.anchorXUnits_ = void 0 !== n.anchorXUnits ? n.anchorXUnits : rp, r.anchorYUnits_ = void 0 !== n.anchorYUnits ? n.anchorYUnits : rp, r.crossOrigin_ = void 0 !== n.crossOrigin ? n.crossOrigin : null;
        var u = void 0 !== n.img ? n.img : null, c = void 0 !== n.imgSize ? n.imgSize : null, h = n.src;
        pt(!(void 0 !== h && u), 4), pt(!u || u && c, 5), void 0 !== h && 0 !== h.length || !u || (h = u.src || o(u)), pt(void 0 !== h && h.length > 0, 6);
        var p = void 0 !== n.src ? Fi : ki;
        return r.color_ = void 0 !== n.color ? Oo(n.color) : null, r.iconImage_ = hp(u, h, c, r.crossOrigin_, p, r.color_), r.offset_ = void 0 !== n.offset ? n.offset : [0, 0], r.offsetOrigin_ = void 0 !== n.offsetOrigin ? n.offsetOrigin : ap, r.origin_ = null, r.size_ = void 0 !== n.size ? n.size : null, r
      }

      return fp(e, t), e.prototype.clone = function () {
        var t = this.getScale();
        return new e({
          anchor: this.anchor_.slice(),
          anchorOrigin: this.anchorOrigin_,
          anchorXUnits: this.anchorXUnits_,
          anchorYUnits: this.anchorYUnits_,
          crossOrigin: this.crossOrigin_,
          color: this.color_ && this.color_.slice ? this.color_.slice() : this.color_ || void 0,
          src: this.getSrc(),
          offset: this.offset_.slice(),
          offsetOrigin: this.offsetOrigin_,
          size: null !== this.size_ ? this.size_.slice() : void 0,
          opacity: this.getOpacity(),
          scale: Array.isArray(t) ? t.slice() : t,
          rotation: this.getRotation(),
          rotateWithView: this.getRotateWithView()
        })
      }, e.prototype.getAnchor = function () {
        if (this.normalizedAnchor_) return this.normalizedAnchor_;
        var t = this.anchor_, e = this.getSize();
        if (this.anchorXUnits_ == rp || this.anchorYUnits_ == rp) {
          if (!e) return null;
          t = this.anchor_.slice(), this.anchorXUnits_ == rp && (t[0] *= e[0]), this.anchorYUnits_ == rp && (t[1] *= e[1])
        }
        if (this.anchorOrigin_ != ap) {
          if (!e) return null;
          t === this.anchor_ && (t = this.anchor_.slice()), this.anchorOrigin_ != sp && this.anchorOrigin_ != op || (t[0] = -t[0] + e[0]), this.anchorOrigin_ != ip && this.anchorOrigin_ != op || (t[1] = -t[1] + e[1])
        }
        return this.normalizedAnchor_ = t, this.normalizedAnchor_
      }, e.prototype.setAnchor = function (t) {
        this.anchor_ = t, this.normalizedAnchor_ = null
      }, e.prototype.getColor = function () {
        return this.color_
      }, e.prototype.getImage = function (t) {
        return this.iconImage_.getImage(t)
      }, e.prototype.getPixelRatio = function (t) {
        return this.iconImage_.getPixelRatio(t)
      }, e.prototype.getImageSize = function () {
        return this.iconImage_.getSize()
      }, e.prototype.getHitDetectionImageSize = function () {
        return this.getImageSize()
      }, e.prototype.getImageState = function () {
        return this.iconImage_.getImageState()
      }, e.prototype.getHitDetectionImage = function () {
        return this.iconImage_.getHitDetectionImage()
      }, e.prototype.getOrigin = function () {
        if (this.origin_) return this.origin_;
        var t = this.offset_, e = this.getDisplacement();
        if (this.offsetOrigin_ != ap) {
          var r = this.getSize(), n = this.iconImage_.getSize();
          if (!r || !n) return null;
          t = t.slice(), this.offsetOrigin_ != sp && this.offsetOrigin_ != op || (t[0] = n[0] - r[0] - t[0]), this.offsetOrigin_ != ip && this.offsetOrigin_ != op || (t[1] = n[1] - r[1] - t[1])
        }
        return t[0] += e[0], t[1] += e[1], this.origin_ = t, this.origin_
      }, e.prototype.getSrc = function () {
        return this.iconImage_.getSrc()
      }, e.prototype.getSize = function () {
        return this.size_ ? this.size_ : this.iconImage_.getSize()
      }, e.prototype.listenImageChange = function (t) {
        this.iconImage_.addEventListener(F, t)
      }, e.prototype.load = function () {
        this.iconImage_.load()
      }, e.prototype.unlistenImageChange = function (t) {
        this.iconImage_.removeEventListener(F, t)
      }, e
    }(Hh), gp = function () {
      function t(t) {
        var e = t || {};
        this.color_ = void 0 !== e.color ? e.color : null, this.lineCap_ = e.lineCap, this.lineDash_ = void 0 !== e.lineDash ? e.lineDash : null, this.lineDashOffset_ = e.lineDashOffset, this.lineJoin_ = e.lineJoin, this.miterLimit_ = e.miterLimit, this.width_ = e.width
      }

      return t.prototype.clone = function () {
        var e = this.getColor();
        return new t({
          color: Array.isArray(e) ? e.slice() : e || void 0,
          lineCap: this.getLineCap(),
          lineDash: this.getLineDash() ? this.getLineDash().slice() : void 0,
          lineDashOffset: this.getLineDashOffset(),
          lineJoin: this.getLineJoin(),
          miterLimit: this.getMiterLimit(),
          width: this.getWidth()
        })
      }, t.prototype.getColor = function () {
        return this.color_
      }, t.prototype.getLineCap = function () {
        return this.lineCap_
      }, t.prototype.getLineDash = function () {
        return this.lineDash_
      }, t.prototype.getLineDashOffset = function () {
        return this.lineDashOffset_
      }, t.prototype.getLineJoin = function () {
        return this.lineJoin_
      }, t.prototype.getMiterLimit = function () {
        return this.miterLimit_
      }, t.prototype.getWidth = function () {
        return this.width_
      }, t.prototype.setColor = function (t) {
        this.color_ = t
      }, t.prototype.setLineCap = function (t) {
        this.lineCap_ = t
      }, t.prototype.setLineDash = function (t) {
        this.lineDash_ = t
      }, t.prototype.setLineDashOffset = function (t) {
        this.lineDashOffset_ = t
      }, t.prototype.setLineJoin = function (t) {
        this.lineJoin_ = t
      }, t.prototype.setMiterLimit = function (t) {
        this.miterLimit_ = t
      }, t.prototype.setWidth = function (t) {
        this.width_ = t
      }, t
    }(), yp = function () {
      function t(t) {
        var e = t || {};
        this.geometry_ = null, this.geometryFunction_ = xp, void 0 !== e.geometry && this.setGeometry(e.geometry), this.fill_ = void 0 !== e.fill ? e.fill : null, this.image_ = void 0 !== e.image ? e.image : null, this.renderer_ = void 0 !== e.renderer ? e.renderer : null, this.stroke_ = void 0 !== e.stroke ? e.stroke : null, this.text_ = void 0 !== e.text ? e.text : null, this.zIndex_ = e.zIndex
      }

      return t.prototype.clone = function () {
        var e = this.getGeometry();
        return e && "object" == typeof e && (e = e.clone()), new t({
          geometry: e,
          fill: this.getFill() ? this.getFill().clone() : void 0,
          image: this.getImage() ? this.getImage().clone() : void 0,
          stroke: this.getStroke() ? this.getStroke().clone() : void 0,
          text: this.getText() ? this.getText().clone() : void 0,
          zIndex: this.getZIndex()
        })
      }, t.prototype.getRenderer = function () {
        return this.renderer_
      }, t.prototype.setRenderer = function (t) {
        this.renderer_ = t
      }, t.prototype.getGeometry = function () {
        return this.geometry_
      }, t.prototype.getGeometryFunction = function () {
        return this.geometryFunction_
      }, t.prototype.getFill = function () {
        return this.fill_
      }, t.prototype.setFill = function (t) {
        this.fill_ = t
      }, t.prototype.getImage = function () {
        return this.image_
      }, t.prototype.setImage = function (t) {
        this.image_ = t
      }, t.prototype.getStroke = function () {
        return this.stroke_
      }, t.prototype.setStroke = function (t) {
        this.stroke_ = t
      }, t.prototype.getText = function () {
        return this.text_
      }, t.prototype.setText = function (t) {
        this.text_ = t
      }, t.prototype.getZIndex = function () {
        return this.zIndex_
      }, t.prototype.setGeometry = function (t) {
        "function" == typeof t ? this.geometryFunction_ = t : "string" == typeof t ? this.geometryFunction_ = function (e) {
          return e.get(t)
        } : t ? void 0 !== t && (this.geometryFunction_ = function () {
          return t
        }) : this.geometryFunction_ = xp, this.geometry_ = t
      }, t.prototype.setZIndex = function (t) {
        this.zIndex_ = t
      }, t
    }();

    function mp(t) {
      var e;
      if ("function" == typeof t) e = t; else {
        var r;
        if (Array.isArray(t)) r = t; else pt("function" == typeof t.getZIndex, 41), r = [t];
        e = function () {
          return r
        }
      }
      return e
    }

    var vp = null;

    function _p(t, e) {
      if (!vp) {
        var r = new ep({color: "rgba(255,255,255,0.4)"}), n = new gp({color: "#3399CC", width: 1.25});
        vp = [new yp({image: new tp({fill: r, stroke: n, radius: 5}), fill: r, stroke: n})]
      }
      return vp
    }

    function bp() {
      var t = {}, e = [255, 255, 255, 1], r = [0, 153, 255, 1];
      return t[bt.POLYGON] = [new yp({fill: new ep({color: [255, 255, 255, .5]})})], t[bt.MULTI_POLYGON] = t[bt.POLYGON], t[bt.LINE_STRING] = [new yp({
        stroke: new gp({
          color: e,
          width: 5
        })
      }), new yp({
        stroke: new gp({
          color: r,
          width: 3
        })
      })], t[bt.MULTI_LINE_STRING] = t[bt.LINE_STRING], t[bt.CIRCLE] = t[bt.POLYGON].concat(t[bt.LINE_STRING]), t[bt.POINT] = [new yp({
        image: new tp({
          radius: 6,
          fill: new ep({color: r}),
          stroke: new gp({color: e, width: 1.5})
        }), zIndex: 1 / 0
      })], t[bt.MULTI_POINT] = t[bt.POINT], t[bt.GEOMETRY_COLLECTION] = t[bt.POLYGON].concat(t[bt.LINE_STRING], t[bt.POINT]), t
    }

    function xp(t) {
      return t.getGeometry()
    }

    var wp = yp, Sp = "point", Ep = "line", Tp = function () {
      function t(t) {
        var e = t || {};
        this.font_ = e.font, this.rotation_ = e.rotation, this.rotateWithView_ = e.rotateWithView, this.scale_ = e.scale, this.scaleArray_ = Is(void 0 !== e.scale ? e.scale : 1), this.text_ = e.text, this.textAlign_ = e.textAlign, this.textBaseline_ = e.textBaseline, this.fill_ = void 0 !== e.fill ? e.fill : new ep({color: "#333"}), this.maxAngle_ = void 0 !== e.maxAngle ? e.maxAngle : Math.PI / 4, this.placement_ = void 0 !== e.placement ? e.placement : Sp, this.overflow_ = !!e.overflow, this.stroke_ = void 0 !== e.stroke ? e.stroke : null, this.offsetX_ = void 0 !== e.offsetX ? e.offsetX : 0, this.offsetY_ = void 0 !== e.offsetY ? e.offsetY : 0, this.backgroundFill_ = e.backgroundFill ? e.backgroundFill : null, this.backgroundStroke_ = e.backgroundStroke ? e.backgroundStroke : null, this.padding_ = void 0 === e.padding ? null : e.padding
      }

      return t.prototype.clone = function () {
        var e = this.getScale();
        return new t({
          font: this.getFont(),
          placement: this.getPlacement(),
          maxAngle: this.getMaxAngle(),
          overflow: this.getOverflow(),
          rotation: this.getRotation(),
          rotateWithView: this.getRotateWithView(),
          scale: Array.isArray(e) ? e.slice() : e,
          text: this.getText(),
          textAlign: this.getTextAlign(),
          textBaseline: this.getTextBaseline(),
          fill: this.getFill() ? this.getFill().clone() : void 0,
          stroke: this.getStroke() ? this.getStroke().clone() : void 0,
          offsetX: this.getOffsetX(),
          offsetY: this.getOffsetY(),
          backgroundFill: this.getBackgroundFill() ? this.getBackgroundFill().clone() : void 0,
          backgroundStroke: this.getBackgroundStroke() ? this.getBackgroundStroke().clone() : void 0,
          padding: this.getPadding()
        })
      }, t.prototype.getOverflow = function () {
        return this.overflow_
      }, t.prototype.getFont = function () {
        return this.font_
      }, t.prototype.getMaxAngle = function () {
        return this.maxAngle_
      }, t.prototype.getPlacement = function () {
        return this.placement_
      }, t.prototype.getOffsetX = function () {
        return this.offsetX_
      }, t.prototype.getOffsetY = function () {
        return this.offsetY_
      }, t.prototype.getFill = function () {
        return this.fill_
      }, t.prototype.getRotateWithView = function () {
        return this.rotateWithView_
      }, t.prototype.getRotation = function () {
        return this.rotation_
      }, t.prototype.getScale = function () {
        return this.scale_
      }, t.prototype.getScaleArray = function () {
        return this.scaleArray_
      }, t.prototype.getStroke = function () {
        return this.stroke_
      }, t.prototype.getText = function () {
        return this.text_
      }, t.prototype.getTextAlign = function () {
        return this.textAlign_
      }, t.prototype.getTextBaseline = function () {
        return this.textBaseline_
      }, t.prototype.getBackgroundFill = function () {
        return this.backgroundFill_
      }, t.prototype.getBackgroundStroke = function () {
        return this.backgroundStroke_
      }, t.prototype.getPadding = function () {
        return this.padding_
      }, t.prototype.setOverflow = function (t) {
        this.overflow_ = t
      }, t.prototype.setFont = function (t) {
        this.font_ = t
      }, t.prototype.setMaxAngle = function (t) {
        this.maxAngle_ = t
      }, t.prototype.setOffsetX = function (t) {
        this.offsetX_ = t
      }, t.prototype.setOffsetY = function (t) {
        this.offsetY_ = t
      }, t.prototype.setPlacement = function (t) {
        this.placement_ = t
      }, t.prototype.setRotateWithView = function (t) {
        this.rotateWithView_ = t
      }, t.prototype.setFill = function (t) {
        this.fill_ = t
      }, t.prototype.setRotation = function (t) {
        this.rotation_ = t
      }, t.prototype.setScale = function (t) {
        this.scale_ = t, this.scaleArray_ = Is(void 0 !== t ? t : 1)
      }, t.prototype.setStroke = function (t) {
        this.stroke_ = t
      }, t.prototype.setText = function (t) {
        this.text_ = t
      }, t.prototype.setTextAlign = function (t) {
        this.textAlign_ = t
      }, t.prototype.setTextBaseline = function (t) {
        this.textBaseline_ = t
      }, t.prototype.setBackgroundFill = function (t) {
        this.backgroundFill_ = t
      }, t.prototype.setBackgroundStroke = function (t) {
        this.backgroundStroke_ = t
      }, t.prototype.setPadding = function (t) {
        this.padding_ = t
      }, t
    }(), Cp = function () {
      function t(t) {
        this.first_, this.last_, this.head_, this.circular_ = void 0 === t || t, this.length_ = 0
      }

      return t.prototype.insertItem = function (t) {
        var e = {prev: void 0, next: void 0, data: t}, r = this.head_;
        if (r) {
          var n = r.next;
          e.prev = r, e.next = n, r.next = e, n && (n.prev = e), r === this.last_ && (this.last_ = e)
        } else this.first_ = e, this.last_ = e, this.circular_ && (e.next = e, e.prev = e);
        this.head_ = e, this.length_++
      }, t.prototype.removeItem = function () {
        var t = this.head_;
        if (t) {
          var e = t.next, r = t.prev;
          e && (e.prev = r), r && (r.next = e), this.head_ = e || r, this.first_ === this.last_ ? (this.head_ = void 0, this.first_ = void 0, this.last_ = void 0) : this.first_ === t ? this.first_ = this.head_ : this.last_ === t && (this.last_ = r ? this.head_.prev : this.head_), this.length_--
        }
      }, t.prototype.firstItem = function () {
        if (this.head_ = this.first_, this.head_) return this.head_.data
      }, t.prototype.lastItem = function () {
        if (this.head_ = this.last_, this.head_) return this.head_.data
      }, t.prototype.nextItem = function () {
        if (this.head_ && this.head_.next) return this.head_ = this.head_.next, this.head_.data
      }, t.prototype.getNextItem = function () {
        if (this.head_ && this.head_.next) return this.head_.next.data
      }, t.prototype.prevItem = function () {
        if (this.head_ && this.head_.prev) return this.head_ = this.head_.prev, this.head_.data
      }, t.prototype.getPrevItem = function () {
        if (this.head_ && this.head_.prev) return this.head_.prev.data
      }, t.prototype.getCurrItem = function () {
        if (this.head_) return this.head_.data
      }, t.prototype.setFirstItem = function () {
        this.circular_ && this.head_ && (this.first_ = this.head_, this.last_ = this.head_.prev)
      }, t.prototype.concat = function (t) {
        if (t.head_) {
          if (this.head_) {
            var e = this.head_.next;
            this.head_.next = t.first_, t.first_.prev = this.head_, e.prev = t.last_, t.last_.next = e, this.length_ += t.length_
          } else this.head_ = t.head_, this.first_ = t.first_, this.last_ = t.last_, this.length_ = t.length_;
          t.head_ = void 0, t.first_ = void 0, t.last_ = void 0, t.length_ = 0
        }
      }, t.prototype.getLength = function () {
        return this.length_
      }, t
    }(), Op = r(1), Pp = r.n(Op), Rp = function () {
      function t(t) {
        this.rbush_ = new Pp.a(t), this.items_ = {}
      }

      return t.prototype.insert = function (t, e) {
        var r = {minX: t[0], minY: t[1], maxX: t[2], maxY: t[3], value: e};
        this.rbush_.insert(r), this.items_[o(e)] = r
      }, t.prototype.load = function (t, e) {
        for (var r = new Array(e.length), n = 0, i = e.length; n < i; n++) {
          var a = t[n], s = e[n], l = {minX: a[0], minY: a[1], maxX: a[2], maxY: a[3], value: s};
          r[n] = l, this.items_[o(s)] = l
        }
        this.rbush_.load(r)
      }, t.prototype.remove = function (t) {
        var e = o(t), r = this.items_[e];
        return delete this.items_[e], null !== this.rbush_.remove(r)
      }, t.prototype.update = function (t, e) {
        var r = this.items_[o(e)];
        ue([r.minX, r.minY, r.maxX, r.maxY], t) || (this.remove(e), this.insert(t, e))
      }, t.prototype.getAll = function () {
        return this.rbush_.all().map((function (t) {
          return t.value
        }))
      }, t.prototype.getInExtent = function (t) {
        var e = {minX: t[0], minY: t[1], maxX: t[2], maxY: t[3]};
        return this.rbush_.search(e).map((function (t) {
          return t.value
        }))
      }, t.prototype.forEach = function (t) {
        return this.forEach_(this.getAll(), t)
      }, t.prototype.forEachInExtent = function (t, e) {
        return this.forEach_(this.getInExtent(t), e)
      }, t.prototype.forEach_ = function (t, e) {
        for (var r, n = 0, i = t.length; n < i; n++) if (r = e(t[n])) return r;
        return r
      }, t.prototype.isEmpty = function () {
        return I(this.items_)
      }, t.prototype.clear = function () {
        this.rbush_.clear(), this.items_ = {}
      }, t.prototype.getExtent = function (t) {
        var e = this.rbush_.toJSON();
        return ie(e.minX, e.minY, e.maxX, e.maxY, t)
      }, t.prototype.concat = function (t) {
        for (var e in this.rbush_.load(t.rbush_.all()), t.items_) this.items_[e] = t.items_[e]
      }, t
    }(), Ip = function () {
      function t(t, e, r, n, i, o) {
        this.sourceProj_ = t, this.targetProj_ = e;
        var a = {}, s = Kr(this.targetProj_, this.sourceProj_);
        this.transformInv_ = function (t) {
          var e = t[0] + "/" + t[1];
          return a[e] || (a[e] = s(t)), a[e]
        }, this.maxSourceExtent_ = n, this.errorThresholdSquared_ = i * i, this.triangles_ = [], this.wrapsXInSource_ = !1, this.canWrapXInSource_ = this.sourceProj_.canWrapX() && !!n && !!this.sourceProj_.getExtent() && Pe(n) == Pe(this.sourceProj_.getExtent()), this.sourceWorldWidth_ = this.sourceProj_.getExtent() ? Pe(this.sourceProj_.getExtent()) : null, this.targetWorldWidth_ = this.targetProj_.getExtent() ? Pe(this.targetProj_.getExtent()) : null;
        var l = Ce(r), u = Oe(r), c = be(r), h = _e(r), p = this.transformInv_(l), f = this.transformInv_(u),
          d = this.transformInv_(c), g = this.transformInv_(h),
          y = 10 + (o ? Math.max(0, Math.ceil(Ge(ve(r) / (o * o * 256 * 256)))) : 0);
        if (this.addQuad_(l, u, c, h, p, f, d, g, y), this.wrapsXInSource_) {
          var m = 1 / 0;
          this.triangles_.forEach((function (t, e, r) {
            m = Math.min(m, t.source[0][0], t.source[1][0], t.source[2][0])
          })), this.triangles_.forEach(function (t) {
            if (Math.max(t.source[0][0], t.source[1][0], t.source[2][0]) - m > this.sourceWorldWidth_ / 2) {
              var e = [[t.source[0][0], t.source[0][1]], [t.source[1][0], t.source[1][1]], [t.source[2][0], t.source[2][1]]];
              e[0][0] - m > this.sourceWorldWidth_ / 2 && (e[0][0] -= this.sourceWorldWidth_), e[1][0] - m > this.sourceWorldWidth_ / 2 && (e[1][0] -= this.sourceWorldWidth_), e[2][0] - m > this.sourceWorldWidth_ / 2 && (e[2][0] -= this.sourceWorldWidth_);
              var r = Math.min(e[0][0], e[1][0], e[2][0]);
              Math.max(e[0][0], e[1][0], e[2][0]) - r < this.sourceWorldWidth_ / 2 && (t.source = e)
            }
          }.bind(this))
        }
        a = {}
      }

      return t.prototype.addTriangle_ = function (t, e, r, n, i, o) {
        this.triangles_.push({source: [n, i, o], target: [t, e, r]})
      }, t.prototype.addQuad_ = function (t, e, r, n, i, o, a, s, l) {
        var u = Kt([i, o, a, s]), c = this.sourceWorldWidth_ ? Pe(u) / this.sourceWorldWidth_ : null,
          h = this.sourceWorldWidth_, p = this.sourceProj_.canWrapX() && c > .5 && c < 1, f = !1;
        if (l > 0) {
          if (this.targetProj_.isGlobal() && this.targetWorldWidth_) f = Pe(Kt([t, e, r, n])) / this.targetWorldWidth_ > .25 || f;
          !p && this.sourceProj_.isGlobal() && c && (f = c > .25 || f)
        }
        if (!(!f && this.maxSourceExtent_ && isFinite(u[0]) && isFinite(u[1]) && isFinite(u[2]) && isFinite(u[3])) || Re(u, this.maxSourceExtent_)) {
          var d = 0;
          if (!(f || isFinite(i[0]) && isFinite(i[1]) && isFinite(o[0]) && isFinite(o[1]) && isFinite(a[0]) && isFinite(a[1]) && isFinite(s[0]) && isFinite(s[1]))) if (l > 0) f = !0; else if (1 != (d = (isFinite(i[0]) && isFinite(i[1]) ? 0 : 8) + (isFinite(o[0]) && isFinite(o[1]) ? 0 : 4) + (isFinite(a[0]) && isFinite(a[1]) ? 0 : 2) + (isFinite(s[0]) && isFinite(s[1]) ? 0 : 1)) && 2 != d && 4 != d && 8 != d) return;
          if (l > 0) {
            if (!f) {
              var g = [(t[0] + r[0]) / 2, (t[1] + r[1]) / 2], y = this.transformInv_(g), m = void 0;
              if (p) m = (We(i[0], h) + We(a[0], h)) / 2 - We(y[0], h); else m = (i[0] + a[0]) / 2 - y[0];
              var v = (i[1] + a[1]) / 2 - y[1];
              f = m * m + v * v > this.errorThresholdSquared_
            }
            if (f) {
              if (Math.abs(t[0] - r[0]) <= Math.abs(t[1] - r[1])) {
                var _ = [(e[0] + r[0]) / 2, (e[1] + r[1]) / 2], b = this.transformInv_(_),
                  x = [(n[0] + t[0]) / 2, (n[1] + t[1]) / 2], w = this.transformInv_(x);
                this.addQuad_(t, e, _, x, i, o, b, w, l - 1), this.addQuad_(x, _, r, n, w, b, a, s, l - 1)
              } else {
                var S = [(t[0] + e[0]) / 2, (t[1] + e[1]) / 2], E = this.transformInv_(S),
                  T = [(r[0] + n[0]) / 2, (r[1] + n[1]) / 2], C = this.transformInv_(T);
                this.addQuad_(t, S, T, n, i, E, C, s, l - 1), this.addQuad_(S, e, r, T, E, o, a, C, l - 1)
              }
              return
            }
          }
          if (p) {
            if (!this.canWrapXInSource_) return;
            this.wrapsXInSource_ = !0
          }
          0 == (11 & d) && this.addTriangle_(t, r, n, i, a, s), 0 == (14 & d) && this.addTriangle_(t, r, e, i, a, o), d && (0 == (13 & d) && this.addTriangle_(e, n, t, o, s, i), 0 == (7 & d) && this.addTriangle_(e, n, r, o, s, a))
        }
      }, t.prototype.calculateSourceExtent = function () {
        var t = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
        return this.triangles_.forEach((function (e, r, n) {
          var i = e.source;
          pe(t, i[0]), pe(t, i[1]), pe(t, i[2])
        })), t
      }, t.prototype.getTriangles = function () {
        return this.triangles_
      }, t
    }(), Lp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Mp = function (t) {
      function e(e, r, n, i, o, a, s, l, u, c, h, p) {
        var f = t.call(this, o, Ji) || this;
        f.renderEdges_ = void 0 !== h && h, f.contextOptions_ = p, f.pixelRatio_ = s, f.gutter_ = l, f.canvas_ = null, f.sourceTileGrid_ = r, f.targetTileGrid_ = i, f.wrappedTileCoord_ = a || o, f.sourceTiles_ = [], f.sourcesListenerKeys_ = null, f.sourceZ_ = 0;
        var d = i.getTileCoordExtent(f.wrappedTileCoord_), g = f.targetTileGrid_.getExtent(),
          y = f.sourceTileGrid_.getExtent(), m = g ? Te(d, g) : d;
        if (0 === ve(m)) return f.state = ro, f;
        var v = e.getExtent();
        v && (y = y ? Te(y, v) : v);
        var _ = i.getResolution(f.wrappedTileCoord_[0]), b = ec(e, n, m, _);
        if (!isFinite(b) || b <= 0) return f.state = ro, f;
        var x = void 0 !== c ? c : .5;
        if (f.triangulation_ = new Ip(e, n, m, y, b * x, _), 0 === f.triangulation_.getTriangles().length) return f.state = ro, f;
        f.sourceZ_ = r.getZForResolution(b);
        var w = f.triangulation_.calculateSourceExtent();
        if (y && (e.canWrapX() ? (w[1] = Ne(w[1], y[1], y[3]), w[3] = Ne(w[3], y[1], y[3])) : w = Te(w, y)), ve(w)) {
          for (var S = r.getTileRangeForExtentAndZ(w, f.sourceZ_), E = S.minX; E <= S.maxX; E++) for (var T = S.minY; T <= S.maxY; T++) {
            var C = u(f.sourceZ_, E, T, s);
            C && f.sourceTiles_.push(C)
          }
          0 === f.sourceTiles_.length && (f.state = ro)
        } else f.state = ro;
        return f
      }

      return Lp(e, t), e.prototype.getImage = function () {
        return this.canvas_
      }, e.prototype.reproject_ = function () {
        var t = [];
        if (this.sourceTiles_.forEach(function (e, r, n) {
          e && e.getState() == to && t.push({
            extent: this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),
            image: e.getImage()
          })
        }.bind(this)), this.sourceTiles_.length = 0, 0 === t.length) this.state = eo; else {
          var e = this.wrappedTileCoord_[0], r = this.targetTileGrid_.getTileSize(e),
            n = "number" == typeof r ? r : r[0], i = "number" == typeof r ? r : r[1],
            o = this.targetTileGrid_.getResolution(e), a = this.sourceTileGrid_.getResolution(this.sourceZ_),
            s = this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);
          this.canvas_ = rc(n, i, this.pixelRatio_, a, this.sourceTileGrid_.getExtent(), o, s, this.triangulation_, t, this.gutter_, this.renderEdges_, this.contextOptions_), this.state = to
        }
        this.changed()
      }, e.prototype.load = function () {
        if (this.state == Ji) {
          this.state = Qi, this.changed();
          var t = 0;
          this.sourcesListenerKeys_ = [], this.sourceTiles_.forEach(function (e, r, n) {
            var i = e.getState();
            if (i == Ji || i == Qi) {
              t++;
              var o = Z(e, F, (function (r) {
                var n = e.getState();
                n != to && n != eo && n != ro || (H(o), 0 === --t && (this.unlistenSources_(), this.reproject_()))
              }), this);
              this.sourcesListenerKeys_.push(o)
            }
          }.bind(this)), this.sourceTiles_.forEach((function (t, e, r) {
            t.getState() == Ji && t.load()
          })), 0 === t && setTimeout(this.reproject_.bind(this), 0)
        }
      }, e.prototype.unlistenSources_ = function () {
        this.sourcesListenerKeys_.forEach(H), this.sourcesListenerKeys_ = null
      }, e
    }(lo), Fp = "tileloadstart", Ap = "tileloadend", kp = "tileloaderror", jp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Np(t) {
      return t ? Array.isArray(t) ? function (e) {
        return t
      } : "function" == typeof t ? t : function (e) {
        return [t]
      } : null
    }

    var Dp = function (t) {
      function e(e) {
        var r = t.call(this) || this;
        return r.projection_ = Gr(e.projection), r.attributions_ = Np(e.attributions), r.attributionsCollapsible_ = void 0 === e.attributionsCollapsible || e.attributionsCollapsible, r.loading = !1, r.state_ = void 0 !== e.state ? e.state : Qo, r.wrapX_ = void 0 !== e.wrapX && e.wrapX, r
      }

      return jp(e, t), e.prototype.getAttributions = function () {
        return this.attributions_
      }, e.prototype.getAttributionsCollapsible = function () {
        return this.attributionsCollapsible_
      }, e.prototype.getProjection = function () {
        return this.projection_
      }, e.prototype.getResolutions = function () {
        return n()
      }, e.prototype.getState = function () {
        return this.state_
      }, e.prototype.getWrapX = function () {
        return this.wrapX_
      }, e.prototype.getContextOptions = function () {
      }, e.prototype.refresh = function () {
        this.changed()
      }, e.prototype.setAttributions = function (t) {
        this.attributions_ = Np(t), this.changed()
      }, e.prototype.setState = function (t) {
        this.state_ = t, this.changed()
      }, e
    }(ot), Gp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), zp = function (t) {
      function e(e) {
        var r = t.call(this, {
          attributions: e.attributions,
          attributionsCollapsible: e.attributionsCollapsible,
          projection: e.projection,
          state: e.state,
          wrapX: e.wrapX
        }) || this;
        r.opaque_ = void 0 !== e.opaque && e.opaque, r.tilePixelRatio_ = void 0 !== e.tilePixelRatio ? e.tilePixelRatio : 1, r.tileGrid = void 0 !== e.tileGrid ? e.tileGrid : null;
        var n = e.tileGrid;
        return n && Is(n.getTileSize(n.getMinZoom()), [256, 256]), r.tileCache = new yu(e.cacheSize || 0), r.tmpSize = [0, 0], r.key_ = e.key || "", r.tileOptions = {transition: e.transition}, r.zDirection = e.zDirection ? e.zDirection : 0, r
      }

      return Gp(e, t), e.prototype.canExpireCache = function () {
        return this.tileCache.canExpireCache()
      }, e.prototype.expireCache = function (t, e) {
        var r = this.getTileCacheForProjection(t);
        r && r.expireCache(e)
      }, e.prototype.forEachLoadedTile = function (t, e, r, n) {
        var i = this.getTileCacheForProjection(t);
        if (!i) return !1;
        for (var o, a, s, l = !0, u = r.minX; u <= r.maxX; ++u) for (var c = r.minY; c <= r.maxY; ++c) a = cu(e, u, c), s = !1, i.containsKey(a) && (s = (o = i.get(a)).getState() === to) && (s = !1 !== n(o)), s || (l = !1);
        return l
      }, e.prototype.getGutterForProjection = function (t) {
        return 0
      }, e.prototype.getKey = function () {
        return this.key_
      }, e.prototype.setKey = function (t) {
        this.key_ !== t && (this.key_ = t, this.changed())
      }, e.prototype.getOpaque = function (t) {
        return this.opaque_
      }, e.prototype.getResolutions = function () {
        return this.tileGrid.getResolutions()
      }, e.prototype.getTile = function (t, e, r, i, o) {
        return n()
      }, e.prototype.getTileGrid = function () {
        return this.tileGrid
      }, e.prototype.getTileGridForProjection = function (t) {
        return this.tileGrid ? this.tileGrid : oc(t)
      }, e.prototype.getTileCacheForProjection = function (t) {
        return pt(Xr(this.getProjection(), t), 68), this.tileCache
      }, e.prototype.getTilePixelRatio = function (t) {
        return this.tilePixelRatio_
      }, e.prototype.getTilePixelSize = function (t, e, r) {
        var n = this.getTileGridForProjection(r), i = this.getTilePixelRatio(e), o = Is(n.getTileSize(t), this.tmpSize);
        return 1 == i ? o : Rs(o, i, this.tmpSize)
      }, e.prototype.getTileCoordForTileUrlFunction = function (t, e) {
        var r = void 0 !== e ? e : this.getProjection(), n = this.getTileGridForProjection(r);
        return this.getWrapX() && r.isGlobal() && (t = ac(n, t, r)), du(t, n) ? t : null
      }, e.prototype.clear = function () {
        this.tileCache.clear()
      }, e.prototype.refresh = function () {
        this.clear(), t.prototype.refresh.call(this)
      }, e.prototype.updateCacheSize = function (t, e) {
        var r = this.getTileCacheForProjection(e);
        t > r.highWaterMark && (r.highWaterMark = t)
      }, e.prototype.useTile = function (t, e, r, n) {
      }, e
    }(Dp), Up = function (t) {
      function e(e, r) {
        var n = t.call(this, e) || this;
        return n.tile = r, n
      }

      return Gp(e, t), e
    }(c), Bp = zp, Vp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Yp = function (t) {
      function e(r) {
        var n = t.call(this, {
          attributions: r.attributions,
          cacheSize: r.cacheSize,
          opaque: r.opaque,
          projection: r.projection,
          state: r.state,
          tileGrid: r.tileGrid,
          tilePixelRatio: r.tilePixelRatio,
          wrapX: r.wrapX,
          transition: r.transition,
          key: r.key,
          attributionsCollapsible: r.attributionsCollapsible,
          zDirection: r.zDirection
        }) || this;
        return n.generateTileUrlFunction_ = n.tileUrlFunction === e.prototype.tileUrlFunction, n.tileLoadFunction = r.tileLoadFunction, r.tileUrlFunction && (n.tileUrlFunction = r.tileUrlFunction), n.urls = null, r.urls ? n.setUrls(r.urls) : r.url && n.setUrl(r.url), n.tileLoadingKeys_ = {}, n
      }

      return Vp(e, t), e.prototype.getTileLoadFunction = function () {
        return this.tileLoadFunction
      }, e.prototype.getTileUrlFunction = function () {
        return Object.getPrototypeOf(this).tileUrlFunction === this.tileUrlFunction ? this.tileUrlFunction.bind(this) : this.tileUrlFunction
      }, e.prototype.getUrls = function () {
        return this.urls
      }, e.prototype.handleTileChange = function (t) {
        var e, r = t.target, n = o(r), i = r.getState();
        i == Qi ? (this.tileLoadingKeys_[n] = !0, e = Fp) : n in this.tileLoadingKeys_ && (delete this.tileLoadingKeys_[n], e = i == eo ? kp : i == to ? Ap : void 0), null != e && this.dispatchEvent(new Up(e, r))
      }, e.prototype.setTileLoadFunction = function (t) {
        this.tileCache.clear(), this.tileLoadFunction = t, this.changed()
      }, e.prototype.setTileUrlFunction = function (t, e) {
        this.tileUrlFunction = t, this.tileCache.pruneExceptNewestZ(), void 0 !== e ? this.setKey(e) : this.changed()
      }, e.prototype.setUrl = function (t) {
        var e = yc(t);
        this.urls = e, this.setUrls(e)
      }, e.prototype.setUrls = function (t) {
        this.urls = t;
        var e = t.join("\n");
        this.generateTileUrlFunction_ ? this.setTileUrlFunction(fc(t, this.tileGrid), e) : this.setKey(e)
      }, e.prototype.tileUrlFunction = function (t, e, r) {
      }, e.prototype.useTile = function (t, e, r) {
        var n = cu(t, e, r);
        this.tileCache.containsKey(n) && this.tileCache.get(n)
      }, e
    }(Bp), Wp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function qp(t, e) {
      t.getImage().src = e
    }

    var Xp = function (t) {
      function e(e) {
        var r = t.call(this, {
          attributions: e.attributions,
          cacheSize: e.cacheSize,
          opaque: e.opaque,
          projection: e.projection,
          state: e.state,
          tileGrid: e.tileGrid,
          tileLoadFunction: e.tileLoadFunction ? e.tileLoadFunction : qp,
          tilePixelRatio: e.tilePixelRatio,
          tileUrlFunction: e.tileUrlFunction,
          url: e.url,
          urls: e.urls,
          wrapX: e.wrapX,
          transition: e.transition,
          key: e.key,
          attributionsCollapsible: e.attributionsCollapsible,
          zDirection: e.zDirection
        }) || this;
        return r.crossOrigin = void 0 !== e.crossOrigin ? e.crossOrigin : null, r.tileClass = void 0 !== e.tileClass ? e.tileClass : vo, r.tileCacheForProjection = {}, r.tileGridForProjection = {}, r.reprojectionErrorThreshold_ = e.reprojectionErrorThreshold, r.contextOptions_ = !1 === e.imageSmoothing ? $u : void 0, r.renderReprojectionEdges_ = !1, r
      }

      return Wp(e, t), e.prototype.canExpireCache = function () {
        if (this.tileCache.canExpireCache()) return !0;
        for (var t in this.tileCacheForProjection) if (this.tileCacheForProjection[t].canExpireCache()) return !0;
        return !1
      }, e.prototype.expireCache = function (t, e) {
        var r = this.getTileCacheForProjection(t);
        for (var n in this.tileCache.expireCache(this.tileCache == r ? e : {}), this.tileCacheForProjection) {
          var i = this.tileCacheForProjection[n];
          i.expireCache(i == r ? e : {})
        }
      }, e.prototype.getContextOptions = function () {
        return this.contextOptions_
      }, e.prototype.getGutterForProjection = function (t) {
        return this.getProjection() && t && !Xr(this.getProjection(), t) ? 0 : this.getGutter()
      }, e.prototype.getGutter = function () {
        return 0
      }, e.prototype.getKey = function () {
        return t.prototype.getKey.call(this) + (this.contextOptions_ ? "\n" + JSON.stringify(this.contextOptions_) : "")
      }, e.prototype.getOpaque = function (e) {
        return !(this.getProjection() && e && !Xr(this.getProjection(), e)) && t.prototype.getOpaque.call(this, e)
      }, e.prototype.getTileGridForProjection = function (t) {
        var e = this.getProjection();
        if (!this.tileGrid || e && !Xr(e, t)) {
          var r = o(t);
          return r in this.tileGridForProjection || (this.tileGridForProjection[r] = oc(t)), this.tileGridForProjection[r]
        }
        return this.tileGrid
      }, e.prototype.getTileCacheForProjection = function (t) {
        var e = this.getProjection();
        if (!e || Xr(e, t)) return this.tileCache;
        var r = o(t);
        return r in this.tileCacheForProjection || (this.tileCacheForProjection[r] = new yu(this.tileCache.highWaterMark)), this.tileCacheForProjection[r]
      }, e.prototype.createTile_ = function (t, e, r, n, i, o) {
        var a = [t, e, r], s = this.getTileCoordForTileUrlFunction(a, i),
          l = s ? this.tileUrlFunction(s, n, i) : void 0,
          u = new this.tileClass(a, void 0 !== l ? Ji : ro, void 0 !== l ? l : "", this.crossOrigin, this.tileLoadFunction, this.tileOptions);
        return u.key = o, u.addEventListener(F, this.handleTileChange.bind(this)), u
      }, e.prototype.getTile = function (t, e, r, n, i) {
        var o = this.getProjection();
        if (o && i && !Xr(o, i)) {
          var a = this.getTileCacheForProjection(i), s = [t, e, r], l = void 0, u = hu(s);
          a.containsKey(u) && (l = a.get(u));
          var c = this.getKey();
          if (l && l.key == c) return l;
          var h = this.getTileGridForProjection(o), p = this.getTileGridForProjection(i),
            f = this.getTileCoordForTileUrlFunction(s, i),
            d = new Mp(o, h, i, p, s, f, this.getTilePixelRatio(n), this.getGutter(), function (t, e, r, n) {
              return this.getTileInternal(t, e, r, n, o)
            }.bind(this), this.reprojectionErrorThreshold_, this.renderReprojectionEdges_, this.contextOptions_);
          return d.key = c, l ? (d.interimTile = l, d.refreshInterimChain(), a.replace(u, d)) : a.set(u, d), d
        }
        return this.getTileInternal(t, e, r, n, o || i)
      }, e.prototype.getTileInternal = function (t, e, r, n, i) {
        var o = null, a = cu(t, e, r), s = this.getKey();
        if (this.tileCache.containsKey(a)) {
          if ((o = this.tileCache.get(a)).key != s) {
            var l = o;
            o = this.createTile_(t, e, r, n, i, s), l.getState() == Ji ? o.interimTile = l.interimTile : o.interimTile = l, o.refreshInterimChain(), this.tileCache.replace(a, o)
          }
        } else o = this.createTile_(t, e, r, n, i, s), this.tileCache.set(a, o);
        return o
      }, e.prototype.setRenderReprojectionEdges = function (t) {
        if (this.renderReprojectionEdges_ != t) {
          for (var e in this.renderReprojectionEdges_ = t, this.tileCacheForProjection) this.tileCacheForProjection[e].clear();
          this.changed()
        }
      }, e.prototype.setTileGridForProjection = function (t, e) {
        var r = Gr(t);
        if (r) {
          var n = o(r);
          n in this.tileGridForProjection || (this.tileGridForProjection[n] = e)
        }
      }, e
    }(Yp), Zp = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Kp(t) {
      var e, r, n = t[0], i = new Array(n), o = 1 << n - 1;
      for (e = 0; e < n; ++e) r = 48, t[1] & o && (r += 1), t[2] & o && (r += 2), i[e] = String.fromCharCode(r), o >>= 1;
      return i.join("")
    }

    var Hp = function (t) {
        function e(e) {
          var r = this, n = void 0 !== e.hidpi && e.hidpi;
          return (r = t.call(this, {
            cacheSize: e.cacheSize,
            crossOrigin: "anonymous",
            imageSmoothing: e.imageSmoothing,
            opaque: !0,
            projection: Gr("EPSG:3857"),
            reprojectionErrorThreshold: e.reprojectionErrorThreshold,
            state: Jo,
            tileLoadFunction: e.tileLoadFunction,
            tilePixelRatio: n ? 2 : 1,
            wrapX: void 0 === e.wrapX || e.wrapX,
            transition: e.transition
          }) || this).hidpi_ = n, r.culture_ = void 0 !== e.culture ? e.culture : "en-us", r.maxZoom_ = void 0 !== e.maxZoom ? e.maxZoom : -1, r.apiKey_ = e.key, r.imagerySet_ = e.imagerySet, Au("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + r.imagerySet_ + "?uriScheme=https&include=ImageryProviders&key=" + r.apiKey_ + "&c=" + r.culture_, r.handleImageryMetadataResponse.bind(r), void 0, "jsonp"), r
        }

        return Zp(e, t), e.prototype.getApiKey = function () {
          return this.apiKey_
        }, e.prototype.getImagerySet = function () {
          return this.imagerySet_
        }, e.prototype.handleImageryMetadataResponse = function (t) {
          if (200 == t.statusCode && "OK" == t.statusDescription && "ValidCredentials" == t.authenticationResultCode && 1 == t.resourceSets.length && 1 == t.resourceSets[0].resources.length) {
            var e = t.resourceSets[0].resources[0], r = -1 == this.maxZoom_ ? e.zoomMax : this.maxZoom_,
              n = hc(this.getProjection()), i = this.hidpi_ ? 2 : 1,
              o = e.imageWidth == e.imageHeight ? e.imageWidth / i : [e.imageWidth / i, e.imageHeight / i],
              a = lc({extent: n, minZoom: e.zoomMin, maxZoom: r, tileSize: o});
            this.tileGrid = a;
            var s = this.culture_, l = this.hidpi_;
            if (this.tileUrlFunction = dc(e.imageUrlSubdomains.map((function (t) {
              var r = [0, 0, 0], n = e.imageUrl.replace("{subdomain}", t).replace("{culture}", s);
              return function (t, e, i) {
                if (t) {
                  uu(t[0], t[1], t[2], r);
                  var o = n;
                  return l && (o += "&dpi=d1&device=mobile"), o.replace("{quadkey}", Kp(r))
                }
              }
            }))), e.imageryProviders) {
              var u = Zr(Gr("EPSG:4326"), this.getProjection());
              this.setAttributions(function (t) {
                var r = [], n = t.viewState, i = this.getTileGrid(),
                  o = i.getZForResolution(n.resolution, this.zDirection), a = i.getTileCoordForCoordAndZ(n.center, o)[0];
                return e.imageryProviders.map((function (e) {
                  for (var n = !1, i = e.coverageAreas, o = 0, s = i.length; o < s; ++o) {
                    var l = i[o];
                    if (a >= l.zoomMin && a <= l.zoomMax) {
                      var c = l.bbox;
                      if (Re(Ae([c[1], c[0], c[3], c[2]], u), t.extent)) {
                        n = !0;
                        break
                      }
                    }
                  }
                  n && r.push(e.attribution)
                })), r.push('<a class="ol-attribution-bing-tos" href="https://www.microsoft.com/maps/product/terms.html" target="_blank">Terms of Use</a>'), r
              }.bind(this))
            }
            this.setState(Qo)
          } else this.setState(ta)
        }, e
      }(Xp), $p = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Jp = function (t) {
        function e(e) {
          var r = e || {}, n = void 0 !== r.projection ? r.projection : "EPSG:3857",
            i = void 0 !== r.tileGrid ? r.tileGrid : lc({
              extent: hc(n),
              maxResolution: r.maxResolution,
              maxZoom: r.maxZoom,
              minZoom: r.minZoom,
              tileSize: r.tileSize
            });
          return t.call(this, {
            attributions: r.attributions,
            cacheSize: r.cacheSize,
            crossOrigin: r.crossOrigin,
            imageSmoothing: r.imageSmoothing,
            opaque: r.opaque,
            projection: n,
            reprojectionErrorThreshold: r.reprojectionErrorThreshold,
            tileGrid: i,
            tileLoadFunction: r.tileLoadFunction,
            tilePixelRatio: r.tilePixelRatio,
            tileUrlFunction: r.tileUrlFunction,
            url: r.url,
            urls: r.urls,
            wrapX: void 0 === r.wrapX || r.wrapX,
            transition: r.transition,
            attributionsCollapsible: r.attributionsCollapsible,
            zDirection: r.zDirection
          }) || this
        }

        return $p(e, t), e
      }(Xp), Qp = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), tf = function (t) {
        function e(e) {
          var r = t.call(this, {
            attributions: e.attributions,
            cacheSize: e.cacheSize,
            crossOrigin: e.crossOrigin,
            maxZoom: void 0 !== e.maxZoom ? e.maxZoom : 18,
            minZoom: e.minZoom,
            projection: e.projection,
            transition: e.transition,
            wrapX: e.wrapX
          }) || this;
          return r.account_ = e.account, r.mapId_ = e.map || "", r.config_ = e.config || {}, r.templateCache_ = {}, r.initializeMap_(), r
        }

        return Qp(e, t), e.prototype.getConfig = function () {
          return this.config_
        }, e.prototype.updateConfig = function (t) {
          O(this.config_, t), this.initializeMap_()
        }, e.prototype.setConfig = function (t) {
          this.config_ = t || {}, this.initializeMap_()
        }, e.prototype.initializeMap_ = function () {
          var t = JSON.stringify(this.config_);
          if (this.templateCache_[t]) this.applyTemplate_(this.templateCache_[t]); else {
            var e = "https://" + this.account_ + ".carto.com/api/v1/map";
            this.mapId_ && (e += "/named/" + this.mapId_);
            var r = new XMLHttpRequest;
            r.addEventListener("load", this.handleInitResponse_.bind(this, t)), r.addEventListener("error", this.handleInitError_.bind(this)), r.open("POST", e), r.setRequestHeader("Content-type", "application/json"), r.send(JSON.stringify(this.config_))
          }
        }, e.prototype.handleInitResponse_ = function (t, e) {
          var r = e.target;
          if (!r.status || r.status >= 200 && r.status < 300) {
            var n = void 0;
            try {
              n = JSON.parse(r.responseText)
            } catch (t) {
              return void this.setState(ta)
            }
            this.applyTemplate_(n), this.templateCache_[t] = n, this.setState(Qo)
          } else this.setState(ta)
        }, e.prototype.handleInitError_ = function (t) {
          this.setState(ta)
        }, e.prototype.applyTemplate_ = function (t) {
          var e = "https://" + t.cdn_url.https + "/" + this.account_ + "/api/v1/map/" + t.layergroupid + "/{z}/{x}/{y}.png";
          this.setUrl(e)
        }, e
      }(Jp), ef = "addfeature", rf = "changefeature", nf = "clear", of = "removefeature", af = "featuresloadstart",
      sf = "featuresloadend", lf = "featuresloaderror", uf = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), cf = function (t) {
        function e(e, r, n) {
          var i = t.call(this, e) || this;
          return i.feature = r, i.features = n, i
        }

        return uf(e, t), e
      }(c), hf = function (t) {
        function e(e) {
          var r = this, n = e || {};
          (r = t.call(this, {
            attributions: n.attributions,
            projection: void 0,
            state: Qo,
            wrapX: void 0 === n.wrapX || n.wrapX
          }) || this).loader_ = T, r.format_ = n.format, r.overlaps_ = void 0 === n.overlaps || n.overlaps, r.url_ = n.url, void 0 !== n.loader ? r.loader_ = n.loader : void 0 !== r.url_ && (pt(r.format_, 7), r.loader_ = Mu(r.url_, r.format_)), r.strategy_ = void 0 !== n.strategy ? n.strategy : Fu;
          var i, o, a = void 0 === n.useSpatialIndex || n.useSpatialIndex;
          return r.featuresRtree_ = a ? new Rp : null, r.loadedExtentsRtree_ = new Rp, r.nullGeometryFeatures_ = {}, r.idIndex_ = {}, r.uidIndex_ = {}, r.featureChangeKeys_ = {}, r.featuresCollection_ = null, Array.isArray(n.features) ? o = n.features : n.features && (o = (i = n.features).getArray()), a || void 0 !== i || (i = new ht(o)), void 0 !== o && r.addFeaturesInternal(o), void 0 !== i && r.bindFeaturesCollection_(i), r
        }

        return uf(e, t), e.prototype.addFeature = function (t) {
          this.addFeatureInternal(t), this.changed()
        }, e.prototype.addFeatureInternal = function (t) {
          var e = o(t);
          if (this.addToIndex_(e, t)) {
            this.setupChangeEvents_(e, t);
            var r = t.getGeometry();
            if (r) {
              var n = r.getExtent();
              this.featuresRtree_ && this.featuresRtree_.insert(n, t)
            } else this.nullGeometryFeatures_[e] = t;
            this.dispatchEvent(new cf(ef, t))
          } else this.featuresCollection_ && this.featuresCollection_.remove(t)
        }, e.prototype.setupChangeEvents_ = function (t, e) {
          this.featureChangeKeys_[t] = [Z(e, F, this.handleFeatureChange_, this), Z(e, h, this.handleFeatureChange_, this)]
        }, e.prototype.addToIndex_ = function (t, e) {
          var r = !0, n = e.getId();
          return void 0 !== n && (n.toString() in this.idIndex_ ? r = !1 : this.idIndex_[n.toString()] = e), r && (pt(!(t in this.uidIndex_), 30), this.uidIndex_[t] = e), r
        }, e.prototype.addFeatures = function (t) {
          this.addFeaturesInternal(t), this.changed()
        }, e.prototype.addFeaturesInternal = function (t) {
          for (var e = [], r = [], n = [], i = 0, a = t.length; i < a; i++) {
            var s = o(u = t[i]);
            this.addToIndex_(s, u) && r.push(u)
          }
          i = 0;
          for (var l = r.length; i < l; i++) {
            var u;
            s = o(u = r[i]);
            this.setupChangeEvents_(s, u);
            var c = u.getGeometry();
            if (c) {
              var h = c.getExtent();
              e.push(h), n.push(u)
            } else this.nullGeometryFeatures_[s] = u
          }
          this.featuresRtree_ && this.featuresRtree_.load(e, n);
          i = 0;
          for (var p = r.length; i < p; i++) this.dispatchEvent(new cf(ef, r[i]))
        }, e.prototype.bindFeaturesCollection_ = function (t) {
          var e = !1;
          this.addEventListener(ef, (function (r) {
            e || (e = !0, t.push(r.feature), e = !1)
          })), this.addEventListener(of, (function (r) {
            e || (e = !0, t.remove(r.feature), e = !1)
          })), t.addEventListener(at, function (t) {
            e || (e = !0, this.addFeature(t.element), e = !1)
          }.bind(this)), t.addEventListener(st, function (t) {
            e || (e = !0, this.removeFeature(t.element), e = !1)
          }.bind(this)), this.featuresCollection_ = t
        }, e.prototype.clear = function (t) {
          if (t) {
            for (var e in this.featureChangeKeys_) {
              this.featureChangeKeys_[e].forEach(H)
            }
            this.featuresCollection_ || (this.featureChangeKeys_ = {}, this.idIndex_ = {}, this.uidIndex_ = {})
          } else if (this.featuresRtree_) for (var r in this.featuresRtree_.forEach(this.removeFeatureInternal.bind(this)), this.nullGeometryFeatures_) this.removeFeatureInternal(this.nullGeometryFeatures_[r]);
          this.featuresCollection_ && this.featuresCollection_.clear(), this.featuresRtree_ && this.featuresRtree_.clear(), this.nullGeometryFeatures_ = {};
          var n = new cf(nf);
          this.dispatchEvent(n), this.changed()
        }, e.prototype.forEachFeature = function (t) {
          if (this.featuresRtree_) return this.featuresRtree_.forEach(t);
          this.featuresCollection_ && this.featuresCollection_.forEach(t)
        }, e.prototype.forEachFeatureAtCoordinateDirect = function (t, e) {
          var r = [t[0], t[1], t[0], t[1]];
          return this.forEachFeatureInExtent(r, (function (r) {
            return r.getGeometry().intersectsCoordinate(t) ? e(r) : void 0
          }))
        }, e.prototype.forEachFeatureInExtent = function (t, e) {
          if (this.featuresRtree_) return this.featuresRtree_.forEachInExtent(t, e);
          this.featuresCollection_ && this.featuresCollection_.forEach(e)
        }, e.prototype.forEachFeatureIntersectingExtent = function (t, e) {
          return this.forEachFeatureInExtent(t, (function (r) {
            if (r.getGeometry().intersectsExtent(t)) {
              var n = e(r);
              if (n) return n
            }
          }))
        }, e.prototype.getFeaturesCollection = function () {
          return this.featuresCollection_
        }, e.prototype.getFeatures = function () {
          var t;
          return this.featuresCollection_ ? t = this.featuresCollection_.getArray() : this.featuresRtree_ && (t = this.featuresRtree_.getAll(), I(this.nullGeometryFeatures_) || v(t, R(this.nullGeometryFeatures_))), t
        }, e.prototype.getFeaturesAtCoordinate = function (t) {
          var e = [];
          return this.forEachFeatureAtCoordinateDirect(t, (function (t) {
            e.push(t)
          })), e
        }, e.prototype.getFeaturesInExtent = function (t) {
          return this.featuresRtree_ ? this.featuresRtree_.getInExtent(t) : this.featuresCollection_ ? this.featuresCollection_.getArray() : []
        }, e.prototype.getClosestFeatureToCoordinate = function (t, e) {
          var r = t[0], n = t[1], i = null, o = [NaN, NaN], a = 1 / 0, s = [-1 / 0, -1 / 0, 1 / 0, 1 / 0], l = e || S;
          return this.featuresRtree_.forEachInExtent(s, (function (t) {
            if (l(t)) {
              var e = t.getGeometry(), u = a;
              if ((a = e.closestPointXY(r, n, o, a)) < u) {
                i = t;
                var c = Math.sqrt(a);
                s[0] = r - c, s[1] = n - c, s[2] = r + c, s[3] = n + c
              }
            }
          })), i
        }, e.prototype.getExtent = function (t) {
          return this.featuresRtree_.getExtent(t)
        }, e.prototype.getFeatureById = function (t) {
          var e = this.idIndex_[t.toString()];
          return void 0 !== e ? e : null
        }, e.prototype.getFeatureByUid = function (t) {
          var e = this.uidIndex_[t];
          return void 0 !== e ? e : null
        }, e.prototype.getFormat = function () {
          return this.format_
        }, e.prototype.getOverlaps = function () {
          return this.overlaps_
        }, e.prototype.getUrl = function () {
          return this.url_
        }, e.prototype.handleFeatureChange_ = function (t) {
          var e = t.target, r = o(e), n = e.getGeometry();
          if (n) {
            var i = n.getExtent();
            r in this.nullGeometryFeatures_ ? (delete this.nullGeometryFeatures_[r], this.featuresRtree_ && this.featuresRtree_.insert(i, e)) : this.featuresRtree_ && this.featuresRtree_.update(i, e)
          } else r in this.nullGeometryFeatures_ || (this.featuresRtree_ && this.featuresRtree_.remove(e), this.nullGeometryFeatures_[r] = e);
          var a = e.getId();
          if (void 0 !== a) {
            var s = a.toString();
            this.idIndex_[s] !== e && (this.removeFromIdIndex_(e), this.idIndex_[s] = e)
          } else this.removeFromIdIndex_(e), this.uidIndex_[r] = e;
          this.changed(), this.dispatchEvent(new cf(rf, e))
        }, e.prototype.hasFeature = function (t) {
          var e = t.getId();
          return void 0 !== e ? e in this.idIndex_ : o(t) in this.uidIndex_
        }, e.prototype.isEmpty = function () {
          return this.featuresRtree_.isEmpty() && I(this.nullGeometryFeatures_)
        }, e.prototype.loadFeatures = function (t, e, r) {
          var n = this.loadedExtentsRtree_, i = this.strategy_(t, e);
          this.loading = !1;
          for (var o = function (t, o) {
            var s = i[t];
            n.forEachInExtent(s, (function (t) {
              return te(t.extent, s)
            })) || (a.dispatchEvent(new cf(af)), a.loader_.call(a, s, e, r, function (t) {
              this.dispatchEvent(new cf(sf, void 0, t))
            }.bind(a), function () {
              this.dispatchEvent(new cf(lf))
            }.bind(a)), n.insert(s, {extent: s.slice()}), a.loading = a.loader_ !== T)
          }, a = this, s = 0, l = i.length; s < l; ++s) o(s)
        }, e.prototype.refresh = function () {
          this.clear(!0), this.loadedExtentsRtree_.clear(), t.prototype.refresh.call(this)
        }, e.prototype.removeLoadedExtent = function (t) {
          var e, r = this.loadedExtentsRtree_;
          r.forEachInExtent(t, (function (r) {
            if (ue(r.extent, t)) return e = r, !0
          })), e && r.remove(e)
        }, e.prototype.removeFeature = function (t) {
          var e = o(t);
          e in this.nullGeometryFeatures_ ? delete this.nullGeometryFeatures_[e] : this.featuresRtree_ && this.featuresRtree_.remove(t), this.removeFeatureInternal(t), this.changed()
        }, e.prototype.removeFeatureInternal = function (t) {
          var e = o(t);
          this.featureChangeKeys_[e].forEach(H), delete this.featureChangeKeys_[e];
          var r = t.getId();
          void 0 !== r && delete this.idIndex_[r.toString()], delete this.uidIndex_[e], this.dispatchEvent(new cf(of, t))
        }, e.prototype.removeFromIdIndex_ = function (t) {
          var e = !1;
          for (var r in this.idIndex_) if (this.idIndex_[r] === t) {
            delete this.idIndex_[r], e = !0;
            break
          }
          return e
        }, e.prototype.setLoader = function (t) {
          this.loader_ = t
        }, e.prototype.setUrl = function (t) {
          pt(this.format_, 7), this.setLoader(Mu(t, this.format_))
        }, e
      }(Dp), pf = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ff = function (t) {
        function e(e) {
          var r = t.call(this, {attributions: e.attributions, wrapX: e.wrapX}) || this;
          return r.resolution = void 0, r.distance = void 0 !== e.distance ? e.distance : 20, r.features = [], r.geometryFunction = e.geometryFunction || function (t) {
            var e = t.getGeometry();
            return pt(e.getType() == bt.POINT, 10), e
          }, r.boundRefresh_ = r.refresh.bind(r), r.setSource(e.source || null), r
        }

        return pf(e, t), e.prototype.clear = function (e) {
          this.features.length = 0, t.prototype.clear.call(this, e)
        }, e.prototype.getDistance = function () {
          return this.distance
        }, e.prototype.getSource = function () {
          return this.source
        }, e.prototype.loadFeatures = function (t, e, r) {
          this.source.loadFeatures(t, e, r), e !== this.resolution && (this.clear(), this.resolution = e, this.cluster(), this.addFeatures(this.features))
        }, e.prototype.setDistance = function (t) {
          this.distance = t, this.refresh()
        }, e.prototype.setSource = function (t) {
          this.source && this.source.removeEventListener(F, this.boundRefresh_), this.source = t, t && t.addEventListener(F, this.boundRefresh_), this.refresh()
        }, e.prototype.refresh = function () {
          this.clear(), this.cluster(), this.addFeatures(this.features)
        }, e.prototype.cluster = function () {
          if (void 0 !== this.resolution && this.source) for (var t = [1 / 0, 1 / 0, -1 / 0, -1 / 0], e = this.distance * this.resolution, r = this.source.getFeatures(), n = {}, i = 0, a = r.length; i < a; i++) {
            var s = r[i];
            if (!(o(s) in n)) {
              var l = this.geometryFunction(s);
              if (l) {
                ae(l.getCoordinates(), t), Ht(t, e, t);
                var u = this.source.getFeaturesInExtent(t);
                u = u.filter((function (t) {
                  var e = o(t);
                  return !(e in n) && (n[e] = !0, !0)
                })), this.features.push(this.createCluster(u))
              }
            }
          }
        }, e.prototype.createCluster = function (t) {
          for (var e = [0, 0], r = t.length - 1; r >= 0; --r) {
            var n = this.geometryFunction(t[r]);
            n ? xr(e, n.getCoordinates()) : t.splice(r, 1)
          }
          Pr(e, 1 / t.length);
          var i = new gt(new qn(e));
          return i.set("features", t), i
        }, e
      }(hf), df = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), gf = "default", yf = "truncated", mf = function (t) {
        function e(e, r, n, i, o, a, s) {
          var l = t.call(this, r, n, i, o, a, s) || this;
          return l.zoomifyImage_ = null, l.tileSize_ = e, l
        }

        return df(e, t), e.prototype.getImage = function () {
          if (this.zoomifyImage_) return this.zoomifyImage_;
          var e = t.prototype.getImage.call(this);
          if (this.state == to) {
            var r = this.tileSize_;
            if (e.width == r[0] && e.height == r[1]) return this.zoomifyImage_ = e, e;
            var n = uo(r[0], r[1]);
            return n.drawImage(e, 0, 0), this.zoomifyImage_ = n.canvas, n.canvas
          }
          return e
        }, e
      }(vo), vf = function (t) {
        function e(e) {
          var r = this, n = e, i = n.size, o = void 0 !== n.tierSizeCalculation ? n.tierSizeCalculation : gf,
            a = n.tilePixelRatio || 1, s = i[0], l = i[1], u = [], c = n.tileSize || 256, h = c * a;
          switch (o) {
            case gf:
              for (; s > h || l > h;) u.push([Math.ceil(s / h), Math.ceil(l / h)]), h += h;
              break;
            case yf:
              for (var p = s, f = l; p > h || f > h;) u.push([Math.ceil(p / h), Math.ceil(f / h)]), p >>= 1, f >>= 1;
              break;
            default:
              pt(!1, 53)
          }
          u.push([1, 1]), u.reverse();
          for (var d = [a], g = [0], y = 1, m = u.length; y < m; y++) d.push(a << y), g.push(u[y - 1][0] * u[y - 1][1] + g[y - 1]);
          d.reverse();
          var v = new ic({tileSize: c, extent: n.extent || [0, -l, s, 0], resolutions: d}), _ = n.url;
          _ && -1 == _.indexOf("{TileGroup}") && -1 == _.indexOf("{tileIndex}") && (_ += "{TileGroup}/{z}-{x}-{y}.jpg");
          var b = yc(_), x = c * a;
          var w = dc(b.map((function (t) {
            return function (e, r, n) {
              if (e) {
                var i = e[0], o = e[1], a = e[2], s = o + a * u[i][0],
                  l = {z: i, x: o, y: a, tileIndex: s, TileGroup: "TileGroup" + ((s + g[i]) / x | 0)};
                return t.replace(/\{(\w+?)\}/g, (function (t, e) {
                  return l[e]
                }))
              }
            }
          }))), S = mf.bind(null, Is(c * a));
          (r = t.call(this, {
            attributions: n.attributions,
            cacheSize: n.cacheSize,
            crossOrigin: n.crossOrigin,
            imageSmoothing: n.imageSmoothing,
            projection: n.projection,
            tilePixelRatio: a,
            reprojectionErrorThreshold: n.reprojectionErrorThreshold,
            tileClass: S,
            tileGrid: v,
            tileUrlFunction: w,
            transition: n.transition
          }) || this).zDirection = n.zDirection;
          var E = w(v.getTileCoordForCoordAndResolution(xe(v.getExtent()), d[d.length - 1]), 1, null), T = new Image;
          return T.addEventListener("error", function () {
            x = c, this.changed()
          }.bind(r)), T.src = E, r
        }

        return df(e, t), e
      }(Xp), _f = function () {
        for (var t = 0, e = 0, r = arguments.length; e < r; e++) t += arguments[e].length;
        var n = Array(t), i = 0;
        for (e = 0; e < r; e++) for (var o = arguments[e], a = 0, s = o.length; a < s; a++, i++) n[i] = o[a];
        return n
      }, bf = "version1", xf = "version2", wf = "version3", Sf = {};
    Sf[bf] = {
      level0: {supports: [], formats: [], qualities: ["native"]},
      level1: {supports: ["regionByPx", "sizeByW", "sizeByH", "sizeByPct"], formats: ["jpg"], qualities: ["native"]},
      level2: {
        supports: ["regionByPx", "regionByPct", "sizeByW", "sizeByH", "sizeByPct", "sizeByConfinedWh", "sizeByWh"],
        formats: ["jpg", "png"],
        qualities: ["native", "color", "grey", "bitonal"]
      }
    }, Sf[xf] = {
      level0: {supports: [], formats: ["jpg"], qualities: ["default"]},
      level1: {supports: ["regionByPx", "sizeByW", "sizeByH", "sizeByPct"], formats: ["jpg"], qualities: ["default"]},
      level2: {
        supports: ["regionByPx", "regionByPct", "sizeByW", "sizeByH", "sizeByPct", "sizeByConfinedWh", "sizeByDistortedWh", "sizeByWh"],
        formats: ["jpg", "png"],
        qualities: ["default", "bitonal"]
      }
    }, Sf[wf] = {
      level0: {supports: [], formats: ["jpg"], qualities: ["default"]},
      level1: {
        supports: ["regionByPx", "regionSquare", "sizeByW", "sizeByH", "sizeByWh"],
        formats: ["jpg"],
        qualities: ["default"]
      },
      level2: {
        supports: ["regionByPx", "regionSquare", "regionByPct", "sizeByW", "sizeByH", "sizeByPct", "sizeByConfinedWh", "sizeByWh"],
        formats: ["jpg", "png"],
        qualities: ["default"]
      }
    }, Sf.none = {none: {supports: [], formats: [], qualities: []}};
    var Ef = /^https?:\/\/library\.stanford\.edu\/iiif\/image-api\/(?:1\.1\/)?compliance\.html#level[0-2]$/,
      Tf = /^https?:\/\/iiif\.io\/api\/image\/2\/level[0-2](?:\.json)?$/,
      Cf = /(^https?:\/\/iiif\.io\/api\/image\/3\/level[0-2](?:\.json)?$)|(^level[0-2]$)/;
    var Of = {};
    Of[bf] = function (t) {
      var e = t.getComplianceLevelSupportedFeatures();
      return void 0 === e && (e = Sf[bf].level0), {
        url: void 0 === t.imageInfo["@id"] ? void 0 : t.imageInfo["@id"].replace(/\/?(?:info\.json)?$/g, ""),
        supports: e.supports,
        formats: _f(e.formats, [void 0 === t.imageInfo.formats ? [] : t.imageInfo.formats]),
        qualities: _f(e.qualities, [void 0 === t.imageInfo.qualities ? [] : t.imageInfo.qualities]),
        resolutions: t.imageInfo.scale_factors,
        tileSize: void 0 !== t.imageInfo.tile_width ? void 0 !== t.imageInfo.tile_height ? [t.imageInfo.tile_width, t.imageInfo.tile_height] : [t.imageInfo.tile_width, t.imageInfo.tile_width] : null != t.imageInfo.tile_height ? [t.imageInfo.tile_height, t.imageInfo.tile_height] : void 0
      }
    }, Of[xf] = function (t) {
      var e = t.getComplianceLevelSupportedFeatures(),
        r = Array.isArray(t.imageInfo.profile) && t.imageInfo.profile.length > 1,
        n = r && t.imageInfo.profile[1].supports ? t.imageInfo.profile[1].supports : [],
        i = r && t.imageInfo.profile[1].formats ? t.imageInfo.profile[1].formats : [],
        o = r && t.imageInfo.profile[1].qualities ? t.imageInfo.profile[1].qualities : [];
      return {
        url: t.imageInfo["@id"].replace(/\/?(?:info\.json)?$/g, ""),
        sizes: void 0 === t.imageInfo.sizes ? void 0 : t.imageInfo.sizes.map((function (t) {
          return [t.width, t.height]
        })),
        tileSize: void 0 === t.imageInfo.tiles ? void 0 : [t.imageInfo.tiles.map((function (t) {
          return t.width
        }))[0], t.imageInfo.tiles.map((function (t) {
          return void 0 === t.height ? t.width : t.height
        }))[0]],
        resolutions: void 0 === t.imageInfo.tiles ? void 0 : t.imageInfo.tiles.map((function (t) {
          return t.scaleFactors
        }))[0],
        supports: _f(e.supports, n),
        formats: _f(e.formats, i),
        qualities: _f(e.qualities, o)
      }
    }, Of[wf] = function (t) {
      var e = t.getComplianceLevelSupportedFeatures(),
        r = void 0 === t.imageInfo.extraFormats ? e.formats : _f(e.formats, t.imageInfo.extraFormats),
        n = void 0 !== t.imageInfo.preferredFormats && Array.isArray(t.imageInfo.preferredFormats) && t.imageInfo.preferredFormats.length > 0 ? t.imageInfo.preferredFormats.filter((function (t) {
          return ["jpg", "png", "gif"].includes(t)
        })).reduce((function (t, e) {
          return void 0 === t && r.includes(e) ? e : t
        }), void 0) : void 0;
      return {
        url: t.imageInfo.id,
        sizes: void 0 === t.imageInfo.sizes ? void 0 : t.imageInfo.sizes.map((function (t) {
          return [t.width, t.height]
        })),
        tileSize: void 0 === t.imageInfo.tiles ? void 0 : [t.imageInfo.tiles.map((function (t) {
          return t.width
        }))[0], t.imageInfo.tiles.map((function (t) {
          return t.height
        }))[0]],
        resolutions: void 0 === t.imageInfo.tiles ? void 0 : t.imageInfo.tiles.map((function (t) {
          return t.scaleFactors
        }))[0],
        supports: void 0 === t.imageInfo.extraFeatures ? e.supports : _f(e.supports, t.imageInfo.extraFeatures),
        formats: r,
        qualities: void 0 === t.imageInfo.extraQualities ? e.qualities : _f(e.qualities, t.imageInfo.extraQualities),
        preferredFormat: n
      }
    };
    var Pf = function () {
      function t(t) {
        this.setImageInfo(t)
      }

      return t.prototype.setImageInfo = function (t) {
        this.imageInfo = "string" == typeof t ? JSON.parse(t) : t
      }, t.prototype.getImageApiVersion = function () {
        if (void 0 !== this.imageInfo) {
          var t = this.imageInfo["@context"] || "ol-no-context";
          "string" == typeof t && (t = [t]);
          for (var e = 0; e < t.length; e++) switch (t[e]) {
            case"http://library.stanford.edu/iiif/image-api/1.1/context.json":
            case"http://iiif.io/api/image/1/context.json":
              return bf;
            case"http://iiif.io/api/image/2/context.json":
              return xf;
            case"http://iiif.io/api/image/3/context.json":
              return wf;
            case"ol-no-context":
              if (this.getComplianceLevelEntryFromProfile(bf) && this.imageInfo.identifier) return bf
          }
          pt(!1, 61)
        }
      }, t.prototype.getComplianceLevelEntryFromProfile = function (t) {
        if (void 0 !== this.imageInfo && void 0 !== this.imageInfo.profile) switch (void 0 === t && (t = this.getImageApiVersion()), t) {
          case bf:
            if (Ef.test(this.imageInfo.profile)) return this.imageInfo.profile;
            break;
          case wf:
            if (Cf.test(this.imageInfo.profile)) return this.imageInfo.profile;
            break;
          case xf:
            if ("string" == typeof this.imageInfo.profile && Tf.test(this.imageInfo.profile)) return this.imageInfo.profile;
            if (Array.isArray(this.imageInfo.profile) && this.imageInfo.profile.length > 0 && "string" == typeof this.imageInfo.profile[0] && Tf.test(this.imageInfo.profile[0])) return this.imageInfo.profile[0]
        }
      }, t.prototype.getComplianceLevelFromProfile = function (t) {
        var e = this.getComplianceLevelEntryFromProfile(t);
        if (void 0 !== e) {
          var r = e.match(/level[0-2](?:\.json)?$/g);
          return Array.isArray(r) ? r[0].replace(".json", "") : void 0
        }
      }, t.prototype.getComplianceLevelSupportedFeatures = function () {
        if (void 0 !== this.imageInfo) {
          var t = this.getImageApiVersion(), e = this.getComplianceLevelFromProfile(t);
          return void 0 === e ? Sf.none.none : Sf[t][e]
        }
      }, t.prototype.getTileSourceOptions = function (t) {
        var e = t || {}, r = this.getImageApiVersion();
        if (void 0 !== r) {
          var n = void 0 === r ? void 0 : Of[r](this);
          if (void 0 !== n) return {
            url: n.url,
            version: r,
            size: [this.imageInfo.width, this.imageInfo.height],
            sizes: n.sizes,
            format: void 0 !== e.format && n.formats.includes(e.format) ? e.format : void 0 !== n.preferredFormat ? n.preferredFormat : "jpg",
            supports: n.supports,
            quality: e.quality && n.qualities.includes(e.quality) ? e.quality : n.qualities.includes("native") ? "native" : "default",
            resolutions: Array.isArray(n.resolutions) ? n.resolutions.sort((function (t, e) {
              return e - t
            })) : void 0,
            tileSize: n.tileSize
          }
        }
      }, t
    }(), Rf = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function If(t) {
      return t.toLocaleString("en", {maximumFractionDigits: 10})
    }

    var Lf = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = n.url || "";
        i += i.lastIndexOf("/") === i.length - 1 || "" === i ? "" : "/";
        var o = n.version || xf, a = n.sizes || [], s = n.size;
        pt(null != s && Array.isArray(s) && 2 == s.length && !isNaN(s[0]) && s[0] > 0 && !isNaN(s[1]) && s[1] > 0, 60);
        var l, u, c, h = s[0], p = s[1], f = n.tileSize, d = n.tilePixelRatio || 1, g = n.format || "jpg",
          y = n.quality || (n.version == bf ? "native" : "default"), m = n.resolutions || [], v = n.supports || [],
          _ = n.extent || [0, -p, h, 0], b = null != a && Array.isArray(a) && a.length > 0,
          x = void 0 !== f && ("number" == typeof f && Number.isInteger(f) && f > 0 || Array.isArray(f) && f.length > 0),
          w = null != v && Array.isArray(v) && (v.includes("regionByPx") || v.includes("regionByPct")) && (v.includes("sizeByWh") || v.includes("sizeByH") || v.includes("sizeByW") || v.includes("sizeByPct"));
        if (m.sort((function (t, e) {
          return e - t
        })), x || w) if (null != f && ("number" == typeof f && Number.isInteger(f) && f > 0 ? (l = f, u = f) : Array.isArray(f) && f.length > 0 && ((1 == f.length || null == f[1] && Number.isInteger(f[0])) && (l = f[0], u = f[0]), 2 == f.length && (Number.isInteger(f[0]) && Number.isInteger(f[1]) ? (l = f[0], u = f[1]) : null == f[0] && Number.isInteger(f[1]) && (l = f[1], u = f[1])))), void 0 !== l && void 0 !== u || (l = 256, u = 256), 0 == m.length) for (var S = c = Math.max(Math.ceil(Math.log(h / l) / Math.LN2), Math.ceil(Math.log(p / u) / Math.LN2)); S >= 0; S--) m.push(Math.pow(2, S)); else {
          var E = Math.max.apply(Math, m);
          c = Math.round(Math.log(E) / Math.LN2)
        } else if (l = h, u = p, m = [], b) {
          a.sort((function (t, e) {
            return t[0] - e[0]
          })), c = -1;
          var T = [];
          for (S = 0; S < a.length; S++) {
            var C = h / a[S][0];
            m.length > 0 && m[m.length - 1] == C ? T.push(S) : (m.push(C), c++)
          }
          if (T.length > 0) for (S = 0; S < T.length; S++) a.splice(T[S] - S, 1)
        } else m.push(1), a.push([h, p]), c = 0;
        var O = new ic({tileSize: [l, u], extent: _, origin: Ce(_), resolutions: m}),
          P = mf.bind(null, Is(f || 256).map((function (t) {
            return t * d
          })));
        return (r = t.call(this, {
          attributions: n.attributions,
          attributionsCollapsible: n.attributionsCollapsible,
          cacheSize: n.cacheSize,
          crossOrigin: n.crossOrigin,
          imageSmoothing: n.imageSmoothing,
          projection: n.projection,
          reprojectionErrorThreshold: n.reprojectionErrorThreshold,
          state: n.state,
          tileClass: P,
          tileGrid: O,
          tilePixelRatio: n.tilePixelRatio,
          tileUrlFunction: function (t, e, r) {
            var n, s, f = t[0];
            if (!(f > c)) {
              var d = t[1], _ = t[2], S = m[f];
              if (!(void 0 === d || void 0 === _ || void 0 === S || d < 0 || Math.ceil(h / S / l) <= d || _ < 0 || Math.ceil(p / S / u) <= _)) {
                if (w || x) {
                  var E = d * l * S, T = _ * u * S, C = l * S, O = u * S, P = l, R = u;
                  if (E + C > h && (C = h - E), T + O > p && (O = p - T), E + l * S > h && (P = Math.floor((h - E + S - 1) / S)), T + u * S > p && (R = Math.floor((p - T + S - 1) / S)), 0 == E && C == h && 0 == T && O == p) n = "full"; else if (!w || v.includes("regionByPx")) n = E + "," + T + "," + C + "," + O; else if (v.includes("regionByPct")) {
                    n = "pct:" + If(E / h * 100) + "," + If(T / p * 100) + "," + If(C / h * 100) + "," + If(O / p * 100)
                  }
                  o != wf || w && !v.includes("sizeByWh") ? !w || v.includes("sizeByW") ? s = P + "," : v.includes("sizeByH") ? s = "," + R : v.includes("sizeByWh") ? s = P + "," + R : v.includes("sizeByPct") && (s = "pct:" + If(100 / S)) : s = P + "," + R
                } else if (n = "full", b) {
                  var I = a[f][0], L = a[f][1];
                  s = o == wf ? I == h && L == p ? "max" : I + "," + L : I == h ? "full" : I + ","
                } else s = o == wf ? "max" : "full";
                return i + n + "/" + s + "/0/" + y + "." + g
              }
            }
          },
          transition: n.transition
        }) || this).zDirection = n.zDirection, r
      }

      return Rf(e, t), e
    }(Xp), Mf = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Ff = function (t) {
      function e(e, r, n, i, o, a, s) {
        var l = this, u = e.getExtent(), c = r.getExtent(), h = c ? Te(n, c) : n, p = tc(e, r, xe(h), i),
          f = new Ip(e, r, h, u, .5 * p, i), d = a(f.calculateSourceExtent(), p, o), g = d ? Fi : Ni,
          y = d ? d.getPixelRatio() : 1;
        return (l = t.call(this, n, i, y, g) || this).targetProj_ = r, l.maxSourceExtent_ = u, l.triangulation_ = f, l.targetResolution_ = i, l.targetExtent_ = n, l.sourceImage_ = d, l.sourcePixelRatio_ = y, l.contextOptions_ = s, l.canvas_ = null, l.sourceListenerKey_ = null, l
      }

      return Mf(e, t), e.prototype.disposeInternal = function () {
        this.state == Ai && this.unlistenSource_(), t.prototype.disposeInternal.call(this)
      }, e.prototype.getImage = function () {
        return this.canvas_
      }, e.prototype.getProjection = function () {
        return this.targetProj_
      }, e.prototype.reproject_ = function () {
        var t = this.sourceImage_.getState();
        if (t == ki) {
          var e = Pe(this.targetExtent_) / this.targetResolution_, r = Ee(this.targetExtent_) / this.targetResolution_;
          this.canvas_ = rc(e, r, this.sourcePixelRatio_, this.sourceImage_.getResolution(), this.maxSourceExtent_, this.targetResolution_, this.targetExtent_, this.triangulation_, [{
            extent: this.sourceImage_.getExtent(),
            image: this.sourceImage_.getImage()
          }], 0, void 0, this.contextOptions_)
        }
        this.state = t, this.changed()
      }, e.prototype.load = function () {
        if (this.state == Fi) {
          this.state = Ai, this.changed();
          var t = this.sourceImage_.getState();
          t == ki || t == ji ? this.reproject_() : (this.sourceListenerKey_ = Z(this.sourceImage_, F, (function (t) {
            var e = this.sourceImage_.getState();
            e != ki && e != ji || (this.unlistenSource_(), this.reproject_())
          }), this), this.sourceImage_.load())
        }
      }, e.prototype.unlistenSource_ = function () {
        H(this.sourceListenerKey_), this.sourceListenerKey_ = null
      }, e
    }(Mi), Af = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), kf = "imageloadstart", jf = "imageloadend", Nf = "imageloaderror", Df = function (t) {
      function e(e, r) {
        var n = t.call(this, e) || this;
        return n.image = r, n
      }

      return Af(e, t), e
    }(c);

    function Gf(t, e) {
      t.getImage().src = e
    }

    var zf = function (t) {
      function e(e) {
        var r = t.call(this, {attributions: e.attributions, projection: e.projection, state: e.state}) || this;
        return r.resolutions_ = void 0 !== e.resolutions ? e.resolutions : null, r.reprojectedImage_ = null, r.reprojectedRevision_ = 0, r.contextOptions_ = !1 === e.imageSmoothing ? $u : void 0, r
      }

      return Af(e, t), e.prototype.getResolutions = function () {
        return this.resolutions_
      }, e.prototype.getContextOptions = function () {
        return this.contextOptions_
      }, e.prototype.findNearestResolution = function (t) {
        if (this.resolutions_) {
          var e = y(this.resolutions_, t, 0);
          t = this.resolutions_[e]
        }
        return t
      }, e.prototype.getImage = function (t, e, r, n) {
        var i = this.getProjection();
        if (i && n && !Xr(i, n)) {
          if (this.reprojectedImage_) {
            if (this.reprojectedRevision_ == this.getRevision() && Xr(this.reprojectedImage_.getProjection(), n) && this.reprojectedImage_.getResolution() == e && ue(this.reprojectedImage_.getExtent(), t)) return this.reprojectedImage_;
            this.reprojectedImage_.dispose(), this.reprojectedImage_ = null
          }
          return this.reprojectedImage_ = new Ff(i, n, t, e, r, function (t, e, r) {
            return this.getImageInternal(t, e, r, i)
          }.bind(this), this.contextOptions_), this.reprojectedRevision_ = this.getRevision(), this.reprojectedImage_
        }
        return i && (n = i), this.getImageInternal(t, e, r, n)
      }, e.prototype.getImageInternal = function (t, e, r, i) {
        return n()
      }, e.prototype.handleImageChange = function (t) {
        var e = t.target;
        switch (e.getState()) {
          case Ai:
            this.loading = !0, this.dispatchEvent(new Df(kf, e));
            break;
          case ki:
            this.loading = !1, this.dispatchEvent(new Df(jf, e));
            break;
          case ji:
            this.loading = !1, this.dispatchEvent(new Df(Nf, e))
        }
      }, e
    }(Dp), Uf = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Bf = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, {
          attributions: n.attributions,
          imageSmoothing: n.imageSmoothing,
          projection: n.projection,
          resolutions: n.resolutions
        }) || this).crossOrigin_ = void 0 !== n.crossOrigin ? n.crossOrigin : null, r.hidpi_ = void 0 === n.hidpi || n.hidpi, r.url_ = n.url, r.imageLoadFunction_ = void 0 !== n.imageLoadFunction ? n.imageLoadFunction : Gf, r.params_ = n.params || {}, r.image_ = null, r.imageSize_ = [0, 0], r.renderedRevision_ = 0, r.ratio_ = void 0 !== n.ratio ? n.ratio : 1.5, r
      }

      return Uf(e, t), e.prototype.getParams = function () {
        return this.params_
      }, e.prototype.getImageInternal = function (t, e, r, n) {
        if (void 0 === this.url_) return null;
        e = this.findNearestResolution(e), r = this.hidpi_ ? r : 1;
        var i = this.image_;
        if (i && this.renderedRevision_ == this.getRevision() && i.getResolution() == e && i.getPixelRatio() == r && te(i.getExtent(), t)) return i;
        var o = {F: "image", FORMAT: "PNG32", TRANSPARENT: !0};
        O(o, this.params_);
        var a = ((t = t.slice())[0] + t[2]) / 2, s = (t[1] + t[3]) / 2;
        if (1 != this.ratio_) {
          var l = this.ratio_ * Pe(t) / 2, u = this.ratio_ * Ee(t) / 2;
          t[0] = a - l, t[1] = s - u, t[2] = a + l, t[3] = s + u
        }
        var c = e / r, h = Math.ceil(Pe(t) / c), p = Math.ceil(Ee(t) / c);
        t[0] = a - c * h / 2, t[2] = a + c * h / 2, t[1] = s - c * p / 2, t[3] = s + c * p / 2, this.imageSize_[0] = h, this.imageSize_[1] = p;
        var f = this.getRequestUrl_(t, this.imageSize_, r, n, o);
        return this.image_ = new Ki(t, e, r, f, this.crossOrigin_, this.imageLoadFunction_), this.renderedRevision_ = this.getRevision(), this.image_.addEventListener(F, this.handleImageChange.bind(this)), this.image_
      }, e.prototype.getImageLoadFunction = function () {
        return this.imageLoadFunction_
      }, e.prototype.getRequestUrl_ = function (t, e, r, n, i) {
        var o = n.getCode().split(":").pop();
        i.SIZE = e[0] + "," + e[1], i.BBOX = t.join(","), i.BBOXSR = o, i.IMAGESR = o, i.DPI = Math.round(90 * r);
        var a = this.url_,
          s = a.replace(/MapServer\/?$/, "MapServer/export").replace(/ImageServer\/?$/, "ImageServer/exportImage");
        return s == a && pt(!1, 50), mc(s, i)
      }, e.prototype.getUrl = function () {
        return this.url_
      }, e.prototype.setImageLoadFunction = function (t) {
        this.image_ = null, this.imageLoadFunction_ = t, this.changed()
      }, e.prototype.setUrl = function (t) {
        t != this.url_ && (this.url_ = t, this.image_ = null, this.changed())
      }, e.prototype.updateParams = function (t) {
        O(this.params_, t), this.image_ = null, this.changed()
      }, e
    }(zf), Vf = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Yf = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, {
          attributions: n.attributions,
          imageSmoothing: n.imageSmoothing,
          projection: n.projection,
          resolutions: n.resolutions,
          state: n.state
        }) || this).canvasFunction_ = n.canvasFunction, r.canvas_ = null, r.renderedRevision_ = 0, r.ratio_ = void 0 !== n.ratio ? n.ratio : 1.5, r
      }

      return Vf(e, t), e.prototype.getImageInternal = function (t, e, r, n) {
        e = this.findNearestResolution(e);
        var i = this.canvas_;
        if (i && this.renderedRevision_ == this.getRevision() && i.getResolution() == e && i.getPixelRatio() == r && te(i.getExtent(), t)) return i;
        Me(t = t.slice(), this.ratio_);
        var o = [Pe(t) / e * r, Ee(t) / e * r], a = this.canvasFunction_.call(this, t, e, r, o, n);
        return a && (i = new $i(t, e, r, a)), this.canvas_ = i, this.renderedRevision_ = this.getRevision(), i
      }, e
    }(zf), Wf = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();
    var qf = function (t) {
        function e(e) {
          var r = t.call(this, {
            imageSmoothing: e.imageSmoothing,
            projection: e.projection,
            resolutions: e.resolutions
          }) || this;
          return r.crossOrigin_ = void 0 !== e.crossOrigin ? e.crossOrigin : null, r.displayDpi_ = void 0 !== e.displayDpi ? e.displayDpi : 96, r.params_ = e.params || {}, r.url_ = e.url, r.imageLoadFunction_ = void 0 !== e.imageLoadFunction ? e.imageLoadFunction : Gf, r.hidpi_ = void 0 === e.hidpi || e.hidpi, r.metersPerUnit_ = void 0 !== e.metersPerUnit ? e.metersPerUnit : 1, r.ratio_ = void 0 !== e.ratio ? e.ratio : 1, r.useOverlay_ = void 0 !== e.useOverlay && e.useOverlay, r.image_ = null, r.renderedRevision_ = 0, r
        }

        return Wf(e, t), e.prototype.getParams = function () {
          return this.params_
        }, e.prototype.getImageInternal = function (t, e, r, n) {
          e = this.findNearestResolution(e), r = this.hidpi_ ? r : 1;
          var i = this.image_;
          if (i && this.renderedRevision_ == this.getRevision() && i.getResolution() == e && i.getPixelRatio() == r && te(i.getExtent(), t)) return i;
          1 != this.ratio_ && Me(t = t.slice(), this.ratio_);
          var o = [Pe(t) / e * r, Ee(t) / e * r];
          if (void 0 !== this.url_) {
            var a = this.getUrl(this.url_, this.params_, t, o, n);
            (i = new Ki(t, e, r, a, this.crossOrigin_, this.imageLoadFunction_)).addEventListener(F, this.handleImageChange.bind(this))
          } else i = null;
          return this.image_ = i, this.renderedRevision_ = this.getRevision(), i
        }, e.prototype.getImageLoadFunction = function () {
          return this.imageLoadFunction_
        }, e.prototype.updateParams = function (t) {
          O(this.params_, t), this.changed()
        }, e.prototype.getUrl = function (t, e, r, n, i) {
          var o = function (t, e, r, n) {
            var i = Pe(t), o = Ee(t), a = e[0], s = e[1], l = .0254 / n;
            return s * i > a * o ? i * r / (a * l) : o * r / (s * l)
          }(r, n, this.metersPerUnit_, this.displayDpi_), a = xe(r), s = {
            OPERATION: this.useOverlay_ ? "GETDYNAMICMAPOVERLAYIMAGE" : "GETMAPIMAGE",
            VERSION: "2.0.0",
            LOCALE: "en",
            CLIENTAGENT: "ol/source/ImageMapGuide source",
            CLIP: "1",
            SETDISPLAYDPI: this.displayDpi_,
            SETDISPLAYWIDTH: Math.round(n[0]),
            SETDISPLAYHEIGHT: Math.round(n[1]),
            SETVIEWSCALE: o,
            SETVIEWCENTERX: a[0],
            SETVIEWCENTERY: a[1]
          };
          return O(s, e), mc(t, s)
        }, e.prototype.setImageLoadFunction = function (t) {
          this.image_ = null, this.imageLoadFunction_ = t, this.changed()
        }, e
      }(zf), Xf = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Zf = function (t) {
        function e(e) {
          var r = this, n = void 0 !== e.crossOrigin ? e.crossOrigin : null,
            i = void 0 !== e.imageLoadFunction ? e.imageLoadFunction : Gf;
          return (r = t.call(this, {
            attributions: e.attributions,
            imageSmoothing: e.imageSmoothing,
            projection: Gr(e.projection)
          }) || this).url_ = e.url, r.imageExtent_ = e.imageExtent, r.image_ = new Ki(r.imageExtent_, void 0, 1, r.url_, n, i), r.imageSize_ = e.imageSize ? e.imageSize : null, r.image_.addEventListener(F, r.handleImageChange.bind(r)), r
        }

        return Xf(e, t), e.prototype.getImageExtent = function () {
          return this.imageExtent_
        }, e.prototype.getImageInternal = function (t, e, r, n) {
          return Re(t, this.image_.getExtent()) ? this.image_ : null
        }, e.prototype.getUrl = function () {
          return this.url_
        }, e.prototype.handleImageChange = function (e) {
          if (this.image_.getState() == ki) {
            var r = this.image_.getExtent(), n = this.image_.getImage(), i = void 0, o = void 0;
            this.imageSize_ ? (i = this.imageSize_[0], o = this.imageSize_[1]) : (i = n.width, o = n.height);
            var a = Ee(r) / o, s = Math.ceil(Pe(r) / a);
            if (s != i) {
              var l = uo(s, o);
              O(l, this.getContextOptions());
              var u = l.canvas;
              l.drawImage(n, 0, 0, i, o, 0, 0, u.width, u.height), this.image_.setImage(u)
            }
          }
          t.prototype.handleImageChange.call(this, e)
        }, e
      }(zf), Kf = "carmentaserver", Hf = "geoserver", $f = "mapserver", Jf = "qgis", Qf = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), td = [101, 101], ed = function (t) {
        function e(e) {
          var r = this, n = e || {};
          return (r = t.call(this, {
            attributions: n.attributions,
            imageSmoothing: n.imageSmoothing,
            projection: n.projection,
            resolutions: n.resolutions
          }) || this).crossOrigin_ = void 0 !== n.crossOrigin ? n.crossOrigin : null, r.url_ = n.url, r.imageLoadFunction_ = void 0 !== n.imageLoadFunction ? n.imageLoadFunction : Gf, r.params_ = n.params || {}, r.v13_ = !0, r.updateV13_(), r.serverType_ = n.serverType, r.hidpi_ = void 0 === n.hidpi || n.hidpi, r.image_ = null, r.imageSize_ = [0, 0], r.renderedRevision_ = 0, r.ratio_ = void 0 !== n.ratio ? n.ratio : 1.5, r
        }

        return Qf(e, t), e.prototype.getFeatureInfoUrl = function (t, e, r, n) {
          if (void 0 !== this.url_) {
            var i = Gr(r), o = this.getProjection();
            o && o !== i && (e = tc(o, i, t, e), t = Hr(t, i, o));
            var a = Se(t, e, 0, td), s = {
              SERVICE: "WMS",
              VERSION: "1.3.0",
              REQUEST: "GetFeatureInfo",
              FORMAT: "image/png",
              TRANSPARENT: !0,
              QUERY_LAYERS: this.params_.LAYERS
            };
            O(s, this.params_, n);
            var l = Math.floor((t[0] - a[0]) / e), u = Math.floor((a[3] - t[1]) / e);
            return s[this.v13_ ? "I" : "X"] = l, s[this.v13_ ? "J" : "Y"] = u, this.getRequestUrl_(a, td, 1, o || i, s)
          }
        }, e.prototype.getLegendUrl = function (t, e) {
          if (void 0 !== this.url_) {
            var r = {SERVICE: "WMS", VERSION: "1.3.0", REQUEST: "GetLegendGraphic", FORMAT: "image/png"};
            if (void 0 === e || void 0 === e.LAYER) {
              var n = this.params_.LAYERS;
              if (!(!Array.isArray(n) || 1 === n.length)) return;
              r.LAYER = n
            }
            if (void 0 !== t) {
              var i = this.getProjection() ? this.getProjection().getMetersPerUnit() : 1;
              r.SCALE = t * i / 28e-5
            }
            return O(r, e), mc(this.url_, r)
          }
        }, e.prototype.getParams = function () {
          return this.params_
        }, e.prototype.getImageInternal = function (t, e, r, n) {
          if (void 0 === this.url_) return null;
          e = this.findNearestResolution(e), 1 == r || this.hidpi_ && void 0 !== this.serverType_ || (r = 1);
          var i = e / r, o = xe(t), a = Se(o, i, 0, [Math.ceil(Pe(t) / i), Math.ceil(Ee(t) / i)]),
            s = Se(o, i, 0, [Math.ceil(this.ratio_ * Pe(t) / i), Math.ceil(this.ratio_ * Ee(t) / i)]), l = this.image_;
          if (l && this.renderedRevision_ == this.getRevision() && l.getResolution() == e && l.getPixelRatio() == r && te(l.getExtent(), a)) return l;
          var u = {SERVICE: "WMS", VERSION: "1.3.0", REQUEST: "GetMap", FORMAT: "image/png", TRANSPARENT: !0};
          O(u, this.params_), this.imageSize_[0] = Math.round(Pe(s) / i), this.imageSize_[1] = Math.round(Ee(s) / i);
          var c = this.getRequestUrl_(s, this.imageSize_, r, n, u);
          return this.image_ = new Ki(s, e, r, c, this.crossOrigin_, this.imageLoadFunction_), this.renderedRevision_ = this.getRevision(), this.image_.addEventListener(F, this.handleImageChange.bind(this)), this.image_
        }, e.prototype.getImageLoadFunction = function () {
          return this.imageLoadFunction_
        }, e.prototype.getRequestUrl_ = function (t, e, r, n, i) {
          if (pt(void 0 !== this.url_, 9), i[this.v13_ ? "CRS" : "SRS"] = n.getCode(), "STYLES" in this.params_ || (i.STYLES = ""), 1 != r) switch (this.serverType_) {
            case Hf:
              var o = 90 * r + .5 | 0;
              "FORMAT_OPTIONS" in i ? i.FORMAT_OPTIONS += ";dpi:" + o : i.FORMAT_OPTIONS = "dpi:" + o;
              break;
            case $f:
              i.MAP_RESOLUTION = 90 * r;
              break;
            case Kf:
            case Jf:
              i.DPI = 90 * r;
              break;
            default:
              pt(!1, 8)
          }
          i.WIDTH = e[0], i.HEIGHT = e[1];
          var a, s = n.getAxisOrientation();
          return a = this.v13_ && "ne" == s.substr(0, 2) ? [t[1], t[0], t[3], t[2]] : t, i.BBOX = a.join(","), mc(this.url_, i)
        }, e.prototype.getUrl = function () {
          return this.url_
        }, e.prototype.setImageLoadFunction = function (t) {
          this.image_ = null, this.imageLoadFunction_ = t, this.changed()
        }, e.prototype.setUrl = function (t) {
          t != this.url_ && (this.url_ = t, this.image_ = null, this.changed())
        }, e.prototype.updateParams = function (t) {
          O(this.params_, t), this.updateV13_(), this.image_ = null, this.changed()
        }, e.prototype.updateV13_ = function () {
          var t = this.params_.VERSION || "1.3.0";
          this.v13_ = br(t, "1.3") >= 0
        }, e
      }(zf), rd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(),
      nd = '&#169; <a href="https://www.openstreetmap.org/copyright" target="_blank">OpenStreetMap</a> contributors.',
      id = function (t) {
        function e(e) {
          var r, n = e || {};
          r = void 0 !== n.attributions ? n.attributions : [nd];
          var i = void 0 !== n.crossOrigin ? n.crossOrigin : "anonymous",
            o = void 0 !== n.url ? n.url : "https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";
          return t.call(this, {
            attributions: r,
            attributionsCollapsible: !1,
            cacheSize: n.cacheSize,
            crossOrigin: i,
            imageSmoothing: n.imageSmoothing,
            maxZoom: void 0 !== n.maxZoom ? n.maxZoom : 19,
            opaque: void 0 === n.opaque || n.opaque,
            reprojectionErrorThreshold: n.reprojectionErrorThreshold,
            tileLoadFunction: n.tileLoadFunction,
            transition: n.transition,
            url: o,
            wrapX: n.wrapX
          }) || this
        }

        return rd(e, t), e
      }(Jp), od = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ad = function (t) {
        function e(e) {
          var r = e || {};
          return t.call(this, r) || this
        }

        return od(e, t), e
      }(na), sd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ld = function (t) {
        function e(e) {
          var r = t.call(this) || this;
          return r.boundHandleImageChange_ = r.handleImageChange_.bind(r), r.layer_ = e, r.declutterExecutorGroup = null, r
        }

        return sd(e, t), e.prototype.getFeatures = function (t) {
          return n()
        }, e.prototype.prepareFrame = function (t) {
          return n()
        }, e.prototype.renderFrame = function (t, e) {
          return n()
        }, e.prototype.loadedTileCallback = function (t, e, r) {
          t[e] || (t[e] = {}), t[e][r.tileCoord.toString()] = r
        }, e.prototype.createLoadedTileFinder = function (t, e, r) {
          return function (n, i) {
            var o = this.loadedTileCallback.bind(this, r, n);
            return t.forEachLoadedTile(e, n, i, o)
          }.bind(this)
        }, e.prototype.forEachFeatureAtCoordinate = function (t, e, r, n, i) {
        }, e.prototype.getDataAtPixel = function (t, e, r) {
          return n()
        }, e.prototype.getLayer = function () {
          return this.layer_
        }, e.prototype.handleFontsChanged = function () {
        }, e.prototype.handleImageChange_ = function (t) {
          t.target.getState() === ki && this.renderIfReadyAndVisible()
        }, e.prototype.loadImage = function (t) {
          var e = t.getState();
          return e != ki && e != ji && t.addEventListener(F, this.boundHandleImageChange_), e == Fi && (t.load(), e = t.getState()), e == ki
        }, e.prototype.renderIfReadyAndVisible = function () {
          var t = this.getLayer();
          t.getVisible() && t.getSourceState() == Qo && t.changed()
        }, e
      }(Q), ud = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), cd = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          return r.container = null, r.renderedResolution, r.tempTransform = [1, 0, 0, 1, 0, 0], r.pixelTransform = [1, 0, 0, 1, 0, 0], r.inversePixelTransform = [1, 0, 0, 1, 0, 0], r.context = null, r.containerReused = !1, r
        }

        return ud(e, t), e.prototype.useContainer = function (t, e, r) {
          var n, i, o = this.getLayer().getClassName();
          t && "" === t.style.opacity && t.className === o && ((s = t.firstElementChild) instanceof HTMLCanvasElement && (i = s.getContext("2d")));
          if (!i || 0 !== i.canvas.width && i.canvas.style.transform !== e ? this.containerReused && (this.container = null, this.context = null, this.containerReused = !1) : (this.container = t, this.context = i, this.containerReused = !0), !this.container) {
            (n = document.createElement("div")).className = o;
            var a = n.style;
            a.position = "absolute", a.width = "100%", a.height = "100%";
            var s = (i = uo()).canvas;
            n.appendChild(s), (a = s.style).position = "absolute", a.left = "0", a.transformOrigin = "top left", this.container = n, this.context = i
          }
        }, e.prototype.clip = function (t, e, r) {
          var n = e.pixelRatio, i = e.size[0] * n / 2, o = e.size[1] * n / 2, a = e.viewState.rotation, s = Ce(r),
            l = Oe(r), u = be(r), c = _e(r);
          It(e.coordinateToPixelTransform, s), It(e.coordinateToPixelTransform, l), It(e.coordinateToPixelTransform, u), It(e.coordinateToPixelTransform, c), t.save(), Ca(t, -a, i, o), t.beginPath(), t.moveTo(s[0] * n, s[1] * n), t.lineTo(l[0] * n, l[1] * n), t.lineTo(u[0] * n, u[1] * n), t.lineTo(c[0] * n, c[1] * n), t.clip(), Ca(t, a, i, o)
        }, e.prototype.clipUnrotated = function (t, e, r) {
          var n = Ce(r), i = Oe(r), o = be(r), a = _e(r);
          It(e.coordinateToPixelTransform, n), It(e.coordinateToPixelTransform, i), It(e.coordinateToPixelTransform, o), It(e.coordinateToPixelTransform, a);
          var s = this.inversePixelTransform;
          It(s, n), It(s, i), It(s, o), It(s, a), t.save(), t.beginPath(), t.moveTo(Math.round(n[0]), Math.round(n[1])), t.lineTo(Math.round(i[0]), Math.round(i[1])), t.lineTo(Math.round(o[0]), Math.round(o[1])), t.lineTo(Math.round(a[0]), Math.round(a[1])), t.clip()
        }, e.prototype.dispatchRenderEvent_ = function (t, e, r) {
          var n = this.getLayer();
          if (n.hasListener(t)) {
            var i = new la(t, this.inversePixelTransform, r, e);
            n.dispatchEvent(i)
          }
        }, e.prototype.preRender = function (t, e) {
          this.dispatchRenderEvent_(qo, t, e)
        }, e.prototype.postRender = function (t, e) {
          this.dispatchRenderEvent_(Xo, t, e)
        }, e.prototype.getRenderTransform = function (t, e, r, n, i, o, a) {
          var s = i / 2, l = o / 2, u = n / e, c = -u, h = -t[0] + a, p = -t[1];
          return kt(this.tempTransform, s, l, u, c, -r, h, p)
        }, e.prototype.getDataAtPixel = function (t, e, r) {
          var n, i = It(this.inversePixelTransform, t.slice()), o = this.context, a = this.getLayer().getExtent();
          if (a && !Qt(a, It(e.pixelToCoordinateTransform, t.slice()))) return null;
          try {
            var s = Math.round(i[0]), l = Math.round(i[1]), u = document.createElement("canvas"), c = u.getContext("2d");
            u.width = 1, u.height = 1, c.clearRect(0, 0, 1, 1), c.drawImage(o.canvas, s, l, 1, 1, 0, 0, 1, 1), n = c.getImageData(0, 0, 1, 1).data
          } catch (t) {
            return "SecurityError" === t.name ? new Uint8Array : n
          }
          return 0 === n[3] ? null : n
        }, e
      }(ld), hd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), pd = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          return r.image_ = null, r
        }

        return hd(e, t), e.prototype.getImage = function () {
          return this.image_ ? this.image_.getImage() : null
        }, e.prototype.prepareFrame = function (t) {
          var e = t.layerStatesArray[t.layerIndex], r = t.pixelRatio, n = t.viewState, i = n.resolution,
            o = this.getLayer().getSource(), a = t.viewHints, s = t.extent;
          if (void 0 !== e.extent && (s = Te(s, on(e.extent, n.projection))), !a[ns] && !a[is] && !Ie(s)) if (o) {
            var l = n.projection, u = o.getImage(s, i, r, l);
            u && this.loadImage(u) && (this.image_ = u)
          } else this.image_ = null;
          return !!this.image_
        }, e.prototype.renderFrame = function (t, e) {
          var r = this.image_, n = r.getExtent(), i = r.getResolution(), o = r.getPixelRatio(),
            a = t.layerStatesArray[t.layerIndex], s = t.pixelRatio, l = t.viewState, u = l.center, c = l.resolution,
            h = t.size, p = s * i / (c * o), f = Math.round(h[0] * s), d = Math.round(h[1] * s), g = l.rotation;
          if (g) {
            var y = Math.round(Math.sqrt(f * f + d * d));
            f = y, d = y
          }
          kt(this.pixelTransform, t.size[0] / 2, t.size[1] / 2, 1 / s, 1 / s, g, -f / 2, -d / 2), jt(this.inversePixelTransform, this.pixelTransform);
          var m = Ra(this.pixelTransform);
          this.useContainer(e, m, a.opacity);
          var v = this.context, _ = v.canvas;
          _.width != f || _.height != d ? (_.width = f, _.height = d) : this.containerReused || v.clearRect(0, 0, f, d);
          var b = !1;
          if (a.extent) {
            var x = on(a.extent, l.projection);
            (b = !te(x, t.extent) && Re(x, t.extent)) && this.clipUnrotated(v, t, x)
          }
          var w = r.getImage(),
            S = kt(this.tempTransform, f / 2, d / 2, p, p, 0, o * (n[0] - u[0]) / i, o * (u[1] - n[3]) / i);
          this.renderedResolution = i * s / o;
          var E = S[4], T = S[5], C = w.width * S[0], P = w.height * S[3];
          if (O(v, this.getLayer().getSource().getContextOptions()), this.preRender(v, t), C >= .5 && P >= .5) {
            var R = a.opacity, I = void 0;
            1 !== R && (I = this.context.globalAlpha, this.context.globalAlpha = R), this.context.drawImage(w, 0, 0, +w.width, +w.height, Math.round(E), Math.round(T), Math.round(C), Math.round(P)), 1 !== R && (this.context.globalAlpha = I)
          }
          return this.postRender(v, t), b && v.restore(), m !== _.style.transform && (_.style.transform = m), this.container
        }, e
      }(cd), fd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), dd = function (t) {
        function e(e) {
          return t.call(this, e) || this
        }

        return fd(e, t), e.prototype.createRenderer = function () {
          return new pd(this)
        }, e
      }(ad), gd = "preload", yd = "useInterimTilesOnError", md = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), vd = function (t) {
        function e(e) {
          var r = this, n = e || {}, i = O({}, n);
          return delete i.preload, delete i.useInterimTilesOnError, (r = t.call(this, i) || this).setPreload(void 0 !== n.preload ? n.preload : 0), r.setUseInterimTilesOnError(void 0 === n.useInterimTilesOnError || n.useInterimTilesOnError), r
        }

        return md(e, t), e.prototype.getPreload = function () {
          return this.get(gd)
        }, e.prototype.setPreload = function (t) {
          this.set(gd, t)
        }, e.prototype.getUseInterimTilesOnError = function () {
          return this.get(yd)
        }, e.prototype.setUseInterimTilesOnError = function (t) {
          this.set(yd, t)
        }, e
      }(na), _d = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), bd = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          return r.extentChanged = !0, r.renderedExtent_ = null, r.renderedPixelRatio, r.renderedProjection = null, r.renderedRevision, r.renderedTiles = [], r.newTiles_ = !1, r.tmpExtent = [1 / 0, 1 / 0, -1 / 0, -1 / 0], r.tmpTileRange_ = new _u(0, 0, 0, 0), r
        }

        return _d(e, t), e.prototype.isDrawableTile = function (t) {
          var e = this.getLayer(), r = t.getState(), n = e.getUseInterimTilesOnError();
          return r == to || r == ro || r == eo && !n
        }, e.prototype.getTile = function (t, e, r, n) {
          var i = n.pixelRatio, o = n.viewState.projection, a = this.getLayer(), s = a.getSource().getTile(t, e, r, i, o);
          return s.getState() == eo && (a.getUseInterimTilesOnError() ? a.getPreload() > 0 && (this.newTiles_ = !0) : s.setState(to)), this.isDrawableTile(s) || (s = s.getInterimTile()), s
        }, e.prototype.loadedTileCallback = function (e, r, n) {
          return !!this.isDrawableTile(n) && t.prototype.loadedTileCallback.call(this, e, r, n)
        }, e.prototype.prepareFrame = function (t) {
          return !!this.getLayer().getSource()
        }, e.prototype.renderFrame = function (t, e) {
          var r = t.layerStatesArray[t.layerIndex], n = t.viewState, i = n.projection, a = n.resolution, s = n.center,
            l = n.rotation, u = t.pixelRatio, c = this.getLayer(), h = c.getSource(), p = h.getRevision(),
            f = h.getTileGridForProjection(i), g = f.getZForResolution(a, h.zDirection), y = f.getResolution(g),
            m = t.extent, v = r.extent && on(r.extent, i);
          v && (m = Te(m, on(r.extent, i)));
          var _ = h.getTilePixelRatio(u), b = Math.round(t.size[0] * _), x = Math.round(t.size[1] * _);
          if (l) {
            var w = Math.round(Math.sqrt(b * b + x * x));
            b = w, x = w
          }
          var S = y * b / 2 / _, E = y * x / 2 / _, T = [s[0] - S, s[1] - E, s[0] + S, s[1] + E],
            C = f.getTileRangeForExtentAndZ(m, g), P = {};
          P[g] = {};
          var R = this.createLoadedTileFinder(h, i, P), I = this.tmpExtent, L = this.tmpTileRange_;
          this.newTiles_ = !1;
          for (var M = C.minX; M <= C.maxX; ++M) for (var F = C.minY; F <= C.maxY; ++F) {
            var A = this.getTile(g, M, F, t);
            if (this.isDrawableTile(A)) {
              var k = o(this);
              if (A.getState() == to) {
                P[g][A.tileCoord.toString()] = A;
                var j = A.inTransition(k);
                this.newTiles_ || !j && -1 !== this.renderedTiles.indexOf(A) || (this.newTiles_ = !0)
              }
              if (1 === A.getAlpha(k, t.time)) continue
            }
            var N = f.getTileCoordChildTileRange(A.tileCoord, L, I), D = !1;
            N && (D = R(g + 1, N)), D || f.forEachTileCoordParentTileRange(A.tileCoord, R, L, I)
          }
          var G = y / a;
          kt(this.pixelTransform, t.size[0] / 2, t.size[1] / 2, 1 / _, 1 / _, l, -b / 2, -x / 2);
          var z = Ra(this.pixelTransform);
          this.useContainer(e, z, r.opacity);
          var U = this.context, B = U.canvas;
          jt(this.inversePixelTransform, this.pixelTransform), kt(this.tempTransform, b / 2, x / 2, G, G, 0, -b / 2, -x / 2), B.width != b || B.height != x ? (B.width = b, B.height = x) : this.containerReused || U.clearRect(0, 0, b, x), v && this.clipUnrotated(U, t, v), O(U, h.getContextOptions()), this.preRender(U, t), this.renderedTiles.length = 0;
          var V, Y, W, q = Object.keys(P).map(Number);
          q.sort(d), 1 !== r.opacity || this.containerReused && !h.getOpaque(t.viewState.projection) ? (V = [], Y = []) : q = q.reverse();
          for (var X = q.length - 1; X >= 0; --X) {
            var Z = q[X], K = h.getTilePixelSize(Z, u, i), H = f.getResolution(Z) / y, $ = K[0] * H * G, J = K[1] * H * G,
              Q = f.getTileCoordForCoordAndZ(Ce(T), Z), tt = f.getTileCoordExtent(Q),
              et = It(this.tempTransform, [_ * (tt[0] - T[0]) / y, _ * (T[3] - tt[3]) / y]),
              rt = _ * h.getGutterForProjection(i), nt = P[Z];
            for (var it in nt) {
              var ot = (A = nt[it]).tileCoord, at = et[0] - (Q[1] - ot[1]) * $, st = Math.round(at + $),
                lt = et[1] - (Q[2] - ot[2]) * J, ut = Math.round(lt + J), ct = st - (M = Math.round(at)),
                ht = ut - (F = Math.round(lt)), pt = g === Z;
              if (!(j = pt && 1 !== A.getAlpha(o(this), t.time))) if (V) {
                U.save(), W = [M, F, M + ct, F, M + ct, F + ht, M, F + ht];
                for (var ft = 0, dt = V.length; ft < dt; ++ft) if (g !== Z && Z < Y[ft]) {
                  var gt = V[ft];
                  U.beginPath(), U.moveTo(W[0], W[1]), U.lineTo(W[2], W[3]), U.lineTo(W[4], W[5]), U.lineTo(W[6], W[7]), U.moveTo(gt[6], gt[7]), U.lineTo(gt[4], gt[5]), U.lineTo(gt[2], gt[3]), U.lineTo(gt[0], gt[1]), U.clip()
                }
                V.push(W), Y.push(Z)
              } else U.clearRect(M, F, ct, ht);
              this.drawTileImage(A, t, M, F, ct, ht, rt, pt, r.opacity), V && !j && U.restore(), this.renderedTiles.push(A), this.updateUsedTiles(t.usedTiles, h, A)
            }
          }
          return this.renderedRevision = p, this.renderedResolution = y, this.extentChanged = !this.renderedExtent_ || !ue(this.renderedExtent_, T), this.renderedExtent_ = T, this.renderedPixelRatio = u, this.renderedProjection = i, this.manageTilePyramid(t, h, f, u, i, m, g, c.getPreload()), this.scheduleExpireCache(t, h), this.postRender(U, t), r.extent && U.restore(), z !== B.style.transform && (B.style.transform = z), this.container
        }, e.prototype.drawTileImage = function (t, e, r, n, i, a, s, l, u) {
          var c = this.getTileImage(t);
          if (c) {
            var h = o(this), p = l ? t.getAlpha(h, e.time) : 1, f = u * p, d = f !== this.context.globalAlpha;
            d && (this.context.save(), this.context.globalAlpha = f), this.context.drawImage(c, s, s, c.width - 2 * s, c.height - 2 * s, r, n, i, a), d && this.context.restore(), 1 !== p ? e.animate = !0 : l && t.endTransition(h)
          }
        }, e.prototype.getImage = function () {
          var t = this.context;
          return t ? t.canvas : null
        }, e.prototype.getTileImage = function (t) {
          return t.getImage()
        }, e.prototype.scheduleExpireCache = function (t, e) {
          if (e.canExpireCache()) {
            var r = function (t, e, r) {
              var n = o(t);
              n in r.usedTiles && t.expireCache(r.viewState.projection, r.usedTiles[n])
            }.bind(null, e);
            t.postRenderFunctions.push(r)
          }
        }, e.prototype.updateUsedTiles = function (t, e, r) {
          var n = o(e);
          n in t || (t[n] = {}), t[n][r.getKey()] = !0
        }, e.prototype.manageTilePyramid = function (t, e, r, n, i, a, s, l, u) {
          var c = o(e);
          c in t.wantedTiles || (t.wantedTiles[c] = {});
          var h, p, f, d, g, y, m = t.wantedTiles[c], v = t.tileQueue, _ = 0;
          for (y = r.getMinZoom(); y <= s; ++y) for (p = r.getTileRangeForExtentAndZ(a, y, p), f = r.getResolution(y), d = p.minX; d <= p.maxX; ++d) for (g = p.minY; g <= p.maxY; ++g) s - y <= l ? (++_, (h = e.getTile(y, d, g, n, i)).getState() == Ji && (m[h.getKey()] = !0, v.isKeyQueued(h.getKey()) || v.enqueue([h, c, r.getTileCoordCenter(h.tileCoord), f])), void 0 !== u && u(h)) : e.useTile(y, d, g, i);
          e.updateCacheSize(_, i)
        }, e
      }(cd);
    bd.prototype.getLayer;
    var xd = bd, wd = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Sd = function (t) {
      function e(e) {
        return t.call(this, e) || this
      }

      return wd(e, t), e.prototype.createRenderer = function () {
        return new xd(this)
      }, e
    }(vd), Ed = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Td = !0;
    try {
      new ImageData(10, 10)
    } catch (t) {
      Td = !1
    }
    var Cd = document.createElement("canvas").getContext("2d");

    function Od(t, e, r) {
      if (Td) return new ImageData(t, e, r);
      var n = Cd.createImageData(e, r);
      return n.data.set(t), n
    }

    function Pd(t) {
      var e = !0;
      try {
        new ImageData(10, 10)
      } catch (t) {
        e = !1
      }

      function r(t, r, n) {
        return e ? new ImageData(t, r, n) : {data: t, width: r, height: n}
      }

      return function (e) {
        var n, i, o = e.buffers, a = e.meta, s = e.imageOps, l = e.width, u = e.height, c = o.length,
          h = o[0].byteLength;
        if (s) {
          var p = new Array(c);
          for (i = 0; i < c; ++i) p[i] = r(new Uint8ClampedArray(o[i]), l, u);
          n = t(p, a).data
        } else {
          n = new Uint8ClampedArray(h);
          var f = new Array(c), d = new Array(c);
          for (i = 0; i < c; ++i) f[i] = new Uint8ClampedArray(o[i]), d[i] = [0, 0, 0, 0];
          for (var g = 0; g < h; g += 4) {
            for (var y = 0; y < c; ++y) {
              var m = f[y];
              d[y][0] = m[g], d[y][1] = m[g + 1], d[y][2] = m[g + 2], d[y][3] = m[g + 3]
            }
            var v = t(d, a);
            n[g] = v[0], n[g + 1] = v[1], n[g + 2] = v[2], n[g + 3] = v[3]
          }
        }
        return n.buffer
      }
    }

    function Rd(t, e) {
      var r = Object.keys(t.lib || {}).map((function (e) {
          return "var " + e + " = " + t.lib[e].toString() + ";"
        })).concat(["var __minion__ = (" + Pd.toString() + ")(", t.operation.toString(), ");", 'self.addEventListener("message", function(event) {', "  var buffer = __minion__(event.data);", "  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);", "});"]),
        n = new Blob(r, {type: "text/javascript"}), i = URL.createObjectURL(n), o = new Worker(i);
      return o.addEventListener("message", e), o
    }

    var Id = function (t) {
      function e(e) {
        var r, n = t.call(this) || this;
        n._imageOps = !!e.imageOps;
        var i = [];
        if (r = 0 === e.threads ? 0 : n._imageOps ? 1 : e.threads || 1) for (var o = 0; o < r; ++o) i[o] = Rd(e, n._onWorkerMessage.bind(n, o)); else i[0] = function (t, e) {
          var r = Pd(t.operation), n = !1;
          return {
            postMessage: function (t) {
              setTimeout((function () {
                n || e({data: {buffer: r(t), meta: t.meta}})
              }), 0)
            }, terminate: function () {
              n = !0
            }
          }
        }(e, n._onWorkerMessage.bind(n, 0));
        return n._workers = i, n._queue = [], n._maxQueueLength = e.queue || 1 / 0, n._running = 0, n._dataLookup = {}, n._job = null, n
      }

      return Ed(e, t), e.prototype.process = function (t, e, r) {
        this._enqueue({inputs: t, meta: e, callback: r}), this._dispatch()
      }, e.prototype._enqueue = function (t) {
        for (this._queue.push(t); this._queue.length > this._maxQueueLength;) this._queue.shift().callback(null, null)
      }, e.prototype._dispatch = function () {
        if (0 === this._running && this._queue.length > 0) {
          var t = this._queue.shift();
          this._job = t;
          var e = t.inputs[0].width, r = t.inputs[0].height, n = t.inputs.map((function (t) {
            return t.data.buffer
          })), i = this._workers.length;
          if (this._running = i, 1 === i) this._workers[0].postMessage({
            buffers: n,
            meta: t.meta,
            imageOps: this._imageOps,
            width: e,
            height: r
          }, n); else for (var o = t.inputs[0].data.length, a = 4 * Math.ceil(o / 4 / i), s = 0; s < i; ++s) {
            for (var l = s * a, u = [], c = 0, h = n.length; c < h; ++c) u.push(n[c].slice(l, l + a));
            this._workers[s].postMessage({buffers: u, meta: t.meta, imageOps: this._imageOps, width: e, height: r}, u)
          }
        }
      }, e.prototype._onWorkerMessage = function (t, e) {
        this.disposed || (this._dataLookup[t] = e.data, --this._running, 0 === this._running && this._resolveJob())
      }, e.prototype._resolveJob = function () {
        var t, e, r = this._job, n = this._workers.length;
        if (1 === n) t = new Uint8ClampedArray(this._dataLookup[0].buffer), e = this._dataLookup[0].meta; else {
          var i = r.inputs[0].data.length;
          t = new Uint8ClampedArray(i), e = new Array(i);
          for (var o = 4 * Math.ceil(i / 4 / n), a = 0; a < n; ++a) {
            var s = this._dataLookup[a].buffer, l = a * o;
            t.set(new Uint8ClampedArray(s), l), e[a] = this._dataLookup[a].meta
          }
        }
        this._job = null, this._dataLookup = {}, r.callback(null, Od(t, r.inputs[0].width, r.inputs[0].height), e), this._dispatch()
      }, e.prototype.disposeInternal = function () {
        for (var t = 0; t < this._workers.length; ++t) this._workers[t].terminate();
        this._workers.length = 0
      }, e
    }(p), Ld = "beforeoperations", Md = "afteroperations", Fd = "pixel", Ad = "image", kd = function (t) {
      function e(e, r, n) {
        var i = t.call(this, e) || this;
        return i.extent = r.extent, i.resolution = r.viewState.resolution / r.pixelRatio, i.data = n, i
      }

      return Ed(e, t), e
    }(c), jd = function (t) {
      function e(e) {
        var r = t.call(this, {projection: null}) || this;
        r.processor_ = null, r.operationType_ = void 0 !== e.operationType ? e.operationType : Fd, r.threads_ = void 0 !== e.threads ? e.threads : 1, r.layers_ = function (t) {
          for (var e = t.length, r = new Array(e), n = 0; n < e; ++n) r[n] = Gd(t[n]);
          return r
        }(e.sources);
        for (var n, i = r.changed.bind(r), o = 0, a = r.layers_.length; o < a; ++o) r.layers_[o].addEventListener(F, i);
        return r.tileQueue_ = new es((function () {
          return 1
        }), r.changed.bind(r)), r.requestedFrameState_, r.renderedImageCanvas_ = null, r.renderedRevision_, r.frameState_ = {
          animate: !1,
          coordinateToPixelTransform: [1, 0, 0, 1, 0, 0],
          declutterTree: null,
          extent: null,
          index: 0,
          layerIndex: 0,
          layerStatesArray: (n = r.layers_, n.map((function (t) {
            return t.getLayerState()
          }))),
          pixelRatio: 1,
          pixelToCoordinateTransform: [1, 0, 0, 1, 0, 0],
          postRenderFunctions: [],
          size: [0, 0],
          tileQueue: r.tileQueue_,
          time: Date.now(),
          usedTiles: {},
          viewState: {rotation: 0},
          viewHints: [],
          wantedTiles: {}
        }, r.setAttributions((function (t) {
          for (var r = [], n = 0, i = e.sources.length; n < i; ++n) {
            var o = e.sources[n], a = (o instanceof Dp ? o : o.getSource()).getAttributions();
            if ("function" == typeof a) {
              var s = a(t);
              r.push.apply(r, s)
            }
          }
          return 0 !== r.length ? r : null
        })), void 0 !== e.operation && r.setOperation(e.operation, e.lib), r
      }

      return Ed(e, t), e.prototype.setOperation = function (t, e) {
        this.processor_ && this.processor_.dispose(), this.processor_ = new Id({
          operation: t,
          imageOps: this.operationType_ === Ad,
          queue: 1,
          lib: e,
          threads: this.threads_
        }), this.changed()
      }, e.prototype.updateFrameState_ = function (t, e, r) {
        var n = O({}, this.frameState_);
        n.viewState = O({}, n.viewState);
        var i = xe(t);
        n.extent = t.slice(), n.size[0] = Math.round(Pe(t) / e), n.size[1] = Math.round(Ee(t) / e), n.time = 1 / 0;
        var o = n.viewState;
        return o.center = i, o.projection = r, o.resolution = e, n
      }, e.prototype.allSourcesReady_ = function () {
        for (var t = !0, e = 0, r = this.layers_.length; e < r; ++e) if (this.layers_[e].getSource().getState() !== Qo) {
          t = !1;
          break
        }
        return t
      }, e.prototype.getImage = function (t, e, r, n) {
        if (!this.allSourcesReady_()) return null;
        var i = this.updateFrameState_(t, e, n);
        if (this.requestedFrameState_ = i, this.renderedImageCanvas_) {
          var o = this.renderedImageCanvas_.getResolution(), a = this.renderedImageCanvas_.getExtent();
          e === o && ue(t, a) || (this.renderedImageCanvas_ = null)
        }
        return this.renderedImageCanvas_ && this.getRevision() === this.renderedRevision_ || this.processSources_(), i.tileQueue.loadMoreTiles(16, 16), i.animate && requestAnimationFrame(this.changed.bind(this)), this.renderedImageCanvas_
      }, e.prototype.processSources_ = function () {
        for (var t = this.requestedFrameState_, e = this.layers_.length, r = new Array(e), n = 0; n < e; ++n) {
          t.layerIndex = n;
          var i = Dd(this.layers_[n], t);
          if (!i) return;
          r[n] = i
        }
        var o = {};
        this.dispatchEvent(new kd(Ld, t, o)), this.processor_.process(r, o, this.onWorkerComplete_.bind(this, t))
      }, e.prototype.onWorkerComplete_ = function (t, e, r, n) {
        if (!e && r) {
          var i = t.extent, o = t.viewState.resolution;
          if (o === this.requestedFrameState_.viewState.resolution && ue(i, this.requestedFrameState_.extent)) {
            var a;
            if (this.renderedImageCanvas_) a = this.renderedImageCanvas_.getImage().getContext("2d"); else a = uo(Math.round(Pe(i) / o), Math.round(Ee(i) / o)), this.renderedImageCanvas_ = new $i(i, o, 1, a.canvas);
            a.putImageData(r, 0, 0), this.changed(), this.renderedRevision_ = this.getRevision(), this.dispatchEvent(new kd(Md, t, n))
          }
        }
      }, e.prototype.getImageInternal = function () {
        return null
      }, e.prototype.disposeInternal = function () {
        this.processor_ && this.processor_.dispose(), t.prototype.disposeInternal.call(this)
      }, e
    }(zf);
    jd.prototype.dispose;
    var Nd = null;

    function Dd(t, e) {
      var r = t.getRenderer();
      if (!r) throw new Error("Unsupported layer type: " + t);
      if (!r.prepareFrame(e)) return null;
      var n = e.size[0], i = e.size[1];
      if (0 === n || 0 === i) return null;
      var o, a = r.renderFrame(e, null);
      if (a && (o = a.firstElementChild), !(o instanceof HTMLCanvasElement)) throw new Error("Unsupported rendered element: " + o);
      if (o.width === n && o.height === i) return o.getContext("2d").getImageData(0, 0, n, i);
      if (Nd) {
        var s = Nd.canvas;
        s.width !== n || s.height !== i ? Nd = uo(n, i) : Nd.clearRect(0, 0, n, i)
      } else Nd = uo(n, i);
      return Nd.drawImage(o, 0, 0, n, i), Nd.getImageData(0, 0, n, i)
    }

    function Gd(t) {
      var e;
      return t instanceof Dp ? t instanceof Bp ? e = new Sd({source: t}) : t instanceof zf && (e = new dd({source: t})) : e = t, e
    }

    var zd = jd, Ud = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(),
      Bd = ['Map tiles by <a href="https://stamen.com/" target="_blank">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC BY 3.0</a>.', nd],
      Vd = {
        terrain: {extension: "jpg", opaque: !0},
        "terrain-background": {extension: "jpg", opaque: !0},
        "terrain-labels": {extension: "png", opaque: !1},
        "terrain-lines": {extension: "png", opaque: !1},
        "toner-background": {extension: "png", opaque: !0},
        toner: {extension: "png", opaque: !0},
        "toner-hybrid": {extension: "png", opaque: !1},
        "toner-labels": {extension: "png", opaque: !1},
        "toner-lines": {extension: "png", opaque: !1},
        "toner-lite": {extension: "png", opaque: !0},
        watercolor: {extension: "jpg", opaque: !0}
      }, Yd = {
        terrain: {minZoom: 0, maxZoom: 18},
        toner: {minZoom: 0, maxZoom: 20},
        watercolor: {minZoom: 0, maxZoom: 18}
      }, Wd = function (t) {
        function e(e) {
          var r = e.layer.indexOf("-"), n = -1 == r ? e.layer : e.layer.slice(0, r), i = Yd[n], o = Vd[e.layer],
            a = void 0 !== e.url ? e.url : "https://stamen-tiles-{a-d}.a.ssl.fastly.net/" + e.layer + "/{z}/{x}/{y}." + o.extension;
          return t.call(this, {
            attributions: Bd,
            cacheSize: e.cacheSize,
            crossOrigin: "anonymous",
            imageSmoothing: e.imageSmoothing,
            maxZoom: null != e.maxZoom ? e.maxZoom : i.maxZoom,
            minZoom: null != e.minZoom ? e.minZoom : i.minZoom,
            opaque: o.opaque,
            reprojectionErrorThreshold: e.reprojectionErrorThreshold,
            tileLoadFunction: e.tileLoadFunction,
            transition: e.transition,
            url: a,
            wrapX: e.wrapX
          }) || this
        }

        return Ud(e, t), e
      }(Jp), qd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Xd = function (t) {
        function e(e) {
          var r = this, n = e || {};
          return (r = t.call(this, {
            attributions: n.attributions,
            cacheSize: n.cacheSize,
            crossOrigin: n.crossOrigin,
            imageSmoothing: n.imageSmoothing,
            projection: n.projection,
            reprojectionErrorThreshold: n.reprojectionErrorThreshold,
            tileGrid: n.tileGrid,
            tileLoadFunction: n.tileLoadFunction,
            url: n.url,
            urls: n.urls,
            wrapX: void 0 === n.wrapX || n.wrapX,
            transition: n.transition
          }) || this).params_ = n.params || {}, r.hidpi_ = void 0 === n.hidpi || n.hidpi, r.tmpExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], r.setKey(r.getKeyForParams_()), r
        }

        return qd(e, t), e.prototype.getKeyForParams_ = function () {
          var t = 0, e = [];
          for (var r in this.params_) e[t++] = r + "-" + this.params_[r];
          return e.join("/")
        }, e.prototype.getParams = function () {
          return this.params_
        }, e.prototype.getRequestUrl_ = function (t, e, r, n, i, o) {
          var a = this.urls;
          if (a) {
            var s, l = i.getCode().split(":").pop();
            if (o.SIZE = e[0] + "," + e[1], o.BBOX = r.join(","), o.BBOXSR = l, o.IMAGESR = l, o.DPI = Math.round(o.DPI ? o.DPI * n : 90 * n), 1 == a.length) s = a[0]; else s = a[We(fu(t), a.length)];
            return mc(s.replace(/MapServer\/?$/, "MapServer/export").replace(/ImageServer\/?$/, "ImageServer/exportImage"), o)
          }
        }, e.prototype.getTilePixelRatio = function (t) {
          return this.hidpi_ ? t : 1
        }, e.prototype.updateParams = function (t) {
          O(this.params_, t), this.setKey(this.getKeyForParams_())
        }, e.prototype.tileUrlFunction = function (t, e, r) {
          var n = this.getTileGrid();
          if (n || (n = this.getTileGridForProjection(r)), !(n.getResolutions().length <= t[0])) {
            1 == e || this.hidpi_ || (e = 1);
            var i = n.getTileCoordExtent(t, this.tmpExtent_), o = Is(n.getTileSize(t[0]), this.tmpSize);
            1 != e && (o = Rs(o, e, this.tmpSize));
            var a = {F: "image", FORMAT: "PNG32", TRANSPARENT: !0};
            return O(a, this.params_), this.getRequestUrl_(t, o, i, e, r, a)
          }
        }, e
      }(Xp), Zd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Kd = function (t) {
        function e(e, r, n) {
          var i = t.call(this, e, to) || this;
          return i.tileSize_ = r, i.text_ = n, i.canvas_ = null, i
        }

        return Zd(e, t), e.prototype.getImage = function () {
          if (this.canvas_) return this.canvas_;
          var t = this.tileSize_, e = uo(t[0], t[1]);
          return e.strokeStyle = "grey", e.strokeRect(.5, .5, t[0] + .5, t[1] + .5), e.fillStyle = "grey", e.strokeStyle = "white", e.textAlign = "center", e.textBaseline = "middle", e.font = "24px sans-serif", e.lineWidth = 4, e.strokeText(this.text_, t[0] / 2, t[1] / 2, t[0]), e.fillText(this.text_, t[0] / 2, t[1] / 2, t[0]), this.canvas_ = e.canvas, e.canvas
        }, e.prototype.load = function () {
        }, e
      }(lo), Hd = function (t) {
        function e(e) {
          var r = e || {};
          return t.call(this, {
            opaque: !1,
            projection: r.projection,
            tileGrid: r.tileGrid,
            wrapX: void 0 === r.wrapX || r.wrapX,
            zDirection: r.zDirection
          }) || this
        }

        return Zd(e, t), e.prototype.getTile = function (t, e, r) {
          var n = cu(t, e, r);
          if (this.tileCache.containsKey(n)) return this.tileCache.get(n);
          var i = Is(this.tileGrid.getTileSize(t)), o = [t, e, r], a = this.getTileCoordForTileUrlFunction(o), s = void 0;
          s = a ? "z:" + a[0] + " x:" + a[1] + " y:" + a[2] : "none";
          var l = new Kd(o, i, s);
          return this.tileCache.set(n, l), l
        }, e
      }(Jp), $d = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Jd = function (t) {
        function e(e) {
          var r = t.call(this, {
            attributions: e.attributions,
            cacheSize: e.cacheSize,
            crossOrigin: e.crossOrigin,
            imageSmoothing: e.imageSmoothing,
            projection: Gr("EPSG:3857"),
            reprojectionErrorThreshold: e.reprojectionErrorThreshold,
            state: Jo,
            tileLoadFunction: e.tileLoadFunction,
            wrapX: void 0 === e.wrapX || e.wrapX,
            transition: e.transition
          }) || this;
          if (r.tileJSON_ = null, r.tileSize_ = e.tileSize, e.url) if (e.jsonp) Au(e.url, r.handleTileJSONResponse.bind(r), r.handleTileJSONError.bind(r)); else {
            var n = new XMLHttpRequest;
            n.addEventListener("load", r.onXHRLoad_.bind(r)), n.addEventListener("error", r.onXHRError_.bind(r)), n.open("GET", e.url), n.send()
          } else e.tileJSON ? r.handleTileJSONResponse(e.tileJSON) : pt(!1, 51);
          return r
        }

        return $d(e, t), e.prototype.onXHRLoad_ = function (t) {
          var e = t.target;
          if (!e.status || e.status >= 200 && e.status < 300) {
            var r = void 0;
            try {
              r = JSON.parse(e.responseText)
            } catch (t) {
              return void this.handleTileJSONError()
            }
            this.handleTileJSONResponse(r)
          } else this.handleTileJSONError()
        }, e.prototype.onXHRError_ = function (t) {
          this.handleTileJSONError()
        }, e.prototype.getTileJSON = function () {
          return this.tileJSON_
        }, e.prototype.handleTileJSONResponse = function (t) {
          var e, r = Gr("EPSG:4326"), n = this.getProjection();
          if (void 0 !== t.bounds) {
            var i = Zr(r, n);
            e = Ae(t.bounds, i)
          }
          var o = t.minzoom || 0, a = t.maxzoom || 22,
            s = lc({extent: hc(n), maxZoom: a, minZoom: o, tileSize: this.tileSize_});
          if (this.tileGrid = s, this.tileUrlFunction = fc(t.tiles, s), void 0 !== t.attribution && !this.getAttributions()) {
            var l = void 0 !== e ? e : r.getExtent();
            this.setAttributions((function (e) {
              return Re(l, e.extent) ? [t.attribution] : null
            }))
          }
          this.tileJSON_ = t, this.setState(Qo)
        }, e.prototype.handleTileJSONError = function () {
          this.setState(ta)
        }, e
      }(Xp), Qd = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), tg = function (t) {
        function e(e) {
          var r = this, n = e || {}, i = n.params || {}, o = !("TRANSPARENT" in i) || i.TRANSPARENT;
          return (r = t.call(this, {
            attributions: n.attributions,
            cacheSize: n.cacheSize,
            crossOrigin: n.crossOrigin,
            imageSmoothing: n.imageSmoothing,
            opaque: !o,
            projection: n.projection,
            reprojectionErrorThreshold: n.reprojectionErrorThreshold,
            tileClass: n.tileClass,
            tileGrid: n.tileGrid,
            tileLoadFunction: n.tileLoadFunction,
            url: n.url,
            urls: n.urls,
            wrapX: void 0 === n.wrapX || n.wrapX,
            transition: n.transition
          }) || this).gutter_ = void 0 !== n.gutter ? n.gutter : 0, r.params_ = i, r.v13_ = !0, r.serverType_ = n.serverType, r.hidpi_ = void 0 === n.hidpi || n.hidpi, r.tmpExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], r.updateV13_(), r.setKey(r.getKeyForParams_()), r
        }

        return Qd(e, t), e.prototype.getFeatureInfoUrl = function (t, e, r, n) {
          var i = Gr(r), o = this.getProjection(), a = this.getTileGrid();
          a || (a = this.getTileGridForProjection(i));
          var s = a.getZForResolution(e, this.zDirection), l = a.getTileCoordForCoordAndZ(t, s);
          if (!(a.getResolutions().length <= l[0])) {
            var u = a.getResolution(l[0]), c = a.getTileCoordExtent(l, this.tmpExtent_),
              h = Is(a.getTileSize(l[0]), this.tmpSize), p = this.gutter_;
            0 !== p && (h = Os(h, p, this.tmpSize), c = Ht(c, u * p, c)), o && o !== i && (u = tc(o, i, t, u), c = $r(c, i, o), t = Hr(t, i, o));
            var f = {
              SERVICE: "WMS",
              VERSION: "1.3.0",
              REQUEST: "GetFeatureInfo",
              FORMAT: "image/png",
              TRANSPARENT: !0,
              QUERY_LAYERS: this.params_.LAYERS
            };
            O(f, this.params_, n);
            var d = Math.floor((t[0] - c[0]) / u), g = Math.floor((c[3] - t[1]) / u);
            return f[this.v13_ ? "I" : "X"] = d, f[this.v13_ ? "J" : "Y"] = g, this.getRequestUrl_(l, h, c, 1, o || i, f)
          }
        }, e.prototype.getLegendUrl = function (t, e) {
          if (void 0 !== this.urls[0]) {
            var r = {SERVICE: "WMS", VERSION: "1.3.0", REQUEST: "GetLegendGraphic", FORMAT: "image/png"};
            if (void 0 === e || void 0 === e.LAYER) {
              var n = this.params_.LAYERS;
              if (!(!Array.isArray(n) || 1 === n.length)) return;
              r.LAYER = n
            }
            if (void 0 !== t) {
              var i = this.getProjection() ? this.getProjection().getMetersPerUnit() : 1;
              r.SCALE = t * i / 28e-5
            }
            return O(r, e), mc(this.urls[0], r)
          }
        }, e.prototype.getGutter = function () {
          return this.gutter_
        }, e.prototype.getParams = function () {
          return this.params_
        }, e.prototype.getRequestUrl_ = function (t, e, r, n, i, o) {
          var a = this.urls;
          if (a) {
            if (o.WIDTH = e[0], o.HEIGHT = e[1], o[this.v13_ ? "CRS" : "SRS"] = i.getCode(), "STYLES" in this.params_ || (o.STYLES = ""), 1 != n) switch (this.serverType_) {
              case Hf:
                var s = 90 * n + .5 | 0;
                "FORMAT_OPTIONS" in o ? o.FORMAT_OPTIONS += ";dpi:" + s : o.FORMAT_OPTIONS = "dpi:" + s;
                break;
              case $f:
                o.MAP_RESOLUTION = 90 * n;
                break;
              case Kf:
              case Jf:
                o.DPI = 90 * n;
                break;
              default:
                pt(!1, 52)
            }
            var l, u = i.getAxisOrientation(), c = r;
            if (this.v13_ && "ne" == u.substr(0, 2)) {
              var h = void 0;
              h = r[0], c[0] = r[1], c[1] = h, h = r[2], c[2] = r[3], c[3] = h
            }
            if (o.BBOX = c.join(","), 1 == a.length) l = a[0]; else l = a[We(fu(t), a.length)];
            return mc(l, o)
          }
        }, e.prototype.getTilePixelRatio = function (t) {
          return this.hidpi_ && void 0 !== this.serverType_ ? t : 1
        }, e.prototype.getKeyForParams_ = function () {
          var t = 0, e = [];
          for (var r in this.params_) e[t++] = r + "-" + this.params_[r];
          return e.join("/")
        }, e.prototype.updateParams = function (t) {
          O(this.params_, t), this.updateV13_(), this.setKey(this.getKeyForParams_())
        }, e.prototype.updateV13_ = function () {
          var t = this.params_.VERSION || "1.3.0";
          this.v13_ = br(t, "1.3") >= 0
        }, e.prototype.tileUrlFunction = function (t, e, r) {
          var n = this.getTileGrid();
          if (n || (n = this.getTileGridForProjection(r)), !(n.getResolutions().length <= t[0])) {
            1 == e || this.hidpi_ && void 0 !== this.serverType_ || (e = 1);
            var i = n.getResolution(t[0]), o = n.getTileCoordExtent(t, this.tmpExtent_),
              a = Is(n.getTileSize(t[0]), this.tmpSize), s = this.gutter_;
            0 !== s && (a = Os(a, s, this.tmpSize), o = Ht(o, i * s, o)), 1 != e && (a = Rs(a, e, this.tmpSize));
            var l = {SERVICE: "WMS", VERSION: "1.3.0", REQUEST: "GetMap", FORMAT: "image/png", TRANSPARENT: !0};
            return O(l, this.params_), this.getRequestUrl_(t, a, o, e, r, l)
          }
        }, e
      }(Xp), eg = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), rg = function (t) {
        function e(e, r, n, i, o, a) {
          var s = t.call(this, e, r) || this;
          return s.src_ = n, s.extent_ = i, s.preemptive_ = o, s.grid_ = null, s.keys_ = null, s.data_ = null, s.jsonp_ = a, s
        }

        return eg(e, t), e.prototype.getImage = function () {
          return null
        }, e.prototype.getData = function (t) {
          if (!this.grid_ || !this.keys_) return null;
          var e = (t[0] - this.extent_[0]) / (this.extent_[2] - this.extent_[0]),
            r = (t[1] - this.extent_[1]) / (this.extent_[3] - this.extent_[1]),
            n = this.grid_[Math.floor((1 - r) * this.grid_.length)];
          if ("string" != typeof n) return null;
          var i = n.charCodeAt(Math.floor(e * n.length));
          i >= 93 && i--, i >= 35 && i--;
          var o = null;
          if ((i -= 32) in this.keys_) {
            var a = this.keys_[i];
            o = this.data_ && a in this.data_ ? this.data_[a] : a
          }
          return o
        }, e.prototype.forDataAtCoordinate = function (t, e, r) {
          this.state == ro && !0 === r ? (this.state = Ji, K(this, F, (function (r) {
            e(this.getData(t))
          }), this), this.loadInternal_()) : !0 === r ? setTimeout(function () {
            e(this.getData(t))
          }.bind(this), 0) : e(this.getData(t))
        }, e.prototype.getKey = function () {
          return this.src_
        }, e.prototype.handleError_ = function () {
          this.state = eo, this.changed()
        }, e.prototype.handleLoad_ = function (t) {
          this.grid_ = t.grid, this.keys_ = t.keys, this.data_ = t.data, this.state = to, this.changed()
        }, e.prototype.loadInternal_ = function () {
          if (this.state == Ji) if (this.state = Qi, this.jsonp_) Au(this.src_, this.handleLoad_.bind(this), this.handleError_.bind(this)); else {
            var t = new XMLHttpRequest;
            t.addEventListener("load", this.onXHRLoad_.bind(this)), t.addEventListener("error", this.onXHRError_.bind(this)), t.open("GET", this.src_), t.send()
          }
        }, e.prototype.onXHRLoad_ = function (t) {
          var e = t.target;
          if (!e.status || e.status >= 200 && e.status < 300) {
            var r = void 0;
            try {
              r = JSON.parse(e.responseText)
            } catch (t) {
              return void this.handleError_()
            }
            this.handleLoad_(r)
          } else this.handleError_()
        }, e.prototype.onXHRError_ = function (t) {
          this.handleError_()
        }, e.prototype.load = function () {
          this.preemptive_ ? this.loadInternal_() : this.setState(ro)
        }, e
      }(lo), ng = function (t) {
        function e(e) {
          var r = t.call(this, {projection: Gr("EPSG:3857"), state: Jo}) || this;
          if (r.preemptive_ = void 0 === e.preemptive || e.preemptive, r.tileUrlFunction_ = gc, r.template_ = void 0, r.jsonp_ = e.jsonp || !1, e.url) if (r.jsonp_) Au(e.url, r.handleTileJSONResponse.bind(r), r.handleTileJSONError.bind(r)); else {
            var n = new XMLHttpRequest;
            n.addEventListener("load", r.onXHRLoad_.bind(r)), n.addEventListener("error", r.onXHRError_.bind(r)), n.open("GET", e.url), n.send()
          } else e.tileJSON ? r.handleTileJSONResponse(e.tileJSON) : pt(!1, 51);
          return r
        }

        return eg(e, t), e.prototype.onXHRLoad_ = function (t) {
          var e = t.target;
          if (!e.status || e.status >= 200 && e.status < 300) {
            var r = void 0;
            try {
              r = JSON.parse(e.responseText)
            } catch (t) {
              return void this.handleTileJSONError()
            }
            this.handleTileJSONResponse(r)
          } else this.handleTileJSONError()
        }, e.prototype.onXHRError_ = function (t) {
          this.handleTileJSONError()
        }, e.prototype.getTemplate = function () {
          return this.template_
        }, e.prototype.forDataAtCoordinateAndResolution = function (t, e, r, n) {
          if (this.tileGrid) {
            var i = this.tileGrid.getZForResolution(e, this.zDirection), o = this.tileGrid.getTileCoordForCoordAndZ(t, i);
            this.getTile(o[0], o[1], o[2], 1, this.getProjection()).forDataAtCoordinate(t, r, n)
          } else !0 === n ? setTimeout((function () {
            r(null)
          }), 0) : r(null)
        }, e.prototype.handleTileJSONError = function () {
          this.setState(ta)
        }, e.prototype.handleTileJSONResponse = function (t) {
          var e, r = Gr("EPSG:4326"), n = this.getProjection();
          if (void 0 !== t.bounds) {
            var i = Zr(r, n);
            e = Ae(t.bounds, i)
          }
          var o = t.minzoom || 0, a = t.maxzoom || 22, s = lc({extent: hc(n), maxZoom: a, minZoom: o});
          this.tileGrid = s, this.template_ = t.template;
          var l = t.grids;
          if (l) {
            if (this.tileUrlFunction_ = fc(l, s), void 0 !== t.attribution) {
              var u = void 0 !== e ? e : r.getExtent();
              this.setAttributions((function (e) {
                return Re(u, e.extent) ? [t.attribution] : null
              }))
            }
            this.setState(Qo)
          } else this.setState(ta)
        }, e.prototype.getTile = function (t, e, r, n, i) {
          var o = cu(t, e, r);
          if (this.tileCache.containsKey(o)) return this.tileCache.get(o);
          var a = [t, e, r], s = this.getTileCoordForTileUrlFunction(a, i), l = this.tileUrlFunction_(s, n, i),
            u = new rg(a, void 0 !== l ? Ji : ro, void 0 !== l ? l : "", this.tileGrid.getTileCoordExtent(a), this.preemptive_, this.jsonp_);
          return this.tileCache.set(o, u), u
        }, e.prototype.useTile = function (t, e, r) {
          var n = cu(t, e, r);
          this.tileCache.containsKey(n) && this.tileCache.get(n)
        }, e
      }(Bp), ig = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), og = function (t) {
        function e(e) {
          var r = this, n = e.projection || "EPSG:3857", i = e.extent || hc(n), o = e.tileGrid || lc({
            extent: i,
            maxResolution: e.maxResolution,
            maxZoom: void 0 !== e.maxZoom ? e.maxZoom : 22,
            minZoom: e.minZoom,
            tileSize: e.tileSize || 512
          });
          return (r = t.call(this, {
            attributions: e.attributions,
            attributionsCollapsible: e.attributionsCollapsible,
            cacheSize: e.cacheSize,
            opaque: !1,
            projection: n,
            state: e.state,
            tileGrid: o,
            tileLoadFunction: e.tileLoadFunction ? e.tileLoadFunction : ag,
            tileUrlFunction: e.tileUrlFunction,
            url: e.url,
            urls: e.urls,
            wrapX: void 0 === e.wrapX || e.wrapX,
            transition: e.transition,
            zDirection: void 0 === e.zDirection ? 1 : e.zDirection
          }) || this).format_ = e.format ? e.format : null, r.loadingTiles_ = {}, r.sourceTileCache = new yu(r.tileCache.highWaterMark), r.overlaps_ = null == e.overlaps || e.overlaps, r.tileClass = e.tileClass ? e.tileClass : Eu, r.tileGrids_ = {}, r
        }

        return ig(e, t), e.prototype.getFeaturesInExtent = function (t) {
          var e = [], r = this.tileCache;
          if (0 === r.getCount()) return e;
          var n = pu(r.peekFirstKey())[0], i = this.tileGrid;
          return r.forEach((function (r) {
            if (r.tileCoord[0] === n && r.getState() === to) for (var o = r.getSourceTiles(), a = 0, s = o.length; a < s; ++a) {
              var l = o[a], u = l.tileCoord;
              if (Re(t, i.getTileCoordExtent(u))) {
                var c = l.getFeatures();
                if (c) for (var h = 0, p = c.length; h < p; ++h) {
                  var f = c[h], d = f.getGeometry();
                  Re(t, d.getExtent()) && e.push(f)
                }
              }
            }
          })), e
        }, e.prototype.getOverlaps = function () {
          return this.overlaps_
        }, e.prototype.clear = function () {
          this.tileCache.clear(), this.sourceTileCache.clear()
        }, e.prototype.expireCache = function (e, r) {
          t.prototype.expireCache.call(this, e, r), this.sourceTileCache.expireCache({})
        }, e.prototype.getSourceTiles = function (t, e, r) {
          var n = r.wrappedTileCoord, i = this.getTileGridForProjection(e), o = i.getTileCoordExtent(n), a = n[0],
            s = i.getResolution(a);
          Ht(o, -s, o);
          var l = this.tileGrid, u = l.getExtent();
          u && Te(o, u, o);
          var c, h, p, f = l.getZForResolution(s, 1), d = l.getMinZoom(), g = r.sourceTiles;
          if (g && g.length > 0 && g[0].tileCoord[0] === f) c = g, h = !0, p = f; else {
            c = [], p = f + 1;
            do {
              --p, h = !0, l.forEachTileCoord(o, p, function (n) {
                var i, o = this.tileUrlFunction(n, t, e);
                if (void 0 !== o) if (this.sourceTileCache.containsKey(o)) {
                  var a = (i = this.sourceTileCache.get(o)).getState();
                  if (a === to || a === eo || a === ro) return void c.push(i)
                } else p === f && ((i = new this.tileClass(n, Ji, o, this.format_, this.tileLoadFunction)).extent = l.getTileCoordExtent(n), i.projection = e, i.resolution = l.getResolution(n[0]), this.sourceTileCache.set(o, i), i.addEventListener(F, this.handleTileChange.bind(this)), i.load());
                h = h && i && i.getState() === to, i && i.getState() !== ro && r.getState() === Ji && (r.loadingSourceTiles++, i.addEventListener(F, (function t() {
                  var e = i.getState(), n = i.getKey();
                  if (e === to || e === eo) {
                    e === to ? (i.removeEventListener(F, t), r.loadingSourceTiles--, delete r.errorSourceTileKeys[n]) : e === eo && (r.errorSourceTileKeys[n] = !0);
                    var o = Object.keys(r.errorSourceTileKeys).length;
                    r.loadingSourceTiles - o == 0 && (r.hifi = 0 === o, r.sourceZ = f, r.setState(to))
                  }
                })))
              }.bind(this)), h || (c.length = 0)
            } while (!h && p > d)
          }
          return r.getState() === Ji && r.setState(Qi), h && (r.hifi = f === p, r.sourceZ = p, r.getState() < to ? r.setState(to) : g && b(c, g) || (r.sourceTiles = c)), c
        }, e.prototype.getTile = function (t, e, r, n, i) {
          var o, a = cu(t, e, r), s = this.getKey();
          if (this.tileCache.containsKey(a) && (o = this.tileCache.get(a)).key === s) return o;
          var l = [t, e, r], u = this.getTileCoordForTileUrlFunction(l, i), c = this.getTileGrid().getExtent(),
            h = this.getTileGridForProjection(i);
          if (u && c) {
            var p = h.getTileCoordExtent(u);
            Ht(p, -h.getResolution(t), p), Re(c, p) || (u = null)
          }
          var f = !0;
          if (null !== u) {
            var d = this.tileGrid, g = h.getResolution(t), y = d.getZForResolution(g, 1), m = h.getTileCoordExtent(u);
            Ht(m, -g, m), d.forEachTileCoord(m, y, function (t) {
              f = f && !this.tileUrlFunction(t, n, i)
            }.bind(this))
          }
          var v = new wu(l, f ? ro : Ji, u, this.getSourceTiles.bind(this, n, i));
          return v.key = s, o ? (v.interimTile = o, v.refreshInterimChain(), this.tileCache.replace(a, v)) : this.tileCache.set(a, v), v
        }, e.prototype.getTileGridForProjection = function (t) {
          var e = t.getCode(), r = this.tileGrids_[e];
          if (!r) {
            var n = this.tileGrid;
            r = cc(t, void 0, n ? n.getTileSize(n.getMinZoom()) : void 0), this.tileGrids_[e] = r
          }
          return r
        }, e.prototype.getTilePixelRatio = function (t) {
          return t
        }, e.prototype.getTilePixelSize = function (t, e, r) {
          var n = Is(this.getTileGridForProjection(r).getTileSize(t), this.tmpSize);
          return [Math.round(n[0] * e), Math.round(n[1] * e)]
        }, e.prototype.updateCacheSize = function (e, r) {
          t.prototype.updateCacheSize.call(this, 2 * e, r)
        }, e
      }(Yp);

    function ag(t, e) {
      t.setLoader((function (r, n, i) {
        Lu(e, t.getFormat(), r, n, i, t.onLoad.bind(t), t.onError.bind(t))
      }))
    }

    var sg = "KVP", lg = "REST", ug = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), cg = function (t) {
      function e(e) {
        var r = this, n = void 0 !== e.requestEncoding ? e.requestEncoding : sg, i = e.tileGrid, o = e.urls;
        return void 0 === o && void 0 !== e.url && (o = yc(e.url)), (r = t.call(this, {
          attributions: e.attributions,
          cacheSize: e.cacheSize,
          crossOrigin: e.crossOrigin,
          imageSmoothing: e.imageSmoothing,
          projection: e.projection,
          reprojectionErrorThreshold: e.reprojectionErrorThreshold,
          tileClass: e.tileClass,
          tileGrid: i,
          tileLoadFunction: e.tileLoadFunction,
          tilePixelRatio: e.tilePixelRatio,
          urls: o,
          wrapX: void 0 !== e.wrapX && e.wrapX,
          transition: e.transition
        }) || this).version_ = void 0 !== e.version ? e.version : "1.0.0", r.format_ = void 0 !== e.format ? e.format : "image/jpeg", r.dimensions_ = void 0 !== e.dimensions ? e.dimensions : {}, r.layer_ = e.layer, r.matrixSet_ = e.matrixSet, r.style_ = e.style, r.requestEncoding_ = n, r.setKey(r.getKeyForDimensions_()), o && o.length > 0 && (r.tileUrlFunction = dc(o.map(r.createFromWMTSTemplate.bind(r)))), r
      }

      return ug(e, t), e.prototype.setUrls = function (t) {
        this.urls = t;
        var e = t.join("\n");
        this.setTileUrlFunction(dc(t.map(this.createFromWMTSTemplate.bind(this))), e)
      }, e.prototype.getDimensions = function () {
        return this.dimensions_
      }, e.prototype.getFormat = function () {
        return this.format_
      }, e.prototype.getLayer = function () {
        return this.layer_
      }, e.prototype.getMatrixSet = function () {
        return this.matrixSet_
      }, e.prototype.getRequestEncoding = function () {
        return this.requestEncoding_
      }, e.prototype.getStyle = function () {
        return this.style_
      }, e.prototype.getVersion = function () {
        return this.version_
      }, e.prototype.getKeyForDimensions_ = function () {
        var t = 0, e = [];
        for (var r in this.dimensions_) e[t++] = r + "-" + this.dimensions_[r];
        return e.join("/")
      }, e.prototype.updateDimensions = function (t) {
        O(this.dimensions_, t), this.setKey(this.getKeyForDimensions_())
      }, e.prototype.createFromWMTSTemplate = function (t) {
        var e = this.requestEncoding_, r = {layer: this.layer_, style: this.style_, tilematrixset: this.matrixSet_};
        e == sg && O(r, {
          Service: "WMTS",
          Request: "GetTile",
          Version: this.version_,
          Format: this.format_
        }), t = e == sg ? mc(t, r) : t.replace(/\{(\w+?)\}/g, (function (t, e) {
          return e.toLowerCase() in r ? r[e.toLowerCase()] : t
        }));
        var n = this.tileGrid, i = this.dimensions_;
        return function (r, o, a) {
          if (r) {
            var s = {TileMatrix: n.getMatrixId(r[0]), TileCol: r[1], TileRow: r[2]};
            O(s, i);
            var l = t;
            return l = e == sg ? mc(l, s) : l.replace(/\{(\w+?)\}/g, (function (t, e) {
              return s[e]
            }))
          }
        }
      }, e
    }(Xp);
    var hg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), pg = "GENERATE_BUFFERS", fg = function (t) {
      function e(e, r) {
        var n = t.call(this, e) || this, i = r || {};
        return n.helper = new gh({
          postProcesses: i.postProcesses,
          uniforms: i.uniforms
        }), void 0 !== i.className && (n.helper.getCanvas().className = i.className), n
      }

      return hg(e, t), e.prototype.disposeInternal = function () {
        this.helper.dispose(), t.prototype.disposeInternal.call(this)
      }, e.prototype.getShaderCompileErrors = function () {
        return this.helper.getShaderCompileErrors()
      }, e.prototype.dispatchRenderEvent_ = function (t, e) {
        var r = this.getLayer();
        if (r.hasListener(t)) {
          var n = new la(t, null, e, null);
          r.dispatchEvent(n)
        }
      }, e.prototype.preRender = function (t) {
        this.dispatchRenderEvent_(qo, t)
      }, e.prototype.postRender = function (t) {
        this.dispatchRenderEvent_(Xo, t)
      }, e
    }(ld), dg = [], gg = {vertexPosition: 0, indexPosition: 0};

    function yg(t, e, r, n, i) {
      t[e + 0] = r, t[e + 1] = n, t[e + 2] = i
    }

    function mg(t, e) {
      var r = e || [];
      return r[0] = Math.floor(t / 256 / 256 / 256) / 255, r[1] = Math.floor(t / 256 / 256) % 256 / 255, r[2] = Math.floor(t / 256) % 256 / 255, r[3] = t % 256 / 255, r
    }

    function vg(t) {
      var e = 0;
      return e += Math.round(256 * t[0] * 256 * 256 * 255), e += Math.round(256 * t[1] * 256 * 255), e += Math.round(256 * t[2] * 255), e += Math.round(255 * t[3])
    }

    var _g = fg, bg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), xg = "renderOrder", wg = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = O({}, n);
        return delete i.style, delete i.renderBuffer, delete i.updateWhileAnimating, delete i.updateWhileInteracting, (r = t.call(this, i) || this).declutter_ = void 0 !== n.declutter && n.declutter, r.renderBuffer_ = void 0 !== n.renderBuffer ? n.renderBuffer : 100, r.style_ = null, r.styleFunction_ = void 0, r.setStyle(n.style), r.updateWhileAnimating_ = void 0 !== n.updateWhileAnimating && n.updateWhileAnimating, r.updateWhileInteracting_ = void 0 !== n.updateWhileInteracting && n.updateWhileInteracting, r
      }

      return bg(e, t), e.prototype.getDeclutter = function () {
        return this.declutter_
      }, e.prototype.getFeatures = function (e) {
        return t.prototype.getFeatures.call(this, e)
      }, e.prototype.getRenderBuffer = function () {
        return this.renderBuffer_
      }, e.prototype.getRenderOrder = function () {
        return this.get(xg)
      }, e.prototype.getStyle = function () {
        return this.style_
      }, e.prototype.getStyleFunction = function () {
        return this.styleFunction_
      }, e.prototype.getUpdateWhileAnimating = function () {
        return this.updateWhileAnimating_
      }, e.prototype.getUpdateWhileInteracting = function () {
        return this.updateWhileInteracting_
      }, e.prototype.renderDeclutter = function (t) {
        t.declutterTree || (t.declutterTree = new Pp.a(9)), this.getRenderer().renderDeclutter(t)
      }, e.prototype.setRenderOrder = function (t) {
        this.set(xg, t)
      }, e.prototype.setStyle = function (t) {
        this.style_ = void 0 !== t ? t : _p, this.styleFunction_ = null === t ? void 0 : mp(this.style_), this.changed()
      }, e
    }(na), Sg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Eg = function (t) {
      function e(e, r) {
        var n = this, i = r.uniforms || {}, a = [1, 0, 0, 1, 0, 0];
        i[ah] = a, (n = t.call(this, e, {
          className: r.className,
          uniforms: i,
          postProcesses: r.postProcesses
        }) || this).sourceRevision_ = -1, n.verticesBuffer_ = new Qc(34962, 35048), n.hitVerticesBuffer_ = new Qc(34962, 35048), n.indicesBuffer_ = new Qc(34963, 35048), n.program_ = n.helper.getProgram(r.fragmentShader, r.vertexShader), n.hitDetectionEnabled_ = !(!r.hitFragmentShader || !r.hitVertexShader), n.hitProgram_ = n.hitDetectionEnabled_ && n.helper.getProgram(r.hitFragmentShader, r.hitVertexShader);
        var s = r.attributes ? r.attributes.map((function (t) {
          return {name: "a_" + t.name, size: 1, type: ph.FLOAT}
        })) : [];
        n.attributes = [{name: "a_position", size: 2, type: ph.FLOAT}, {
          name: "a_index",
          size: 1,
          type: ph.FLOAT
        }].concat(s), n.hitDetectionAttributes = [{name: "a_position", size: 2, type: ph.FLOAT}, {
          name: "a_index",
          size: 1,
          type: ph.FLOAT
        }, {name: "a_hitColor", size: 4, type: ph.FLOAT}, {
          name: "a_featureUid",
          size: 1,
          type: ph.FLOAT
        }].concat(s), n.customAttributes = r.attributes ? r.attributes : [], n.previousExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], n.currentTransform_ = a, n.renderTransform_ = [1, 0, 0, 1, 0, 0], n.invertRenderTransform_ = [1, 0, 0, 1, 0, 0], n.renderInstructions_ = new Float32Array(0), n.hitRenderInstructions_ = new Float32Array(0), n.hitRenderTarget_ = n.hitDetectionEnabled_ && new mh(n.helper), n.worker_ = new Worker(Hc), n.worker_.addEventListener("message", function (t) {
          var e = t.data;
          if (e.type === pg) {
            var r = e.projectionTransform;
            e.hitDetection ? (this.hitVerticesBuffer_.fromArrayBuffer(e.vertexBuffer), this.helper.flushBufferData(this.hitVerticesBuffer_)) : (this.verticesBuffer_.fromArrayBuffer(e.vertexBuffer), this.helper.flushBufferData(this.verticesBuffer_)), this.indicesBuffer_.fromArrayBuffer(e.indexBuffer), this.helper.flushBufferData(this.indicesBuffer_), this.renderTransform_ = r, jt(this.invertRenderTransform_, this.renderTransform_), e.hitDetection ? this.hitRenderInstructions_ = new Float32Array(t.data.renderInstructions) : this.renderInstructions_ = new Float32Array(t.data.renderInstructions), this.getLayer().changed()
          }
        }.bind(n)), n.featureCache_ = {}, n.featureCount_ = 0;
        var l = n.getLayer().getSource();
        return n.sourceListenKeys_ = [Z(l, ef, n.handleSourceFeatureAdded_, n), Z(l, rf, n.handleSourceFeatureChanged_, n), Z(l, of, n.handleSourceFeatureDelete_, n), Z(l, nf, n.handleSourceFeatureClear_, n)], l.forEachFeature(function (t) {
          this.featureCache_[o(t)] = {
            feature: t,
            properties: t.getProperties(),
            geometry: t.getGeometry()
          }, this.featureCount_++
        }.bind(n)), n
      }

      return Sg(e, t), e.prototype.handleSourceFeatureAdded_ = function (t) {
        var e = t.feature;
        this.featureCache_[o(e)] = {
          feature: e,
          properties: e.getProperties(),
          geometry: e.getGeometry()
        }, this.featureCount_++
      }, e.prototype.handleSourceFeatureChanged_ = function (t) {
        var e = t.feature;
        this.featureCache_[o(e)] = {feature: e, properties: e.getProperties(), geometry: e.getGeometry()}
      }, e.prototype.handleSourceFeatureDelete_ = function (t) {
        var e = t.feature;
        delete this.featureCache_[o(e)], this.featureCount_--
      }, e.prototype.handleSourceFeatureClear_ = function () {
        this.featureCache_ = {}, this.featureCount_ = 0
      }, e.prototype.renderFrame = function (t) {
        this.preRender(t);
        var e = this.indicesBuffer_.getSize();
        this.helper.drawElements(0, e), this.helper.finalizeDraw(t);
        var r = this.helper.getCanvas(), n = t.layerStatesArray[t.layerIndex].opacity;
        return n !== parseFloat(r.style.opacity) && (r.style.opacity = String(n)), this.hitDetectionEnabled_ && (this.renderHitDetection(t), this.hitRenderTarget_.clearCachedData()), this.postRender(t), r
      }, e.prototype.prepareFrame = function (t) {
        var e = this.getLayer(), r = e.getSource(), n = t.viewState, i = !t.viewHints[ns] && !t.viewHints[is],
          o = !ue(this.previousExtent_, t.extent), a = this.sourceRevision_ < r.getRevision();
        if (a && (this.sourceRevision_ = r.getRevision()), i && (o || a)) {
          var s = n.projection, l = n.resolution, u = e instanceof wg ? e.getRenderBuffer() : 0,
            c = Ht(t.extent, u * l);
          r.loadFeatures(c, l, s), this.rebuildBuffers_(t), this.previousExtent_ = t.extent.slice()
        }
        return this.helper.makeProjectionTransform(t, this.currentTransform_), Ot(this.currentTransform_, this.invertRenderTransform_), this.helper.useProgram(this.program_), this.helper.prepareDraw(t), this.helper.bindBuffer(this.verticesBuffer_), this.helper.bindBuffer(this.indicesBuffer_), this.helper.enableAttributes(this.attributes), !0
      }, e.prototype.rebuildBuffers_ = function (t) {
        var e = [1, 0, 0, 1, 0, 0];
        this.helper.makeProjectionTransform(t, e);
        var r, n, i = (2 + this.customAttributes.length) * this.featureCount_;
        if (this.renderInstructions_ && this.renderInstructions_.length === i || (this.renderInstructions_ = new Float32Array(i)), this.hitDetectionEnabled_) {
          var o = (7 + this.customAttributes.length) * this.featureCount_;
          this.hitRenderInstructions_ && this.hitRenderInstructions_.length === o || (this.hitRenderInstructions_ = new Float32Array(o))
        }
        var a, s = [], l = [], u = 0, c = 0;
        for (var h in this.featureCache_) if ((n = (r = this.featureCache_[h]).geometry) && n.getType() === bt.POINT) {
          s[0] = n.getFlatCoordinates()[0], s[1] = n.getFlatCoordinates()[1], It(e, s), a = mg(c + 6, l), this.renderInstructions_[u++] = s[0], this.renderInstructions_[u++] = s[1], this.hitDetectionEnabled_ && (this.hitRenderInstructions_[c++] = s[0], this.hitRenderInstructions_[c++] = s[1], this.hitRenderInstructions_[c++] = a[0], this.hitRenderInstructions_[c++] = a[1], this.hitRenderInstructions_[c++] = a[2], this.hitRenderInstructions_[c++] = a[3], this.hitRenderInstructions_[c++] = Number(h));
          for (var p = void 0, f = 0; f < this.customAttributes.length; f++) p = this.customAttributes[f].callback(r.feature, r.properties), this.renderInstructions_[u++] = p, this.hitDetectionEnabled_ && (this.hitRenderInstructions_[c++] = p)
        }
        var d = {
          type: pg,
          renderInstructions: this.renderInstructions_.buffer,
          customAttributesCount: this.customAttributes.length
        };
        if (d.projectionTransform = e, this.worker_.postMessage(d, [this.renderInstructions_.buffer]), this.renderInstructions_ = null, this.hitDetectionEnabled_) {
          var g = {
            type: pg,
            renderInstructions: this.hitRenderInstructions_.buffer,
            customAttributesCount: 5 + this.customAttributes.length
          };
          g.projectionTransform = e, g.hitDetection = !0, this.worker_.postMessage(g, [this.hitRenderInstructions_.buffer]), this.hitRenderInstructions_ = null
        }
      }, e.prototype.forEachFeatureAtCoordinate = function (t, e, r, n, i) {
        if (pt(this.hitDetectionEnabled_, 66), this.hitRenderInstructions_) {
          var o = It(e.coordinateToPixelTransform, t.slice()), a = this.hitRenderTarget_.readPixel(o[0] / 2, o[1] / 2),
            s = vg([a[0] / 255, a[1] / 255, a[2] / 255, a[3] / 255]), l = this.hitRenderInstructions_[s],
            u = Math.floor(l).toString(), c = this.getLayer().getSource().getFeatureByUid(u);
          return c ? n(c, this.getLayer(), null) : void 0
        }
      }, e.prototype.renderHitDetection = function (t) {
        if (this.hitVerticesBuffer_.getSize()) {
          this.hitRenderTarget_.setSize([Math.floor(t.size[0] / 2), Math.floor(t.size[1] / 2)]), this.helper.useProgram(this.hitProgram_), this.helper.prepareDrawToRenderTarget(t, this.hitRenderTarget_, !0), this.helper.bindBuffer(this.hitVerticesBuffer_), this.helper.bindBuffer(this.indicesBuffer_), this.helper.enableAttributes(this.hitDetectionAttributes);
          var e = this.indicesBuffer_.getSize();
          this.helper.drawElements(0, e)
        }
      }, e.prototype.disposeInternal = function () {
        this.worker_.terminate(), this.layer_ = null, this.sourceListenKeys_.forEach((function (t) {
          H(t)
        })), this.sourceListenKeys_ = null, t.prototype.disposeInternal.call(this)
      }, e
    }(_g), Tg = {
      BEGIN_GEOMETRY: 0,
      BEGIN_PATH: 1,
      CIRCLE: 2,
      CLOSE_PATH: 3,
      CUSTOM: 4,
      DRAW_CHARS: 5,
      DRAW_IMAGE: 6,
      END_GEOMETRY: 7,
      FILL: 8,
      MOVE_TO_LINE_TO: 9,
      SET_FILL_STYLE: 10,
      SET_STROKE_STYLE: 11,
      STROKE: 12
    }, Cg = [Tg.FILL], Og = [Tg.STROKE], Pg = [Tg.BEGIN_PATH], Rg = [Tg.CLOSE_PATH], Ig = Tg, Lg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Mg = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this) || this;
        return o.tolerance = e, o.maxExtent = r, o.pixelRatio = i, o.maxLineWidth = 0, o.resolution = n, o.beginGeometryInstruction1_ = null, o.beginGeometryInstruction2_ = null, o.bufferedMaxExtent_ = null, o.instructions = [], o.coordinates = [], o.tmpCoordinate_ = [], o.hitDetectionInstructions = [], o.state = {}, o
      }

      return Lg(e, t), e.prototype.applyPixelRatio = function (t) {
        var e = this.pixelRatio;
        return 1 == e ? t : t.map((function (t) {
          return t * e
        }))
      }, e.prototype.appendFlatPointCoordinates = function (t, e) {
        for (var r = this.getBufferedMaxExtent(), n = this.tmpCoordinate_, i = this.coordinates, o = i.length, a = 0, s = t.length; a < s; a += e) n[0] = t[a], n[1] = t[a + 1], Qt(r, n) && (i[o++] = n[0], i[o++] = n[1]);
        return o
      }, e.prototype.appendFlatLineCoordinates = function (t, e, r, n, i, o) {
        var a = this.coordinates, s = a.length, l = this.getBufferedMaxExtent();
        o && (e += n);
        var u, c, h, p = t[e], f = t[e + 1], d = this.tmpCoordinate_, g = !0;
        for (u = e + n; u < r; u += n) d[0] = t[u], d[1] = t[u + 1], (h = re(l, d)) !== c ? (g && (a[s++] = p, a[s++] = f, g = !1), a[s++] = d[0], a[s++] = d[1]) : h === Yt ? (a[s++] = d[0], a[s++] = d[1], g = !1) : g = !0, p = d[0], f = d[1], c = h;
        return (i && g || u === e + n) && (a[s++] = p, a[s++] = f), s
      }, e.prototype.drawCustomCoordinates_ = function (t, e, r, n, i) {
        for (var o = 0, a = r.length; o < a; ++o) {
          var s = r[o], l = this.appendFlatLineCoordinates(t, e, s, n, !1, !1);
          i.push(l), e = s
        }
        return e
      }, e.prototype.drawCustom = function (t, e, r) {
        this.beginGeometry(t, e);
        var n, i, o, a, s, l = t.getType(), u = t.getStride(), c = this.coordinates.length;
        if (l == bt.MULTI_POLYGON) {
          n = t.getOrientedFlatCoordinates(), a = [];
          var h = t.getEndss();
          s = 0;
          for (var p = 0, f = h.length; p < f; ++p) {
            var d = [];
            s = this.drawCustomCoordinates_(n, s, h[p], u, d), a.push(d)
          }
          this.instructions.push([Ig.CUSTOM, c, a, t, r, Gn])
        } else l == bt.POLYGON || l == bt.MULTI_LINE_STRING ? (o = [], n = l == bt.POLYGON ? t.getOrientedFlatCoordinates() : t.getFlatCoordinates(), s = this.drawCustomCoordinates_(n, 0, t.getEnds(), u, o), this.instructions.push([Ig.CUSTOM, c, o, t, r, Dn])) : l == bt.LINE_STRING || l == bt.CIRCLE ? (n = t.getFlatCoordinates(), i = this.appendFlatLineCoordinates(n, 0, n.length, u, !1, !1), this.instructions.push([Ig.CUSTOM, c, i, t, r, Nn])) : l == bt.MULTI_POINT ? (n = t.getFlatCoordinates(), (i = this.appendFlatPointCoordinates(n, u)) > c && this.instructions.push([Ig.CUSTOM, c, i, t, r, Nn])) : l == bt.POINT && (n = t.getFlatCoordinates(), this.coordinates.push(n[0], n[1]), i = this.coordinates.length, this.instructions.push([Ig.CUSTOM, c, i, t, r]));
        this.endGeometry(e)
      }, e.prototype.beginGeometry = function (t, e) {
        this.beginGeometryInstruction1_ = [Ig.BEGIN_GEOMETRY, e, 0, t], this.instructions.push(this.beginGeometryInstruction1_), this.beginGeometryInstruction2_ = [Ig.BEGIN_GEOMETRY, e, 0, t], this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)
      }, e.prototype.finish = function () {
        return {
          instructions: this.instructions,
          hitDetectionInstructions: this.hitDetectionInstructions,
          coordinates: this.coordinates
        }
      }, e.prototype.reverseHitDetectionInstructions = function () {
        var t, e = this.hitDetectionInstructions;
        e.reverse();
        var r, n, i = e.length, o = -1;
        for (t = 0; t < i; ++t) (n = (r = e[t])[0]) == Ig.END_GEOMETRY ? o = t : n == Ig.BEGIN_GEOMETRY && (r[2] = t, m(this.hitDetectionInstructions, o, t), o = -1)
      }, e.prototype.setFillStrokeStyle = function (t, e) {
        var r = this.state;
        if (t) {
          var n = t.getColor();
          r.fillStyle = Tu(n || "#000")
        } else r.fillStyle = void 0;
        if (e) {
          var i = e.getColor();
          r.strokeStyle = Tu(i || "#000");
          var o = e.getLineCap();
          r.lineCap = void 0 !== o ? o : "round";
          var a = e.getLineDash();
          r.lineDash = a ? a.slice() : pa;
          var s = e.getLineDashOffset();
          r.lineDashOffset = s || 0;
          var l = e.getLineJoin();
          r.lineJoin = void 0 !== l ? l : "round";
          var u = e.getWidth();
          r.lineWidth = void 0 !== u ? u : 1;
          var c = e.getMiterLimit();
          r.miterLimit = void 0 !== c ? c : 10, r.lineWidth > this.maxLineWidth && (this.maxLineWidth = r.lineWidth, this.bufferedMaxExtent_ = null)
        } else r.strokeStyle = void 0, r.lineCap = void 0, r.lineDash = null, r.lineDashOffset = void 0, r.lineJoin = void 0, r.lineWidth = void 0, r.miterLimit = void 0
      }, e.prototype.createFill = function (t) {
        var e = t.fillStyle, r = [Ig.SET_FILL_STYLE, e];
        return "string" != typeof e && r.push(!0), r
      }, e.prototype.applyStroke = function (t) {
        this.instructions.push(this.createStroke(t))
      }, e.prototype.createStroke = function (t) {
        return [Ig.SET_STROKE_STYLE, t.strokeStyle, t.lineWidth * this.pixelRatio, t.lineCap, t.lineJoin, t.miterLimit, this.applyPixelRatio(t.lineDash), t.lineDashOffset * this.pixelRatio]
      }, e.prototype.updateFillStyle = function (t, e) {
        var r = t.fillStyle;
        "string" == typeof r && t.currentFillStyle == r || (void 0 !== r && this.instructions.push(e.call(this, t)), t.currentFillStyle = r)
      }, e.prototype.updateStrokeStyle = function (t, e) {
        var r = t.strokeStyle, n = t.lineCap, i = t.lineDash, o = t.lineDashOffset, a = t.lineJoin, s = t.lineWidth,
          l = t.miterLimit;
        (t.currentStrokeStyle != r || t.currentLineCap != n || i != t.currentLineDash && !b(t.currentLineDash, i) || t.currentLineDashOffset != o || t.currentLineJoin != a || t.currentLineWidth != s || t.currentMiterLimit != l) && (void 0 !== r && e.call(this, t), t.currentStrokeStyle = r, t.currentLineCap = n, t.currentLineDash = i, t.currentLineDashOffset = o, t.currentLineJoin = a, t.currentLineWidth = s, t.currentMiterLimit = l)
      }, e.prototype.endGeometry = function (t) {
        this.beginGeometryInstruction1_[2] = this.instructions.length, this.beginGeometryInstruction1_ = null, this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length, this.beginGeometryInstruction2_ = null;
        var e = [Ig.END_GEOMETRY, t];
        this.instructions.push(e), this.hitDetectionInstructions.push(e)
      }, e.prototype.getBufferedMaxExtent = function () {
        if (!this.bufferedMaxExtent_ && (this.bufferedMaxExtent_ = $t(this.maxExtent), this.maxLineWidth > 0)) {
          var t = this.resolution * (this.maxLineWidth + 1) / 2;
          Ht(this.bufferedMaxExtent_, t, this.bufferedMaxExtent_)
        }
        return this.bufferedMaxExtent_
      }, e
    }(ku), Fg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Ag = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e, r, n, i) || this;
        return o.hitDetectionImage_ = null, o.image_ = null, o.imagePixelRatio_ = void 0, o.anchorX_ = void 0, o.anchorY_ = void 0, o.height_ = void 0, o.opacity_ = void 0, o.originX_ = void 0, o.originY_ = void 0, o.rotateWithView_ = void 0, o.rotation_ = void 0, o.scale_ = void 0, o.width_ = void 0, o.declutterImageWithText_ = void 0, o
      }

      return Fg(e, t), e.prototype.drawPoint = function (t, e) {
        if (this.image_) {
          this.beginGeometry(t, e);
          var r = t.getFlatCoordinates(), n = t.getStride(), i = this.coordinates.length,
            o = this.appendFlatPointCoordinates(r, n);
          this.instructions.push([Ig.DRAW_IMAGE, i, o, this.image_, this.anchorX_ * this.imagePixelRatio_, this.anchorY_ * this.imagePixelRatio_, Math.ceil(this.height_ * this.imagePixelRatio_), this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, [this.scale_[0] * this.pixelRatio / this.imagePixelRatio_, this.scale_[1] * this.pixelRatio / this.imagePixelRatio_], Math.ceil(this.width_ * this.imagePixelRatio_), this.declutterImageWithText_]), this.hitDetectionInstructions.push([Ig.DRAW_IMAGE, i, o, this.hitDetectionImage_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.scale_, this.width_, this.declutterImageWithText_]), this.endGeometry(e)
        }
      }, e.prototype.drawMultiPoint = function (t, e) {
        if (this.image_) {
          this.beginGeometry(t, e);
          var r = t.getFlatCoordinates(), n = t.getStride(), i = this.coordinates.length,
            o = this.appendFlatPointCoordinates(r, n);
          this.instructions.push([Ig.DRAW_IMAGE, i, o, this.image_, this.anchorX_ * this.imagePixelRatio_, this.anchorY_ * this.imagePixelRatio_, Math.ceil(this.height_ * this.imagePixelRatio_), this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, [this.scale_[0] * this.pixelRatio / this.imagePixelRatio_, this.scale_[1] * this.pixelRatio / this.imagePixelRatio_], Math.ceil(this.width_ * this.imagePixelRatio_), this.declutterImageWithText_]), this.hitDetectionInstructions.push([Ig.DRAW_IMAGE, i, o, this.hitDetectionImage_, this.anchorX_, this.anchorY_, this.height_, this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.scale_, this.width_, this.declutterImageWithText_]), this.endGeometry(e)
        }
      }, e.prototype.finish = function () {
        return this.reverseHitDetectionInstructions(), this.anchorX_ = void 0, this.anchorY_ = void 0, this.hitDetectionImage_ = null, this.image_ = null, this.imagePixelRatio_ = void 0, this.height_ = void 0, this.scale_ = void 0, this.opacity_ = void 0, this.originX_ = void 0, this.originY_ = void 0, this.rotateWithView_ = void 0, this.rotation_ = void 0, this.width_ = void 0, t.prototype.finish.call(this)
      }, e.prototype.setImageStyle = function (t, e) {
        var r = t.getAnchor(), n = t.getSize(), i = t.getHitDetectionImage(), o = t.getImage(this.pixelRatio),
          a = t.getOrigin();
        this.imagePixelRatio_ = t.getPixelRatio(this.pixelRatio), this.anchorX_ = r[0], this.anchorY_ = r[1], this.hitDetectionImage_ = i, this.image_ = o, this.height_ = n[1], this.opacity_ = t.getOpacity(), this.originX_ = a[0], this.originY_ = a[1], this.rotateWithView_ = t.getRotateWithView(), this.rotation_ = t.getRotation(), this.scale_ = t.getScaleArray(), this.width_ = n[0], this.declutterImageWithText_ = e
      }, e
    }(Mg), kg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), jg = function (t) {
      function e(e, r, n, i) {
        return t.call(this, e, r, n, i) || this
      }

      return kg(e, t), e.prototype.drawFlatCoordinates_ = function (t, e, r, n) {
        var i = this.coordinates.length, o = this.appendFlatLineCoordinates(t, e, r, n, !1, !1),
          a = [Ig.MOVE_TO_LINE_TO, i, o];
        return this.instructions.push(a), this.hitDetectionInstructions.push(a), r
      }, e.prototype.drawLineString = function (t, e) {
        var r = this.state, n = r.strokeStyle, i = r.lineWidth;
        if (void 0 !== n && void 0 !== i) {
          this.updateStrokeStyle(r, this.applyStroke), this.beginGeometry(t, e), this.hitDetectionInstructions.push([Ig.SET_STROKE_STYLE, r.strokeStyle, r.lineWidth, r.lineCap, r.lineJoin, r.miterLimit, r.lineDash, r.lineDashOffset], Pg);
          var o = t.getFlatCoordinates(), a = t.getStride();
          this.drawFlatCoordinates_(o, 0, o.length, a), this.hitDetectionInstructions.push(Og), this.endGeometry(e)
        }
      }, e.prototype.drawMultiLineString = function (t, e) {
        var r = this.state, n = r.strokeStyle, i = r.lineWidth;
        if (void 0 !== n && void 0 !== i) {
          this.updateStrokeStyle(r, this.applyStroke), this.beginGeometry(t, e), this.hitDetectionInstructions.push([Ig.SET_STROKE_STYLE, r.strokeStyle, r.lineWidth, r.lineCap, r.lineJoin, r.miterLimit, r.lineDash, r.lineDashOffset], Pg);
          for (var o = t.getEnds(), a = t.getFlatCoordinates(), s = t.getStride(), l = 0, u = 0, c = o.length; u < c; ++u) l = this.drawFlatCoordinates_(a, l, o[u], s);
          this.hitDetectionInstructions.push(Og), this.endGeometry(e)
        }
      }, e.prototype.finish = function () {
        var e = this.state;
        return null != e.lastStroke && e.lastStroke != this.coordinates.length && this.instructions.push(Og), this.reverseHitDetectionInstructions(), this.state = null, t.prototype.finish.call(this)
      }, e.prototype.applyStroke = function (e) {
        null != e.lastStroke && e.lastStroke != this.coordinates.length && (this.instructions.push(Og), e.lastStroke = this.coordinates.length), e.lastStroke = 0, t.prototype.applyStroke.call(this, e), this.instructions.push(Pg)
      }, e
    }(Mg), Ng = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Dg = function (t) {
      function e(e, r, n, i) {
        return t.call(this, e, r, n, i) || this
      }

      return Ng(e, t), e.prototype.drawFlatCoordinatess_ = function (t, e, r, n) {
        var i = this.state, o = void 0 !== i.fillStyle, a = void 0 !== i.strokeStyle, s = r.length;
        this.instructions.push(Pg), this.hitDetectionInstructions.push(Pg);
        for (var l = 0; l < s; ++l) {
          var u = r[l], c = this.coordinates.length, h = this.appendFlatLineCoordinates(t, e, u, n, !0, !a),
            p = [Ig.MOVE_TO_LINE_TO, c, h];
          this.instructions.push(p), this.hitDetectionInstructions.push(p), a && (this.instructions.push(Rg), this.hitDetectionInstructions.push(Rg)), e = u
        }
        return o && (this.instructions.push(Cg), this.hitDetectionInstructions.push(Cg)), a && (this.instructions.push(Og), this.hitDetectionInstructions.push(Og)), e
      }, e.prototype.drawCircle = function (t, e) {
        var r = this.state, n = r.fillStyle, i = r.strokeStyle;
        if (void 0 !== n || void 0 !== i) {
          this.setFillStrokeStyles_(), this.beginGeometry(t, e), void 0 !== r.fillStyle && this.hitDetectionInstructions.push([Ig.SET_FILL_STYLE, "#000"]), void 0 !== r.strokeStyle && this.hitDetectionInstructions.push([Ig.SET_STROKE_STYLE, r.strokeStyle, r.lineWidth, r.lineCap, r.lineJoin, r.miterLimit, r.lineDash, r.lineDashOffset]);
          var o = t.getFlatCoordinates(), a = t.getStride(), s = this.coordinates.length;
          this.appendFlatLineCoordinates(o, 0, o.length, a, !1, !1);
          var l = [Ig.CIRCLE, s];
          this.instructions.push(Pg, l), this.hitDetectionInstructions.push(Pg, l), void 0 !== r.fillStyle && (this.instructions.push(Cg), this.hitDetectionInstructions.push(Cg)), void 0 !== r.strokeStyle && (this.instructions.push(Og), this.hitDetectionInstructions.push(Og)), this.endGeometry(e)
        }
      }, e.prototype.drawPolygon = function (t, e) {
        var r = this.state, n = r.fillStyle, i = r.strokeStyle;
        if (void 0 !== n || void 0 !== i) {
          this.setFillStrokeStyles_(), this.beginGeometry(t, e), void 0 !== r.fillStyle && this.hitDetectionInstructions.push([Ig.SET_FILL_STYLE, "#000"]), void 0 !== r.strokeStyle && this.hitDetectionInstructions.push([Ig.SET_STROKE_STYLE, r.strokeStyle, r.lineWidth, r.lineCap, r.lineJoin, r.miterLimit, r.lineDash, r.lineDashOffset]);
          var o = t.getEnds(), a = t.getOrientedFlatCoordinates(), s = t.getStride();
          this.drawFlatCoordinatess_(a, 0, o, s), this.endGeometry(e)
        }
      }, e.prototype.drawMultiPolygon = function (t, e) {
        var r = this.state, n = r.fillStyle, i = r.strokeStyle;
        if (void 0 !== n || void 0 !== i) {
          this.setFillStrokeStyles_(), this.beginGeometry(t, e), void 0 !== r.fillStyle && this.hitDetectionInstructions.push([Ig.SET_FILL_STYLE, "#000"]), void 0 !== r.strokeStyle && this.hitDetectionInstructions.push([Ig.SET_STROKE_STYLE, r.strokeStyle, r.lineWidth, r.lineCap, r.lineJoin, r.miterLimit, r.lineDash, r.lineDashOffset]);
          for (var o = t.getEndss(), a = t.getOrientedFlatCoordinates(), s = t.getStride(), l = 0, u = 0, c = o.length; u < c; ++u) l = this.drawFlatCoordinatess_(a, l, o[u], s);
          this.endGeometry(e)
        }
      }, e.prototype.finish = function () {
        this.reverseHitDetectionInstructions(), this.state = null;
        var e = this.tolerance;
        if (0 !== e) for (var r = this.coordinates, n = 0, i = r.length; n < i; ++n) r[n] = Fn(r[n], e);
        return t.prototype.finish.call(this)
      }, e.prototype.setFillStrokeStyles_ = function () {
        var t = this.state;
        void 0 !== t.fillStyle && this.updateFillStyle(t, this.createFill), void 0 !== t.strokeStyle && this.updateStrokeStyle(t, this.applyStroke)
      }, e
    }(Mg);

    function Gg(t, e, r, n, i) {
      var o, a, s, l, u, c, h, p, f, d = r, g = r, y = 0, m = 0, v = r;
      for (o = r; o < n; o += i) {
        var _ = e[o], b = e[o + 1];
        void 0 !== l && (p = _ - l, f = b - u, s = Math.sqrt(p * p + f * f), void 0 !== c && (m += a, Math.acos((c * p + h * f) / (a * s)) > t && (m > y && (y = m, d = v, g = o), m = 0, v = o - i)), a = s, c = p, h = f), l = _, u = b
      }
      return (m += s) > y ? [v, o] : [d, g]
    }

    var zg = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Ug = {
      left: 0,
      end: 0,
      center: .5,
      right: 1,
      start: 1,
      top: 0,
      middle: .5,
      hanging: .2,
      alphabetic: .8,
      ideographic: .8,
      bottom: 1
    }, Bg = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e, r, n, i) || this;
        return o.labels_ = null, o.text_ = "", o.textOffsetX_ = 0, o.textOffsetY_ = 0, o.textRotateWithView_ = void 0, o.textRotation_ = 0, o.textFillState_ = null, o.fillStates = {}, o.textStrokeState_ = null, o.strokeStates = {}, o.textState_ = {}, o.textStates = {}, o.textKey_ = "", o.fillKey_ = "", o.strokeKey_ = "", o.declutterImageWithText_ = void 0, o
      }

      return zg(e, t), e.prototype.finish = function () {
        var e = t.prototype.finish.call(this);
        return e.textStates = this.textStates, e.fillStates = this.fillStates, e.strokeStates = this.strokeStates, e
      }, e.prototype.drawText = function (t, e) {
        var r = this.textFillState_, n = this.textStrokeState_, i = this.textState_;
        if ("" !== this.text_ && i && (r || n)) {
          var o = this.coordinates, a = o.length, s = t.getType(), l = null, u = t.getStride();
          if (i.placement !== Ep || s != bt.LINE_STRING && s != bt.MULTI_LINE_STRING && s != bt.POLYGON && s != bt.MULTI_POLYGON) {
            var c = i.overflow ? null : [];
            switch (s) {
              case bt.POINT:
              case bt.MULTI_POINT:
                l = t.getFlatCoordinates();
                break;
              case bt.LINE_STRING:
                l = t.getFlatMidpoint();
                break;
              case bt.CIRCLE:
                l = t.getCenter();
                break;
              case bt.MULTI_LINE_STRING:
                l = t.getFlatMidpoints(), u = 2;
                break;
              case bt.POLYGON:
                l = t.getFlatInteriorPoint(), i.overflow || c.push(l[2] / this.resolution), u = 3;
                break;
              case bt.MULTI_POLYGON:
                var h = t.getFlatInteriorPoints();
                l = [];
                for (x = 0, w = h.length; x < w; x += 3) i.overflow || c.push(h[x + 2] / this.resolution), l.push(h[x], h[x + 1]);
                if (0 === l.length) return;
                u = 2
            }
            if ((R = this.appendFlatPointCoordinates(l, u)) === a) return;
            this.saveTextStates_(), (i.backgroundFill || i.backgroundStroke) && (this.setFillStrokeStyle(i.backgroundFill, i.backgroundStroke), i.backgroundFill && (this.updateFillStyle(this.state, this.createFill), this.hitDetectionInstructions.push(this.createFill(this.state))), i.backgroundStroke && (this.updateStrokeStyle(this.state, this.applyStroke), this.hitDetectionInstructions.push(this.createStroke(this.state)))), this.beginGeometry(t, e);
            var p = i.padding;
            if (p != fa && (i.scale[0] < 0 || i.scale[1] < 0)) {
              var f = i.padding[0], d = i.padding[1], g = i.padding[2], y = i.padding[3];
              i.scale[0] < 0 && (d = -d, y = -y), i.scale[1] < 0 && (f = -f, g = -g), p = [f, d, g, y]
            }
            var m = this.pixelRatio;
            this.instructions.push([Ig.DRAW_IMAGE, a, R, null, NaN, NaN, NaN, 1, 0, 0, this.textRotateWithView_, this.textRotation_, [1, 1], NaN, this.declutterImageWithText_, p == fa ? fa : p.map((function (t) {
              return t * m
            })), !!i.backgroundFill, !!i.backgroundStroke, this.text_, this.textKey_, this.strokeKey_, this.fillKey_, this.textOffsetX_, this.textOffsetY_, c]);
            var v = 1 / m;
            this.hitDetectionInstructions.push([Ig.DRAW_IMAGE, a, R, null, NaN, NaN, NaN, 1, 0, 0, this.textRotateWithView_, this.textRotation_, [v, v], NaN, this.declutterImageWithText_, p, !!i.backgroundFill, !!i.backgroundStroke, this.text_, this.textKey_, this.strokeKey_, this.fillKey_, this.textOffsetX_, this.textOffsetY_, c]), this.endGeometry(e)
          } else {
            if (!Re(this.getBufferedMaxExtent(), t.getExtent())) return;
            var _ = void 0;
            if (l = t.getFlatCoordinates(), s == bt.LINE_STRING) _ = [l.length]; else if (s == bt.MULTI_LINE_STRING) _ = t.getEnds(); else if (s == bt.POLYGON) _ = t.getEnds().slice(0, 1); else if (s == bt.MULTI_POLYGON) {
              var b = t.getEndss();
              _ = [];
              for (var x = 0, w = b.length; x < w; ++x) _.push(b[x][0])
            }
            this.beginGeometry(t, e);
            for (var S = i.textAlign, E = 0, T = void 0, C = 0, O = _.length; C < O; ++C) {
              if (null == S) {
                var P = Gg(i.maxAngle, l, E, _[C], u);
                E = P[0], T = P[1]
              } else T = _[C];
              for (var x = E; x < T; x += u) o.push(l[x], l[x + 1]);
              var R = o.length;
              E = _[C], this.drawChars_(a, R), a = R
            }
            this.endGeometry(e)
          }
        }
      }, e.prototype.saveTextStates_ = function () {
        var t = this.textStrokeState_, e = this.textState_, r = this.textFillState_, n = this.strokeKey_;
        t && (n in this.strokeStates || (this.strokeStates[n] = {
          strokeStyle: t.strokeStyle,
          lineCap: t.lineCap,
          lineDashOffset: t.lineDashOffset,
          lineWidth: t.lineWidth,
          lineJoin: t.lineJoin,
          miterLimit: t.miterLimit,
          lineDash: t.lineDash
        }));
        var i = this.textKey_;
        i in this.textStates || (this.textStates[i] = {
          font: e.font,
          textAlign: e.textAlign || "center",
          textBaseline: e.textBaseline || "middle",
          scale: e.scale
        });
        var o = this.fillKey_;
        r && (o in this.fillStates || (this.fillStates[o] = {fillStyle: r.fillStyle}))
      }, e.prototype.drawChars_ = function (t, e) {
        var r = this.textStrokeState_, n = this.textState_, i = this.strokeKey_, o = this.textKey_, a = this.fillKey_;
        this.saveTextStates_();
        var s = this.pixelRatio, l = Ug[n.textBaseline], u = this.textOffsetY_ * s, c = this.text_,
          h = r ? r.lineWidth * Math.abs(n.scale[0]) / 2 : 0;
        this.instructions.push([Ig.DRAW_CHARS, t, e, l, n.overflow, a, n.maxAngle, s, u, i, h * s, c, o, 1]), this.hitDetectionInstructions.push([Ig.DRAW_CHARS, t, e, l, n.overflow, a, n.maxAngle, 1, u, i, h, c, o, 1 / s])
      }, e.prototype.setTextStyle = function (t, e) {
        var r, n, i;
        if (t) {
          var a = t.getFill();
          a ? ((n = this.textFillState_) || (n = {}, this.textFillState_ = n), n.fillStyle = Tu(a.getColor() || "#000")) : (n = null, this.textFillState_ = n);
          var s = t.getStroke();
          if (s) {
            (i = this.textStrokeState_) || (i = {}, this.textStrokeState_ = i);
            var l = s.getLineDash(), u = s.getLineDashOffset(), c = s.getWidth(), h = s.getMiterLimit();
            i.lineCap = s.getLineCap() || "round", i.lineDash = l ? l.slice() : pa, i.lineDashOffset = void 0 === u ? 0 : u, i.lineJoin = s.getLineJoin() || "round", i.lineWidth = void 0 === c ? 1 : c, i.miterLimit = void 0 === h ? 10 : h, i.strokeStyle = Tu(s.getColor() || "#000")
          } else i = null, this.textStrokeState_ = i;
          r = this.textState_;
          var p = t.getFont() || "10px sans-serif";
          ba(p);
          var f = t.getScaleArray();
          r.overflow = t.getOverflow(), r.font = p, r.maxAngle = t.getMaxAngle(), r.placement = t.getPlacement(), r.textAlign = t.getTextAlign(), r.textBaseline = t.getTextBaseline() || "middle", r.backgroundFill = t.getBackgroundFill(), r.backgroundStroke = t.getBackgroundStroke(), r.padding = t.getPadding() || fa, r.scale = void 0 === f ? [1, 1] : f;
          var d = t.getOffsetX(), g = t.getOffsetY(), y = t.getRotateWithView(), m = t.getRotation();
          this.text_ = t.getText() || "", this.textOffsetX_ = void 0 === d ? 0 : d, this.textOffsetY_ = void 0 === g ? 0 : g, this.textRotateWithView_ = void 0 !== y && y, this.textRotation_ = void 0 === m ? 0 : m, this.strokeKey_ = i ? ("string" == typeof i.strokeStyle ? i.strokeStyle : o(i.strokeStyle)) + i.lineCap + i.lineDashOffset + "|" + i.lineWidth + i.lineJoin + i.miterLimit + "[" + i.lineDash.join() + "]" : "", this.textKey_ = r.font + r.scale + (r.textAlign || "?") + (r.textBaseline || "?"), this.fillKey_ = n ? "string" == typeof n.fillStyle ? n.fillStyle : "|" + o(n.fillStyle) : ""
        } else this.text_ = "";
        this.declutterImageWithText_ = e
      }, e
    }(Mg), Vg = {Circle: Dg, Default: Mg, Image: Ag, LineString: jg, Polygon: Dg, Text: Bg}, Yg = function () {
      function t(t, e, r, n) {
        this.tolerance_ = t, this.maxExtent_ = e, this.pixelRatio_ = n, this.resolution_ = r, this.buildersByZIndex_ = {}
      }

      return t.prototype.finish = function () {
        var t = {};
        for (var e in this.buildersByZIndex_) {
          t[e] = t[e] || {};
          var r = this.buildersByZIndex_[e];
          for (var n in r) {
            var i = r[n].finish();
            t[e][n] = i
          }
        }
        return t
      }, t.prototype.getBuilder = function (t, e) {
        var r = void 0 !== t ? t.toString() : "0", n = this.buildersByZIndex_[r];
        void 0 === n && (n = {}, this.buildersByZIndex_[r] = n);
        var i = n[e];
        void 0 === i && (i = new (0, Vg[e])(this.tolerance_, this.maxExtent_, this.resolution_, this.pixelRatio_), n[e] = i);
        return i
      }, t
    }();

    function Wg(t, e, r, n, i, o, a, s, l, u, c, h) {
      var p = t[e], f = t[e + 1], d = 0, g = 0, y = 0, m = 0;

      function v() {
        d = p, g = f, p = t[e += n], f = t[e + 1], m += y, y = Math.sqrt((p - d) * (p - d) + (f - g) * (f - g))
      }

      do {
        v()
      } while (e < r - n && m + y < o);
      for (var _ = (o - m) / y, b = qe(d, p, _), x = qe(g, f, _), w = e - n, S = m, E = o + s * l(u, i, c); e < r - n && m + y < E;) v();
      var T, C = qe(d, p, _ = (E - m) / y), O = qe(g, f, _);
      if (h) {
        var P = [b, x, C, O];
        un(P, 0, 4, 2, h, P, P), T = P[0] > P[2]
      } else T = b > C;
      var R, I = Math.PI, L = [], M = w + n === e;
      if (y = 0, m = S, p = t[e = w], f = t[e + 1], M) {
        v();
        var F = Math.atan2(f - g, p - d);
        T && (F += F > 0 ? -I : I);
        var A = (C + b) / 2, k = (O + x) / 2;
        return L[0] = [A, k, (E - o) / 2, F, i], L
      }
      for (var j = 0, N = i.length; j < N;) {
        v();
        var D = Math.atan2(f - g, p - d);
        if (T && (D += D > 0 ? -I : I), void 0 !== R) {
          var G = D - R;
          if (G += G > I ? -2 * I : G < -I ? 2 * I : 0, Math.abs(G) > a) return null
        }
        R = D;
        for (var z = j, U = 0; j < N; ++j) {
          var B = s * l(u, i[T ? N - j - 1 : j], c);
          if (e + n < r && m + y < o + U + B / 2) break;
          U += B
        }
        if (j !== z) {
          var V = T ? i.substring(N - z, N - j) : i.substring(z, j);
          A = qe(d, p, _ = (o + U / 2 - m) / y), k = qe(g, f, _);
          L.push([A, k, U / 2, D, V]), o += U
        }
      }
      return L
    }

    function qg(t, e, r, n) {
      for (var i = t[e], o = t[e + 1], a = 0, s = e + n; s < r; s += n) {
        var l = t[s], u = t[s + 1];
        a += Math.sqrt((l - i) * (l - i) + (u - o) * (u - o)), i = l, o = u
      }
      return a
    }

    var Xg = [1 / 0, 1 / 0, -1 / 0, -1 / 0], Zg = [], Kg = [], Hg = [], $g = [];

    function Jg(t) {
      return t[3].declutterBox
    }

    var Qg = new RegExp("[" + String.fromCharCode(1425) + "-" + String.fromCharCode(2303) + String.fromCharCode(64285) + "-" + String.fromCharCode(65023) + String.fromCharCode(65136) + "-" + String.fromCharCode(65276) + String.fromCharCode(67584) + "-" + String.fromCharCode(69631) + String.fromCharCode(124928) + "-" + String.fromCharCode(126975) + "]");

    function ty(t, e) {
      return "start" !== e && "end" !== e || Qg.test(t) || (e = "start" === e ? "left" : "right"), Ug[e]
    }

    var ey = function () {
      function t(t, e, r, n, i) {
        this.overlaps = r, this.pixelRatio = e, this.resolution = t, this.alignFill_, this.instructions = n.instructions, this.coordinates = n.coordinates, this.coordinateCache_ = {}, this.renderBuffer_ = i, this.renderedTransform_ = [1, 0, 0, 1, 0, 0], this.hitDetectionInstructions = n.hitDetectionInstructions, this.pixelCoordinates_ = null, this.viewRotation_ = 0, this.fillStates = n.fillStates || {}, this.strokeStates = n.strokeStates || {}, this.textStates = n.textStates || {}, this.widths_ = {}, this.labels_ = {}
      }

      return t.prototype.createLabel = function (t, e, r, n) {
        var i = t + e + r + n;
        if (this.labels_[i]) return this.labels_[i];
        var o = n ? this.strokeStates[n] : null, a = r ? this.fillStates[r] : null, s = this.textStates[e],
          l = this.pixelRatio, u = [s.scale[0] * l, s.scale[1] * l], c = ty(t, s.textAlign || "center"),
          h = n && o.lineWidth ? o.lineWidth : 0, p = t.split("\n"), f = p.length, d = [], g = Ta(s.font, p, d),
          y = xa(s.font), m = g + h, v = [], _ = (m + 2) * u[0], b = (y * f + h) * u[1], x = {
            width: _ < 0 ? Math.floor(_) : Math.ceil(_),
            height: b < 0 ? Math.floor(b) : Math.ceil(b),
            contextInstructions: v
          };
        (1 == u[0] && 1 == u[1] || v.push("scale", u), v.push("font", s.font), n) && (v.push("strokeStyle", o.strokeStyle), v.push("lineWidth", h), v.push("lineCap", o.lineCap), v.push("lineJoin", o.lineJoin), v.push("miterLimit", o.miterLimit), (Yi ? OffscreenCanvasRenderingContext2D : CanvasRenderingContext2D).prototype.setLineDash && (v.push("setLineDash", [o.lineDash]), v.push("lineDashOffset", o.lineDashOffset)));
        r && v.push("fillStyle", a.fillStyle), v.push("textBaseline", "middle"), v.push("textAlign", "center");
        var w, S = .5 - c, E = c * m + S * h;
        if (n) for (w = 0; w < f; ++w) v.push("strokeText", [p[w], E + S * d[w], .5 * (h + y) + w * y]);
        if (r) for (w = 0; w < f; ++w) v.push("fillText", [p[w], E + S * d[w], .5 * (h + y) + w * y]);
        return this.labels_[i] = x, x
      }, t.prototype.replayTextBackground_ = function (t, e, r, n, i, o, a) {
        t.beginPath(), t.moveTo.apply(t, e), t.lineTo.apply(t, r), t.lineTo.apply(t, n), t.lineTo.apply(t, i), t.lineTo.apply(t, e), o && (this.alignFill_ = o[2], this.fill_(t)), a && (this.setStrokeStyle_(t, a), t.stroke())
      }, t.prototype.calculateImageOrLabelDimensions_ = function (t, e, r, n, i, o, a, s, l, u, c, h, p, f, d, g) {
        var y, m = r - (a *= h[0]), v = n - (s *= h[1]), _ = i + l > t ? t - l : i, b = o + u > e ? e - u : o,
          x = f[3] + _ * h[0] + f[1], w = f[0] + b * h[1] + f[2], S = m - f[3], E = v - f[0];
        return (d || 0 !== c) && (Zg[0] = S, $g[0] = S, Zg[1] = E, Kg[1] = E, Kg[0] = S + x, Hg[0] = Kg[0], Hg[1] = E + w, $g[1] = Hg[1]), 0 !== c ? (It(y = kt([1, 0, 0, 1, 0, 0], r, n, 1, 1, c, -r, -n), Zg), It(y, Kg), It(y, Hg), It(y, $g), ie(Math.min(Zg[0], Kg[0], Hg[0], $g[0]), Math.min(Zg[1], Kg[1], Hg[1], $g[1]), Math.max(Zg[0], Kg[0], Hg[0], $g[0]), Math.max(Zg[1], Kg[1], Hg[1], $g[1]), Xg)) : ie(Math.min(S, S + x), Math.min(E, E + w), Math.max(S, S + x), Math.max(E, E + w), Xg), p && (m = Math.round(m), v = Math.round(v)), {
          drawImageX: m,
          drawImageY: v,
          drawImageW: _,
          drawImageH: b,
          originX: l,
          originY: u,
          declutterBox: {minX: Xg[0], minY: Xg[1], maxX: Xg[2], maxY: Xg[3], value: g},
          canvasTransform: y,
          scale: h
        }
      }, t.prototype.replayImageOrLabel_ = function (t, e, r, n, i, o, a) {
        var s = !(!o && !a), l = n.declutterBox, u = t.canvas, c = a ? a[2] * n.scale[0] / 2 : 0;
        return l.minX - c <= u.width / e && l.maxX + c >= 0 && l.minY - c <= u.height / e && l.maxY + c >= 0 && (s && this.replayTextBackground_(t, Zg, Kg, Hg, $g, o, a), Oa(t, n.canvasTransform, i, r, n.originX, n.originY, n.drawImageW, n.drawImageH, n.drawImageX, n.drawImageY, n.scale)), !0
      }, t.prototype.fill_ = function (t) {
        if (this.alignFill_) {
          var e = It(this.renderedTransform_, [0, 0]), r = 512 * this.pixelRatio;
          t.save(), t.translate(e[0] % r, e[1] % r), t.rotate(this.viewRotation_)
        }
        t.fill(), this.alignFill_ && t.restore()
      }, t.prototype.setStrokeStyle_ = function (t, e) {
        t.strokeStyle = e[1], t.lineWidth = e[2], t.lineCap = e[3], t.lineJoin = e[4], t.miterLimit = e[5], t.setLineDash && (t.lineDashOffset = e[7], t.setLineDash(e[6]))
      }, t.prototype.drawLabelWithPointPlacement_ = function (t, e, r, n) {
        var i = this.textStates[e], o = this.createLabel(t, e, n, r), a = this.strokeStates[r], s = this.pixelRatio,
          l = ty(t, i.textAlign || "center"), u = Ug[i.textBaseline || "middle"],
          c = a && a.lineWidth ? a.lineWidth : 0;
        return {
          label: o,
          anchorX: l * (o.width / s - 2 * i.scale[0]) + 2 * (.5 - l) * c,
          anchorY: u * o.height / s + 2 * (.5 - u) * c
        }
      }, t.prototype.execute_ = function (t, e, r, n, i, o, a, s) {
        var l;
        this.pixelCoordinates_ && b(r, this.renderedTransform_) ? l = this.pixelCoordinates_ : (this.pixelCoordinates_ || (this.pixelCoordinates_ = []), l = ln(this.coordinates, 0, this.coordinates.length, 2, r, this.pixelCoordinates_), Rt(this.renderedTransform_, r));
        for (var u, c, h, p, f, d, g, y, m, v, _, x, w, S, E, T, C = 0, O = n.length, P = 0, R = 0, I = 0, L = null, M = null, F = this.coordinateCache_, A = this.viewRotation_, k = Math.round(1e12 * Math.atan2(-r[1], r[0])) / 1e12, j = {
          context: t,
          pixelRatio: this.pixelRatio,
          resolution: this.resolution,
          rotation: A
        }, N = this.instructions != n || this.overlaps ? 0 : 200; C < O;) {
          var D = n[C];
          switch (D[0]) {
            case Ig.BEGIN_GEOMETRY:
              w = D[1], T = D[3], w.getGeometry() ? void 0 === a || Re(a, T.getExtent()) ? ++C : C = D[2] + 1 : C = D[2];
              break;
            case Ig.BEGIN_PATH:
              R > N && (this.fill_(t), R = 0), I > N && (t.stroke(), I = 0), R || I || (t.beginPath(), p = NaN, f = NaN), ++C;
              break;
            case Ig.CIRCLE:
              var G = l[P = D[1]], z = l[P + 1], U = l[P + 2] - G, B = l[P + 3] - z, V = Math.sqrt(U * U + B * B);
              t.moveTo(G + V, z), t.arc(G, z, V, 0, 2 * Math.PI, !0), ++C;
              break;
            case Ig.CLOSE_PATH:
              t.closePath(), ++C;
              break;
            case Ig.CUSTOM:
              P = D[1], u = D[2];
              var Y = D[3], W = D[4], q = 6 == D.length ? D[5] : void 0;
              j.geometry = Y, j.feature = w, C in F || (F[C] = []);
              var X = F[C];
              q ? q(l, P, u, 2, X) : (X[0] = l[P], X[1] = l[P + 1], X.length = 2), W(X, j), ++C;
              break;
            case Ig.DRAW_IMAGE:
              P = D[1], u = D[2], y = D[3], c = D[4], h = D[5];
              var Z = D[6], K = D[7], H = D[8], $ = D[9], J = D[10], Q = D[11], tt = D[12], et = D[13], rt = D[14];
              if (!y && D.length >= 19) {
                m = D[18], v = D[19], _ = D[20], x = D[21];
                var nt = this.drawLabelWithPointPlacement_(m, v, _, x);
                y = nt.label, D[3] = y;
                var it = D[22];
                c = (nt.anchorX - it) * this.pixelRatio, D[4] = c;
                var ot = D[23];
                h = (nt.anchorY - ot) * this.pixelRatio, D[5] = h, Z = y.height, D[6] = Z, et = y.width, D[13] = et
              }
              var at = void 0;
              D.length > 24 && (at = D[24]);
              var st = void 0, lt = void 0, ut = void 0;
              D.length > 16 ? (st = D[15], lt = D[16], ut = D[17]) : (st = fa, lt = !1, ut = !1), J && k ? Q += A : J || k || (Q -= A);
              for (var ct = 0; P < u; P += 2) if (!(at && at[ct++] < et / this.pixelRatio)) {
                var ht = [t, e, y, Dt = this.calculateImageOrLabelDimensions_(y.width, y.height, l[P], l[P + 1], et, Z, c, h, H, $, Q, tt, i, st, lt || ut, w), K, lt ? L : null, ut ? M : null],
                  pt = void 0, ft = void 0;
                if (s && rt) {
                  if (!rt[P]) {
                    rt[P] = ht;
                    continue
                  }
                  if (pt = rt[P], delete rt[P], ft = Jg(pt), s.collides(ft)) continue
                }
                s && s.collides(Dt.declutterBox) || (pt && (s && s.insert(ft), this.replayImageOrLabel_.apply(this, pt)), s && s.insert(Dt.declutterBox), this.replayImageOrLabel_.apply(this, ht))
              }
              ++C;
              break;
            case Ig.DRAW_CHARS:
              var dt = D[1], gt = D[2], yt = D[3], mt = D[4];
              x = D[5];
              var vt = D[6], _t = D[7], bt = D[8];
              _ = D[9];
              var xt = D[10];
              m = D[11], v = D[12];
              var wt = [D[13], D[13]], St = this.textStates[v], Et = St.font, Tt = [St.scale[0] * _t, St.scale[1] * _t],
                Ct = void 0;
              Et in this.widths_ ? Ct = this.widths_[Et] : (Ct = {}, this.widths_[Et] = Ct);
              var Ot = qg(l, dt, gt, 2), Pt = Math.abs(Tt[0]) * Ea(Et, m, Ct);
              if (mt || Pt <= Ot) {
                var It = this.textStates[v].textAlign,
                  Lt = Wg(l, dt, gt, 2, m, (Ot - Pt) * Ug[It], vt, Math.abs(Tt[0]), Ea, Et, Ct, k ? 0 : this.viewRotation_);
                t:if (Lt) {
                  var Mt = [], Ft = void 0, At = void 0, kt = void 0, jt = void 0, Nt = void 0;
                  if (_) for (Ft = 0, At = Lt.length; Ft < At; ++Ft) {
                    kt = (Nt = Lt[Ft])[4], jt = this.createLabel(kt, v, "", _), c = Nt[2] + (Tt[0] < 0 ? -xt : xt), h = yt * jt.height + 2 * (.5 - yt) * xt * Tt[1] / Tt[0] - bt;
                    var Dt = this.calculateImageOrLabelDimensions_(jt.width, jt.height, Nt[0], Nt[1], jt.width, jt.height, c, h, 0, 0, Nt[3], wt, !1, fa, !1, w);
                    if (s && s.collides(Dt.declutterBox)) break t;
                    Mt.push([t, e, jt, Dt, 1, null, null])
                  }
                  if (x) for (Ft = 0, At = Lt.length; Ft < At; ++Ft) {
                    kt = (Nt = Lt[Ft])[4], jt = this.createLabel(kt, v, x, ""), c = Nt[2], h = yt * jt.height - bt;
                    Dt = this.calculateImageOrLabelDimensions_(jt.width, jt.height, Nt[0], Nt[1], jt.width, jt.height, c, h, 0, 0, Nt[3], wt, !1, fa, !1, w);
                    if (s && s.collides(Dt.declutterBox)) break t;
                    Mt.push([t, e, jt, Dt, 1, null, null])
                  }
                  s && s.load(Mt.map(Jg));
                  for (var Gt = 0, zt = Mt.length; Gt < zt; ++Gt) this.replayImageOrLabel_.apply(this, Mt[Gt])
                }
              }
              ++C;
              break;
            case Ig.END_GEOMETRY:
              if (void 0 !== o) {
                var Ut = o(w = D[1], T);
                if (Ut) return Ut
              }
              ++C;
              break;
            case Ig.FILL:
              N ? R++ : this.fill_(t), ++C;
              break;
            case Ig.MOVE_TO_LINE_TO:
              for (P = D[1], u = D[2], S = l[P], g = (E = l[P + 1]) + .5 | 0, (d = S + .5 | 0) === p && g === f || (t.moveTo(S, E), p = d, f = g), P += 2; P < u; P += 2) d = (S = l[P]) + .5 | 0, g = (E = l[P + 1]) + .5 | 0, P != u - 2 && d === p && g === f || (t.lineTo(S, E), p = d, f = g);
              ++C;
              break;
            case Ig.SET_FILL_STYLE:
              L = D, this.alignFill_ = D[2], R && (this.fill_(t), R = 0, I && (t.stroke(), I = 0)), t.fillStyle = D[1], ++C;
              break;
            case Ig.SET_STROKE_STYLE:
              M = D, I && (t.stroke(), I = 0), this.setStrokeStyle_(t, D), ++C;
              break;
            case Ig.STROKE:
              N ? I++ : t.stroke(), ++C;
              break;
            default:
              ++C
          }
        }
        R && this.fill_(t), I && t.stroke()
      }, t.prototype.execute = function (t, e, r, n, i, o) {
        this.viewRotation_ = n, this.execute_(t, e, r, this.instructions, i, void 0, void 0, o)
      }, t.prototype.executeHitDetection = function (t, e, r, n, i) {
        return this.viewRotation_ = r, this.execute_(t, 1, e, this.hitDetectionInstructions, !0, n, i)
      }, t
    }(), ry = [Bu, Du, Uu, zu, Vu, Gu], ny = function () {
      function t(t, e, r, n, i, o) {
        this.maxExtent_ = t, this.overlaps_ = n, this.pixelRatio_ = r, this.resolution_ = e, this.renderBuffer_ = o, this.executorsByZIndex_ = {}, this.hitDetectionContext_ = null, this.hitDetectionTransform_ = [1, 0, 0, 1, 0, 0], this.createExecutors_(i)
      }

      return t.prototype.clip = function (t, e) {
        var r = this.getClipCoords(e);
        t.beginPath(), t.moveTo(r[0], r[1]), t.lineTo(r[2], r[3]), t.lineTo(r[4], r[5]), t.lineTo(r[6], r[7]), t.clip()
      }, t.prototype.createExecutors_ = function (t) {
        for (var e in t) {
          var r = this.executorsByZIndex_[e];
          void 0 === r && (r = {}, this.executorsByZIndex_[e] = r);
          var n = t[e], i = [this.renderBuffer_ || 0, this.renderBuffer_ || 0];
          for (var o in n) {
            var a = n[o];
            r[o] = new ey(this.resolution_, this.pixelRatio_, this.overlaps_, a, i)
          }
        }
      }, t.prototype.hasExecutors = function (t) {
        for (var e in this.executorsByZIndex_) for (var r = this.executorsByZIndex_[e], n = 0, i = t.length; n < i; ++n) if (t[n] in r) return !0;
        return !1
      }, t.prototype.forEachFeatureAtCoordinate = function (t, e, r, n, i, o) {
        var a = 2 * (n = Math.round(n)) + 1,
          s = kt(this.hitDetectionTransform_, n + .5, n + .5, 1 / e, -1 / e, -r, -t[0], -t[1]),
          l = !this.hitDetectionContext_;
        l && (this.hitDetectionContext_ = uo(a, a));
        var u, c = this.hitDetectionContext_;
        c.canvas.width !== a || c.canvas.height !== a ? (c.canvas.width = a, c.canvas.height = a) : l || c.clearRect(0, 0, a, a), void 0 !== this.renderBuffer_ && (pe(u = [1 / 0, 1 / 0, -1 / 0, -1 / 0], t), Ht(u, e * (this.renderBuffer_ + n), u));
        var h, p = oy(n);

        function f(t, e) {
          for (var r = c.getImageData(0, 0, a, a).data, s = 0, l = p.length; s < l; s++) if (r[p[s]] > 0) {
            if (!o || h !== zu && h !== Vu || -1 !== o.indexOf(t)) {
              var u = (p[s] - 3) / 4, f = n - u % a, d = n - (u / a | 0), g = i(t, e, f * f + d * d);
              if (g) return g
            }
            c.clearRect(0, 0, a, a);
            break
          }
        }

        var g, y, m, v, _, b = Object.keys(this.executorsByZIndex_).map(Number);
        for (b.sort(d), g = b.length - 1; g >= 0; --g) {
          var x = b[g].toString();
          for (m = this.executorsByZIndex_[x], y = ry.length - 1; y >= 0; --y) if (void 0 !== (v = m[h = ry[y]]) && (_ = v.executeHitDetection(c, s, r, f, u))) return _
        }
      }, t.prototype.getClipCoords = function (t) {
        var e = this.maxExtent_;
        if (!e) return null;
        var r = e[0], n = e[1], i = e[2], o = e[3], a = [r, n, r, o, i, o, i, n];
        return ln(a, 0, 8, 2, t, a), a
      }, t.prototype.isEmpty = function () {
        return I(this.executorsByZIndex_)
      }, t.prototype.execute = function (t, e, r, n, i, o, a) {
        var s = Object.keys(this.executorsByZIndex_).map(Number);
        s.sort(d), this.maxExtent_ && (t.save(), this.clip(t, r));
        var l, u, c, h, p, f, g = o || ry;
        for (a && s.reverse(), l = 0, u = s.length; l < u; ++l) {
          var y = s[l].toString();
          for (p = this.executorsByZIndex_[y], c = 0, h = g.length; c < h; ++c) {
            void 0 !== (f = p[g[c]]) && f.execute(t, e, r, n, i, a)
          }
        }
        this.maxExtent_ && t.restore()
      }, t
    }(), iy = {};

    function oy(t) {
      if (void 0 !== iy[t]) return iy[t];
      for (var e = 2 * t + 1, r = t * t, n = new Array(r + 1), i = 0; i <= t; ++i) for (var o = 0; o <= t; ++o) {
        var a = i * i + o * o;
        if (a > r) break;
        var s = n[a];
        s || (s = [], n[a] = s), s.push(4 * ((t + i) * e + (t + o)) + 3), i > 0 && s.push(4 * ((t - i) * e + (t + o)) + 3), o > 0 && (s.push(4 * ((t + i) * e + (t - o)) + 3), i > 0 && s.push(4 * ((t - i) * e + (t - o)) + 3))
      }
      for (var l = [], u = (i = 0, n.length); i < u; ++i) n[i] && l.push.apply(l, n[i]);
      return iy[t] = l, l
    }

    var ay = ny;

    function sy(t, e, r, n, i, o, a) {
      var s = uo(t[0] / 2, t[1] / 2);
      s.imageSmoothingEnabled = !1;
      for (var l = s.canvas, u = new Nu(s, .5, i, null, a), c = r.length, h = Math.floor(16777215 / c), p = {}, f = 1; f <= c; ++f) {
        var g = r[f - 1], y = g.getStyleFunction() || n;
        if (n) {
          var m = y(g, o);
          if (m) {
            Array.isArray(m) || (m = [m]);
            for (var v = "#" + ("000000" + (f * h).toString(16)).slice(-6), _ = 0, b = m.length; _ < b; ++_) {
              var x = m[_], w = x.clone(), S = w.getFill();
              S && S.setColor(v);
              var E = w.getStroke();
              E && E.setColor(v), w.setText(void 0);
              var T = x.getImage();
              if (T) {
                var C = T.getImageSize();
                if (!C) continue;
                var O = document.createElement("canvas");
                O.width = C[0], O.height = C[1];
                var P = O.getContext("2d", {alpha: !1});
                P.fillStyle = v;
                var R = P.canvas;
                P.fillRect(0, 0, R.width, R.height), uo(C ? C[0] : R.width, C ? C[1] : R.height).drawImage(R, 0, 0), w.setImage(new dp({
                  img: R,
                  imgSize: C,
                  anchor: T.getAnchor(),
                  anchorXUnits: np,
                  anchorYUnits: np,
                  offset: T.getOrigin(),
                  size: T.getSize(),
                  opacity: T.getOpacity(),
                  scale: T.getScale(),
                  rotation: T.getRotation(),
                  rotateWithView: T.getRotateWithView()
                }))
              }
              var I = Number(w.getZIndex());
              (A = p[I]) || (A = {}, p[I] = A, A[bt.POLYGON] = [], A[bt.CIRCLE] = [], A[bt.LINE_STRING] = [], A[bt.POINT] = []);
              var L = w.getGeometryFunction()(g);
              L && Re(i, L.getExtent()) && A[L.getType().replace("Multi", "")].push(L, w)
            }
          }
        }
      }
      for (var M = Object.keys(p).map(Number).sort(d), F = (f = 0, M.length); f < F; ++f) {
        var A = p[M[f]];
        for (var k in A) {
          var j = A[k];
          for (_ = 0, b = j.length; _ < b; _ += 2) {
            u.setStyle(j[_ + 1]);
            for (var N = 0, D = e.length; N < D; ++N) u.setTransform(e[N]), u.drawGeometry(j[_])
          }
        }
      }
      return s.getImageData(0, 0, l.width, l.height)
    }

    function ly(t, e, r) {
      var n = [];
      if (r) {
        var i = 4 * (Math.round(t[0] / 2) + Math.round(t[1] / 2) * r.width), o = r.data[i], a = r.data[i + 1],
          s = r.data[i + 2] + 256 * (a + 256 * o), l = Math.floor(16777215 / e.length);
        s && s % l == 0 && n.push(e[s / l - 1])
      }
      return n
    }

    var uy = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), cy = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          return r.boundHandleStyleImageChange_ = r.handleStyleImageChange_.bind(r), r.animatingOrInteracting_, r.dirty_ = !1, r.hitDetectionImageData_ = null, r.renderedFeatures_ = null, r.renderedRevision_ = -1, r.renderedResolution_ = NaN, r.renderedExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], r.renderedRotation_, r.renderedCenter_ = null, r.renderedProjection_ = null, r.renderedRenderOrder_ = null, r.replayGroup_ = null, r.replayGroupChanged = !0, r.declutterExecutorGroup = null, r.clipping = !0, r
        }

        return uy(e, t), e.prototype.useContainer = function (e, r, n) {
          n < 1 && (e = null), t.prototype.useContainer.call(this, e, r, n)
        }, e.prototype.renderWorlds = function (t, e, r) {
          var n = e.extent, i = e.viewState, o = i.center, a = i.resolution, s = i.projection, l = i.rotation,
            u = s.getExtent(), c = this.getLayer().getSource(), h = e.pixelRatio, p = e.viewHints, f = !(p[ns] || p[is]),
            d = this.context, g = Math.round(e.size[0] * h), y = Math.round(e.size[1] * h),
            m = c.getWrapX() && s.canWrapX(), v = m ? Pe(u) : null, _ = m ? Math.ceil((n[2] - u[2]) / v) + 1 : 1,
            b = m ? Math.floor((n[0] - u[0]) / v) : 0;
          do {
            var x = this.getRenderTransform(o, a, l, h, g, y, b * v);
            t.execute(d, 1, x, l, f, void 0, r)
          } while (++b < _)
        }, e.prototype.renderDeclutter = function (t) {
          this.declutterExecutorGroup && this.renderWorlds(this.declutterExecutorGroup, t, t.declutterTree)
        }, e.prototype.renderFrame = function (t, e) {
          var r = t.pixelRatio, n = t.layerStatesArray[t.layerIndex];
          Ft(this.pixelTransform, 1 / r, 1 / r), jt(this.inversePixelTransform, this.pixelTransform);
          var i = Dt(this.pixelTransform);
          this.useContainer(e, i, n.opacity);
          var o = this.context, a = o.canvas, s = this.replayGroup_, l = this.declutterExecutorGroup;
          if ((!s || s.isEmpty()) && (!l || l.isEmpty())) return !this.containerReused && a.width > 0 && (a.width = 0), this.container;
          var u = Math.round(t.size[0] * r), c = Math.round(t.size[1] * r);
          a.width != u || a.height != c ? (a.width = u, a.height = c, a.style.transform !== i && (a.style.transform = i)) : this.containerReused || o.clearRect(0, 0, u, c), this.preRender(o, t);
          var h = t.viewState, p = h.projection, f = !1;
          if (n.extent && this.clipping) {
            var d = on(n.extent, p);
            (f = !te(d, t.extent) && Re(d, t.extent)) && this.clipUnrotated(o, t, d)
          }
          this.renderWorlds(s, t), f && o.restore(), this.postRender(o, t);
          var g = n.opacity, y = this.container;
          return g !== parseFloat(y.style.opacity) && (y.style.opacity = 1 === g ? "" : String(g)), this.renderedRotation_ !== h.rotation && (this.renderedRotation_ = h.rotation, this.hitDetectionImageData_ = null), this.container
        }, e.prototype.getFeatures = function (t) {
          return new Promise(function (e) {
            if (!this.hitDetectionImageData_ && !this.animatingOrInteracting_) {
              var r = [this.context.canvas.width, this.context.canvas.height];
              It(this.pixelTransform, r);
              var n = this.renderedCenter_, i = this.renderedResolution_, o = this.renderedRotation_,
                a = this.renderedProjection_, s = this.renderedExtent_, l = this.getLayer(), u = [], c = r[0] / 2,
                h = r[1] / 2;
              u.push(this.getRenderTransform(n, i, o, .5, c, h, 0).slice());
              var p = l.getSource(), f = a.getExtent();
              if (p.getWrapX() && a.canWrapX() && !te(f, s)) {
                for (var d = s[0], g = Pe(f), y = 0, m = void 0; d < f[0];) m = g * --y, u.push(this.getRenderTransform(n, i, o, .5, c, h, m).slice()), d += g;
                for (y = 0, d = s[2]; d > f[2];) m = g * ++y, u.push(this.getRenderTransform(n, i, o, .5, c, h, m).slice()), d -= g
              }
              this.hitDetectionImageData_ = sy(r, u, this.renderedFeatures_, l.getStyleFunction(), s, i, o)
            }
            e(ly(t, this.renderedFeatures_, this.hitDetectionImageData_))
          }.bind(this))
        }, e.prototype.forEachFeatureAtCoordinate = function (t, e, r, n, i) {
          var a = this;
          if (this.replayGroup_) {
            var s, l = e.viewState.resolution, u = e.viewState.rotation, c = this.getLayer(), h = {},
              p = function (t, e, r) {
                var a = o(t), s = h[a];
                if (s) {
                  if (!0 !== s && r < s.distanceSq) {
                    if (0 === r) return h[a] = !0, i.splice(i.lastIndexOf(s), 1), n(t, c, e);
                    s.geometry = e, s.distanceSq = r
                  }
                } else {
                  if (0 === r) return h[a] = !0, n(t, c, e);
                  i.push(h[a] = {feature: t, layer: c, geometry: e, distanceSq: r, callback: n})
                }
              }, f = [this.replayGroup_];
            return this.declutterExecutorGroup && f.push(this.declutterExecutorGroup), f.some((function (n) {
              return s = n.forEachFeatureAtCoordinate(t, l, u, r, p, n === a.declutterExecutorGroup ? e.declutterTree.all().map((function (t) {
                return t.value
              })) : null)
            })), s
          }
        }, e.prototype.handleFontsChanged = function () {
          var t = this.getLayer();
          t.getVisible() && this.replayGroup_ && t.changed()
        }, e.prototype.handleStyleImageChange_ = function (t) {
          this.renderIfReadyAndVisible()
        }, e.prototype.prepareFrame = function (t) {
          var e = this.getLayer(), r = e.getSource();
          if (!r) return !1;
          var n = t.viewHints[ns], i = t.viewHints[is], o = e.getUpdateWhileAnimating(),
            a = e.getUpdateWhileInteracting();
          if (!this.dirty_ && !o && n || !a && i) return this.animatingOrInteracting_ = !0, !0;
          this.animatingOrInteracting_ = !1;
          var s = t.extent, l = t.viewState, u = l.projection, c = l.resolution, h = t.pixelRatio, p = e.getRevision(),
            f = e.getRenderBuffer(), d = e.getRenderOrder();
          void 0 === d && (d = Wu);
          var g = l.center.slice(), y = Ht(s, f * c), m = [y.slice()], v = u.getExtent();
          if (r.getWrapX() && u.canWrapX() && !te(v, t.extent)) {
            var _ = Pe(v), b = Math.max(Pe(y) / 2, _);
            y[0] = v[0] - b, y[2] = v[2] + b, Fr(g, u);
            var x = ke(m[0], u);
            x[0] < v[0] && x[2] < v[2] ? m.push([x[0] + _, x[1], x[2] + _, x[3]]) : x[0] > v[0] && x[2] > v[2] && m.push([x[0] - _, x[1], x[2] - _, x[3]])
          }
          if (!this.dirty_ && this.renderedResolution_ == c && this.renderedRevision_ == p && this.renderedRenderOrder_ == d && te(this.renderedExtent_, y)) return this.replayGroupChanged = !1, !0;
          this.replayGroup_ = null, this.dirty_ = !1;
          var w, S = new Yg(Xu(c, h), y, c, h);
          this.getLayer().getDeclutter() && (w = new Yg(Xu(c, h), y, c, h));
          var E, T = tn();
          if (T) {
            for (var C = 0, O = m.length; C < O; ++C) r.loadFeatures(nn(m[C], u), c, T);
            E = Zr(T, u)
          } else for (C = 0, O = m.length; C < O; ++C) r.loadFeatures(m[C], c, u);
          var P = qu(c, h), R = function (t) {
            var r, n = t.getStyleFunction() || e.getStyleFunction();
            if (n && (r = n(t, c)), r) {
              var i = this.renderFeature(t, P, r, S, E, w);
              this.dirty_ = this.dirty_ || i
            }
          }.bind(this), I = nn(y, u), L = r.getFeaturesInExtent(I);
          d && L.sort(d);
          for (C = 0, O = L.length; C < O; ++C) R(L[C]);
          this.renderedFeatures_ = L;
          var M = S.finish(), F = new ay(y, c, h, r.getOverlaps(), M, e.getRenderBuffer());
          return w && (this.declutterExecutorGroup = new ay(y, c, h, r.getOverlaps(), w.finish(), e.getRenderBuffer())), this.renderedResolution_ = c, this.renderedRevision_ = p, this.renderedRenderOrder_ = d, this.renderedExtent_ = y, this.renderedCenter_ = g, this.renderedProjection_ = u, this.replayGroup_ = F, this.hitDetectionImageData_ = null, this.replayGroupChanged = !0, !0
        }, e.prototype.renderFeature = function (t, e, r, n, i, o) {
          if (!r) return !1;
          var a = !1;
          if (Array.isArray(r)) for (var s = 0, l = r.length; s < l; ++s) a = Zu(n, t, r[s], e, this.boundHandleStyleImageChange_, i, o) || a; else a = Zu(n, t, r, e, this.boundHandleStyleImageChange_, i, o);
          return a
        }, e
      }(cd), hy = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), py = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          return r.vectorRenderer_ = new cy(e), r.layerImageRatio_ = e.getImageRatio(), r.coordinateToVectorPixelTransform_ = [1, 0, 0, 1, 0, 0], r.renderedPixelToCoordinateTransform_ = null, r
        }

        return hy(e, t), e.prototype.disposeInternal = function () {
          this.vectorRenderer_.dispose(), t.prototype.disposeInternal.call(this)
        }, e.prototype.getFeatures = function (t) {
          if (this.vectorRenderer_) {
            var e = It(this.coordinateToVectorPixelTransform_, It(this.renderedPixelToCoordinateTransform_, t.slice()));
            return this.vectorRenderer_.getFeatures(e)
          }
          return new Promise((function (t, e) {
            t([])
          }))
        }, e.prototype.handleFontsChanged = function () {
          this.vectorRenderer_.handleFontsChanged()
        }, e.prototype.prepareFrame = function (t) {
          var e = t.pixelRatio, r = t.viewState, n = r.resolution, i = t.viewHints, o = this.vectorRenderer_,
            a = t.extent;
          1 !== this.layerImageRatio_ && Me(a = a.slice(0), this.layerImageRatio_);
          var s = Pe(a) / n, l = Ee(a) / n;
          if (!i[ns] && !i[is] && !Ie(a)) {
            o.useContainer(null, null, 1);
            var u = o.context, c = O({}, t, {
              declutterTree: new Pp.a(9),
              extent: a,
              size: [s, l],
              viewState: O({}, t.viewState, {rotation: 0})
            }), h = new $i(a, n, e, u.canvas, (function (t) {
              o.prepareFrame(c) && o.replayGroupChanged && (o.clipping = !1, o.renderFrame(c, null), o.renderDeclutter(c), t())
            }));
            h.addEventListener(F, function () {
              if (h.getState() === ki) {
                this.image_ = h;
                var t = h.getResolution(), n = h.getPixelRatio(), i = t * e / n;
                this.renderedResolution = i, this.coordinateToVectorPixelTransform_ = kt(this.coordinateToVectorPixelTransform_, s / 2, l / 2, 1 / i, -1 / i, 0, -r.center[0], -r.center[1])
              }
            }.bind(this)), h.load()
          }
          return this.image_ && (this.renderedPixelToCoordinateTransform_ = t.pixelToCoordinateTransform.slice()), !!this.image_
        }, e.prototype.preRender = function () {
        }, e.prototype.postRender = function () {
        }, e.prototype.renderDeclutter = function () {
        }, e.prototype.forEachFeatureAtCoordinate = function (e, r, n, i, o) {
          return this.vectorRenderer_ ? this.vectorRenderer_.forEachFeatureAtCoordinate(e, r, n, i, o) : t.prototype.forEachFeatureAtCoordinate.call(this, e, r, n, i, o)
        }, e
      }(pd), fy = "image", dy = "hybrid", gy = "vector", yy = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), my = {image: [Bu, Du, Uu, zu, Vu], hybrid: [Bu, Uu], vector: []},
      vy = {image: [Gu], hybrid: [zu, Vu, Gu], vector: [Bu, Du, Uu, zu, Vu, Gu]}, _y = function (t) {
        function e(e) {
          var r = t.call(this, e) || this;
          return r.boundHandleStyleImageChange_ = r.handleStyleImageChange_.bind(r), r.dirty_ = !1, r.renderedLayerRevision_, r.renderedPixelToCoordinateTransform_ = null, r.renderedRotation_, r.renderTileImageQueue_ = {}, r.tileListenerKeys_ = {}, r.tmpTransform_ = [1, 0, 0, 1, 0, 0], r
        }

        return yy(e, t), e.prototype.prepareTile = function (t, e, r, n) {
          var i, a = o(t), s = t.getState();
          return (s === to && t.hifi || s === eo) && a in this.tileListenerKeys_ && (H(this.tileListenerKeys_[a]), delete this.tileListenerKeys_[a]), s !== to && s !== eo || (this.updateExecutorGroup_(t, e, r), this.tileImageNeedsRender_(t, e, r) && (i = !0, n && (this.renderTileImageQueue_[a] = t))), i
        }, e.prototype.getTile = function (e, r, n, i) {
          var a = i.pixelRatio, s = i.viewState, l = s.resolution, u = s.projection, c = this.getLayer(),
            h = c.getSource().getTile(e, r, n, a, u);
          if (h.getState() < to) {
            h.wantedResolution = l;
            var p = o(h);
            if (!(p in this.tileListenerKeys_)) {
              var f = Z(h, F, this.prepareTile.bind(this, h, a, u, !0));
              this.tileListenerKeys_[p] = f
            }
          } else {
            var d = i.viewHints;
            !!(d[ns] || d[is]) && h.wantedResolution || (h.wantedResolution = l), this.prepareTile(h, a, u, !1) && c.getRenderMode() !== gy && this.renderTileImage_(h, i)
          }
          return t.prototype.getTile.call(this, e, r, n, i)
        }, e.prototype.isDrawableTile = function (e) {
          var r = this.getLayer();
          return t.prototype.isDrawableTile.call(this, e) && (r.getRenderMode() === gy ? o(r) in e.executorGroups : e.hasContext(r))
        }, e.prototype.getTileImage = function (t) {
          return t.getImage(this.getLayer())
        }, e.prototype.prepareFrame = function (e) {
          var r = this.getLayer().getRevision();
          return this.renderedLayerRevision_ != r && (this.renderedTiles.length = 0), this.renderedLayerRevision_ = r, t.prototype.prepareFrame.call(this, e)
        }, e.prototype.updateExecutorGroup_ = function (t, e, r) {
          var n = this.getLayer(), i = n.getRevision(), a = n.getRenderOrder() || null, s = t.wantedResolution,
            l = t.getReplayState(n);
          if (l.dirty || l.renderedResolution !== s || l.renderedRevision != i || l.renderedRenderOrder != a || l.renderedZ !== t.sourceZ) {
            var u = n.getSource(), c = n.getDeclutter(), h = u.getTileGrid(),
              p = u.getTileGridForProjection(r).getTileCoordExtent(t.wrappedTileCoord), f = u.getSourceTiles(e, r, t),
              d = o(n);
            delete t.hitDetectionImageData[d], t.executorGroups[d] = [], c && (t.declutterExecutorGroups[d] = []);
            for (var g = function (r, i) {
              var o = f[r];
              if (o.getState() != to) return "continue";
              var g = o.tileCoord, m = h.getTileCoordExtent(g), v = Te(p, m),
                _ = ue(m, v) ? null : Ht(v, n.getRenderBuffer() * s, y.tmpExtent);
              l.dirty = !1;
              var b = new Yg(0, v, s, e), x = c ? new Yg(0, v, s, e) : void 0, w = qu(s, e), S = function (t) {
                var e, r = t.getStyleFunction() || n.getStyleFunction();
                if (r && (e = r(t, s)), e) {
                  var i = this.renderFeature(t, w, e, b, x);
                  this.dirty_ = this.dirty_ || i, l.dirty = l.dirty || i
                }
              }, E = o.getFeatures();
              a && a !== l.renderedRenderOrder && E.sort(a);
              for (var T = 0, C = E.length; T < C; ++T) {
                var O = E[T];
                _ && !Re(_, O.getGeometry().getExtent()) || S.call(y, O)
              }
              var P = b.finish(), R = n.getRenderMode() !== gy && c && 1 === f.length ? null : v,
                I = new ay(R, s, e, u.getOverlaps(), P, n.getRenderBuffer());
              if (t.executorGroups[d].push(I), x) {
                var L = new ay(R, s, e, u.getOverlaps(), x.finish(), n.getRenderBuffer());
                t.declutterExecutorGroups[d].push(L)
              }
            }, y = this, m = 0, v = f.length; m < v; ++m) g(m);
            l.renderedRevision = i, l.renderedZ = t.sourceZ, l.renderedRenderOrder = a, l.renderedResolution = s
          }
        }, e.prototype.forEachFeatureAtCoordinate = function (t, e, r, n, i) {
          var a = e.viewState.resolution, s = e.viewState.rotation;
          r = null == r ? 0 : r;
          var l = this.getLayer(), u = l.getSource().getTileGridForProjection(e.viewState.projection), c = Kt([t]);
          Ht(c, a * r, c);
          for (var h, p = {}, f = function (t, e, r) {
            var a = t.getId();
            void 0 === a && (a = o(t));
            var s = p[a];
            if (s) {
              if (!0 !== s && r < s.distanceSq) {
                if (0 === r) return p[a] = !0, i.splice(i.lastIndexOf(s), 1), n(t, l, e);
                s.geometry = e, s.distanceSq = r
              }
            } else {
              if (0 === r) return p[a] = !0, n(t, l, e);
              i.push(p[a] = {feature: t, layer: l, geometry: e, distanceSq: r, callback: n})
            }
          }, d = this.renderedTiles, g = function (n, i) {
            var p = d[n];
            if (!Re(u.getTileCoordExtent(p.wrappedTileCoord), c)) return "continue";
            var g = o(l), y = [p.executorGroups[g]], m = p.declutterExecutorGroups[g];
            m && y.push(m), y.some((function (n) {
              for (var i = n === m ? e.declutterTree.all().map((function (t) {
                return t.value
              })) : null, o = 0, l = n.length; o < l; ++o) {
                var u = n[o];
                if (h = u.forEachFeatureAtCoordinate(t, a, s, r, f, i)) return !0
              }
            }))
          }, y = 0, m = d.length; !h && y < m; ++y) g(y);
          return h
        }, e.prototype.getFeatures = function (t) {
          return new Promise(function (e, r) {
            for (var n, i = this.getLayer(), a = o(i), s = i.getSource(), l = this.renderedProjection, u = l.getExtent(), c = this.renderedResolution, h = s.getTileGridForProjection(l), p = It(this.renderedPixelToCoordinateTransform_, t.slice()), f = h.getTileCoordForCoordAndResolution(p, c), d = 0, g = this.renderedTiles.length; d < g; ++d) if (f.toString() === this.renderedTiles[d].tileCoord.toString()) {
              if ((n = this.renderedTiles[d]).getState() === to && n.hifi) {
                var y = h.getTileCoordExtent(n.tileCoord);
                s.getWrapX() && l.canWrapX() && !te(u, y) && Fr(p, l);
                break
              }
              n = void 0
            }
            if (!n || n.loadingSourceTiles > 0) e([]); else {
              var m = Ce(h.getTileCoordExtent(n.wrappedTileCoord)), v = [(p[0] - m[0]) / c, (m[1] - p[1]) / c],
                _ = n.getSourceTiles().reduce((function (t, e) {
                  return t.concat(e.getFeatures())
                }), []), b = n.hitDetectionImageData[a];
              if (!b && !this.animatingOrInteracting_) {
                var x = Is(h.getTileSize(h.getZForResolution(c))), w = [x[0] / 2, x[1] / 2], S = this.renderedRotation_;
                b = sy(x, [this.getRenderTransform(h.getTileCoordCenter(n.wrappedTileCoord), c, 0, .5, w[0], w[1], 0)], _, i.getStyleFunction(), h.getTileCoordExtent(n.wrappedTileCoord), n.getReplayState(i).renderedResolution, S), n.hitDetectionImageData[a] = b
              }
              e(ly(v, _, b))
            }
          }.bind(this))
        }, e.prototype.handleFontsChanged = function () {
          P(this.renderTileImageQueue_);
          var t = this.getLayer();
          t.getVisible() && void 0 !== this.renderedLayerRevision_ && t.changed()
        }, e.prototype.handleStyleImageChange_ = function (t) {
          this.renderIfReadyAndVisible()
        }, e.prototype.renderDeclutter = function (t) {
          for (var e = t.viewHints, r = !(e[ns] || e[is]), n = this.renderedTiles, i = 0, a = n.length; i < a; ++i) {
            var s = n[i], l = s.declutterExecutorGroups[o(this.getLayer())];
            if (l) for (var u = l.length - 1; u >= 0; --u) l[u].execute(this.context, 1, this.getTileRenderTransform(s, t), t.viewState.rotation, r, void 0, t.declutterTree)
          }
        }, e.prototype.getTileRenderTransform = function (t, e) {
          var r = e.pixelRatio, n = e.viewState, i = n.center, o = n.resolution, a = n.rotation, s = e.size,
            l = Math.round(s[0] * r), u = Math.round(s[1] * r),
            c = this.getLayer().getSource().getTileGridForProjection(e.viewState.projection), h = t.tileCoord,
            p = c.getTileCoordExtent(t.wrappedTileCoord), f = c.getTileCoordExtent(h, this.tmpExtent)[0] - p[0];
          return Ot(Mt(this.inversePixelTransform.slice(), 1 / r, 1 / r), this.getRenderTransform(i, o, a, r, l, u, f))
        }, e.prototype.renderFrame = function (e, r) {
          var n = e.viewHints, i = !(n[ns] || n[is]);
          this.renderQueuedTileImages_(i, e), t.prototype.renderFrame.call(this, e, r), this.renderedPixelToCoordinateTransform_ = e.pixelToCoordinateTransform.slice(), this.renderedRotation_ = e.viewState.rotation;
          var a = this.getLayer(), s = a.getRenderMode();
          if (s === fy) return this.container;
          var l = a.getSource(), u = e.usedTiles[o(l)];
          for (var c in this.renderTileImageQueue_) u && c in u || delete this.renderTileImageQueue_[c];
          for (var h = this.context, p = vy[s], f = e.viewState.rotation, d = this.renderedTiles, g = [], y = [], m = d.length - 1; m >= 0; --m) for (var v = d[m], _ = this.getTileRenderTransform(v, e), b = v.executorGroups[o(a)], x = !1, w = 0, S = b.length; w < S; ++w) {
            var E = b[w];
            if (E.hasExecutors(p)) {
              var T = v.tileCoord[0], C = void 0;
              if (!x && (C = E.getClipCoords(_))) {
                h.save();
                for (var O = 0, P = g.length; O < P; ++O) {
                  var R = g[O];
                  T < y[O] && (h.beginPath(), h.moveTo(C[0], C[1]), h.lineTo(C[2], C[3]), h.lineTo(C[4], C[5]), h.lineTo(C[6], C[7]), h.moveTo(R[6], R[7]), h.lineTo(R[4], R[5]), h.lineTo(R[2], R[3]), h.lineTo(R[0], R[1]), h.clip())
                }
              }
              E.execute(h, 1, _, f, i, p), !x && C && (h.restore(), g.push(C), y.push(T), x = !0)
            }
          }
          return this.container
        }, e.prototype.renderQueuedTileImages_ = function (t, e) {
          for (var r in this.renderTileImageQueue_) {
            if (!t && Date.now() - e.time > 8) {
              e.animate = !0;
              break
            }
            var n = this.renderTileImageQueue_[r];
            delete this.renderTileImageQueue_[r], this.renderTileImage_(n, e)
          }
        }, e.prototype.renderFeature = function (t, e, r, n, i) {
          if (!r) return !1;
          var o = !1;
          if (Array.isArray(r)) for (var a = 0, s = r.length; a < s; ++a) o = Zu(n, t, r[a], e, this.boundHandleStyleImageChange_, void 0, i) || o; else o = Zu(n, t, r, e, this.boundHandleStyleImageChange_, void 0, i);
          return o
        }, e.prototype.tileImageNeedsRender_ = function (t, e, r) {
          var n = this.getLayer(), i = t.getReplayState(n), o = n.getRevision(), a = t.sourceZ, s = t.wantedResolution;
          return i.renderedTileResolution !== s || i.renderedTileRevision !== o || i.renderedTileZ !== a
        }, e.prototype.renderTileImage_ = function (t, e) {
          var r = this.getLayer(), n = t.getReplayState(r), i = r.getRevision(), a = t.executorGroups[o(r)];
          n.renderedTileRevision = i, n.renderedTileZ = t.sourceZ;
          var s = t.wrappedTileCoord, l = s[0], u = r.getSource(), c = e.pixelRatio, h = e.viewState.projection,
            p = u.getTileGridForProjection(h), f = p.getResolution(t.tileCoord[0]),
            d = e.pixelRatio / t.wantedResolution * f, g = p.getResolution(l), y = t.getContext(r);
          c = Math.round(Math.max(c, d / c));
          var m = u.getTilePixelSize(l, c, h);
          y.canvas.width = m[0], y.canvas.height = m[1];
          var v = c / d;
          if (1 !== v) {
            var _ = Ct(this.tmpTransform_);
            Mt(_, v, v), y.setTransform.apply(y, _)
          }
          var b = p.getTileCoordExtent(s, this.tmpExtent), x = d / g, w = Ct(this.tmpTransform_);
          Mt(w, x, -x), At(w, -b[0], -b[3]);
          for (var S = 0, E = a.length; S < E; ++S) {
            a[S].execute(y, v, w, 0, !0, my[r.getRenderMode()])
          }
          n.renderedTileResolution = t.wantedResolution
        }, e
      }(xd);

    function by(t, e, r, n, i, o, a) {
      var s, l, u = (r - e) / n;
      if (1 === u) s = e; else if (2 === u) s = e, l = i; else if (0 !== u) {
        for (var c = t[e], h = t[e + 1], p = 0, d = [0], g = e + n; g < r; g += n) {
          var y = t[g], m = t[g + 1];
          p += Math.sqrt((y - c) * (y - c) + (m - h) * (m - h)), d.push(p), c = y, h = m
        }
        var v = i * p, _ = f(d, v);
        _ < 0 ? (l = (v - d[-_ - 2]) / (d[-_ - 1] - d[-_ - 2]), s = e + (-_ - 2) * n) : s = e + _ * n
      }
      var b = a > 1 ? a : 2, x = o || new Array(b);
      for (g = 0; g < b; ++g) x[g] = void 0 === s ? NaN : void 0 === l ? t[s + g] : qe(t[s + g], t[s + n + g], l);
      return x
    }

    function xy(t, e, r, n, i, o) {
      if (r == e) return null;
      var a;
      if (i < t[e + n - 1]) return o ? ((a = t.slice(e, e + n))[n - 1] = i, a) : null;
      if (t[r - 1] < i) return o ? ((a = t.slice(r - n, r))[n - 1] = i, a) : null;
      if (i == t[e + n - 1]) return t.slice(e, e + n);
      for (var s = e / n, l = r / n; s < l;) {
        var u = s + l >> 1;
        i < t[(u + 1) * n - 1] ? l = u : s = u + 1
      }
      var c = t[s * n - 1];
      if (i == c) return t.slice((s - 1) * n, (s - 1) * n + n);
      var h = (i - c) / (t[(s + 1) * n - 1] - c);
      a = [];
      for (var p = 0; p < n - 1; ++p) a.push(qe(t[(s - 1) * n + p], t[s * n + p], h));
      return a.push(i), a
    }

    function wy(t, e, r, n, i, o, a) {
      if (a) return xy(t, e, r[r.length - 1], n, i, o);
      var s;
      if (i < t[n - 1]) return o ? ((s = t.slice(0, n))[n - 1] = i, s) : null;
      if (t[t.length - 1] < i) return o ? ((s = t.slice(t.length - n))[n - 1] = i, s) : null;
      for (var l = 0, u = r.length; l < u; ++l) {
        var c = r[l];
        if (e != c) {
          if (i < t[e + n - 1]) return null;
          if (i <= t[c - 1]) return xy(t, e, c, n, i, !1);
          e = c
        }
      }
      return null
    }

    function Sy(t, e, r, n) {
      for (var i = [], o = [1 / 0, 1 / 0, -1 / 0, -1 / 0], a = 0, s = r.length; a < s; ++a) {
        var l = r[a];
        o = le(t, e, l[0], n), i.push((o[0] + o[2]) / 2, (o[1] + o[3]) / 2), e = l[l.length - 1]
      }
      return i
    }

    var Ey = [1, 0, 0, 1, 0, 0], Ty = function () {
      function t(t, e, r, n, i) {
        this.extent_, this.id_ = i, this.type_ = t, this.flatCoordinates_ = e, this.flatInteriorPoints_ = null, this.flatMidpoints_ = null, this.ends_ = r, this.properties_ = n
      }

      return t.prototype.get = function (t) {
        return this.properties_[t]
      }, t.prototype.getExtent = function () {
        return this.extent_ || (this.extent_ = this.type_ === bt.POINT ? ae(this.flatCoordinates_) : le(this.flatCoordinates_, 0, this.flatCoordinates_.length, 2)), this.extent_
      }, t.prototype.getFlatInteriorPoint = function () {
        if (!this.flatInteriorPoints_) {
          var t = xe(this.getExtent());
          this.flatInteriorPoints_ = $n(this.flatCoordinates_, 0, this.ends_, 2, t, 0)
        }
        return this.flatInteriorPoints_
      }, t.prototype.getFlatInteriorPoints = function () {
        if (!this.flatInteriorPoints_) {
          var t = Sy(this.flatCoordinates_, 0, this.ends_, 2);
          this.flatInteriorPoints_ = Jn(this.flatCoordinates_, 0, this.ends_, 2, t)
        }
        return this.flatInteriorPoints_
      }, t.prototype.getFlatMidpoint = function () {
        return this.flatMidpoints_ || (this.flatMidpoints_ = by(this.flatCoordinates_, 0, this.flatCoordinates_.length, 2, .5)), this.flatMidpoints_
      }, t.prototype.getFlatMidpoints = function () {
        if (!this.flatMidpoints_) {
          this.flatMidpoints_ = [];
          for (var t = this.flatCoordinates_, e = 0, r = this.ends_, n = 0, i = r.length; n < i; ++n) {
            var o = r[n], a = by(t, e, o, 2, .5);
            v(this.flatMidpoints_, a), e = o
          }
        }
        return this.flatMidpoints_
      }, t.prototype.getId = function () {
        return this.id_
      }, t.prototype.getOrientedFlatCoordinates = function () {
        return this.flatCoordinates_
      }, t.prototype.getGeometry = function () {
        return this
      }, t.prototype.getSimplifiedGeometry = function (t) {
        return this
      }, t.prototype.simplifyTransformed = function (t, e) {
        return this
      }, t.prototype.getProperties = function () {
        return this.properties_
      }, t.prototype.getStride = function () {
        return 2
      }, t.prototype.getStyleFunction = function () {
      }, t.prototype.getType = function () {
        return this.type_
      }, t.prototype.transform = function (t) {
        var e = (t = Gr(t)).getExtent(), r = t.getWorldExtent();
        if (e && r) {
          var n = Ee(r) / Ee(e);
          kt(Ey, r[0], r[3], n, -n, 0, 0, 0), ln(this.flatCoordinates_, 0, this.flatCoordinates_.length, 2, Ey, this.flatCoordinates_)
        }
      }, t.prototype.getEnds = function () {
        return this.ends_
      }, t
    }();
    Ty.prototype.getEndss = Ty.prototype.getEnds, Ty.prototype.getFlatCoordinates = Ty.prototype.getOrientedFlatCoordinates;
    var Cy = Ty;
    var Oy = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Py = function (t) {
      function e(e, r) {
        var n = t.call(this) || this;
        return n.flatMidpoint_ = null, n.flatMidpointRevision_ = -1, n.maxDelta_ = -1, n.maxDeltaRevision_ = -1, void 0 === r || Array.isArray(e[0]) ? n.setCoordinates(e, r) : n.setFlatCoordinates(r, e), n
      }

      return Oy(e, t), e.prototype.appendCoordinate = function (t) {
        this.flatCoordinates ? v(this.flatCoordinates, t) : this.flatCoordinates = t.slice(), this.changed()
      }, e.prototype.clone = function () {
        var t = new e(this.flatCoordinates.slice(), this.layout);
        return t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        return n < Jt(this.getExtent(), t, e) ? n : (this.maxDeltaRevision_ != this.getRevision() && (this.maxDelta_ = Math.sqrt(bn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), Sn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, !1, t, e, r, n))
      }, e.prototype.forEachSegment = function (t) {
        return Qn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t)
      }, e.prototype.getCoordinateAtM = function (t, e) {
        if (this.layout != vt && this.layout != _t) return null;
        var r = void 0 !== e && e;
        return xy(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t, r)
      }, e.prototype.getCoordinates = function () {
        return Nn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
      }, e.prototype.getCoordinateAt = function (t, e) {
        return by(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t, e, this.stride)
      }, e.prototype.getLength = function () {
        return qg(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
      }, e.prototype.getFlatMidpoint = function () {
        return this.flatMidpointRevision_ != this.getRevision() && (this.flatMidpoint_ = this.getCoordinateAt(.5, this.flatMidpoint_), this.flatMidpointRevision_ = this.getRevision()), this.flatMidpoint_
      }, e.prototype.getSimplifiedGeometryInternal = function (t) {
        var r = [];
        return r.length = In(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t, r, 0), new e(r, yt)
      }, e.prototype.getType = function () {
        return bt.LINE_STRING
      }, e.prototype.intersectsExtent = function (t) {
        return ti(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t)
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 1), this.flatCoordinates || (this.flatCoordinates = []), this.flatCoordinates.length = On(this.flatCoordinates, 0, t, this.stride), this.changed()
      }, e
    }(vn), Ry = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Iy = function (t) {
      function e(e) {
        return t.call(this, e) || this
      }

      return Ry(e, t), e.prototype.createRenderer = function () {
        return new cy(this)
      }, e
    }(wg);

    function Ly(t, e, r) {
      for (var n, i, o, a, s, l, u = [], c = t(0), h = t(1), p = e(c), f = e(h), d = [h, c], g = [f, p], y = [1, 0], m = {}, v = 1e5; --v > 0 && y.length > 0;) o = y.pop(), c = d.pop(), p = g.pop(), (l = o.toString()) in m || (u.push(p[0], p[1]), m[l] = !0), a = y.pop(), h = d.pop(), f = g.pop(), ze((i = e(n = t(s = (o + a) / 2)))[0], i[1], p[0], p[1], f[0], f[1]) < r ? (u.push(f[0], f[1]), m[l = a.toString()] = !0) : (y.push(a, s, s, o), g.push(f, i, i, p), d.push(h, n, n, c));
      return u
    }

    function My(t, e, r, n, i) {
      return Ly((function (n) {
        return [t, e + (r - e) * n]
      }), Kr(Gr("EPSG:4326"), n), i)
    }

    function Fy(t, e, r, n, i) {
      return Ly((function (n) {
        return [e + (r - e) * n, t]
      }), Kr(Gr("EPSG:4326"), n), i)
    }

    var Ay = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ky = new gp({color: "rgba(0,0,0,0.2)"}),
      jy = [90, 45, 30, 20, 10, 5, 2, 1, .5, .2, .1, .05, .01, .005, .002, .001], Ny = function (t) {
        function e(e) {
          var r = this, n = e || {}, i = O({updateWhileAnimating: !0, updateWhileInteracting: !0, renderBuffer: 0}, n);
          return delete i.maxLines, delete i.strokeStyle, delete i.targetSize, delete i.showLabels, delete i.lonLabelFormatter, delete i.latLabelFormatter, delete i.lonLabelPosition, delete i.latLabelPosition, delete i.lonLabelStyle, delete i.latLabelStyle, delete i.intervals, (r = t.call(this, i) || this).projection_ = null, r.maxLat_ = 1 / 0, r.maxLon_ = 1 / 0, r.minLat_ = -1 / 0, r.minLon_ = -1 / 0, r.maxX_ = 1 / 0, r.maxY_ = 1 / 0, r.minX_ = -1 / 0, r.minY_ = -1 / 0, r.targetSize_ = void 0 !== n.targetSize ? n.targetSize : 100, r.maxLines_ = void 0 !== n.maxLines ? n.maxLines : 100, r.meridians_ = [], r.parallels_ = [], r.strokeStyle_ = void 0 !== n.strokeStyle ? n.strokeStyle : ky, r.fromLonLatTransform_ = void 0, r.toLonLatTransform_ = void 0, r.projectionCenterLonLat_ = null, r.bottomLeft_ = null, r.bottomRight_ = null, r.topLeft_ = null, r.topRight_ = null, r.meridiansLabels_ = null, r.parallelsLabels_ = null, n.showLabels && (r.lonLabelFormatter_ = null == n.lonLabelFormatter ? Er.bind(r, "EW") : n.lonLabelFormatter, r.latLabelFormatter_ = null == n.latLabelFormatter ? Er.bind(r, "NS") : n.latLabelFormatter, r.lonLabelPosition_ = null == n.lonLabelPosition ? 0 : n.lonLabelPosition, r.latLabelPosition_ = null == n.latLabelPosition ? 1 : n.latLabelPosition, r.lonLabelStyleBase_ = new wp({
            text: void 0 !== n.lonLabelStyle ? n.lonLabelStyle.clone() : new Tp({
              font: "12px Calibri,sans-serif",
              textBaseline: "bottom",
              fill: new ep({color: "rgba(0,0,0,1)"}),
              stroke: new gp({color: "rgba(255,255,255,1)", width: 3})
            })
          }), r.lonLabelStyle_ = function (t) {
            var e = t.get("graticule_label");
            return this.lonLabelStyleBase_.getText().setText(e), this.lonLabelStyleBase_
          }.bind(r), r.latLabelStyleBase_ = new wp({
            text: void 0 !== n.latLabelStyle ? n.latLabelStyle.clone() : new Tp({
              font: "12px Calibri,sans-serif",
              textAlign: "right",
              fill: new ep({color: "rgba(0,0,0,1)"}),
              stroke: new gp({color: "rgba(255,255,255,1)", width: 3})
            })
          }), r.latLabelStyle_ = function (t) {
            var e = t.get("graticule_label");
            return this.latLabelStyleBase_.getText().setText(e), this.latLabelStyleBase_
          }.bind(r), r.meridiansLabels_ = [], r.parallelsLabels_ = [], r.addEventListener(Xo, r.drawLabels_.bind(r))), r.intervals_ = void 0 !== n.intervals ? n.intervals : jy, r.setSource(new hf({
            loader: r.loaderFunction.bind(r),
            strategy: r.strategyFunction.bind(r),
            features: new ht,
            overlaps: !1,
            useSpatialIndex: !1,
            wrapX: n.wrapX
          })), r.featurePool_ = [], r.lineStyle_ = new wp({stroke: r.strokeStyle_}), r.loadedExtent_ = null, r.renderedExtent_ = null, r.setRenderOrder(null), r
        }

        return Ay(e, t), e.prototype.strategyFunction = function (t, e) {
          var r = t.slice();
          return this.projection_ && this.getSource().getWrapX() && ke(r, this.projection_), this.loadedExtent_ && (ce(this.loadedExtent_, r, e) ? r = this.loadedExtent_.slice() : this.getSource().removeLoadedExtent(this.loadedExtent_)), [r]
        }, e.prototype.loaderFunction = function (t, e, r) {
          this.loadedExtent_ = t;
          var n = this.getSource(), i = Te(this.getExtent() || [-1 / 0, -1 / 0, 1 / 0, 1 / 0], t);
          if (!(this.renderedExtent_ && ue(this.renderedExtent_, i) || (this.renderedExtent_ = i, Ie(i)))) {
            var o = xe(i), a = e * e / 4;
            (!this.projection_ || !Xr(this.projection_, r)) && this.updateProjectionInfo_(r), this.createGraticule_(i, o, e, a);
            var s, l = this.meridians_.length + this.parallels_.length;
            for (this.meridiansLabels_ && (l += this.meridians_.length), this.parallelsLabels_ && (l += this.parallels_.length); l > this.featurePool_.length;) s = new gt, this.featurePool_.push(s);
            var u = n.getFeaturesCollection();
            u.clear();
            var c, h, p = 0;
            for (c = 0, h = this.meridians_.length; c < h; ++c) (s = this.featurePool_[p++]).setGeometry(this.meridians_[c]), s.setStyle(this.lineStyle_), u.push(s);
            for (c = 0, h = this.parallels_.length; c < h; ++c) (s = this.featurePool_[p++]).setGeometry(this.parallels_[c]), s.setStyle(this.lineStyle_), u.push(s)
          }
        }, e.prototype.addMeridian_ = function (t, e, r, n, i, o) {
          var a = this.getMeridian_(t, e, r, n, o);
          if (Re(a.getExtent(), i)) {
            if (this.meridiansLabels_) {
              var s = this.lonLabelFormatter_(t);
              o in this.meridiansLabels_ ? this.meridiansLabels_[o].text = s : this.meridiansLabels_[o] = {
                geom: new qn([]),
                text: s
              }
            }
            this.meridians_[o++] = a
          }
          return o
        }, e.prototype.addParallel_ = function (t, e, r, n, i, o) {
          var a = this.getParallel_(t, e, r, n, o);
          if (Re(a.getExtent(), i)) {
            if (this.parallelsLabels_) {
              var s = this.latLabelFormatter_(t);
              o in this.parallelsLabels_ ? this.parallelsLabels_[o].text = s : this.parallelsLabels_[o] = {
                geom: new qn([]),
                text: s
              }
            }
            this.parallels_[o++] = a
          }
          return o
        }, e.prototype.drawLabels_ = function (t) {
          var e = t.frameState.viewState.rotation, r = t.frameState.extent, n = xe(r), i = r;
          if (e) {
            var o = Pe(r), a = Ee(r), s = Math.abs(Math.cos(e)), l = Math.abs(Math.sin(e)),
              u = (l * a - s * o) / (l * l - s * s), c = (l * o - s * a) / (l * l - s * s);
            i = [n[0] - u / 2, n[1] - c / 2, n[0] + u / 2, n[1] + c / 2]
          }
          var h = 0, p = 0, f = this.latLabelPosition_ < .5, d = this.projection_.getExtent(), g = Pe(d);
          this.getSource().getWrapX() && this.projection_.canWrapX() && !te(d, r) && (h = Math.floor((r[0] - d[0]) / g), p = Math.ceil((r[2] - d[2]) / g), f = f !== Math.abs(e) > Math.PI / 2);
          for (var y = Ku(t), m = h; m <= p; ++m) {
            var v = this.meridians_.length + this.parallels_.length, _ = void 0, b = void 0, x = void 0, w = void 0;
            if (this.meridiansLabels_) for (b = 0, x = this.meridiansLabels_.length; b < x; ++b) {
              var S = this.meridians_[b];
              if (e || 0 !== m) (E = S.clone()).translate(m * g, 0), E.rotate(-e, n), (w = this.getMeridianPoint_(E, i, b)).rotate(e, n); else w = this.getMeridianPoint_(S, r, b);
              (_ = this.featurePool_[v++]).setGeometry(w), _.set("graticule_label", this.meridiansLabels_[b].text), y.drawFeature(_, this.lonLabelStyle_(_))
            }
            if (this.parallelsLabels_ && (m === h && f || m === p && !f)) for (b = 0, x = this.parallels_.length; b < x; ++b) {
              var E;
              S = this.parallels_[b];
              if (e || 0 !== m) (E = S.clone()).translate(m * g, 0), E.rotate(-e, n), (w = this.getParallelPoint_(E, i, b)).rotate(e, n); else w = this.getParallelPoint_(S, r, b);
              (_ = this.featurePool_[v++]).setGeometry(w), _.set("graticule_label", this.parallelsLabels_[b].text), y.drawFeature(_, this.latLabelStyle_(_))
            }
          }
        }, e.prototype.createGraticule_ = function (t, e, r, n) {
          var i = this.getInterval_(r);
          if (-1 == i) return this.meridians_.length = 0, this.parallels_.length = 0, this.meridiansLabels_ && (this.meridiansLabels_.length = 0), void (this.parallelsLabels_ && (this.parallelsLabels_.length = 0));
          var o = !1, a = this.projection_.getExtent(), s = Pe(a);
          this.getSource().getWrapX() && this.projection_.canWrapX() && !te(a, t) && (Pe(t) >= s ? (t[0] = a[0], t[2] = a[2]) : o = !0);
          var l = [Ne(e[0], this.minX_, this.maxX_), Ne(e[1], this.minY_, this.maxY_)], u = this.toLonLatTransform_(l);
          isNaN(u[1]) && (u[1] = Math.abs(this.maxLat_) >= Math.abs(this.minLat_) ? this.maxLat_ : this.minLat_);
          var c, h, p, f, d = Ne(u[0], this.minLon_, this.maxLon_), g = Ne(u[1], this.minLat_, this.maxLat_),
            y = this.maxLines_, m = t;
          o || (m = [Ne(t[0], this.minX_, this.maxX_), Ne(t[1], this.minY_, this.maxY_), Ne(t[2], this.minX_, this.maxX_), Ne(t[3], this.minY_, this.maxY_)]);
          var v = Ae(m, this.toLonLatTransform_, void 0, 8), _ = v[3], b = v[2], x = v[1], w = v[0];
          if (o || (Qt(m, this.bottomLeft_) && (w = this.minLon_, x = this.minLat_), Qt(m, this.bottomRight_) && (b = this.maxLon_, x = this.minLat_), Qt(m, this.topLeft_) && (w = this.minLon_, _ = this.maxLat_), Qt(m, this.topRight_) && (b = this.maxLon_, _ = this.maxLat_), _ = Ne(_, g, this.maxLat_), b = Ne(b, d, this.maxLon_), x = Ne(x, this.minLat_, g), w = Ne(w, this.minLon_, d)), f = Ne(d = Math.floor(d / i) * i, this.minLon_, this.maxLon_), h = this.addMeridian_(f, x, _, n, t, 0), c = 0, o) for (; (f -= i) >= w && c++ < y;) h = this.addMeridian_(f, x, _, n, t, h); else for (; f != this.minLon_ && c++ < y;) f = Math.max(f - i, this.minLon_), h = this.addMeridian_(f, x, _, n, t, h);
          if (f = Ne(d, this.minLon_, this.maxLon_), c = 0, o) for (; (f += i) <= b && c++ < y;) h = this.addMeridian_(f, x, _, n, t, h); else for (; f != this.maxLon_ && c++ < y;) f = Math.min(f + i, this.maxLon_), h = this.addMeridian_(f, x, _, n, t, h);
          for (this.meridians_.length = h, this.meridiansLabels_ && (this.meridiansLabels_.length = h), p = Ne(g = Math.floor(g / i) * i, this.minLat_, this.maxLat_), h = this.addParallel_(p, w, b, n, t, 0), c = 0; p != this.minLat_ && c++ < y;) p = Math.max(p - i, this.minLat_), h = this.addParallel_(p, w, b, n, t, h);
          for (p = Ne(g, this.minLat_, this.maxLat_), c = 0; p != this.maxLat_ && c++ < y;) p = Math.min(p + i, this.maxLat_), h = this.addParallel_(p, w, b, n, t, h);
          this.parallels_.length = h, this.parallelsLabels_ && (this.parallelsLabels_.length = h)
        }, e.prototype.getInterval_ = function (t) {
          for (var e = this.projectionCenterLonLat_[0], r = this.projectionCenterLonLat_[1], n = -1, i = Math.pow(this.targetSize_ * t, 2), o = [], a = [], s = 0, l = this.intervals_.length; s < l; ++s) {
            var u = Ne(this.intervals_[s] / 2, 0, 90), c = Ne(r, -90 + u, 90 - u);
            if (o[0] = e - u, o[1] = c - u, a[0] = e + u, a[1] = c + u, this.fromLonLatTransform_(o, o), this.fromLonLatTransform_(a, a), Math.pow(a[0] - o[0], 2) + Math.pow(a[1] - o[1], 2) <= i) break;
            n = this.intervals_[s]
          }
          return n
        }, e.prototype.getMeridian_ = function (t, e, r, n, i) {
          var o = My(t, e, r, this.projection_, n), a = this.meridians_[i];
          return a ? (a.setFlatCoordinates(yt, o), a.changed()) : (a = new Py(o, yt), this.meridians_[i] = a), a
        }, e.prototype.getMeridianPoint_ = function (t, e, r) {
          var n = t.getFlatCoordinates(), i = 1, o = n.length - 1;
          n[i] > n[o] && (i = o, o = 1);
          var a = Math.max(e[1], n[i]), s = Math.min(e[3], n[o]),
            l = Ne(e[1] + Math.abs(e[1] - e[3]) * this.lonLabelPosition_, a, s),
            u = [n[i - 1] + (n[o - 1] - n[i - 1]) * (l - n[i]) / (n[o] - n[i]), l], c = this.meridiansLabels_[r].geom;
          return c.setCoordinates(u), c
        }, e.prototype.getMeridians = function () {
          return this.meridians_
        }, e.prototype.getParallel_ = function (t, e, r, n, i) {
          var o = Fy(t, e, r, this.projection_, n), a = this.parallels_[i];
          return a ? (a.setFlatCoordinates(yt, o), a.changed()) : a = new Py(o, yt), a
        }, e.prototype.getParallelPoint_ = function (t, e, r) {
          var n = t.getFlatCoordinates(), i = 0, o = n.length - 2;
          n[i] > n[o] && (i = o, o = 0);
          var a = Math.max(e[0], n[i]), s = Math.min(e[2], n[o]),
            l = Ne(e[0] + Math.abs(e[0] - e[2]) * this.latLabelPosition_, a, s),
            u = [l, n[i + 1] + (n[o + 1] - n[i + 1]) * (l - n[i]) / (n[o] - n[i])], c = this.parallelsLabels_[r].geom;
          return c.setCoordinates(u), c
        }, e.prototype.getParallels = function () {
          return this.parallels_
        }, e.prototype.updateProjectionInfo_ = function (t) {
          var e = Gr("EPSG:4326"), r = t.getWorldExtent();
          this.maxLat_ = r[3], this.maxLon_ = r[2], this.minLat_ = r[1], this.minLon_ = r[0];
          var n = Kr(t, e);
          if (this.minLon_ < this.maxLon_) this.toLonLatTransform_ = n; else {
            var i = this.minLon_ + this.maxLon_ / 2;
            this.maxLon_ += 360, this.toLonLatTransform_ = function (t, e, r) {
              for (var o = r || 2, a = n(t, e, o), s = 0, l = a.length; s < l; s += o) a[s] < i && (a[s] += 360);
              return a
            }
          }
          this.fromLonLatTransform_ = Kr(e, t);
          var o = Ae([this.minLon_, this.minLat_, this.maxLon_, this.maxLat_], this.fromLonLatTransform_, void 0, 8);
          this.minX_ = o[0], this.maxX_ = o[2], this.minY_ = o[1], this.maxY_ = o[3], this.bottomLeft_ = this.fromLonLatTransform_([this.minLon_, this.minLat_]), this.bottomRight_ = this.fromLonLatTransform_([this.maxLon_, this.minLat_]), this.topLeft_ = this.fromLonLatTransform_([this.minLon_, this.maxLat_]), this.topRight_ = this.fromLonLatTransform_([this.maxLon_, this.maxLat_]), this.projectionCenterLonLat_ = this.toLonLatTransform_(xe(t.getExtent())), isNaN(this.projectionCenterLonLat_[1]) && (this.projectionCenterLonLat_[1] = Math.abs(this.maxLat_) >= Math.abs(this.minLat_) ? this.maxLat_ : this.minLat_), this.projection_ = t
        }, e
      }(Iy), Dy = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Gy = "blur", zy = "gradient", Uy = "radius", By = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"];
    var Vy = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = O({}, n);
        delete i.gradient, delete i.radius, delete i.blur, delete i.weight, (r = t.call(this, i) || this).gradient_ = null, r.addEventListener(it(zy), r.handleGradientChanged_), r.setGradient(n.gradient ? n.gradient : By), r.setBlur(void 0 !== n.blur ? n.blur : 15), r.setRadius(void 0 !== n.radius ? n.radius : 8);
        var o = n.weight ? n.weight : "weight";
        return r.weightFunction_ = "string" == typeof o ? function (t) {
          return t.get(o)
        } : o, r.setRenderOrder(null), r
      }

      return Dy(e, t), e.prototype.getBlur = function () {
        return this.get(Gy)
      }, e.prototype.getGradient = function () {
        return this.get(zy)
      }, e.prototype.getRadius = function () {
        return this.get(Uy)
      }, e.prototype.handleGradientChanged_ = function () {
        this.gradient_ = function (t) {
          for (var e = uo(1, 256), r = e.createLinearGradient(0, 0, 1, 256), n = 1 / (t.length - 1), i = 0, o = t.length; i < o; ++i) r.addColorStop(i * n, t[i]);
          return e.fillStyle = r, e.fillRect(0, 0, 1, 256), e.canvas
        }(this.getGradient())
      }, e.prototype.setBlur = function (t) {
        this.set(Gy, t)
      }, e.prototype.setGradient = function (t) {
        this.set(zy, t)
      }, e.prototype.setRadius = function (t) {
        this.set(Uy, t)
      }, e.prototype.createRenderer = function () {
        return new Eg(this, {
          className: this.getClassName(),
          attributes: [{
            name: "weight", callback: function (t) {
              var e = this.weightFunction_(t);
              return void 0 !== e ? Ne(e, 0, 1) : 1
            }.bind(this)
          }],
          vertexShader: "\n        precision mediump float;\n        uniform mat4 u_projectionMatrix;\n        uniform mat4 u_offsetScaleMatrix;\n        uniform float u_size;\n        attribute vec2 a_position;\n        attribute float a_index;\n        attribute float a_weight;\n\n        varying vec2 v_texCoord;\n        varying float v_weight;\n\n        void main(void) {\n          mat4 offsetMatrix = u_offsetScaleMatrix;\n          float offsetX = a_index == 0.0 || a_index == 3.0 ? -u_size / 2.0 : u_size / 2.0;\n          float offsetY = a_index == 0.0 || a_index == 1.0 ? -u_size / 2.0 : u_size / 2.0;\n          vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n          gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n          float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n          float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;\n          v_texCoord = vec2(u, v);\n          v_weight = a_weight;\n        }",
          fragmentShader: "\n        precision mediump float;\n        uniform float u_blurSlope;\n\n        varying vec2 v_texCoord;\n        varying float v_weight;\n\n        void main(void) {\n          vec2 texCoord = v_texCoord * 2.0 - vec2(1.0, 1.0);\n          float sqRadius = texCoord.x * texCoord.x + texCoord.y * texCoord.y;\n          float value = (1.0 - sqrt(sqRadius)) * u_blurSlope;\n          float alpha = smoothstep(0.0, 1.0, value) * v_weight;\n          gl_FragColor = vec4(alpha, alpha, alpha, alpha);\n        }",
          hitVertexShader: "\n        precision mediump float;\n        uniform mat4 u_projectionMatrix;\n        uniform mat4 u_offsetScaleMatrix;\n        uniform float u_size;\n        attribute vec2 a_position;\n        attribute float a_index;\n        attribute float a_weight;\n        attribute vec4 a_hitColor;\n\n        varying vec2 v_texCoord;\n        varying float v_weight;\n        varying vec4 v_hitColor;\n\n        void main(void) {\n          mat4 offsetMatrix = u_offsetScaleMatrix;\n          float offsetX = a_index == 0.0 || a_index == 3.0 ? -u_size / 2.0 : u_size / 2.0;\n          float offsetY = a_index == 0.0 || a_index == 1.0 ? -u_size / 2.0 : u_size / 2.0;\n          vec4 offsets = offsetMatrix * vec4(offsetX, offsetY, 0.0, 0.0);\n          gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n          float u = a_index == 0.0 || a_index == 3.0 ? 0.0 : 1.0;\n          float v = a_index == 0.0 || a_index == 1.0 ? 0.0 : 1.0;\n          v_texCoord = vec2(u, v);\n          v_hitColor = a_hitColor;\n          v_weight = a_weight;\n        }",
          hitFragmentShader: "\n        precision mediump float;\n        uniform float u_blurSlope;\n\n        varying vec2 v_texCoord;\n        varying float v_weight;\n        varying vec4 v_hitColor;\n\n        void main(void) {\n          vec2 texCoord = v_texCoord * 2.0 - vec2(1.0, 1.0);\n          float sqRadius = texCoord.x * texCoord.x + texCoord.y * texCoord.y;\n          float value = (1.0 - sqrt(sqRadius)) * u_blurSlope;\n          float alpha = smoothstep(0.0, 1.0, value) * v_weight;\n          if (alpha < 0.05) {\n            discard;\n          }\n\n          gl_FragColor = v_hitColor;\n        }",
          uniforms: {
            u_size: function () {
              return 2 * (this.get(Uy) + this.get(Gy))
            }.bind(this), u_blurSlope: function () {
              return this.get(Uy) / Math.max(1, this.get(Gy))
            }.bind(this)
          },
          postProcesses: [{
            fragmentShader: "\n            precision mediump float;\n\n            uniform sampler2D u_image;\n            uniform sampler2D u_gradientTexture;\n\n            varying vec2 v_texCoord;\n\n            void main() {\n              vec4 color = texture2D(u_image, v_texCoord);\n              gl_FragColor.a = color.a;\n              gl_FragColor.rgb = texture2D(u_gradientTexture, vec2(0.5, color.a)).rgb;\n              gl_FragColor.rgb *= gl_FragColor.a;\n            }",
            uniforms: {
              u_gradientTexture: function () {
                return this.gradient_
              }.bind(this)
            }
          }]
        })
      }, e.prototype.renderDeclutter = function () {
      }, e
    }(Iy), Yy = function () {
      function t() {
        this.dataProjection = null, this.defaultFeatureProjection = null
      }

      return t.prototype.getReadOptions = function (t, e) {
        var r;
        if (e) {
          var n = e.dataProjection ? Gr(e.dataProjection) : this.readProjection(t);
          e.extent && n && n.getUnits() === St.TILE_PIXELS && (n = Gr(n)).setWorldExtent(e.extent), r = {
            dataProjection: n,
            featureProjection: e.featureProjection
          }
        }
        return this.adaptOptions(r)
      }, t.prototype.adaptOptions = function (t) {
        return O({dataProjection: this.dataProjection, featureProjection: this.defaultFeatureProjection}, t)
      }, t.prototype.getType = function () {
        return n()
      }, t.prototype.readFeature = function (t, e) {
        return n()
      }, t.prototype.readFeatures = function (t, e) {
        return n()
      }, t.prototype.readGeometry = function (t, e) {
        return n()
      }, t.prototype.readProjection = function (t) {
        return n()
      }, t.prototype.writeFeature = function (t, e) {
        return n()
      }, t.prototype.writeFeatures = function (t, e) {
        return n()
      }, t.prototype.writeGeometry = function (t, e) {
        return n()
      }, t
    }();

    function Wy(t, e, r) {
      var n, i = r ? Gr(r.featureProjection) : null, o = r ? Gr(r.dataProjection) : null;
      if (n = i && o && !Xr(i, o) ? (e ? t.clone() : t).transform(e ? i : o, e ? o : i) : t, e && r && void 0 !== r.decimals) {
        var a = Math.pow(10, r.decimals);
        n === t && (n = t.clone()), n.applyTransform((function (t) {
          for (var e = 0, r = t.length; e < r; ++e) t[e] = Math.round(t[e] * a) / a;
          return t
        }))
      }
      return n
    }

    function qy(t, e) {
      var r = e ? Gr(e.featureProjection) : null, n = e ? Gr(e.dataProjection) : null;
      return r && n && !Xr(r, n) ? $r(t, n, r) : t
    }

    var Xy = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Zy = function (t) {
      function e(e, r, n) {
        var i = t.call(this) || this;
        if (i.ends_ = [], i.maxDelta_ = -1, i.maxDeltaRevision_ = -1, Array.isArray(e[0])) i.setCoordinates(e, r); else if (void 0 !== r && n) i.setFlatCoordinates(r, e), i.ends_ = n; else {
          for (var o = i.getLayout(), a = e, s = [], l = [], u = 0, c = a.length; u < c; ++u) {
            var h = a[u];
            0 === u && (o = h.getLayout()), v(s, h.getFlatCoordinates()), l.push(s.length)
          }
          i.setFlatCoordinates(o, s), i.ends_ = l
        }
        return i
      }

      return Xy(e, t), e.prototype.appendLineString = function (t) {
        this.flatCoordinates ? v(this.flatCoordinates, t.getFlatCoordinates().slice()) : this.flatCoordinates = t.getFlatCoordinates().slice(), this.ends_.push(this.flatCoordinates.length), this.changed()
      }, e.prototype.clone = function () {
        var t = new e(this.flatCoordinates.slice(), this.layout, this.ends_.slice());
        return t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        return n < Jt(this.getExtent(), t, e) ? n : (this.maxDeltaRevision_ != this.getRevision() && (this.maxDelta_ = Math.sqrt(xn(this.flatCoordinates, 0, this.ends_, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), En(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, !1, t, e, r, n))
      }, e.prototype.getCoordinateAtM = function (t, e, r) {
        if (this.layout != vt && this.layout != _t || 0 === this.flatCoordinates.length) return null;
        var n = void 0 !== e && e, i = void 0 !== r && r;
        return wy(this.flatCoordinates, 0, this.ends_, this.stride, t, n, i)
      }, e.prototype.getCoordinates = function () {
        return Dn(this.flatCoordinates, 0, this.ends_, this.stride)
      }, e.prototype.getEnds = function () {
        return this.ends_
      }, e.prototype.getLineString = function (t) {
        return t < 0 || this.ends_.length <= t ? null : new Py(this.flatCoordinates.slice(0 === t ? 0 : this.ends_[t - 1], this.ends_[t]), this.layout)
      }, e.prototype.getLineStrings = function () {
        for (var t = this.flatCoordinates, e = this.ends_, r = this.layout, n = [], i = 0, o = 0, a = e.length; o < a; ++o) {
          var s = e[o], l = new Py(t.slice(i, s), r);
          n.push(l), i = s
        }
        return n
      }, e.prototype.getFlatMidpoints = function () {
        for (var t = [], e = this.flatCoordinates, r = 0, n = this.ends_, i = this.stride, o = 0, a = n.length; o < a; ++o) {
          var s = n[o];
          v(t, by(e, r, s, i, .5)), r = s
        }
        return t
      }, e.prototype.getSimplifiedGeometryInternal = function (t) {
        var r = [], n = [];
        return r.length = Ln(this.flatCoordinates, 0, this.ends_, this.stride, t, r, 0, n), new e(r, yt, n)
      }, e.prototype.getType = function () {
        return bt.MULTI_LINE_STRING
      }, e.prototype.intersectsExtent = function (t) {
        return ei(this.flatCoordinates, 0, this.ends_, this.stride, t)
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 2), this.flatCoordinates || (this.flatCoordinates = []);
        var r = Pn(this.flatCoordinates, 0, t, this.stride, this.ends_);
        this.flatCoordinates.length = 0 === r.length ? 0 : r[r.length - 1], this.changed()
      }, e
    }(vn), Ky = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Hy = function (t) {
      function e(e, r) {
        var n = t.call(this) || this;
        return r && !Array.isArray(e[0]) ? n.setFlatCoordinates(r, e) : n.setCoordinates(e, r), n
      }

      return Ky(e, t), e.prototype.appendPoint = function (t) {
        this.flatCoordinates ? v(this.flatCoordinates, t.getFlatCoordinates()) : this.flatCoordinates = t.getFlatCoordinates().slice(), this.changed()
      }, e.prototype.clone = function () {
        var t = new e(this.flatCoordinates.slice(), this.layout);
        return t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        if (n < Jt(this.getExtent(), t, e)) return n;
        for (var i = this.flatCoordinates, o = this.stride, a = 0, s = i.length; a < s; a += o) {
          var l = Ue(t, e, i[a], i[a + 1]);
          if (l < n) {
            n = l;
            for (var u = 0; u < o; ++u) r[u] = i[a + u];
            r.length = o
          }
        }
        return n
      }, e.prototype.getCoordinates = function () {
        return Nn(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
      }, e.prototype.getPoint = function (t) {
        var e = this.flatCoordinates ? this.flatCoordinates.length / this.stride : 0;
        return t < 0 || e <= t ? null : new qn(this.flatCoordinates.slice(t * this.stride, (t + 1) * this.stride), this.layout)
      }, e.prototype.getPoints = function () {
        for (var t = this.flatCoordinates, e = this.layout, r = this.stride, n = [], i = 0, o = t.length; i < o; i += r) {
          var a = new qn(t.slice(i, i + r), e);
          n.push(a)
        }
        return n
      }, e.prototype.getType = function () {
        return bt.MULTI_POINT
      }, e.prototype.intersectsExtent = function (t) {
        for (var e = this.flatCoordinates, r = this.stride, n = 0, i = e.length; n < i; n += r) {
          if (ee(t, e[n], e[n + 1])) return !0
        }
        return !1
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 1), this.flatCoordinates || (this.flatCoordinates = []), this.flatCoordinates.length = On(this.flatCoordinates, 0, t, this.stride), this.changed()
      }, e
    }(vn), $y = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Jy = function (t) {
      function e(e, r, n) {
        var i = t.call(this) || this;
        if (i.endss_ = [], i.flatInteriorPointsRevision_ = -1, i.flatInteriorPoints_ = null, i.maxDelta_ = -1, i.maxDeltaRevision_ = -1, i.orientedRevision_ = -1, i.orientedFlatCoordinates_ = null, !n && !Array.isArray(e[0])) {
          for (var o = i.getLayout(), a = e, s = [], l = [], u = 0, c = a.length; u < c; ++u) {
            var h = a[u];
            0 === u && (o = h.getLayout());
            for (var p = s.length, f = h.getEnds(), d = 0, g = f.length; d < g; ++d) f[d] += p;
            v(s, h.getFlatCoordinates()), l.push(f)
          }
          r = o, e = s, n = l
        }
        return void 0 !== r && n ? (i.setFlatCoordinates(r, e), i.endss_ = n) : i.setCoordinates(e, r), i
      }

      return $y(e, t), e.prototype.appendPolygon = function (t) {
        var e;
        if (this.flatCoordinates) {
          var r = this.flatCoordinates.length;
          v(this.flatCoordinates, t.getFlatCoordinates());
          for (var n = 0, i = (e = t.getEnds().slice()).length; n < i; ++n) e[n] += r
        } else this.flatCoordinates = t.getFlatCoordinates().slice(), e = t.getEnds().slice(), this.endss_.push();
        this.endss_.push(e), this.changed()
      }, e.prototype.clone = function () {
        for (var t = this.endss_.length, r = new Array(t), n = 0; n < t; ++n) r[n] = this.endss_[n].slice();
        var i = new e(this.flatCoordinates.slice(), this.layout, r);
        return i.applyProperties(this), i
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        return n < Jt(this.getExtent(), t, e) ? n : (this.maxDeltaRevision_ != this.getRevision() && (this.maxDelta_ = Math.sqrt(wn(this.flatCoordinates, 0, this.endss_, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), Tn(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, this.maxDelta_, !0, t, e, r, n))
      }, e.prototype.containsXY = function (t, e) {
        return Hn(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, t, e)
      }, e.prototype.getArea = function () {
        return Bn(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride)
      }, e.prototype.getCoordinates = function (t) {
        var e;
        return void 0 !== t ? ci(e = this.getOrientedFlatCoordinates().slice(), 0, this.endss_, this.stride, t) : e = this.flatCoordinates, Gn(e, 0, this.endss_, this.stride)
      }, e.prototype.getEndss = function () {
        return this.endss_
      }, e.prototype.getFlatInteriorPoints = function () {
        if (this.flatInteriorPointsRevision_ != this.getRevision()) {
          var t = Sy(this.flatCoordinates, 0, this.endss_, this.stride);
          this.flatInteriorPoints_ = Jn(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, t), this.flatInteriorPointsRevision_ = this.getRevision()
        }
        return this.flatInteriorPoints_
      }, e.prototype.getInteriorPoints = function () {
        return new Hy(this.getFlatInteriorPoints().slice(), vt)
      }, e.prototype.getOrientedFlatCoordinates = function () {
        if (this.orientedRevision_ != this.getRevision()) {
          var t = this.flatCoordinates;
          li(t, 0, this.endss_, this.stride) ? this.orientedFlatCoordinates_ = t : (this.orientedFlatCoordinates_ = t.slice(), this.orientedFlatCoordinates_.length = ci(this.orientedFlatCoordinates_, 0, this.endss_, this.stride)), this.orientedRevision_ = this.getRevision()
        }
        return this.orientedFlatCoordinates_
      }, e.prototype.getSimplifiedGeometryInternal = function (t) {
        var r = [], n = [];
        return r.length = jn(this.flatCoordinates, 0, this.endss_, this.stride, Math.sqrt(t), r, 0, n), new e(r, yt, n)
      }, e.prototype.getPolygon = function (t) {
        if (t < 0 || this.endss_.length <= t) return null;
        var e;
        if (0 === t) e = 0; else {
          var r = this.endss_[t - 1];
          e = r[r.length - 1]
        }
        var n = this.endss_[t].slice(), i = n[n.length - 1];
        if (0 !== e) for (var o = 0, a = n.length; o < a; ++o) n[o] -= e;
        return new fi(this.flatCoordinates.slice(e, i), this.layout, n)
      }, e.prototype.getPolygons = function () {
        for (var t = this.layout, e = this.flatCoordinates, r = this.endss_, n = [], i = 0, o = 0, a = r.length; o < a; ++o) {
          var s = r[o].slice(), l = s[s.length - 1];
          if (0 !== i) for (var u = 0, c = s.length; u < c; ++u) s[u] -= i;
          var h = new fi(e.slice(i, l), t, s);
          n.push(h), i = l
        }
        return n
      }, e.prototype.getType = function () {
        return bt.MULTI_POLYGON
      }, e.prototype.intersectsExtent = function (t) {
        return ii(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, t)
      }, e.prototype.setCoordinates = function (t, e) {
        this.setLayout(e, t, 3), this.flatCoordinates || (this.flatCoordinates = []);
        var r = Rn(this.flatCoordinates, 0, t, this.stride, this.endss_);
        if (0 === r.length) this.flatCoordinates.length = 0; else {
          var n = r[r.length - 1];
          this.flatCoordinates.length = 0 === n.length ? 0 : n[n.length - 1]
        }
        this.changed()
      }, e
    }(vn), Qy = r(5), tm = r.n(Qy), em = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function rm(t, e, r) {
      if (3 === t) {
        var n = {keys: [], values: [], features: []}, i = r.readVarint() + r.pos;
        r.readFields(nm, n, i), n.length = n.features.length, n.length && (e[n.name] = n)
      }
    }

    function nm(t, e, r) {
      if (15 === t) e.version = r.readVarint(); else if (1 === t) e.name = r.readString(); else if (5 === t) e.extent = r.readVarint(); else if (2 === t) e.features.push(r.pos); else if (3 === t) e.keys.push(r.readString()); else if (4 === t) {
        for (var n = null, i = r.readVarint() + r.pos; r.pos < i;) n = 1 === (t = r.readVarint() >> 3) ? r.readString() : 2 === t ? r.readFloat() : 3 === t ? r.readDouble() : 4 === t ? r.readVarint64() : 5 === t ? r.readVarint() : 6 === t ? r.readSVarint() : 7 === t ? r.readBoolean() : null;
        e.values.push(n)
      }
    }

    function im(t, e, r) {
      if (1 == t) e.id = r.readVarint(); else if (2 == t) for (var n = r.readVarint() + r.pos; r.pos < n;) {
        var i = e.layer.keys[r.readVarint()], o = e.layer.values[r.readVarint()];
        e.properties[i] = o
      } else 3 == t ? e.type = r.readVarint() : 4 == t && (e.geometry = r.pos)
    }

    function om(t, e, r) {
      t.pos = e.features[r];
      var n = t.readVarint() + t.pos, i = {layer: e, type: 0, properties: {}};
      return t.readFields(im, i, n), i
    }

    var am = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.dataProjection = new je({
          code: "",
          units: St.TILE_PIXELS
        }), r.featureClass_ = n.featureClass ? n.featureClass : Cy, r.geometryName_ = n.geometryName, r.layerName_ = n.layerName ? n.layerName : "layer", r.layers_ = n.layers ? n.layers : null, r.idProperty_ = n.idProperty, r
      }

      return em(e, t), e.prototype.readRawGeometry_ = function (t, e, r, n) {
        t.pos = e.geometry;
        for (var i = t.readVarint() + t.pos, o = 1, a = 0, s = 0, l = 0, u = 0, c = 0; t.pos < i;) {
          if (!a) {
            var h = t.readVarint();
            o = 7 & h, a = h >> 3
          }
          a--, 1 === o || 2 === o ? (s += t.readSVarint(), l += t.readSVarint(), 1 === o && u > c && (n.push(u), c = u), r.push(s, l), u += 2) : 7 === o ? u > c && (r.push(r[c], r[c + 1]), u += 2) : pt(!1, 59)
        }
        u > c && (n.push(u), c = u)
      }, e.prototype.createFeature_ = function (t, e, r) {
        var n, i = e.type;
        if (0 === i) return null;
        var o, a = e.properties;
        this.idProperty_ ? (o = a[this.idProperty_], delete a[this.idProperty_]) : o = e.id, a[this.layerName_] = e.layer.name;
        var s = [], l = [];
        this.readRawGeometry_(t, e, s, l);
        var u = function (t, e) {
          var r;
          1 === t ? r = 1 === e ? bt.POINT : bt.MULTI_POINT : 2 === t ? r = 1 === e ? bt.LINE_STRING : bt.MULTI_LINE_STRING : 3 === t && (r = bt.POLYGON);
          return r
        }(i, l.length);
        if (this.featureClass_ === Cy) (n = new this.featureClass_(u, s, l, a, o)).transform(r.dataProjection); else {
          var c = void 0;
          if (u == bt.POLYGON) {
            for (var h = [], p = 0, f = 0, d = 0, g = l.length; d < g; ++d) {
              var y = l[d];
              if (ai(s, p, y, 2)) {
                if (0 === h.length) continue;
                h[h.length - 1].push(l[f])
              } else h.push(l.slice(f, d + 1));
              f = d + 1, p = y
            }
            c = h.length > 1 ? new Jy(s, yt, h) : new fi(s, yt, l)
          } else c = u === bt.POINT ? new qn(s, yt) : u === bt.LINE_STRING ? new Py(s, yt) : u === bt.POLYGON ? new fi(s, yt, l) : u === bt.MULTI_POINT ? new Hy(s, yt) : u === bt.MULTI_LINE_STRING ? new Zy(s, yt, l) : null;
          n = new (0, this.featureClass_), this.geometryName_ && n.setGeometryName(this.geometryName_);
          var m = Wy(c, !1, r);
          n.setGeometry(m), n.setId(o), n.setProperties(a, !0)
        }
        return n
      }, e.prototype.getType = function () {
        return Cu
      }, e.prototype.readFeatures = function (t, e) {
        var r = this.layers_, n = this.adaptOptions(e), i = Gr(n.dataProjection);
        i.setWorldExtent(n.extent), n.dataProjection = i;
        var o = new tm.a(t), a = o.readFields(rm, {}), s = [];
        for (var l in a) if (!r || -1 != r.indexOf(l)) {
          var u = a[l], c = u ? [0, 0, u.extent, u.extent] : null;
          i.setExtent(c);
          for (var h = 0, p = u.length; h < p; ++h) {
            var f = om(o, u, h);
            s.push(this.createFeature_(o, f, n))
          }
        }
        return s
      }, e.prototype.readProjection = function (t) {
        return this.dataProjection
      }, e.prototype.setLayers = function (t) {
        this.layers_ = t
      }, e
    }(Yy), sm = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), lm = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = O({}, n);
        delete i.preload, delete i.useInterimTilesOnError, r = t.call(this, i) || this;
        var o = n.renderMode || dy;
        return pt(null == o || o == fy || o == dy || o == gy, 28), r.renderMode_ = o, r.setPreload(n.preload ? n.preload : 0), r.setUseInterimTilesOnError(void 0 === n.useInterimTilesOnError || n.useInterimTilesOnError), r
      }

      return sm(e, t), e.prototype.createRenderer = function () {
        return new _y(this)
      }, e.prototype.getFeatures = function (e) {
        return t.prototype.getFeatures.call(this, e)
      }, e.prototype.getRenderMode = function () {
        return this.renderMode_
      }, e.prototype.getPreload = function () {
        return this.get(gd)
      }, e.prototype.getUseInterimTilesOnError = function () {
        return this.get(yd)
      }, e.prototype.setPreload = function (t) {
        this.set(gd, t)
      }, e.prototype.setUseInterimTilesOnError = function (t) {
        this.set(yd, t)
      }, e
    }(wg), um = r(2), cm = r.n(um), hm = r(0);
    "function" == typeof Object.assign && Object.assign;

    function pm(t) {
      return t * Math.PI / 180
    }

    var fm = function () {
      for (var t = [], e = 78271.51696402048; t.length <= 24; e /= 2) t.push(e);
      return t
    }();

    function dm(t, e) {
      if ("undefined" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope && "undefined" != typeof OffscreenCanvas) return new OffscreenCanvas(t, e);
      var r = document.createElement("canvas");
      return r.width = t, r.height = e, r
    }

    var gm, ym = Array(256).join(" ");

    function mm(t, e) {
      if (e >= .05) {
        for (var r = "", n = t.split("\n"), i = ym.slice(0, Math.round(e / .1)), o = 0, a = n.length; o < a; ++o) o > 0 && (r += "\n"), r += n[o].split("").join(i);
        return r
      }
      return t
    }

    function vm() {
      return gm || (gm = dm(1, 1).getContext("2d")), gm
    }

    function _m(t, e) {
      return vm().measureText(t).width + (t.length - 1) * e
    }

    var bm = {};
    ga && Z(ga, k, (function () {
      bm = {}
    }));
    var xm, wm, Sm = hm.e.isFunction, Em = hm.e.convertFunction, Tm = hm.c.isExpression,
      Cm = hm.c.createPropertyExpression,
      Om = {Point: 1, MultiPoint: 1, LineString: 2, MultiLineString: 2, Polygon: 3, MultiPolygon: 3}, Pm = {
        center: [.5, .5],
        left: [0, .5],
        right: [1, .5],
        top: [.5, 0],
        bottom: [.5, 1],
        "top-left": [0, 0],
        "top-right": [1, 0],
        "bottom-left": [0, 1],
        "bottom-right": [1, 1]
      }, Rm = {}, Im = {zoom: 0}, Lm = {};

    function Mm(t, e, r, n, i) {
      var o = t.id;
      Lm[o] || (Lm[o] = {});
      var a = Lm[o];
      if (!a[r]) {
        var s = (t[e] || Rm)[r], l = hm.f[e + "_" + t.type][r];
        void 0 === s && (s = l.default);
        var u = Tm(s);
        if (!u && Sm(s) && (s = Em(s, l), u = !0), u) {
          var c = function (t, e) {
            var r = Cm(t, e);
            if ("error" === r.result) throw new Error(r.value.map((function (t) {
              return t.key + ": " + t.message
            })).join(", "));
            return r.value
          }(s, l);
          a[r] = c.evaluate.bind(c)
        } else "color" == l.type && (s = hm.a.parse(s)), a[r] = function () {
          return s
        }
      }
      return Im.zoom = n, a[r](Im, i)
    }

    var Fm = {};

    function Am(t, e) {
      if (t) {
        if (0 === t.a || 0 === e) return;
        var r = t.a;
        return e = void 0 === e ? 1 : e, "rgba(" + Math.round(255 * t.r / r) + "," + Math.round(255 * t.g / r) + "," + Math.round(255 * t.b / r) + "," + r * e + ")"
      }
      return t
    }

    var km = /^([^]*)\{(.*)\}([^]*)$/;

    function jm(t, e) {
      var r;
      do {
        if (r = t.match(km)) {
          var n = e[r[2]] || "";
          t = r[1] + n + r[3]
        }
      } while (r);
      return t
    }

    var Nm = !1;
    var Dm = function (t, e, r, n, i, o, a) {
      if (void 0 === n && (n = fm), "string" == typeof e && (e = JSON.parse(e)), 8 != e.version) throw new Error("glStyle version 8 required.");
      var s, l;
      if (o) if ("undefined" != typeof Image) {
        var u = new Image;
        u.crossOrigin = "anonymous", u.onload = function () {
          s = u, l = [u.width, u.height], t.changed(), u.onload = null
        }, u.src = o
      } else if ("undefined" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope) {
        var c = self;
        c.postMessage({action: "loadImage", src: o}), c.addEventListener("message", (function (t) {
          "imageLoaded" === t.data.action && t.data.src === o && (s = t.data.image, l = [s.width, s.height])
        }))
      }
      for (var h, p = Object(hm.b)(e.layers), f = {}, d = [], g = 0, y = p.length; g < y; ++g) {
        var m = p[g], v = m.id;
        if ("string" == typeof r && m.source == r || -1 !== r.indexOf(v)) {
          var _ = m["source-layer"];
          if (!h) {
            h = m.source;
            var b = e.sources[h];
            if (!b) throw new Error('Source "' + h + '" is not defined');
            var x = b.type;
            if ("vector" !== x && "geojson" !== x) throw new Error('Source "' + h + '" is not of type "vector" or "geojson", but "' + x + '"')
          }
          var w = f[_];
          w || (w = f[_] = []), w.push({layer: m, index: g}), d.push(v)
        }
        delete Lm[v], delete Fm[v]
      }
      var S = new gp, E = new ep, T = {}, C = {}, O = [], P = function (t, e) {
        var r = t.getProperties(), o = f[r.layer];
        if (o) {
          var u = n.indexOf(e);
          -1 == u && (u = function (t, e) {
            for (var r = 0, n = e.length; r < n; ++r) {
              if (e[r] < t && r + 1 < n) {
                var i = e[r] / e[r + 1];
                return r + Math.log(e[r] / t) / Math.log(i)
              }
            }
            return n - 1
          }(e, n));
          for (var c, h = Om[t.getGeometry().getType()], p = {properties: r, type: h}, d = -1, g = function (n, f) {
            var g = o[n], y = g.layer, m = y.id, v = y.layout || Rm, _ = y.paint || Rm;
            if ("none" === v.visibility || "minzoom" in y && u < y.minzoom || "maxzoom" in y && u >= y.maxzoom) return "continue";
            var b = y.filter;
            if (!b || function (t, e, r, n) {
              return t in Fm || (Fm[t] = Object(hm.d)(e).filter), Im.zoom = n, Fm[t](Im, r)
            }(m, b, p, u)) {
              c = y;
              var x = void 0, w = void 0, P = void 0, R = void 0, I = void 0, L = void 0, M = g.index;
              if (3 == h && ("fill" == y.type || "fill-extrusion" == y.type)) if (w = Mm(y, "paint", y.type + "-opacity", u, p), y.type + "-pattern" in _) {
                var F = Mm(y, "paint", y.type + "-pattern", u, p);
                if (F) {
                  var A = "string" == typeof F ? jm(F, r) : F.toString();
                  if (s && i && i[A]) {
                    ++d, (L = O[d]) && L.getFill() && !L.getStroke() && !L.getText() || (L = O[d] = new wp({fill: new ep})), P = L.getFill(), L.setZIndex(M);
                    var k = C[ut = A + "." + w];
                    if (!k) (pt = (ht = dm((ct = i[A]).width, ct.height)).getContext("2d")).globalAlpha = w, pt.drawImage(s, ct.x, ct.y, ct.width, ct.height, 0, 0, ct.width, ct.height), k = pt.createPattern(ht, "repeat"), C[ut] = k;
                    P.setColor(k)
                  }
                }
              } else (x = Am(Mm(y, "paint", y.type + "-color", u, p), w)) && (y.type + "-outline-color" in _ && (I = Am(Mm(y, "paint", y.type + "-outline-color", u, p), w)), I || (I = x), ++d, (L = O[d]) && L.getFill() && L.getStroke() && !L.getText() || (L = O[d] = new wp({
                fill: new ep,
                stroke: new gp
              })), (P = L.getFill()).setColor(x), (R = L.getStroke()).setColor(I), R.setWidth(1), L.setZIndex(M));
              if (1 != h && "line" == y.type) {
                x = !("line-pattern" in _) && "line-color" in _ ? Am(Mm(y, "paint", "line-color", u, p), Mm(y, "paint", "line-opacity", u, p)) : void 0;
                var j = Mm(y, "paint", "line-width", u, p);
                x && j > 0 && (++d, (L = O[d]) && L.getStroke() && !L.getFill() && !L.getText() || (L = O[d] = new wp({stroke: new gp})), (R = L.getStroke()).setLineCap(Mm(y, "layout", "line-cap", u, p)), R.setLineJoin(Mm(y, "layout", "line-join", u, p)), R.setMiterLimit(Mm(y, "layout", "line-miter-limit", u, p)), R.setColor(x), R.setWidth(j), R.setLineDash(_["line-dasharray"] ? Mm(y, "paint", "line-dasharray", u, p).map((function (t) {
                  return t * j
                })) : null), L.setZIndex(M))
              }
              var N = !1, D = null, G = 0, z = void 0, U = void 0, B = void 0;
              if ((1 == h || 2 == h) && "icon-image" in v) {
                var V = Mm(y, "layout", "icon-image", u, p);
                if (V) {
                  z = "string" == typeof V ? jm(V, r) : V.toString();
                  var Y = void 0;
                  if (s && i && i[z]) {
                    var W = Mm(y, "layout", "icon-rotation-alignment", u, p);
                    if (2 == h) {
                      var q = t.getGeometry();
                      if (q.getFlatMidpoint || q.getFlatMidpoints) {
                        var X = q.getExtent();
                        if (Math.sqrt(Math.max(Math.pow((X[2] - X[0]) / e, 2), Math.pow((X[3] - X[1]) / e, 2))) > 150) {
                          var Z = "MultiLineString" === q.getType() ? q.getFlatMidpoints() : q.getFlatMidpoint();
                          if (wm || (wm = new Cy("Point", xm = [NaN, NaN], [], {}, null)), Y = wm, xm[0] = Z[0], xm[1] = Z[1], "line" === (Mt = Mm(y, "layout", "symbol-placement", u, p)) && "map" === W) for (var K = q.getStride(), H = q.getFlatCoordinates(), $ = 0, J = H.length - K; $ < J; $ += K) {
                            var Q = H[$], tt = H[$ + 1], et = H[$ + K], rt = H[$ + K + 1], nt = Math.min(Q, et),
                              it = Math.min(tt, rt), ot = Math.max(Q, et), at = Math.max(tt, rt);
                            if (Z[0] >= nt && Z[0] <= ot && Z[1] >= it && Z[1] <= at) {
                              G = Math.atan2(tt - rt, et - Q);
                              break
                            }
                          }
                        }
                      }
                    }
                    if (2 !== h || Y) {
                      ++d, (L = O[d]) && L.getImage() && !L.getFill() && !L.getStroke() || (L = O[d] = new wp), L.setGeometry(Y);
                      var st = Mm(y, "layout", "icon-size", u, p),
                        lt = void 0 !== _["icon-color"] ? Mm(y, "paint", "icon-color", u, p) : null, ut = z + "." + st;
                      if (null !== lt && (ut += "." + lt), !(U = T[ut])) {
                        var ct = i[z];
                        if (null !== lt) {
                          var ht, pt;
                          (pt = (ht = dm(ct.width, ct.height)).getContext("2d")).drawImage(s, ct.x, ct.y, ct.width, ct.height, 0, 0, ct.width, ct.height);
                          for (var ft = pt.getImageData(0, 0, ht.width, ht.height), dt = 0, gt = ft.data.length; dt < gt; dt += 4) {
                            var yt = lt.a;
                            0 !== yt && (ft.data[dt] = 255 * lt.r / yt, ft.data[dt + 1] = 255 * lt.g / yt, ft.data[dt + 2] = 255 * lt.b / yt), ft.data[dt + 3] = yt
                          }
                          pt.putImageData(ft, 0, 0), U = T[ut] = new dp({
                            img: ht,
                            imgSize: [ht.width, ht.height],
                            scale: st / ct.pixelRatio
                          })
                        } else U = T[ut] = new dp({
                          img: s,
                          imgSize: l,
                          size: [ct.width, ct.height],
                          offset: [ct.x, ct.y],
                          rotateWithView: "map" === W,
                          scale: st / ct.pixelRatio
                        })
                      }
                      U.setRotation(G + pm(Mm(y, "layout", "icon-rotate", u, p))), U.setOpacity(Mm(y, "paint", "icon-opacity", u, p)), U.setAnchor(Pm[Mm(y, "layout", "icon-anchor", u, p)]), L.setImage(U), D = L.getText(), L.setText(void 0), L.setZIndex(M), N = !0, B = !1
                    } else B = !0
                  }
                }
              }
              if (1 == h && "circle-radius" in _) {
                ++d, (L = O[d]) && L.getImage() && !L.getFill() && !L.getStroke() || (L = O[d] = new wp);
                var mt = Mm(y, "paint", "circle-radius", u, p),
                  vt = Am(Mm(y, "paint", "circle-stroke-color", u, p), Mm(y, "paint", "circle-stroke-opacity", u, p)),
                  _t = Am(Mm(y, "paint", "circle-color", u, p), Mm(y, "paint", "circle-opacity", u, p)),
                  bt = Mm(y, "paint", "circle-stroke-width", u, p), xt = mt + "." + vt + "." + _t + "." + bt;
                (U = T[xt]) || (U = T[xt] = new tp({
                  radius: mt,
                  stroke: vt && bt > 0 ? new gp({width: bt, color: vt}) : void 0,
                  fill: _t ? new ep({color: _t}) : void 0
                })), L.setImage(U), D = L.getText(), L.setText(void 0), L.setGeometry(void 0), L.setZIndex(M), N = !0
              }
              var wt = void 0;
              if ("text-field" in v) wt = jm(Mm(y, "layout", "text-field", u, p).toString(), r).trim(), w = Mm(y, "paint", "text-opacity", u, p);
              if (wt && w && !B) {
                N || (++d, (L = O[d]) && L.getText() && !L.getFill() && !L.getStroke() || (L = O[d] = new wp), L.setImage(void 0), L.setGeometry(void 0)), L.getText() || L.setText(D || new Tp({padding: [2, 2, 2, 2]})), D = L.getText();
                var St = Math.round(Mm(y, "layout", "text-size", u, p)), Et = Mm(y, "layout", "text-font", u, p),
                  Tt = Mm(y, "layout", "text-line-height", u, p), Ct = cm()(a ? a(Et) : Et, St, Tt),
                  Ot = v["text-transform"];
                "uppercase" == Ot ? wt = wt.toUpperCase() : "lowercase" == Ot && (wt = wt.toLowerCase());
                var Pt = Mm(y, "layout", "text-max-width", u, p), Rt = Mm(y, "layout", "text-letter-spacing", u, p),
                  It = 2 == h ? mm(wt, Rt) : function t(e, r, n, i) {
                    if (-1 !== e.indexOf("\n")) {
                      for (var o = e.split("\n"), a = [], s = 0, l = o.length; s < l; ++s) a.push(t(o[s], r, n, i));
                      return a.join("\n")
                    }
                    var u = n + "," + r + "," + e + "," + i, c = bm[u];
                    if (!c) {
                      var h = e.split(" ");
                      if (h.length > 1) {
                        var p = vm();
                        p.font = r;
                        var f = p.measureText("M").width * n, d = "";
                        for (a = [], s = 0, l = h.length; s < l; ++s) {
                          var g = h[s], y = d + (d ? " " : "") + g;
                          _m(y, i) <= f ? d = y : (d && a.push(d), d = g)
                        }
                        d && a.push(d);
                        for (s = 0, l = a.length; s < l && l > 1; ++s) {
                          var m = a[s];
                          if (_m(m, i) < .35 * f) {
                            var v = s > 0 ? _m(a[s - 1], i) : 1 / 0, _ = s < l - 1 ? _m(a[s + 1], i) : 1 / 0;
                            a.splice(s, 1), l -= 1, v < _ ? (a[s - 1] += " " + m, s -= 1) : a[s] = m + " " + a[s]
                          }
                        }
                        for (s = 0, l = a.length - 1; s < l; ++s) {
                          var b = a[s], x = a[s + 1];
                          if (_m(b, i) > .7 * f && _m(x, i) < .6 * f) {
                            var w = b.split(" "), S = w.pop();
                            _m(S, i) < .2 * f && (a[s] = w.join(" "), a[s + 1] = S + " " + x), l -= 1
                          }
                        }
                        c = a.join("\n")
                      } else c = e;
                      c = mm(c, i), bm[u] = c
                    }
                    return c
                  }(wt, Ct, Pt, Rt);
                D.setText(It), D.setFont(Ct), D.setRotation(pm(Mm(y, "layout", "text-rotate", u, p)));
                var Lt = Mm(y, "layout", "text-anchor", u, p),
                  Mt = N || 1 == h ? "point" : Mm(y, "layout", "symbol-placement", u, p);
                D.setPlacement(Mt);
                var Ft = Mm(y, "paint", "text-halo-width", u, p), At = Mm(y, "layout", "text-offset", u, p),
                  kt = Mm(y, "paint", "text-translate", u, p), jt = 0, Nt = 0;
                if ("point" == Mt) {
                  var Dt = "center";
                  -1 !== Lt.indexOf("left") ? (Dt = "left", Nt = Ft) : -1 !== Lt.indexOf("right") && (Dt = "right", Nt = -Ft), D.setTextAlign(Dt);
                  var Gt = Mm(y, "layout", "text-rotation-alignment", u, p);
                  D.setRotateWithView("map" == Gt)
                } else D.setMaxAngle(pm(Mm(y, "layout", "text-max-angle", u, p)) * wt.length / It.length), D.setTextAlign(), D.setRotateWithView(!1);
                var zt = "middle";
                0 == Lt.indexOf("bottom") ? (zt = "bottom", jt = -Ft - .5 * (Tt - 1) * St) : 0 == Lt.indexOf("top") && (zt = "top", jt = Ft + .5 * (Tt - 1) * St), D.setTextBaseline(zt), D.setOffsetX(At[0] * St + Nt + kt[0]), D.setOffsetY(At[1] * St + jt + kt[1]), E.setColor(Am(Mm(y, "paint", "text-color", u, p), w)), D.setFill(E);
                var Ut = Am(Mm(y, "paint", "text-halo-color", u, p), w);
                if (Ut) {
                  S.setColor(Ut), Ft *= 2;
                  var Bt = .5 * St;
                  S.setWidth(Ft <= Bt ? Ft : Bt), D.setStroke(S)
                } else D.setStroke(void 0);
                var Vt = Mm(y, "layout", "text-padding", u, p), Yt = D.getPadding();
                Vt !== Yt[0] && (Yt[0] = Yt[1] = Yt[2] = Yt[3] = Vt), L.setZIndex(M)
              }
            }
          }, y = 0, m = o.length; y < m; ++y) g(y);
          return d > -1 ? (O.length = d + 1, Nm && ("function" == typeof t.set ? t.set("mapbox-layer", c) : t.getProperties()["mapbox-layer"] = c), O) : void 0
        }
      };
      return t.setStyle(P), t.set("mapbox-source", h), t.set("mapbox-layers", d), P
    }, Gm = r(6), zm = r.n(Gm), Um = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Bm(t) {
      for (var e = [], r = 0, n = t.length; r < n; ++r) e.push(t[r].clone());
      return e
    }

    var Vm = function (t) {
      function e(e) {
        var r = t.call(this) || this;
        return r.geometries_ = e || null, r.changeEventsKeys_ = [], r.listenGeometriesChange_(), r
      }

      return Um(e, t), e.prototype.unlistenGeometriesChange_ = function () {
        this.changeEventsKeys_.forEach(H), this.changeEventsKeys_.length = 0
      }, e.prototype.listenGeometriesChange_ = function () {
        if (this.geometries_) for (var t = 0, e = this.geometries_.length; t < e; ++t) this.changeEventsKeys_.push(Z(this.geometries_[t], F, this.changed, this))
      }, e.prototype.clone = function () {
        var t = new e(null);
        return t.setGeometries(this.geometries_), t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        if (n < Jt(this.getExtent(), t, e)) return n;
        for (var i = this.geometries_, o = 0, a = i.length; o < a; ++o) n = i[o].closestPointXY(t, e, r, n);
        return n
      }, e.prototype.containsXY = function (t, e) {
        for (var r = this.geometries_, n = 0, i = r.length; n < i; ++n) if (r[n].containsXY(t, e)) return !0;
        return !1
      }, e.prototype.computeExtent = function (t) {
        oe(t);
        for (var e = this.geometries_, r = 0, n = e.length; r < n; ++r) he(t, e[r].getExtent());
        return t
      }, e.prototype.getGeometries = function () {
        return Bm(this.geometries_)
      }, e.prototype.getGeometriesArray = function () {
        return this.geometries_
      }, e.prototype.getGeometriesArrayRecursive = function () {
        for (var t = [], e = this.geometries_, r = 0, n = e.length; r < n; ++r) e[r].getType() === this.getType() ? t = t.concat(e[r].getGeometriesArrayRecursive()) : t.push(e[r]);
        return t
      }, e.prototype.getSimplifiedGeometry = function (t) {
        if (this.simplifiedGeometryRevision !== this.getRevision() && (this.simplifiedGeometryMaxMinSquaredTolerance = 0, this.simplifiedGeometryRevision = this.getRevision()), t < 0 || 0 !== this.simplifiedGeometryMaxMinSquaredTolerance && t < this.simplifiedGeometryMaxMinSquaredTolerance) return this;
        for (var r = [], n = this.geometries_, i = !1, o = 0, a = n.length; o < a; ++o) {
          var s = n[o], l = s.getSimplifiedGeometry(t);
          r.push(l), l !== s && (i = !0)
        }
        if (i) {
          var u = new e(null);
          return u.setGeometriesArray(r), u
        }
        return this.simplifiedGeometryMaxMinSquaredTolerance = t, this
      }, e.prototype.getType = function () {
        return bt.GEOMETRY_COLLECTION
      }, e.prototype.intersectsExtent = function (t) {
        for (var e = this.geometries_, r = 0, n = e.length; r < n; ++r) if (e[r].intersectsExtent(t)) return !0;
        return !1
      }, e.prototype.isEmpty = function () {
        return 0 === this.geometries_.length
      }, e.prototype.rotate = function (t, e) {
        for (var r = this.geometries_, n = 0, i = r.length; n < i; ++n) r[n].rotate(t, e);
        this.changed()
      }, e.prototype.scale = function (t, e, r) {
        var n = r;
        n || (n = xe(this.getExtent()));
        for (var i = this.geometries_, o = 0, a = i.length; o < a; ++o) i[o].scale(t, e, n);
        this.changed()
      }, e.prototype.setGeometries = function (t) {
        this.setGeometriesArray(Bm(t))
      }, e.prototype.setGeometriesArray = function (t) {
        this.unlistenGeometriesChange_(), this.geometries_ = t, this.listenGeometriesChange_(), this.changed()
      }, e.prototype.applyTransform = function (t) {
        for (var e = this.geometries_, r = 0, n = e.length; r < n; ++r) e[r].applyTransform(t);
        this.changed()
      }, e.prototype.translate = function (t, e) {
        for (var r = this.geometries_, n = 0, i = r.length; n < i; ++n) r[n].translate(t, e);
        this.changed()
      }, e.prototype.disposeInternal = function () {
        this.unlistenGeometriesChange_(), t.prototype.disposeInternal.call(this)
      }, e
    }(dn), Ym = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Wm(t) {
      if ("string" == typeof t) {
        var e = JSON.parse(t);
        return e || null
      }
      return null !== t ? t : null
    }

    var qm = function (t) {
      function e() {
        return t.call(this) || this
      }

      return Ym(e, t), e.prototype.getType = function () {
        return Ou
      }, e.prototype.readFeature = function (t, e) {
        return this.readFeatureFromObject(Wm(t), this.getReadOptions(t, e))
      }, e.prototype.readFeatures = function (t, e) {
        return this.readFeaturesFromObject(Wm(t), this.getReadOptions(t, e))
      }, e.prototype.readFeatureFromObject = function (t, e) {
        return n()
      }, e.prototype.readFeaturesFromObject = function (t, e) {
        return n()
      }, e.prototype.readGeometry = function (t, e) {
        return this.readGeometryFromObject(Wm(t), this.getReadOptions(t, e))
      }, e.prototype.readGeometryFromObject = function (t, e) {
        return n()
      }, e.prototype.readProjection = function (t) {
        return this.readProjectionFromObject(Wm(t))
      }, e.prototype.readProjectionFromObject = function (t) {
        return n()
      }, e.prototype.writeFeature = function (t, e) {
        return JSON.stringify(this.writeFeatureObject(t, e))
      }, e.prototype.writeFeatureObject = function (t, e) {
        return n()
      }, e.prototype.writeFeatures = function (t, e) {
        return JSON.stringify(this.writeFeaturesObject(t, e))
      }, e.prototype.writeFeaturesObject = function (t, e) {
        return n()
      }, e.prototype.writeGeometry = function (t, e) {
        return JSON.stringify(this.writeGeometryObject(t, e))
      }, e.prototype.writeGeometryObject = function (t, e) {
        return n()
      }, e
    }(Yy), Xm = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Zm(t, e) {
      if (!t) return null;
      var r;
      switch (t.type) {
        case bt.POINT:
          r = function (t) {
            return new qn(t.coordinates)
          }(t);
          break;
        case bt.LINE_STRING:
          r = function (t) {
            return new Py(t.coordinates)
          }(t);
          break;
        case bt.POLYGON:
          r = function (t) {
            return new fi(t.coordinates)
          }(t);
          break;
        case bt.MULTI_POINT:
          r = function (t) {
            return new Hy(t.coordinates)
          }(t);
          break;
        case bt.MULTI_LINE_STRING:
          r = function (t) {
            return new Zy(t.coordinates)
          }(t);
          break;
        case bt.MULTI_POLYGON:
          r = function (t) {
            return new Jy(t.coordinates)
          }(t);
          break;
        case bt.GEOMETRY_COLLECTION:
          r = function (t, e) {
            var r = t.geometries.map((function (t) {
              return Zm(t, e)
            }));
            return new Vm(r)
          }(t);
          break;
        default:
          throw new Error("Unsupported GeoJSON type: " + t.type)
      }
      return Wy(r, !1, e)
    }

    function Km(t, e) {
      var r, n = (t = Wy(t, !0, e)).getType();
      switch (n) {
        case bt.POINT:
          r = function (t, e) {
            return {type: "Point", coordinates: t.getCoordinates()}
          }(t);
          break;
        case bt.LINE_STRING:
          r = function (t, e) {
            return {type: "LineString", coordinates: t.getCoordinates()}
          }(t);
          break;
        case bt.POLYGON:
          r = function (t, e) {
            var r;
            e && (r = e.rightHanded);
            return {type: "Polygon", coordinates: t.getCoordinates(r)}
          }(t, e);
          break;
        case bt.MULTI_POINT:
          r = function (t, e) {
            return {type: "MultiPoint", coordinates: t.getCoordinates()}
          }(t);
          break;
        case bt.MULTI_LINE_STRING:
          r = function (t, e) {
            return {type: "MultiLineString", coordinates: t.getCoordinates()}
          }(t);
          break;
        case bt.MULTI_POLYGON:
          r = function (t, e) {
            var r;
            e && (r = e.rightHanded);
            return {type: "MultiPolygon", coordinates: t.getCoordinates(r)}
          }(t, e);
          break;
        case bt.GEOMETRY_COLLECTION:
          r = function (t, e) {
            return {
              type: "GeometryCollection", geometries: t.getGeometriesArray().map((function (t) {
                var r = O({}, e);
                return delete r.featureProjection, Km(t, r)
              }))
            }
          }(t, e);
          break;
        case bt.CIRCLE:
          r = {type: "GeometryCollection", geometries: []};
          break;
        default:
          throw new Error("Unsupported geometry type: " + n)
      }
      return r
    }

    var Hm, $m = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this) || this).dataProjection = Gr(n.dataProjection ? n.dataProjection : "EPSG:4326"), n.featureProjection && (r.defaultFeatureProjection = Gr(n.featureProjection)), r.geometryName_ = n.geometryName, r.extractGeometryName_ = n.extractGeometryName, r
      }

      return Xm(e, t), e.prototype.readFeatureFromObject = function (t, e) {
        var r = null,
          n = Zm((r = "Feature" === t.type ? t : {type: "Feature", geometry: t, properties: null}).geometry, e),
          i = new gt;
        return this.geometryName_ ? i.setGeometryName(this.geometryName_) : this.extractGeometryName_ && "geometry_name" in r !== void 0 && i.setGeometryName(r.geometry_name), i.setGeometry(n), "id" in r && i.setId(r.id), r.properties && i.setProperties(r.properties, !0), i
      }, e.prototype.readFeaturesFromObject = function (t, e) {
        var r = null;
        if ("FeatureCollection" === t.type) {
          r = [];
          for (var n = t.features, i = 0, o = n.length; i < o; ++i) r.push(this.readFeatureFromObject(n[i], e))
        } else r = [this.readFeatureFromObject(t, e)];
        return r
      }, e.prototype.readGeometryFromObject = function (t, e) {
        return Zm(t, e)
      }, e.prototype.readProjectionFromObject = function (t) {
        var e, r = t.crs;
        return r ? "name" == r.type ? e = Gr(r.properties.name) : "EPSG" === r.type ? e = Gr("EPSG:" + r.properties.code) : pt(!1, 36) : e = this.dataProjection, e
      }, e.prototype.writeFeatureObject = function (t, e) {
        e = this.adaptOptions(e);
        var r = {type: "Feature", geometry: null, properties: null}, n = t.getId();
        if (void 0 !== n && (r.id = n), !t.hasProperties()) return r;
        var i = t.getProperties(), o = t.getGeometry();
        return o && (r.geometry = Km(o, e), delete i[t.getGeometryName()]), I(i) || (r.properties = i), r
      }, e.prototype.writeFeaturesObject = function (t, e) {
        e = this.adaptOptions(e);
        for (var r = [], n = 0, i = t.length; n < i; ++n) r.push(this.writeFeatureObject(t[n], e));
        return {type: "FeatureCollection", features: r}
      }, e.prototype.writeGeometryObject = function (t, e) {
        return Km(t, this.adaptOptions(e))
      }, e
    }(qm), Jm = /font-family: ?([^;]*);/, Qm = /("|')/g;

    function tv(t) {
      if (!Hm) {
        Hm = {};
        for (var e = document.styleSheets, r = 0, n = e.length; r < n; ++r) {
          var i = e[r];
          try {
            var o = i.rules || i.cssRules;
            if (o) for (var a = 0, s = o.length; a < s; ++a) {
              var l = o[a];
              if (5 == l.type) {
                var u = l.cssText.match(Jm);
                Hm[u[1].replace(Qm, "")] = !0
              }
            }
          } catch (t) {
          }
        }
      }
      return t in Hm
    }

    var ev = {}, rv = zm.a.getNames();

    function nv(t) {
      var e = t.toString();
      if (e in ev) return t;
      for (var r = t.map((function (t) {
        var e = cm()(t, 1).split(" ");
        return [e.slice(3).join(" ").replace(/"/g, ""), e[1] + e[0]]
      })), n = 0, i = r.length; n < i; ++n) {
        var o = r[n], a = o[0];
        if (!tv(a) && -1 !== rv.indexOf(a)) {
          var s = "https://fonts.googleapis.com/css?family=" + a.replace(/ /g, "+") + ":" + o[1];
          if (!document.querySelector('link[href="' + s + '"]')) {
            var l = document.createElement("link");
            l.href = s, l.rel = "stylesheet", document.head.appendChild(l)
          }
        }
      }
      return ev[e] = !0, t
    }

    var iv = /^(.*)(\?.*)$/;

    function ov(t, e) {
      return e && 0 === t.indexOf(".") && (t = e + t), t
    }

    function av(t, e, r) {
      var n = (t = ov(t, e)).match(iv);
      return n ? n[1] + r + (n.length > 2 ? n[2] : "") : t + r
    }

    function sv(t, e, r, n, i) {
      return new Promise((function (o, a) {
        if ("object" != typeof e && (e = JSON.parse(e)), 8 != e.version) return a(new Error("glStyle version 8 required."));
        if (!(t instanceof Iy || t instanceof lm)) return a(new Error("Can only apply to VectorLayer or VectorTileLayer"));
        var s, l, u;

        function c() {
          u || e.sprite && !s ? u ? (t.setStyle(u), o()) : a(new Error("Something went wrong trying to apply style.")) : (u = Dm(t, e, r, i, s, l, nv), t.getStyle() ? o() : a(new Error("Nothing to show for source [" + r + "]")))
        }

        if (e.sprite) {
          var h = .5 == (window.devicePixelRatio >= 1.5 ? .5 : 1) ? "@2x" : "", p = av(e.sprite, n, h + ".json");
          fetch(p, {credentials: "same-origin"}).then((function (t) {
            return t.ok || "" === h ? t : (p = av(e.sprite, n, ".json"), fetch(p, {credentials: "same-origin"}))
          })).then((function (t) {
            if (t.ok) return t.json();
            a(new Error("Problem fetching sprite from " + p + ": " + t.statusText))
          })).then((function (t) {
            if (void 0 === t) return a(new Error("No sprites found."));
            s = t, l = av(e.sprite, n, h + ".png"), c()
          })).catch((function (t) {
            a(new Error("Sprites cannot be loaded: " + p + ": " + t.message))
          }))
        } else c()
      }))
    }

    new $m;
    var lv = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function uv(t) {
      return 0 !== t.indexOf("mapbox://") ? "" : t.slice("mapbox://".length)
    }

    function cv(t, e) {
      var r = uv(t);
      if (!r) return t;
      if (0 !== r.indexOf("sprites/")) throw new Error("unexpected sprites url: " + t);
      return "https://api.mapbox.com/styles/v1/" + r.slice("sprites/".length) + "/sprite?access_token=" + e
    }

    function hv(t, e) {
      var r = uv(t);
      if (!r) return t;
      if (0 !== r.indexOf("fonts/")) throw new Error("unexpected fonts url: " + t);
      return "https://api.mapbox.com/fonts/v1/" + r.slice("fonts/".length) + "/0-255.pbf?access_token=" + e
    }

    function pv(t, e) {
      var r = uv(t);
      if (!r) return t;
      if (0 !== r.indexOf("styles/")) throw new Error("unexpected style url: " + t);
      return "https://api.mapbox.com/styles/v1/" + r.slice("styles/".length) + "?&access_token=" + e
    }

    function fv(t, e) {
      var r = uv(t);
      return r ? "https://{a-d}.tiles.mapbox.com/v4/" + r + "/{z}/{x}/{y}.vector.pbf?access_token=" + e : t
    }

    var dv = function (t) {
      function e(e) {
        var r = t.call(this, A) || this;
        return r.error = e, r
      }

      return lv(e, t), e
    }(c), gv = "vector", yv = function (t) {
      function e(e) {
        var r = this, n = !("declutter" in e) || e.declutter, i = new og({state: Jo, format: new am});
        return (r = t.call(this, {
          source: i,
          declutter: n,
          className: e.className,
          opacity: e.opacity,
          visible: e.visible,
          zIndex: e.zIndex,
          minResolution: e.minResolution,
          maxResolution: e.maxResolution,
          minZoom: e.minZoom,
          maxZoom: e.maxZoom,
          renderOrder: e.renderOrder,
          renderBuffer: e.renderBuffer,
          renderMode: e.renderMode,
          map: e.map,
          updateWhileAnimating: e.updateWhileAnimating,
          updateWhileInteracting: e.updateWhileInteracting,
          preload: e.preload,
          useInterimTilesOnError: e.useInterimTilesOnError
        }) || this).sourceId = e.source, r.layers = e.layers, r.accessToken = e.accessToken, r.fetchStyle(e.styleUrl), r
      }

      return lv(e, t), e.prototype.fetchStyle = function (t) {
        var e = this, r = pv(t, this.accessToken);
        fetch(r).then((function (t) {
          if (!t.ok) throw new Error("unexpected response when fetching style: " + t.status);
          return t.json()
        })).then((function (t) {
          e.onStyleLoad(t)
        })).catch((function (t) {
          e.handleError(t)
        }))
      }, e.prototype.onStyleLoad = function (t) {
        var e, r, n = this;
        if (this.layers) {
          for (var i = {}, o = 0; o < t.layers.length; ++o) {
            var a = t.layers[o];
            a.source && (i[a.id] = a.source)
          }
          var s = void 0;
          for (o = 0; o < this.layers.length; ++o) {
            var l = i[this.layers[o]];
            if (!l) return void this.handleError(new Error("could not find source for " + this.layers[o]));
            if (s) {
              if (s !== l) return void this.handleError(new Error("layers can only use a single source, found " + s + " and " + l))
            } else s = l
          }
          e = s, r = this.layers
        } else r = e = this.sourceId;
        r || (r = e = Object.keys(t.sources)[0]), t.sprite && (t.sprite = cv(t.sprite, this.accessToken)), t.glyphs && (t.glyphs = hv(t.glyphs, this.accessToken));
        var u = t.sources[e];
        if (u.type === gv) {
          var c = this.getSource();
          c.setUrl(fv(u.url, this.accessToken)), sv(this, t, r).then((function () {
            c.setState(Qo)
          })).catch((function (t) {
            n.handleError(t)
          }))
        } else this.handleError(new Error("only works for vector sources, found " + u.type))
      }, e.prototype.handleError = function (t) {
        this.dispatchEvent(new dv(t)), this.getSource().setState(ta)
      }, e
    }(lm), mv = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), vv = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = O({}, n);
        return delete i.imageRatio, (r = t.call(this, i) || this).imageRatio_ = void 0 !== n.imageRatio ? n.imageRatio : 1, r
      }

      return mv(e, t), e.prototype.getImageRatio = function () {
        return this.imageRatio_
      }, e.prototype.createRenderer = function () {
        return new py(this)
      }, e
    }(wg), _v = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), bv = function (t) {
      function e(e) {
        var r = this, n = O({}, e);
        return (r = t.call(this, n) || this).parseResult_ = Wh(e.style), r.hitDetectionDisabled_ = !!e.disableHitDetection, r
      }

      return _v(e, t), e.prototype.createRenderer = function () {
        return new Eg(this, {
          className: this.getClassName(),
          vertexShader: this.parseResult_.builder.getSymbolVertexShader(),
          fragmentShader: this.parseResult_.builder.getSymbolFragmentShader(),
          hitVertexShader: !this.hitDetectionDisabled_ && this.parseResult_.builder.getSymbolVertexShader(!0),
          hitFragmentShader: !this.hitDetectionDisabled_ && this.parseResult_.builder.getSymbolFragmentShader(!0),
          uniforms: this.parseResult_.uniforms,
          attributes: this.parseResult_.attributes
        })
      }, e.prototype.disposeInternal = function () {
        this.getRenderer().disposeInternal(), t.prototype.disposeInternal.call(this)
      }, e
    }(na), xv = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), wv = "addfeatures", Sv = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e) || this;
        return o.features = n, o.file = r, o.projection = i, o
      }

      return xv(e, t), e
    }(c), Ev = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, {handleEvent: S}) || this).readAsBuffer_ = !1, r.formats_ = [];
        for (var i = n.formatConstructors ? n.formatConstructors : [], o = 0, a = i.length; o < a; ++o) {
          var s = i[o];
          "function" == typeof s && (s = new s), r.formats_.push(s), r.readAsBuffer_ = r.readAsBuffer_ || s.getType() === Cu
        }
        return r.projection_ = n.projection ? Gr(n.projection) : null, r.dropListenKeys_ = null, r.source_ = n.source || null, r.target = n.target ? n.target : null, r
      }

      return xv(e, t), e.prototype.handleResult_ = function (t, e) {
        var r, n = e.target.result, i = this.getMap(), o = this.projection_;
        o || (o = i.getView().getProjection());
        for (var a = this.formats_, s = 0, l = a.length; s < l; ++s) {
          var u = a[s], c = n;
          this.readAsBuffer_ && u.getType() !== Cu && (void 0 === r && (r = (new TextDecoder).decode(n)), c = r);
          var h = this.tryReadFeatures_(u, c, {featureProjection: o});
          if (h && h.length > 0) {
            this.source_ && (this.source_.clear(), this.source_.addFeatures(h)), this.dispatchEvent(new Sv(wv, t, h, o));
            break
          }
        }
      }, e.prototype.registerListeners_ = function () {
        var t = this.getMap();
        if (t) {
          var e = this.target ? this.target : t.getViewport();
          this.dropListenKeys_ = [Z(e, U, this.handleDrop, this), Z(e, G, this.handleStop, this), Z(e, z, this.handleStop, this), Z(e, U, this.handleStop, this)]
        }
      }, e.prototype.setActive = function (e) {
        !this.getActive() && e && this.registerListeners_(), this.getActive() && !e && this.unregisterListeners_(), t.prototype.setActive.call(this, e)
      }, e.prototype.setMap = function (e) {
        this.unregisterListeners_(), t.prototype.setMap.call(this, e), this.getActive() && this.registerListeners_()
      }, e.prototype.tryReadFeatures_ = function (t, e, r) {
        try {
          return t.readFeatures(e, r)
        } catch (t) {
          return null
        }
      }, e.prototype.unregisterListeners_ = function () {
        this.dropListenKeys_ && (this.dropListenKeys_.forEach(H), this.dropListenKeys_ = null)
      }, e.prototype.handleDrop = function (t) {
        for (var e = t.dataTransfer.files, r = 0, n = e.length; r < n; ++r) {
          var i = e.item(r), o = new FileReader;
          o.addEventListener(Y, this.handleResult_.bind(this, i)), this.readAsBuffer_ ? o.readAsArrayBuffer(i) : o.readAsText(i)
        }
      }, e.prototype.handleStop = function (t) {
        t.stopPropagation(), t.preventDefault(), t.dataTransfer.dropEffect = "copy"
      }, e
    }(qs), Tv = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Cv = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, n) || this).condition_ = n.condition ? n.condition : ll, r.lastAngle_ = void 0, r.lastMagnitude_ = void 0, r.lastScaleDelta_ = 0, r.duration_ = void 0 !== n.duration ? n.duration : 400, r
      }

      return Tv(e, t), e.prototype.handleDragEvent = function (t) {
        if (cl(t)) {
          var e = t.map, r = e.getSize(), n = t.pixel, i = n[0] - r[0] / 2, o = r[1] / 2 - n[1], a = Math.atan2(o, i),
            s = Math.sqrt(i * i + o * o), l = e.getView();
          if (void 0 !== this.lastAngle_) {
            var u = this.lastAngle_ - a;
            l.adjustRotationInternal(u)
          }
          this.lastAngle_ = a, void 0 !== this.lastMagnitude_ && l.adjustResolutionInternal(this.lastMagnitude_ / s), void 0 !== this.lastMagnitude_ && (this.lastScaleDelta_ = this.lastMagnitude_ / s), this.lastMagnitude_ = s
        }
      }, e.prototype.handleUpEvent = function (t) {
        if (!cl(t)) return !0;
        var e = t.map.getView(), r = this.lastScaleDelta_ > 1 ? 1 : -1;
        return e.endInteraction(this.duration_, r), this.lastScaleDelta_ = 0, !1
      }, e.prototype.handleDownEvent = function (t) {
        return !!cl(t) && (!!this.condition_(t) && (t.map.getView().beginInteraction(), this.lastAngle_ = void 0, this.lastMagnitude_ = void 0, !0))
      }, e
    }($s), Ov = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Pv = function (t) {
      function e(e, r, n) {
        var i = t.call(this) || this;
        if (void 0 !== n && void 0 === r) i.setFlatCoordinates(n, e); else {
          var o = r || 0;
          i.setCenterAndRadius(e, o, n)
        }
        return i
      }

      return Ov(e, t), e.prototype.clone = function () {
        var t = new e(this.flatCoordinates.slice(), void 0, this.layout);
        return t.applyProperties(this), t
      }, e.prototype.closestPointXY = function (t, e, r, n) {
        var i = this.flatCoordinates, o = t - i[0], a = e - i[1], s = o * o + a * a;
        if (s < n) {
          if (0 === s) for (var l = 0; l < this.stride; ++l) r[l] = i[l]; else {
            var u = this.getRadius() / Math.sqrt(s);
            r[0] = i[0] + u * o, r[1] = i[1] + u * a;
            for (l = 2; l < this.stride; ++l) r[l] = i[l]
          }
          return r.length = this.stride, s
        }
        return n
      }, e.prototype.containsXY = function (t, e) {
        var r = this.flatCoordinates, n = t - r[0], i = e - r[1];
        return n * n + i * i <= this.getRadiusSquared_()
      }, e.prototype.getCenter = function () {
        return this.flatCoordinates.slice(0, this.stride)
      }, e.prototype.computeExtent = function (t) {
        var e = this.flatCoordinates, r = e[this.stride] - e[0];
        return ie(e[0] - r, e[1] - r, e[0] + r, e[1] + r, t)
      }, e.prototype.getRadius = function () {
        return Math.sqrt(this.getRadiusSquared_())
      }, e.prototype.getRadiusSquared_ = function () {
        var t = this.flatCoordinates[this.stride] - this.flatCoordinates[0],
          e = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];
        return t * t + e * e
      }, e.prototype.getType = function () {
        return bt.CIRCLE
      }, e.prototype.intersectsExtent = function (t) {
        if (Re(t, this.getExtent())) {
          var e = this.getCenter();
          return t[0] <= e[0] && t[2] >= e[0] || (t[1] <= e[1] && t[3] >= e[1] || me(t, this.intersectsCoordinate.bind(this)))
        }
        return !1
      }, e.prototype.setCenter = function (t) {
        var e = this.stride, r = this.flatCoordinates[e] - this.flatCoordinates[0], n = t.slice();
        n[e] = n[0] + r;
        for (var i = 1; i < e; ++i) n[e + i] = t[i];
        this.setFlatCoordinates(this.layout, n), this.changed()
      }, e.prototype.setCenterAndRadius = function (t, e, r) {
        this.setLayout(r, t, 0), this.flatCoordinates || (this.flatCoordinates = []);
        var n = this.flatCoordinates, i = Cn(n, 0, t, this.stride);
        n[i++] = n[0] + e;
        for (var o = 1, a = this.stride; o < a; ++o) n[i++] = n[o];
        n.length = i, this.changed()
      }, e.prototype.getCoordinates = function () {
        return null
      }, e.prototype.setCoordinates = function (t, e) {
      }, e.prototype.setRadius = function (t) {
        this.flatCoordinates[this.stride] = this.flatCoordinates[0] + t, this.changed()
      }, e.prototype.rotate = function (t, e) {
        var r = this.getCenter(), n = this.getStride();
        this.setCenter(un(r, 0, r.length, n, t, e, r)), this.changed()
      }, e.prototype.translate = function (t, e) {
        var r = this.getCenter(), n = this.getStride();
        this.setCenter(hn(r, 0, r.length, n, t, e, r)), this.changed()
      }, e
    }(vn);
    Pv.prototype.transform;
    var Rv = Pv, Iv = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), Lv = "Point", Mv = "LineString", Fv = "Polygon", Av = "Circle", kv = "drawstart", jv = "drawend",
      Nv = "drawabort", Dv = function (t) {
        function e(e, r) {
          var n = t.call(this, e) || this;
          return n.feature = r, n
        }

        return Iv(e, t), e
      }(c);
    var Gv = function (t) {
      function e(e) {
        var r = this, n = e;
        n.stopDown || (n.stopDown = E), (r = t.call(this, n) || this).shouldHandle_ = !1, r.downPx_ = null, r.downTimeout_, r.lastDragTime_, r.pointerType_, r.freehand_ = !1, r.source_ = e.source ? e.source : null, r.features_ = e.features ? e.features : null, r.snapTolerance_ = e.snapTolerance ? e.snapTolerance : 12, r.type_ = e.type, r.mode_ = function (t) {
          var e;
          t === bt.POINT || t === bt.MULTI_POINT ? e = Lv : t === bt.LINE_STRING || t === bt.MULTI_LINE_STRING ? e = Mv : t === bt.POLYGON || t === bt.MULTI_POLYGON ? e = Fv : t === bt.CIRCLE && (e = Av);
          return e
        }(r.type_), r.stopClick_ = !!e.stopClick, r.minPoints_ = e.minPoints ? e.minPoints : r.mode_ === Fv ? 3 : 2, r.maxPoints_ = r.mode_ === Av ? 2 : e.maxPoints ? e.maxPoints : 1 / 0, r.finishCondition_ = e.finishCondition ? e.finishCondition : S;
        var i, o = e.geometryFunction;
        if (!o) {
          var a, s = r.mode_;
          if (s === Av) o = function (t, e, r) {
            var n = e || new Rv([NaN, NaN]), i = rn(t[0], r), o = Rr(i, rn(t[t.length - 1], r));
            n.setCenterAndRadius(i, Math.sqrt(o));
            var a = tn();
            return a && n.transform(r, a), n
          }; else s === Lv ? a = qn : s === Mv ? a = Py : s === Fv && (a = fi), o = function (t, e, r) {
            return e ? s === Fv ? t[0].length ? e.setCoordinates([t[0].concat([t[0][0]])]) : e.setCoordinates([]) : e.setCoordinates(t) : e = new a(t), e
          }
        }
        return r.geometryFunction_ = o, r.dragVertexDelay_ = void 0 !== e.dragVertexDelay ? e.dragVertexDelay : 500, r.finishCoordinate_ = null, r.sketchFeature_ = null, r.sketchPoint_ = null, r.sketchCoords_ = null, r.sketchLine_ = null, r.sketchLineCoords_ = null, r.squaredClickTolerance_ = e.clickTolerance ? e.clickTolerance * e.clickTolerance : 36, r.overlay_ = new Iy({
          source: new hf({
            useSpatialIndex: !1,
            wrapX: !!e.wrapX && e.wrapX
          }), style: e.style ? e.style : (i = bp(), function (t, e) {
            return i[t.getGeometry().getType()]
          }), updateWhileInteracting: !0
        }), r.geometryName_ = e.geometryName, r.condition_ = e.condition ? e.condition : sl, r.freehandCondition_, e.freehand ? r.freehandCondition_ = nl : r.freehandCondition_ = e.freehandCondition ? e.freehandCondition : ll, r.addEventListener(it(Bs), r.updateState_), r
      }

      return Iv(e, t), e.prototype.setMap = function (e) {
        t.prototype.setMap.call(this, e), this.updateState_()
      }, e.prototype.getOverlay = function () {
        return this.overlay_
      }, e.prototype.handleEvent = function (e) {
        e.originalEvent.type === j && e.originalEvent.preventDefault(), this.freehand_ = this.mode_ !== Lv && this.freehandCondition_(e);
        var r = e.type === Ga.POINTERMOVE, n = !0;
        !this.freehand_ && this.lastDragTime_ && e.type === Ga.POINTERDRAG && (Date.now() - this.lastDragTime_ >= this.dragVertexDelay_ ? (this.downPx_ = e.pixel, this.shouldHandle_ = !this.freehand_, r = !0) : this.lastDragTime_ = void 0, this.shouldHandle_ && void 0 !== this.downTimeout_ && (clearTimeout(this.downTimeout_), this.downTimeout_ = void 0));
        return this.freehand_ && e.type === Ga.POINTERDRAG && null !== this.sketchFeature_ ? (this.addToDrawing_(e.coordinate), n = !1) : this.freehand_ && e.type === Ga.POINTERDOWN ? n = !1 : r && this.getPointerCount() < 2 ? (n = e.type === Ga.POINTERMOVE) && this.freehand_ ? (this.handlePointerMove_(e), this.shouldHandle_ && e.originalEvent.preventDefault()) : ("mouse" === e.originalEvent.pointerType || e.type === Ga.POINTERDRAG && void 0 === this.downTimeout_) && this.handlePointerMove_(e) : e.type === Ga.DBLCLICK && (n = !1), t.prototype.handleEvent.call(this, e) && n
      }, e.prototype.handleDownEvent = function (t) {
        return this.shouldHandle_ = !this.freehand_, this.freehand_ ? (this.downPx_ = t.pixel, this.finishCoordinate_ || this.startDrawing_(t.coordinate), !0) : this.condition_(t) ? (this.lastDragTime_ = Date.now(), this.downTimeout_ = setTimeout(function () {
          this.handlePointerMove_(new Da(Ga.POINTERMOVE, t.map, t.originalEvent, !1, t.frameState))
        }.bind(this), this.dragVertexDelay_), this.downPx_ = t.pixel, !0) : (this.lastDragTime_ = void 0, !1)
      }, e.prototype.handleUpEvent = function (t) {
        var e = !0;
        if (0 === this.getPointerCount()) if (this.downTimeout_ && (clearTimeout(this.downTimeout_), this.downTimeout_ = void 0), this.handlePointerMove_(t), this.shouldHandle_) {
          switch (!0) {
            case!this.finishCoordinate_:
              if (this.startDrawing_(t.coordinate), this.mode_ !== Lv) break;
            case this.freehand_ || this.atFinish_(t.pixel) && this.finishCondition_(t):
              this.finishDrawing();
              break;
            case!this.freehand_:
              this.addToDrawing_(t.coordinate)
          }
          e = !1
        } else this.freehand_ && this.abortDrawing();
        return !e && this.stopClick_ && t.originalEvent.stopPropagation(), e
      }, e.prototype.handlePointerMove_ = function (t) {
        if (this.pointerType_ = t.originalEvent.pointerType, this.downPx_ && (!this.freehand_ && this.shouldHandle_ || this.freehand_ && !this.shouldHandle_)) {
          var e = this.downPx_, r = t.pixel, n = e[0] - r[0], i = e[1] - r[1], o = n * n + i * i;
          if (this.shouldHandle_ = this.freehand_ ? o > this.squaredClickTolerance_ : o <= this.squaredClickTolerance_, !this.shouldHandle_) return
        }
        this.finishCoordinate_ ? this.modifyDrawing_(t.coordinate) : this.createOrUpdateSketchPoint_(t)
      }, e.prototype.atFinish_ = function (t) {
        var e = !1;
        if (this.sketchFeature_) {
          var r = !1, n = [this.finishCoordinate_], i = this.mode_;
          if (i === Lv) e = !0; else if (i === Av) e = 2 === this.sketchCoords_.length; else if (i === Mv) r = this.sketchCoords_.length > this.minPoints_; else if (i === Fv) {
            var o = this.sketchCoords_;
            r = o[0].length > this.minPoints_, n = [o[0][0], o[0][o[0].length - 2]]
          }
          if (r) for (var a = this.getMap(), s = 0, l = n.length; s < l; s++) {
            var u = n[s], c = a.getPixelFromCoordinate(u), h = t[0] - c[0], p = t[1] - c[1],
              f = this.freehand_ ? 1 : this.snapTolerance_;
            if (e = Math.sqrt(h * h + p * p) <= f) {
              this.finishCoordinate_ = u;
              break
            }
          }
        }
        return e
      }, e.prototype.createOrUpdateSketchPoint_ = function (t) {
        var e = t.coordinate.slice();
        this.sketchPoint_ ? this.sketchPoint_.getGeometry().setCoordinates(e) : (this.sketchPoint_ = new gt(new qn(e)), this.updateSketchFeatures_())
      }, e.prototype.createOrUpdateCustomSketchLine_ = function (t) {
        this.sketchLine_ || (this.sketchLine_ = new gt);
        var e = t.getLinearRing(0), r = this.sketchLine_.getGeometry();
        r ? (r.setFlatCoordinates(e.getLayout(), e.getFlatCoordinates()), r.changed()) : (r = new Py(e.getFlatCoordinates(), e.getLayout()), this.sketchLine_.setGeometry(r))
      }, e.prototype.startDrawing_ = function (t) {
        var e = this.getMap().getView().getProjection();
        this.finishCoordinate_ = t, this.mode_ === Lv ? this.sketchCoords_ = t.slice() : this.mode_ === Fv ? (this.sketchCoords_ = [[t.slice(), t.slice()]], this.sketchLineCoords_ = this.sketchCoords_[0]) : this.sketchCoords_ = [t.slice(), t.slice()], this.sketchLineCoords_ && (this.sketchLine_ = new gt(new Py(this.sketchLineCoords_)));
        var r = this.geometryFunction_(this.sketchCoords_, void 0, e);
        this.sketchFeature_ = new gt, this.geometryName_ && this.sketchFeature_.setGeometryName(this.geometryName_), this.sketchFeature_.setGeometry(r), this.updateSketchFeatures_(), this.dispatchEvent(new Dv(kv, this.sketchFeature_))
      }, e.prototype.modifyDrawing_ = function (t) {
        var e, r, n = this.getMap(), i = this.sketchFeature_.getGeometry(), o = n.getView().getProjection();
        (this.mode_ === Lv ? r = this.sketchCoords_ : this.mode_ === Fv ? (r = (e = this.sketchCoords_[0])[e.length - 1], this.atFinish_(n.getPixelFromCoordinate(t)) && (t = this.finishCoordinate_.slice())) : r = (e = this.sketchCoords_)[e.length - 1], r[0] = t[0], r[1] = t[1], this.geometryFunction_(this.sketchCoords_, i, o), this.sketchPoint_) && this.sketchPoint_.getGeometry().setCoordinates(t);
        if (i.getType() === bt.POLYGON && this.mode_ !== Fv) this.createOrUpdateCustomSketchLine_(i); else if (this.sketchLineCoords_) {
          this.sketchLine_.getGeometry().setCoordinates(this.sketchLineCoords_)
        }
        this.updateSketchFeatures_()
      }, e.prototype.addToDrawing_ = function (t) {
        var e, r, n = this.sketchFeature_.getGeometry(), i = this.getMap().getView().getProjection(), o = this.mode_;
        o === Mv || o === Av ? (this.finishCoordinate_ = t.slice(), (r = this.sketchCoords_).length >= this.maxPoints_ && (this.freehand_ ? r.pop() : e = !0), r.push(t.slice()), this.geometryFunction_(r, n, i)) : o === Fv && ((r = this.sketchCoords_[0]).length >= this.maxPoints_ && (this.freehand_ ? r.pop() : e = !0), r.push(t.slice()), e && (this.finishCoordinate_ = r[0]), this.geometryFunction_(this.sketchCoords_, n, i)), this.updateSketchFeatures_(), e && this.finishDrawing()
      }, e.prototype.removeLastPoint = function () {
        if (this.sketchFeature_) {
          var t, e = this.sketchFeature_.getGeometry(), r = this.getMap().getView().getProjection(), n = this.mode_;
          if (n === Mv || n === Av) {
            if ((t = this.sketchCoords_).splice(-2, 1), t.length >= 2) {
              this.finishCoordinate_ = t[t.length - 2].slice();
              var i = this.finishCoordinate_.slice();
              t[t.length - 1] = i, this.sketchPoint_.setGeometry(new qn(i))
            }
            this.geometryFunction_(t, e, r), e.getType() === bt.POLYGON && this.sketchLine_ && this.createOrUpdateCustomSketchLine_(e)
          } else if (n === Fv) {
            (t = this.sketchCoords_[0]).splice(-2, 1);
            var o = this.sketchLine_.getGeometry();
            if (t.length >= 2) {
              i = t[t.length - 2].slice();
              t[t.length - 1] = i, this.sketchPoint_.setGeometry(new qn(i))
            }
            o.setCoordinates(t), this.geometryFunction_(this.sketchCoords_, e, r)
          }
          1 === t.length && this.abortDrawing(), this.updateSketchFeatures_()
        }
      }, e.prototype.finishDrawing = function () {
        var t = this.abortDrawing_();
        if (t) {
          var e = this.sketchCoords_, r = t.getGeometry(), n = this.getMap().getView().getProjection();
          this.mode_ === Mv ? (e.pop(), this.geometryFunction_(e, r, n)) : this.mode_ === Fv && (e[0].pop(), this.geometryFunction_(e, r, n), e = r.getCoordinates()), this.type_ === bt.MULTI_POINT ? t.setGeometry(new Hy([e])) : this.type_ === bt.MULTI_LINE_STRING ? t.setGeometry(new Zy([e])) : this.type_ === bt.MULTI_POLYGON && t.setGeometry(new Jy([e])), this.dispatchEvent(new Dv(jv, t)), this.features_ && this.features_.push(t), this.source_ && this.source_.addFeature(t)
        }
      }, e.prototype.abortDrawing_ = function () {
        this.finishCoordinate_ = null;
        var t = this.sketchFeature_;
        return this.sketchFeature_ = null, this.sketchPoint_ = null, this.sketchLine_ = null, this.overlay_.getSource().clear(!0), t
      }, e.prototype.abortDrawing = function () {
        var t = this.abortDrawing_();
        t && this.dispatchEvent(new Dv(Nv, t))
      }, e.prototype.appendCoordinates = function (t) {
        var e, r = this.mode_, n = !this.sketchFeature_;
        if (n && this.startDrawing_(t[0]), r === Mv || r === Av) e = this.sketchCoords_; else {
          if (r !== Fv) return;
          e = this.sketchCoords_ && this.sketchCoords_.length ? this.sketchCoords_[0] : []
        }
        n && e.shift(), e.pop();
        for (var i = 0; i < t.length; i++) this.addToDrawing_(t[i]);
        var o = t[t.length - 1];
        this.addToDrawing_(o), this.modifyDrawing_(o)
      }, e.prototype.extend = function (t) {
        var e = t.getGeometry();
        this.sketchFeature_ = t, this.sketchCoords_ = e.getCoordinates();
        var r = this.sketchCoords_[this.sketchCoords_.length - 1];
        this.finishCoordinate_ = r.slice(), this.sketchCoords_.push(r.slice()), this.sketchPoint_ = new gt(new qn(r)), this.updateSketchFeatures_(), this.dispatchEvent(new Dv(kv, this.sketchFeature_))
      }, e.prototype.updateSketchFeatures_ = function () {
        var t = [];
        this.sketchFeature_ && t.push(this.sketchFeature_), this.sketchLine_ && t.push(this.sketchLine_), this.sketchPoint_ && t.push(this.sketchPoint_);
        var e = this.overlay_.getSource();
        e.clear(!0), e.addFeatures(t)
      }, e.prototype.updateState_ = function () {
        var t = this.getMap(), e = this.getActive();
        t && e || this.abortDrawing(), this.overlay_.setMap(e ? t : null)
      }, e
    }($s), zv = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Uv = "extentchanged", Bv = function (t) {
      function e(e) {
        var r = t.call(this, Uv) || this;
        return r.extent = e, r
      }

      return zv(e, t), e
    }(c);

    function Vv() {
      var t = bp();
      return function (e, r) {
        return t[bt.POINT]
      }
    }

    function Yv(t) {
      return function (e) {
        return Kt([t, e])
      }
    }

    function Wv(t, e) {
      return t[0] == e[0] ? function (r) {
        return Kt([t, [r[0], e[1]]])
      } : t[1] == e[1] ? function (r) {
        return Kt([t, [e[0], r[1]]])
      } : null
    }

    var qv = function (t) {
      function e(e) {
        var r, n = this, i = e || {};
        return (n = t.call(this, i) || this).condition_ = i.condition ? i.condition : nl, n.extent_ = null, n.pointerHandler_ = null, n.pixelTolerance_ = void 0 !== i.pixelTolerance ? i.pixelTolerance : 10, n.snappedToVertex_ = !1, n.extentFeature_ = null, n.vertexFeature_ = null, e || (e = {}), n.extentOverlay_ = new Iy({
          source: new hf({
            useSpatialIndex: !1,
            wrapX: !!e.wrapX
          }), style: e.boxStyle ? e.boxStyle : (r = bp(), function (t, e) {
            return r[bt.POLYGON]
          }), updateWhileAnimating: !0, updateWhileInteracting: !0
        }), n.vertexOverlay_ = new Iy({
          source: new hf({useSpatialIndex: !1, wrapX: !!e.wrapX}),
          style: e.pointerStyle ? e.pointerStyle : Vv(),
          updateWhileAnimating: !0,
          updateWhileInteracting: !0
        }), e.extent && n.setExtent(e.extent), n
      }

      return zv(e, t), e.prototype.snapToVertex_ = function (t, e) {
        var r = e.getCoordinateFromPixelInternal(t), n = this.getExtentInternal();
        if (n) {
          var i = function (t) {
            return [[[t[0], t[1]], [t[0], t[3]]], [[t[0], t[3]], [t[2], t[3]]], [[t[2], t[3]], [t[2], t[1]]], [[t[2], t[1]], [t[0], t[1]]]]
          }(n);
          i.sort((function (t, e) {
            return Lr(r, t) - Lr(r, e)
          }));
          var o = i[0], a = Sr(r, o), s = e.getPixelFromCoordinateInternal(a);
          if (Ir(t, s) <= this.pixelTolerance_) {
            var l = e.getPixelFromCoordinateInternal(o[0]), u = e.getPixelFromCoordinateInternal(o[1]), c = Rr(s, l),
              h = Rr(s, u), p = Math.sqrt(Math.min(c, h));
            return this.snappedToVertex_ = p <= this.pixelTolerance_, this.snappedToVertex_ && (a = c > h ? o[1] : o[0]), a
          }
        }
        return null
      }, e.prototype.handlePointerMove_ = function (t) {
        var e = t.pixel, r = t.map, n = this.snapToVertex_(e, r);
        n || (n = r.getCoordinateFromPixelInternal(e)), this.createOrUpdatePointerFeature_(n)
      }, e.prototype.createOrUpdateExtentFeature_ = function (t) {
        var e = this.extentFeature_;
        return e ? t ? e.setGeometry(gi(t)) : e.setGeometry(void 0) : (e = new gt(t ? gi(t) : {}), this.extentFeature_ = e, this.extentOverlay_.getSource().addFeature(e)), e
      }, e.prototype.createOrUpdatePointerFeature_ = function (t) {
        var e = this.vertexFeature_;
        e ? e.getGeometry().setCoordinates(t) : (e = new gt(new qn(t)), this.vertexFeature_ = e, this.vertexOverlay_.getSource().addFeature(e));
        return e
      }, e.prototype.handleEvent = function (e) {
        return !e.originalEvent || !this.condition_(e) || (e.type != Ga.POINTERMOVE || this.handlingDownUpSequence || this.handlePointerMove_(e), t.prototype.handleEvent.call(this, e), !1)
      }, e.prototype.handleDownEvent = function (t) {
        var e = t.pixel, r = t.map, n = this.getExtentInternal(), i = this.snapToVertex_(e, r), o = function (t) {
          var e = null, r = null;
          return t[0] == n[0] ? e = n[2] : t[0] == n[2] && (e = n[0]), t[1] == n[1] ? r = n[3] : t[1] == n[3] && (r = n[1]), null !== e && null !== r ? [e, r] : null
        };
        if (i && n) {
          var a = i[0] == n[0] || i[0] == n[2] ? i[0] : null, s = i[1] == n[1] || i[1] == n[3] ? i[1] : null;
          null !== a && null !== s ? this.pointerHandler_ = Yv(o(i)) : null !== a ? this.pointerHandler_ = Wv(o([a, n[1]]), o([a, n[3]])) : null !== s && (this.pointerHandler_ = Wv(o([n[0], s]), o([n[2], s])))
        } else i = r.getCoordinateFromPixelInternal(e), this.setExtent([i[0], i[1], i[0], i[1]]), this.pointerHandler_ = Yv(i);
        return !0
      }, e.prototype.handleDragEvent = function (t) {
        if (this.pointerHandler_) {
          var e = t.coordinate;
          this.setExtent(this.pointerHandler_(e)), this.createOrUpdatePointerFeature_(e)
        }
      }, e.prototype.handleUpEvent = function (t) {
        this.pointerHandler_ = null;
        var e = this.getExtentInternal();
        return e && 0 !== ve(e) || this.setExtent(null), !1
      }, e.prototype.setMap = function (e) {
        this.extentOverlay_.setMap(e), this.vertexOverlay_.setMap(e), t.prototype.setMap.call(this, e)
      }, e.prototype.getExtent = function () {
        return nn(this.getExtentInternal(), this.getMap().getView().getProjection())
      }, e.prototype.getExtentInternal = function () {
        return this.extent_
      }, e.prototype.setExtent = function (t) {
        this.extent_ = t || null, this.createOrUpdateExtentFeature_(t), this.dispatchEvent(new Bv(this.extent_))
      }, e
    }($s), Xv = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Zv = [0, 0, 0, 0], Kv = [], Hv = "modifystart", $v = "modifyend", Jv = function (t) {
      function e(e, r, n) {
        var i = t.call(this, e) || this;
        return i.features = r, i.mapBrowserEvent = n, i
      }

      return Xv(e, t), e
    }(c);

    function Qv(t, e) {
      return t.index - e.index
    }

    function t_(t, e, r) {
      var n = e.geometry;
      if (n.getType() === bt.CIRCLE) {
        var i = n;
        if (1 === e.index) {
          var o = tn();
          o && (i = i.clone().transform(o, r));
          var a = Rr(i.getCenter(), rn(t, r)), s = Math.sqrt(a) - i.getRadius();
          return s * s
        }
      }
      var l = rn(t, r);
      return Kv[0] = rn(e.segment[0], r), Kv[1] = rn(e.segment[1], r), Lr(l, Kv)
    }

    function e_(t, e, r) {
      var n = e.geometry;
      if (n.getType() === bt.CIRCLE && 1 === e.index) {
        var i = n, o = tn();
        return o && (i = i.clone().transform(o, r)), en(i.getClosestPoint(rn(t, r)), r)
      }
      var a = rn(t, r);
      return Kv[0] = rn(e.segment[0], r), Kv[1] = rn(e.segment[1], r), en(Sr(a, Kv), r)
    }

    var r_ = function (t) {
      function e(e) {
        var r, n, i = t.call(this, e) || this;
        if (i.boundHandleFeatureChange_ = i.handleFeatureChange_.bind(i), i.condition_ = e.condition ? e.condition : hl, i.defaultDeleteCondition_ = function (t) {
          return Qs(t) && al(t)
        }, i.deleteCondition_ = e.deleteCondition ? e.deleteCondition : i.defaultDeleteCondition_, i.insertVertexCondition_ = e.insertVertexCondition ? e.insertVertexCondition : nl, i.vertexFeature_ = null, i.vertexSegments_ = null, i.lastPixel_ = [0, 0], i.ignoreNextSingleClick_ = !1, i.featuresBeingModified_ = null, i.rBush_ = new Rp, i.pixelTolerance_ = void 0 !== e.pixelTolerance ? e.pixelTolerance : 10, i.snappedToVertex_ = !1, i.changingFeature_ = !1, i.dragSegments_ = [], i.overlay_ = new Iy({
          source: new hf({
            useSpatialIndex: !1,
            wrapX: !!e.wrapX
          }), style: e.style ? e.style : (r = bp(), function (t, e) {
            return r[bt.POINT]
          }), updateWhileAnimating: !0, updateWhileInteracting: !0
        }), i.SEGMENT_WRITERS_ = {
          Point: i.writePointGeometry_.bind(i),
          LineString: i.writeLineStringGeometry_.bind(i),
          LinearRing: i.writeLineStringGeometry_.bind(i),
          Polygon: i.writePolygonGeometry_.bind(i),
          MultiPoint: i.writeMultiPointGeometry_.bind(i),
          MultiLineString: i.writeMultiLineStringGeometry_.bind(i),
          MultiPolygon: i.writeMultiPolygonGeometry_.bind(i),
          Circle: i.writeCircleGeometry_.bind(i),
          GeometryCollection: i.writeGeometryCollectionGeometry_.bind(i)
        }, i.source_ = null, i.hitDetection_ = null, e.features ? n = e.features : e.source && (i.source_ = e.source, n = new ht(i.source_.getFeatures()), i.source_.addEventListener(ef, i.handleSourceAdd_.bind(i)), i.source_.addEventListener(of, i.handleSourceRemove_.bind(i))), !n) throw new Error("The modify interaction requires features, a source or a layer");
        return e.hitDetection && (i.hitDetection_ = e.hitDetection), i.features_ = n, i.features_.forEach(i.addFeature_.bind(i)), i.features_.addEventListener(at, i.handleFeatureAdd_.bind(i)), i.features_.addEventListener(st, i.handleFeatureRemove_.bind(i)), i.lastPointerEvent_ = null, i.delta_ = [0, 0], i
      }

      return Xv(e, t), e.prototype.addFeature_ = function (t) {
        var e = t.getGeometry();
        if (e) {
          var r = this.SEGMENT_WRITERS_[e.getType()];
          r && r(t, e)
        }
        var n = this.getMap();
        n && n.isRendered() && this.getActive() && this.handlePointerAtPixel_(this.lastPixel_, n), t.addEventListener(F, this.boundHandleFeatureChange_)
      }, e.prototype.willModifyFeatures_ = function (t, e) {
        if (!this.featuresBeingModified_) {
          this.featuresBeingModified_ = new ht;
          for (var r = this.featuresBeingModified_.getArray(), n = 0, i = e.length; n < i; ++n) {
            var o = e[n][0].feature;
            -1 === r.indexOf(o) && this.featuresBeingModified_.push(o)
          }
          this.dispatchEvent(new Jv(Hv, this.featuresBeingModified_, t))
        }
      }, e.prototype.removeFeature_ = function (t) {
        this.removeFeatureSegmentData_(t), this.vertexFeature_ && 0 === this.features_.getLength() && (this.overlay_.getSource().removeFeature(this.vertexFeature_), this.vertexFeature_ = null), t.removeEventListener(F, this.boundHandleFeatureChange_)
      }, e.prototype.removeFeatureSegmentData_ = function (t) {
        var e = this.rBush_, r = [];
        e.forEach((function (e) {
          t === e.feature && r.push(e)
        }));
        for (var n = r.length - 1; n >= 0; --n) {
          for (var i = r[n], o = this.dragSegments_.length - 1; o >= 0; --o) this.dragSegments_[o][0] === i && this.dragSegments_.splice(o, 1);
          e.remove(i)
        }
      }, e.prototype.setActive = function (e) {
        this.vertexFeature_ && !e && (this.overlay_.getSource().removeFeature(this.vertexFeature_), this.vertexFeature_ = null), t.prototype.setActive.call(this, e)
      }, e.prototype.setMap = function (e) {
        this.overlay_.setMap(e), t.prototype.setMap.call(this, e)
      }, e.prototype.getOverlay = function () {
        return this.overlay_
      }, e.prototype.handleSourceAdd_ = function (t) {
        t.feature && this.features_.push(t.feature)
      }, e.prototype.handleSourceRemove_ = function (t) {
        t.feature && this.features_.remove(t.feature)
      }, e.prototype.handleFeatureAdd_ = function (t) {
        this.addFeature_(t.element)
      }, e.prototype.handleFeatureChange_ = function (t) {
        if (!this.changingFeature_) {
          var e = t.target;
          this.removeFeature_(e), this.addFeature_(e)
        }
      }, e.prototype.handleFeatureRemove_ = function (t) {
        var e = t.element;
        this.removeFeature_(e)
      }, e.prototype.writePointGeometry_ = function (t, e) {
        var r = e.getCoordinates(), n = {feature: t, geometry: e, segment: [r, r]};
        this.rBush_.insert(e.getExtent(), n)
      }, e.prototype.writeMultiPointGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) {
          var o = r[n], a = {feature: t, geometry: e, depth: [n], index: n, segment: [o, o]};
          this.rBush_.insert(e.getExtent(), a)
        }
      }, e.prototype.writeLineStringGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length - 1; n < i; ++n) {
          var o = r.slice(n, n + 2), a = {feature: t, geometry: e, index: n, segment: o};
          this.rBush_.insert(Kt(o), a)
        }
      }, e.prototype.writeMultiLineStringGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) for (var o = r[n], a = 0, s = o.length - 1; a < s; ++a) {
          var l = o.slice(a, a + 2), u = {feature: t, geometry: e, depth: [n], index: a, segment: l};
          this.rBush_.insert(Kt(l), u)
        }
      }, e.prototype.writePolygonGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) for (var o = r[n], a = 0, s = o.length - 1; a < s; ++a) {
          var l = o.slice(a, a + 2), u = {feature: t, geometry: e, depth: [n], index: a, segment: l};
          this.rBush_.insert(Kt(l), u)
        }
      }, e.prototype.writeMultiPolygonGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) for (var o = r[n], a = 0, s = o.length; a < s; ++a) for (var l = o[a], u = 0, c = l.length - 1; u < c; ++u) {
          var h = l.slice(u, u + 2), p = {feature: t, geometry: e, depth: [a, n], index: u, segment: h};
          this.rBush_.insert(Kt(h), p)
        }
      }, e.prototype.writeCircleGeometry_ = function (t, e) {
        var r = e.getCenter(), n = {feature: t, geometry: e, index: 0, segment: [r, r]},
          i = {feature: t, geometry: e, index: 1, segment: [r, r]}, o = [n, i];
        n.featureSegments = o, i.featureSegments = o, this.rBush_.insert(ae(r), n);
        var a = e, s = tn();
        if (s && this.getMap()) {
          var l = this.getMap().getView().getProjection();
          a = yi(a = a.clone().transform(s, l)).transform(l, s)
        }
        this.rBush_.insert(a.getExtent(), i)
      }, e.prototype.writeGeometryCollectionGeometry_ = function (t, e) {
        for (var r = e.getGeometriesArray(), n = 0; n < r.length; ++n) {
          var i = r[n];
          (0, this.SEGMENT_WRITERS_[i.getType()])(t, i)
        }
      }, e.prototype.createOrUpdateVertexFeature_ = function (t, e, r) {
        var n = this.vertexFeature_;
        n ? n.getGeometry().setCoordinates(t) : (n = new gt(new qn(t)), this.vertexFeature_ = n, this.overlay_.getSource().addFeature(n));
        return n.set("features", e), n.set("geometries", r), n
      }, e.prototype.handleEvent = function (e) {
        return !e.originalEvent || (this.lastPointerEvent_ = e, e.map.getView().getInteracting() || e.type != Ga.POINTERMOVE || this.handlingDownUpSequence || this.handlePointerMove_(e), this.vertexFeature_ && this.deleteCondition_(e) && (r = !(e.type != Ga.SINGLECLICK || !this.ignoreNextSingleClick_) || this.removePoint()), e.type == Ga.SINGLECLICK && (this.ignoreNextSingleClick_ = !1), t.prototype.handleEvent.call(this, e) && !r);
        var r
      }, e.prototype.handleDragEvent = function (t) {
        this.ignoreNextSingleClick_ = !1, this.willModifyFeatures_(t, this.dragSegments_);
        for (var e = [t.coordinate[0] + this.delta_[0], t.coordinate[1] + this.delta_[1]], r = [], n = [], i = 0, o = this.dragSegments_.length; i < o; ++i) {
          var a = this.dragSegments_[i], s = a[0], l = s.feature;
          -1 === r.indexOf(l) && r.push(l);
          var u = s.geometry;
          -1 === n.indexOf(u) && n.push(u);
          for (var c = s.depth, h = void 0, p = s.segment, f = a[1]; e.length < u.getStride();) e.push(p[f][e.length]);
          switch (u.getType()) {
            case bt.POINT:
              h = e, p[0] = e, p[1] = e;
              break;
            case bt.MULTI_POINT:
              (h = u.getCoordinates())[s.index] = e, p[0] = e, p[1] = e;
              break;
            case bt.LINE_STRING:
              (h = u.getCoordinates())[s.index + f] = e, p[f] = e;
              break;
            case bt.MULTI_LINE_STRING:
            case bt.POLYGON:
              (h = u.getCoordinates())[c[0]][s.index + f] = e, p[f] = e;
              break;
            case bt.MULTI_POLYGON:
              (h = u.getCoordinates())[c[1]][c[0]][s.index + f] = e, p[f] = e;
              break;
            case bt.CIRCLE:
              if (p[0] = e, p[1] = e, 0 === s.index) this.changingFeature_ = !0, u.setCenter(e), this.changingFeature_ = !1; else {
                this.changingFeature_ = !0;
                var d = t.map.getView().getProjection(), g = Ir(rn(u.getCenter(), d), rn(e, d)), y = tn();
                if (y) {
                  var m = u.clone().transform(y, d);
                  m.setRadius(g), g = m.transform(d, y).getRadius()
                }
                u.setRadius(g), this.changingFeature_ = !1
              }
          }
          h && this.setGeometryCoordinates_(u, h)
        }
        this.createOrUpdateVertexFeature_(e, r, n)
      }, e.prototype.handleDownEvent = function (t) {
        if (!this.condition_(t)) return !1;
        var e = t.coordinate;
        this.handlePointerAtPixel_(t.pixel, t.map, e), this.dragSegments_.length = 0, this.featuresBeingModified_ = null;
        var r = this.vertexFeature_;
        if (r) {
          var n = t.map.getView().getProjection(), i = [], a = r.getGeometry().getCoordinates(), s = Kt([a]),
            l = this.rBush_.getInExtent(s), u = {};
          l.sort(Qv);
          for (var c = 0, h = l.length; c < h; ++c) {
            var p = l[c], f = p.segment, d = o(p.geometry), g = p.depth;
            if (g && (d += "-" + g.join("-")), u[d] || (u[d] = new Array(2)), p.geometry.getType() !== bt.CIRCLE || 1 !== p.index) if (!Cr(f[0], a) || u[d][0]) if (!Cr(f[1], a) || u[d][1]) o(f) in this.vertexSegments_ && !u[d][0] && !u[d][1] && this.insertVertexCondition_(t) && i.push(p); else {
              if ((p.geometry.getType() === bt.LINE_STRING || p.geometry.getType() === bt.MULTI_LINE_STRING) && u[d][0] && 0 === u[d][0].index) continue;
              this.dragSegments_.push([p, 1]), u[d][1] = p
            } else this.dragSegments_.push([p, 0]), u[d][0] = p; else Cr(e_(e, p, n), a) && !u[d][0] && (this.dragSegments_.push([p, 0]), u[d][0] = p)
          }
          i.length && this.willModifyFeatures_(t, [i]);
          for (var y = i.length - 1; y >= 0; --y) this.insertVertex_(i[y], a)
        }
        return !!this.vertexFeature_
      }, e.prototype.handleUpEvent = function (t) {
        for (var e = this.dragSegments_.length - 1; e >= 0; --e) {
          var r = this.dragSegments_[e][0], n = r.geometry;
          if (n.getType() === bt.CIRCLE) {
            var i = n.getCenter(), o = r.featureSegments[0], a = r.featureSegments[1];
            o.segment[0] = i, o.segment[1] = i, a.segment[0] = i, a.segment[1] = i, this.rBush_.update(ae(i), o);
            var s = n, l = tn();
            if (l) {
              var u = t.map.getView().getProjection();
              s = yi(s = s.clone().transform(l, u)).transform(u, l)
            }
            this.rBush_.update(s.getExtent(), a)
          } else this.rBush_.update(Kt(r.segment), r)
        }
        return this.featuresBeingModified_ && (this.dispatchEvent(new Jv($v, this.featuresBeingModified_, t)), this.featuresBeingModified_ = null), !1
      }, e.prototype.handlePointerMove_ = function (t) {
        this.lastPixel_ = t.pixel, this.handlePointerAtPixel_(t.pixel, t.map, t.coordinate)
      }, e.prototype.handlePointerAtPixel_ = function (t, e, r) {
        var n, i, a = this, s = r || e.getCoordinateFromPixel(t), l = e.getView().getProjection();
        if (this.hitDetection_) {
          var u = "object" == typeof this.hitDetection_ ? function (t) {
            return t === a.hitDetection_
          } : void 0;
          e.forEachFeatureAtPixel(t, (function (t, e, r) {
            if ((r = r || t.getGeometry()).getType() === bt.POINT) {
              i = r;
              var o = r.getCoordinates();
              n = [{feature: t, geometry: r, segment: [o, o]}]
            }
            return !0
          }), {layerFilter: u})
        }
        if (!n) {
          var c = nn(Ht(on(ae(s, Zv), l), e.getView().getResolution() * this.pixelTolerance_, Zv), l);
          n = this.rBush_.getInExtent(c)
        }
        if (n && n.length > 0) {
          var h = n.sort((function (t, e) {
            return t_(s, t, l) - t_(s, e, l)
          }))[0], p = h.segment, f = e_(s, h, l), d = e.getPixelFromCoordinate(f), g = Ir(t, d);
          if (i || g <= this.pixelTolerance_) {
            var y = {};
            if (y[o(p)] = !0, this.delta_[0] = f[0] - s[0], this.delta_[1] = f[1] - s[1], h.geometry.getType() === bt.CIRCLE && 1 === h.index) this.snappedToVertex_ = !0, this.createOrUpdateVertexFeature_(f, [h.feature], [h.geometry]); else {
              var m = e.getPixelFromCoordinate(p[0]), v = e.getPixelFromCoordinate(p[1]), _ = Rr(d, m), b = Rr(d, v);
              g = Math.sqrt(Math.min(_, b)), this.snappedToVertex_ = g <= this.pixelTolerance_, this.snappedToVertex_ && (f = _ > b ? p[1] : p[0]), this.createOrUpdateVertexFeature_(f, [h.feature], [h.geometry]);
              var x = {};
              x[o(h.geometry)] = !0;
              for (var w = 1, S = n.length; w < S; ++w) {
                var E = n[w].segment;
                if (!(Cr(p[0], E[0]) && Cr(p[1], E[1]) || Cr(p[0], E[1]) && Cr(p[1], E[0]))) break;
                var T = o(n[w].geometry);
                T in x || (x[T] = !0, y[o(E)] = !0)
              }
            }
            return void (this.vertexSegments_ = y)
          }
        }
        this.vertexFeature_ && (this.overlay_.getSource().removeFeature(this.vertexFeature_), this.vertexFeature_ = null)
      }, e.prototype.insertVertex_ = function (t, e) {
        for (var r, n = t.segment, i = t.feature, o = t.geometry, a = t.depth, s = t.index; e.length < o.getStride();) e.push(0);
        switch (o.getType()) {
          case bt.MULTI_LINE_STRING:
          case bt.POLYGON:
            (r = o.getCoordinates())[a[0]].splice(s + 1, 0, e);
            break;
          case bt.MULTI_POLYGON:
            (r = o.getCoordinates())[a[1]][a[0]].splice(s + 1, 0, e);
            break;
          case bt.LINE_STRING:
            (r = o.getCoordinates()).splice(s + 1, 0, e);
            break;
          default:
            return
        }
        this.setGeometryCoordinates_(o, r);
        var l = this.rBush_;
        l.remove(t), this.updateSegmentIndices_(o, s, a, 1);
        var u = {segment: [n[0], e], feature: i, geometry: o, depth: a, index: s};
        l.insert(Kt(u.segment), u), this.dragSegments_.push([u, 1]);
        var c = {segment: [e, n[1]], feature: i, geometry: o, depth: a, index: s + 1};
        l.insert(Kt(c.segment), c), this.dragSegments_.push([c, 0]), this.ignoreNextSingleClick_ = !0
      }, e.prototype.removePoint = function () {
        if (this.lastPointerEvent_ && this.lastPointerEvent_.type != Ga.POINTERDRAG) {
          var t = this.lastPointerEvent_;
          this.willModifyFeatures_(t, this.dragSegments_);
          var e = this.removeVertex_();
          return this.dispatchEvent(new Jv($v, this.featuresBeingModified_, t)), this.featuresBeingModified_ = null, e
        }
        return !1
      }, e.prototype.removeVertex_ = function () {
        var t, e, r, n, i, a, s, l, u, c, h, p = this.dragSegments_, f = {}, d = !1;
        for (i = p.length - 1; i >= 0; --i) h = o((c = (r = p[i])[0]).feature), c.depth && (h += "-" + c.depth.join("-")), h in f || (f[h] = {}), 0 === r[1] ? (f[h].right = c, f[h].index = c.index) : 1 == r[1] && (f[h].left = c, f[h].index = c.index + 1);
        for (h in f) {
          switch (u = f[h].right, s = f[h].left, (l = (a = f[h].index) - 1) < 0 && (l = 0), t = e = (n = (c = void 0 !== s ? s : u).geometry).getCoordinates(), d = !1, n.getType()) {
            case bt.MULTI_LINE_STRING:
              e[c.depth[0]].length > 2 && (e[c.depth[0]].splice(a, 1), d = !0);
              break;
            case bt.LINE_STRING:
              e.length > 2 && (e.splice(a, 1), d = !0);
              break;
            case bt.MULTI_POLYGON:
              t = t[c.depth[1]];
            case bt.POLYGON:
              (t = t[c.depth[0]]).length > 4 && (a == t.length - 1 && (a = 0), t.splice(a, 1), d = !0, 0 === a && (t.pop(), t.push(t[0]), l = t.length - 1))
          }
          if (d) {
            this.setGeometryCoordinates_(n, e);
            var g = [];
            if (void 0 !== s && (this.rBush_.remove(s), g.push(s.segment[0])), void 0 !== u && (this.rBush_.remove(u), g.push(u.segment[1])), void 0 !== s && void 0 !== u) {
              var y = {depth: c.depth, feature: c.feature, geometry: c.geometry, index: l, segment: g};
              this.rBush_.insert(Kt(y.segment), y)
            }
            this.updateSegmentIndices_(n, a, c.depth, -1), this.vertexFeature_ && (this.overlay_.getSource().removeFeature(this.vertexFeature_), this.vertexFeature_ = null), p.length = 0
          }
        }
        return d
      }, e.prototype.setGeometryCoordinates_ = function (t, e) {
        this.changingFeature_ = !0, t.setCoordinates(e), this.changingFeature_ = !1
      }, e.prototype.updateSegmentIndices_ = function (t, e, r, n) {
        this.rBush_.forEachInExtent(t.getExtent(), (function (i) {
          i.geometry === t && (void 0 === r || void 0 === i.depth || b(i.depth, r)) && i.index > e && (i.index += n)
        }))
      }, e
    }($s), n_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), i_ = "select", o_ = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e) || this;
        return o.selected = r, o.deselected = n, o.mapBrowserEvent = i, o
      }

      return n_(e, t), e
    }(c), a_ = {};
    var s_ = function (t) {
      function e(e) {
        var r, n, i = t.call(this) || this, o = e || {};
        if (i.boundAddFeature_ = i.addFeature_.bind(i), i.boundRemoveFeature_ = i.removeFeature_.bind(i), i.condition_ = o.condition ? o.condition : al, i.addCondition_ = o.addCondition ? o.addCondition : ol, i.removeCondition_ = o.removeCondition ? o.removeCondition : ol, i.toggleCondition_ = o.toggleCondition ? o.toggleCondition : ll, i.multi_ = !!o.multi && o.multi, i.filter_ = o.filter ? o.filter : S, i.hitTolerance_ = o.hitTolerance ? o.hitTolerance : 0, i.style_ = void 0 !== o.style ? o.style : (v((r = bp())[bt.POLYGON], r[bt.LINE_STRING]), v(r[bt.GEOMETRY_COLLECTION], r[bt.LINE_STRING]), function (t) {
          return t.getGeometry() ? r[t.getGeometry().getType()] : null
        }), i.features_ = o.features || new ht, o.layers) if ("function" == typeof o.layers) n = o.layers; else {
          var a = o.layers;
          n = function (t) {
            return g(a, t)
          }
        } else n = S;
        return i.layerFilter_ = n, i.featureLayerAssociation_ = {}, i
      }

      return n_(e, t), e.prototype.addFeatureLayerAssociation_ = function (t, e) {
        this.featureLayerAssociation_[o(t)] = e
      }, e.prototype.getFeatures = function () {
        return this.features_
      }, e.prototype.getHitTolerance = function () {
        return this.hitTolerance_
      }, e.prototype.getLayer = function (t) {
        return this.featureLayerAssociation_[o(t)]
      }, e.prototype.setHitTolerance = function (t) {
        this.hitTolerance_ = t
      }, e.prototype.setMap = function (e) {
        this.getMap() && this.style_ && this.features_.forEach(this.restorePreviousStyle_.bind(this)), t.prototype.setMap.call(this, e), e ? (this.features_.addEventListener(at, this.boundAddFeature_), this.features_.addEventListener(st, this.boundRemoveFeature_), this.style_ && this.features_.forEach(this.applySelectedStyle_.bind(this))) : (this.features_.removeEventListener(at, this.boundAddFeature_), this.features_.removeEventListener(st, this.boundRemoveFeature_))
      }, e.prototype.addFeature_ = function (t) {
        var e = t.element;
        this.style_ && this.applySelectedStyle_(e)
      }, e.prototype.removeFeature_ = function (t) {
        var e = t.element;
        this.style_ && this.restorePreviousStyle_(e)
      }, e.prototype.getStyle = function () {
        return this.style_
      }, e.prototype.applySelectedStyle_ = function (t) {
        var e = o(t);
        e in a_ || (a_[e] = t.getStyle()), t.setStyle(this.style_)
      }, e.prototype.restorePreviousStyle_ = function (t) {
        for (var r = this.getMap().getInteractions().getArray(), n = r.length - 1; n >= 0; --n) {
          var i = r[n];
          if (i !== this && i instanceof e && i.getStyle() && -1 !== i.getFeatures().getArray().lastIndexOf(t)) return void t.setStyle(i.getStyle())
        }
        var a = o(t);
        t.setStyle(a_[a]), delete a_[a]
      }, e.prototype.removeFeatureLayerAssociation_ = function (t) {
        delete this.featureLayerAssociation_[o(t)]
      }, e.prototype.handleEvent = function (t) {
        if (!this.condition_(t)) return !0;
        var e = this.addCondition_(t), r = this.removeCondition_(t), n = this.toggleCondition_(t), i = !e && !r && !n,
          o = t.map, a = this.getFeatures(), s = [], l = [];
        if (i) {
          P(this.featureLayerAssociation_), o.forEachFeatureAtPixel(t.pixel, function (t, e) {
            if (this.filter_(t, e)) return l.push(t), this.addFeatureLayerAssociation_(t, e), !this.multi_
          }.bind(this), {layerFilter: this.layerFilter_, hitTolerance: this.hitTolerance_});
          for (var u = a.getLength() - 1; u >= 0; --u) {
            var c = a.item(u), h = l.indexOf(c);
            h > -1 ? l.splice(h, 1) : (a.remove(c), s.push(c))
          }
          0 !== l.length && a.extend(l)
        } else {
          o.forEachFeatureAtPixel(t.pixel, function (t, i) {
            if (this.filter_(t, i)) return !e && !n || g(a.getArray(), t) ? (r || n) && g(a.getArray(), t) && (s.push(t), this.removeFeatureLayerAssociation_(t)) : (l.push(t), this.addFeatureLayerAssociation_(t, i)), !this.multi_
          }.bind(this), {layerFilter: this.layerFilter_, hitTolerance: this.hitTolerance_});
          for (var p = s.length - 1; p >= 0; --p) a.remove(s[p]);
          a.extend(l)
        }
        return (l.length > 0 || s.length > 0) && this.dispatchEvent(new o_(i_, l, s, t)), !0
      }, e
    }(qs), l_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function u_(t) {
      return t.feature ? t.feature : t.element ? t.element : void 0
    }

    var c_ = [], h_ = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = n;
        return i.handleDownEvent || (i.handleDownEvent = S), i.stopDown || (i.stopDown = E), (r = t.call(this, i) || this).source_ = n.source ? n.source : null, r.vertex_ = void 0 === n.vertex || n.vertex, r.edge_ = void 0 === n.edge || n.edge, r.features_ = n.features ? n.features : null, r.featuresListenerKeys_ = [], r.featureChangeListenerKeys_ = {}, r.indexedFeaturesExtents_ = {}, r.pendingFeatures_ = {}, r.pixelTolerance_ = void 0 !== n.pixelTolerance ? n.pixelTolerance : 10, r.rBush_ = new Rp, r.SEGMENT_WRITERS_ = {
          Point: r.writePointGeometry_.bind(r),
          LineString: r.writeLineStringGeometry_.bind(r),
          LinearRing: r.writeLineStringGeometry_.bind(r),
          Polygon: r.writePolygonGeometry_.bind(r),
          MultiPoint: r.writeMultiPointGeometry_.bind(r),
          MultiLineString: r.writeMultiLineStringGeometry_.bind(r),
          MultiPolygon: r.writeMultiPolygonGeometry_.bind(r),
          GeometryCollection: r.writeGeometryCollectionGeometry_.bind(r),
          Circle: r.writeCircleGeometry_.bind(r)
        }, r
      }

      return l_(e, t), e.prototype.addFeature = function (t, e) {
        var r = void 0 === e || e, n = o(t), i = t.getGeometry();
        if (i) {
          var a = this.SEGMENT_WRITERS_[i.getType()];
          a && (this.indexedFeaturesExtents_[n] = i.getExtent([1 / 0, 1 / 0, -1 / 0, -1 / 0]), a(t, i))
        }
        r && (this.featureChangeListenerKeys_[n] = Z(t, F, this.handleFeatureChange_, this))
      }, e.prototype.forEachFeatureAdd_ = function (t) {
        this.addFeature(t)
      }, e.prototype.forEachFeatureRemove_ = function (t) {
        this.removeFeature(t)
      }, e.prototype.getFeatures_ = function () {
        var t;
        return this.features_ ? t = this.features_ : this.source_ && (t = this.source_.getFeatures()), t
      }, e.prototype.handleEvent = function (e) {
        var r = this.snapTo(e.pixel, e.coordinate, e.map);
        return r.snapped && (e.coordinate = r.vertex.slice(0, 2), e.pixel = r.vertexPixel), t.prototype.handleEvent.call(this, e)
      }, e.prototype.handleFeatureAdd_ = function (t) {
        var e = u_(t);
        this.addFeature(e)
      }, e.prototype.handleFeatureRemove_ = function (t) {
        var e = u_(t);
        this.removeFeature(e)
      }, e.prototype.handleFeatureChange_ = function (t) {
        var e = t.target;
        if (this.handlingDownUpSequence) {
          var r = o(e);
          r in this.pendingFeatures_ || (this.pendingFeatures_[r] = e)
        } else this.updateFeature_(e)
      }, e.prototype.handleUpEvent = function (t) {
        var e = R(this.pendingFeatures_);
        return e.length && (e.forEach(this.updateFeature_.bind(this)), this.pendingFeatures_ = {}), !1
      }, e.prototype.removeFeature = function (t, e) {
        var r = void 0 === e || e, n = o(t), i = this.indexedFeaturesExtents_[n];
        if (i) {
          var a = this.rBush_, s = [];
          a.forEachInExtent(i, (function (e) {
            t === e.feature && s.push(e)
          }));
          for (var l = s.length - 1; l >= 0; --l) a.remove(s[l])
        }
        r && (H(this.featureChangeListenerKeys_[n]), delete this.featureChangeListenerKeys_[n])
      }, e.prototype.setMap = function (e) {
        var r = this.getMap(), n = this.featuresListenerKeys_, i = this.getFeatures_();
        r && (n.forEach(H), n.length = 0, i.forEach(this.forEachFeatureRemove_.bind(this))), t.prototype.setMap.call(this, e), e && (this.features_ ? n.push(Z(this.features_, at, this.handleFeatureAdd_, this), Z(this.features_, st, this.handleFeatureRemove_, this)) : this.source_ && n.push(Z(this.source_, ef, this.handleFeatureAdd_, this), Z(this.source_, of, this.handleFeatureRemove_, this)), i.forEach(this.forEachFeatureAdd_.bind(this)))
      }, e.prototype.snapTo = function (t, e, r) {
        var n = Kt([r.getCoordinateFromPixel([t[0] - this.pixelTolerance_, t[1] + this.pixelTolerance_]), r.getCoordinateFromPixel([t[0] + this.pixelTolerance_, t[1] - this.pixelTolerance_])]),
          i = this.rBush_.getInExtent(n);
        this.vertex_ && !this.edge_ && (i = i.filter((function (t) {
          return t.feature.getGeometry().getType() !== bt.CIRCLE
        })));
        var o = !1, a = null, s = null;
        if (0 === i.length) return {snapped: o, vertex: a, vertexPixel: s};
        for (var l, u = r.getView().getProjection(), c = rn(e, u), h = 1 / 0, p = 0; p < i.length; ++p) {
          var f = i[p];
          c_[0] = rn(f.segment[0], u), c_[1] = rn(f.segment[1], u);
          var d = Lr(c, c_);
          d < h && (l = f, h = d)
        }
        var g = l.segment;
        if (this.vertex_ && !this.edge_) {
          var y = r.getPixelFromCoordinate(g[0]), m = r.getPixelFromCoordinate(g[1]), v = Rr(t, y), _ = Rr(t, m);
          Math.sqrt(Math.min(v, _)) <= this.pixelTolerance_ && (o = !0, a = v > _ ? g[1] : g[0], s = r.getPixelFromCoordinate(a))
        } else if (this.edge_) {
          var b = l.feature.getGeometry().getType() === bt.CIRCLE;
          if (b) {
            var x = l.feature.getGeometry(), w = tn();
            w && (x = x.clone().transform(w, u)), a = en(wr(c, x), u)
          } else c_[0] = rn(g[0], u), c_[1] = rn(g[1], u), a = en(Sr(c, c_), u);
          if (Ir(t, s = r.getPixelFromCoordinate(a)) <= this.pixelTolerance_ && (o = !0, this.vertex_ && !b)) {
            y = r.getPixelFromCoordinate(g[0]), m = r.getPixelFromCoordinate(g[1]), v = Rr(s, y), _ = Rr(s, m);
            Math.sqrt(Math.min(v, _)) <= this.pixelTolerance_ && (a = v > _ ? g[1] : g[0], s = r.getPixelFromCoordinate(a))
          }
        }
        return o && (s = [Math.round(s[0]), Math.round(s[1])]), {snapped: o, vertex: a, vertexPixel: s}
      }, e.prototype.updateFeature_ = function (t) {
        this.removeFeature(t, !1), this.addFeature(t, !1)
      }, e.prototype.writeCircleGeometry_ = function (t, e) {
        var r = this.getMap().getView().getProjection(), n = e, i = tn();
        i && (n = n.clone().transform(i, r));
        var o = yi(n);
        i && o.transform(r, i);
        for (var a = o.getCoordinates()[0], s = 0, l = a.length - 1; s < l; ++s) {
          var u = a.slice(s, s + 2), c = {feature: t, segment: u};
          this.rBush_.insert(Kt(u), c)
        }
      }, e.prototype.writeGeometryCollectionGeometry_ = function (t, e) {
        for (var r = e.getGeometriesArray(), n = 0; n < r.length; ++n) {
          var i = this.SEGMENT_WRITERS_[r[n].getType()];
          i && i(t, r[n])
        }
      }, e.prototype.writeLineStringGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length - 1; n < i; ++n) {
          var o = r.slice(n, n + 2), a = {feature: t, segment: o};
          this.rBush_.insert(Kt(o), a)
        }
      }, e.prototype.writeMultiLineStringGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) for (var o = r[n], a = 0, s = o.length - 1; a < s; ++a) {
          var l = o.slice(a, a + 2), u = {feature: t, segment: l};
          this.rBush_.insert(Kt(l), u)
        }
      }, e.prototype.writeMultiPointGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) {
          var o = r[n], a = {feature: t, segment: [o, o]};
          this.rBush_.insert(e.getExtent(), a)
        }
      }, e.prototype.writeMultiPolygonGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) for (var o = r[n], a = 0, s = o.length; a < s; ++a) for (var l = o[a], u = 0, c = l.length - 1; u < c; ++u) {
          var h = l.slice(u, u + 2), p = {feature: t, segment: h};
          this.rBush_.insert(Kt(h), p)
        }
      }, e.prototype.writePointGeometry_ = function (t, e) {
        var r = e.getCoordinates(), n = {feature: t, segment: [r, r]};
        this.rBush_.insert(e.getExtent(), n)
      }, e.prototype.writePolygonGeometry_ = function (t, e) {
        for (var r = e.getCoordinates(), n = 0, i = r.length; n < i; ++n) for (var o = r[n], a = 0, s = o.length - 1; a < s; ++a) {
          var l = o.slice(a, a + 2), u = {feature: t, segment: l};
          this.rBush_.insert(Kt(l), u)
        }
      }, e
    }($s), p_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), f_ = "translatestart", d_ = "translating", g_ = "translateend", y_ = function (t) {
      function e(e, r, n, i, o) {
        var a = t.call(this, e) || this;
        return a.features = r, a.coordinate = n, a.startCoordinate = i, a.mapBrowserEvent = o, a
      }

      return p_(e, t), e
    }(c), m_ = function (t) {
      function e(e) {
        var r, n = this, i = e || {};
        if ((n = t.call(this, i) || this).lastCoordinate_ = null, n.startCoordinate_ = null, n.features_ = void 0 !== i.features ? i.features : null, i.layers) if ("function" == typeof i.layers) r = i.layers; else {
          var o = i.layers;
          r = function (t) {
            return g(o, t)
          }
        } else r = S;
        return n.layerFilter_ = r, n.filter_ = i.filter ? i.filter : S, n.hitTolerance_ = i.hitTolerance ? i.hitTolerance : 0, n.lastFeature_ = null, n.addEventListener(it(Bs), n.handleActiveChanged_), n
      }

      return p_(e, t), e.prototype.handleDownEvent = function (t) {
        if (this.lastFeature_ = this.featuresAtPixel_(t.pixel, t.map), !this.lastCoordinate_ && this.lastFeature_) {
          this.startCoordinate_ = t.coordinate, this.lastCoordinate_ = t.coordinate, this.handleMoveEvent(t);
          var e = this.features_ || new ht([this.lastFeature_]);
          return this.dispatchEvent(new y_(f_, e, t.coordinate, this.startCoordinate_, t)), !0
        }
        return !1
      }, e.prototype.handleUpEvent = function (t) {
        if (this.lastCoordinate_) {
          this.lastCoordinate_ = null, this.handleMoveEvent(t);
          var e = this.features_ || new ht([this.lastFeature_]);
          return this.dispatchEvent(new y_(g_, e, t.coordinate, this.startCoordinate_, t)), this.startCoordinate_ = null, !0
        }
        return !1
      }, e.prototype.handleDragEvent = function (t) {
        if (this.lastCoordinate_) {
          var e = t.coordinate, r = e[0] - this.lastCoordinate_[0], n = e[1] - this.lastCoordinate_[1],
            i = this.features_ || new ht([this.lastFeature_]);
          i.forEach((function (t) {
            var e = t.getGeometry();
            e.translate(r, n), t.setGeometry(e)
          })), this.lastCoordinate_ = e, this.dispatchEvent(new y_(d_, i, e, this.startCoordinate_, t))
        }
      }, e.prototype.handleMoveEvent = function (t) {
        var e = t.map.getViewport();
        this.featuresAtPixel_(t.pixel, t.map) ? (e.classList.remove(this.lastCoordinate_ ? "ol-grab" : "ol-grabbing"), e.classList.add(this.lastCoordinate_ ? "ol-grabbing" : "ol-grab")) : e.classList.remove("ol-grab", "ol-grabbing")
      }, e.prototype.featuresAtPixel_ = function (t, e) {
        return e.forEachFeatureAtPixel(t, function (t, e) {
          if (this.filter_(t, e) && (!this.features_ || g(this.features_.getArray(), t))) return t
        }.bind(this), {layerFilter: this.layerFilter_, hitTolerance: this.hitTolerance_})
      }, e.prototype.getHitTolerance = function () {
        return this.hitTolerance_
      }, e.prototype.setHitTolerance = function (t) {
        this.hitTolerance_ = t
      }, e.prototype.setMap = function (e) {
        var r = this.getMap();
        t.prototype.setMap.call(this, e), this.updateState_(r)
      }, e.prototype.handleActiveChanged_ = function () {
        this.updateState_(null)
      }, e.prototype.updateState_ = function (t) {
        var e = this.getMap(), r = this.getActive();
        e && r || (e = e || t) && e.getViewport().classList.remove("ol-grab", "ol-grabbing")
      }, e
    }($s);

    function v_(t, e, r, n, i, o) {
      var a, s;
      void 0 !== i ? (a = i, s = void 0 !== o ? o : 0) : (a = [], s = 0);
      for (var l = e; l < r;) {
        var u = t[l++];
        a[s++] = t[l++], a[s++] = u;
        for (var c = 2; c < n; ++c) a[s++] = t[l++]
      }
      return a.length = s, a
    }

    var __ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), b_ = {};
    b_[bt.POINT] = function (t) {
      var e;
      e = void 0 !== t.m && void 0 !== t.z ? new qn([t.x, t.y, t.z, t.m], _t) : void 0 !== t.z ? new qn([t.x, t.y, t.z], mt) : void 0 !== t.m ? new qn([t.x, t.y, t.m], vt) : new qn([t.x, t.y]);
      return e
    }, b_[bt.LINE_STRING] = function (t) {
      var e = S_(t);
      return new Py(t.paths[0], e)
    }, b_[bt.POLYGON] = function (t) {
      var e = S_(t);
      return new fi(t.rings, e)
    }, b_[bt.MULTI_POINT] = function (t) {
      var e = S_(t);
      return new Hy(t.points, e)
    }, b_[bt.MULTI_LINE_STRING] = function (t) {
      var e = S_(t);
      return new Zy(t.paths, e)
    }, b_[bt.MULTI_POLYGON] = function (t) {
      var e = S_(t);
      return new Jy(t.rings, e)
    };
    var x_ = {};

    function w_(t, e) {
      var r, n, i;
      if (!t) return null;
      if ("number" == typeof t.x && "number" == typeof t.y) i = bt.POINT; else if (t.points) i = bt.MULTI_POINT; else if (t.paths) {
        i = 1 === t.paths.length ? bt.LINE_STRING : bt.MULTI_LINE_STRING
      } else if (t.rings) {
        var o = t, a = S_(o), s = function (t, e) {
          var r, n, i = [], o = [], a = [];
          for (r = 0, n = t.length; r < n; ++r) {
            i.length = 0, On(i, 0, t[r], e.length), ai(i, 0, i.length, e.length) ? o.push([t[r]]) : a.push(t[r])
          }
          for (; a.length;) {
            var s = a.shift(), l = !1;
            for (r = o.length - 1; r >= 0; r--) {
              var u = o[r][0];
              if (te(new Yn(u).getExtent(), new Yn(s).getExtent())) {
                o[r].push(s), l = !0;
                break
              }
            }
            l || o.push([s.reverse()])
          }
          return o
        }(o.rings, a);
        1 === s.length ? (i = bt.POLYGON, t = O({}, t, ((r = {}).rings = s[0], r))) : (i = bt.MULTI_POLYGON, t = O({}, t, ((n = {}).rings = s, n)))
      }
      return Wy((0, b_[i])(t), !1, e)
    }

    function S_(t) {
      var e = yt;
      return !0 === t.hasZ && !0 === t.hasM ? e = _t : !0 === t.hasZ ? e = mt : !0 === t.hasM && (e = vt), e
    }

    function E_(t) {
      var e = t.getLayout();
      return {hasZ: e === mt || e === _t, hasM: e === vt || e === _t}
    }

    function T_(t, e) {
      return (0, x_[t.getType()])(Wy(t, !0, e), e)
    }

    x_[bt.POINT] = function (t, e) {
      var r, n = t.getCoordinates(), i = t.getLayout();
      i === mt ? r = {x: n[0], y: n[1], z: n[2]} : i === vt ? r = {x: n[0], y: n[1], m: n[2]} : i === _t ? r = {
        x: n[0],
        y: n[1],
        z: n[2],
        m: n[3]
      } : i === yt ? r = {x: n[0], y: n[1]} : pt(!1, 34);
      return r
    }, x_[bt.LINE_STRING] = function (t, e) {
      var r = E_(t);
      return {hasZ: r.hasZ, hasM: r.hasM, paths: [t.getCoordinates()]}
    }, x_[bt.POLYGON] = function (t, e) {
      var r = E_(t);
      return {hasZ: r.hasZ, hasM: r.hasM, rings: t.getCoordinates(!1)}
    }, x_[bt.MULTI_POINT] = function (t, e) {
      var r = E_(t);
      return {hasZ: r.hasZ, hasM: r.hasM, points: t.getCoordinates()}
    }, x_[bt.MULTI_LINE_STRING] = function (t, e) {
      var r = E_(t);
      return {hasZ: r.hasZ, hasM: r.hasM, paths: t.getCoordinates()}
    }, x_[bt.MULTI_POLYGON] = function (t, e) {
      for (var r = E_(t), n = t.getCoordinates(!1), i = [], o = 0; o < n.length; o++) for (var a = n[o].length - 1; a >= 0; a--) i.push(n[o][a]);
      return {hasZ: r.hasZ, hasM: r.hasM, rings: i}
    };
    var C_ = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this) || this).geometryName_ = n.geometryName, r
      }

      return __(e, t), e.prototype.readFeatureFromObject = function (t, e, r) {
        var n = t, i = w_(n.geometry, e), o = new gt;
        if (this.geometryName_ && o.setGeometryName(this.geometryName_), o.setGeometry(i), n.attributes) {
          o.setProperties(n.attributes, !0);
          var a = n.attributes[r];
          void 0 !== a && o.setId(a)
        }
        return o
      }, e.prototype.readFeaturesFromObject = function (t, e) {
        var r = e || {};
        if (t.features) {
          for (var n = [], i = t.features, o = 0, a = i.length; o < a; ++o) n.push(this.readFeatureFromObject(i[o], r, t.objectIdFieldName));
          return n
        }
        return [this.readFeatureFromObject(t, r)]
      }, e.prototype.readGeometryFromObject = function (t, e) {
        return w_(t, e)
      }, e.prototype.readProjectionFromObject = function (t) {
        return t.spatialReference && void 0 !== t.spatialReference.wkid ? Gr("EPSG:" + t.spatialReference.wkid) : null
      }, e.prototype.writeGeometryObject = function (t, e) {
        return T_(t, this.adaptOptions(e))
      }, e.prototype.writeFeatureObject = function (t, e) {
        e = this.adaptOptions(e);
        var r = {};
        if (!t.hasProperties()) return r.attributes = {}, r;
        var n = t.getProperties(), i = t.getGeometry();
        if (i) {
          r.geometry = T_(i, e);
          var o = e && (e.dataProjection || e.featureProjection);
          o && (r.geometry.spatialReference = {wkid: Number(Gr(o).getCode().split(":").pop())}), delete n[t.getGeometryName()]
        }
        return I(n) ? r.attributes = {} : r.attributes = n, r
      }, e.prototype.writeFeaturesObject = function (t, e) {
        e = this.adaptOptions(e);
        for (var r = [], n = 0, i = t.length; n < i; ++n) r.push(this.writeFeatureObject(t[n], e));
        return {features: r}
      }, e
    }(qm), O_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), P_ = function (t) {
      function e() {
        var e = t.call(this) || this;
        return e.xmlSerializer_ = Wc(), e
      }

      return O_(e, t), e.prototype.getType = function () {
        return Ru
      }, e.prototype.readFeature = function (t, e) {
        if (t) {
          if ("string" == typeof t) {
            var r = Pc(t);
            return this.readFeatureFromDocument(r, e)
          }
          return Cc(t) ? this.readFeatureFromDocument(t, e) : this.readFeatureFromNode(t, e)
        }
        return null
      }, e.prototype.readFeatureFromDocument = function (t, e) {
        var r = this.readFeaturesFromDocument(t, e);
        return r.length > 0 ? r[0] : null
      }, e.prototype.readFeatureFromNode = function (t, e) {
        return null
      }, e.prototype.readFeatures = function (t, e) {
        if (t) {
          if ("string" == typeof t) {
            var r = Pc(t);
            return this.readFeaturesFromDocument(r, e)
          }
          return Cc(t) ? this.readFeaturesFromDocument(t, e) : this.readFeaturesFromNode(t, e)
        }
        return []
      }, e.prototype.readFeaturesFromDocument = function (t, e) {
        for (var r = [], n = t.firstChild; n; n = n.nextSibling) n.nodeType == Node.ELEMENT_NODE && v(r, this.readFeaturesFromNode(n, e));
        return r
      }, e.prototype.readFeaturesFromNode = function (t, e) {
        return n()
      }, e.prototype.readGeometry = function (t, e) {
        if (t) {
          if ("string" == typeof t) {
            var r = Pc(t);
            return this.readGeometryFromDocument(r, e)
          }
          return Cc(t) ? this.readGeometryFromDocument(t, e) : this.readGeometryFromNode(t, e)
        }
        return null
      }, e.prototype.readGeometryFromDocument = function (t, e) {
        return null
      }, e.prototype.readGeometryFromNode = function (t, e) {
        return null
      }, e.prototype.readProjection = function (t) {
        if (t) {
          if ("string" == typeof t) {
            var e = Pc(t);
            return this.readProjectionFromDocument(e)
          }
          return Cc(t) ? this.readProjectionFromDocument(t) : this.readProjectionFromNode(t)
        }
        return null
      }, e.prototype.readProjectionFromDocument = function (t) {
        return this.dataProjection
      }, e.prototype.readProjectionFromNode = function (t) {
        return this.dataProjection
      }, e.prototype.writeFeature = function (t, e) {
        var r = this.writeFeatureNode(t, e);
        return this.xmlSerializer_.serializeToString(r)
      }, e.prototype.writeFeatureNode = function (t, e) {
        return null
      }, e.prototype.writeFeatures = function (t, e) {
        var r = this.writeFeaturesNode(t, e);
        return this.xmlSerializer_.serializeToString(r)
      }, e.prototype.writeFeaturesNode = function (t, e) {
        return null
      }, e.prototype.writeGeometry = function (t, e) {
        var r = this.writeGeometryNode(t, e);
        return this.xmlSerializer_.serializeToString(r)
      }, e.prototype.writeGeometryNode = function (t, e) {
        return null
      }, e
    }(Yy), R_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), I_ = "http://www.opengis.net/gml", L_ = /^[\s\xa0]*$/, M_ = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.featureType = n.featureType, r.featureNS = n.featureNS, r.srsName = n.srsName, r.schemaLocation = "", r.FEATURE_COLLECTION_PARSERS = {}, r.FEATURE_COLLECTION_PARSERS[r.namespace] = {
          featureMember: Ic(r.readFeaturesInternal),
          featureMembers: Lc(r.readFeaturesInternal)
        }, r
      }

      return R_(e, t), e.prototype.readFeaturesInternal = function (t, e) {
        var r = t.localName, n = null;
        if ("FeatureCollection" == r) n = Uc([], this.FEATURE_COLLECTION_PARSERS, t, e, this); else if ("featureMembers" == r || "featureMember" == r || "member" == r) {
          var i = e[0], o = i.featureType, a = i.featureNS;
          if (!o && t.childNodes) {
            o = [], a = {};
            for (var s = 0, l = t.childNodes.length; s < l; ++s) {
              var u = t.childNodes[s];
              if (1 === u.nodeType) {
                var c = u.nodeName.split(":").pop();
                if (-1 === o.indexOf(c)) {
                  var h = "", p = 0, f = u.namespaceURI;
                  for (var d in a) {
                    if (a[d] === f) {
                      h = d;
                      break
                    }
                    ++p
                  }
                  h || (a[h = "p" + p] = f), o.push(h + ":" + c)
                }
              }
            }
            "featureMember" != r && (i.featureType = o, i.featureNS = a)
          }
          if ("string" == typeof a) {
            var g = a;
            (a = {}).p0 = g
          }
          var y = {}, m = Array.isArray(o) ? o : [o];
          for (var v in a) {
            var _ = {};
            for (s = 0, l = m.length; s < l; ++s) {
              (-1 === m[s].indexOf(":") ? "p0" : m[s].split(":")[0]) === v && (_[m[s].split(":").pop()] = "featureMembers" == r ? Ic(this.readFeatureElement, this) : Lc(this.readFeatureElement, this))
            }
            y[a[v]] = _
          }
          n = Uc("featureMember" == r || "member" == r ? void 0 : [], y, t, e)
        }
        return null === n && (n = []), n
      }, e.prototype.readGeometryElement = function (t, e) {
        var r = e[0];
        r.srsName = t.firstElementChild.getAttribute("srsName"), r.srsDimension = t.firstElementChild.getAttribute("srsDimension");
        var n = Uc(null, this.GEOMETRY_PARSERS, t, e, this);
        return n ? Array.isArray(n) ? qy(n, r) : Wy(n, !1, r) : void 0
      }, e.prototype.readFeatureElementInternal = function (t, e, r) {
        for (var n, i = {}, o = t.firstElementChild; o; o = o.nextElementSibling) {
          var a = void 0, s = o.localName;
          0 === o.childNodes.length || 1 === o.childNodes.length && (3 === o.firstChild.nodeType || 4 === o.firstChild.nodeType) ? (a = Ec(o, !1), L_.test(a) && (a = void 0)) : (r && (a = this.readGeometryElement(o, e)), a ? "boundedBy" !== s && (n = s) : a = this.readFeatureElementInternal(o, e, !1)), i[s] ? (i[s] instanceof Array || (i[s] = [i[s]]), i[s].push(a)) : i[s] = a;
          var l = o.attributes.length;
          if (l > 0) {
            i[s] = {_content_: i[s]};
            for (var u = 0; u < l; u++) {
              var c = o.attributes[u].name;
              i[s][c] = o.attributes[u].value
            }
          }
        }
        if (r) {
          var h = new gt(i);
          n && h.setGeometryName(n);
          var p = t.getAttribute("fid") || Oc(t, this.namespace, "id");
          return p && h.setId(p), h
        }
        return i
      }, e.prototype.readFeatureElement = function (t, e) {
        return this.readFeatureElementInternal(t, e, !0)
      }, e.prototype.readPoint = function (t, e) {
        var r = this.readFlatCoordinatesFromNode(t, e);
        if (r) return new qn(r, mt)
      }, e.prototype.readMultiPoint = function (t, e) {
        var r = Uc([], this.MULTIPOINT_PARSERS, t, e, this);
        return r ? new Hy(r) : void 0
      }, e.prototype.readMultiLineString = function (t, e) {
        var r = Uc([], this.MULTILINESTRING_PARSERS, t, e, this);
        if (r) return new Zy(r)
      }, e.prototype.readMultiPolygon = function (t, e) {
        var r = Uc([], this.MULTIPOLYGON_PARSERS, t, e, this);
        if (r) return new Jy(r)
      }, e.prototype.pointMemberParser = function (t, e) {
        zc(this.POINTMEMBER_PARSERS, t, e, this)
      }, e.prototype.lineStringMemberParser = function (t, e) {
        zc(this.LINESTRINGMEMBER_PARSERS, t, e, this)
      }, e.prototype.polygonMemberParser = function (t, e) {
        zc(this.POLYGONMEMBER_PARSERS, t, e, this)
      }, e.prototype.readLineString = function (t, e) {
        var r = this.readFlatCoordinatesFromNode(t, e);
        return r ? new Py(r, mt) : void 0
      }, e.prototype.readFlatLinearRing = function (t, e) {
        var r = Uc(null, this.GEOMETRY_FLAT_COORDINATES_PARSERS, t, e, this);
        return r || void 0
      }, e.prototype.readLinearRing = function (t, e) {
        var r = this.readFlatCoordinatesFromNode(t, e);
        if (r) return new Yn(r, mt)
      }, e.prototype.readPolygon = function (t, e) {
        var r = Uc([null], this.FLAT_LINEAR_RINGS_PARSERS, t, e, this);
        if (r && r[0]) {
          var n, i = r[0], o = [i.length], a = void 0;
          for (a = 1, n = r.length; a < n; ++a) v(i, r[a]), o.push(i.length);
          return new fi(i, mt, o)
        }
      }, e.prototype.readFlatCoordinatesFromNode = function (t, e) {
        return Uc(null, this.GEOMETRY_FLAT_COORDINATES_PARSERS, t, e, this)
      }, e.prototype.readGeometryFromNode = function (t, e) {
        var r = this.readGeometryElement(t, [this.getReadOptions(t, e || {})]);
        return r || null
      }, e.prototype.readFeaturesFromNode = function (t, e) {
        var r = {featureType: this.featureType, featureNS: this.featureNS};
        return e && O(r, this.getReadOptions(t, e)), this.readFeaturesInternal(t, [r]) || []
      }, e.prototype.readProjectionFromNode = function (t) {
        return Gr(this.srsName ? this.srsName : t.firstElementChild.getAttribute("srsName"))
      }, e
    }(P_);
    M_.prototype.namespace = I_, M_.prototype.FLAT_LINEAR_RINGS_PARSERS = {"http://www.opengis.net/gml": {}}, M_.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {"http://www.opengis.net/gml": {}}, M_.prototype.GEOMETRY_PARSERS = {"http://www.opengis.net/gml": {}}, M_.prototype.MULTIPOINT_PARSERS = {
      "http://www.opengis.net/gml": {
        pointMember: Ic(M_.prototype.pointMemberParser),
        pointMembers: Ic(M_.prototype.pointMemberParser)
      }
    }, M_.prototype.MULTILINESTRING_PARSERS = {
      "http://www.opengis.net/gml": {
        lineStringMember: Ic(M_.prototype.lineStringMemberParser),
        lineStringMembers: Ic(M_.prototype.lineStringMemberParser)
      }
    }, M_.prototype.MULTIPOLYGON_PARSERS = {
      "http://www.opengis.net/gml": {
        polygonMember: Ic(M_.prototype.polygonMemberParser),
        polygonMembers: Ic(M_.prototype.polygonMemberParser)
      }
    }, M_.prototype.POINTMEMBER_PARSERS = {"http://www.opengis.net/gml": {Point: Ic(M_.prototype.readFlatCoordinatesFromNode)}}, M_.prototype.LINESTRINGMEMBER_PARSERS = {"http://www.opengis.net/gml": {LineString: Ic(M_.prototype.readLineString)}}, M_.prototype.POLYGONMEMBER_PARSERS = {"http://www.opengis.net/gml": {Polygon: Ic(M_.prototype.readPolygon)}}, M_.prototype.RING_PARSERS = {"http://www.opengis.net/gml": {LinearRing: Lc(M_.prototype.readFlatLinearRing)}};
    var F_ = M_;

    function A_(t) {
      return k_(Ec(t, !1))
    }

    function k_(t) {
      var e = /^\s*(true|1)|(false|0)\s*$/.exec(t);
      return e ? void 0 !== e[1] || !1 : void 0
    }

    function j_(t) {
      var e = Ec(t, !1), r = Date.parse(e);
      return isNaN(r) ? void 0 : r / 1e3
    }

    function N_(t) {
      return D_(Ec(t, !1))
    }

    function D_(t) {
      var e = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(t);
      return e ? parseFloat(e[1]) : void 0
    }

    function G_(t) {
      return z_(Ec(t, !1))
    }

    function z_(t) {
      var e = /^\s*(\d+)\s*$/.exec(t);
      return e ? parseInt(e[1], 10) : void 0
    }

    function U_(t) {
      return Ec(t, !1).trim()
    }

    function B_(t, e) {
      X_(t, e ? "1" : "0")
    }

    function V_(t, e) {
      t.appendChild(Xc().createCDATASection(e))
    }

    function Y_(t, e) {
      var r = new Date(1e3 * e),
        n = r.getUTCFullYear() + "-" + _r(r.getUTCMonth() + 1, 2) + "-" + _r(r.getUTCDate(), 2) + "T" + _r(r.getUTCHours(), 2) + ":" + _r(r.getUTCMinutes(), 2) + ":" + _r(r.getUTCSeconds(), 2) + "Z";
      t.appendChild(Xc().createTextNode(n))
    }

    function W_(t, e) {
      var r = e.toPrecision();
      t.appendChild(Xc().createTextNode(r))
    }

    function q_(t, e) {
      var r = e.toString();
      t.appendChild(Xc().createTextNode(r))
    }

    function X_(t, e) {
      t.appendChild(Xc().createTextNode(e))
    }

    var Z_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), K_ = {
      MultiLineString: "lineStringMember",
      MultiCurve: "curveMember",
      MultiPolygon: "polygonMember",
      MultiSurface: "surfaceMember"
    }, H_ = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, n) || this).FEATURE_COLLECTION_PARSERS[I_].featureMember = Ic(r.readFeaturesInternal), r.schemaLocation = n.schemaLocation ? n.schemaLocation : "http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd", r
      }

      return Z_(e, t), e.prototype.readFlatCoordinates = function (t, e) {
        var r = Ec(t, !1).replace(/^\s*|\s*$/g, ""), n = e[0].srsName, i = "enu";
        if (n) {
          var o = Gr(n);
          o && (i = o.getAxisOrientation())
        }
        for (var a = r.trim().split(/\s+/), s = [], l = 0, u = a.length; l < u; l++) {
          var c = a[l].split(/,+/), h = parseFloat(c[0]), p = parseFloat(c[1]),
            f = 3 === c.length ? parseFloat(c[2]) : 0;
          "en" === i.substr(0, 2) ? s.push(h, p, f) : s.push(p, h, f)
        }
        return s
      }, e.prototype.readBox = function (t, e) {
        var r = Uc([null], this.BOX_PARSERS_, t, e, this);
        return ie(r[1][0], r[1][1], r[1][3], r[1][4])
      }, e.prototype.innerBoundaryIsParser = function (t, e) {
        var r = Uc(void 0, this.RING_PARSERS, t, e, this);
        r && e[e.length - 1].push(r)
      }, e.prototype.outerBoundaryIsParser = function (t, e) {
        var r = Uc(void 0, this.RING_PARSERS, t, e, this);
        r && (e[e.length - 1][0] = r)
      }, e.prototype.GEOMETRY_NODE_FACTORY_ = function (t, e, r) {
        var n, i = e[e.length - 1], o = i.multiSurface, a = i.surface, s = i.multiCurve;
        return Array.isArray(t) ? n = "Envelope" : "MultiPolygon" === (n = t.getType()) && !0 === o ? n = "MultiSurface" : "Polygon" === n && !0 === a ? n = "Surface" : "MultiLineString" === n && !0 === s && (n = "MultiCurve"), Sc("http://www.opengis.net/gml", n)
      }, e.prototype.writeFeatureElement = function (t, e, r) {
        var n = e.getId();
        n && t.setAttribute("fid", n);
        var i = r[r.length - 1], o = i.featureNS, a = e.getGeometryName();
        i.serializers || (i.serializers = {}, i.serializers[o] = {});
        var s = [], l = [];
        if (e.hasProperties()) {
          var u = e.getProperties();
          for (var c in u) {
            var h = u[c];
            null !== h && (s.push(c), l.push(h), c == a || "function" == typeof h.getSimplifiedGeometry ? c in i.serializers[o] || (i.serializers[o][c] = Ac(this.writeGeometryElement, this)) : c in i.serializers[o] || (i.serializers[o][c] = Ac(X_)))
          }
        }
        var p = O({}, i);
        p.node = t, Vc(p, i.serializers, jc(void 0, o), l, r, s)
      }, e.prototype.writeCurveOrLineString = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        if ("LineStringSegment" !== t.nodeName && n && t.setAttribute("srsName", n), "LineString" === t.nodeName || "LineStringSegment" === t.nodeName) {
          var i = this.createCoordinatesNode_(t.namespaceURI);
          t.appendChild(i), this.writeCoordinates_(i, e, r)
        } else if ("Curve" === t.nodeName) {
          var o = Sc(t.namespaceURI, "segments");
          t.appendChild(o), this.writeCurveSegments_(o, e, r)
        }
      }, e.prototype.writeLineStringOrCurveMember = function (t, e, r) {
        var n = this.GEOMETRY_NODE_FACTORY_(e, r);
        n && (t.appendChild(n), this.writeCurveOrLineString(n, e, r))
      }, e.prototype.writeMultiCurveOrLineString = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName, a = n.curve;
        o && t.setAttribute("srsName", o);
        var s = e.getLineStrings();
        Vc({
          node: t,
          hasZ: i,
          srsName: o,
          curve: a
        }, this.LINESTRINGORCURVEMEMBER_SERIALIZERS, this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, s, r, void 0, this)
      }, e.prototype.writeGeometryElement = function (t, e, r) {
        var n, i = r[r.length - 1], o = O({}, i);
        o.node = t, n = Array.isArray(e) ? qy(e, i) : Wy(e, !0, i), Vc(o, this.GEOMETRY_SERIALIZERS, this.GEOMETRY_NODE_FACTORY_, [n], r, void 0, this)
      }, e.prototype.createCoordinatesNode_ = function (t) {
        var e = Sc(t, "coordinates");
        return e.setAttribute("decimal", "."), e.setAttribute("cs", ","), e.setAttribute("ts", " "), e
      }, e.prototype.writeCoordinates_ = function (t, e, r) {
        for (var n = r[r.length - 1], i = n.hasZ, o = n.srsName, a = e.getCoordinates(), s = a.length, l = new Array(s), u = 0; u < s; ++u) {
          var c = a[u];
          l[u] = this.getCoords_(c, o, i)
        }
        X_(t, l.join(" "))
      }, e.prototype.writeCurveSegments_ = function (t, e, r) {
        var n = Sc(t.namespaceURI, "LineStringSegment");
        t.appendChild(n), this.writeCurveOrLineString(n, e, r)
      }, e.prototype.writeSurfaceOrPolygon = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName;
        if ("PolygonPatch" !== t.nodeName && o && t.setAttribute("srsName", o), "Polygon" === t.nodeName || "PolygonPatch" === t.nodeName) {
          var a = e.getLinearRings();
          Vc({node: t, hasZ: i, srsName: o}, this.RING_SERIALIZERS, this.RING_NODE_FACTORY_, a, r, void 0, this)
        } else if ("Surface" === t.nodeName) {
          var s = Sc(t.namespaceURI, "patches");
          t.appendChild(s), this.writeSurfacePatches_(s, e, r)
        }
      }, e.prototype.RING_NODE_FACTORY_ = function (t, e, r) {
        var n = e[e.length - 1], i = n.node, o = n.exteriorWritten;
        return void 0 === o && (n.exteriorWritten = !0), Sc(i.namespaceURI, void 0 !== o ? "innerBoundaryIs" : "outerBoundaryIs")
      }, e.prototype.writeSurfacePatches_ = function (t, e, r) {
        var n = Sc(t.namespaceURI, "PolygonPatch");
        t.appendChild(n), this.writeSurfaceOrPolygon(n, e, r)
      }, e.prototype.writeRing = function (t, e, r) {
        var n = Sc(t.namespaceURI, "LinearRing");
        t.appendChild(n), this.writeLinearRing(n, e, r)
      }, e.prototype.getCoords_ = function (t, e, r) {
        var n = "enu";
        e && (n = Gr(e).getAxisOrientation());
        var i = "en" === n.substr(0, 2) ? t[0] + "," + t[1] : t[1] + "," + t[0];
        r && (i += "," + (t[2] || 0));
        return i
      }, e.prototype.writePoint = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName;
        o && t.setAttribute("srsName", o);
        var a = this.createCoordinatesNode_(t.namespaceURI);
        t.appendChild(a);
        var s = e.getCoordinates();
        X_(a, this.getCoords_(s, o, i))
      }, e.prototype.writeMultiPoint = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName;
        o && t.setAttribute("srsName", o);
        var a = e.getPoints();
        Vc({node: t, hasZ: i, srsName: o}, this.POINTMEMBER_SERIALIZERS, jc("pointMember"), a, r, void 0, this)
      }, e.prototype.writePointMember = function (t, e, r) {
        var n = Sc(t.namespaceURI, "Point");
        t.appendChild(n), this.writePoint(n, e, r)
      }, e.prototype.writeLinearRing = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        n && t.setAttribute("srsName", n);
        var i = this.createCoordinatesNode_(t.namespaceURI);
        t.appendChild(i), this.writeCoordinates_(i, e, r)
      }, e.prototype.writeMultiSurfaceOrPolygon = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName, a = n.surface;
        o && t.setAttribute("srsName", o);
        var s = e.getPolygons();
        Vc({
          node: t,
          hasZ: i,
          srsName: o,
          surface: a
        }, this.SURFACEORPOLYGONMEMBER_SERIALIZERS, this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, s, r, void 0, this)
      }, e.prototype.writeSurfaceOrPolygonMember = function (t, e, r) {
        var n = this.GEOMETRY_NODE_FACTORY_(e, r);
        n && (t.appendChild(n), this.writeSurfaceOrPolygon(n, e, r))
      }, e.prototype.writeEnvelope = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        n && t.setAttribute("srsName", n);
        var i = [e[0] + " " + e[1], e[2] + " " + e[3]];
        Vc({node: t}, this.ENVELOPE_SERIALIZERS, Nc, i, r, ["lowerCorner", "upperCorner"], this)
      }, e.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function (t, e, r) {
        var n = e[e.length - 1].node;
        return Sc("http://www.opengis.net/gml", K_[n.nodeName])
      }, e
    }(F_);
    H_.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {"http://www.opengis.net/gml": {coordinates: Lc(H_.prototype.readFlatCoordinates)}}, H_.prototype.FLAT_LINEAR_RINGS_PARSERS = {
      "http://www.opengis.net/gml": {
        innerBoundaryIs: H_.prototype.innerBoundaryIsParser,
        outerBoundaryIs: H_.prototype.outerBoundaryIsParser
      }
    }, H_.prototype.BOX_PARSERS_ = {"http://www.opengis.net/gml": {coordinates: Ic(H_.prototype.readFlatCoordinates)}}, H_.prototype.GEOMETRY_PARSERS = {
      "http://www.opengis.net/gml": {
        Point: Lc(F_.prototype.readPoint),
        MultiPoint: Lc(F_.prototype.readMultiPoint),
        LineString: Lc(F_.prototype.readLineString),
        MultiLineString: Lc(F_.prototype.readMultiLineString),
        LinearRing: Lc(F_.prototype.readLinearRing),
        Polygon: Lc(F_.prototype.readPolygon),
        MultiPolygon: Lc(F_.prototype.readMultiPolygon),
        Box: Lc(H_.prototype.readBox)
      }
    }, H_.prototype.GEOMETRY_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        Curve: Ac(H_.prototype.writeCurveOrLineString),
        MultiCurve: Ac(H_.prototype.writeMultiCurveOrLineString),
        Point: Ac(H_.prototype.writePoint),
        MultiPoint: Ac(H_.prototype.writeMultiPoint),
        LineString: Ac(H_.prototype.writeCurveOrLineString),
        MultiLineString: Ac(H_.prototype.writeMultiCurveOrLineString),
        LinearRing: Ac(H_.prototype.writeLinearRing),
        Polygon: Ac(H_.prototype.writeSurfaceOrPolygon),
        MultiPolygon: Ac(H_.prototype.writeMultiSurfaceOrPolygon),
        Surface: Ac(H_.prototype.writeSurfaceOrPolygon),
        MultiSurface: Ac(H_.prototype.writeMultiSurfaceOrPolygon),
        Envelope: Ac(H_.prototype.writeEnvelope)
      }
    }, H_.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        lineStringMember: Ac(H_.prototype.writeLineStringOrCurveMember),
        curveMember: Ac(H_.prototype.writeLineStringOrCurveMember)
      }
    }, H_.prototype.RING_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        outerBoundaryIs: Ac(H_.prototype.writeRing),
        innerBoundaryIs: Ac(H_.prototype.writeRing)
      }
    }, H_.prototype.POINTMEMBER_SERIALIZERS = {"http://www.opengis.net/gml": {pointMember: Ac(H_.prototype.writePointMember)}}, H_.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        surfaceMember: Ac(H_.prototype.writeSurfaceOrPolygonMember),
        polygonMember: Ac(H_.prototype.writeSurfaceOrPolygonMember)
      }
    }, H_.prototype.ENVELOPE_SERIALIZERS = {"http://www.opengis.net/gml": {lowerCorner: Ac(X_), upperCorner: Ac(X_)}};
    var $_ = H_, J_ = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), Q_ = {
      MultiLineString: "lineStringMember",
      MultiCurve: "curveMember",
      MultiPolygon: "polygonMember",
      MultiSurface: "surfaceMember"
    }, tb = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, n) || this).surface_ = void 0 !== n.surface && n.surface, r.curve_ = void 0 !== n.curve && n.curve, r.multiCurve_ = void 0 === n.multiCurve || n.multiCurve, r.multiSurface_ = void 0 === n.multiSurface || n.multiSurface, r.schemaLocation = n.schemaLocation ? n.schemaLocation : "http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd", r.hasZ = void 0 !== n.hasZ && n.hasZ, r
      }

      return J_(e, t), e.prototype.readMultiCurve = function (t, e) {
        var r = Uc([], this.MULTICURVE_PARSERS, t, e, this);
        return r ? new Zy(r) : void 0
      }, e.prototype.readMultiSurface = function (t, e) {
        var r = Uc([], this.MULTISURFACE_PARSERS, t, e, this);
        if (r) return new Jy(r)
      }, e.prototype.curveMemberParser = function (t, e) {
        zc(this.CURVEMEMBER_PARSERS, t, e, this)
      }, e.prototype.surfaceMemberParser = function (t, e) {
        zc(this.SURFACEMEMBER_PARSERS, t, e, this)
      }, e.prototype.readPatch = function (t, e) {
        return Uc([null], this.PATCHES_PARSERS, t, e, this)
      }, e.prototype.readSegment = function (t, e) {
        return Uc([null], this.SEGMENTS_PARSERS, t, e, this)
      }, e.prototype.readPolygonPatch = function (t, e) {
        return Uc([null], this.FLAT_LINEAR_RINGS_PARSERS, t, e, this)
      }, e.prototype.readLineStringSegment = function (t, e) {
        return Uc([null], this.GEOMETRY_FLAT_COORDINATES_PARSERS, t, e, this)
      }, e.prototype.interiorParser = function (t, e) {
        var r = Uc(void 0, this.RING_PARSERS, t, e, this);
        r && e[e.length - 1].push(r)
      }, e.prototype.exteriorParser = function (t, e) {
        var r = Uc(void 0, this.RING_PARSERS, t, e, this);
        r && (e[e.length - 1][0] = r)
      }, e.prototype.readSurface = function (t, e) {
        var r = Uc([null], this.SURFACE_PARSERS, t, e, this);
        if (r && r[0]) {
          var n, i = r[0], o = [i.length], a = void 0;
          for (a = 1, n = r.length; a < n; ++a) v(i, r[a]), o.push(i.length);
          return new fi(i, mt, o)
        }
      }, e.prototype.readCurve = function (t, e) {
        var r = Uc([null], this.CURVE_PARSERS, t, e, this);
        return r ? new Py(r, mt) : void 0
      }, e.prototype.readEnvelope = function (t, e) {
        var r = Uc([null], this.ENVELOPE_PARSERS, t, e, this);
        return ie(r[1][0], r[1][1], r[2][0], r[2][1])
      }, e.prototype.readFlatPos = function (t, e) {
        for (var r, n = Ec(t, !1), i = /^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/, o = []; r = i.exec(n);) o.push(parseFloat(r[1])), n = n.substr(r[0].length);
        if ("" === n) {
          var a = e[0].srsName, s = "enu";
          if (a) s = Gr(a).getAxisOrientation();
          if ("neu" === s) {
            var l, u = void 0;
            for (u = 0, l = o.length; u < l; u += 3) {
              var c = o[u], h = o[u + 1];
              o[u] = h, o[u + 1] = c
            }
          }
          var p = o.length;
          if (2 == p && o.push(0), 0 !== p) return o
        }
      }, e.prototype.readFlatPosList = function (t, e) {
        var r = Ec(t, !1).replace(/^\s*|\s*$/g, ""), n = e[0], i = n.srsName, o = n.srsDimension, a = "enu";
        i && (a = Gr(i).getAxisOrientation());
        var s, l, u, c = r.split(/\s+/), h = 2;
        t.getAttribute("srsDimension") ? h = z_(t.getAttribute("srsDimension")) : t.getAttribute("dimension") ? h = z_(t.getAttribute("dimension")) : t.parentNode.getAttribute("srsDimension") ? h = z_(t.parentNode.getAttribute("srsDimension")) : o && (h = z_(o));
        for (var p = [], f = 0, d = c.length; f < d; f += h) s = parseFloat(c[f]), l = parseFloat(c[f + 1]), u = 3 === h ? parseFloat(c[f + 2]) : 0, "en" === a.substr(0, 2) ? p.push(s, l, u) : p.push(l, s, u);
        return p
      }, e.prototype.writePos_ = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = i ? "3" : "2";
        t.setAttribute("srsDimension", o);
        var a = n.srsName, s = "enu";
        a && (s = Gr(a).getAxisOrientation());
        var l, u = e.getCoordinates();
        (l = "en" === s.substr(0, 2) ? u[0] + " " + u[1] : u[1] + " " + u[0], i) && (l += " " + (u[2] || 0));
        X_(t, l)
      }, e.prototype.getCoords_ = function (t, e, r) {
        var n = "enu";
        e && (n = Gr(e).getAxisOrientation());
        var i = "en" === n.substr(0, 2) ? t[0] + " " + t[1] : t[1] + " " + t[0];
        r && (i += " " + (t[2] || 0));
        return i
      }, e.prototype.writePosList_ = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = i ? "3" : "2";
        t.setAttribute("srsDimension", o);
        for (var a, s = n.srsName, l = e.getCoordinates(), u = l.length, c = new Array(u), h = 0; h < u; ++h) a = l[h], c[h] = this.getCoords_(a, s, i);
        X_(t, c.join(" "))
      }, e.prototype.writePoint = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        n && t.setAttribute("srsName", n);
        var i = Sc(t.namespaceURI, "pos");
        t.appendChild(i), this.writePos_(i, e, r)
      }, e.prototype.writeEnvelope = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        n && t.setAttribute("srsName", n);
        var i = [e[0] + " " + e[1], e[2] + " " + e[3]];
        Vc({node: t}, this.ENVELOPE_SERIALIZERS, Nc, i, r, ["lowerCorner", "upperCorner"], this)
      }, e.prototype.writeLinearRing = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        n && t.setAttribute("srsName", n);
        var i = Sc(t.namespaceURI, "posList");
        t.appendChild(i), this.writePosList_(i, e, r)
      }, e.prototype.RING_NODE_FACTORY_ = function (t, e, r) {
        var n = e[e.length - 1], i = n.node, o = n.exteriorWritten;
        return void 0 === o && (n.exteriorWritten = !0), Sc(i.namespaceURI, void 0 !== o ? "interior" : "exterior")
      }, e.prototype.writeSurfaceOrPolygon = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName;
        if ("PolygonPatch" !== t.nodeName && o && t.setAttribute("srsName", o), "Polygon" === t.nodeName || "PolygonPatch" === t.nodeName) {
          var a = e.getLinearRings();
          Vc({node: t, hasZ: i, srsName: o}, this.RING_SERIALIZERS, this.RING_NODE_FACTORY_, a, r, void 0, this)
        } else if ("Surface" === t.nodeName) {
          var s = Sc(t.namespaceURI, "patches");
          t.appendChild(s), this.writeSurfacePatches_(s, e, r)
        }
      }, e.prototype.writeCurveOrLineString = function (t, e, r) {
        var n = r[r.length - 1].srsName;
        if ("LineStringSegment" !== t.nodeName && n && t.setAttribute("srsName", n), "LineString" === t.nodeName || "LineStringSegment" === t.nodeName) {
          var i = Sc(t.namespaceURI, "posList");
          t.appendChild(i), this.writePosList_(i, e, r)
        } else if ("Curve" === t.nodeName) {
          var o = Sc(t.namespaceURI, "segments");
          t.appendChild(o), this.writeCurveSegments_(o, e, r)
        }
      }, e.prototype.writeMultiSurfaceOrPolygon = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName, a = n.surface;
        o && t.setAttribute("srsName", o);
        var s = e.getPolygons();
        Vc({
          node: t,
          hasZ: i,
          srsName: o,
          surface: a
        }, this.SURFACEORPOLYGONMEMBER_SERIALIZERS, this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, s, r, void 0, this)
      }, e.prototype.writeMultiPoint = function (t, e, r) {
        var n = r[r.length - 1], i = n.srsName, o = n.hasZ;
        i && t.setAttribute("srsName", i);
        var a = e.getPoints();
        Vc({node: t, hasZ: o, srsName: i}, this.POINTMEMBER_SERIALIZERS, jc("pointMember"), a, r, void 0, this)
      }, e.prototype.writeMultiCurveOrLineString = function (t, e, r) {
        var n = r[r.length - 1], i = n.hasZ, o = n.srsName, a = n.curve;
        o && t.setAttribute("srsName", o);
        var s = e.getLineStrings();
        Vc({
          node: t,
          hasZ: i,
          srsName: o,
          curve: a
        }, this.LINESTRINGORCURVEMEMBER_SERIALIZERS, this.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, s, r, void 0, this)
      }, e.prototype.writeRing = function (t, e, r) {
        var n = Sc(t.namespaceURI, "LinearRing");
        t.appendChild(n), this.writeLinearRing(n, e, r)
      }, e.prototype.writeSurfaceOrPolygonMember = function (t, e, r) {
        var n = this.GEOMETRY_NODE_FACTORY_(e, r);
        n && (t.appendChild(n), this.writeSurfaceOrPolygon(n, e, r))
      }, e.prototype.writePointMember = function (t, e, r) {
        var n = Sc(t.namespaceURI, "Point");
        t.appendChild(n), this.writePoint(n, e, r)
      }, e.prototype.writeLineStringOrCurveMember = function (t, e, r) {
        var n = this.GEOMETRY_NODE_FACTORY_(e, r);
        n && (t.appendChild(n), this.writeCurveOrLineString(n, e, r))
      }, e.prototype.writeSurfacePatches_ = function (t, e, r) {
        var n = Sc(t.namespaceURI, "PolygonPatch");
        t.appendChild(n), this.writeSurfaceOrPolygon(n, e, r)
      }, e.prototype.writeCurveSegments_ = function (t, e, r) {
        var n = Sc(t.namespaceURI, "LineStringSegment");
        t.appendChild(n), this.writeCurveOrLineString(n, e, r)
      }, e.prototype.writeGeometryElement = function (t, e, r) {
        var n, i = r[r.length - 1], o = O({}, i);
        o.node = t, n = Array.isArray(e) ? qy(e, i) : Wy(e, !0, i), Vc(o, this.GEOMETRY_SERIALIZERS, this.GEOMETRY_NODE_FACTORY_, [n], r, void 0, this)
      }, e.prototype.writeFeatureElement = function (t, e, r) {
        var n = e.getId();
        n && t.setAttribute("fid", n);
        var i = r[r.length - 1], o = i.featureNS, a = e.getGeometryName();
        i.serializers || (i.serializers = {}, i.serializers[o] = {});
        var s = [], l = [];
        if (e.hasProperties()) {
          var u = e.getProperties();
          for (var c in u) {
            var h = u[c];
            null !== h && (s.push(c), l.push(h), c == a || "function" == typeof h.getSimplifiedGeometry ? c in i.serializers[o] || (i.serializers[o][c] = Ac(this.writeGeometryElement, this)) : c in i.serializers[o] || (i.serializers[o][c] = Ac(X_)))
          }
        }
        var p = O({}, i);
        p.node = t, Vc(p, i.serializers, jc(void 0, o), l, r, s)
      }, e.prototype.writeFeatureMembers_ = function (t, e, r) {
        var n = r[r.length - 1], i = n.featureType, o = n.featureNS, a = {};
        a[o] = {}, a[o][i] = Ac(this.writeFeatureElement, this);
        var s = O({}, n);
        s.node = t, Vc(s, a, jc(i, o), e, r)
      }, e.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function (t, e, r) {
        var n = e[e.length - 1].node;
        return Sc(this.namespace, Q_[n.nodeName])
      }, e.prototype.GEOMETRY_NODE_FACTORY_ = function (t, e, r) {
        var n, i = e[e.length - 1], o = i.multiSurface, a = i.surface, s = i.curve, l = i.multiCurve;
        return Array.isArray(t) ? n = "Envelope" : "MultiPolygon" === (n = t.getType()) && !0 === o ? n = "MultiSurface" : "Polygon" === n && !0 === a ? n = "Surface" : "LineString" === n && !0 === s ? n = "Curve" : "MultiLineString" === n && !0 === l && (n = "MultiCurve"), Sc(this.namespace, n)
      }, e.prototype.writeGeometryNode = function (t, e) {
        e = this.adaptOptions(e);
        var r = Sc(this.namespace, "geom"), n = {
          node: r,
          hasZ: this.hasZ,
          srsName: this.srsName,
          curve: this.curve_,
          surface: this.surface_,
          multiSurface: this.multiSurface_,
          multiCurve: this.multiCurve_
        };
        return e && O(n, e), this.writeGeometryElement(r, t, [n]), r
      }, e.prototype.writeFeaturesNode = function (t, e) {
        e = this.adaptOptions(e);
        var r = Sc(this.namespace, "featureMembers");
        r.setAttributeNS(wc, "xsi:schemaLocation", this.schemaLocation);
        var n = {
          srsName: this.srsName,
          hasZ: this.hasZ,
          curve: this.curve_,
          surface: this.surface_,
          multiSurface: this.multiSurface_,
          multiCurve: this.multiCurve_,
          featureNS: this.featureNS,
          featureType: this.featureType
        };
        return e && O(n, e), this.writeFeatureMembers_(r, t, [n]), r
      }, e
    }(F_);
    tb.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {
      "http://www.opengis.net/gml": {
        pos: Lc(tb.prototype.readFlatPos),
        posList: Lc(tb.prototype.readFlatPosList),
        coordinates: Lc($_.prototype.readFlatCoordinates)
      }
    }, tb.prototype.FLAT_LINEAR_RINGS_PARSERS = {
      "http://www.opengis.net/gml": {
        interior: tb.prototype.interiorParser,
        exterior: tb.prototype.exteriorParser
      }
    }, tb.prototype.GEOMETRY_PARSERS = {
      "http://www.opengis.net/gml": {
        Point: Lc(F_.prototype.readPoint),
        MultiPoint: Lc(F_.prototype.readMultiPoint),
        LineString: Lc(F_.prototype.readLineString),
        MultiLineString: Lc(F_.prototype.readMultiLineString),
        LinearRing: Lc(F_.prototype.readLinearRing),
        Polygon: Lc(F_.prototype.readPolygon),
        MultiPolygon: Lc(F_.prototype.readMultiPolygon),
        Surface: Lc(tb.prototype.readSurface),
        MultiSurface: Lc(tb.prototype.readMultiSurface),
        Curve: Lc(tb.prototype.readCurve),
        MultiCurve: Lc(tb.prototype.readMultiCurve),
        Envelope: Lc(tb.prototype.readEnvelope)
      }
    }, tb.prototype.MULTICURVE_PARSERS = {
      "http://www.opengis.net/gml": {
        curveMember: Ic(tb.prototype.curveMemberParser),
        curveMembers: Ic(tb.prototype.curveMemberParser)
      }
    }, tb.prototype.MULTISURFACE_PARSERS = {
      "http://www.opengis.net/gml": {
        surfaceMember: Ic(tb.prototype.surfaceMemberParser),
        surfaceMembers: Ic(tb.prototype.surfaceMemberParser)
      }
    }, tb.prototype.CURVEMEMBER_PARSERS = {
      "http://www.opengis.net/gml": {
        LineString: Ic(F_.prototype.readLineString),
        Curve: Ic(tb.prototype.readCurve)
      }
    }, tb.prototype.SURFACEMEMBER_PARSERS = {
      "http://www.opengis.net/gml": {
        Polygon: Ic(F_.prototype.readPolygon),
        Surface: Ic(tb.prototype.readSurface)
      }
    }, tb.prototype.SURFACE_PARSERS = {"http://www.opengis.net/gml": {patches: Lc(tb.prototype.readPatch)}}, tb.prototype.CURVE_PARSERS = {"http://www.opengis.net/gml": {segments: Lc(tb.prototype.readSegment)}}, tb.prototype.ENVELOPE_PARSERS = {
      "http://www.opengis.net/gml": {
        lowerCorner: Ic(tb.prototype.readFlatPosList),
        upperCorner: Ic(tb.prototype.readFlatPosList)
      }
    }, tb.prototype.PATCHES_PARSERS = {"http://www.opengis.net/gml": {PolygonPatch: Lc(tb.prototype.readPolygonPatch)}}, tb.prototype.SEGMENTS_PARSERS = {"http://www.opengis.net/gml": {LineStringSegment: Lc(tb.prototype.readLineStringSegment)}}, tb.prototype.writeFeatures, tb.prototype.RING_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        exterior: Ac(tb.prototype.writeRing),
        interior: Ac(tb.prototype.writeRing)
      }
    }, tb.prototype.ENVELOPE_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        lowerCorner: Ac(X_),
        upperCorner: Ac(X_)
      }
    }, tb.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        surfaceMember: Ac(tb.prototype.writeSurfaceOrPolygonMember),
        polygonMember: Ac(tb.prototype.writeSurfaceOrPolygonMember)
      }
    }, tb.prototype.POINTMEMBER_SERIALIZERS = {"http://www.opengis.net/gml": {pointMember: Ac(tb.prototype.writePointMember)}}, tb.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        lineStringMember: Ac(tb.prototype.writeLineStringOrCurveMember),
        curveMember: Ac(tb.prototype.writeLineStringOrCurveMember)
      }
    }, tb.prototype.GEOMETRY_SERIALIZERS = {
      "http://www.opengis.net/gml": {
        Curve: Ac(tb.prototype.writeCurveOrLineString),
        MultiCurve: Ac(tb.prototype.writeMultiCurveOrLineString),
        Point: Ac(tb.prototype.writePoint),
        MultiPoint: Ac(tb.prototype.writeMultiPoint),
        LineString: Ac(tb.prototype.writeCurveOrLineString),
        MultiLineString: Ac(tb.prototype.writeMultiCurveOrLineString),
        LinearRing: Ac(tb.prototype.writeLinearRing),
        Polygon: Ac(tb.prototype.writeSurfaceOrPolygon),
        MultiPolygon: Ac(tb.prototype.writeMultiSurfaceOrPolygon),
        Surface: Ac(tb.prototype.writeSurfaceOrPolygon),
        MultiSurface: Ac(tb.prototype.writeMultiSurfaceOrPolygon),
        Envelope: Ac(tb.prototype.writeEnvelope)
      }
    };
    var eb = tb, rb = eb;
    rb.prototype.writeFeatures, rb.prototype.writeFeaturesNode;
    var nb = rb, ib = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), ob = function (t) {
      function e(e) {
        var r = this, n = e || {};
        return (r = t.call(this, n) || this).schemaLocation = n.schemaLocation ? n.schemaLocation : r.namespace + " http://schemas.opengis.net/gml/3.2.1/gml.xsd", r
      }

      return ib(e, t), e
    }(eb);
    ob.prototype.namespace = "http://www.opengis.net/gml/3.2", ob.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        pos: Lc(eb.prototype.readFlatPos),
        posList: Lc(eb.prototype.readFlatPosList),
        coordinates: Lc($_.prototype.readFlatCoordinates)
      }
    }, ob.prototype.FLAT_LINEAR_RINGS_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        interior: eb.prototype.interiorParser,
        exterior: eb.prototype.exteriorParser
      }
    }, ob.prototype.GEOMETRY_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        Point: Lc(F_.prototype.readPoint),
        MultiPoint: Lc(F_.prototype.readMultiPoint),
        LineString: Lc(F_.prototype.readLineString),
        MultiLineString: Lc(F_.prototype.readMultiLineString),
        LinearRing: Lc(F_.prototype.readLinearRing),
        Polygon: Lc(F_.prototype.readPolygon),
        MultiPolygon: Lc(F_.prototype.readMultiPolygon),
        Surface: Lc(ob.prototype.readSurface),
        MultiSurface: Lc(eb.prototype.readMultiSurface),
        Curve: Lc(ob.prototype.readCurve),
        MultiCurve: Lc(eb.prototype.readMultiCurve),
        Envelope: Lc(ob.prototype.readEnvelope)
      }
    }, ob.prototype.MULTICURVE_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        curveMember: Ic(eb.prototype.curveMemberParser),
        curveMembers: Ic(eb.prototype.curveMemberParser)
      }
    }, ob.prototype.MULTISURFACE_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        surfaceMember: Ic(eb.prototype.surfaceMemberParser),
        surfaceMembers: Ic(eb.prototype.surfaceMemberParser)
      }
    }, ob.prototype.CURVEMEMBER_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        LineString: Ic(F_.prototype.readLineString),
        Curve: Ic(eb.prototype.readCurve)
      }
    }, ob.prototype.SURFACEMEMBER_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        Polygon: Ic(F_.prototype.readPolygon),
        Surface: Ic(eb.prototype.readSurface)
      }
    }, ob.prototype.SURFACE_PARSERS = {"http://www.opengis.net/gml/3.2": {patches: Lc(eb.prototype.readPatch)}}, ob.prototype.CURVE_PARSERS = {"http://www.opengis.net/gml/3.2": {segments: Lc(eb.prototype.readSegment)}}, ob.prototype.ENVELOPE_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        lowerCorner: Ic(eb.prototype.readFlatPosList),
        upperCorner: Ic(eb.prototype.readFlatPosList)
      }
    }, ob.prototype.PATCHES_PARSERS = {"http://www.opengis.net/gml/3.2": {PolygonPatch: Lc(eb.prototype.readPolygonPatch)}}, ob.prototype.SEGMENTS_PARSERS = {"http://www.opengis.net/gml/3.2": {LineStringSegment: Lc(eb.prototype.readLineStringSegment)}}, ob.prototype.MULTIPOINT_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        pointMember: Ic(F_.prototype.pointMemberParser),
        pointMembers: Ic(F_.prototype.pointMemberParser)
      }
    }, ob.prototype.MULTILINESTRING_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        lineStringMember: Ic(F_.prototype.lineStringMemberParser),
        lineStringMembers: Ic(F_.prototype.lineStringMemberParser)
      }
    }, ob.prototype.MULTIPOLYGON_PARSERS = {
      "http://www.opengis.net/gml/3.2": {
        polygonMember: Ic(F_.prototype.polygonMemberParser),
        polygonMembers: Ic(F_.prototype.polygonMemberParser)
      }
    }, ob.prototype.POINTMEMBER_PARSERS = {"http://www.opengis.net/gml/3.2": {Point: Ic(F_.prototype.readFlatCoordinatesFromNode)}}, ob.prototype.LINESTRINGMEMBER_PARSERS = {"http://www.opengis.net/gml/3.2": {LineString: Ic(F_.prototype.readLineString)}}, ob.prototype.POLYGONMEMBER_PARSERS = {"http://www.opengis.net/gml/3.2": {Polygon: Ic(F_.prototype.readPolygon)}}, ob.prototype.RING_PARSERS = {"http://www.opengis.net/gml/3.2": {LinearRing: Lc(F_.prototype.readFlatLinearRing)}}, ob.prototype.RING_SERIALIZERS = {
      "http://www.opengis.net/gml/3.2": {
        exterior: Ac(eb.prototype.writeRing),
        interior: Ac(eb.prototype.writeRing)
      }
    }, ob.prototype.ENVELOPE_SERIALIZERS = {
      "http://www.opengis.net/gml/3.2": {
        lowerCorner: Ac(X_),
        upperCorner: Ac(X_)
      }
    }, ob.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS = {
      "http://www.opengis.net/gml/3.2": {
        surfaceMember: Ac(eb.prototype.writeSurfaceOrPolygonMember),
        polygonMember: Ac(eb.prototype.writeSurfaceOrPolygonMember)
      }
    }, ob.prototype.POINTMEMBER_SERIALIZERS = {"http://www.opengis.net/gml/3.2": {pointMember: Ac(eb.prototype.writePointMember)}}, ob.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS = {
      "http://www.opengis.net/gml/3.2": {
        lineStringMember: Ac(eb.prototype.writeLineStringOrCurveMember),
        curveMember: Ac(eb.prototype.writeLineStringOrCurveMember)
      }
    }, ob.prototype.GEOMETRY_SERIALIZERS = {
      "http://www.opengis.net/gml/3.2": {
        Curve: Ac(eb.prototype.writeCurveOrLineString),
        MultiCurve: Ac(eb.prototype.writeMultiCurveOrLineString),
        Point: Ac(ob.prototype.writePoint),
        MultiPoint: Ac(eb.prototype.writeMultiPoint),
        LineString: Ac(eb.prototype.writeCurveOrLineString),
        MultiLineString: Ac(eb.prototype.writeMultiCurveOrLineString),
        LinearRing: Ac(eb.prototype.writeLinearRing),
        Polygon: Ac(eb.prototype.writeSurfaceOrPolygon),
        MultiPolygon: Ac(eb.prototype.writeMultiSurfaceOrPolygon),
        Surface: Ac(eb.prototype.writeSurfaceOrPolygon),
        MultiSurface: Ac(eb.prototype.writeMultiSurfaceOrPolygon),
        Envelope: Ac(eb.prototype.writeEnvelope)
      }
    };
    var ab = ob, sb = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), lb = [null, "http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1"],
      ub = {rte: Nb, trk: Db, wpt: Gb}, cb = Gc(lb, {rte: Ic(Nb), trk: Ic(Db), wpt: Ic(Gb)}),
      hb = Gc(lb, {text: Fc(U_, "linkText"), type: Fc(U_, "linkType")}), pb = Gc(lb, {
        rte: Ac((function (t, e, r) {
          var n = r[0], i = e.getProperties(), o = {node: t};
          o.properties = i;
          var a = e.getGeometry();
          if (a.getType() == bt.LINE_STRING) {
            var s = Wy(a, !0, n);
            o.geometryLayout = s.getLayout(), i.rtept = s.getCoordinates()
          }
          var l = r[r.length - 1].node, u = wb[l.namespaceURI], c = Dc(i, u);
          Vc(o, Sb, Nc, c, r, u)
        })), trk: Ac((function (t, e, r) {
          var n = r[0], i = e.getProperties(), o = {node: t};
          o.properties = i;
          var a = e.getGeometry();
          if (a.getType() == bt.MULTI_LINE_STRING) {
            var s = Wy(a, !0, n);
            i.trkseg = s.getLineStrings()
          }
          var l = r[r.length - 1].node, u = Tb[l.namespaceURI], c = Dc(i, u);
          Vc(o, Cb, Nc, c, r, u)
        })), wpt: Ac((function (t, e, r) {
          var n = r[0], i = r[r.length - 1];
          i.properties = e.getProperties();
          var o = e.getGeometry();
          if (o.getType() == bt.POINT) {
            var a = Wy(o, !0, n);
            i.geometryLayout = a.getLayout(), Ub(t, a.getCoordinates(), r)
          }
        }))
      }), fb = function (t) {
        function e(e) {
          var r = t.call(this) || this, n = e || {};
          return r.dataProjection = Gr("EPSG:4326"), r.readExtensions_ = n.readExtensions, r
        }

        return sb(e, t), e.prototype.handleReadExtensions_ = function (t) {
          t || (t = []);
          for (var e = 0, r = t.length; e < r; ++e) {
            var n = t[e];
            if (this.readExtensions_) {
              var i = n.get("extensionsNode_") || null;
              this.readExtensions_(n, i)
            }
            n.set("extensionsNode_", void 0)
          }
        }, e.prototype.readFeatureFromNode = function (t, e) {
          if (!g(lb, t.namespaceURI)) return null;
          var r = ub[t.localName];
          if (!r) return null;
          var n = r(t, [this.getReadOptions(t, e)]);
          return n ? (this.handleReadExtensions_([n]), n) : null
        }, e.prototype.readFeaturesFromNode = function (t, e) {
          if (!g(lb, t.namespaceURI)) return [];
          if ("gpx" == t.localName) {
            var r = Uc([], cb, t, [this.getReadOptions(t, e)]);
            return r ? (this.handleReadExtensions_(r), r) : []
          }
          return []
        }, e.prototype.writeFeaturesNode = function (t, e) {
          e = this.adaptOptions(e);
          var r = Sc("http://www.topografix.com/GPX/1/1", "gpx");
          return r.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xsi", wc), r.setAttributeNS(wc, "xsi:schemaLocation", "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"), r.setAttribute("version", "1.1"), r.setAttribute("creator", "OpenLayers"), Vc({node: r}, pb, Mb, t, [e]), r
        }, e
      }(P_), db = Gc(lb, {
        name: Fc(U_),
        cmt: Fc(U_),
        desc: Fc(U_),
        src: Fc(U_),
        link: kb,
        number: Fc(G_),
        extensions: jb,
        type: Fc(U_),
        rtept: function (t, e) {
          var r = Uc({}, gb, t, e);
          if (r) {
            var n = e[e.length - 1], i = n.flatCoordinates, o = n.layoutOptions;
            Fb(i, o, t, r)
          }
        }
      }), gb = Gc(lb, {ele: Fc(N_), time: Fc(j_)}), yb = Gc(lb, {
        name: Fc(U_),
        cmt: Fc(U_),
        desc: Fc(U_),
        src: Fc(U_),
        link: kb,
        number: Fc(G_),
        type: Fc(U_),
        extensions: jb,
        trkseg: function (t, e) {
          var r = e[e.length - 1];
          zc(mb, t, e);
          var n = r.flatCoordinates;
          r.ends.push(n.length)
        }
      }), mb = Gc(lb, {
        trkpt: function (t, e) {
          var r = Uc({}, vb, t, e);
          if (r) {
            var n = e[e.length - 1], i = n.flatCoordinates, o = n.layoutOptions;
            Fb(i, o, t, r)
          }
        }
      }), vb = Gc(lb, {ele: Fc(N_), time: Fc(j_)}), _b = Gc(lb, {
        ele: Fc(N_),
        time: Fc(j_),
        magvar: Fc(N_),
        geoidheight: Fc(N_),
        name: Fc(U_),
        cmt: Fc(U_),
        desc: Fc(U_),
        src: Fc(U_),
        link: kb,
        sym: Fc(U_),
        type: Fc(U_),
        fix: Fc(U_),
        sat: Fc(G_),
        hdop: Fc(N_),
        vdop: Fc(N_),
        pdop: Fc(N_),
        ageofdgpsdata: Fc(N_),
        dgpsid: Fc(G_),
        extensions: jb
      }), bb = ["text", "type"], xb = Gc(lb, {text: Ac(X_), type: Ac(X_)}),
      wb = Gc(lb, ["name", "cmt", "desc", "src", "link", "number", "type", "rtept"]), Sb = Gc(lb, {
        name: Ac(X_),
        cmt: Ac(X_),
        desc: Ac(X_),
        src: Ac(X_),
        link: Ac(zb),
        number: Ac(q_),
        type: Ac(X_),
        rtept: kc(Ac(Ub))
      }), Eb = Gc(lb, ["ele", "time"]), Tb = Gc(lb, ["name", "cmt", "desc", "src", "link", "number", "type", "trkseg"]),
      Cb = Gc(lb, {
        name: Ac(X_),
        cmt: Ac(X_),
        desc: Ac(X_),
        src: Ac(X_),
        link: Ac(zb),
        number: Ac(q_),
        type: Ac(X_),
        trkseg: kc(Ac((function (t, e, r) {
          var n = {node: t};
          n.geometryLayout = e.getLayout(), n.properties = {}, Vc(n, Pb, Ob, e.getCoordinates(), r)
        })))
      }), Ob = jc("trkpt"), Pb = Gc(lb, {trkpt: Ac(Ub)}),
      Rb = Gc(lb, ["ele", "time", "magvar", "geoidheight", "name", "cmt", "desc", "src", "link", "sym", "type", "fix", "sat", "hdop", "vdop", "pdop", "ageofdgpsdata", "dgpsid"]),
      Ib = Gc(lb, {
        ele: Ac(W_),
        time: Ac(Y_),
        magvar: Ac(W_),
        geoidheight: Ac(W_),
        name: Ac(X_),
        cmt: Ac(X_),
        desc: Ac(X_),
        src: Ac(X_),
        link: Ac(zb),
        sym: Ac(X_),
        type: Ac(X_),
        fix: Ac(X_),
        sat: Ac(q_),
        hdop: Ac(W_),
        vdop: Ac(W_),
        pdop: Ac(W_),
        ageofdgpsdata: Ac(W_),
        dgpsid: Ac(q_)
      }), Lb = {Point: "wpt", LineString: "rte", MultiLineString: "trk"};

    function Mb(t, e, r) {
      var n = t.getGeometry();
      if (n) {
        var i = Lb[n.getType()];
        if (i) return Sc(e[e.length - 1].node.namespaceURI, i)
      }
    }

    function Fb(t, e, r, n) {
      return t.push(parseFloat(r.getAttribute("lon")), parseFloat(r.getAttribute("lat"))), "ele" in n ? (t.push(n.ele), delete n.ele, e.hasZ = !0) : t.push(0), "time" in n ? (t.push(n.time), delete n.time, e.hasM = !0) : t.push(0), t
    }

    function Ab(t, e, r) {
      var n = yt, i = 2;
      if (t.hasZ && t.hasM ? (n = _t, i = 4) : t.hasZ ? (n = mt, i = 3) : t.hasM && (n = vt, i = 3), 4 !== i) {
        for (var o = 0, a = e.length / 4; o < a; o++) e[o * i] = e[4 * o], e[o * i + 1] = e[4 * o + 1], t.hasZ && (e[o * i + 2] = e[4 * o + 2]), t.hasM && (e[o * i + 2] = e[4 * o + 3]);
        if (e.length = e.length / 4 * i, r) for (o = 0, a = r.length; o < a; o++) r[o] = r[o] / 4 * i
      }
      return n
    }

    function kb(t, e) {
      var r = e[e.length - 1], n = t.getAttribute("href");
      null !== n && (r.link = n), zc(hb, t, e)
    }

    function jb(t, e) {
      e[e.length - 1].extensionsNode_ = t
    }

    function Nb(t, e) {
      var r = e[0], n = Uc({flatCoordinates: [], layoutOptions: {}}, db, t, e);
      if (n) {
        var i = n.flatCoordinates;
        delete n.flatCoordinates;
        var o = n.layoutOptions;
        delete n.layoutOptions;
        var a = Ab(o, i), s = new Py(i, a);
        Wy(s, !1, r);
        var l = new gt(s);
        return l.setProperties(n, !0), l
      }
    }

    function Db(t, e) {
      var r = e[0], n = Uc({flatCoordinates: [], ends: [], layoutOptions: {}}, yb, t, e);
      if (n) {
        var i = n.flatCoordinates;
        delete n.flatCoordinates;
        var o = n.ends;
        delete n.ends;
        var a = n.layoutOptions;
        delete n.layoutOptions;
        var s = Ab(a, i, o), l = new Zy(i, s, o);
        Wy(l, !1, r);
        var u = new gt(l);
        return u.setProperties(n, !0), u
      }
    }

    function Gb(t, e) {
      var r = e[0], n = Uc({}, _b, t, e);
      if (n) {
        var i = {}, o = Fb([], i, t, n), a = Ab(i, o), s = new qn(o, a);
        Wy(s, !1, r);
        var l = new gt(s);
        return l.setProperties(n, !0), l
      }
    }

    function zb(t, e, r) {
      t.setAttribute("href", e);
      var n = r[r.length - 1].properties, i = [n.linkText, n.linkType];
      Vc({node: t}, xb, Nc, i, r, bb)
    }

    function Ub(t, e, r) {
      var n = r[r.length - 1], i = n.node.namespaceURI, o = n.properties;
      switch (t.setAttributeNS(null, "lat", String(e[1])), t.setAttributeNS(null, "lon", String(e[0])), n.geometryLayout) {
        case _t:
          0 !== e[3] && (o.time = e[3]);
        case mt:
          0 !== e[2] && (o.ele = e[2]);
          break;
        case vt:
          0 !== e[2] && (o.time = e[2])
      }
      var a = "rtept" == t.nodeName ? Eb[i] : Rb[i], s = Dc(o, a);
      Vc({node: t, properties: o}, Ib, Nc, s, r, a)
    }

    var Bb = fb, Vb = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function Yb(t) {
      return "string" == typeof t ? t : ""
    }

    var Wb, qb, Xb, Zb, Kb, Hb, $b, Jb = function (t) {
        function e() {
          return t.call(this) || this
        }

        return Vb(e, t), e.prototype.getType = function () {
          return Pu
        }, e.prototype.readFeature = function (t, e) {
          return this.readFeatureFromText(Yb(t), this.adaptOptions(e))
        }, e.prototype.readFeatureFromText = function (t, e) {
          return n()
        }, e.prototype.readFeatures = function (t, e) {
          return this.readFeaturesFromText(Yb(t), this.adaptOptions(e))
        }, e.prototype.readFeaturesFromText = function (t, e) {
          return n()
        }, e.prototype.readGeometry = function (t, e) {
          return this.readGeometryFromText(Yb(t), this.adaptOptions(e))
        }, e.prototype.readGeometryFromText = function (t, e) {
          return n()
        }, e.prototype.readProjection = function (t) {
          return this.readProjectionFromText(Yb(t))
        }, e.prototype.readProjectionFromText = function (t) {
          return this.dataProjection
        }, e.prototype.writeFeature = function (t, e) {
          return this.writeFeatureText(t, this.adaptOptions(e))
        }, e.prototype.writeFeatureText = function (t, e) {
          return n()
        }, e.prototype.writeFeatures = function (t, e) {
          return this.writeFeaturesText(t, this.adaptOptions(e))
        }, e.prototype.writeFeaturesText = function (t, e) {
          return n()
        }, e.prototype.writeGeometry = function (t, e) {
          return this.writeGeometryText(t, this.adaptOptions(e))
        }, e.prototype.writeGeometryText = function (t, e) {
          return n()
        }, e
      }(Yy), Qb = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), tx = "barometric", ex = "gps", rx = "none",
      nx = /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,
      ix = /^H.([A-Z]{3}).*?:(.*)/, ox = /^HFDTE(\d{2})(\d{2})(\d{2})/, ax = /\r\n|\r|\n/, sx = function (t) {
        function e(e) {
          var r = t.call(this) || this, n = e || {};
          return r.dataProjection = Gr("EPSG:4326"), r.altitudeMode_ = n.altitudeMode ? n.altitudeMode : rx, r
        }

        return Qb(e, t), e.prototype.readFeatureFromText = function (t, e) {
          var r, n, i = this.altitudeMode_, o = t.split(ax), a = {}, s = [], l = 2e3, u = 0, c = 1, h = -1;
          for (r = 0, n = o.length; r < n; ++r) {
            var p = o[r], f = void 0;
            if ("B" == p.charAt(0)) {
              if (f = nx.exec(p)) {
                var d = parseInt(f[1], 10), g = parseInt(f[2], 10), y = parseInt(f[3], 10),
                  m = parseInt(f[4], 10) + parseInt(f[5], 10) / 6e4;
                "S" == f[6] && (m = -m);
                var v = parseInt(f[7], 10) + parseInt(f[8], 10) / 6e4;
                if ("W" == f[9] && (v = -v), s.push(v, m), i != rx) {
                  var _ = void 0;
                  _ = i == ex ? parseInt(f[11], 10) : i == tx ? parseInt(f[12], 10) : 0, s.push(_)
                }
                var b = Date.UTC(l, u, c, d, g, y);
                b < h && (b = Date.UTC(l, u, c + 1, d, g, y)), s.push(b / 1e3), h = b
              }
            } else "H" == p.charAt(0) && ((f = ox.exec(p)) ? (c = parseInt(f[1], 10), u = parseInt(f[2], 10) - 1, l = 2e3 + parseInt(f[3], 10)) : (f = ix.exec(p)) && (a[f[1]] = f[2].trim()))
          }
          if (0 === s.length) return null;
          var x = new Py(s, i == rx ? vt : _t), w = new gt(Wy(x, !1, e));
          return w.setProperties(a, !0), w
        }, e.prototype.readFeaturesFromText = function (t, e) {
          var r = this.readFeatureFromText(t, e);
          return r ? [r] : []
        }, e
      }(Jb), lx = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), ux = ["http://www.google.com/kml/ext/2.2"],
      cx = [null, "http://earth.google.com/kml/2.0", "http://earth.google.com/kml/2.1", "http://earth.google.com/kml/2.2", "http://www.opengis.net/kml/2.2"],
      hx = {fraction: rp, pixels: np, insetPixels: np}, px = Gc(cx, {
        ExtendedData: sw,
        Region: lw,
        MultiGeometry: Fc(Jx, "geometry"),
        LineString: Fc(Kx, "geometry"),
        LinearRing: Fc(Hx, "geometry"),
        Point: Fc(Qx, "geometry"),
        Polygon: Fc(ew, "geometry"),
        Style: Fc(nw),
        StyleMap: function (t, e) {
          var r = kx.call(this, t, e);
          if (!r) return;
          var n = e[e.length - 1];
          Array.isArray(r) ? n.Style = r : "string" == typeof r ? n.styleUrl = r : pt(!1, 38)
        },
        address: Fc(U_),
        description: Fc(U_),
        name: Fc(U_),
        open: Fc(A_),
        phoneNumber: Fc(U_),
        styleUrl: Fc(Mx),
        visibility: Fc(A_)
      }, Gc(ux, {
        MultiTrack: Fc((function (t, e) {
          var r = Uc([], Bx, t, e);
          if (!r) return;
          return new Zy(r)
        }), "geometry"), Track: Fc(Yx, "geometry")
      })), fx = Gc(cx, {
        ExtendedData: sw, Region: lw, Link: function (t, e) {
          zc(dx, t, e)
        }, address: Fc(U_), description: Fc(U_), name: Fc(U_), open: Fc(A_), phoneNumber: Fc(U_), visibility: Fc(A_)
      }), dx = Gc(cx, {href: Fc(Lx)}), gx = Gc(cx, {
        LatLonAltBox: function (t, e) {
          var r = Uc({}, hw, t, e);
          if (!r) return;
          var n = e[e.length - 1], i = [parseFloat(r.west), parseFloat(r.south), parseFloat(r.east), parseFloat(r.north)];
          n.extent = i, n.altitudeMode = r.altitudeMode, n.minAltitude = parseFloat(r.minAltitude), n.maxAltitude = parseFloat(r.maxAltitude)
        }, Lod: function (t, e) {
          var r = Uc({}, pw, t, e);
          if (!r) return;
          var n = e[e.length - 1];
          n.minLodPixels = parseFloat(r.minLodPixels), n.maxLodPixels = parseFloat(r.maxLodPixels), n.minFadeExtent = parseFloat(r.minFadeExtent), n.maxFadeExtent = parseFloat(r.maxFadeExtent)
        }
      }), yx = Gc(cx, ["Document", "Placemark"]), mx = Gc(cx, {
        Document: Ac((function (t, e, r) {
          Vc({node: t}, mw, vw, e, r, void 0, this)
        })), Placemark: Ac(Bw)
      }), vx = null;
    var _x, bx = null;
    var xx, wx = null;
    var Sx = null;
    var Ex = null;
    var Tx, Cx = null;

    function Ox(t) {
      return t
    }

    var Px = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return Cx || (vx = new ep({color: Wb = [255, 255, 255, 1]}), bx = new dp({
          anchor: qb = [20, 2],
          anchorOrigin: ip,
          anchorXUnits: Xb = np,
          anchorYUnits: Zb = np,
          crossOrigin: "anonymous",
          rotation: 0,
          scale: $b = .5,
          size: Kb = [64, 64],
          src: Hb = "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"
        }), _x = "NO_IMAGE", wx = new gp({color: Wb, width: 1}), xx = new gp({
          color: [51, 51, 51, 1],
          width: 2
        }), Sx = new Tp({font: "bold 16px Helvetica", fill: vx, stroke: xx, scale: .8}), Ex = new wp({
          fill: vx,
          image: bx,
          text: Sx,
          stroke: wx,
          zIndex: 0
        }), Cx = [Ex]), r.dataProjection = Gr("EPSG:4326"), r.defaultStyle_ = n.defaultStyle ? n.defaultStyle : Cx, r.extractStyles_ = void 0 === n.extractStyles || n.extractStyles, r.writeStyles_ = void 0 === n.writeStyles || n.writeStyles, r.sharedStyles_ = {}, r.showPointNames_ = void 0 === n.showPointNames || n.showPointNames, r.crossOrigin_ = void 0 !== n.crossOrigin ? n.crossOrigin : "anonymous", r.iconUrlFunction_ = n.iconUrlFunction ? n.iconUrlFunction : Ox, r
      }

      return lx(e, t), e.prototype.readDocumentOrFolder_ = function (t, e) {
        var r = Uc([], Gc(cx, {
          Document: Rc(this.readDocumentOrFolder_, this),
          Folder: Rc(this.readDocumentOrFolder_, this),
          Placemark: Ic(this.readPlacemark_, this),
          Style: this.readSharedStyle_.bind(this),
          StyleMap: this.readSharedStyleMap_.bind(this)
        }), t, e, this);
        return r || void 0
      }, e.prototype.readPlacemark_ = function (t, e) {
        var r = Uc({geometry: null}, px, t, e, this);
        if (r) {
          var n = new gt, i = t.getAttribute("id");
          null !== i && n.setId(i);
          var o = e[0], a = r.geometry;
          if (a && Wy(a, !1, o), n.setGeometry(a), delete r.geometry, this.extractStyles_) {
            var s = function (t, e, r, n, i) {
              return function (o, a) {
                var s = i, l = "", u = [];
                if (s) {
                  var c = o.getGeometry();
                  if (c) {
                    var h = c.getType();
                    s = h === bt.GEOMETRY_COLLECTION ? (u = c.getGeometriesArrayRecursive().filter((function (t) {
                      var e = t.getType();
                      return e === bt.POINT || e === bt.MULTI_POINT
                    }))).length > 0 : h === bt.POINT || h === bt.MULTI_POINT
                  }
                }
                s && (l = o.get("name"), (s = s && !!l) && l.search(/&[^&]+;/) > -1 && (Tx || (Tx = document.createElement("textarea")), Tx.innerHTML = l, l = Tx.value));
                var p = r;
                if (t ? p = t : e && (p = function t(e, r, n) {
                  return Array.isArray(e) ? e : "string" == typeof e ? t(n[e], r, n) : r
                }(e, r, n)), s) {
                  var f = function (t, e) {
                    var r = [0, 0], n = "start", i = t.getImage();
                    if (i) {
                      var o = i.getImageSize();
                      if (null === o && (o = Kb), 2 == o.length) {
                        var a = i.getScaleArray();
                        r[0] = a[0] * o[0] / 2, r[1] = -a[1] * o[1] / 2, n = "left"
                      }
                    }
                    var s = t.getText();
                    s ? ((s = s.clone()).setFont(s.getFont() || Sx.getFont()), s.setScale(s.getScale() || Sx.getScale()), s.setFill(s.getFill() || Sx.getFill()), s.setStroke(s.getStroke() || xx)) : s = Sx.clone();
                    return s.setText(e), s.setOffsetX(r[0]), s.setOffsetY(r[1]), s.setTextAlign(n), new wp({
                      image: i,
                      text: s
                    })
                  }(p[0], l);
                  return u.length > 0 ? (f.setGeometry(new Vm(u)), [f, new wp({
                    geometry: p[0].getGeometry(),
                    image: null,
                    fill: p[0].getFill(),
                    stroke: p[0].getStroke(),
                    text: null
                  })].concat(p.slice(1))) : f
                }
                return p
              }
            }(r.Style, r.styleUrl, this.defaultStyle_, this.sharedStyles_, this.showPointNames_);
            n.setStyle(s)
          }
          return delete r.Style, n.setProperties(r, !0), n
        }
      }, e.prototype.readSharedStyle_ = function (t, e) {
        var r = t.getAttribute("id");
        if (null !== r) {
          var n = nw.call(this, t, e);
          if (n) {
            var i = void 0, o = t.baseURI;
            if (o && "about:blank" != o || (o = window.location.href), o) i = new URL("#" + r, o).href; else i = "#" + r;
            this.sharedStyles_[i] = n
          }
        }
      }, e.prototype.readSharedStyleMap_ = function (t, e) {
        var r = t.getAttribute("id");
        if (null !== r) {
          var n = kx.call(this, t, e);
          if (n) {
            var i, o = t.baseURI;
            if (o && "about:blank" != o || (o = window.location.href), o) i = new URL("#" + r, o).href; else i = "#" + r;
            this.sharedStyles_[i] = n
          }
        }
      }, e.prototype.readFeatureFromNode = function (t, e) {
        if (!g(cx, t.namespaceURI)) return null;
        var r = this.readPlacemark_(t, [this.getReadOptions(t, e)]);
        return r || null
      }, e.prototype.readFeaturesFromNode = function (t, e) {
        if (!g(cx, t.namespaceURI)) return [];
        var r, n = t.localName;
        if ("Document" == n || "Folder" == n) return (r = this.readDocumentOrFolder_(t, [this.getReadOptions(t, e)])) || [];
        if ("Placemark" == n) {
          var i = this.readPlacemark_(t, [this.getReadOptions(t, e)]);
          return i ? [i] : []
        }
        if ("kml" == n) {
          r = [];
          for (var o = t.firstElementChild; o; o = o.nextElementSibling) {
            var a = this.readFeaturesFromNode(o, e);
            a && v(r, a)
          }
          return r
        }
        return []
      }, e.prototype.readName = function (t) {
        if (t) {
          if ("string" == typeof t) {
            var e = Pc(t);
            return this.readNameFromDocument(e)
          }
          return Cc(t) ? this.readNameFromDocument(t) : this.readNameFromNode(t)
        }
      }, e.prototype.readNameFromDocument = function (t) {
        for (var e = t.firstChild; e; e = e.nextSibling) if (e.nodeType == Node.ELEMENT_NODE) {
          var r = this.readNameFromNode(e);
          if (r) return r
        }
      }, e.prototype.readNameFromNode = function (t) {
        for (var e = t.firstElementChild; e; e = e.nextElementSibling) if (g(cx, e.namespaceURI) && "name" == e.localName) return U_(e);
        for (e = t.firstElementChild; e; e = e.nextElementSibling) {
          var r = e.localName;
          if (g(cx, e.namespaceURI) && ("Document" == r || "Folder" == r || "Placemark" == r || "kml" == r)) {
            var n = this.readNameFromNode(e);
            if (n) return n
          }
        }
      }, e.prototype.readNetworkLinks = function (t) {
        var e = [];
        if ("string" == typeof t) {
          var r = Pc(t);
          v(e, this.readNetworkLinksFromDocument(r))
        } else Cc(t) ? v(e, this.readNetworkLinksFromDocument(t)) : v(e, this.readNetworkLinksFromNode(t));
        return e
      }, e.prototype.readNetworkLinksFromDocument = function (t) {
        for (var e = [], r = t.firstChild; r; r = r.nextSibling) r.nodeType == Node.ELEMENT_NODE && v(e, this.readNetworkLinksFromNode(r));
        return e
      }, e.prototype.readNetworkLinksFromNode = function (t) {
        for (var e = [], r = t.firstElementChild; r; r = r.nextElementSibling) if (g(cx, r.namespaceURI) && "NetworkLink" == r.localName) {
          var n = Uc({}, fx, r, []);
          e.push(n)
        }
        for (r = t.firstElementChild; r; r = r.nextElementSibling) {
          var i = r.localName;
          !g(cx, r.namespaceURI) || "Document" != i && "Folder" != i && "kml" != i || v(e, this.readNetworkLinksFromNode(r))
        }
        return e
      }, e.prototype.readRegion = function (t) {
        var e = [];
        if ("string" == typeof t) {
          var r = Pc(t);
          v(e, this.readRegionFromDocument(r))
        } else Cc(t) ? v(e, this.readRegionFromDocument(t)) : v(e, this.readRegionFromNode(t));
        return e
      }, e.prototype.readRegionFromDocument = function (t) {
        for (var e = [], r = t.firstChild; r; r = r.nextSibling) r.nodeType == Node.ELEMENT_NODE && v(e, this.readRegionFromNode(r));
        return e
      }, e.prototype.readRegionFromNode = function (t) {
        for (var e = [], r = t.firstElementChild; r; r = r.nextElementSibling) if (g(cx, r.namespaceURI) && "Region" == r.localName) {
          var n = Uc({}, gx, r, []);
          e.push(n)
        }
        for (r = t.firstElementChild; r; r = r.nextElementSibling) {
          var i = r.localName;
          !g(cx, r.namespaceURI) || "Document" != i && "Folder" != i && "kml" != i || v(e, this.readRegionFromNode(r))
        }
        return e
      }, e.prototype.writeFeaturesNode = function (t, e) {
        e = this.adaptOptions(e);
        var r = Sc(cx[4], "kml"), n = "http://www.w3.org/2000/xmlns/";
        r.setAttributeNS(n, "xmlns:gx", ux[0]), r.setAttributeNS(n, "xmlns:xsi", wc), r.setAttributeNS(wc, "xsi:schemaLocation", "http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd");
        var i = {node: r}, o = {};
        t.length > 1 ? o.Document = t : 1 == t.length && (o.Placemark = t[0]);
        var a = yx[r.namespaceURI], s = Dc(o, a);
        return Vc(i, mx, Nc, s, [e], a, this), r
      }, e
    }(P_);

    function Rx(t) {
      var e = Ec(t, !1), r = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(e);
      if (r) {
        var n = r[1];
        return [parseInt(n.substr(6, 2), 16), parseInt(n.substr(4, 2), 16), parseInt(n.substr(2, 2), 16), parseInt(n.substr(0, 2), 16) / 255]
      }
    }

    function Ix(t) {
      var e = Ec(t, !1), r = [];
      e = e.replace(/\s*,\s*/g, ",");
      for (var n, i = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?),([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s+|,|$)(?:([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s+|$))?\s*/i; n = i.exec(e);) {
        var o = parseFloat(n[1]), a = parseFloat(n[2]), s = n[3] ? parseFloat(n[3]) : 0;
        r.push(o, a, s), e = e.substr(n[0].length)
      }
      if ("" === e) return r
    }

    function Lx(t) {
      var e = Ec(t, !1).trim(), r = t.baseURI;
      return r && "about:blank" != r || (r = window.location.href), r ? new URL(e, r).href : e
    }

    function Mx(t) {
      var e = Ec(t, !1).trim().replace(/^(?!.*#)/, "#"), r = t.baseURI;
      return r && "about:blank" != r || (r = window.location.href), r ? new URL(e, r).href : e
    }

    function Fx(t) {
      return N_(t)
    }

    var Ax = Gc(cx, {
      Pair: function (t, e) {
        var r = Uc({}, uw, t, e, this);
        if (!r) return;
        var n = r.key;
        if (n && "normal" == n) {
          var i = r.styleUrl;
          i && (e[e.length - 1] = i);
          var o = r.Style;
          o && (e[e.length - 1] = o)
        }
      }
    });

    function kx(t, e) {
      return Uc(void 0, Ax, t, e, this)
    }

    var jx = Gc(cx, {
      Icon: Fc((function (t, e) {
        var r = Uc({}, Wx, t, e);
        return r || null
      })), color: Fc(Rx), heading: Fc(N_), hotSpot: Fc((function (t) {
        var e, r = t.getAttribute("xunits"), n = t.getAttribute("yunits");
        return e = "insetPixels" !== r ? "insetPixels" !== n ? ip : ap : "insetPixels" !== n ? op : sp, {
          x: parseFloat(t.getAttribute("x")),
          xunits: hx[r],
          y: parseFloat(t.getAttribute("y")),
          yunits: hx[n],
          origin: e
        }
      })), scale: Fc(Fx)
    });
    var Nx = Gc(cx, {color: Fc(Rx), scale: Fc(Fx)});
    var Dx = Gc(cx, {color: Fc(Rx), width: Fc(N_)});
    var Gx = Gc(cx, {color: Fc(Rx), fill: Fc(A_), outline: Fc(A_)});
    var zx = Gc(cx, {coordinates: Lc(Ix)});

    function Ux(t, e) {
      return Uc(null, zx, t, e)
    }

    var Bx = Gc(ux, {Track: Ic(Yx)});
    var Vx = Gc(cx, {
      when: function (t, e) {
        var r = e[e.length - 1].whens, n = Ec(t, !1), i = Date.parse(n);
        r.push(isNaN(i) ? 0 : i)
      }
    }, Gc(ux, {
      coord: function (t, e) {
        var r = e[e.length - 1].flatCoordinates, n = Ec(t, !1),
          i = /^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i.exec(n);
        if (i) {
          var o = parseFloat(i[1]), a = parseFloat(i[2]), s = parseFloat(i[3]);
          r.push(o, a, s, 0)
        } else r.push(0, 0, 0, 0)
      }
    }));

    function Yx(t, e) {
      var r = Uc({flatCoordinates: [], whens: []}, Vx, t, e);
      if (r) {
        for (var n = r.flatCoordinates, i = r.whens, o = 0, a = Math.min(n.length, i.length); o < a; ++o) n[4 * o + 3] = i[o];
        return new Py(n, _t)
      }
    }

    var Wx = Gc(cx, {href: Fc(Lx)}, Gc(ux, {x: Fc(N_), y: Fc(N_), w: Fc(N_), h: Fc(N_)}));
    var qx = Gc(cx, {coordinates: Lc(Ix)});

    function Xx(t, e) {
      return Uc(null, qx, t, e)
    }

    var Zx = Gc(cx, {extrude: Fc(A_), tessellate: Fc(A_), altitudeMode: Fc(U_)});

    function Kx(t, e) {
      var r = Uc({}, Zx, t, e), n = Xx(t, e);
      if (n) {
        var i = new Py(n, mt);
        return i.setProperties(r, !0), i
      }
    }

    function Hx(t, e) {
      var r = Uc({}, Zx, t, e), n = Xx(t, e);
      if (n) {
        var i = new fi(n, mt, [n.length]);
        return i.setProperties(r, !0), i
      }
    }

    var $x = Gc(cx, {LineString: Ic(Kx), LinearRing: Ic(Hx), MultiGeometry: Ic(Jx), Point: Ic(Qx), Polygon: Ic(ew)});

    function Jx(t, e) {
      var r, n = Uc([], $x, t, e);
      if (!n) return null;
      if (0 === n.length) return new Vm(n);
      for (var i = !0, o = n[0].getType(), a = 1, s = n.length; a < s; ++a) if (n[a].getType() != o) {
        i = !1;
        break
      }
      if (i) {
        var l = void 0, u = void 0;
        if (o == bt.POINT) {
          var c = n[0];
          l = c.getLayout(), u = c.getFlatCoordinates();
          for (a = 1, s = n.length; a < s; ++a) v(u, n[a].getFlatCoordinates());
          iw(r = new Hy(u, l), n)
        } else o == bt.LINE_STRING ? iw(r = new Zy(n), n) : o == bt.POLYGON ? iw(r = new Jy(n), n) : o == bt.GEOMETRY_COLLECTION ? r = new Vm(n) : pt(!1, 37)
      } else r = new Vm(n);
      return r
    }

    function Qx(t, e) {
      var r = Uc({}, Zx, t, e), n = Xx(t, e);
      if (n) {
        var i = new qn(n, mt);
        return i.setProperties(r, !0), i
      }
    }

    var tw = Gc(cx, {
      innerBoundaryIs: function (t, e) {
        var r = Uc(void 0, fw, t, e);
        if (r) {
          e[e.length - 1].push(r)
        }
      }, outerBoundaryIs: function (t, e) {
        var r = Uc(void 0, dw, t, e);
        if (r) {
          e[e.length - 1][0] = r
        }
      }
    });

    function ew(t, e) {
      var r = Uc({}, Zx, t, e), n = Uc([null], tw, t, e);
      if (n && n[0]) {
        for (var i = n[0], o = [i.length], a = 1, s = n.length; a < s; ++a) v(i, n[a]), o.push(i.length);
        var l = new fi(i, mt, o);
        return l.setProperties(r, !0), l
      }
    }

    var rw = Gc(cx, {
      IconStyle: function (t, e) {
        var r = Uc({}, jx, t, e);
        if (r) {
          var n, i, o, a, s = e[e.length - 1], l = "Icon" in r ? r.Icon : {},
            u = !("Icon" in r) || Object.keys(l).length > 0, c = l.href;
          c ? n = c : u && (n = Hb);
          var h, p = ip, f = r.hotSpot;
          f ? (i = [f.x, f.y], o = f.xunits, a = f.yunits, p = f.origin) : n === Hb ? (i = qb, o = Xb, a = Zb) : /^http:\/\/maps\.(?:google|gstatic)\.com\//.test(n) && (i = [.5, 0], o = rp, a = rp);
          var d, g = l.x, y = l.y;
          void 0 !== g && void 0 !== y && (h = [g, y]);
          var m, v = l.w, _ = l.h;
          void 0 !== v && void 0 !== _ && (d = [v, _]);
          var b = r.heading;
          void 0 !== b && (m = Ye(b));
          var x = r.scale, w = r.color;
          if (u) {
            n == Hb && (d = Kb, void 0 === x && (x = $b));
            var S = new dp({
              anchor: i,
              anchorOrigin: p,
              anchorXUnits: o,
              anchorYUnits: a,
              crossOrigin: this.crossOrigin_,
              offset: h,
              offsetOrigin: ip,
              rotation: m,
              scale: x,
              size: d,
              src: this.iconUrlFunction_(n),
              color: w
            });
            s.imageStyle = S
          } else s.imageStyle = _x
        }
      }, LabelStyle: function (t, e) {
        var r = Uc({}, Nx, t, e);
        if (r) {
          var n = e[e.length - 1], i = new Tp({fill: new ep({color: "color" in r ? r.color : Wb}), scale: r.scale});
          n.textStyle = i
        }
      }, LineStyle: function (t, e) {
        var r = Uc({}, Dx, t, e);
        if (r) {
          var n = e[e.length - 1], i = new gp({color: "color" in r ? r.color : Wb, width: "width" in r ? r.width : 1});
          n.strokeStyle = i
        }
      }, PolyStyle: function (t, e) {
        var r = Uc({}, Gx, t, e);
        if (r) {
          var n = e[e.length - 1], i = new ep({color: "color" in r ? r.color : Wb});
          n.fillStyle = i;
          var o = r.fill;
          void 0 !== o && (n.fill = o);
          var a = r.outline;
          void 0 !== a && (n.outline = a)
        }
      }
    });

    function nw(t, e) {
      var r = Uc({}, rw, t, e, this);
      if (!r) return null;
      var n, i = "fillStyle" in r ? r.fillStyle : vx, o = r.fill;
      void 0 === o || o || (i = null), "imageStyle" in r ? r.imageStyle != _x && (n = r.imageStyle) : n = bx;
      var a = "textStyle" in r ? r.textStyle : Sx, s = "strokeStyle" in r ? r.strokeStyle : wx, l = r.outline;
      return void 0 === l || l ? [new wp({
        fill: i,
        image: n,
        stroke: s,
        text: a,
        zIndex: void 0
      })] : [new wp({
        geometry: function (t) {
          var e = t.getGeometry(), r = e.getType();
          return r === bt.GEOMETRY_COLLECTION ? new Vm(e.getGeometriesArrayRecursive().filter((function (t) {
            var e = t.getType();
            return e !== bt.POLYGON && e !== bt.MULTI_POLYGON
          }))) : r !== bt.POLYGON && r !== bt.MULTI_POLYGON ? e : void 0
        }, fill: i, image: n, stroke: s, text: a, zIndex: void 0
      }), new wp({
        geometry: function (t) {
          var e = t.getGeometry(), r = e.getType();
          return r === bt.GEOMETRY_COLLECTION ? new Vm(e.getGeometriesArrayRecursive().filter((function (t) {
            var e = t.getType();
            return e === bt.POLYGON || e === bt.MULTI_POLYGON
          }))) : r === bt.POLYGON || r === bt.MULTI_POLYGON ? e : void 0
        }, fill: i, stroke: null, zIndex: void 0
      })]
    }

    function iw(t, e) {
      var r, n, i, o = e.length, a = new Array(e.length), s = new Array(e.length), l = new Array(e.length);
      r = !1, n = !1, i = !1;
      for (var u = 0; u < o; ++u) {
        var c = e[u];
        a[u] = c.get("extrude"), s[u] = c.get("tessellate"), l[u] = c.get("altitudeMode"), r = r || void 0 !== a[u], n = n || void 0 !== s[u], i = i || l[u]
      }
      r && t.set("extrude", a), n && t.set("tessellate", s), i && t.set("altitudeMode", l)
    }

    var ow = Gc(cx, {displayName: Fc(U_), value: Fc(U_)});
    var aw = Gc(cx, {
      Data: function (t, e) {
        var r = t.getAttribute("name");
        zc(ow, t, e);
        var n = e[e.length - 1];
        r && n.displayName ? n[r] = {
          value: n.value, displayName: n.displayName, toString: function () {
            return n.value
          }
        } : null !== r ? n[r] = n.value : null !== n.displayName && (n[n.displayName] = n.value), delete n.value
      }, SchemaData: function (t, e) {
        zc(cw, t, e)
      }
    });

    function sw(t, e) {
      zc(aw, t, e)
    }

    function lw(t, e) {
      zc(gx, t, e)
    }

    var uw = Gc(cx, {Style: Fc(nw), key: Fc(U_), styleUrl: Fc(Mx)});
    var cw = Gc(cx, {
      SimpleData: function (t, e) {
        var r = t.getAttribute("name");
        if (null !== r) {
          var n = U_(t);
          e[e.length - 1][r] = n
        }
      }
    });
    var hw = Gc(cx, {
      altitudeMode: Fc(U_),
      minAltitude: Fc(N_),
      maxAltitude: Fc(N_),
      north: Fc(N_),
      south: Fc(N_),
      east: Fc(N_),
      west: Fc(N_)
    });
    var pw = Gc(cx, {minLodPixels: Fc(N_), maxLodPixels: Fc(N_), minFadeExtent: Fc(N_), maxFadeExtent: Fc(N_)});
    var fw = Gc(cx, {LinearRing: Lc(Ux)});
    var dw = Gc(cx, {LinearRing: Lc(Ux)});

    function gw(t, e) {
      for (var r = Oo(e), n = [255 * (4 == r.length ? r[3] : 1), r[2], r[1], r[0]], i = 0; i < 4; ++i) {
        var o = Math.floor(n[i]).toString(16);
        n[i] = 1 == o.length ? "0" + o : o
      }
      X_(t, n.join(""))
    }

    var yw = Gc(cx, {
      Data: Ac((function (t, e, r) {
        t.setAttribute("name", e.name);
        var n = {node: t}, i = e.value;
        "object" == typeof i ? (null !== i && i.displayName && Vc(n, yw, Nc, [i.displayName], r, ["displayName"]), null !== i && i.value && Vc(n, yw, Nc, [i.value], r, ["value"])) : Vc(n, yw, Nc, [i], r, ["value"])
      })), value: Ac((function (t, e) {
        X_(t, e)
      })), displayName: Ac((function (t, e) {
        V_(t, e)
      }))
    });
    var mw = Gc(cx, {Placemark: Ac(Bw)}), vw = function (t, e, r) {
      return Sc(e[e.length - 1].node.namespaceURI, "Placemark")
    };
    var _w = jc("Data");
    var bw = Gc(cx, ["href"], Gc(ux, ["x", "y", "w", "h"])),
      xw = Gc(cx, {href: Ac(X_)}, Gc(ux, {x: Ac(W_), y: Ac(W_), w: Ac(W_), h: Ac(W_)})), ww = function (t, e, r) {
        return Sc(ux[0], "gx:" + r)
      };
    var Sw = Gc(cx, ["scale", "heading", "Icon", "color", "hotSpot"]), Ew = Gc(cx, {
      Icon: Ac((function (t, e, r) {
        var n = {node: t}, i = r[r.length - 1].node, o = bw[i.namespaceURI], a = Dc(e, o);
        Vc(n, xw, Nc, a, r, o), a = Dc(e, o = bw[ux[0]]), Vc(n, xw, ww, a, r, o)
      })), color: Ac(gw), heading: Ac(W_), hotSpot: Ac((function (t, e) {
        t.setAttribute("x", String(e.x)), t.setAttribute("y", String(e.y)), t.setAttribute("xunits", e.xunits), t.setAttribute("yunits", e.yunits)
      })), scale: Ac(Jw)
    });
    var Tw = Gc(cx, ["color", "scale"]), Cw = Gc(cx, {color: Ac(gw), scale: Ac(Jw)});
    var Ow = Gc(cx, ["color", "width"]), Pw = Gc(cx, {color: Ac(gw), width: Ac(W_)});
    var Rw = {
        Point: "Point",
        LineString: "LineString",
        LinearRing: "LinearRing",
        Polygon: "Polygon",
        MultiPoint: "MultiGeometry",
        MultiLineString: "MultiGeometry",
        MultiPolygon: "MultiGeometry",
        GeometryCollection: "MultiGeometry"
      }, Iw = function (t, e, r) {
        if (t) return Sc(e[e.length - 1].node.namespaceURI, Rw[t.getType()])
      }, Lw = jc("Point"), Mw = jc("LineString"), Fw = jc("LinearRing"), Aw = jc("Polygon"),
      kw = Gc(cx, {LineString: Ac(Ww), Point: Ac(Ww), Polygon: Ac(Hw), GeometryCollection: Ac(jw)});

    function jw(t, e, r) {
      var n, i = {node: t}, o = e.getType(), a = [];
      o === bt.GEOMETRY_COLLECTION ? (e.getGeometriesArrayRecursive().forEach((function (t) {
        var e = t.getType();
        e === bt.MULTI_POINT ? a = a.concat(t.getPoints()) : e === bt.MULTI_LINE_STRING ? a = a.concat(t.getLineStrings()) : e === bt.MULTI_POLYGON ? a = a.concat(t.getPolygons()) : e === bt.POINT || e === bt.LINE_STRING || e === bt.POLYGON ? a.push(t) : pt(!1, 39)
      })), n = Iw) : o === bt.MULTI_POINT ? (a = e.getPoints(), n = Lw) : o === bt.MULTI_LINE_STRING ? (a = e.getLineStrings(), n = Mw) : o === bt.MULTI_POLYGON ? (a = e.getPolygons(), n = Aw) : pt(!1, 39), Vc(i, kw, n, a, r)
    }

    var Nw = Gc(cx, {LinearRing: Ac(Ww)});

    function Dw(t, e, r) {
      Vc({node: t}, Nw, Fw, [e], r)
    }

    var Gw = Gc(cx, {
        ExtendedData: Ac((function (t, e, r) {
          for (var n = {node: t}, i = e.names, o = e.values, a = i.length, s = 0; s < a; s++) Vc(n, yw, _w, [{
            name: i[s],
            value: o[s]
          }], r)
        })),
        MultiGeometry: Ac(jw),
        LineString: Ac(Ww),
        LinearRing: Ac(Ww),
        Point: Ac(Ww),
        Polygon: Ac(Hw),
        Style: Ac((function (t, e, r) {
          var n = {node: t}, i = {};
          if (e.pointStyles.length) {
            var o = e.pointStyles[0].getText();
            o && (i.LabelStyle = o);
            var a = e.pointStyles[0].getImage();
            a && "function" == typeof a.getSrc && (i.IconStyle = a)
          }
          if (e.lineStyles.length) {
            (s = e.lineStyles[0].getStroke()) && (i.LineStyle = s)
          }
          if (e.polyStyles.length) {
            var s;
            (s = e.polyStyles[0].getStroke()) && !i.LineStyle && (i.LineStyle = s), i.PolyStyle = e.polyStyles[0]
          }
          var l = r[r.length - 1].node, u = Qw[l.namespaceURI], c = Dc(i, u);
          Vc(n, tS, Nc, c, r, u)
        })),
        address: Ac(X_),
        description: Ac(X_),
        name: Ac(X_),
        open: Ac(B_),
        phoneNumber: Ac(X_),
        styleUrl: Ac(X_),
        visibility: Ac(B_)
      }), zw = Gc(cx, ["name", "open", "visibility", "address", "phoneNumber", "description", "styleUrl", "Style"]),
      Uw = jc("ExtendedData");

    function Bw(t, e, r) {
      var n = {node: t};
      e.getId() && t.setAttribute("id", e.getId());
      var i = e.getProperties(),
        o = {address: 1, description: 1, name: 1, open: 1, phoneNumber: 1, styleUrl: 1, visibility: 1};
      o[e.getGeometryName()] = 1;
      var a = Object.keys(i || {}).sort().filter((function (t) {
        return !o[t]
      })), s = e.getStyleFunction();
      if (s) {
        var l = s(e, 0);
        if (l) {
          var u = Array.isArray(l) ? l : [l], c = u;
          if (e.getGeometry() && (c = u.filter((function (t) {
            var r = t.getGeometryFunction()(e);
            if (r) {
              var n = r.getType();
              return n === bt.GEOMETRY_COLLECTION ? r.getGeometriesArrayRecursive().filter((function (t) {
                var e = t.getType();
                return e === bt.POINT || e === bt.MULTI_POINT
              })).length : n === bt.POINT || n === bt.MULTI_POINT
            }
          }))), this.writeStyles_) {
            var h = u, p = u;
            e.getGeometry() && (h = u.filter((function (t) {
              var r = t.getGeometryFunction()(e);
              if (r) {
                var n = r.getType();
                return n === bt.GEOMETRY_COLLECTION ? r.getGeometriesArrayRecursive().filter((function (t) {
                  var e = t.getType();
                  return e === bt.LINE_STRING || e === bt.MULTI_LINE_STRING
                })).length : n === bt.LINE_STRING || n === bt.MULTI_LINE_STRING
              }
            })), p = u.filter((function (t) {
              var r = t.getGeometryFunction()(e);
              if (r) {
                var n = r.getType();
                return n === bt.GEOMETRY_COLLECTION ? r.getGeometriesArrayRecursive().filter((function (t) {
                  var e = t.getType();
                  return e === bt.POLYGON || e === bt.MULTI_POLYGON
                })).length : n === bt.POLYGON || n === bt.MULTI_POLYGON
              }
            }))), i.Style = {pointStyles: c, lineStyles: h, polyStyles: p}
          }
          if (c.length && void 0 === i.name) {
            var f = c[0].getText();
            f && (i.name = f.getText())
          }
        }
      }
      var d = r[r.length - 1].node, g = zw[d.namespaceURI], y = Dc(i, g);
      if (Vc(n, Gw, Nc, y, r, g), a.length > 0) {
        var m = Dc(i, a);
        Vc(n, Gw, Uw, [{names: a, values: m}], r)
      }
      var v = r[0], _ = e.getGeometry();
      _ && (_ = Wy(_, !0, v)), Vc(n, Gw, Iw, [_], r)
    }

    var Vw = Gc(cx, ["extrude", "tessellate", "altitudeMode", "coordinates"]), Yw = Gc(cx, {
      extrude: Ac(B_), tessellate: Ac(B_), altitudeMode: Ac(X_), coordinates: Ac((function (t, e, r) {
        var n, i = r[r.length - 1], o = i.layout, a = i.stride;
        o == yt || o == vt ? n = 2 : o == mt || o == _t ? n = 3 : pt(!1, 34);
        var s = e.length, l = "";
        if (s > 0) {
          l += e[0];
          for (var u = 1; u < n; ++u) l += "," + e[u];
          for (var c = a; c < s; c += a) {
            l += " " + e[c];
            for (u = 1; u < n; ++u) l += "," + e[c + u]
          }
        }
        X_(t, l)
      }))
    });

    function Ww(t, e, r) {
      var n = e.getFlatCoordinates(), i = {node: t};
      i.layout = e.getLayout(), i.stride = e.getStride();
      var o = e.getProperties();
      o.coordinates = n;
      var a = r[r.length - 1].node, s = Vw[a.namespaceURI], l = Dc(o, s);
      Vc(i, Yw, Nc, l, r, s)
    }

    var qw = Gc(cx, ["color", "fill", "outline"]), Xw = Gc(cx, {outerBoundaryIs: Ac(Dw), innerBoundaryIs: Ac(Dw)}),
      Zw = jc("innerBoundaryIs"), Kw = jc("outerBoundaryIs");

    function Hw(t, e, r) {
      var n = e.getLinearRings(), i = n.shift(), o = {node: t};
      Vc(o, Xw, Zw, n, r), Vc(o, Xw, Kw, [i], r)
    }

    var $w = Gc(cx, {color: Ac(gw), fill: Ac(B_), outline: Ac(B_)});

    function Jw(t, e) {
      W_(t, Math.round(1e6 * e) / 1e6)
    }

    var Qw = Gc(cx, ["IconStyle", "LabelStyle", "LineStyle", "PolyStyle"]), tS = Gc(cx, {
      IconStyle: Ac((function (t, e, r) {
        var n = {node: t}, i = {}, o = e.getSrc(), a = e.getSize(), s = e.getImageSize(), l = {href: o};
        if (a) {
          l.w = a[0], l.h = a[1];
          var u = e.getAnchor(), c = e.getOrigin();
          if (c && s && 0 !== c[0] && c[1] !== a[1] && (l.x = c[0], l.y = s[1] - (c[1] + a[1])), u && (u[0] !== a[0] / 2 || u[1] !== a[1] / 2)) {
            var h = {x: u[0], xunits: np, y: a[1] - u[1], yunits: np};
            i.hotSpot = h
          }
        }
        i.Icon = l;
        var p = e.getScale();
        1 !== p && (i.scale = p);
        var f = e.getRotation();
        0 !== f && (i.heading = f);
        var d = e.getColor();
        d && (i.color = d);
        var g = r[r.length - 1].node, y = Sw[g.namespaceURI], m = Dc(i, y);
        Vc(n, Ew, Nc, m, r, y)
      })), LabelStyle: Ac((function (t, e, r) {
        var n = {node: t}, i = {}, o = e.getFill();
        o && (i.color = o.getColor());
        var a = e.getScale();
        a && 1 !== a && (i.scale = a);
        var s = r[r.length - 1].node, l = Tw[s.namespaceURI], u = Dc(i, l);
        Vc(n, Cw, Nc, u, r, l)
      })), LineStyle: Ac((function (t, e, r) {
        var n = {node: t}, i = {color: e.getColor(), width: Number(e.getWidth()) || 1}, o = r[r.length - 1].node,
          a = Ow[o.namespaceURI], s = Dc(i, a);
        Vc(n, Pw, Nc, s, r, a)
      })), PolyStyle: Ac((function (t, e, r) {
        var n = {node: t}, i = e.getFill(), o = e.getStroke(),
          a = {color: i ? i.getColor() : void 0, fill: !!i && void 0, outline: !!o && void 0}, s = r[r.length - 1].node,
          l = qw[s.namespaceURI], u = Dc(a, l);
        Vc(n, $w, Nc, u, r, l)
      }))
    });
    var eS = Px, rS = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), nS = [null], iS = Gc(nS, {
      nd: function (t, e) {
        e[e.length - 1].ndrefs.push(t.getAttribute("ref"))
      }, tag: lS
    }), oS = Gc(nS, {
      node: function (t, e) {
        var r = e[0], n = e[e.length - 1], i = t.getAttribute("id"),
          o = [parseFloat(t.getAttribute("lon")), parseFloat(t.getAttribute("lat"))];
        n.nodes[i] = o;
        var a = Uc({tags: {}}, sS, t, e);
        if (!I(a.tags)) {
          var s = new qn(o);
          Wy(s, !1, r);
          var l = new gt(s);
          l.setId(i), l.setProperties(a.tags, !0), n.features.push(l)
        }
      }, way: function (t, e) {
        var r = Uc({id: t.getAttribute("id"), ndrefs: [], tags: {}}, iS, t, e);
        e[e.length - 1].ways.push(r)
      }
    }), aS = function (t) {
      function e() {
        var e = t.call(this) || this;
        return e.dataProjection = Gr("EPSG:4326"), e
      }

      return rS(e, t), e.prototype.readFeaturesFromNode = function (t, e) {
        var r = this.getReadOptions(t, e);
        if ("osm" == t.localName) {
          for (var n = Uc({nodes: {}, ways: [], features: []}, oS, t, [r]), i = 0; i < n.ways.length; i++) {
            for (var o = n.ways[i], a = [], s = 0, l = o.ndrefs.length; s < l; s++) {
              v(a, n.nodes[o.ndrefs[s]])
            }
            var u = void 0;
            Wy(u = o.ndrefs[0] == o.ndrefs[o.ndrefs.length - 1] ? new fi(a, yt, [a.length]) : new Py(a, yt), !1, r);
            var c = new gt(u);
            c.setId(o.id), c.setProperties(o.tags, !0), n.features.push(c)
          }
          if (n.features) return n.features
        }
        return []
      }, e
    }(P_), sS = Gc(nS, {tag: lS});

    function lS(t, e) {
      e[e.length - 1].tags[t.getAttribute("k")] = t.getAttribute("v")
    }

    var uS = aS, cS = function () {
      function t() {
      }

      return t.prototype.read = function (t) {
        if (t) {
          if ("string" == typeof t) {
            var e = Pc(t);
            return this.readFromDocument(e)
          }
          return Cc(t) ? this.readFromDocument(t) : this.readFromNode(t)
        }
        return null
      }, t.prototype.readFromDocument = function (t) {
        for (var e = t.firstChild; e; e = e.nextSibling) if (e.nodeType == Node.ELEMENT_NODE) return this.readFromNode(e);
        return null
      }, t.prototype.readFromNode = function (t) {
      }, t
    }();

    function hS(t) {
      return t.getAttributeNS("http://www.w3.org/1999/xlink", "href")
    }

    var pS = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), fS = [null, "http://www.opengis.net/ows/1.1"], dS = Gc(fS, {
      ServiceIdentification: Fc((function (t, e) {
        return Uc({}, OS, t, e)
      })), ServiceProvider: Fc((function (t, e) {
        return Uc({}, PS, t, e)
      })), OperationsMetadata: Fc((function (t, e) {
        return Uc({}, SS, t, e)
      }))
    }), gS = function (t) {
      function e() {
        return t.call(this) || this
      }

      return pS(e, t), e.prototype.readFromNode = function (t) {
        var e = Uc({}, dS, t, []);
        return e || null
      }, e
    }(cS), yS = Gc(fS, {
      DeliveryPoint: Fc(U_),
      City: Fc(U_),
      AdministrativeArea: Fc(U_),
      PostalCode: Fc(U_),
      Country: Fc(U_),
      ElectronicMailAddress: Fc(U_)
    }), mS = Gc(fS, {
      Value: Mc((function (t, e) {
        return U_(t)
      }))
    }), vS = Gc(fS, {
      AllowedValues: Fc((function (t, e) {
        return Uc({}, mS, t, e)
      }))
    }), _S = Gc(fS, {
      Phone: Fc((function (t, e) {
        return Uc({}, ES, t, e)
      })), Address: Fc((function (t, e) {
        return Uc({}, yS, t, e)
      }))
    }), bS = Gc(fS, {
      HTTP: Fc((function (t, e) {
        return Uc({}, xS, t, e)
      }))
    }), xS = Gc(fS, {
      Get: Mc((function (t, e) {
        var r = hS(t);
        if (!r) return;
        return Uc({href: r}, TS, t, e)
      })), Post: void 0
    }), wS = Gc(fS, {
      DCP: Fc((function (t, e) {
        return Uc({}, bS, t, e)
      }))
    }), SS = Gc(fS, {
      Operation: function (t, e) {
        var r = t.getAttribute("name"), n = Uc({}, wS, t, e);
        if (!n) return;
        e[e.length - 1][r] = n
      }
    }), ES = Gc(fS, {Voice: Fc(U_), Facsimile: Fc(U_)}), TS = Gc(fS, {
      Constraint: Mc((function (t, e) {
        var r = t.getAttribute("name");
        if (!r) return;
        return Uc({name: r}, vS, t, e)
      }))
    }), CS = Gc(fS, {
      IndividualName: Fc(U_), PositionName: Fc(U_), ContactInfo: Fc((function (t, e) {
        return Uc({}, _S, t, e)
      }))
    }), OS = Gc(fS, {
      Abstract: Fc(U_),
      AccessConstraints: Fc(U_),
      Fees: Fc(U_),
      Title: Fc(U_),
      ServiceTypeVersion: Fc(U_),
      ServiceType: Fc(U_)
    }), PS = Gc(fS, {
      ProviderName: Fc(U_), ProviderSite: Fc(hS), ServiceContact: Fc((function (t, e) {
        return Uc({}, CS, t, e)
      }))
    });
    var RS = gS, IS = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }();

    function LS(t, e, r) {
      var n, i = r || 1e5, o = new Array(e);
      for (n = 0; n < e; ++n) o[n] = 0;
      for (var a = 0, s = t.length; a < s;) for (n = 0; n < e; ++n, ++a) {
        var l = t[a], u = l - o[n];
        o[n] = l, t[a] = u
      }
      return FS(t, i)
    }

    function MS(t, e, r) {
      var n, i = r || 1e5, o = new Array(e);
      for (n = 0; n < e; ++n) o[n] = 0;
      for (var a = AS(t, i), s = 0, l = a.length; s < l;) for (n = 0; n < e; ++n, ++s) o[n] += a[s], a[s] = o[n];
      return a
    }

    function FS(t, e) {
      for (var r = e || 1e5, n = 0, i = t.length; n < i; ++n) t[n] = Math.round(t[n] * r);
      return kS(t)
    }

    function AS(t, e) {
      for (var r = e || 1e5, n = jS(t), i = 0, o = n.length; i < o; ++i) n[i] /= r;
      return n
    }

    function kS(t) {
      for (var e = 0, r = t.length; e < r; ++e) {
        var n = t[e];
        t[e] = n < 0 ? ~(n << 1) : n << 1
      }
      return NS(t)
    }

    function jS(t) {
      for (var e = DS(t), r = 0, n = e.length; r < n; ++r) {
        var i = e[r];
        e[r] = 1 & i ? ~(i >> 1) : i >> 1
      }
      return e
    }

    function NS(t) {
      for (var e = "", r = 0, n = t.length; r < n; ++r) e += GS(t[r]);
      return e
    }

    function DS(t) {
      for (var e = [], r = 0, n = 0, i = 0, o = t.length; i < o; ++i) {
        var a = t.charCodeAt(i) - 63;
        r |= (31 & a) << n, a < 32 ? (e.push(r), r = 0, n = 0) : n += 5
      }
      return e
    }

    function GS(t) {
      for (var e, r = ""; t >= 32;) e = 63 + (32 | 31 & t), r += String.fromCharCode(e), t >>= 5;
      return e = t + 63, r += String.fromCharCode(e)
    }

    var zS = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.dataProjection = Gr("EPSG:4326"), r.factor_ = n.factor ? n.factor : 1e5, r.geometryLayout_ = n.geometryLayout ? n.geometryLayout : yt, r
      }

      return IS(e, t), e.prototype.readFeatureFromText = function (t, e) {
        var r = this.readGeometryFromText(t, e);
        return new gt(r)
      }, e.prototype.readFeaturesFromText = function (t, e) {
        return [this.readFeatureFromText(t, e)]
      }, e.prototype.readGeometryFromText = function (t, e) {
        var r = yn(this.geometryLayout_), n = MS(t, r, this.factor_);
        v_(n, 0, n.length, r, n);
        var i = Nn(n, 0, n.length, r);
        return Wy(new Py(i, this.geometryLayout_), !1, this.adaptOptions(e))
      }, e.prototype.writeFeatureText = function (t, e) {
        var r = t.getGeometry();
        return r ? this.writeGeometryText(r, e) : (pt(!1, 40), "")
      }, e.prototype.writeFeaturesText = function (t, e) {
        return this.writeFeatureText(t[0], e)
      }, e.prototype.writeGeometryText = function (t, e) {
        var r = (t = Wy(t, !0, this.adaptOptions(e))).getFlatCoordinates(), n = t.getStride();
        return v_(r, 0, r.length, n, r), LS(r, n, this.factor_)
      }, e
    }(Jb), US = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), BS = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.layerName_ = n.layerName, r.layers_ = n.layers ? n.layers : null, r.dataProjection = Gr(n.dataProjection ? n.dataProjection : "EPSG:4326"), r
      }

      return US(e, t), e.prototype.readFeaturesFromObject = function (t, e) {
        if ("Topology" == t.type) {
          var r = t, n = void 0, i = null, o = null;
          r.transform && (i = (n = r.transform).scale, o = n.translate);
          var a = r.arcs;
          n && function (t, e, r) {
            for (var n = 0, i = t.length; n < i; ++n) XS(t[n], e, r)
          }(a, i, o);
          var s = [], l = r.objects, u = this.layerName_, c = void 0;
          for (var h in l) this.layers_ && -1 == this.layers_.indexOf(h) || ("GeometryCollection" === l[h].type ? (c = l[h], s.push.apply(s, WS(c, a, i, o, u, h, e))) : (c = l[h], s.push(qS(c, a, i, o, u, h, e))));
          return s
        }
        return []
      }, e.prototype.readProjectionFromObject = function (t) {
        return this.dataProjection
      }, e
    }(qm), VS = {
      Point: function (t, e, r) {
        var n = t.coordinates;
        e && r && ZS(n, e, r);
        return new qn(n)
      }, LineString: function (t, e) {
        var r = YS(t.arcs, e);
        return new Py(r)
      }, Polygon: function (t, e) {
        for (var r = [], n = 0, i = t.arcs.length; n < i; ++n) r[n] = YS(t.arcs[n], e);
        return new fi(r)
      }, MultiPoint: function (t, e, r) {
        var n = t.coordinates;
        if (e && r) for (var i = 0, o = n.length; i < o; ++i) ZS(n[i], e, r);
        return new Hy(n)
      }, MultiLineString: function (t, e) {
        for (var r = [], n = 0, i = t.arcs.length; n < i; ++n) r[n] = YS(t.arcs[n], e);
        return new Zy(r)
      }, MultiPolygon: function (t, e) {
        for (var r = [], n = 0, i = t.arcs.length; n < i; ++n) {
          for (var o = t.arcs[n], a = [], s = 0, l = o.length; s < l; ++s) a[s] = YS(o[s], e);
          r[n] = a
        }
        return new Jy(r)
      }
    };

    function YS(t, e) {
      for (var r, n, i = [], o = 0, a = t.length; o < a; ++o) r = t[o], o > 0 && i.pop(), n = r >= 0 ? e[r] : e[~r].slice().reverse(), i.push.apply(i, n);
      for (var s = 0, l = i.length; s < l; ++s) i[s] = i[s].slice();
      return i
    }

    function WS(t, e, r, n, i, o, a) {
      for (var s = t.geometries, l = [], u = 0, c = s.length; u < c; ++u) l[u] = qS(s[u], e, r, n, i, o, a);
      return l
    }

    function qS(t, e, r, n, i, o, a) {
      var s, l = t.type, u = VS[l];
      s = "Point" === l || "MultiPoint" === l ? u(t, r, n) : u(t, e);
      var c = new gt;
      c.setGeometry(Wy(s, !1, a)), void 0 !== t.id && c.setId(t.id);
      var h = t.properties;
      return i && (h || (h = {}), h[i] = o), h && c.setProperties(h, !0), c
    }

    function XS(t, e, r) {
      for (var n = 0, i = 0, o = 0, a = t.length; o < a; ++o) {
        var s = t[o];
        n += s[0], i += s[1], s[0] = n, s[1] = i, ZS(s, e, r)
      }
    }

    function ZS(t, e, r) {
      t[0] = t[0] * e[0] + r[0], t[1] = t[1] * e[1] + r[1]
    }

    var KS = BS, HS = function () {
      function t(t) {
        this.tagName_ = t
      }

      return t.prototype.getTagName = function () {
        return this.tagName_
      }, t
    }(), $S = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), JS = function (t) {
      function e(e, r) {
        var n = t.call(this, e) || this;
        return n.conditions = r, pt(n.conditions.length >= 2, 57), n
      }

      return $S(e, t), e
    }(HS), QS = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), tE = function (t) {
      function e(e) {
        return t.call(this, "And", Array.prototype.slice.call(arguments)) || this
      }

      return QS(e, t), e
    }(JS), eE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), rE = function (t) {
      function e(e, r, n) {
        var i = t.call(this, "BBOX") || this;
        if (i.geometryName = e, i.extent = r, 4 !== r.length) throw new Error("Expected an extent with four values ([minX, minY, maxX, maxY])");
        return i.srsName = n, i
      }

      return eE(e, t), e
    }(HS), nE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), iE = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e) || this;
        return o.geometryName = r || "the_geom", o.geometry = n, o.srsName = i, o
      }

      return nE(e, t), e
    }(HS), oE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), aE = function (t) {
      function e(e, r, n) {
        return t.call(this, "Contains", e, r, n) || this
      }

      return oE(e, t), e
    }(iE), sE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), lE = function (t) {
      function e(e, r, n, i, o) {
        var a = t.call(this, "DWithin", e, r, o) || this;
        return a.distance = n, a.unit = i, a
      }

      return sE(e, t), e
    }(iE), uE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), cE = function (t) {
      function e(e, r, n) {
        return t.call(this, "Disjoint", e, r, n) || this
      }

      return uE(e, t), e
    }(iE), hE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), pE = function (t) {
      function e(e, r) {
        var n = t.call(this, e) || this;
        return n.propertyName = r, n
      }

      return hE(e, t), e
    }(HS), fE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), dE = function (t) {
      function e(e, r, n) {
        var i = t.call(this, "During", e) || this;
        return i.begin = r, i.end = n, i
      }

      return fE(e, t), e
    }(pE), gE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), yE = function (t) {
      function e(e, r, n, i) {
        var o = t.call(this, e, r) || this;
        return o.expression = n, o.matchCase = i, o
      }

      return gE(e, t), e
    }(pE), mE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), vE = function (t) {
      function e(e, r, n) {
        return t.call(this, "PropertyIsEqualTo", e, r, n) || this
      }

      return mE(e, t), e
    }(yE), _E = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), bE = function (t) {
      function e(e, r) {
        return t.call(this, "PropertyIsGreaterThan", e, r) || this
      }

      return _E(e, t), e
    }(yE), xE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), wE = function (t) {
      function e(e, r) {
        return t.call(this, "PropertyIsGreaterThanOrEqualTo", e, r) || this
      }

      return xE(e, t), e
    }(yE), SE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), EE = function (t) {
      function e(e, r, n) {
        return t.call(this, "Intersects", e, r, n) || this
      }

      return SE(e, t), e
    }(iE), TE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), CE = function (t) {
      function e(e, r, n) {
        var i = t.call(this, "PropertyIsBetween", e) || this;
        return i.lowerBoundary = r, i.upperBoundary = n, i
      }

      return TE(e, t), e
    }(pE), OE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), PE = function (t) {
      function e(e, r, n, i, o, a) {
        var s = t.call(this, "PropertyIsLike", e) || this;
        return s.pattern = r, s.wildCard = void 0 !== n ? n : "*", s.singleChar = void 0 !== i ? i : ".", s.escapeChar = void 0 !== o ? o : "!", s.matchCase = a, s
      }

      return OE(e, t), e
    }(pE), RE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), IE = function (t) {
      function e(e) {
        return t.call(this, "PropertyIsNull", e) || this
      }

      return RE(e, t), e
    }(pE), LE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), ME = function (t) {
      function e(e, r) {
        return t.call(this, "PropertyIsLessThan", e, r) || this
      }

      return LE(e, t), e
    }(yE), FE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), AE = function (t) {
      function e(e, r) {
        return t.call(this, "PropertyIsLessThanOrEqualTo", e, r) || this
      }

      return FE(e, t), e
    }(yE), kE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), jE = function (t) {
      function e(e) {
        var r = t.call(this, "Not") || this;
        return r.condition = e, r
      }

      return kE(e, t), e
    }(HS), NE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), DE = function (t) {
      function e(e, r, n) {
        return t.call(this, "PropertyIsNotEqualTo", e, r, n) || this
      }

      return NE(e, t), e
    }(yE), GE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), zE = function (t) {
      function e(e) {
        return t.call(this, "Or", Array.prototype.slice.call(arguments)) || this
      }

      return GE(e, t), e
    }(JS), UE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), BE = function (t) {
      function e(e) {
        var r = t.call(this, "ResourceId") || this;
        return r.rid = e, r
      }

      return UE(e, t), e
    }(HS), VE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), YE = function (t) {
      function e(e, r, n) {
        return t.call(this, "Within", e, r, n) || this
      }

      return VE(e, t), e
    }(iE);

    function WE(t) {
      var e = [null].concat(Array.prototype.slice.call(arguments));
      return new (Function.prototype.bind.apply(tE, e))
    }

    function qE(t, e, r) {
      return new rE(t, e, r)
    }

    var XE = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), ZE = {
      "http://www.opengis.net/gml": {boundedBy: Fc(F_.prototype.readGeometryElement, "bounds")},
      "http://www.opengis.net/wfs/2.0": {member: Ic(F_.prototype.readFeaturesInternal)}
    }, KE = {
      "http://www.opengis.net/wfs": {totalInserted: Fc(G_), totalUpdated: Fc(G_), totalDeleted: Fc(G_)},
      "http://www.opengis.net/wfs/2.0": {totalInserted: Fc(G_), totalUpdated: Fc(G_), totalDeleted: Fc(G_)}
    }, HE = {
      "http://www.opengis.net/wfs": {
        TransactionSummary: Fc(sT, "transactionSummary"),
        InsertResults: Fc(hT, "insertIds")
      },
      "http://www.opengis.net/wfs/2.0": {
        TransactionSummary: Fc(sT, "transactionSummary"),
        InsertResults: Fc(hT, "insertIds")
      }
    }, $E = {
      "http://www.opengis.net/wfs": {PropertyName: Ac(X_)},
      "http://www.opengis.net/wfs/2.0": {PropertyName: Ac(X_)}
    }, JE = {
      "http://www.opengis.net/wfs": {
        Insert: Ac(pT),
        Update: Ac(yT),
        Delete: Ac(gT),
        Property: Ac(mT),
        Native: Ac(vT)
      },
      "http://www.opengis.net/wfs/2.0": {
        Insert: Ac(pT),
        Update: Ac(yT),
        Delete: Ac(gT),
        Property: Ac(mT),
        Native: Ac(vT)
      }
    }, QE = "http://www.w3.org/2000/xmlns/", tT = {
      "2.0.0": "http://www.opengis.net/ogc/1.1",
      "1.1.0": "http://www.opengis.net/ogc",
      "1.0.0": "http://www.opengis.net/ogc"
    }, eT = {
      "2.0.0": "http://www.opengis.net/wfs/2.0",
      "1.1.0": "http://www.opengis.net/wfs",
      "1.0.0": "http://www.opengis.net/wfs"
    }, rT = {
      "2.0.0": "http://www.opengis.net/fes/2.0",
      "1.1.0": "http://www.opengis.net/fes",
      "1.0.0": "http://www.opengis.net/fes"
    }, nT = {
      "2.0.0": "http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd",
      "1.1.0": "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd",
      "1.0.0": "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"
    }, iT = {"2.0.0": ab, "1.1.0": eb, "1.0.0": $_}, oT = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.version_ = n.version ? n.version : "1.1.0", r.featureType_ = n.featureType, r.featureNS_ = n.featureNS, r.gmlFormat_ = n.gmlFormat ? n.gmlFormat : new iT[r.version_], r.schemaLocation_ = n.schemaLocation ? n.schemaLocation : nT[r.version_], r
      }

      return XE(e, t), e.prototype.getFeatureType = function () {
        return this.featureType_
      }, e.prototype.setFeatureType = function (t) {
        this.featureType_ = t
      }, e.prototype.readFeaturesFromNode = function (t, e) {
        var r = {node: t};
        O(r, {featureType: this.featureType_, featureNS: this.featureNS_}), O(r, this.getReadOptions(t, e || {}));
        var n = [r],
          i = Uc([], "2.0.0" === this.version_ ? ZE : this.gmlFormat_.FEATURE_COLLECTION_PARSERS, t, n, this.gmlFormat_);
        return i || (i = []), i
      }, e.prototype.readTransactionResponse = function (t) {
        if (t) {
          if ("string" == typeof t) {
            var e = Pc(t);
            return this.readTransactionResponseFromDocument(e)
          }
          return Cc(t) ? this.readTransactionResponseFromDocument(t) : this.readTransactionResponseFromNode(t)
        }
      }, e.prototype.readFeatureCollectionMetadata = function (t) {
        if (t) {
          if ("string" == typeof t) {
            var e = Pc(t);
            return this.readFeatureCollectionMetadataFromDocument(e)
          }
          return Cc(t) ? this.readFeatureCollectionMetadataFromDocument(t) : this.readFeatureCollectionMetadataFromNode(t)
        }
      }, e.prototype.readFeatureCollectionMetadataFromDocument = function (t) {
        for (var e = t.firstChild; e; e = e.nextSibling) if (e.nodeType == Node.ELEMENT_NODE) return this.readFeatureCollectionMetadataFromNode(e)
      }, e.prototype.readFeatureCollectionMetadataFromNode = function (t) {
        var e = {}, r = z_(t.getAttribute("numberOfFeatures"));
        return e.numberOfFeatures = r, Uc(e, ZE, t, [], this.gmlFormat_)
      }, e.prototype.readTransactionResponseFromDocument = function (t) {
        for (var e = t.firstChild; e; e = e.nextSibling) if (e.nodeType == Node.ELEMENT_NODE) return this.readTransactionResponseFromNode(e)
      }, e.prototype.readTransactionResponseFromNode = function (t) {
        return Uc({}, HE, t, [])
      }, e.prototype.writeGetFeature = function (t) {
        var e = this, r = Sc(eT[this.version_], "GetFeature");
        r.setAttribute("service", "WFS"), r.setAttribute("version", this.version_), t.handle && r.setAttribute("handle", t.handle), t.outputFormat && r.setAttribute("outputFormat", t.outputFormat), void 0 !== t.maxFeatures && r.setAttribute("maxFeatures", String(t.maxFeatures)), t.resultType && r.setAttribute("resultType", t.resultType), void 0 !== t.startIndex && r.setAttribute("startIndex", String(t.startIndex)), void 0 !== t.count && r.setAttribute("count", String(t.count)), void 0 !== t.viewParams && r.setAttribute("viewParams", t.viewParams), r.setAttributeNS(wc, "xsi:schemaLocation", this.schemaLocation_);
        var n = {node: r};
        if (O(n, {
          version: this.version_,
          srsName: t.srsName,
          featureNS: t.featureNS ? t.featureNS : this.featureNS_,
          featurePrefix: t.featurePrefix,
          propertyNames: t.propertyNames ? t.propertyNames : []
        }), pt(Array.isArray(t.featureTypes), 11), "string" == typeof t.featureTypes[0]) {
          var i = t.filter;
          t.bbox && (pt(t.geometryName, 12), i = this.combineBboxAndFilter(t.geometryName, t.bbox, t.srsName, i)), O(n, {
            geometryName: t.geometryName,
            filter: i
          }), jT(r, t.featureTypes, [n])
        } else t.featureTypes.forEach((function (i) {
          var o = e.combineBboxAndFilter(i.geometryName, i.bbox, t.srsName, t.filter);
          O(n, {geometryName: i.geometryName, filter: o}), jT(r, [i.name], [n])
        }));
        return r
      }, e.prototype.combineBboxAndFilter = function (t, e, r, n) {
        var i = qE(t, e, r);
        return n ? WE(n, i) : i
      }, e.prototype.writeTransaction = function (t, e, r, n) {
        var i, o = [], a = n.version ? n.version : this.version_, s = Sc(eT[a], "Transaction");
        s.setAttribute("service", "WFS"), s.setAttribute("version", a), n && (i = n.gmlOptions ? n.gmlOptions : {}, n.handle && s.setAttribute("handle", n.handle)), s.setAttributeNS(wc, "xsi:schemaLocation", nT[a]);
        var l = function (t, e, r, n) {
          var i, o = n.featurePrefix ? n.featurePrefix : "feature";
          "1.0.0" === r ? i = 2 : "1.1.0" === r ? i = 3 : "2.0.0" === r && (i = 3.2);
          return O({node: t}, {
            version: r,
            featureNS: n.featureNS,
            featureType: n.featureType,
            featurePrefix: o,
            gmlVersion: i,
            hasZ: n.hasZ,
            srsName: n.srsName
          }, e)
        }(s, i, a, n);
        return t && aT("Insert", t, o, l), e && aT("Update", e, o, l), r && aT("Delete", r, o, l), n.nativeElements && aT("Native", n.nativeElements, o, l), s
      }, e.prototype.readProjectionFromDocument = function (t) {
        for (var e = t.firstChild; e; e = e.nextSibling) if (e.nodeType == Node.ELEMENT_NODE) return this.readProjectionFromNode(e);
        return null
      }, e.prototype.readProjectionFromNode = function (t) {
        if (t.firstElementChild && t.firstElementChild.firstElementChild) for (var e = (t = t.firstElementChild.firstElementChild).firstElementChild; e; e = e.nextElementSibling) if (0 !== e.childNodes.length && (1 !== e.childNodes.length || 3 !== e.firstChild.nodeType)) {
          var r = [{}];
          return this.gmlFormat_.readGeometryElement(e, r), Gr(r.pop().srsName)
        }
        return null
      }, e
    }(P_);

    function aT(t, e, r, n) {
      Vc(n, JE, jc(t), e, r)
    }

    function sT(t, e) {
      return Uc({}, KE, t, e)
    }

    var lT = {
      "http://www.opengis.net/ogc": {
        FeatureId: Ic((function (t, e) {
          return t.getAttribute("fid")
        }))
      }, "http://www.opengis.net/ogc/1.1": {
        FeatureId: Ic((function (t, e) {
          return t.getAttribute("fid")
        }))
      }
    };

    function uT(t, e) {
      zc(lT, t, e)
    }

    var cT = {"http://www.opengis.net/wfs": {Feature: uT}, "http://www.opengis.net/wfs/2.0": {Feature: uT}};

    function hT(t, e) {
      return Uc([], cT, t, e)
    }

    function pT(t, e, r) {
      var n = r[r.length - 1], i = n.featureType, o = n.featureNS, a = n.gmlVersion, s = Sc(o, i);
      t.appendChild(s), 2 === a ? $_.prototype.writeFeatureElement(s, e, r) : 3 === a ? eb.prototype.writeFeatureElement(s, e, r) : ab.prototype.writeFeatureElement(s, e, r)
    }

    function fT(t, e, r) {
      var n = r[r.length - 1].version, i = tT[n], o = Sc(i, "Filter"), a = Sc(i, "FeatureId");
      o.appendChild(a), a.setAttribute("fid", e), t.appendChild(o)
    }

    function dT(t, e) {
      var r = (t = t || "feature") + ":";
      return 0 === e.indexOf(r) ? e : r + e
    }

    function gT(t, e, r) {
      var n = r[r.length - 1];
      pt(void 0 !== e.getId(), 26);
      var i = n.featureType, o = n.featurePrefix, a = n.featureNS, s = dT(o, i);
      t.setAttribute("typeName", s), t.setAttributeNS(QE, "xmlns:" + o, a);
      var l = e.getId();
      void 0 !== l && fT(t, l, r)
    }

    function yT(t, e, r) {
      var n = r[r.length - 1];
      pt(void 0 !== e.getId(), 27);
      var i = n.version, o = n.featureType, a = n.featurePrefix, s = n.featureNS, l = dT(a, o), u = e.getGeometryName();
      t.setAttribute("typeName", l), t.setAttributeNS(QE, "xmlns:" + a, s);
      var c = e.getId();
      if (void 0 !== c) {
        for (var h = e.getKeys(), p = [], f = 0, d = h.length; f < d; f++) {
          var g = e.get(h[f]);
          if (void 0 !== g) {
            var y = h[f];
            g && "function" == typeof g.getSimplifiedGeometry && (y = u), p.push({name: y, value: g})
          }
        }
        Vc({
          version: i,
          gmlVersion: n.gmlVersion,
          node: t,
          hasZ: n.hasZ,
          srsName: n.srsName
        }, JE, jc("Property"), p, r), fT(t, c, r)
      }
    }

    function mT(t, e, r) {
      var n = r[r.length - 1], i = n.version, o = eT[i], a = Sc(o, "Name"), s = n.gmlVersion;
      if (t.appendChild(a), X_(a, e.name), void 0 !== e.value && null !== e.value) {
        var l = Sc(o, "Value");
        t.appendChild(l), e.value && "function" == typeof e.value.getSimplifiedGeometry ? 2 === s ? $_.prototype.writeGeometryElement(l, e.value, r) : 3 === s ? eb.prototype.writeGeometryElement(l, e.value, r) : ab.prototype.writeGeometryElement(l, e.value, r) : X_(l, e.value)
      }
    }

    function vT(t, e, r) {
      e.vendorId && t.setAttribute("vendorId", e.vendorId), void 0 !== e.safeToIgnore && t.setAttribute("safeToIgnore", String(e.safeToIgnore)), void 0 !== e.value && X_(t, e.value)
    }

    var _T = {
      "http://www.opengis.net/wfs": {Query: Ac(bT)},
      "http://www.opengis.net/wfs/2.0": {Query: Ac(bT)},
      "http://www.opengis.net/ogc": {
        During: Ac(TT),
        And: Ac(CT),
        Or: Ac(CT),
        Not: Ac(OT),
        BBOX: Ac(wT),
        Contains: Ac(ST),
        Intersects: Ac(ST),
        Within: Ac(ST),
        DWithin: Ac(ET),
        PropertyIsEqualTo: Ac(PT),
        PropertyIsNotEqualTo: Ac(PT),
        PropertyIsLessThan: Ac(PT),
        PropertyIsLessThanOrEqualTo: Ac(PT),
        PropertyIsGreaterThan: Ac(PT),
        PropertyIsGreaterThanOrEqualTo: Ac(PT),
        PropertyIsNull: Ac(RT),
        PropertyIsBetween: Ac(IT),
        PropertyIsLike: Ac(LT)
      },
      "http://www.opengis.net/fes/2.0": {
        During: Ac(TT),
        And: Ac(CT),
        Or: Ac(CT),
        Not: Ac(OT),
        BBOX: Ac(wT),
        Contains: Ac(ST),
        Disjoint: Ac(ST),
        Intersects: Ac(ST),
        ResourceId: Ac((function (t, e, r) {
          t.setAttribute("rid", e.rid)
        })),
        Within: Ac(ST),
        DWithin: Ac(ET),
        PropertyIsEqualTo: Ac(PT),
        PropertyIsNotEqualTo: Ac(PT),
        PropertyIsLessThan: Ac(PT),
        PropertyIsLessThanOrEqualTo: Ac(PT),
        PropertyIsGreaterThan: Ac(PT),
        PropertyIsGreaterThanOrEqualTo: Ac(PT),
        PropertyIsNull: Ac(RT),
        PropertyIsBetween: Ac(IT),
        PropertyIsLike: Ac(LT)
      }
    };

    function bT(t, e, r) {
      var n, i, o = r[r.length - 1], a = o.version, s = o.featurePrefix, l = o.featureNS, u = o.propertyNames,
        c = o.srsName;
      n = s ? dT(s, e) : e, i = "2.0.0" === a ? "typeNames" : "typeName", t.setAttribute(i, n), c && t.setAttribute("srsName", c), l && t.setAttributeNS(QE, "xmlns:" + s, l);
      var h = O({}, o);
      h.node = t, Vc(h, $E, jc("PropertyName"), u, r);
      var p = o.filter;
      if (p) {
        var f = Sc(NT(a), "Filter");
        t.appendChild(f), xT(f, p, r)
      }
    }

    function xT(t, e, r) {
      var n = r[r.length - 1], i = {node: t};
      O(i, {context: n}), Vc(i, _T, jc(e.getTagName()), [e], r)
    }

    function wT(t, e, r) {
      var n = r[r.length - 1], i = n.context.version;
      n.srsName = e.srsName;
      var o = iT[i];
      AT(i, t, e.geometryName), o.prototype.writeGeometryElement(t, e.extent, r)
    }

    function ST(t, e, r) {
      var n = r[r.length - 1], i = n.context.version;
      n.srsName = e.srsName;
      var o = iT[i];
      AT(i, t, e.geometryName), o.prototype.writeGeometryElement(t, e.geometry, r)
    }

    function ET(t, e, r) {
      var n = r[r.length - 1].context.version;
      ST(t, e, r);
      var i = Sc(NT(n), "Distance");
      X_(i, e.distance.toString()), "2.0.0" === n ? i.setAttribute("uom", e.unit) : i.setAttribute("units", e.unit), t.appendChild(i)
    }

    function TT(t, e, r) {
      var n = r[r.length - 1].context.version;
      MT(rT[n], "ValueReference", t, e.propertyName);
      var i = Sc(I_, "TimePeriod");
      t.appendChild(i);
      var o = Sc(I_, "begin");
      i.appendChild(o), kT(o, e.begin);
      var a = Sc(I_, "end");
      i.appendChild(a), kT(a, e.end)
    }

    function CT(t, e, r) {
      var n = r[r.length - 1].context, i = {node: t};
      O(i, {context: n});
      for (var o = e.conditions, a = 0, s = o.length; a < s; ++a) {
        var l = o[a];
        Vc(i, _T, jc(l.getTagName()), [l], r)
      }
    }

    function OT(t, e, r) {
      var n = r[r.length - 1].context, i = {node: t};
      O(i, {context: n});
      var o = e.condition;
      Vc(i, _T, jc(o.getTagName()), [o], r)
    }

    function PT(t, e, r) {
      var n = r[r.length - 1].context.version;
      void 0 !== e.matchCase && t.setAttribute("matchCase", e.matchCase.toString()), AT(n, t, e.propertyName), FT(n, t, "" + e.expression)
    }

    function RT(t, e, r) {
      AT(r[r.length - 1].context.version, t, e.propertyName)
    }

    function IT(t, e, r) {
      var n = r[r.length - 1].context.version, i = NT(n);
      AT(n, t, e.propertyName);
      var o = Sc(i, "LowerBoundary");
      t.appendChild(o), FT(n, o, "" + e.lowerBoundary);
      var a = Sc(i, "UpperBoundary");
      t.appendChild(a), FT(n, a, "" + e.upperBoundary)
    }

    function LT(t, e, r) {
      var n = r[r.length - 1].context.version;
      t.setAttribute("wildCard", e.wildCard), t.setAttribute("singleChar", e.singleChar), t.setAttribute("escapeChar", e.escapeChar), void 0 !== e.matchCase && t.setAttribute("matchCase", e.matchCase.toString()), AT(n, t, e.propertyName), FT(n, t, "" + e.pattern)
    }

    function MT(t, e, r, n) {
      var i = Sc(t, e);
      X_(i, n), r.appendChild(i)
    }

    function FT(t, e, r) {
      MT(NT(t), "Literal", e, r)
    }

    function AT(t, e, r) {
      "2.0.0" === t ? MT(rT[t], "ValueReference", e, r) : MT(tT[t], "PropertyName", e, r)
    }

    function kT(t, e) {
      var r = Sc(I_, "TimeInstant");
      t.appendChild(r);
      var n = Sc(I_, "timePosition");
      r.appendChild(n), X_(n, e)
    }

    function jT(t, e, r) {
      var n = r[r.length - 1], i = O({}, n);
      i.node = t, Vc(i, _T, jc("Query"), e, r)
    }

    function NT(t) {
      return "2.0.0" === t ? rT[t] : tT[t]
    }

    var DT = oT, GT = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), zT = {POINT: qn, LINESTRING: Py, POLYGON: fi, MULTIPOINT: Hy, MULTILINESTRING: Zy, MULTIPOLYGON: Jy}, UT = 1,
      BT = 2, VT = 3, YT = 4, WT = 5, qT = 6, XT = {};
    for (var ZT in bt) XT[ZT] = bt[ZT].toUpperCase();
    var KT = function () {
      function t(t) {
        this.wkt = t, this.index_ = -1
      }

      return t.prototype.isAlpha_ = function (t) {
        return t >= "a" && t <= "z" || t >= "A" && t <= "Z"
      }, t.prototype.isNumeric_ = function (t, e) {
        return t >= "0" && t <= "9" || "." == t && !(void 0 !== e && e)
      }, t.prototype.isWhiteSpace_ = function (t) {
        return " " == t || "\t" == t || "\r" == t || "\n" == t
      }, t.prototype.nextChar_ = function () {
        return this.wkt.charAt(++this.index_)
      }, t.prototype.nextToken = function () {
        var t, e = this.nextChar_(), r = this.index_, n = e;
        if ("(" == e) t = BT; else if ("," == e) t = WT; else if (")" == e) t = VT; else if (this.isNumeric_(e) || "-" == e) t = YT, n = this.readNumber_(); else if (this.isAlpha_(e)) t = UT, n = this.readText_(); else {
          if (this.isWhiteSpace_(e)) return this.nextToken();
          if ("" !== e) throw new Error("Unexpected character: " + e);
          t = qT
        }
        return {position: r, value: n, type: t}
      }, t.prototype.readNumber_ = function () {
        var t, e = this.index_, r = !1, n = !1;
        do {
          "." == t ? r = !0 : "e" != t && "E" != t || (n = !0), t = this.nextChar_()
        } while (this.isNumeric_(t, r) || !n && ("e" == t || "E" == t) || n && ("-" == t || "+" == t));
        return parseFloat(this.wkt.substring(e, this.index_--))
      }, t.prototype.readText_ = function () {
        var t, e = this.index_;
        do {
          t = this.nextChar_()
        } while (this.isAlpha_(t));
        return this.wkt.substring(e, this.index_--).toUpperCase()
      }, t
    }(), HT = function () {
      function t(t) {
        this.lexer_ = t, this.token_, this.layout_ = yt
      }

      return t.prototype.consume_ = function () {
        this.token_ = this.lexer_.nextToken()
      }, t.prototype.isTokenType = function (t) {
        return this.token_.type == t
      }, t.prototype.match = function (t) {
        var e = this.isTokenType(t);
        return e && this.consume_(), e
      }, t.prototype.parse = function () {
        return this.consume_(), this.parseGeometry_()
      }, t.prototype.parseGeometryLayout_ = function () {
        var t = yt, e = this.token_;
        if (this.isTokenType(UT)) {
          var r = e.value;
          "Z" === r ? t = mt : "M" === r ? t = vt : "ZM" === r && (t = _t), t !== yt && this.consume_()
        }
        return t
      }, t.prototype.parseGeometryCollectionText_ = function () {
        if (this.match(BT)) {
          var t = [];
          do {
            t.push(this.parseGeometry_())
          } while (this.match(WT));
          if (this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return [];
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parsePointText_ = function () {
        if (this.match(BT)) {
          var t = this.parsePoint_();
          if (this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return null;
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parseLineStringText_ = function () {
        if (this.match(BT)) {
          var t = this.parsePointList_();
          if (this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return [];
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parsePolygonText_ = function () {
        if (this.match(BT)) {
          var t = this.parseLineStringTextList_();
          if (this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return [];
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parseMultiPointText_ = function () {
        if (this.match(BT)) {
          var t = void 0;
          if (t = this.token_.type == BT ? this.parsePointTextList_() : this.parsePointList_(), this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return [];
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parseMultiLineStringText_ = function () {
        if (this.match(BT)) {
          var t = this.parseLineStringTextList_();
          if (this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return [];
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parseMultiPolygonText_ = function () {
        if (this.match(BT)) {
          var t = this.parsePolygonTextList_();
          if (this.match(VT)) return t
        } else if (this.isEmptyGeometry_()) return [];
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parsePoint_ = function () {
        for (var t = [], e = this.layout_.length, r = 0; r < e; ++r) {
          var n = this.token_;
          if (!this.match(YT)) break;
          t.push(n.value)
        }
        if (t.length == e) return t;
        throw new Error(this.formatErrorMessage_())
      }, t.prototype.parsePointList_ = function () {
        for (var t = [this.parsePoint_()]; this.match(WT);) t.push(this.parsePoint_());
        return t
      }, t.prototype.parsePointTextList_ = function () {
        for (var t = [this.parsePointText_()]; this.match(WT);) t.push(this.parsePointText_());
        return t
      }, t.prototype.parseLineStringTextList_ = function () {
        for (var t = [this.parseLineStringText_()]; this.match(WT);) t.push(this.parseLineStringText_());
        return t
      }, t.prototype.parsePolygonTextList_ = function () {
        for (var t = [this.parsePolygonText_()]; this.match(WT);) t.push(this.parsePolygonText_());
        return t
      }, t.prototype.isEmptyGeometry_ = function () {
        var t = this.isTokenType(UT) && "EMPTY" == this.token_.value;
        return t && this.consume_(), t
      }, t.prototype.formatErrorMessage_ = function () {
        return "Unexpected `" + this.token_.value + "` at position " + this.token_.position + " in `" + this.lexer_.wkt + "`"
      }, t.prototype.parseGeometry_ = function () {
        var t = this.token_;
        if (this.match(UT)) {
          var e = t.value;
          if (this.layout_ = this.parseGeometryLayout_(), "GEOMETRYCOLLECTION" == e) {
            var r = this.parseGeometryCollectionText_();
            return new Vm(r)
          }
          var n = zT[e];
          if (!n) throw new Error("Invalid geometry type: " + e);
          var i = void 0;
          switch (e) {
            case"POINT":
              i = this.parsePointText_();
              break;
            case"LINESTRING":
              i = this.parseLineStringText_();
              break;
            case"POLYGON":
              i = this.parsePolygonText_();
              break;
            case"MULTIPOINT":
              i = this.parseMultiPointText_();
              break;
            case"MULTILINESTRING":
              i = this.parseMultiLineStringText_();
              break;
            case"MULTIPOLYGON":
              i = this.parseMultiPolygonText_();
              break;
            default:
              throw new Error("Invalid geometry type: " + e)
          }
          return i || (i = n === zT.POINT ? [NaN, NaN] : []), new n(i, this.layout_)
        }
        throw new Error(this.formatErrorMessage_())
      }, t
    }(), $T = function (t) {
      function e(e) {
        var r = t.call(this) || this, n = e || {};
        return r.splitCollection_ = void 0 !== n.splitCollection && n.splitCollection, r
      }

      return GT(e, t), e.prototype.parse_ = function (t) {
        var e = new KT(t);
        return new HT(e).parse()
      }, e.prototype.readFeatureFromText = function (t, e) {
        var r = this.readGeometryFromText(t, e);
        if (r) {
          var n = new gt;
          return n.setGeometry(r), n
        }
        return null
      }, e.prototype.readFeaturesFromText = function (t, e) {
        for (var r = [], n = this.readGeometryFromText(t, e), i = [], o = 0, a = (r = this.splitCollection_ && n.getType() == bt.GEOMETRY_COLLECTION ? n.getGeometriesArray() : [n]).length; o < a; ++o) {
          var s = new gt;
          s.setGeometry(r[o]), i.push(s)
        }
        return i
      }, e.prototype.readGeometryFromText = function (t, e) {
        var r = this.parse_(t);
        return r ? Wy(r, !1, e) : null
      }, e.prototype.writeFeatureText = function (t, e) {
        var r = t.getGeometry();
        return r ? this.writeGeometryText(r, e) : ""
      }, e.prototype.writeFeaturesText = function (t, e) {
        if (1 == t.length) return this.writeFeatureText(t[0], e);
        for (var r = [], n = 0, i = t.length; n < i; ++n) r.push(t[n].getGeometry());
        var o = new Vm(r);
        return this.writeGeometryText(o, e)
      }, e.prototype.writeGeometryText = function (t, e) {
        return rC(Wy(t, !0, e))
      }, e
    }(Jb);

    function JT(t) {
      var e = t.getCoordinates();
      return 0 === e.length ? "" : e.join(" ")
    }

    function QT(t) {
      for (var e = t.getCoordinates(), r = [], n = 0, i = e.length; n < i; ++n) r.push(e[n].join(" "));
      return r.join(",")
    }

    function tC(t) {
      for (var e = [], r = t.getLinearRings(), n = 0, i = r.length; n < i; ++n) e.push("(" + QT(r[n]) + ")");
      return e.join(",")
    }

    var eC = {
      Point: JT, LineString: QT, Polygon: tC, MultiPoint: function (t) {
        for (var e = [], r = t.getPoints(), n = 0, i = r.length; n < i; ++n) e.push("(" + JT(r[n]) + ")");
        return e.join(",")
      }, MultiLineString: function (t) {
        for (var e = [], r = t.getLineStrings(), n = 0, i = r.length; n < i; ++n) e.push("(" + QT(r[n]) + ")");
        return e.join(",")
      }, MultiPolygon: function (t) {
        for (var e = [], r = t.getPolygons(), n = 0, i = r.length; n < i; ++n) e.push("(" + tC(r[n]) + ")");
        return e.join(",")
      }, GeometryCollection: function (t) {
        for (var e = [], r = t.getGeometries(), n = 0, i = r.length; n < i; ++n) e.push(rC(r[n]));
        return e.join(",")
      }
    };

    function rC(t) {
      var e = t.getType(), r = (0, eC[e])(t);
      if (e = e.toUpperCase(), "function" == typeof t.getFlatCoordinates) {
        var n = function (t) {
          var e = t.getLayout(), r = "";
          return e !== mt && e !== _t || (r += "Z"), e !== vt && e !== _t || (r += "M"), r
        }(t);
        n.length > 0 && (e += " " + n)
      }
      return 0 === r.length ? e + " EMPTY" : e + "(" + r + ")"
    }

    var nC = $T, iC = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), oC = [null, "http://www.opengis.net/wms"], aC = Gc(oC, {
      Service: Fc((function (t, e) {
        return Uc({}, uC, t, e)
      })), Capability: Fc((function (t, e) {
        return Uc({}, sC, t, e)
      }))
    }), sC = Gc(oC, {
      Request: Fc((function (t, e) {
        return Uc({}, mC, t, e)
      })), Exception: Fc((function (t, e) {
        return Uc([], fC, t, e)
      })), Layer: Fc((function (t, e) {
        var r = Uc({}, dC, t, e);
        if (void 0 === r.Layer) return Object.assign(r, EC(t, e));
        return r
      }))
    }), lC = function (t) {
      function e() {
        var e = t.call(this) || this;
        return e.version = void 0, e
      }

      return iC(e, t), e.prototype.readFromNode = function (t) {
        this.version = t.getAttribute("version").trim();
        var e = Uc({version: this.version}, aC, t, []);
        return e || null
      }, e
    }(cS), uC = Gc(oC, {
      Name: Fc(U_),
      Title: Fc(U_),
      Abstract: Fc(U_),
      KeywordList: Fc(PC),
      OnlineResource: Fc(hS),
      ContactInformation: Fc((function (t, e) {
        return Uc({}, cC, t, e)
      })),
      Fees: Fc(U_),
      AccessConstraints: Fc(U_),
      LayerLimit: Fc(G_),
      MaxWidth: Fc(G_),
      MaxHeight: Fc(G_)
    }), cC = Gc(oC, {
      ContactPersonPrimary: Fc((function (t, e) {
        return Uc({}, hC, t, e)
      })), ContactPosition: Fc(U_), ContactAddress: Fc((function (t, e) {
        return Uc({}, pC, t, e)
      })), ContactVoiceTelephone: Fc(U_), ContactFacsimileTelephone: Fc(U_), ContactElectronicMailAddress: Fc(U_)
    }), hC = Gc(oC, {ContactPerson: Fc(U_), ContactOrganization: Fc(U_)}), pC = Gc(oC, {
      AddressType: Fc(U_),
      Address: Fc(U_),
      City: Fc(U_),
      StateOrProvince: Fc(U_),
      PostCode: Fc(U_),
      Country: Fc(U_)
    }), fC = Gc(oC, {Format: Ic(U_)}), dC = Gc(oC, {
      Name: Fc(U_),
      Title: Fc(U_),
      Abstract: Fc(U_),
      KeywordList: Fc(PC),
      CRS: Mc(U_),
      EX_GeographicBoundingBox: Fc((function (t, e) {
        var r = Uc({}, yC, t, e);
        if (!r) return;
        var n = r.westBoundLongitude, i = r.southBoundLatitude, o = r.eastBoundLongitude, a = r.northBoundLatitude;
        if (void 0 === n || void 0 === i || void 0 === o || void 0 === a) return;
        return [n, i, o, a]
      })),
      BoundingBox: Mc((function (t, e) {
        var r = [D_(t.getAttribute("minx")), D_(t.getAttribute("miny")), D_(t.getAttribute("maxx")), D_(t.getAttribute("maxy"))],
          n = [D_(t.getAttribute("resx")), D_(t.getAttribute("resy"))];
        return {crs: t.getAttribute("CRS"), extent: r, res: n}
      })),
      Dimension: Mc((function (t, e) {
        return {
          name: t.getAttribute("name"),
          units: t.getAttribute("units"),
          unitSymbol: t.getAttribute("unitSymbol"),
          default: t.getAttribute("default"),
          multipleValues: k_(t.getAttribute("multipleValues")),
          nearestValue: k_(t.getAttribute("nearestValue")),
          current: k_(t.getAttribute("current")),
          values: U_(t)
        }
      })),
      Attribution: Fc((function (t, e) {
        return Uc({}, gC, t, e)
      })),
      AuthorityURL: Mc((function (t, e) {
        var r = TC(t, e);
        if (r) return r.name = t.getAttribute("name"), r;
        return
      })),
      Identifier: Mc(U_),
      MetadataURL: Mc((function (t, e) {
        var r = TC(t, e);
        if (r) return r.type = t.getAttribute("type"), r;
        return
      })),
      DataURL: Mc(TC),
      FeatureListURL: Mc(TC),
      Style: Mc((function (t, e) {
        return Uc({}, xC, t, e)
      })),
      MinScaleDenominator: Fc(N_),
      MaxScaleDenominator: Fc(N_),
      Layer: Mc(EC)
    }), gC = Gc(oC, {Title: Fc(U_), OnlineResource: Fc(hS), LogoURL: Fc(OC)}), yC = Gc(oC, {
      westBoundLongitude: Fc(N_),
      eastBoundLongitude: Fc(N_),
      southBoundLatitude: Fc(N_),
      northBoundLatitude: Fc(N_)
    }), mC = Gc(oC, {GetCapabilities: Fc(CC), GetMap: Fc(CC), GetFeatureInfo: Fc(CC)}), vC = Gc(oC, {
      Format: Mc(U_), DCPType: Mc((function (t, e) {
        return Uc({}, _C, t, e)
      }))
    }), _C = Gc(oC, {
      HTTP: Fc((function (t, e) {
        return Uc({}, bC, t, e)
      }))
    }), bC = Gc(oC, {Get: Fc(TC), Post: Fc(TC)}), xC = Gc(oC, {
      Name: Fc(U_),
      Title: Fc(U_),
      Abstract: Fc(U_),
      LegendURL: Mc(OC),
      StyleSheetURL: Fc(TC),
      StyleURL: Fc(TC)
    }), wC = Gc(oC, {Format: Fc(U_), OnlineResource: Fc(hS)}), SC = Gc(oC, {Keyword: Ic(U_)});

    function EC(t, e) {
      var r = e[e.length - 1], n = Uc({}, dC, t, e);
      if (n) {
        var i = k_(t.getAttribute("queryable"));
        void 0 === i && (i = r.queryable), n.queryable = void 0 !== i && i;
        var o = z_(t.getAttribute("cascaded"));
        void 0 === o && (o = r.cascaded), n.cascaded = o;
        var a = k_(t.getAttribute("opaque"));
        void 0 === a && (a = r.opaque), n.opaque = void 0 !== a && a;
        var s = k_(t.getAttribute("noSubsets"));
        void 0 === s && (s = r.noSubsets), n.noSubsets = void 0 !== s && s;
        var l = D_(t.getAttribute("fixedWidth"));
        l || (l = r.fixedWidth), n.fixedWidth = l;
        var u = D_(t.getAttribute("fixedHeight"));
        u || (u = r.fixedHeight), n.fixedHeight = u;
        ["Style", "CRS", "AuthorityURL"].forEach((function (t) {
          if (t in r) {
            var e = n[t] || [];
            n[t] = e.concat(r[t])
          }
        }));
        return ["EX_GeographicBoundingBox", "BoundingBox", "Dimension", "Attribution", "MinScaleDenominator", "MaxScaleDenominator"].forEach((function (t) {
          if (!(t in n)) {
            var e = r[t];
            n[t] = e
          }
        })), n
      }
    }

    function TC(t, e) {
      return Uc({}, wC, t, e)
    }

    function CC(t, e) {
      return Uc({}, vC, t, e)
    }

    function OC(t, e) {
      var r = TC(t, e);
      if (r) {
        var n = [z_(t.getAttribute("width")), z_(t.getAttribute("height"))];
        return r.size = n, r
      }
    }

    function PC(t, e) {
      return Uc([], SC, t, e)
    }

    var RC = lC, IC = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), LC = function (t) {
        function e(e) {
          var r = t.call(this) || this, n = e || {};
          return r.featureNS_ = "http://mapserver.gis.umn.edu/mapserver", r.gmlFormat_ = new $_, r.layers_ = n.layers ? n.layers : null, r
        }

        return IC(e, t), e.prototype.getLayers = function () {
          return this.layers_
        }, e.prototype.setLayers = function (t) {
          this.layers_ = t
        }, e.prototype.readFeatures_ = function (t, e) {
          t.setAttribute("namespaceURI", this.featureNS_);
          var r = t.localName, n = [];
          if (0 === t.childNodes.length) return n;
          if ("msGMLOutput" == r) for (var i = 0, o = t.childNodes.length; i < o; i++) {
            var a = t.childNodes[i];
            if (a.nodeType === Node.ELEMENT_NODE) {
              var s = a, l = e[0], u = s.localName.replace("_layer", "");
              if (!this.layers_ || g(this.layers_, u)) {
                var c = u + "_feature";
                l.featureType = c, l.featureNS = this.featureNS_;
                var h = {};
                h[c] = Ic(this.gmlFormat_.readFeatureElement, this.gmlFormat_);
                var p = Gc([l.featureNS, null], h);
                s.setAttribute("namespaceURI", this.featureNS_);
                var f = Uc([], p, s, e, this.gmlFormat_);
                f && v(n, f)
              }
            }
          }
          if ("FeatureCollection" == r) {
            var d = Uc([], this.gmlFormat_.FEATURE_COLLECTION_PARSERS, t, [{}], this.gmlFormat_);
            d && (n = d)
          }
          return n
        }, e.prototype.readFeaturesFromNode = function (t, e) {
          var r = {};
          return e && O(r, this.getReadOptions(t, e)), this.readFeatures_(t, [r])
        }, e
      }(P_), MC = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), FC = [null, "http://www.opengis.net/wmts/1.0"], AC = [null, "http://www.opengis.net/ows/1.1"], kC = Gc(FC, {
        Contents: Fc((function (t, e) {
          return Uc({}, NC, t, e)
        }))
      }), jC = function (t) {
        function e() {
          var e = t.call(this) || this;
          return e.owsParser_ = new RS, e
        }

        return MC(e, t), e.prototype.readFromNode = function (t) {
          var e = t.getAttribute("version");
          e && (e = e.trim());
          var r = this.owsParser_.readFromNode(t);
          return r ? (r.version = e, (r = Uc(r, kC, t, [])) || null) : null
        }, e
      }(cS), NC = Gc(FC, {
        Layer: Mc((function (t, e) {
          return Uc({}, DC, t, e)
        })), TileMatrixSet: Mc((function (t, e) {
          return Uc({}, WC, t, e)
        }))
      }), DC = Gc(FC, {
        Style: Mc((function (t, e) {
          var r = Uc({}, GC, t, e);
          if (!r) return;
          var n = "true" === t.getAttribute("isDefault");
          return r.isDefault = n, r
        })), Format: Mc(U_), TileMatrixSetLink: Mc((function (t, e) {
          return Uc({}, zC, t, e)
        })), Dimension: Mc((function (t, e) {
          return Uc({}, VC, t, e)
        })), ResourceURL: Mc((function (t, e) {
          var r = t.getAttribute("format"), n = t.getAttribute("template"), i = t.getAttribute("resourceType"), o = {};
          r && (o.format = r);
          n && (o.template = n);
          i && (o.resourceType = i);
          return o
        }))
      }, Gc(AC, {
        Title: Fc(U_), Abstract: Fc(U_), WGS84BoundingBox: Fc((function (t, e) {
          var r = Uc([], YC, t, e);
          if (2 != r.length) return;
          return Kt(r)
        })), Identifier: Fc(U_)
      })), GC = Gc(FC, {
        LegendURL: Mc((function (t, e) {
          var r = {};
          return r.format = t.getAttribute("format"), r.href = hS(t), r
        }))
      }, Gc(AC, {Title: Fc(U_), Identifier: Fc(U_)})), zC = Gc(FC, {
        TileMatrixSet: Fc(U_), TileMatrixSetLimits: Fc((function (t, e) {
          return Uc([], UC, t, e)
        }))
      }), UC = Gc(FC, {
        TileMatrixLimits: Ic((function (t, e) {
          return Uc({}, BC, t, e)
        }))
      }),
      BC = Gc(FC, {TileMatrix: Fc(U_), MinTileRow: Fc(G_), MaxTileRow: Fc(G_), MinTileCol: Fc(G_), MaxTileCol: Fc(G_)}),
      VC = Gc(FC, {Default: Fc(U_), Value: Mc(U_)}, Gc(AC, {Identifier: Fc(U_)})),
      YC = Gc(AC, {LowerCorner: Ic(XC), UpperCorner: Ic(XC)}), WC = Gc(FC, {
        WellKnownScaleSet: Fc(U_), TileMatrix: Mc((function (t, e) {
          return Uc({}, qC, t, e)
        }))
      }, Gc(AC, {SupportedCRS: Fc(U_), Identifier: Fc(U_)})), qC = Gc(FC, {
        TopLeftCorner: Fc(XC),
        ScaleDenominator: Fc(N_),
        TileWidth: Fc(G_),
        TileHeight: Fc(G_),
        MatrixWidth: Fc(G_),
        MatrixHeight: Fc(G_)
      }, Gc(AC, {Identifier: Fc(U_)}));

    function XC(t, e) {
      var r = U_(t).split(/\s+/);
      if (r && 2 == r.length) {
        var n = +r[0], i = +r[1];
        if (!isNaN(n) && !isNaN(i)) return [n, i]
      }
    }

    var ZC = jC, KC = function () {
        var t = function (e, r) {
          return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
            t.__proto__ = e
          } || function (t, e) {
            for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
          })(e, r)
        };
        return function (e, r) {
          function n() {
            this.constructor = e
          }

          t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
        }
      }(), HC = ["fullscreenchange", "webkitfullscreenchange", "MSFullscreenChange"], $C = "enterfullscreen",
      JC = "leavefullscreen";

    function QC() {
      var t = document.body;
      return !!(t.webkitRequestFullscreen || t.msRequestFullscreen && document.msFullscreenEnabled || t.requestFullscreen && document.fullscreenEnabled)
    }

    function tO() {
      return !!(document.webkitIsFullScreen || document.msFullscreenElement || document.fullscreenElement)
    }

    function eO(t) {
      t.requestFullscreen ? t.requestFullscreen() : t.msRequestFullscreen ? t.msRequestFullscreen() : t.webkitRequestFullscreen && t.webkitRequestFullscreen()
    }

    var rO = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, {
          element: document.createElement("div"),
          target: n.target
        }) || this).cssClassName_ = void 0 !== n.className ? n.className : "ol-full-screen", r.activeClassName_ = void 0 !== n.activeClassName ? n.activeClassName.split(" ") : [r.cssClassName_ + "-true"], r.inactiveClassName_ = void 0 !== n.inactiveClassName ? n.inactiveClassName.split(" ") : [r.cssClassName_ + "-false"];
        var i = void 0 !== n.label ? n.label : "⤢";
        r.labelNode_ = "string" == typeof i ? document.createTextNode(i) : i;
        var o = void 0 !== n.labelActive ? n.labelActive : "×";
        r.labelActiveNode_ = "string" == typeof o ? document.createTextNode(o) : o, r.button_ = document.createElement("button");
        var a = n.tipLabel ? n.tipLabel : "Toggle full-screen";
        r.setClassName_(r.button_, tO()), r.button_.setAttribute("type", "button"), r.button_.title = a, r.button_.appendChild(r.labelNode_), r.button_.addEventListener(N, r.handleClick_.bind(r), !1);
        var s = r.cssClassName_ + " ol-unselectable ol-control " + (QC() ? "" : "ol-unsupported"), l = r.element;
        return l.className = s, l.appendChild(r.button_), r.keys_ = void 0 !== n.keys && n.keys, r.source_ = n.source, r
      }

      return KC(e, t), e.prototype.handleClick_ = function (t) {
        t.preventDefault(), this.handleFullScreen_()
      }, e.prototype.handleFullScreen_ = function () {
        if (QC()) {
          var t = this.getMap();
          if (t) if (tO()) document.exitFullscreen ? document.exitFullscreen() : document.msExitFullscreen ? document.msExitFullscreen() : document.webkitExitFullscreen && document.webkitExitFullscreen(); else {
            var e = void 0;
            e = this.source_ ? "string" == typeof this.source_ ? document.getElementById(this.source_) : this.source_ : t.getTargetElement(), this.keys_ ? function (t) {
              t.webkitRequestFullscreen ? t.webkitRequestFullscreen() : eO(t)
            }(e) : eO(e)
          }
        }
      }, e.prototype.handleFullScreenChange_ = function () {
        var t = this.getMap();
        tO() ? (this.setClassName_(this.button_, !0), po(this.labelActiveNode_, this.labelNode_), this.dispatchEvent($C)) : (this.setClassName_(this.button_, !1), po(this.labelNode_, this.labelActiveNode_), this.dispatchEvent(JC)), t && t.updateSize()
      }, e.prototype.setClassName_ = function (t, e) {
        var r, n, i, o = this.activeClassName_, a = this.inactiveClassName_, s = e ? o : a;
        (r = t.classList).remove.apply(r, o), (n = t.classList).remove.apply(n, a), (i = t.classList).add.apply(i, s)
      }, e.prototype.setMap = function (e) {
        if (t.prototype.setMap.call(this, e), e) for (var r = 0, n = HC.length; r < n; ++r) this.listenerKeys.push(Z(document, HC[r], this.handleFullScreenChange_, this))
      }, e
    }(As), nO = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), iO = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = document.createElement("div");
        return i.className = void 0 !== n.className ? n.className : "ol-mouse-position", (r = t.call(this, {
          element: i,
          render: n.render,
          target: n.target
        }) || this).addEventListener(it("projection"), r.handleProjectionChanged_), n.coordinateFormat && r.setCoordinateFormat(n.coordinateFormat), n.projection && r.setProjection(n.projection), r.undefinedHTML_ = void 0 !== n.undefinedHTML ? n.undefinedHTML : "&#160;", r.renderOnMouseOut_ = !!r.undefinedHTML_, r.renderedHTML_ = i.innerHTML, r.mapProjection_ = null, r.transform_ = null, r
      }

      return nO(e, t), e.prototype.handleProjectionChanged_ = function () {
        this.transform_ = null
      }, e.prototype.getCoordinateFormat = function () {
        return this.get("coordinateFormat")
      }, e.prototype.getProjection = function () {
        return this.get("projection")
      }, e.prototype.handleMouseMove = function (t) {
        var e = this.getMap();
        this.updateHTML_(e.getEventPixel(t))
      }, e.prototype.handleMouseOut = function (t) {
        this.updateHTML_(null)
      }, e.prototype.setMap = function (e) {
        if (t.prototype.setMap.call(this, e), e) {
          var r = e.getViewport();
          this.listenerKeys.push(Z(r, za, this.handleMouseMove, this)), this.renderOnMouseOut_ && this.listenerKeys.push(Z(r, Va, this.handleMouseOut, this))
        }
      }, e.prototype.setCoordinateFormat = function (t) {
        this.set("coordinateFormat", t)
      }, e.prototype.setProjection = function (t) {
        this.set("projection", Gr(t))
      }, e.prototype.updateHTML_ = function (t) {
        var e = this.undefinedHTML_;
        if (t && this.mapProjection_) {
          if (!this.transform_) {
            var r = this.getProjection();
            this.transform_ = r ? Zr(this.mapProjection_, r) : jr
          }
          var n = this.getMap().getCoordinateFromPixelInternal(t);
          if (n) {
            var i = tn();
            i && (this.transform_ = Zr(this.mapProjection_, i)), this.transform_(n, n);
            var o = this.getCoordinateFormat();
            e = o ? o(n) : n.toString()
          }
        }
        this.renderedHTML_ && e === this.renderedHTML_ || (this.element.innerHTML = e, this.renderedHTML_ = e)
      }, e.prototype.render = function (t) {
        var e = t.frameState;
        e ? this.mapProjection_ != e.viewState.projection && (this.mapProjection_ = e.viewState.projection, this.transform_ = null) : this.mapProjection_ = null
      }, e
    }(As), oO = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), aO = function (t) {
      function e() {
        return null !== t && t.apply(this, arguments) || this
      }

      return oO(e, t), e.prototype.createRenderer = function () {
        return new La(this)
      }, e
    }(Ms), sO = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, {
          element: document.createElement("div"),
          render: n.render,
          target: n.target
        }) || this).boundHandleRotationChanged_ = r.handleRotationChanged_.bind(r), r.collapsed_ = void 0 === n.collapsed || n.collapsed, r.collapsible_ = void 0 === n.collapsible || n.collapsible, r.collapsible_ || (r.collapsed_ = !1), r.rotateWithView_ = void 0 !== n.rotateWithView && n.rotateWithView, r.viewExtent_ = void 0;
        var i = void 0 !== n.className ? n.className : "ol-overviewmap",
          o = void 0 !== n.tipLabel ? n.tipLabel : "Overview map",
          a = void 0 !== n.collapseLabel ? n.collapseLabel : "«";
        "string" == typeof a ? (r.collapseLabel_ = document.createElement("span"), r.collapseLabel_.textContent = a) : r.collapseLabel_ = a;
        var s = void 0 !== n.label ? n.label : "»";
        "string" == typeof s ? (r.label_ = document.createElement("span"), r.label_.textContent = s) : r.label_ = s;
        var l = r.collapsible_ && !r.collapsed_ ? r.collapseLabel_ : r.label_, u = document.createElement("button");
        u.setAttribute("type", "button"), u.title = o, u.appendChild(l), u.addEventListener(N, r.handleClick_.bind(r), !1), r.ovmapDiv_ = document.createElement("div"), r.ovmapDiv_.className = "ol-overviewmap-map", r.view_ = n.view, r.ovmap_ = new aO({view: n.view});
        var c = r.ovmap_;
        n.layers && n.layers.forEach((function (t) {
          c.addLayer(t)
        }));
        var h = document.createElement("div");
        h.className = "ol-overviewmap-box", h.style.boxSizing = "border-box", r.boxOverlay_ = new su({
          position: [0, 0],
          positioning: Hl,
          element: h
        }), r.ovmap_.addOverlay(r.boxOverlay_);
        var p = i + " ol-unselectable ol-control" + (r.collapsed_ && r.collapsible_ ? " ol-collapsed" : "") + (r.collapsible_ ? "" : " ol-uncollapsible"),
          f = r.element;
        f.className = p, f.appendChild(r.ovmapDiv_), f.appendChild(u);
        var d = r, g = r.boxOverlay_, y = r.boxOverlay_.getElement(), m = function (t) {
          var e, r = {clientX: (e = t).clientX, clientY: e.clientY}, n = c.getEventCoordinateInternal(r);
          g.setPosition(n)
        }, v = function (t) {
          var e = c.getEventCoordinateInternal(t);
          d.getMap().getView().setCenterInternal(e), window.removeEventListener("mousemove", m), window.removeEventListener("mouseup", v)
        };
        return y.addEventListener("mousedown", (function () {
          window.addEventListener("mousemove", m), window.addEventListener("mouseup", v)
        })), r
      }

      return oO(e, t), e.prototype.setMap = function (e) {
        var r = this.getMap();
        if (e !== r) {
          if (r) {
            var n = r.getView();
            n && this.unbindView_(n), this.ovmap_.setTarget(null)
          }
          if (t.prototype.setMap.call(this, e), e) {
            this.ovmap_.setTarget(this.ovmapDiv_), this.listenerKeys.push(Z(e, h, this.handleMapPropertyChange_, this));
            var i = e.getView();
            i && (this.bindView_(i), i.isDef() && (this.ovmap_.updateSize(), this.resetExtent_()))
          }
        }
      }, e.prototype.handleMapPropertyChange_ = function (t) {
        if (t.key === Ja) {
          var e = t.oldValue;
          e && this.unbindView_(e);
          var r = this.getMap().getView();
          this.bindView_(r)
        }
      }, e.prototype.bindView_ = function (t) {
        if (!this.view_) {
          var e = new Cs({projection: t.getProjection()});
          this.ovmap_.setView(e)
        }
        t.addEventListener(it(ss), this.boundHandleRotationChanged_), this.handleRotationChanged_()
      }, e.prototype.unbindView_ = function (t) {
        t.removeEventListener(it(ss), this.boundHandleRotationChanged_)
      }, e.prototype.handleRotationChanged_ = function () {
        this.rotateWithView_ && this.ovmap_.getView().setRotation(this.getMap().getView().getRotation())
      }, e.prototype.validateExtent_ = function () {
        var t = this.getMap(), e = this.ovmap_;
        if (t.isRendered() && e.isRendered()) {
          var r = t.getSize(), n = t.getView().calculateExtentInternal(r);
          if (!this.viewExtent_ || !ue(n, this.viewExtent_)) {
            this.viewExtent_ = n;
            var i = e.getSize(), o = e.getView().calculateExtentInternal(i),
              a = e.getPixelFromCoordinateInternal(Ce(n)), s = e.getPixelFromCoordinateInternal(be(n)),
              l = Math.abs(a[0] - s[0]), u = Math.abs(a[1] - s[1]), c = i[0], h = i[1];
            l < .1 * c || u < .1 * h || l > .75 * c || u > .75 * h ? this.resetExtent_() : te(o, n) || this.recenter_()
          }
        }
      }, e.prototype.resetExtent_ = function () {
        var t = this.getMap(), e = this.ovmap_, r = t.getSize(), n = t.getView().calculateExtentInternal(r),
          i = e.getView(), o = Math.log(7.5) / Math.LN2;
        Me(n, 1 / (.1 * Math.pow(2, o / 2))), i.fitInternal(gi(n))
      }, e.prototype.recenter_ = function () {
        var t = this.getMap(), e = this.ovmap_, r = t.getView();
        e.getView().setCenterInternal(r.getCenterInternal())
      }, e.prototype.updateBox_ = function () {
        var t = this.getMap(), e = this.ovmap_;
        if (t.isRendered() && e.isRendered()) {
          var r = t.getSize(), n = t.getView(), i = e.getView(), o = this.rotateWithView_ ? 0 : -n.getRotation(),
            a = this.boxOverlay_, s = this.boxOverlay_.getElement(), l = n.getCenterInternal(), u = n.getResolution(),
            c = i.getResolution(), h = r[0] * u / c, p = r[1] * u / c;
          if (a.setPosition(l), s) {
            s.style.width = h + "px", s.style.height = p + "px";
            var f = "rotate(" + o + "rad)";
            s.style.transform = f
          }
        }
      }, e.prototype.handleClick_ = function (t) {
        t.preventDefault(), this.handleToggle_()
      }, e.prototype.handleToggle_ = function () {
        this.element.classList.toggle("ol-collapsed"), this.collapsed_ ? po(this.collapseLabel_, this.label_) : po(this.label_, this.collapseLabel_), this.collapsed_ = !this.collapsed_;
        var t = this.ovmap_;
        if (!this.collapsed_) {
          if (t.isRendered()) return this.viewExtent_ = void 0, void t.render();
          t.updateSize(), this.resetExtent_(), K(t, qa, (function (t) {
            this.updateBox_()
          }), this)
        }
      }, e.prototype.getCollapsible = function () {
        return this.collapsible_
      }, e.prototype.setCollapsible = function (t) {
        this.collapsible_ !== t && (this.collapsible_ = t, this.element.classList.toggle("ol-uncollapsible"), !t && this.collapsed_ && this.handleToggle_())
      }, e.prototype.setCollapsed = function (t) {
        this.collapsible_ && this.collapsed_ !== t && this.handleToggle_()
      }, e.prototype.getCollapsed = function () {
        return this.collapsed_
      }, e.prototype.getRotateWithView = function () {
        return this.rotateWithView_
      }, e.prototype.setRotateWithView = function (t) {
        this.rotateWithView_ !== t && (this.rotateWithView_ = t, 0 !== this.getMap().getView().getRotation() && (this.rotateWithView_ ? this.handleRotationChanged_() : this.ovmap_.getView().setRotation(0), this.viewExtent_ = void 0, this.validateExtent_(), this.updateBox_()))
      }, e.prototype.getOverviewMap = function () {
        return this.ovmap_
      }, e.prototype.render = function (t) {
        this.validateExtent_(), this.updateBox_()
      }, e
    }(As), lO = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), uO = "degrees", cO = "imperial", hO = "nautical", pO = "metric", fO = "us", dO = [1, 2, 5], gO = function (t) {
      function e(e) {
        var r = this, n = e || {}, i = void 0 !== n.className ? n.className : n.bar ? "ol-scale-bar" : "ol-scale-line";
        return (r = t.call(this, {
          element: document.createElement("div"),
          render: n.render,
          target: n.target
        }) || this).innerElement_ = document.createElement("div"), r.innerElement_.className = i + "-inner", r.element.className = i + " ol-unselectable", r.element.appendChild(r.innerElement_), r.viewState_ = null, r.minWidth_ = void 0 !== n.minWidth ? n.minWidth : 64, r.renderedVisible_ = !1, r.renderedWidth_ = void 0, r.renderedHTML_ = "", r.addEventListener(it("units"), r.handleUnitsChanged_), r.setUnits(n.units || pO), r.scaleBar_ = n.bar || !1, r.scaleBarSteps_ = n.steps || 4, r.scaleBarText_ = n.text || !1, r.dpi_ = n.dpi || void 0, r
      }

      return lO(e, t), e.prototype.getUnits = function () {
        return this.get("units")
      }, e.prototype.handleUnitsChanged_ = function () {
        this.updateElement_()
      }, e.prototype.setUnits = function (t) {
        this.set("units", t)
      }, e.prototype.setDpi = function (t) {
        this.dpi_ = t
      }, e.prototype.updateElement_ = function () {
        var t = this.viewState_;
        if (t) {
          var e = t.center, r = t.projection, n = this.getUnits(), i = n == uO ? St.DEGREES : St.METERS,
            o = zr(r, t.resolution, e, i), a = this.minWidth_ * (this.dpi_ || 25.4 / .28) / (25.4 / .28), s = a * o,
            l = "";
          if (n == uO) {
            var u = wt[St.DEGREES];
            (s *= u) < u / 60 ? (l = "″", o *= 3600) : s < u ? (l = "′", o *= 60) : l = "°"
          } else n == cO ? s < .9144 ? (l = "in", o /= .0254) : s < 1609.344 ? (l = "ft", o /= .3048) : (l = "mi", o /= 1609.344) : n == hO ? (o /= 1852, l = "nm") : n == pO ? s < .001 ? (l = "μm", o *= 1e6) : s < 1 ? (l = "mm", o *= 1e3) : s < 1e3 ? l = "m" : (l = "km", o /= 1e3) : n == fO ? s < .9144 ? (l = "in", o *= 39.37) : s < 1609.344 ? (l = "ft", o /= .30480061) : (l = "mi", o /= 1609.3472) : pt(!1, 33);
          for (var c, h, p, f, d = 3 * Math.floor(Math.log(a * o) / Math.log(10)); ;) {
            p = Math.floor(d / 3);
            var g = Math.pow(10, p);
            if (c = dO[(d % 3 + 3) % 3] * g, h = Math.round(c / o), isNaN(h)) return this.element.style.display = "none", void (this.renderedVisible_ = !1);
            if (h >= a) break;
            ++d
          }
          f = this.scaleBar_ ? this.createScaleBar(h, c, l) : c.toFixed(p < 0 ? -p : 0) + " " + l, this.renderedHTML_ != f && (this.innerElement_.innerHTML = f, this.renderedHTML_ = f), this.renderedWidth_ != h && (this.innerElement_.style.width = h + "px", this.renderedWidth_ = h), this.renderedVisible_ || (this.element.style.display = "", this.renderedVisible_ = !0)
        } else this.renderedVisible_ && (this.element.style.display = "none", this.renderedVisible_ = !1)
      }, e.prototype.createScaleBar = function (t, e, r) {
        for (var n = "1 : " + Math.round(this.getScaleForResolution()).toLocaleString(), i = [], o = t / this.scaleBarSteps_, a = "#ffffff", s = 0; s < this.scaleBarSteps_; s++) 0 === s && i.push(this.createMarker("absolute", s)), i.push('<div><div class="ol-scale-singlebar" style="width: ' + o + "px;background-color: " + a + ';"></div>' + this.createMarker("relative", s) + (s % 2 == 0 || 2 === this.scaleBarSteps_ ? this.createStepText(s, t, !1, e, r) : "") + "</div>"), s === this.scaleBarSteps_ - 1 && i.push(this.createStepText(s + 1, t, !0, e, r)), a = "#ffffff" === a ? "#000000" : "#ffffff";
        return '<div style="display: flex;">' + (this.scaleBarText_ ? '<div class="ol-scale-text" style="width: ' + t + 'px;">' + n + "</div>" : "") + i.join("") + "</div>"
      }, e.prototype.createMarker = function (t, e) {
        return '<div class="ol-scale-step-marker" style="position: ' + t + ";top: " + ("absolute" === t ? 3 : -10) + 'px;"></div>'
      }, e.prototype.createStepText = function (t, e, r, n, i) {
        var o = (0 === t ? 0 : Math.round(n / this.scaleBarSteps_ * t * 100) / 100) + (0 === t ? "" : " " + i);
        return '<div class="ol-scale-step-text" style="margin-left: ' + (0 === t ? -3 : e / this.scaleBarSteps_ * -1) + "px;text-align: " + (0 === t ? "left" : "center") + "; min-width: " + (0 === t ? 0 : e / this.scaleBarSteps_ * 2) + "px;left: " + (r ? e + "px" : "unset") + ';">' + o + "</div>"
      }, e.prototype.getScaleForResolution = function () {
        var t = zr(this.viewState_.projection, this.viewState_.resolution, this.viewState_.center),
          e = this.dpi_ || 25.4 / .28, r = this.viewState_.projection.getMetersPerUnit();
        return parseFloat(t.toString()) * r * (1e3 / 25.4) * e
      }, e.prototype.render = function (t) {
        var e = t.frameState;
        this.viewState_ = e ? e.viewState : null, this.updateElement_()
      }, e
    }(As), yO = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), mO = 0, vO = 1, _O = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, {
          element: document.createElement("div"),
          render: n.render
        }) || this).dragListenerKeys_ = [], r.currentResolution_ = void 0, r.direction_ = mO, r.dragging_, r.heightLimit_ = 0, r.widthLimit_ = 0, r.startX_, r.startY_, r.thumbSize_ = null, r.sliderInitialized_ = !1, r.duration_ = void 0 !== n.duration ? n.duration : 200;
        var i = void 0 !== n.className ? n.className : "ol-zoomslider", o = document.createElement("button");
        o.setAttribute("type", "button"), o.className = i + "-thumb ol-unselectable";
        var a = r.element;
        return a.className = i + " ol-unselectable ol-control", a.appendChild(o), a.addEventListener(Ua, r.handleDraggerStart_.bind(r), !1), a.addEventListener(za, r.handleDraggerDrag_.bind(r), !1), a.addEventListener(Ba, r.handleDraggerEnd_.bind(r), !1), a.addEventListener(N, r.handleContainerClick_.bind(r), !1), o.addEventListener(N, u, !1), r
      }

      return yO(e, t), e.prototype.setMap = function (e) {
        t.prototype.setMap.call(this, e), e && e.render()
      }, e.prototype.initSlider_ = function () {
        var t = this.element, e = t.offsetWidth, r = t.offsetHeight;
        if (0 === e && 0 === r) return this.sliderInitialized_ = !1;
        var n = t.firstElementChild, i = getComputedStyle(n),
          o = n.offsetWidth + parseFloat(i.marginRight) + parseFloat(i.marginLeft),
          a = n.offsetHeight + parseFloat(i.marginTop) + parseFloat(i.marginBottom);
        return this.thumbSize_ = [o, a], e > r ? (this.direction_ = vO, this.widthLimit_ = e - o) : (this.direction_ = mO, this.heightLimit_ = r - a), this.sliderInitialized_ = !0
      }, e.prototype.handleContainerClick_ = function (t) {
        var e = this.getMap().getView(),
          r = this.getRelativePosition_(t.offsetX - this.thumbSize_[0] / 2, t.offsetY - this.thumbSize_[1] / 2),
          n = this.getResolutionForPosition_(r), i = e.getConstrainedZoom(e.getZoomForResolution(n));
        e.animateInternal({zoom: i, duration: this.duration_, easing: io})
      }, e.prototype.handleDraggerStart_ = function (t) {
        if (!this.dragging_ && t.target === this.element.firstElementChild) {
          var e = this.element.firstElementChild;
          if (this.getMap().getView().beginInteraction(), this.startX_ = t.clientX - parseFloat(e.style.left), this.startY_ = t.clientY - parseFloat(e.style.top), this.dragging_ = !0, 0 === this.dragListenerKeys_.length) {
            var r = this.handleDraggerDrag_, n = this.handleDraggerEnd_, i = this.getMap().getOwnerDocument();
            this.dragListenerKeys_.push(Z(i, za, r, this), Z(i, Ba, n, this))
          }
        }
      }, e.prototype.handleDraggerDrag_ = function (t) {
        if (this.dragging_) {
          var e = t.clientX - this.startX_, r = t.clientY - this.startY_, n = this.getRelativePosition_(e, r);
          this.currentResolution_ = this.getResolutionForPosition_(n), this.getMap().getView().setResolution(this.currentResolution_)
        }
      }, e.prototype.handleDraggerEnd_ = function (t) {
        this.dragging_ && (this.getMap().getView().endInteraction(), this.dragging_ = !1, this.startX_ = void 0, this.startY_ = void 0, this.dragListenerKeys_.forEach(H), this.dragListenerKeys_.length = 0)
      }, e.prototype.setThumbPosition_ = function (t) {
        var e = this.getPositionForResolution_(t), r = this.element.firstElementChild;
        this.direction_ == vO ? r.style.left = this.widthLimit_ * e + "px" : r.style.top = this.heightLimit_ * e + "px"
      }, e.prototype.getRelativePosition_ = function (t, e) {
        return Ne(this.direction_ === vO ? t / this.widthLimit_ : e / this.heightLimit_, 0, 1)
      }, e.prototype.getResolutionForPosition_ = function (t) {
        return this.getMap().getView().getResolutionForValueFunction()(1 - t)
      }, e.prototype.getPositionForResolution_ = function (t) {
        return Ne(1 - this.getMap().getView().getValueForResolutionFunction()(t), 0, 1)
      }, e.prototype.render = function (t) {
        if (t.frameState && (this.sliderInitialized_ || this.initSlider_())) {
          var e = t.frameState.viewState.resolution;
          this.currentResolution_ = e, this.setThumbPosition_(e)
        }
      }, e
    }(As), bO = function () {
      var t = function (e, r) {
        return (t = Object.setPrototypeOf || {__proto__: []} instanceof Array && function (t, e) {
          t.__proto__ = e
        } || function (t, e) {
          for (var r in e) Object.prototype.hasOwnProperty.call(e, r) && (t[r] = e[r])
        })(e, r)
      };
      return function (e, r) {
        function n() {
          this.constructor = e
        }

        t(e, r), e.prototype = null === r ? Object.create(r) : (n.prototype = r.prototype, new n)
      }
    }(), xO = function (t) {
      function e(e) {
        var r = this, n = e || {};
        (r = t.call(this, {
          element: document.createElement("div"),
          target: n.target
        }) || this).extent = n.extent ? n.extent : null;
        var i = void 0 !== n.className ? n.className : "ol-zoom-extent", o = void 0 !== n.label ? n.label : "E",
          a = void 0 !== n.tipLabel ? n.tipLabel : "Fit to extent", s = document.createElement("button");
        s.setAttribute("type", "button"), s.title = a, s.appendChild("string" == typeof o ? document.createTextNode(o) : o), s.addEventListener(N, r.handleClick_.bind(r), !1);
        var l = i + " ol-unselectable ol-control", u = r.element;
        return u.className = l, u.appendChild(s), r
      }

      return bO(e, t), e.prototype.handleClick_ = function (t) {
        t.preventDefault(), this.handleZoomToExtent()
      }, e.prototype.handleZoomToExtent = function () {
        var t = this.getMap().getView(), e = this.extent ? this.extent : t.getProjection().getExtent();
        t.fitInternal(gi(e))
      }, e
    }(As), wO = {};
    wO.AssertionError = l || {}, wO.Collection = ht || {}, wO.Collection.CollectionEvent = ct || {}, wO.Disposable = p || {}, wO.Feature = gt || {}, wO.Feature.createStyleFunction = dt || {}, wO.Geolocation = Ii || {}, wO.Image = Ki || {}, wO.Image.listenImage = Zi || {}, wO.ImageBase = Mi || {}, wO.ImageCanvas = $i || {}, wO.ImageTile = vo || {}, wO.Kinetic = _o || {}, wO.Map = Wl || {}, wO.MapBrowserEvent = Da || {}, wO.MapBrowserEventHandler = Wa || {}, wO.MapEvent = ja || {}, wO.Object = ot || {}, wO.Object.ObjectEvent = et || {}, wO.Object.getChangeEventType = it || {}, wO.Observable = Q || {}, wO.Observable.unByKey = J || {}, wO.Overlay = su || {}, wO.PluggableMap = Ms || {}, wO.Tile = lo || {}, wO.TileCache = yu || {}, wO.TileQueue = es || {}, wO.TileQueue.getTilePriority = rs || {}, wO.TileRange = _u || {}, wO.TileRange.createOrUpdate = vu || {}, wO.VectorRenderTile = wu || {}, wO.VectorTile = Eu || {}, wO.View = Cs || {}, wO.View.createCenterConstraint = xs || {}, wO.View.createResolutionConstraint = ws || {}, wO.View.createRotationConstraint = Ss || {}, wO.View.isNoopAnimation = Es || {}, wO.array = {}, wO.array.binarySearch = f || {}, wO.array.equals = b || {}, wO.array.extend = v || {}, wO.array.find = _ || {}, wO.array.findIndex = x || {}, wO.array.includes = g || {}, wO.array.isSorted = w || {}, wO.array.linearFindNearest = y || {}, wO.array.numberSafeCompareFunction = d || {}, wO.array.remove = function (t, e) {
      var r = t.indexOf(e), n = r > -1;
      return n && t.splice(r, 1), n
    } || {}, wO.array.reverseSubArray = m || {}, wO.array.stableSort = function (t, e) {
      var r, n = t.length, i = Array(t.length);
      for (r = 0; r < n; r++) i[r] = {index: r, value: t[r]};
      for (i.sort((function (t, r) {
        return e(t.value, r.value) || t.index - r.index
      })), r = 0; r < t.length; r++) t[r] = i[r].value
    } || {}, wO.asserts = {}, wO.asserts.assert = pt || {}, wO.centerconstraint = {}, wO.centerconstraint.createExtent = ls || {}, wO.centerconstraint.none = us || {}, wO.color = {}, wO.color.asArray = Oo || {}, wO.color.asString = wo || {}, wO.color.fromString = Co || {}, wO.color.isStringColor = Io || {}, wO.color.normalize = Po || {}, wO.color.toString = Ro || {}, wO.colorlike = {}, wO.colorlike.asColorLike = Tu || {}, wO.control = {}, wO.control.Attribution = js || {}, wO.control.Control = As || {}, wO.control.FullScreen = rO || {}, wO.control.MousePosition = iO || {}, wO.control.OverviewMap = sO || {}, wO.control.Rotate = Ds || {}, wO.control.ScaleLine = gO || {}, wO.control.Zoom = zs || {}, wO.control.ZoomSlider = _O || {}, wO.control.ZoomToExtent = xO || {}, wO.control.defaults = Us || {}, wO.coordinate = {}, wO.coordinate.add = xr || {}, wO.coordinate.closestOnCircle = wr || {}, wO.coordinate.closestOnSegment = Sr || {}, wO.coordinate.createStringXY = function (t) {
      return function (e) {
        return Mr(e, t)
      }
    } || {}, wO.coordinate.degreesToStringHDMS = Er || {}, wO.coordinate.distance = Ir || {}, wO.coordinate.equals = Cr || {}, wO.coordinate.format = Tr || {}, wO.coordinate.getWorldsAway = Ar || {}, wO.coordinate.rotate = Or || {}, wO.coordinate.scale = Pr || {}, wO.coordinate.squaredDistance = Rr || {}, wO.coordinate.squaredDistanceToSegment = Lr || {}, wO.coordinate.toStringHDMS = function (t, e) {
      return t ? Er("NS", t[1], e) + " " + Er("EW", t[0], e) : ""
    } || {}, wO.coordinate.toStringXY = Mr || {}, wO.coordinate.wrapX = Fr || {}, wO.css = {}, wO.css.CLASS_COLLAPSED = "ol-collapsed", wO.css.CLASS_CONTROL = "ol-control", wO.css.CLASS_HIDDEN = "ol-hidden", wO.css.CLASS_SELECTABLE = "ol-selectable", wO.css.CLASS_UNSELECTABLE = "ol-unselectable", wO.css.CLASS_UNSUPPORTED = "ol-unsupported", wO.css.getFontParameters = ha || {},wO.dom = {},wO.dom.createCanvasContext2D = uo || {},wO.dom.outerHeight = ho || {},wO.dom.outerWidth = co || {},wO.dom.removeChildren = go || {},wO.dom.removeNode = fo || {},wO.dom.replaceChildren = yo || {},wO.dom.replaceNode = po || {},wO.easing = {},wO.easing.easeIn = no || {},wO.easing.easeOut = io || {},wO.easing.inAndOut = oo || {},wO.easing.linear = ao || {},wO.easing.upAndDown = function (t) {
      return t < .5 ? oo(2 * t) : 1 - oo(2 * (t - .5))
    } || {},wO.events = {},wO.events.Event = c || {},wO.events.Event.preventDefault = function (t) {
      t.preventDefault()
    } || {},wO.events.Event.stopPropagation = u || {},wO.events.Target = M || {},wO.events.condition = {},wO.events.condition.all = Js || {},wO.events.condition.altKeyOnly = Qs || {},wO.events.condition.altShiftKeysOnly = tl || {},wO.events.condition.always = nl || {},wO.events.condition.click = function (t) {
      return t.type == Ga.CLICK
    } || {},wO.events.condition.doubleClick = function (t) {
      return t.type == Ga.DBLCLICK
    } || {},wO.events.condition.focus = el || {},wO.events.condition.focusWithTabindex = rl || {},wO.events.condition.mouseActionButton = il || {},wO.events.condition.mouseOnly = cl || {},wO.events.condition.never = ol || {},wO.events.condition.noModifierKeys = sl || {},wO.events.condition.penOnly = function (t) {
      var e = t.originalEvent;
      return pt(void 0 !== e, 56), "pen" === e.pointerType
    } || {},wO.events.condition.platformModifierKeyOnly = function (t) {
      var e = t.originalEvent;
      return !e.altKey && (Bi ? e.metaKey : e.ctrlKey) && !e.shiftKey
    } || {},wO.events.condition.pointerMove = function (t) {
      return "pointermove" == t.type
    } || {},wO.events.condition.primaryAction = hl || {},wO.events.condition.shiftKeyOnly = ll || {},wO.events.condition.singleClick = al || {},wO.events.condition.targetNotEditable = ul || {},wO.events.condition.touchOnly = function (t) {
      var e = t.originalEvent;
      return pt(void 0 !== e, 56), "touch" === e.pointerType
    } || {},wO.events.listen = Z || {},wO.events.listenOnce = K || {},wO.events.unlistenByKey = H || {},wO.extent = {},wO.extent.applyTransform = Ae || {},wO.extent.approximatelyEquals = ce || {},wO.extent.boundingExtent = Kt || {},wO.extent.buffer = Ht || {},wO.extent.clone = $t || {},wO.extent.closestSquaredDistanceXY = Jt || {},wO.extent.containsCoordinate = Qt || {},wO.extent.containsExtent = te || {},wO.extent.containsXY = ee || {},wO.extent.coordinateRelationship = re || {},wO.extent.createEmpty = ne || {},wO.extent.createOrUpdate = ie || {},wO.extent.createOrUpdateEmpty = oe || {},wO.extent.createOrUpdateFromCoordinate = ae || {},wO.extent.createOrUpdateFromCoordinates = se || {},wO.extent.createOrUpdateFromFlatCoordinates = le || {},wO.extent.createOrUpdateFromRings = function (t, e) {
      return ge(oe(e), t)
    } || {},wO.extent.equals = ue || {},wO.extent.extend = he || {},wO.extent.extendCoordinate = pe || {},wO.extent.extendCoordinates = fe || {},wO.extent.extendFlatCoordinates = de || {},wO.extent.extendRings = ge || {},wO.extent.extendXY = ye || {},wO.extent.forEachCorner = me || {},wO.extent.getArea = ve || {},wO.extent.getBottomLeft = _e || {},wO.extent.getBottomRight = be || {},wO.extent.getCenter = xe || {},wO.extent.getCorner = we || {},wO.extent.getEnlargedArea = function (t, e) {
      var r = Math.min(t[0], e[0]), n = Math.min(t[1], e[1]);
      return (Math.max(t[2], e[2]) - r) * (Math.max(t[3], e[3]) - n)
    } || {},wO.extent.getForViewAndSize = Se || {},wO.extent.getHeight = Ee || {},wO.extent.getIntersection = Te || {},wO.extent.getIntersectionArea = function (t, e) {
      return ve(Te(t, e))
    } || {},wO.extent.getMargin = function (t) {
      return Pe(t) + Ee(t)
    } || {},wO.extent.getSize = function (t) {
      return [t[2] - t[0], t[3] - t[1]]
    } || {},wO.extent.getTopLeft = Ce || {},wO.extent.getTopRight = Oe || {},wO.extent.getWidth = Pe || {},wO.extent.intersects = Re || {},wO.extent.intersectsSegment = Fe || {},wO.extent.isEmpty = Ie || {},wO.extent.returnOrUpdate = Le || {},wO.extent.scaleFromCenter = Me || {},wO.extent.wrapX = ke || {},wO.featureloader = {},wO.featureloader.loadFeaturesXhr = Lu || {},wO.featureloader.setWithCredentials = function (t) {
      Iu = t
    } || {},wO.featureloader.xhr = Mu || {},wO.format = {},wO.format.EsriJSON = C_ || {},wO.format.Feature = Yy || {},wO.format.Feature.transformExtentWithOptions = qy || {},wO.format.Feature.transformGeometryWithOptions = Wy || {},wO.format.GML = nb || {},wO.format.GML2 = $_ || {},wO.format.GML3 = eb || {},wO.format.GML32 = ab || {},wO.format.GMLBase = F_ || {},wO.format.GMLBase.GMLNS = I_,wO.format.GPX = Bb || {},wO.format.GeoJSON = $m || {},wO.format.IGC = sx || {},wO.format.IIIFInfo = Pf || {},wO.format.JSONFeature = qm || {},wO.format.KML = eS || {},wO.format.KML.getDefaultFillStyle = function () {
      return vx
    } || {},wO.format.KML.getDefaultImageStyle = function () {
      return bx
    } || {},wO.format.KML.getDefaultStrokeStyle = function () {
      return wx
    } || {},wO.format.KML.getDefaultStyle = function () {
      return Ex
    } || {},wO.format.KML.getDefaultStyleArray = function () {
      return Cx
    } || {},wO.format.KML.getDefaultTextStyle = function () {
      return Sx
    } || {},wO.format.KML.readFlatCoordinates = Ix || {},wO.format.MVT = am || {},wO.format.OSMXML = uS || {},wO.format.OWS = RS || {},wO.format.Polyline = zS || {},wO.format.Polyline.decodeDeltas = MS || {},wO.format.Polyline.decodeFloats = AS || {},wO.format.Polyline.decodeSignedIntegers = jS || {},wO.format.Polyline.decodeUnsignedIntegers = DS || {},wO.format.Polyline.encodeDeltas = LS || {},wO.format.Polyline.encodeFloats = FS || {},wO.format.Polyline.encodeSignedIntegers = kS || {},wO.format.Polyline.encodeUnsignedInteger = GS || {},wO.format.Polyline.encodeUnsignedIntegers = NS || {},wO.format.TextFeature = Jb || {},wO.format.TopoJSON = KS || {},wO.format.WFS = DT || {},wO.format.WFS.writeFilter = function (t, e) {
      var r = Sc(tT[e], "Filter"), n = {node: r};
      return O(n, {version: e, filter: t}), xT(r, t, [n]), r
    } || {},wO.format.WKT = nC || {},wO.format.WMSCapabilities = RC || {},wO.format.WMSGetFeatureInfo = LC || {},wO.format.WMTSCapabilities = ZC || {},wO.format.XLink = {},wO.format.XLink.readHref = hS || {},wO.format.XML = cS || {},wO.format.XMLFeature = P_ || {},wO.format.filter = {},wO.format.filter.And = tE || {},wO.format.filter.Bbox = rE || {},wO.format.filter.Comparison = pE || {},wO.format.filter.ComparisonBinary = yE || {},wO.format.filter.Contains = aE || {},wO.format.filter.DWithin = lE || {},wO.format.filter.Disjoint = cE || {},wO.format.filter.During = dE || {},wO.format.filter.EqualTo = vE || {},wO.format.filter.Filter = HS || {},wO.format.filter.GreaterThan = bE || {},wO.format.filter.GreaterThanOrEqualTo = wE || {},wO.format.filter.Intersects = EE || {},wO.format.filter.IsBetween = CE || {},wO.format.filter.IsLike = PE || {},wO.format.filter.IsNull = IE || {},wO.format.filter.LessThan = ME || {},wO.format.filter.LessThanOrEqualTo = AE || {},wO.format.filter.LogicalNary = JS || {},wO.format.filter.Not = jE || {},wO.format.filter.NotEqualTo = DE || {},wO.format.filter.Or = zE || {},wO.format.filter.ResourceId = BE || {},wO.format.filter.Spatial = iE || {},wO.format.filter.Within = YE || {},wO.format.filter.and = WE || {},wO.format.filter.bbox = qE || {},wO.format.filter.between = function (t, e, r) {
      return new CE(t, e, r)
    } || {},wO.format.filter.contains = function (t, e, r) {
      return new aE(t, e, r)
    } || {},wO.format.filter.disjoint = function (t, e, r) {
      return new cE(t, e, r)
    } || {},wO.format.filter.during = function (t, e, r) {
      return new dE(t, e, r)
    } || {},wO.format.filter.dwithin = function (t, e, r, n, i) {
      return new lE(t, e, r, n, i)
    } || {},wO.format.filter.equalTo = function (t, e, r) {
      return new vE(t, e, r)
    } || {},wO.format.filter.greaterThan = function (t, e) {
      return new bE(t, e)
    } || {},wO.format.filter.greaterThanOrEqualTo = function (t, e) {
      return new wE(t, e)
    } || {},wO.format.filter.intersects = function (t, e, r) {
      return new EE(t, e, r)
    } || {},wO.format.filter.isNull = function (t) {
      return new IE(t)
    } || {},wO.format.filter.lessThan = function (t, e) {
      return new ME(t, e)
    } || {},wO.format.filter.lessThanOrEqualTo = function (t, e) {
      return new AE(t, e)
    } || {},wO.format.filter.like = function (t, e, r, n, i, o) {
      return new PE(t, e, r, n, i, o)
    } || {},wO.format.filter.not = function (t) {
      return new jE(t)
    } || {},wO.format.filter.notEqualTo = function (t, e, r) {
      return new DE(t, e, r)
    } || {},wO.format.filter.or = function (t) {
      var e = [null].concat(Array.prototype.slice.call(arguments));
      return new (Function.prototype.bind.apply(zE, e))
    } || {},wO.format.filter.resourceId = function (t) {
      return new BE(t)
    } || {},wO.format.filter.within = function (t, e, r) {
      return new YE(t, e, r)
    } || {},wO.format.xsd = {},wO.format.xsd.readBoolean = A_ || {},wO.format.xsd.readBooleanString = k_ || {},wO.format.xsd.readDateTime = j_ || {},wO.format.xsd.readDecimal = N_ || {},wO.format.xsd.readDecimalString = D_ || {},wO.format.xsd.readNonNegativeInteger = G_ || {},wO.format.xsd.readNonNegativeIntegerString = z_ || {},wO.format.xsd.readString = U_ || {},wO.format.xsd.writeBooleanTextNode = B_ || {},wO.format.xsd.writeCDATASection = V_ || {},wO.format.xsd.writeDateTimeTextNode = Y_ || {},wO.format.xsd.writeDecimalTextNode = W_ || {},wO.format.xsd.writeNonNegativeIntegerTextNode = q_ || {},wO.format.xsd.writeStringTextNode = X_ || {},wO.functions = {},wO.functions.FALSE = E || {},wO.functions.TRUE = S || {},wO.functions.VOID = T || {},wO.functions.memoizeOne = C || {},wO.geom = {},wO.geom.Circle = Rv || {},wO.geom.Geometry = dn || {},wO.geom.GeometryCollection = Vm || {},wO.geom.LineString = Py || {},wO.geom.LinearRing = Yn || {},wO.geom.MultiLineString = Zy || {},wO.geom.MultiPoint = Hy || {},wO.geom.MultiPolygon = Jy || {},wO.geom.Point = qn || {},wO.geom.Polygon = fi || {},wO.geom.Polygon.circular = di || {},wO.geom.Polygon.fromCircle = yi || {},wO.geom.Polygon.fromExtent = gi || {},wO.geom.Polygon.makeRegular = mi || {},wO.geom.SimpleGeometry = vn || {},wO.geom.SimpleGeometry.getStrideForLayout = yn || {},wO.geom.SimpleGeometry.transformGeom2D = mn || {},wO.geom.flat = {},wO.geom.flat.area = {},wO.geom.flat.area.linearRing = zn || {},wO.geom.flat.area.linearRings = Un || {},wO.geom.flat.area.linearRingss = Bn || {},wO.geom.flat.center = {},wO.geom.flat.center.linearRingss = Sy || {},wO.geom.flat.closest = {},wO.geom.flat.closest.arrayMaxSquaredDelta = xn || {},wO.geom.flat.closest.assignClosestArrayPoint = En || {},wO.geom.flat.closest.assignClosestMultiArrayPoint = Tn || {},wO.geom.flat.closest.assignClosestPoint = Sn || {},wO.geom.flat.closest.maxSquaredDelta = bn || {},wO.geom.flat.closest.multiArrayMaxSquaredDelta = wn || {},wO.geom.flat.contains = {},wO.geom.flat.contains.linearRingContainsExtent = Xn || {},wO.geom.flat.contains.linearRingContainsXY = Zn || {},wO.geom.flat.contains.linearRingsContainsXY = Kn || {},wO.geom.flat.contains.linearRingssContainsXY = Hn || {},wO.geom.flat.deflate = {},wO.geom.flat.deflate.deflateCoordinate = Cn || {},wO.geom.flat.deflate.deflateCoordinates = On || {},wO.geom.flat.deflate.deflateCoordinatesArray = Pn || {},wO.geom.flat.deflate.deflateMultiCoordinatesArray = Rn || {},wO.geom.flat.flip = {},wO.geom.flat.flip.flipXY = v_ || {},wO.geom.flat.geodesic = {},wO.geom.flat.geodesic.greatCircleArc = function (t, e, r, n, i, o) {
      var a = Gr("EPSG:4326"), s = Math.cos(Ye(e)), l = Math.sin(Ye(e)), u = Math.cos(Ye(n)), c = Math.sin(Ye(n)),
        h = Math.cos(Ye(r - t)), p = Math.sin(Ye(r - t)), f = l * c + s * u * h;
      return Ly((function (e) {
        if (1 <= f) return [r, n];
        var i = e * Math.acos(f), o = Math.cos(i), a = Math.sin(i), d = p * u, g = s * c - l * u * h,
          y = Math.atan2(d, g), m = Math.asin(l * o + s * a * Math.cos(y));
        return [Ve(Ye(t) + Math.atan2(Math.sin(y) * a * s, o - l * Math.sin(m))), Ve(m)]
      }), Kr(a, i), o)
    } || {},wO.geom.flat.geodesic.meridian = My || {},wO.geom.flat.geodesic.parallel = Fy || {},wO.geom.flat.inflate = {},wO.geom.flat.inflate.inflateCoordinates = Nn || {},wO.geom.flat.inflate.inflateCoordinatesArray = Dn || {},wO.geom.flat.inflate.inflateMultiCoordinatesArray = Gn || {},wO.geom.flat.interiorpoint = {},wO.geom.flat.interiorpoint.getInteriorPointOfArray = $n || {},wO.geom.flat.interiorpoint.getInteriorPointsOfMultiArray = Jn || {},wO.geom.flat.interpolate = {},wO.geom.flat.interpolate.interpolatePoint = by || {},wO.geom.flat.interpolate.lineStringCoordinateAtM = xy || {},wO.geom.flat.interpolate.lineStringsCoordinateAtM = wy || {},wO.geom.flat.intersectsextent = {},wO.geom.flat.intersectsextent.intersectsLineString = ti || {},wO.geom.flat.intersectsextent.intersectsLineStringArray = ei || {},wO.geom.flat.intersectsextent.intersectsLinearRing = ri || {},wO.geom.flat.intersectsextent.intersectsLinearRingArray = ni || {},wO.geom.flat.intersectsextent.intersectsLinearRingMultiArray = ii || {},wO.geom.flat.length = {},wO.geom.flat.length.lineStringLength = qg || {},wO.geom.flat.length.linearRingLength = function (t, e, r, n) {
      var i = qg(t, e, r, n), o = t[r - n] - t[e], a = t[r - n + 1] - t[e + 1];
      return i += Math.sqrt(o * o + a * a)
    } || {},wO.geom.flat.orient = {},wO.geom.flat.orient.linearRingIsClockwise = ai || {},wO.geom.flat.orient.linearRingsAreOriented = si || {},wO.geom.flat.orient.linearRingssAreOriented = li || {},wO.geom.flat.orient.orientLinearRings = ui || {},wO.geom.flat.orient.orientLinearRingsArray = ci || {},wO.geom.flat.reverse = {},wO.geom.flat.reverse.coordinates = oi || {},wO.geom.flat.segments = {},wO.geom.flat.segments.forEach = Qn || {},wO.geom.flat.simplify = {},wO.geom.flat.simplify.douglasPeucker = In || {},wO.geom.flat.simplify.douglasPeuckerArray = Ln || {},wO.geom.flat.simplify.douglasPeuckerMultiArray = function (t, e, r, n, i, o, a, s) {
      for (var l = 0, u = r.length; l < u; ++l) {
        var c = r[l], h = [];
        a = Ln(t, e, c, n, i, o, a, h), s.push(h), e = c[c.length - 1]
      }
      return a
    } || {},wO.geom.flat.simplify.quantize = An || {},wO.geom.flat.simplify.quantizeArray = kn || {},wO.geom.flat.simplify.quantizeMultiArray = jn || {},wO.geom.flat.simplify.radialDistance = Mn || {},wO.geom.flat.simplify.simplifyLineString = function (t, e, r, n, i, o, a) {
      var s = void 0 !== a ? a : [];
      return o || (r = Mn(t, e, r, n, i, s, 0), t = s, e = 0, n = 2), s.length = In(t, e, r, n, i, s, 0), s
    } || {},wO.geom.flat.simplify.snap = Fn || {},wO.geom.flat.straightchunk = {},wO.geom.flat.straightchunk.matchingChunk = Gg || {},wO.geom.flat.textpath = {},wO.geom.flat.textpath.drawTextOnPath = Wg || {},wO.geom.flat.topology = {},wO.geom.flat.topology.lineStringIsClosed = function (t, e, r, n) {
      var i = r - n;
      return t[e] === t[i] && t[e + 1] === t[i + 1] && (r - e) / n > 3 && !!zn(t, e, r, n)
    } || {},wO.geom.flat.transform = {},wO.geom.flat.transform.rotate = un || {},wO.geom.flat.transform.scale = cn || {},wO.geom.flat.transform.transform2D = ln || {},wO.geom.flat.transform.translate = hn || {},wO.has = {},wO.has.DEVICE_PIXEL_RATIO = Vi || {},wO.has.FIREFOX = Gi || {},wO.has.IMAGE_DECODE = Wi || {},wO.has.MAC = Bi || {},wO.has.PASSIVE_EVENT_LISTENERS = qi || {},wO.has.SAFARI = zi || {},wO.has.WEBKIT = Ui || {},wO.has.WORKER_OFFSCREEN_CANVAS = Yi || {},wO.interaction = {},wO.interaction.DoubleClickZoom = Zs || {},wO.interaction.DragAndDrop = Ev || {},wO.interaction.DragAndDrop.DragAndDropEvent = Sv || {},wO.interaction.DragBox = El || {},wO.interaction.DragBox.DragBoxEvent = Sl || {},wO.interaction.DragPan = fl || {},wO.interaction.DragRotate = gl || {},wO.interaction.DragRotateAndZoom = Cv || {},wO.interaction.DragZoom = Cl || {},wO.interaction.Draw = Gv || {},wO.interaction.Draw.DrawEvent = Dv || {},wO.interaction.Draw.createBox = function () {
      return function (t, e, r) {
        var n = Kt([t[0], t[t.length - 1]].map((function (t) {
          return rn(t, r)
        }))), i = [[_e(n), be(n), Oe(n), Ce(n), _e(n)]], o = e;
        o ? o.setCoordinates(i) : o = new fi(i);
        var a = tn();
        return a && o.transform(r, a), o
      }
    } || {},wO.interaction.Draw.createRegularPolygon = function (t, e) {
      return function (r, n, i) {
        var o = rn(r[0], i), a = rn(r[r.length - 1], i), s = Math.sqrt(Rr(o, a)), l = n || yi(new Rv(o), t), u = e;
        if (!e && 0 !== e) {
          var c = a[0] - o[0], h = a[1] - o[1];
          u = Math.atan2(h, c)
        }
        mi(l, o, s, u);
        var p = tn();
        return p && l.transform(i, p), l
      }
    } || {},wO.interaction.Extent = qv || {},wO.interaction.Extent.ExtentEvent = Bv || {},wO.interaction.Interaction = qs || {},wO.interaction.Interaction.pan = Ys || {},wO.interaction.Interaction.zoomByDelta = Ws || {},wO.interaction.KeyboardPan = Ml || {},wO.interaction.KeyboardZoom = Al || {},wO.interaction.Modify = r_ || {},wO.interaction.Modify.ModifyEvent = Jv || {},wO.interaction.MouseWheelZoom = Dl || {},wO.interaction.PinchRotate = zl || {},wO.interaction.PinchZoom = Bl || {},wO.interaction.Pointer = $s || {},wO.interaction.Pointer.centroid = Hs || {},wO.interaction.Select = s_ || {},wO.interaction.Select.SelectEvent = o_ || {},wO.interaction.Snap = h_ || {},wO.interaction.Translate = m_ || {},wO.interaction.Translate.TranslateEvent = y_ || {},wO.interaction.defaults = Vl || {},wO.layer = {},wO.layer.Base = Wo || {},wO.layer.BaseImage = ad || {},wO.layer.BaseTile = vd || {},wO.layer.BaseVector = wg || {},wO.layer.Graticule = Ny || {},wO.layer.Group = Aa || {},wO.layer.Heatmap = Vy || {},wO.layer.Image = dd || {},wO.layer.Layer = na || {},wO.layer.Layer.inView = ra || {},wO.layer.MapboxVector = yv || {},wO.layer.MapboxVector.getMapboxPath = uv || {},wO.layer.MapboxVector.normalizeGlyphsUrl = hv || {},wO.layer.MapboxVector.normalizeSourceUrl = fv || {},wO.layer.MapboxVector.normalizeSpriteUrl = cv || {},wO.layer.MapboxVector.normalizeStyleUrl = pv || {},wO.layer.Tile = Sd || {},wO.layer.Vector = Iy || {},wO.layer.VectorImage = vv || {},wO.layer.VectorTile = lm || {},wO.layer.WebGLPoints = bv || {},wO.loadingstrategy = {},wO.loadingstrategy.all = Fu || {},wO.loadingstrategy.bbox = function (t, e) {
      return [t]
    } || {},wO.loadingstrategy.tile = function (t) {
      return function (e, r) {
        var n = t.getZForResolution(r), i = t.getTileRangeForExtentAndZ(e, n), o = [], a = [n, 0, 0];
        for (a[1] = i.minX; a[1] <= i.maxX; ++a[1]) for (a[2] = i.minY; a[2] <= i.maxY; ++a[2]) o.push(t.getTileCoordExtent(a));
        return o
      }
    } || {},wO.math = {},wO.math.clamp = Ne || {},wO.math.cosh = De || {},wO.math.lerp = qe || {},wO.math.log2 = Ge || {},wO.math.modulo = We || {},wO.math.solveLinearSystem = Be || {},wO.math.squaredDistance = Ue || {},wO.math.squaredSegmentDistance = ze || {},wO.math.toDegrees = Ve || {},wO.math.toRadians = Ye || {},wO.net = {},wO.net.jsonp = Au || {},wO.obj = {},wO.obj.assign = O || {},wO.obj.clear = P || {},wO.obj.getValues = R || {},wO.obj.isEmpty = I || {},wO.proj = {},wO.proj.Projection = je || {},wO.proj.Units = St || {},wO.proj.Units.METERS_PER_UNIT = wt || {},wO.proj.addCommon = sn || {},wO.proj.addCoordinateTransforms = Wr || {},wO.proj.addEquivalentProjections = Ur || {},wO.proj.addEquivalentTransforms = Br || {},wO.proj.addProjection = Nr || {},wO.proj.addProjections = Dr || {},wO.proj.clearAllProjections = function () {
      lr(), pr()
    } || {},wO.proj.clearUserProjection = function () {
      Jr = null
    } || {},wO.proj.cloneTransform = kr || {},wO.proj.createProjection = Vr || {},wO.proj.createSafeCoordinateTransform = an || {},wO.proj.createTransformFromCoordinateTransform = Yr || {},wO.proj.epsg3857 = {},wO.proj.epsg3857.EXTENT = Ke || {},wO.proj.epsg3857.HALF_SIZE = Ze || {},wO.proj.epsg3857.MAX_SAFE_Y = $e || {},wO.proj.epsg3857.PROJECTIONS = Qe || {},wO.proj.epsg3857.RADIUS = 6378137,wO.proj.epsg3857.WORLD_EXTENT = He || {},wO.proj.epsg3857.fromEPSG4326 = tr || {},wO.proj.epsg3857.toEPSG4326 = er || {},wO.proj.epsg4326 = {},wO.proj.epsg4326.EXTENT = nr || {},wO.proj.epsg4326.METERS_PER_UNIT = ir || {},wO.proj.epsg4326.PROJECTIONS = ar || {},wO.proj.epsg4326.RADIUS = 6378137,wO.proj.equivalent = Xr || {},wO.proj.fromLonLat = qr || {},wO.proj.fromUserCoordinate = rn || {},wO.proj.fromUserExtent = on || {},wO.proj.get = Gr || {},wO.proj.getPointResolution = zr || {},wO.proj.getTransform = Kr || {},wO.proj.getTransformFromProjections = Zr || {},wO.proj.getUserProjection = tn || {},wO.proj.identityTransform = jr || {},wO.proj.proj4 = {},wO.proj.proj4.register = function (t) {
      var e, r, n = Object.keys(t.defs), i = n.length;
      for (e = 0; e < i; ++e) {
        var o = n[e];
        if (!Gr(o)) {
          var a = t.defs(o), s = a.units;
          s || "longlat" !== a.projName || (s = St.DEGREES), Nr(new je({
            code: o,
            axisOrientation: a.axis,
            metersPerUnit: a.to_meter,
            units: s
          }))
        }
      }
      for (e = 0; e < i; ++e) {
        var l = n[e], u = Gr(l);
        for (r = 0; r < i; ++r) {
          var c = n[r], h = Gr(c);
          if (!dr(l, c)) {
            var p = t.defs(l), f = t.defs(c);
            if (p === f) Ur([u, h]); else {
              var d = t(O({}, p, {axis: void 0}), O({}, f, {axis: void 0}));
              Wr(u, h, an(u, h, d.forward), an(h, u, d.inverse))
            }
          }
        }
      }
    } || {},wO.proj.projections = {},wO.proj.projections.add = cr || {},wO.proj.projections.clear = lr || {},wO.proj.projections.get = ur || {},wO.proj.setUserProjection = Qr || {},wO.proj.toLonLat = function (t, e) {
      var r = Hr(t, void 0 !== e ? e : "EPSG:3857", "EPSG:4326"), n = r[0];
      return (n < -180 || n > 180) && (r[0] = We(n + 180, 360) - 180), r
    } || {},wO.proj.toUserCoordinate = en || {},wO.proj.toUserExtent = nn || {},wO.proj.transform = Hr || {},wO.proj.transformExtent = $r || {},wO.proj.transformWithProjections = function (t, e, r) {
      return Zr(e, r)(t)
    } || {},wO.proj.transforms = {},wO.proj.transforms.add = fr || {},wO.proj.transforms.clear = pr || {},wO.proj.transforms.get = dr || {},wO.proj.transforms.remove = function (t, e) {
      var r = t.getCode(), n = e.getCode(), i = hr[r][n];
      return delete hr[r][n], I(hr[r]) && delete hr[r], i
    } || {},wO.proj.useGeographic = function () {
      Qr("EPSG:4326")
    } || {},wO.render = {},wO.render.Box = ml || {},wO.render.Event = la || {},wO.render.Feature = Cy || {},wO.render.VectorContext = ku || {},wO.render.canvas = {},wO.render.canvas.Builder = Mg || {},wO.render.canvas.BuilderGroup = Yg || {},wO.render.canvas.Executor = ey || {},wO.render.canvas.ExecutorGroup = ay || {},wO.render.canvas.ExecutorGroup.getPixelIndexArray = oy || {},wO.render.canvas.ImageBuilder = Ag || {},wO.render.canvas.Immediate = Nu || {},wO.render.canvas.Instruction = Ig || {},wO.render.canvas.Instruction.beginPathInstruction = Pg || {},wO.render.canvas.Instruction.closePathInstruction = Rg || {},wO.render.canvas.Instruction.fillInstruction = Cg || {},wO.render.canvas.Instruction.strokeInstruction = Og || {},wO.render.canvas.LineStringBuilder = jg || {},wO.render.canvas.PolygonBuilder = Dg || {},wO.render.canvas.TextBuilder = Bg || {},wO.render.canvas.checkedFonts = da || {},wO.render.canvas.createTransformString = Ra || {},wO.render.canvas.defaultFillStyle = "#000",wO.render.canvas.defaultFont = "10px sans-serif",wO.render.canvas.defaultLineCap = "round",wO.render.canvas.defaultLineDash = pa || {},wO.render.canvas.defaultLineDashOffset = {},wO.render.canvas.defaultLineJoin = "round",wO.render.canvas.defaultLineWidth = 1,wO.render.canvas.defaultMiterLimit = 10,wO.render.canvas.defaultPadding = fa || {},wO.render.canvas.defaultStrokeStyle = "#000",wO.render.canvas.defaultTextAlign = "center",wO.render.canvas.defaultTextBaseline = "middle",wO.render.canvas.drawImageOrLabel = Oa || {},wO.render.canvas.hitdetect = {},wO.render.canvas.hitdetect.createHitDetectionImageData = sy || {},wO.render.canvas.hitdetect.hitDetect = ly || {},wO.render.canvas.labelCache = ga || {},wO.render.canvas.measureAndCacheTextWidth = Ea || {},wO.render.canvas.measureTextHeight = xa || {},wO.render.canvas.measureTextWidth = Sa || {},wO.render.canvas.measureTextWidths = Ta || {},wO.render.canvas.registerFont = ba || {},wO.render.canvas.rotateAtOffset = Ca || {},wO.render.canvas.textHeights = _a || {},wO.render.getRenderPixel = function (t, e) {
      var r = e.slice(0);
      return It(t.inversePixelTransform.slice(), r), r
    } || {},wO.render.getVectorContext = Ku || {},wO.render.toContext = function (t, e) {
      var r = t.canvas, n = e || {}, i = n.pixelRatio || Vi, o = n.size;
      o && (r.width = o[0] * i, r.height = o[1] * i, r.style.width = o[0] + "px", r.style.height = o[1] + "px");
      var a = [0, 0, r.width, r.height], s = Mt([1, 0, 0, 1, 0, 0], i, i);
      return new Nu(t, i, a, s, 0)
    } || {},wO.renderer = {},wO.renderer.Composite = La || {},wO.renderer.Layer = ld || {},wO.renderer.Map = aa || {},wO.renderer.canvas = {},wO.renderer.canvas.ImageLayer = pd || {},wO.renderer.canvas.Layer = cd || {},wO.renderer.canvas.TileLayer = xd || {},wO.renderer.canvas.VectorImageLayer = py || {},wO.renderer.canvas.VectorLayer = cy || {},wO.renderer.canvas.VectorTileLayer = _y || {},wO.renderer.vector = {},wO.renderer.vector.defaultOrder = Wu || {},wO.renderer.vector.getSquaredTolerance = qu || {},wO.renderer.vector.getTolerance = Xu || {},wO.renderer.vector.renderFeature = Zu || {},wO.renderer.webgl = {},wO.renderer.webgl.Layer = _g || {},wO.renderer.webgl.Layer.colorDecodeId = vg || {},wO.renderer.webgl.Layer.colorEncodeId = mg || {},wO.renderer.webgl.Layer.getBlankImageData = function () {
      var t = document.createElement("canvas").getContext("2d").createImageData(1, 1);
      return t.data[0] = 255, t.data[1] = 255, t.data[2] = 255, t.data[3] = 255, t
    } || {},wO.renderer.webgl.Layer.writePointFeatureToBuffers = function (t, e, r, n, i, o) {
      var a = 3 + i, s = t[e + 0], l = t[e + 1], u = dg;
      u.length = i;
      for (var c = 0; c < u.length; c++) u[c] = t[e + 2 + c];
      var h = o ? o.vertexPosition : 0, p = o ? o.indexPosition : 0, f = h / a;
      return yg(r, h, s, l, 0), u.length && r.set(u, h + 3), yg(r, h += a, s, l, 1), u.length && r.set(u, h + 3), yg(r, h += a, s, l, 2), u.length && r.set(u, h + 3), yg(r, h += a, s, l, 3), u.length && r.set(u, h + 3), h += a, n[p++] = f, n[p++] = f + 1, n[p++] = f + 3, n[p++] = f + 1, n[p++] = f + 2, n[p++] = f + 3, gg.vertexPosition = h, gg.indexPosition = p, gg
    } || {},wO.renderer.webgl.PointsLayer = Eg || {},wO.reproj = {},wO.reproj.Image = Ff || {},wO.reproj.Tile = Mp || {},wO.reproj.Triangulation = Ip || {},wO.reproj.calculateSourceExtentResolution = ec || {},wO.reproj.calculateSourceResolution = tc || {},wO.reproj.common = {},wO.reproj.common.ENABLE_RASTER_REPROJECTION = !0,wO.reproj.common.ERROR_THRESHOLD = .5,wO.reproj.render = rc || {},wO.resolutionconstraint = {},wO.resolutionconstraint.createMinMaxResolution = ds || {},wO.resolutionconstraint.createSnapToPower = fs || {},wO.resolutionconstraint.createSnapToResolutions = ps || {},wO.rotationconstraint = {},wO.rotationconstraint.createSnapToN = ms || {},wO.rotationconstraint.createSnapToZero = vs || {},wO.rotationconstraint.disable = gs || {},wO.rotationconstraint.none = ys || {},wO.size = {},wO.size.buffer = Os || {},wO.size.hasArea = Ps || {},wO.size.scale = Rs || {},wO.size.toSize = Is || {},wO.source = {},wO.source.BingMaps = Hp || {},wO.source.BingMaps.quadKey = Kp || {},wO.source.CartoDB = tf || {},wO.source.Cluster = ff || {},wO.source.IIIF = Lf || {},wO.source.Image = zf || {},wO.source.Image.ImageSourceEvent = Df || {},wO.source.Image.defaultImageLoadFunction = Gf || {},wO.source.ImageArcGISRest = Bf || {},wO.source.ImageCanvas = Yf || {},wO.source.ImageMapGuide = qf || {},wO.source.ImageStatic = Zf || {},wO.source.ImageWMS = ed || {},wO.source.OSM = id || {},wO.source.OSM.ATTRIBUTION = nd,wO.source.Raster = zd || {},wO.source.Raster.Processor = Id || {},wO.source.Raster.RasterSourceEvent = kd || {},wO.source.Raster.newImageData = Od || {},wO.source.Source = Dp || {},wO.source.Stamen = Wd || {},wO.source.Tile = Bp || {},wO.source.Tile.TileSourceEvent = Up || {},wO.source.TileArcGISRest = Xd || {},wO.source.TileDebug = Hd || {},wO.source.TileImage = Xp || {},wO.source.TileJSON = Jd || {},wO.source.TileWMS = tg || {},wO.source.UTFGrid = ng || {},wO.source.UTFGrid.CustomTile = rg || {},wO.source.UrlTile = Yp || {},wO.source.Vector = hf || {},wO.source.Vector.VectorSourceEvent = cf || {},wO.source.VectorTile = og || {},wO.source.VectorTile.defaultLoadFunction = ag || {},wO.source.WMTS = cg || {},wO.source.WMTS.optionsFromCapabilities = function (t, e) {
      var r = _(t.Contents.Layer, (function (t, r, n) {
        return t.Identifier == e.layer
      }));
      if (null === r) return null;
      var n, i = t.Contents.TileMatrixSet;
      (n = r.TileMatrixSetLink.length > 1 ? x(r.TileMatrixSetLink, "projection" in e ? function (t, r, n) {
        var o = _(i, (function (e) {
          return e.Identifier == t.TileMatrixSet
        })).SupportedCRS, a = Gr(o), s = Gr(e.projection);
        return a && s ? Xr(a, s) : o == e.projection
      } : function (t, r, n) {
        return t.TileMatrixSet == e.matrixSet
      }) : 0) < 0 && (n = 0);
      var o = r.TileMatrixSetLink[n].TileMatrixSet, a = r.TileMatrixSetLink[n].TileMatrixSetLimits, s = r.Format[0];
      "format" in e && (s = e.format), (n = x(r.Style, (function (t, r, n) {
        return "style" in e ? t.Title == e.style : t.isDefault
      }))) < 0 && (n = 0);
      var l = r.Style[n].Identifier, u = {};
      "Dimension" in r && r.Dimension.forEach((function (t, e, r) {
        var n = t.Identifier, i = t.Default;
        void 0 === i && (i = t.Value[0]), u[n] = i
      }));
      var c, h = _(t.Contents.TileMatrixSet, (function (t, e, r) {
        return t.Identifier == o
      })), p = h.SupportedCRS;
      if (p && (c = Gr(p)), "projection" in e) {
        var f = Gr(e.projection);
        f && (c && !Xr(f, c) || (c = f))
      }
      var d = "ne" == c.getAxisOrientation().substr(0, 2), y = h.TileMatrix[0],
        m = {MinTileCol: 0, MinTileRow: 0, MaxTileCol: y.MatrixWidth - 1, MaxTileRow: y.MatrixHeight - 1};
      if (a) {
        m = a[a.length - 1];
        var v = _(h.TileMatrix, (function (t) {
          return t.Identifier === m.TileMatrix || h.Identifier + ":" + t.Identifier === m.TileMatrix
        }));
        v && (y = v)
      }
      var b = 28e-5 * y.ScaleDenominator / c.getMetersPerUnit(),
        w = d ? [y.TopLeftCorner[1], y.TopLeftCorner[0]] : y.TopLeftCorner, S = y.TileWidth * b, E = y.TileHeight * b,
        T = [w[0] + S * m.MinTileCol, w[1] - E * (1 + m.MaxTileRow), w[0] + S * (1 + m.MaxTileCol), w[1] - E * m.MinTileRow];
      null === c.getExtent() && c.setExtent(T);
      var C = Kh(h, T, a), O = [], P = e.requestEncoding;
      if (P = void 0 !== P ? P : "", "OperationsMetadata" in t && "GetTile" in t.OperationsMetadata) for (var R = t.OperationsMetadata.GetTile.DCP.HTTP.Get, I = 0, L = R.length; I < L; ++I) if (R[I].Constraint) {
        var M = _(R[I].Constraint, (function (t) {
          return "GetEncoding" == t.name
        })).AllowedValues.Value;
        if ("" === P && (P = M[0]), P !== sg) break;
        g(M, sg) && O.push(R[I].href)
      } else R[I].href && (P = sg, O.push(R[I].href));
      return 0 === O.length && (P = lg, r.ResourceURL.forEach((function (t) {
        "tile" === t.resourceType && (s = t.format, O.push(t.template))
      }))), {
        urls: O,
        layer: e.layer,
        matrixSet: o,
        format: s,
        projection: c,
        requestEncoding: P,
        tileGrid: C,
        style: l,
        dimensions: u,
        wrapX: !1,
        crossOrigin: e.crossOrigin
      }
    } || {},wO.source.XYZ = Jp || {},wO.source.Zoomify = vf || {},wO.source.Zoomify.CustomTile = mf || {},wO.source.common = {},wO.source.common.DEFAULT_WMS_VERSION = "1.3.0",wO.source.common.IMAGE_SMOOTHING_DISABLED = $u || {},wO.sphere = {},wO.sphere.DEFAULT_RADIUS = 6371008.8,wO.sphere.getArea = function t(e, r) {
      var n = r || {}, i = n.radius || 6371008.8, o = n.projection || "EPSG:3857", a = e.getType();
      a !== bt.GEOMETRY_COLLECTION && (e = e.clone().transform(o, "EPSG:4326"));
      var s, l, u, c, h, p, f = 0;
      switch (a) {
        case bt.POINT:
        case bt.MULTI_POINT:
        case bt.LINE_STRING:
        case bt.MULTI_LINE_STRING:
        case bt.LINEAR_RING:
          break;
        case bt.POLYGON:
          for (s = e.getCoordinates(), f = Math.abs(mr(s[0], i)), u = 1, c = s.length; u < c; ++u) f -= Math.abs(mr(s[u], i));
          break;
        case bt.MULTI_POLYGON:
          for (u = 0, c = (s = e.getCoordinates()).length; u < c; ++u) for (l = s[u], f += Math.abs(mr(l[0], i)), h = 1, p = l.length; h < p; ++h) f -= Math.abs(mr(l[h], i));
          break;
        case bt.GEOMETRY_COLLECTION:
          var d = e.getGeometries();
          for (u = 0, c = d.length; u < c; ++u) f += t(d[u], r);
          break;
        default:
          throw new Error("Unsupported geometry type: " + a)
      }
      return f
    } || {},wO.sphere.getDistance = gr || {},wO.sphere.getLength = function t(e, r) {
      var n = r || {}, i = n.radius || 6371008.8, o = n.projection || "EPSG:3857", a = e.getType();
      a !== bt.GEOMETRY_COLLECTION && (e = e.clone().transform(o, "EPSG:4326"));
      var s, l, u, c, h, p, f = 0;
      switch (a) {
        case bt.POINT:
        case bt.MULTI_POINT:
          break;
        case bt.LINE_STRING:
        case bt.LINEAR_RING:
          f = yr(s = e.getCoordinates(), i);
          break;
        case bt.MULTI_LINE_STRING:
        case bt.POLYGON:
          for (u = 0, c = (s = e.getCoordinates()).length; u < c; ++u) f += yr(s[u], i);
          break;
        case bt.MULTI_POLYGON:
          for (u = 0, c = (s = e.getCoordinates()).length; u < c; ++u) for (h = 0, p = (l = s[u]).length; h < p; ++h) f += yr(l[h], i);
          break;
        case bt.GEOMETRY_COLLECTION:
          var d = e.getGeometries();
          for (u = 0, c = d.length; u < c; ++u) f += t(d[u], r);
          break;
        default:
          throw new Error("Unsupported geometry type: " + a)
      }
      return f
    } || {},wO.sphere.offset = vr || {},wO.string = {},wO.string.compareVersions = br || {},wO.string.padNumber = _r || {},wO.structs = {},wO.structs.LRUCache = lu || {},wO.structs.LinkedList = Cp || {},wO.structs.PriorityQueue = Qa || {},wO.structs.PriorityQueue.DROP = 1 / 0,wO.structs.RBush = Rp || {},wO.style = {},wO.style.Circle = tp || {},wO.style.Fill = ep || {},wO.style.Icon = dp || {},wO.style.IconImage = pp || {},wO.style.IconImage.get = hp || {},wO.style.IconImageCache = Fo || {},wO.style.IconImageCache.shared = Ao || {},wO.style.Image = Hh || {},wO.style.LiteralStyle = {},wO.style.RegularShape = Jh || {},wO.style.Stroke = gp || {},wO.style.Style = wp || {},wO.style.Style.createDefaultStyle = _p || {},wO.style.Style.createEditingStyle = bp || {},wO.style.Style.toFunction = mp || {},wO.style.Text = Tp || {},wO.style.expressions = {},wO.style.expressions.Operators = Eh || {},wO.style.expressions.arrayToGlsl = Ph || {},wO.style.expressions.colorToGlsl = Rh || {},wO.style.expressions.expressionToGlsl = Mh || {},wO.style.expressions.getStringNumberEquivalent = Ih || {},wO.style.expressions.getValueType = Th || {},wO.style.expressions.isTypeUnique = Ch || {},wO.style.expressions.numberToGlsl = Oh || {},wO.style.expressions.stringToGlsl = Lh || {},wO.tilecoord = {},wO.tilecoord.createOrUpdate = uu || {},wO.tilecoord.fromKey = pu || {},wO.tilecoord.getKey = hu || {},wO.tilecoord.getKeyZXY = cu || {},wO.tilecoord.hash = fu || {},wO.tilecoord.withinExtentAndZ = du || {},wO.tilegrid = {},wO.tilegrid.TileGrid = ic || {},wO.tilegrid.WMTS = Zh || {},wO.tilegrid.WMTS.createFromCapabilitiesMatrixSet = Kh || {},wO.tilegrid.common = {},wO.tilegrid.common.DEFAULT_MAX_ZOOM = 42,wO.tilegrid.common.DEFAULT_TILE_SIZE = 256,wO.tilegrid.createForExtent = sc || {},wO.tilegrid.createForProjection = cc || {},wO.tilegrid.createXYZ = lc || {},wO.tilegrid.extentFromProjection = hc || {},wO.tilegrid.getForProjection = oc || {},wO.tilegrid.wrapX = ac || {},wO.tileurlfunction = {},wO.tileurlfunction.createFromTemplate = pc || {},wO.tileurlfunction.createFromTemplates = fc || {},wO.tileurlfunction.createFromTileUrlFunctions = dc || {},wO.tileurlfunction.expandUrl = yc || {},wO.tileurlfunction.nullTileUrlFunction = gc || {},wO.transform = {},wO.transform.apply = It || {},wO.transform.compose = kt || {},wO.transform.composeCssTransform = function (t, e, r, n, i, o, a) {
      return Dt(kt([1, 0, 0, 1, 0, 0], t, e, r, n, i, o, a))
    } || {},wO.transform.create = Tt || {},wO.transform.determinant = Nt || {},wO.transform.invert = function (t) {
      return jt(t, t)
    } || {},wO.transform.makeInverse = jt || {},wO.transform.makeScale = Ft || {},wO.transform.multiply = Ot || {},wO.transform.reset = Ct || {},wO.transform.rotate = Lt || {},wO.transform.scale = Mt || {},wO.transform.set = Pt || {},wO.transform.setFromArray = Rt || {},wO.transform.toString = Dt || {},wO.transform.translate = At || {},wO.uri = {},wO.uri.appendParams = mc || {},wO.util = {},wO.util.VERSION = "6.5.0",wO.util.abstract = n || {},wO.util.getUid = o || {},wO.vec = {},wO.vec.mat4 = {},wO.vec.mat4.create = nh || {},wO.vec.mat4.fromTransform = ih || {},wO.webgl = {},wO.webgl.ARRAY_BUFFER = 34962,wO.webgl.Buffer = Qc || {},wO.webgl.Buffer.getArrayClassForType = Jc || {},wO.webgl.DYNAMIC_DRAW = 35048,wO.webgl.ELEMENT_ARRAY_BUFFER = 34963,wO.webgl.FLOAT = 5126,wO.webgl.Helper = gh || {},wO.webgl.Helper.computeAttributesStride = fh || {};
    wO.webgl.PostProcessingPass = rh || {}, wO.webgl.RenderTarget = mh || {}, wO.webgl.STATIC_DRAW = 35044, wO.webgl.STREAM_DRAW = 35040, wO.webgl.ShaderBuilder = {}, wO.webgl.ShaderBuilder.ShaderBuilder = Yh || {}, wO.webgl.ShaderBuilder.parseLiteralStyle = Wh || {}, wO.webgl.UNSIGNED_BYTE = 5121, wO.webgl.UNSIGNED_INT = 5125, wO.webgl.UNSIGNED_SHORT = 5123, wO.webgl.getContext = bc || {}, wO.webgl.getSupportedExtensions = xc || {}, wO.worker = {}, wO.worker.version = {}, wO.worker.webgl = {}, wO.xml = {}, wO.xml.OBJECT_PROPERTY_NODE_FACTORY = Nc || {}, wO.xml.XML_SCHEMA_INSTANCE_URI = wc, wO.xml.createElementNS = Sc || {}, wO.xml.getAllTextContent = Ec || {}, wO.xml.getAllTextContent_ = Tc || {}, wO.xml.getAttributeNS = Oc || {}, wO.xml.getDocument = Xc || {}, wO.xml.getXMLSerializer = Wc || {}, wO.xml.isDocument = Cc || {}, wO.xml.makeArrayExtender = Rc || {}, wO.xml.makeArrayPusher = Ic || {}, wO.xml.makeArraySerializer = kc || {}, wO.xml.makeChildAppender = Ac || {}, wO.xml.makeObjectPropertyPusher = Mc || {}, wO.xml.makeObjectPropertySetter = Fc || {}, wO.xml.makeReplacer = Lc || {}, wO.xml.makeSequence = Dc || {}, wO.xml.makeSimpleNodeFactory = jc || {}, wO.xml.makeStructureNS = Gc || {}, wO.xml.parse = Pc || {}, wO.xml.parseNode = zc || {}, wO.xml.pushParseAndPop = Uc || {}, wO.xml.pushSerializeAndPop = Vc || {}, wO.xml.registerDocument = function (t) {
      qc = t
    } || {}, wO.xml.registerXMLSerializer = function (t) {
      Yc = t
    } || {}, wO.xml.serialize = Bc || {};
    e.default = wO
  }]).default
}));
//# sourceMappingURL=ol.js.map
