var xM = Object.defineProperty;
var vM = (m, a, d) => a in m ? xM(m, a, { enumerable: !0, configurable: !0, writable: !0, value: d }) : m[a] = d;
var Yt = (m, a, d) => (vM(m, typeof a != "symbol" ? a + "" : a, d), d);
/*!
 * @kurkle/color v0.3.4
 * https://github.com/kurkle/color#readme
 * (c) 2024 Jukka Kurkela
 * Released under the MIT License
 */
function Gf(m) {
  return m + 0.5 | 0;
}
const Ic = (m, a, d) => Math.max(Math.min(m, d), a);
function wf(m) {
  return Ic(Gf(m * 2.55), 0, 255);
}
function kc(m) {
  return Ic(Gf(m * 255), 0, 255);
}
function Fl(m) {
  return Ic(Gf(m / 2.55) / 100, 0, 1);
}
function $v(m) {
  return Ic(Gf(m * 100), 0, 100);
}
const sa = { 0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15 }, Gg = [..."0123456789ABCDEF"], bM = (m) => Gg[m & 15], wM = (m) => Gg[(m & 240) >> 4] + Gg[m & 15], um = (m) => (m & 240) >> 4 === (m & 15), TM = (m) => um(m.r) && um(m.g) && um(m.b) && um(m.a);
function MM(m) {
  var a = m.length, d;
  return m[0] === "#" && (a === 4 || a === 5 ? d = {
    r: 255 & sa[m[1]] * 17,
    g: 255 & sa[m[2]] * 17,
    b: 255 & sa[m[3]] * 17,
    a: a === 5 ? sa[m[4]] * 17 : 255
  } : (a === 7 || a === 9) && (d = {
    r: sa[m[1]] << 4 | sa[m[2]],
    g: sa[m[3]] << 4 | sa[m[4]],
    b: sa[m[5]] << 4 | sa[m[6]],
    a: a === 9 ? sa[m[7]] << 4 | sa[m[8]] : 255
  })), d;
}
const SM = (m, a) => m < 255 ? a(m) : "";
function EM(m) {
  var a = TM(m) ? bM : wM;
  return m ? "#" + a(m.r) + a(m.g) + a(m.b) + SM(m.a, a) : void 0;
}
const PM = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
function bb(m, a, d) {
  const g = a * Math.min(d, 1 - d), w = (b, E = (b + m / 30) % 12) => d - g * Math.max(Math.min(E - 3, 9 - E, 1), -1);
  return [w(0), w(8), w(4)];
}
function AM(m, a, d) {
  const g = (w, b = (w + m / 60) % 6) => d - d * a * Math.max(Math.min(b, 4 - b, 1), 0);
  return [g(5), g(3), g(1)];
}
function CM(m, a, d) {
  const g = bb(m, 1, 0.5);
  let w;
  for (a + d > 1 && (w = 1 / (a + d), a *= w, d *= w), w = 0; w < 3; w++)
    g[w] *= 1 - a - d, g[w] += a;
  return g;
}
function IM(m, a, d, g, w) {
  return m === w ? (a - d) / g + (a < d ? 6 : 0) : a === w ? (d - m) / g + 2 : (m - a) / g + 4;
}
function ay(m) {
  const d = m.r / 255, g = m.g / 255, w = m.b / 255, b = Math.max(d, g, w), E = Math.min(d, g, w), i = (b + E) / 2;
  let O, j, Y;
  return b !== E && (Y = b - E, j = i > 0.5 ? Y / (2 - b - E) : Y / (b + E), O = IM(d, g, w, Y, b), O = O * 60 + 0.5), [O | 0, j || 0, i];
}
function ly(m, a, d, g) {
  return (Array.isArray(a) ? m(a[0], a[1], a[2]) : m(a, d, g)).map(kc);
}
function cy(m, a, d) {
  return ly(bb, m, a, d);
}
function LM(m, a, d) {
  return ly(CM, m, a, d);
}
function zM(m, a, d) {
  return ly(AM, m, a, d);
}
function wb(m) {
  return (m % 360 + 360) % 360;
}
function DM(m) {
  const a = PM.exec(m);
  let d = 255, g;
  if (!a)
    return;
  a[5] !== g && (d = a[6] ? wf(+a[5]) : kc(+a[5]));
  const w = wb(+a[2]), b = +a[3] / 100, E = +a[4] / 100;
  return a[1] === "hwb" ? g = LM(w, b, E) : a[1] === "hsv" ? g = zM(w, b, E) : g = cy(w, b, E), {
    r: g[0],
    g: g[1],
    b: g[2],
    a: d
  };
}
function kM(m, a) {
  var d = ay(m);
  d[0] = wb(d[0] + a), d = cy(d), m.r = d[0], m.g = d[1], m.b = d[2];
}
function RM(m) {
  if (!m)
    return;
  const a = ay(m), d = a[0], g = $v(a[1]), w = $v(a[2]);
  return m.a < 255 ? `hsla(${d}, ${g}%, ${w}%, ${Fl(m.a)})` : `hsl(${d}, ${g}%, ${w}%)`;
}
const Xv = {
  x: "dark",
  Z: "light",
  Y: "re",
  X: "blu",
  W: "gr",
  V: "medium",
  U: "slate",
  A: "ee",
  T: "ol",
  S: "or",
  B: "ra",
  C: "lateg",
  D: "ights",
  R: "in",
  Q: "turquois",
  E: "hi",
  P: "ro",
  O: "al",
  N: "le",
  M: "de",
  L: "yello",
  F: "en",
  K: "ch",
  G: "arks",
  H: "ea",
  I: "ightg",
  J: "wh"
}, Yv = {
  OiceXe: "f0f8ff",
  antiquewEte: "faebd7",
  aqua: "ffff",
  aquamarRe: "7fffd4",
  azuY: "f0ffff",
  beige: "f5f5dc",
  bisque: "ffe4c4",
  black: "0",
  blanKedOmond: "ffebcd",
  Xe: "ff",
  XeviTet: "8a2be2",
  bPwn: "a52a2a",
  burlywood: "deb887",
  caMtXe: "5f9ea0",
  KartYuse: "7fff00",
  KocTate: "d2691e",
  cSO: "ff7f50",
  cSnflowerXe: "6495ed",
  cSnsilk: "fff8dc",
  crimson: "dc143c",
  cyan: "ffff",
  xXe: "8b",
  xcyan: "8b8b",
  xgTMnPd: "b8860b",
  xWay: "a9a9a9",
  xgYF: "6400",
  xgYy: "a9a9a9",
  xkhaki: "bdb76b",
  xmagFta: "8b008b",
  xTivegYF: "556b2f",
  xSange: "ff8c00",
  xScEd: "9932cc",
  xYd: "8b0000",
  xsOmon: "e9967a",
  xsHgYF: "8fbc8f",
  xUXe: "483d8b",
  xUWay: "2f4f4f",
  xUgYy: "2f4f4f",
  xQe: "ced1",
  xviTet: "9400d3",
  dAppRk: "ff1493",
  dApskyXe: "bfff",
  dimWay: "696969",
  dimgYy: "696969",
  dodgerXe: "1e90ff",
  fiYbrick: "b22222",
  flSOwEte: "fffaf0",
  foYstWAn: "228b22",
  fuKsia: "ff00ff",
  gaRsbSo: "dcdcdc",
  ghostwEte: "f8f8ff",
  gTd: "ffd700",
  gTMnPd: "daa520",
  Way: "808080",
  gYF: "8000",
  gYFLw: "adff2f",
  gYy: "808080",
  honeyMw: "f0fff0",
  hotpRk: "ff69b4",
  RdianYd: "cd5c5c",
  Rdigo: "4b0082",
  ivSy: "fffff0",
  khaki: "f0e68c",
  lavFMr: "e6e6fa",
  lavFMrXsh: "fff0f5",
  lawngYF: "7cfc00",
  NmoncEffon: "fffacd",
  ZXe: "add8e6",
  ZcSO: "f08080",
  Zcyan: "e0ffff",
  ZgTMnPdLw: "fafad2",
  ZWay: "d3d3d3",
  ZgYF: "90ee90",
  ZgYy: "d3d3d3",
  ZpRk: "ffb6c1",
  ZsOmon: "ffa07a",
  ZsHgYF: "20b2aa",
  ZskyXe: "87cefa",
  ZUWay: "778899",
  ZUgYy: "778899",
  ZstAlXe: "b0c4de",
  ZLw: "ffffe0",
  lime: "ff00",
  limegYF: "32cd32",
  lRF: "faf0e6",
  magFta: "ff00ff",
  maPon: "800000",
  VaquamarRe: "66cdaa",
  VXe: "cd",
  VScEd: "ba55d3",
  VpurpN: "9370db",
  VsHgYF: "3cb371",
  VUXe: "7b68ee",
  VsprRggYF: "fa9a",
  VQe: "48d1cc",
  VviTetYd: "c71585",
  midnightXe: "191970",
  mRtcYam: "f5fffa",
  mistyPse: "ffe4e1",
  moccasR: "ffe4b5",
  navajowEte: "ffdead",
  navy: "80",
  Tdlace: "fdf5e6",
  Tive: "808000",
  TivedBb: "6b8e23",
  Sange: "ffa500",
  SangeYd: "ff4500",
  ScEd: "da70d6",
  pOegTMnPd: "eee8aa",
  pOegYF: "98fb98",
  pOeQe: "afeeee",
  pOeviTetYd: "db7093",
  papayawEp: "ffefd5",
  pHKpuff: "ffdab9",
  peru: "cd853f",
  pRk: "ffc0cb",
  plum: "dda0dd",
  powMrXe: "b0e0e6",
  purpN: "800080",
  YbeccapurpN: "663399",
  Yd: "ff0000",
  Psybrown: "bc8f8f",
  PyOXe: "4169e1",
  saddNbPwn: "8b4513",
  sOmon: "fa8072",
  sandybPwn: "f4a460",
  sHgYF: "2e8b57",
  sHshell: "fff5ee",
  siFna: "a0522d",
  silver: "c0c0c0",
  skyXe: "87ceeb",
  UXe: "6a5acd",
  UWay: "708090",
  UgYy: "708090",
  snow: "fffafa",
  sprRggYF: "ff7f",
  stAlXe: "4682b4",
  tan: "d2b48c",
  teO: "8080",
  tEstN: "d8bfd8",
  tomato: "ff6347",
  Qe: "40e0d0",
  viTet: "ee82ee",
  JHt: "f5deb3",
  wEte: "ffffff",
  wEtesmoke: "f5f5f5",
  Lw: "ffff00",
  LwgYF: "9acd32"
};
function OM() {
  const m = {}, a = Object.keys(Yv), d = Object.keys(Xv);
  let g, w, b, E, i;
  for (g = 0; g < a.length; g++) {
    for (E = i = a[g], w = 0; w < d.length; w++)
      b = d[w], i = i.replace(b, Xv[b]);
    b = parseInt(Yv[E], 16), m[i] = [b >> 16 & 255, b >> 8 & 255, b & 255];
  }
  return m;
}
let dm;
function FM(m) {
  dm || (dm = OM(), dm.transparent = [0, 0, 0, 0]);
  const a = dm[m.toLowerCase()];
  return a && {
    r: a[0],
    g: a[1],
    b: a[2],
    a: a.length === 4 ? a[3] : 255
  };
}
const BM = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
function NM(m) {
  const a = BM.exec(m);
  let d = 255, g, w, b;
  if (a) {
    if (a[7] !== g) {
      const E = +a[7];
      d = a[8] ? wf(E) : Ic(E * 255, 0, 255);
    }
    return g = +a[1], w = +a[3], b = +a[5], g = 255 & (a[2] ? wf(g) : Ic(g, 0, 255)), w = 255 & (a[4] ? wf(w) : Ic(w, 0, 255)), b = 255 & (a[6] ? wf(b) : Ic(b, 0, 255)), {
      r: g,
      g: w,
      b,
      a: d
    };
  }
}
function VM(m) {
  return m && (m.a < 255 ? `rgba(${m.r}, ${m.g}, ${m.b}, ${Fl(m.a)})` : `rgb(${m.r}, ${m.g}, ${m.b})`);
}
const Ig = (m) => m <= 31308e-7 ? m * 12.92 : Math.pow(m, 1 / 2.4) * 1.055 - 0.055, qu = (m) => m <= 0.04045 ? m / 12.92 : Math.pow((m + 0.055) / 1.055, 2.4);
function UM(m, a, d) {
  const g = qu(Fl(m.r)), w = qu(Fl(m.g)), b = qu(Fl(m.b));
  return {
    r: kc(Ig(g + d * (qu(Fl(a.r)) - g))),
    g: kc(Ig(w + d * (qu(Fl(a.g)) - w))),
    b: kc(Ig(b + d * (qu(Fl(a.b)) - b))),
    a: m.a + d * (a.a - m.a)
  };
}
function fm(m, a, d) {
  if (m) {
    let g = ay(m);
    g[a] = Math.max(0, Math.min(g[a] + g[a] * d, a === 0 ? 360 : 1)), g = cy(g), m.r = g[0], m.g = g[1], m.b = g[2];
  }
}
function Tb(m, a) {
  return m && Object.assign(a || {}, m);
}
function Kv(m) {
  var a = { r: 0, g: 0, b: 0, a: 255 };
  return Array.isArray(m) ? m.length >= 3 && (a = { r: m[0], g: m[1], b: m[2], a: 255 }, m.length > 3 && (a.a = kc(m[3]))) : (a = Tb(m, { r: 0, g: 0, b: 0, a: 1 }), a.a = kc(a.a)), a;
}
function jM(m) {
  return m.charAt(0) === "r" ? NM(m) : DM(m);
}
class kf {
  constructor(a) {
    if (a instanceof kf)
      return a;
    const d = typeof a;
    let g;
    d === "object" ? g = Kv(a) : d === "string" && (g = MM(a) || FM(a) || jM(a)), this._rgb = g, this._valid = !!g;
  }
  get valid() {
    return this._valid;
  }
  get rgb() {
    var a = Tb(this._rgb);
    return a && (a.a = Fl(a.a)), a;
  }
  set rgb(a) {
    this._rgb = Kv(a);
  }
  rgbString() {
    return this._valid ? VM(this._rgb) : void 0;
  }
  hexString() {
    return this._valid ? EM(this._rgb) : void 0;
  }
  hslString() {
    return this._valid ? RM(this._rgb) : void 0;
  }
  mix(a, d) {
    if (a) {
      const g = this.rgb, w = a.rgb;
      let b;
      const E = d === b ? 0.5 : d, i = 2 * E - 1, O = g.a - w.a, j = ((i * O === -1 ? i : (i + O) / (1 + i * O)) + 1) / 2;
      b = 1 - j, g.r = 255 & j * g.r + b * w.r + 0.5, g.g = 255 & j * g.g + b * w.g + 0.5, g.b = 255 & j * g.b + b * w.b + 0.5, g.a = E * g.a + (1 - E) * w.a, this.rgb = g;
    }
    return this;
  }
  interpolate(a, d) {
    return a && (this._rgb = UM(this._rgb, a._rgb, d)), this;
  }
  clone() {
    return new kf(this.rgb);
  }
  alpha(a) {
    return this._rgb.a = kc(a), this;
  }
  clearer(a) {
    const d = this._rgb;
    return d.a *= 1 - a, this;
  }
  greyscale() {
    const a = this._rgb, d = Gf(a.r * 0.3 + a.g * 0.59 + a.b * 0.11);
    return a.r = a.g = a.b = d, this;
  }
  opaquer(a) {
    const d = this._rgb;
    return d.a *= 1 + a, this;
  }
  negate() {
    const a = this._rgb;
    return a.r = 255 - a.r, a.g = 255 - a.g, a.b = 255 - a.b, this;
  }
  lighten(a) {
    return fm(this._rgb, 2, a), this;
  }
  darken(a) {
    return fm(this._rgb, 2, -a), this;
  }
  saturate(a) {
    return fm(this._rgb, 1, a), this;
  }
  desaturate(a) {
    return fm(this._rgb, 1, -a), this;
  }
  rotate(a) {
    return kM(this._rgb, a), this;
  }
}
/*!
 * Chart.js v4.4.7
 * https://www.chartjs.org
 * (c) 2024 Chart.js Contributors
 * Released under the MIT License
 */
function kl() {
}
const GM = (() => {
  let m = 0;
  return () => m++;
})();
function En(m) {
  return m == null;
}
function hs(m) {
  if (Array.isArray && Array.isArray(m))
    return !0;
  const a = Object.prototype.toString.call(m);
  return a.slice(0, 7) === "[object" && a.slice(-6) === "Array]";
}
function yn(m) {
  return m !== null && Object.prototype.toString.call(m) === "[object Object]";
}
function As(m) {
  return (typeof m == "number" || m instanceof Number) && isFinite(+m);
}
function Bo(m, a) {
  return As(m) ? m : a;
}
function en(m, a) {
  return typeof m > "u" ? a : m;
}
const ZM = (m, a) => typeof m == "string" && m.endsWith("%") ? parseFloat(m) / 100 : +m / a, Mb = (m, a) => typeof m == "string" && m.endsWith("%") ? parseFloat(m) / 100 * a : +m;
function is(m, a, d) {
  if (m && typeof m.call == "function")
    return m.apply(d, a);
}
function Zn(m, a, d, g) {
  let w, b, E;
  if (hs(m))
    if (b = m.length, g)
      for (w = b - 1; w >= 0; w--)
        a.call(d, m[w], w);
    else
      for (w = 0; w < b; w++)
        a.call(d, m[w], w);
  else if (yn(m))
    for (E = Object.keys(m), b = E.length, w = 0; w < b; w++)
      a.call(d, m[E[w]], E[w]);
}
function Om(m, a) {
  let d, g, w, b;
  if (!m || !a || m.length !== a.length)
    return !1;
  for (d = 0, g = m.length; d < g; ++d)
    if (w = m[d], b = a[d], w.datasetIndex !== b.datasetIndex || w.index !== b.index)
      return !1;
  return !0;
}
function Fm(m) {
  if (hs(m))
    return m.map(Fm);
  if (yn(m)) {
    const a = /* @__PURE__ */ Object.create(null), d = Object.keys(m), g = d.length;
    let w = 0;
    for (; w < g; ++w)
      a[d[w]] = Fm(m[d[w]]);
    return a;
  }
  return m;
}
function Sb(m) {
  return [
    "__proto__",
    "prototype",
    "constructor"
  ].indexOf(m) === -1;
}
function HM(m, a, d, g) {
  if (!Sb(m))
    return;
  const w = a[m], b = d[m];
  yn(w) && yn(b) ? Rf(w, b, g) : a[m] = Fm(b);
}
function Rf(m, a, d) {
  const g = hs(a) ? a : [
    a
  ], w = g.length;
  if (!yn(m))
    return m;
  d = d || {};
  const b = d.merger || HM;
  let E;
  for (let i = 0; i < w; ++i) {
    if (E = g[i], !yn(E))
      continue;
    const O = Object.keys(E);
    for (let j = 0, Y = O.length; j < Y; ++j)
      b(O[j], m, E, d);
  }
  return m;
}
function Cf(m, a) {
  return Rf(m, a, {
    merger: qM
  });
}
function qM(m, a, d) {
  if (!Sb(m))
    return;
  const g = a[m], w = d[m];
  yn(g) && yn(w) ? Cf(g, w) : Object.prototype.hasOwnProperty.call(a, m) || (a[m] = Fm(w));
}
const Jv = {
  // Chart.helpers.core resolveObjectKey should resolve empty key to root object
  "": (m) => m,
  // default resolvers
  x: (m) => m.x,
  y: (m) => m.y
};
function WM(m) {
  const a = m.split("."), d = [];
  let g = "";
  for (const w of a)
    g += w, g.endsWith("\\") ? g = g.slice(0, -1) + "." : (d.push(g), g = "");
  return d;
}
function $M(m) {
  const a = WM(m);
  return (d) => {
    for (const g of a) {
      if (g === "")
        break;
      d = d && d[g];
    }
    return d;
  };
}
function Rc(m, a) {
  return (Jv[a] || (Jv[a] = $M(a)))(m);
}
function hy(m) {
  return m.charAt(0).toUpperCase() + m.slice(1);
}
const Of = (m) => typeof m < "u", Oc = (m) => typeof m == "function", Qv = (m, a) => {
  if (m.size !== a.size)
    return !1;
  for (const d of m)
    if (!a.has(d))
      return !1;
  return !0;
};
function XM(m) {
  return m.type === "mouseup" || m.type === "click" || m.type === "contextmenu";
}
const ds = Math.PI, us = 2 * ds, YM = us + ds, Bm = Number.POSITIVE_INFINITY, KM = ds / 180, Ns = ds / 2, Ph = ds / 4, e1 = ds * 2 / 3, Lc = Math.log10, ll = Math.sign;
function If(m, a, d) {
  return Math.abs(m - a) < d;
}
function t1(m) {
  const a = Math.round(m);
  m = If(m, a, m / 1e3) ? a : m;
  const d = Math.pow(10, Math.floor(Lc(m))), g = m / d;
  return (g <= 1 ? 1 : g <= 2 ? 2 : g <= 5 ? 5 : 10) * d;
}
function JM(m) {
  const a = [], d = Math.sqrt(m);
  let g;
  for (g = 1; g < d; g++)
    m % g === 0 && (a.push(g), a.push(m / g));
  return d === (d | 0) && a.push(d), a.sort((w, b) => w - b).pop(), a;
}
function Xu(m) {
  return !isNaN(parseFloat(m)) && isFinite(m);
}
function QM(m, a) {
  const d = Math.round(m);
  return d - a <= m && d + a >= m;
}
function Eb(m, a, d) {
  let g, w, b;
  for (g = 0, w = m.length; g < w; g++)
    b = m[g][d], isNaN(b) || (a.min = Math.min(a.min, b), a.max = Math.max(a.max, b));
}
function Ia(m) {
  return m * (ds / 180);
}
function uy(m) {
  return m * (180 / ds);
}
function i1(m) {
  if (!As(m))
    return;
  let a = 1, d = 0;
  for (; Math.round(m * a) / a !== m; )
    a *= 10, d++;
  return d;
}
function Pb(m, a) {
  const d = a.x - m.x, g = a.y - m.y, w = Math.sqrt(d * d + g * g);
  let b = Math.atan2(g, d);
  return b < -0.5 * ds && (b += us), {
    angle: b,
    distance: w
  };
}
function Zg(m, a) {
  return Math.sqrt(Math.pow(a.x - m.x, 2) + Math.pow(a.y - m.y, 2));
}
function eS(m, a) {
  return (m - a + YM) % us - ds;
}
function No(m) {
  return (m % us + us) % us;
}
function Ff(m, a, d, g) {
  const w = No(m), b = No(a), E = No(d), i = No(b - w), O = No(E - w), j = No(w - b), Y = No(w - E);
  return w === b || w === E || g && b === E || i > O && j < Y;
}
function gr(m, a, d) {
  return Math.max(a, Math.min(d, m));
}
function tS(m) {
  return gr(m, -32768, 32767);
}
function Nl(m, a, d, g = 1e-6) {
  return m >= Math.min(a, d) - g && m <= Math.max(a, d) + g;
}
function dy(m, a, d) {
  d = d || ((E) => m[E] < a);
  let g = m.length - 1, w = 0, b;
  for (; g - w > 1; )
    b = w + g >> 1, d(b) ? w = b : g = b;
  return {
    lo: w,
    hi: g
  };
}
const Vl = (m, a, d, g) => dy(m, d, g ? (w) => {
  const b = m[w][a];
  return b < d || b === d && m[w + 1][a] === d;
} : (w) => m[w][a] < d), iS = (m, a, d) => dy(m, d, (g) => m[g][a] >= d);
function nS(m, a, d) {
  let g = 0, w = m.length;
  for (; g < w && m[g] < a; )
    g++;
  for (; w > g && m[w - 1] > d; )
    w--;
  return g > 0 || w < m.length ? m.slice(g, w) : m;
}
const Ab = [
  "push",
  "pop",
  "shift",
  "splice",
  "unshift"
];
function sS(m, a) {
  if (m._chartjs) {
    m._chartjs.listeners.push(a);
    return;
  }
  Object.defineProperty(m, "_chartjs", {
    configurable: !0,
    enumerable: !1,
    value: {
      listeners: [
        a
      ]
    }
  }), Ab.forEach((d) => {
    const g = "_onData" + hy(d), w = m[d];
    Object.defineProperty(m, d, {
      configurable: !0,
      enumerable: !1,
      value(...b) {
        const E = w.apply(this, b);
        return m._chartjs.listeners.forEach((i) => {
          typeof i[g] == "function" && i[g](...b);
        }), E;
      }
    });
  });
}
function n1(m, a) {
  const d = m._chartjs;
  if (!d)
    return;
  const g = d.listeners, w = g.indexOf(a);
  w !== -1 && g.splice(w, 1), !(g.length > 0) && (Ab.forEach((b) => {
    delete m[b];
  }), delete m._chartjs);
}
function Cb(m) {
  const a = new Set(m);
  return a.size === m.length ? m : Array.from(a);
}
const Ib = function() {
  return typeof window > "u" ? function(m) {
    return m();
  } : window.requestAnimationFrame;
}();
function Lb(m, a) {
  let d = [], g = !1;
  return function(...w) {
    d = w, g || (g = !0, Ib.call(window, () => {
      g = !1, m.apply(a, d);
    }));
  };
}
function rS(m, a) {
  let d;
  return function(...g) {
    return a ? (clearTimeout(d), d = setTimeout(m, a, g)) : m.apply(this, g), a;
  };
}
const fy = (m) => m === "start" ? "left" : m === "end" ? "right" : "center", Ur = (m, a, d) => m === "start" ? a : m === "end" ? d : (a + d) / 2, oS = (m, a, d, g) => m === (g ? "left" : "right") ? d : m === "center" ? (a + d) / 2 : a;
function zb(m, a, d) {
  const g = a.length;
  let w = 0, b = g;
  if (m._sorted) {
    const { iScale: E, _parsed: i } = m, O = E.axis, { min: j, max: Y, minDefined: J, maxDefined: ae } = E.getUserBounds();
    J && (w = gr(Math.min(
      // @ts-expect-error Need to type _parsed
      Vl(i, O, j).lo,
      // @ts-expect-error Need to fix types on _lookupByKey
      d ? g : Vl(a, O, E.getPixelForValue(j)).lo
    ), 0, g - 1)), ae ? b = gr(Math.max(
      // @ts-expect-error Need to type _parsed
      Vl(i, E.axis, Y, !0).hi + 1,
      // @ts-expect-error Need to fix types on _lookupByKey
      d ? 0 : Vl(a, O, E.getPixelForValue(Y), !0).hi + 1
    ), w, g) - w : b = g - w;
  }
  return {
    start: w,
    count: b
  };
}
function Db(m) {
  const { xScale: a, yScale: d, _scaleRanges: g } = m, w = {
    xmin: a.min,
    xmax: a.max,
    ymin: d.min,
    ymax: d.max
  };
  if (!g)
    return m._scaleRanges = w, !0;
  const b = g.xmin !== a.min || g.xmax !== a.max || g.ymin !== d.min || g.ymax !== d.max;
  return Object.assign(g, w), b;
}
const pm = (m) => m === 0 || m === 1, s1 = (m, a, d) => -(Math.pow(2, 10 * (m -= 1)) * Math.sin((m - a) * us / d)), r1 = (m, a, d) => Math.pow(2, -10 * m) * Math.sin((m - a) * us / d) + 1, Lf = {
  linear: (m) => m,
  easeInQuad: (m) => m * m,
  easeOutQuad: (m) => -m * (m - 2),
  easeInOutQuad: (m) => (m /= 0.5) < 1 ? 0.5 * m * m : -0.5 * (--m * (m - 2) - 1),
  easeInCubic: (m) => m * m * m,
  easeOutCubic: (m) => (m -= 1) * m * m + 1,
  easeInOutCubic: (m) => (m /= 0.5) < 1 ? 0.5 * m * m * m : 0.5 * ((m -= 2) * m * m + 2),
  easeInQuart: (m) => m * m * m * m,
  easeOutQuart: (m) => -((m -= 1) * m * m * m - 1),
  easeInOutQuart: (m) => (m /= 0.5) < 1 ? 0.5 * m * m * m * m : -0.5 * ((m -= 2) * m * m * m - 2),
  easeInQuint: (m) => m * m * m * m * m,
  easeOutQuint: (m) => (m -= 1) * m * m * m * m + 1,
  easeInOutQuint: (m) => (m /= 0.5) < 1 ? 0.5 * m * m * m * m * m : 0.5 * ((m -= 2) * m * m * m * m + 2),
  easeInSine: (m) => -Math.cos(m * Ns) + 1,
  easeOutSine: (m) => Math.sin(m * Ns),
  easeInOutSine: (m) => -0.5 * (Math.cos(ds * m) - 1),
  easeInExpo: (m) => m === 0 ? 0 : Math.pow(2, 10 * (m - 1)),
  easeOutExpo: (m) => m === 1 ? 1 : -Math.pow(2, -10 * m) + 1,
  easeInOutExpo: (m) => pm(m) ? m : m < 0.5 ? 0.5 * Math.pow(2, 10 * (m * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (m * 2 - 1)) + 2),
  easeInCirc: (m) => m >= 1 ? m : -(Math.sqrt(1 - m * m) - 1),
  easeOutCirc: (m) => Math.sqrt(1 - (m -= 1) * m),
  easeInOutCirc: (m) => (m /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - m * m) - 1) : 0.5 * (Math.sqrt(1 - (m -= 2) * m) + 1),
  easeInElastic: (m) => pm(m) ? m : s1(m, 0.075, 0.3),
  easeOutElastic: (m) => pm(m) ? m : r1(m, 0.075, 0.3),
  easeInOutElastic(m) {
    return pm(m) ? m : m < 0.5 ? 0.5 * s1(m * 2, 0.1125, 0.45) : 0.5 + 0.5 * r1(m * 2 - 1, 0.1125, 0.45);
  },
  easeInBack(m) {
    return m * m * ((1.70158 + 1) * m - 1.70158);
  },
  easeOutBack(m) {
    return (m -= 1) * m * ((1.70158 + 1) * m + 1.70158) + 1;
  },
  easeInOutBack(m) {
    let a = 1.70158;
    return (m /= 0.5) < 1 ? 0.5 * (m * m * (((a *= 1.525) + 1) * m - a)) : 0.5 * ((m -= 2) * m * (((a *= 1.525) + 1) * m + a) + 2);
  },
  easeInBounce: (m) => 1 - Lf.easeOutBounce(1 - m),
  easeOutBounce(m) {
    return m < 1 / 2.75 ? 7.5625 * m * m : m < 2 / 2.75 ? 7.5625 * (m -= 1.5 / 2.75) * m + 0.75 : m < 2.5 / 2.75 ? 7.5625 * (m -= 2.25 / 2.75) * m + 0.9375 : 7.5625 * (m -= 2.625 / 2.75) * m + 0.984375;
  },
  easeInOutBounce: (m) => m < 0.5 ? Lf.easeInBounce(m * 2) * 0.5 : Lf.easeOutBounce(m * 2 - 1) * 0.5 + 0.5
};
function py(m) {
  if (m && typeof m == "object") {
    const a = m.toString();
    return a === "[object CanvasPattern]" || a === "[object CanvasGradient]";
  }
  return !1;
}
function o1(m) {
  return py(m) ? m : new kf(m);
}
function Lg(m) {
  return py(m) ? m : new kf(m).saturate(0.5).darken(0.1).hexString();
}
const aS = [
  "x",
  "y",
  "borderWidth",
  "radius",
  "tension"
], lS = [
  "color",
  "borderColor",
  "backgroundColor"
];
function cS(m) {
  m.set("animation", {
    delay: void 0,
    duration: 1e3,
    easing: "easeOutQuart",
    fn: void 0,
    from: void 0,
    loop: void 0,
    to: void 0,
    type: void 0
  }), m.describe("animation", {
    _fallback: !1,
    _indexable: !1,
    _scriptable: (a) => a !== "onProgress" && a !== "onComplete" && a !== "fn"
  }), m.set("animations", {
    colors: {
      type: "color",
      properties: lS
    },
    numbers: {
      type: "number",
      properties: aS
    }
  }), m.describe("animations", {
    _fallback: "animation"
  }), m.set("transitions", {
    active: {
      animation: {
        duration: 400
      }
    },
    resize: {
      animation: {
        duration: 0
      }
    },
    show: {
      animations: {
        colors: {
          from: "transparent"
        },
        visible: {
          type: "boolean",
          duration: 0
        }
      }
    },
    hide: {
      animations: {
        colors: {
          to: "transparent"
        },
        visible: {
          type: "boolean",
          easing: "linear",
          fn: (a) => a | 0
        }
      }
    }
  });
}
function hS(m) {
  m.set("layout", {
    autoPadding: !0,
    padding: {
      top: 0,
      right: 0,
      bottom: 0,
      left: 0
    }
  });
}
const a1 = /* @__PURE__ */ new Map();
function uS(m, a) {
  a = a || {};
  const d = m + JSON.stringify(a);
  let g = a1.get(d);
  return g || (g = new Intl.NumberFormat(m, a), a1.set(d, g)), g;
}
function Zf(m, a, d) {
  return uS(a, d).format(m);
}
const kb = {
  values(m) {
    return hs(m) ? m : "" + m;
  },
  numeric(m, a, d) {
    if (m === 0)
      return "0";
    const g = this.chart.options.locale;
    let w, b = m;
    if (d.length > 1) {
      const j = Math.max(Math.abs(d[0].value), Math.abs(d[d.length - 1].value));
      (j < 1e-4 || j > 1e15) && (w = "scientific"), b = dS(m, d);
    }
    const E = Lc(Math.abs(b)), i = isNaN(E) ? 1 : Math.max(Math.min(-1 * Math.floor(E), 20), 0), O = {
      notation: w,
      minimumFractionDigits: i,
      maximumFractionDigits: i
    };
    return Object.assign(O, this.options.ticks.format), Zf(m, g, O);
  },
  logarithmic(m, a, d) {
    if (m === 0)
      return "0";
    const g = d[a].significand || m / Math.pow(10, Math.floor(Lc(m)));
    return [
      1,
      2,
      3,
      5,
      10,
      15
    ].includes(g) || a > 0.8 * d.length ? kb.numeric.call(this, m, a, d) : "";
  }
};
function dS(m, a) {
  let d = a.length > 3 ? a[2].value - a[1].value : a[1].value - a[0].value;
  return Math.abs(d) >= 1 && m !== Math.floor(m) && (d = m - Math.floor(m)), d;
}
var qm = {
  formatters: kb
};
function fS(m) {
  m.set("scale", {
    display: !0,
    offset: !1,
    reverse: !1,
    beginAtZero: !1,
    bounds: "ticks",
    clip: !0,
    grace: 0,
    grid: {
      display: !0,
      lineWidth: 1,
      drawOnChartArea: !0,
      drawTicks: !0,
      tickLength: 8,
      tickWidth: (a, d) => d.lineWidth,
      tickColor: (a, d) => d.color,
      offset: !1
    },
    border: {
      display: !0,
      dash: [],
      dashOffset: 0,
      width: 1
    },
    title: {
      display: !1,
      text: "",
      padding: {
        top: 4,
        bottom: 4
      }
    },
    ticks: {
      minRotation: 0,
      maxRotation: 50,
      mirror: !1,
      textStrokeWidth: 0,
      textStrokeColor: "",
      padding: 3,
      display: !0,
      autoSkip: !0,
      autoSkipPadding: 3,
      labelOffset: 0,
      callback: qm.formatters.values,
      minor: {},
      major: {},
      align: "center",
      crossAlign: "near",
      showLabelBackdrop: !1,
      backdropColor: "rgba(255, 255, 255, 0.75)",
      backdropPadding: 2
    }
  }), m.route("scale.ticks", "color", "", "color"), m.route("scale.grid", "color", "", "borderColor"), m.route("scale.border", "color", "", "borderColor"), m.route("scale.title", "color", "", "color"), m.describe("scale", {
    _fallback: !1,
    _scriptable: (a) => !a.startsWith("before") && !a.startsWith("after") && a !== "callback" && a !== "parser",
    _indexable: (a) => a !== "borderDash" && a !== "tickBorderDash" && a !== "dash"
  }), m.describe("scales", {
    _fallback: "scale"
  }), m.describe("scale.ticks", {
    _scriptable: (a) => a !== "backdropPadding" && a !== "callback",
    _indexable: (a) => a !== "backdropPadding"
  });
}
const Oh = /* @__PURE__ */ Object.create(null), Hg = /* @__PURE__ */ Object.create(null);
function zf(m, a) {
  if (!a)
    return m;
  const d = a.split(".");
  for (let g = 0, w = d.length; g < w; ++g) {
    const b = d[g];
    m = m[b] || (m[b] = /* @__PURE__ */ Object.create(null));
  }
  return m;
}
function zg(m, a, d) {
  return typeof a == "string" ? Rf(zf(m, a), d) : Rf(zf(m, ""), a);
}
class pS {
  constructor(a, d) {
    this.animation = void 0, this.backgroundColor = "rgba(0,0,0,0.1)", this.borderColor = "rgba(0,0,0,0.1)", this.color = "#666", this.datasets = {}, this.devicePixelRatio = (g) => g.chart.platform.getDevicePixelRatio(), this.elements = {}, this.events = [
      "mousemove",
      "mouseout",
      "click",
      "touchstart",
      "touchmove"
    ], this.font = {
      family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
      size: 12,
      style: "normal",
      lineHeight: 1.2,
      weight: null
    }, this.hover = {}, this.hoverBackgroundColor = (g, w) => Lg(w.backgroundColor), this.hoverBorderColor = (g, w) => Lg(w.borderColor), this.hoverColor = (g, w) => Lg(w.color), this.indexAxis = "x", this.interaction = {
      mode: "nearest",
      intersect: !0,
      includeInvisible: !1
    }, this.maintainAspectRatio = !0, this.onHover = null, this.onClick = null, this.parsing = !0, this.plugins = {}, this.responsive = !0, this.scale = void 0, this.scales = {}, this.showLine = !0, this.drawActiveElementsOnTop = !0, this.describe(a), this.apply(d);
  }
  set(a, d) {
    return zg(this, a, d);
  }
  get(a) {
    return zf(this, a);
  }
  describe(a, d) {
    return zg(Hg, a, d);
  }
  override(a, d) {
    return zg(Oh, a, d);
  }
  route(a, d, g, w) {
    const b = zf(this, a), E = zf(this, g), i = "_" + d;
    Object.defineProperties(b, {
      [i]: {
        value: b[d],
        writable: !0
      },
      [d]: {
        enumerable: !0,
        get() {
          const O = this[i], j = E[w];
          return yn(O) ? Object.assign({}, j, O) : en(O, j);
        },
        set(O) {
          this[i] = O;
        }
      }
    });
  }
  apply(a) {
    a.forEach((d) => d(this));
  }
}
var ys = /* @__PURE__ */ new pS({
  _scriptable: (m) => !m.startsWith("on"),
  _indexable: (m) => m !== "events",
  hover: {
    _fallback: "interaction"
  },
  interaction: {
    _scriptable: !1,
    _indexable: !1
  }
}, [
  cS,
  hS,
  fS
]);
function mS(m) {
  return !m || En(m.size) || En(m.family) ? null : (m.style ? m.style + " " : "") + (m.weight ? m.weight + " " : "") + m.size + "px " + m.family;
}
function Nm(m, a, d, g, w) {
  let b = a[w];
  return b || (b = a[w] = m.measureText(w).width, d.push(w)), b > g && (g = b), g;
}
function _S(m, a, d, g) {
  g = g || {};
  let w = g.data = g.data || {}, b = g.garbageCollect = g.garbageCollect || [];
  g.font !== a && (w = g.data = {}, b = g.garbageCollect = [], g.font = a), m.save(), m.font = a;
  let E = 0;
  const i = d.length;
  let O, j, Y, J, ae;
  for (O = 0; O < i; O++)
    if (J = d[O], J != null && !hs(J))
      E = Nm(m, w, b, E, J);
    else if (hs(J))
      for (j = 0, Y = J.length; j < Y; j++)
        ae = J[j], ae != null && !hs(ae) && (E = Nm(m, w, b, E, ae));
  m.restore();
  const ce = b.length / 2;
  if (ce > d.length) {
    for (O = 0; O < ce; O++)
      delete w[b[O]];
    b.splice(0, ce);
  }
  return E;
}
function Ah(m, a, d) {
  const g = m.currentDevicePixelRatio, w = d !== 0 ? Math.max(d / 2, 0.5) : 0;
  return Math.round((a - w) * g) / g + w;
}
function l1(m, a) {
  !a && !m || (a = a || m.getContext("2d"), a.save(), a.resetTransform(), a.clearRect(0, 0, m.width, m.height), a.restore());
}
function qg(m, a, d, g) {
  Rb(m, a, d, g, null);
}
function Rb(m, a, d, g, w) {
  let b, E, i, O, j, Y, J, ae;
  const ce = a.pointStyle, Te = a.rotation, be = a.radius;
  let Ze = (Te || 0) * KM;
  if (ce && typeof ce == "object" && (b = ce.toString(), b === "[object HTMLImageElement]" || b === "[object HTMLCanvasElement]")) {
    m.save(), m.translate(d, g), m.rotate(Ze), m.drawImage(ce, -ce.width / 2, -ce.height / 2, ce.width, ce.height), m.restore();
    return;
  }
  if (!(isNaN(be) || be <= 0)) {
    switch (m.beginPath(), ce) {
      default:
        w ? m.ellipse(d, g, w / 2, be, 0, 0, us) : m.arc(d, g, be, 0, us), m.closePath();
        break;
      case "triangle":
        Y = w ? w / 2 : be, m.moveTo(d + Math.sin(Ze) * Y, g - Math.cos(Ze) * be), Ze += e1, m.lineTo(d + Math.sin(Ze) * Y, g - Math.cos(Ze) * be), Ze += e1, m.lineTo(d + Math.sin(Ze) * Y, g - Math.cos(Ze) * be), m.closePath();
        break;
      case "rectRounded":
        j = be * 0.516, O = be - j, E = Math.cos(Ze + Ph) * O, J = Math.cos(Ze + Ph) * (w ? w / 2 - j : O), i = Math.sin(Ze + Ph) * O, ae = Math.sin(Ze + Ph) * (w ? w / 2 - j : O), m.arc(d - J, g - i, j, Ze - ds, Ze - Ns), m.arc(d + ae, g - E, j, Ze - Ns, Ze), m.arc(d + J, g + i, j, Ze, Ze + Ns), m.arc(d - ae, g + E, j, Ze + Ns, Ze + ds), m.closePath();
        break;
      case "rect":
        if (!Te) {
          O = Math.SQRT1_2 * be, Y = w ? w / 2 : O, m.rect(d - Y, g - O, 2 * Y, 2 * O);
          break;
        }
        Ze += Ph;
      case "rectRot":
        J = Math.cos(Ze) * (w ? w / 2 : be), E = Math.cos(Ze) * be, i = Math.sin(Ze) * be, ae = Math.sin(Ze) * (w ? w / 2 : be), m.moveTo(d - J, g - i), m.lineTo(d + ae, g - E), m.lineTo(d + J, g + i), m.lineTo(d - ae, g + E), m.closePath();
        break;
      case "crossRot":
        Ze += Ph;
      case "cross":
        J = Math.cos(Ze) * (w ? w / 2 : be), E = Math.cos(Ze) * be, i = Math.sin(Ze) * be, ae = Math.sin(Ze) * (w ? w / 2 : be), m.moveTo(d - J, g - i), m.lineTo(d + J, g + i), m.moveTo(d + ae, g - E), m.lineTo(d - ae, g + E);
        break;
      case "star":
        J = Math.cos(Ze) * (w ? w / 2 : be), E = Math.cos(Ze) * be, i = Math.sin(Ze) * be, ae = Math.sin(Ze) * (w ? w / 2 : be), m.moveTo(d - J, g - i), m.lineTo(d + J, g + i), m.moveTo(d + ae, g - E), m.lineTo(d - ae, g + E), Ze += Ph, J = Math.cos(Ze) * (w ? w / 2 : be), E = Math.cos(Ze) * be, i = Math.sin(Ze) * be, ae = Math.sin(Ze) * (w ? w / 2 : be), m.moveTo(d - J, g - i), m.lineTo(d + J, g + i), m.moveTo(d + ae, g - E), m.lineTo(d - ae, g + E);
        break;
      case "line":
        E = w ? w / 2 : Math.cos(Ze) * be, i = Math.sin(Ze) * be, m.moveTo(d - E, g - i), m.lineTo(d + E, g + i);
        break;
      case "dash":
        m.moveTo(d, g), m.lineTo(d + Math.cos(Ze) * (w ? w / 2 : be), g + Math.sin(Ze) * be);
        break;
      case !1:
        m.closePath();
        break;
    }
    m.fill(), a.borderWidth > 0 && m.stroke();
  }
}
function Ul(m, a, d) {
  return d = d || 0.5, !a || m && m.x > a.left - d && m.x < a.right + d && m.y > a.top - d && m.y < a.bottom + d;
}
function Wm(m, a) {
  m.save(), m.beginPath(), m.rect(a.left, a.top, a.right - a.left, a.bottom - a.top), m.clip();
}
function $m(m) {
  m.restore();
}
function gS(m, a, d, g, w) {
  if (!a)
    return m.lineTo(d.x, d.y);
  if (w === "middle") {
    const b = (a.x + d.x) / 2;
    m.lineTo(b, a.y), m.lineTo(b, d.y);
  } else
    w === "after" != !!g ? m.lineTo(a.x, d.y) : m.lineTo(d.x, a.y);
  m.lineTo(d.x, d.y);
}
function yS(m, a, d, g) {
  if (!a)
    return m.lineTo(d.x, d.y);
  m.bezierCurveTo(g ? a.cp1x : a.cp2x, g ? a.cp1y : a.cp2y, g ? d.cp2x : d.cp1x, g ? d.cp2y : d.cp1y, d.x, d.y);
}
function xS(m, a) {
  a.translation && m.translate(a.translation[0], a.translation[1]), En(a.rotation) || m.rotate(a.rotation), a.color && (m.fillStyle = a.color), a.textAlign && (m.textAlign = a.textAlign), a.textBaseline && (m.textBaseline = a.textBaseline);
}
function vS(m, a, d, g, w) {
  if (w.strikethrough || w.underline) {
    const b = m.measureText(g), E = a - b.actualBoundingBoxLeft, i = a + b.actualBoundingBoxRight, O = d - b.actualBoundingBoxAscent, j = d + b.actualBoundingBoxDescent, Y = w.strikethrough ? (O + j) / 2 : j;
    m.strokeStyle = m.fillStyle, m.beginPath(), m.lineWidth = w.decorationWidth || 2, m.moveTo(E, Y), m.lineTo(i, Y), m.stroke();
  }
}
function bS(m, a) {
  const d = m.fillStyle;
  m.fillStyle = a.color, m.fillRect(a.left, a.top, a.width, a.height), m.fillStyle = d;
}
function Fh(m, a, d, g, w, b = {}) {
  const E = hs(a) ? a : [
    a
  ], i = b.strokeWidth > 0 && b.strokeColor !== "";
  let O, j;
  for (m.save(), m.font = w.string, xS(m, b), O = 0; O < E.length; ++O)
    j = E[O], b.backdrop && bS(m, b.backdrop), i && (b.strokeColor && (m.strokeStyle = b.strokeColor), En(b.strokeWidth) || (m.lineWidth = b.strokeWidth), m.strokeText(j, d, g, b.maxWidth)), m.fillText(j, d, g, b.maxWidth), vS(m, d, g, j, b), g += Number(w.lineHeight);
  m.restore();
}
function Bf(m, a) {
  const { x: d, y: g, w, h: b, radius: E } = a;
  m.arc(d + E.topLeft, g + E.topLeft, E.topLeft, 1.5 * ds, ds, !0), m.lineTo(d, g + b - E.bottomLeft), m.arc(d + E.bottomLeft, g + b - E.bottomLeft, E.bottomLeft, ds, Ns, !0), m.lineTo(d + w - E.bottomRight, g + b), m.arc(d + w - E.bottomRight, g + b - E.bottomRight, E.bottomRight, Ns, 0, !0), m.lineTo(d + w, g + E.topRight), m.arc(d + w - E.topRight, g + E.topRight, E.topRight, 0, -Ns, !0), m.lineTo(d + E.topLeft, g);
}
const wS = /^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/, TS = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;
function MS(m, a) {
  const d = ("" + m).match(wS);
  if (!d || d[1] === "normal")
    return a * 1.2;
  switch (m = +d[2], d[3]) {
    case "px":
      return m;
    case "%":
      m /= 100;
      break;
  }
  return a * m;
}
const SS = (m) => +m || 0;
function my(m, a) {
  const d = {}, g = yn(a), w = g ? Object.keys(a) : a, b = yn(m) ? g ? (E) => en(m[E], m[a[E]]) : (E) => m[E] : () => m;
  for (const E of w)
    d[E] = SS(b(E));
  return d;
}
function Ob(m) {
  return my(m, {
    top: "y",
    right: "x",
    bottom: "y",
    left: "x"
  });
}
function kh(m) {
  return my(m, [
    "topLeft",
    "topRight",
    "bottomLeft",
    "bottomRight"
  ]);
}
function Gr(m) {
  const a = Ob(m);
  return a.width = a.left + a.right, a.height = a.top + a.bottom, a;
}
function ir(m, a) {
  m = m || {}, a = a || ys.font;
  let d = en(m.size, a.size);
  typeof d == "string" && (d = parseInt(d, 10));
  let g = en(m.style, a.style);
  g && !("" + g).match(TS) && (console.warn('Invalid font style specified: "' + g + '"'), g = void 0);
  const w = {
    family: en(m.family, a.family),
    lineHeight: MS(en(m.lineHeight, a.lineHeight), d),
    size: d,
    style: g,
    weight: en(m.weight, a.weight),
    string: ""
  };
  return w.string = mS(w), w;
}
function Tf(m, a, d, g) {
  let w = !0, b, E, i;
  for (b = 0, E = m.length; b < E; ++b)
    if (i = m[b], i !== void 0 && (a !== void 0 && typeof i == "function" && (i = i(a), w = !1), d !== void 0 && hs(i) && (i = i[d % i.length], w = !1), i !== void 0))
      return g && !w && (g.cacheable = !1), i;
}
function ES(m, a, d) {
  const { min: g, max: w } = m, b = Mb(a, (w - g) / 2), E = (i, O) => d && i === 0 ? 0 : i + O;
  return {
    min: E(g, -Math.abs(b)),
    max: E(w, b)
  };
}
function Fc(m, a) {
  return Object.assign(Object.create(m), a);
}
function _y(m, a = [
  ""
], d, g, w = () => m[0]) {
  const b = d || m;
  typeof g > "u" && (g = Vb("_fallback", m));
  const E = {
    [Symbol.toStringTag]: "Object",
    _cacheable: !0,
    _scopes: m,
    _rootScopes: b,
    _fallback: g,
    _getTarget: w,
    override: (i) => _y([
      i,
      ...m
    ], a, b, g)
  };
  return new Proxy(E, {
    /**
    * A trap for the delete operator.
    */
    deleteProperty(i, O) {
      return delete i[O], delete i._keys, delete m[0][O], !0;
    },
    /**
    * A trap for getting property values.
    */
    get(i, O) {
      return Bb(i, O, () => kS(O, a, m, i));
    },
    /**
    * A trap for Object.getOwnPropertyDescriptor.
    * Also used by Object.hasOwnProperty.
    */
    getOwnPropertyDescriptor(i, O) {
      return Reflect.getOwnPropertyDescriptor(i._scopes[0], O);
    },
    /**
    * A trap for Object.getPrototypeOf.
    */
    getPrototypeOf() {
      return Reflect.getPrototypeOf(m[0]);
    },
    /**
    * A trap for the in operator.
    */
    has(i, O) {
      return h1(i).includes(O);
    },
    /**
    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
    */
    ownKeys(i) {
      return h1(i);
    },
    /**
    * A trap for setting property values.
    */
    set(i, O, j) {
      const Y = i._storage || (i._storage = w());
      return i[O] = Y[O] = j, delete i._keys, !0;
    }
  });
}
function Yu(m, a, d, g) {
  const w = {
    _cacheable: !1,
    _proxy: m,
    _context: a,
    _subProxy: d,
    _stack: /* @__PURE__ */ new Set(),
    _descriptors: Fb(m, g),
    setContext: (b) => Yu(m, b, d, g),
    override: (b) => Yu(m.override(b), a, d, g)
  };
  return new Proxy(w, {
    /**
    * A trap for the delete operator.
    */
    deleteProperty(b, E) {
      return delete b[E], delete m[E], !0;
    },
    /**
    * A trap for getting property values.
    */
    get(b, E, i) {
      return Bb(b, E, () => AS(b, E, i));
    },
    /**
    * A trap for Object.getOwnPropertyDescriptor.
    * Also used by Object.hasOwnProperty.
    */
    getOwnPropertyDescriptor(b, E) {
      return b._descriptors.allKeys ? Reflect.has(m, E) ? {
        enumerable: !0,
        configurable: !0
      } : void 0 : Reflect.getOwnPropertyDescriptor(m, E);
    },
    /**
    * A trap for Object.getPrototypeOf.
    */
    getPrototypeOf() {
      return Reflect.getPrototypeOf(m);
    },
    /**
    * A trap for the in operator.
    */
    has(b, E) {
      return Reflect.has(m, E);
    },
    /**
    * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.
    */
    ownKeys() {
      return Reflect.ownKeys(m);
    },
    /**
    * A trap for setting property values.
    */
    set(b, E, i) {
      return m[E] = i, delete b[E], !0;
    }
  });
}
function Fb(m, a = {
  scriptable: !0,
  indexable: !0
}) {
  const { _scriptable: d = a.scriptable, _indexable: g = a.indexable, _allKeys: w = a.allKeys } = m;
  return {
    allKeys: w,
    scriptable: d,
    indexable: g,
    isScriptable: Oc(d) ? d : () => d,
    isIndexable: Oc(g) ? g : () => g
  };
}
const PS = (m, a) => m ? m + hy(a) : a, gy = (m, a) => yn(a) && m !== "adapters" && (Object.getPrototypeOf(a) === null || a.constructor === Object);
function Bb(m, a, d) {
  if (Object.prototype.hasOwnProperty.call(m, a) || a === "constructor")
    return m[a];
  const g = d();
  return m[a] = g, g;
}
function AS(m, a, d) {
  const { _proxy: g, _context: w, _subProxy: b, _descriptors: E } = m;
  let i = g[a];
  return Oc(i) && E.isScriptable(a) && (i = CS(a, i, m, d)), hs(i) && i.length && (i = IS(a, i, m, E.isIndexable)), gy(a, i) && (i = Yu(i, w, b && b[a], E)), i;
}
function CS(m, a, d, g) {
  const { _proxy: w, _context: b, _subProxy: E, _stack: i } = d;
  if (i.has(m))
    throw new Error("Recursion detected: " + Array.from(i).join("->") + "->" + m);
  i.add(m);
  let O = a(b, E || g);
  return i.delete(m), gy(m, O) && (O = yy(w._scopes, w, m, O)), O;
}
function IS(m, a, d, g) {
  const { _proxy: w, _context: b, _subProxy: E, _descriptors: i } = d;
  if (typeof b.index < "u" && g(m))
    return a[b.index % a.length];
  if (yn(a[0])) {
    const O = a, j = w._scopes.filter((Y) => Y !== O);
    a = [];
    for (const Y of O) {
      const J = yy(j, w, m, Y);
      a.push(Yu(J, b, E && E[m], i));
    }
  }
  return a;
}
function Nb(m, a, d) {
  return Oc(m) ? m(a, d) : m;
}
const LS = (m, a) => m === !0 ? a : typeof m == "string" ? Rc(a, m) : void 0;
function zS(m, a, d, g, w) {
  for (const b of a) {
    const E = LS(d, b);
    if (E) {
      m.add(E);
      const i = Nb(E._fallback, d, w);
      if (typeof i < "u" && i !== d && i !== g)
        return i;
    } else if (E === !1 && typeof g < "u" && d !== g)
      return null;
  }
  return !1;
}
function yy(m, a, d, g) {
  const w = a._rootScopes, b = Nb(a._fallback, d, g), E = [
    ...m,
    ...w
  ], i = /* @__PURE__ */ new Set();
  i.add(g);
  let O = c1(i, E, d, b || d, g);
  return O === null || typeof b < "u" && b !== d && (O = c1(i, E, b, O, g), O === null) ? !1 : _y(Array.from(i), [
    ""
  ], w, b, () => DS(a, d, g));
}
function c1(m, a, d, g, w) {
  for (; d; )
    d = zS(m, a, d, g, w);
  return d;
}
function DS(m, a, d) {
  const g = m._getTarget();
  a in g || (g[a] = {});
  const w = g[a];
  return hs(w) && yn(d) ? d : w || {};
}
function kS(m, a, d, g) {
  let w;
  for (const b of a)
    if (w = Vb(PS(b, m), d), typeof w < "u")
      return gy(m, w) ? yy(d, g, m, w) : w;
}
function Vb(m, a) {
  for (const d of a) {
    if (!d)
      continue;
    const g = d[m];
    if (typeof g < "u")
      return g;
  }
}
function h1(m) {
  let a = m._keys;
  return a || (a = m._keys = RS(m._scopes)), a;
}
function RS(m) {
  const a = /* @__PURE__ */ new Set();
  for (const d of m)
    for (const g of Object.keys(d).filter((w) => !w.startsWith("_")))
      a.add(g);
  return Array.from(a);
}
function Ub(m, a, d, g) {
  const { iScale: w } = m, { key: b = "r" } = this._parsing, E = new Array(g);
  let i, O, j, Y;
  for (i = 0, O = g; i < O; ++i)
    j = i + d, Y = a[j], E[i] = {
      r: w.parse(Rc(Y, b), j)
    };
  return E;
}
const OS = Number.EPSILON || 1e-14, Ku = (m, a) => a < m.length && !m[a].skip && m[a], jb = (m) => m === "x" ? "y" : "x";
function FS(m, a, d, g) {
  const w = m.skip ? a : m, b = a, E = d.skip ? a : d, i = Zg(b, w), O = Zg(E, b);
  let j = i / (i + O), Y = O / (i + O);
  j = isNaN(j) ? 0 : j, Y = isNaN(Y) ? 0 : Y;
  const J = g * j, ae = g * Y;
  return {
    previous: {
      x: b.x - J * (E.x - w.x),
      y: b.y - J * (E.y - w.y)
    },
    next: {
      x: b.x + ae * (E.x - w.x),
      y: b.y + ae * (E.y - w.y)
    }
  };
}
function BS(m, a, d) {
  const g = m.length;
  let w, b, E, i, O, j = Ku(m, 0);
  for (let Y = 0; Y < g - 1; ++Y)
    if (O = j, j = Ku(m, Y + 1), !(!O || !j)) {
      if (If(a[Y], 0, OS)) {
        d[Y] = d[Y + 1] = 0;
        continue;
      }
      w = d[Y] / a[Y], b = d[Y + 1] / a[Y], i = Math.pow(w, 2) + Math.pow(b, 2), !(i <= 9) && (E = 3 / Math.sqrt(i), d[Y] = w * E * a[Y], d[Y + 1] = b * E * a[Y]);
    }
}
function NS(m, a, d = "x") {
  const g = jb(d), w = m.length;
  let b, E, i, O = Ku(m, 0);
  for (let j = 0; j < w; ++j) {
    if (E = i, i = O, O = Ku(m, j + 1), !i)
      continue;
    const Y = i[d], J = i[g];
    E && (b = (Y - E[d]) / 3, i[`cp1${d}`] = Y - b, i[`cp1${g}`] = J - b * a[j]), O && (b = (O[d] - Y) / 3, i[`cp2${d}`] = Y + b, i[`cp2${g}`] = J + b * a[j]);
  }
}
function VS(m, a = "x") {
  const d = jb(a), g = m.length, w = Array(g).fill(0), b = Array(g);
  let E, i, O, j = Ku(m, 0);
  for (E = 0; E < g; ++E)
    if (i = O, O = j, j = Ku(m, E + 1), !!O) {
      if (j) {
        const Y = j[a] - O[a];
        w[E] = Y !== 0 ? (j[d] - O[d]) / Y : 0;
      }
      b[E] = i ? j ? ll(w[E - 1]) !== ll(w[E]) ? 0 : (w[E - 1] + w[E]) / 2 : w[E - 1] : w[E];
    }
  BS(m, w, b), NS(m, b, a);
}
function mm(m, a, d) {
  return Math.max(Math.min(m, d), a);
}
function US(m, a) {
  let d, g, w, b, E, i = Ul(m[0], a);
  for (d = 0, g = m.length; d < g; ++d)
    E = b, b = i, i = d < g - 1 && Ul(m[d + 1], a), b && (w = m[d], E && (w.cp1x = mm(w.cp1x, a.left, a.right), w.cp1y = mm(w.cp1y, a.top, a.bottom)), i && (w.cp2x = mm(w.cp2x, a.left, a.right), w.cp2y = mm(w.cp2y, a.top, a.bottom)));
}
function jS(m, a, d, g, w) {
  let b, E, i, O;
  if (a.spanGaps && (m = m.filter((j) => !j.skip)), a.cubicInterpolationMode === "monotone")
    VS(m, w);
  else {
    let j = g ? m[m.length - 1] : m[0];
    for (b = 0, E = m.length; b < E; ++b)
      i = m[b], O = FS(j, i, m[Math.min(b + 1, E - (g ? 0 : 1)) % E], a.tension), i.cp1x = O.previous.x, i.cp1y = O.previous.y, i.cp2x = O.next.x, i.cp2y = O.next.y, j = i;
  }
  a.capBezierPoints && US(m, d);
}
function xy() {
  return typeof window < "u" && typeof document < "u";
}
function vy(m) {
  let a = m.parentNode;
  return a && a.toString() === "[object ShadowRoot]" && (a = a.host), a;
}
function Vm(m, a, d) {
  let g;
  return typeof m == "string" ? (g = parseInt(m, 10), m.indexOf("%") !== -1 && (g = g / 100 * a.parentNode[d])) : g = m, g;
}
const Xm = (m) => m.ownerDocument.defaultView.getComputedStyle(m, null);
function GS(m, a) {
  return Xm(m).getPropertyValue(a);
}
const ZS = [
  "top",
  "right",
  "bottom",
  "left"
];
function Rh(m, a, d) {
  const g = {};
  d = d ? "-" + d : "";
  for (let w = 0; w < 4; w++) {
    const b = ZS[w];
    g[b] = parseFloat(m[a + "-" + b + d]) || 0;
  }
  return g.width = g.left + g.right, g.height = g.top + g.bottom, g;
}
const HS = (m, a, d) => (m > 0 || a > 0) && (!d || !d.shadowRoot);
function qS(m, a) {
  const d = m.touches, g = d && d.length ? d[0] : m, { offsetX: w, offsetY: b } = g;
  let E = !1, i, O;
  if (HS(w, b, m.target))
    i = w, O = b;
  else {
    const j = a.getBoundingClientRect();
    i = g.clientX - j.left, O = g.clientY - j.top, E = !0;
  }
  return {
    x: i,
    y: O,
    box: E
  };
}
function Lh(m, a) {
  if ("native" in m)
    return m;
  const { canvas: d, currentDevicePixelRatio: g } = a, w = Xm(d), b = w.boxSizing === "border-box", E = Rh(w, "padding"), i = Rh(w, "border", "width"), { x: O, y: j, box: Y } = qS(m, d), J = E.left + (Y && i.left), ae = E.top + (Y && i.top);
  let { width: ce, height: Te } = a;
  return b && (ce -= E.width + i.width, Te -= E.height + i.height), {
    x: Math.round((O - J) / ce * d.width / g),
    y: Math.round((j - ae) / Te * d.height / g)
  };
}
function WS(m, a, d) {
  let g, w;
  if (a === void 0 || d === void 0) {
    const b = m && vy(m);
    if (!b)
      a = m.clientWidth, d = m.clientHeight;
    else {
      const E = b.getBoundingClientRect(), i = Xm(b), O = Rh(i, "border", "width"), j = Rh(i, "padding");
      a = E.width - j.width - O.width, d = E.height - j.height - O.height, g = Vm(i.maxWidth, b, "clientWidth"), w = Vm(i.maxHeight, b, "clientHeight");
    }
  }
  return {
    width: a,
    height: d,
    maxWidth: g || Bm,
    maxHeight: w || Bm
  };
}
const _m = (m) => Math.round(m * 10) / 10;
function $S(m, a, d, g) {
  const w = Xm(m), b = Rh(w, "margin"), E = Vm(w.maxWidth, m, "clientWidth") || Bm, i = Vm(w.maxHeight, m, "clientHeight") || Bm, O = WS(m, a, d);
  let { width: j, height: Y } = O;
  if (w.boxSizing === "content-box") {
    const ae = Rh(w, "border", "width"), ce = Rh(w, "padding");
    j -= ce.width + ae.width, Y -= ce.height + ae.height;
  }
  return j = Math.max(0, j - b.width), Y = Math.max(0, g ? j / g : Y - b.height), j = _m(Math.min(j, E, O.maxWidth)), Y = _m(Math.min(Y, i, O.maxHeight)), j && !Y && (Y = _m(j / 2)), (a !== void 0 || d !== void 0) && g && O.height && Y > O.height && (Y = O.height, j = _m(Math.floor(Y * g))), {
    width: j,
    height: Y
  };
}
function u1(m, a, d) {
  const g = a || 1, w = Math.floor(m.height * g), b = Math.floor(m.width * g);
  m.height = Math.floor(m.height), m.width = Math.floor(m.width);
  const E = m.canvas;
  return E.style && (d || !E.style.height && !E.style.width) && (E.style.height = `${m.height}px`, E.style.width = `${m.width}px`), m.currentDevicePixelRatio !== g || E.height !== w || E.width !== b ? (m.currentDevicePixelRatio = g, E.height = w, E.width = b, m.ctx.setTransform(g, 0, 0, g, 0, 0), !0) : !1;
}
const XS = function() {
  let m = !1;
  try {
    const a = {
      get passive() {
        return m = !0, !1;
      }
    };
    xy() && (window.addEventListener("test", null, a), window.removeEventListener("test", null, a));
  } catch {
  }
  return m;
}();
function d1(m, a) {
  const d = GS(m, a), g = d && d.match(/^(\d+)(\.\d+)?px$/);
  return g ? +g[1] : void 0;
}
function zh(m, a, d, g) {
  return {
    x: m.x + d * (a.x - m.x),
    y: m.y + d * (a.y - m.y)
  };
}
function YS(m, a, d, g) {
  return {
    x: m.x + d * (a.x - m.x),
    y: g === "middle" ? d < 0.5 ? m.y : a.y : g === "after" ? d < 1 ? m.y : a.y : d > 0 ? a.y : m.y
  };
}
function KS(m, a, d, g) {
  const w = {
    x: m.cp2x,
    y: m.cp2y
  }, b = {
    x: a.cp1x,
    y: a.cp1y
  }, E = zh(m, w, d), i = zh(w, b, d), O = zh(b, a, d), j = zh(E, i, d), Y = zh(i, O, d);
  return zh(j, Y, d);
}
const JS = function(m, a) {
  return {
    x(d) {
      return m + m + a - d;
    },
    setWidth(d) {
      a = d;
    },
    textAlign(d) {
      return d === "center" ? d : d === "right" ? "left" : "right";
    },
    xPlus(d, g) {
      return d - g;
    },
    leftForLtr(d, g) {
      return d - g;
    }
  };
}, QS = function() {
  return {
    x(m) {
      return m;
    },
    setWidth(m) {
    },
    textAlign(m) {
      return m;
    },
    xPlus(m, a) {
      return m + a;
    },
    leftForLtr(m, a) {
      return m;
    }
  };
};
function $u(m, a, d) {
  return m ? JS(a, d) : QS();
}
function Gb(m, a) {
  let d, g;
  (a === "ltr" || a === "rtl") && (d = m.canvas.style, g = [
    d.getPropertyValue("direction"),
    d.getPropertyPriority("direction")
  ], d.setProperty("direction", a, "important"), m.prevTextDirection = g);
}
function Zb(m, a) {
  a !== void 0 && (delete m.prevTextDirection, m.canvas.style.setProperty("direction", a[0], a[1]));
}
function Hb(m) {
  return m === "angle" ? {
    between: Ff,
    compare: eS,
    normalize: No
  } : {
    between: Nl,
    compare: (a, d) => a - d,
    normalize: (a) => a
  };
}
function f1({ start: m, end: a, count: d, loop: g, style: w }) {
  return {
    start: m % d,
    end: a % d,
    loop: g && (a - m + 1) % d === 0,
    style: w
  };
}
function eE(m, a, d) {
  const { property: g, start: w, end: b } = d, { between: E, normalize: i } = Hb(g), O = a.length;
  let { start: j, end: Y, loop: J } = m, ae, ce;
  if (J) {
    for (j += O, Y += O, ae = 0, ce = O; ae < ce && E(i(a[j % O][g]), w, b); ++ae)
      j--, Y--;
    j %= O, Y %= O;
  }
  return Y < j && (Y += O), {
    start: j,
    end: Y,
    loop: J,
    style: m.style
  };
}
function qb(m, a, d) {
  if (!d)
    return [
      m
    ];
  const { property: g, start: w, end: b } = d, E = a.length, { compare: i, between: O, normalize: j } = Hb(g), { start: Y, end: J, loop: ae, style: ce } = eE(m, a, d), Te = [];
  let be = !1, Ze = null, je, ot, vt;
  const ht = () => O(w, vt, je) && i(w, vt) !== 0, gt = () => i(b, je) === 0 || O(b, vt, je), Vt = () => be || ht(), pt = () => !be || gt();
  for (let Gt = Y, ui = Y; Gt <= J; ++Gt)
    ot = a[Gt % E], !ot.skip && (je = j(ot[g]), je !== vt && (be = O(je, w, b), Ze === null && Vt() && (Ze = i(je, w) === 0 ? Gt : ui), Ze !== null && pt() && (Te.push(f1({
      start: Ze,
      end: Gt,
      loop: ae,
      count: E,
      style: ce
    })), Ze = null), ui = Gt, vt = je));
  return Ze !== null && Te.push(f1({
    start: Ze,
    end: J,
    loop: ae,
    count: E,
    style: ce
  })), Te;
}
function Wb(m, a) {
  const d = [], g = m.segments;
  for (let w = 0; w < g.length; w++) {
    const b = qb(g[w], m.points, a);
    b.length && d.push(...b);
  }
  return d;
}
function tE(m, a, d, g) {
  let w = 0, b = a - 1;
  if (d && !g)
    for (; w < a && !m[w].skip; )
      w++;
  for (; w < a && m[w].skip; )
    w++;
  for (w %= a, d && (b += w); b > w && m[b % a].skip; )
    b--;
  return b %= a, {
    start: w,
    end: b
  };
}
function iE(m, a, d, g) {
  const w = m.length, b = [];
  let E = a, i = m[a], O;
  for (O = a + 1; O <= d; ++O) {
    const j = m[O % w];
    j.skip || j.stop ? i.skip || (g = !1, b.push({
      start: a % w,
      end: (O - 1) % w,
      loop: g
    }), a = E = j.stop ? O : null) : (E = O, i.skip && (a = O)), i = j;
  }
  return E !== null && b.push({
    start: a % w,
    end: E % w,
    loop: g
  }), b;
}
function nE(m, a) {
  const d = m.points, g = m.options.spanGaps, w = d.length;
  if (!w)
    return [];
  const b = !!m._loop, { start: E, end: i } = tE(d, w, b, g);
  if (g === !0)
    return p1(m, [
      {
        start: E,
        end: i,
        loop: b
      }
    ], d, a);
  const O = i < E ? i + w : i, j = !!m._fullLoop && E === 0 && i === w - 1;
  return p1(m, iE(d, E, O, j), d, a);
}
function p1(m, a, d, g) {
  return !g || !g.setContext || !d ? a : sE(m, a, d, g);
}
function sE(m, a, d, g) {
  const w = m._chart.getContext(), b = m1(m.options), { _datasetIndex: E, options: { spanGaps: i } } = m, O = d.length, j = [];
  let Y = b, J = a[0].start, ae = J;
  function ce(Te, be, Ze, je) {
    const ot = i ? -1 : 1;
    if (Te !== be) {
      for (Te += O; d[Te % O].skip; )
        Te -= ot;
      for (; d[be % O].skip; )
        be += ot;
      Te % O !== be % O && (j.push({
        start: Te % O,
        end: be % O,
        loop: Ze,
        style: je
      }), Y = je, J = be % O);
    }
  }
  for (const Te of a) {
    J = i ? J : Te.start;
    let be = d[J % O], Ze;
    for (ae = J + 1; ae <= Te.end; ae++) {
      const je = d[ae % O];
      Ze = m1(g.setContext(Fc(w, {
        type: "segment",
        p0: be,
        p1: je,
        p0DataIndex: (ae - 1) % O,
        p1DataIndex: ae % O,
        datasetIndex: E
      }))), rE(Ze, Y) && ce(J, ae - 1, Te.loop, Y), be = je, Y = Ze;
    }
    J < ae - 1 && ce(J, ae - 1, Te.loop, Y);
  }
  return j;
}
function m1(m) {
  return {
    backgroundColor: m.backgroundColor,
    borderCapStyle: m.borderCapStyle,
    borderDash: m.borderDash,
    borderDashOffset: m.borderDashOffset,
    borderJoinStyle: m.borderJoinStyle,
    borderWidth: m.borderWidth,
    borderColor: m.borderColor
  };
}
function rE(m, a) {
  if (!a)
    return !1;
  const d = [], g = function(w, b) {
    return py(b) ? (d.includes(b) || d.push(b), d.indexOf(b)) : b;
  };
  return JSON.stringify(m, g) !== JSON.stringify(a, g);
}
/*!
 * Chart.js v4.4.7
 * https://www.chartjs.org
 * (c) 2024 Chart.js Contributors
 * Released under the MIT License
 */
class oE {
  constructor() {
    this._request = null, this._charts = /* @__PURE__ */ new Map(), this._running = !1, this._lastDate = void 0;
  }
  _notify(a, d, g, w) {
    const b = d.listeners[w], E = d.duration;
    b.forEach((i) => i({
      chart: a,
      initial: d.initial,
      numSteps: E,
      currentStep: Math.min(g - d.start, E)
    }));
  }
  _refresh() {
    this._request || (this._running = !0, this._request = Ib.call(window, () => {
      this._update(), this._request = null, this._running && this._refresh();
    }));
  }
  _update(a = Date.now()) {
    let d = 0;
    this._charts.forEach((g, w) => {
      if (!g.running || !g.items.length)
        return;
      const b = g.items;
      let E = b.length - 1, i = !1, O;
      for (; E >= 0; --E)
        O = b[E], O._active ? (O._total > g.duration && (g.duration = O._total), O.tick(a), i = !0) : (b[E] = b[b.length - 1], b.pop());
      i && (w.draw(), this._notify(w, g, a, "progress")), b.length || (g.running = !1, this._notify(w, g, a, "complete"), g.initial = !1), d += b.length;
    }), this._lastDate = a, d === 0 && (this._running = !1);
  }
  _getAnims(a) {
    const d = this._charts;
    let g = d.get(a);
    return g || (g = {
      running: !1,
      initial: !0,
      items: [],
      listeners: {
        complete: [],
        progress: []
      }
    }, d.set(a, g)), g;
  }
  listen(a, d, g) {
    this._getAnims(a).listeners[d].push(g);
  }
  add(a, d) {
    !d || !d.length || this._getAnims(a).items.push(...d);
  }
  has(a) {
    return this._getAnims(a).items.length > 0;
  }
  start(a) {
    const d = this._charts.get(a);
    d && (d.running = !0, d.start = Date.now(), d.duration = d.items.reduce((g, w) => Math.max(g, w._duration), 0), this._refresh());
  }
  running(a) {
    if (!this._running)
      return !1;
    const d = this._charts.get(a);
    return !(!d || !d.running || !d.items.length);
  }
  stop(a) {
    const d = this._charts.get(a);
    if (!d || !d.items.length)
      return;
    const g = d.items;
    let w = g.length - 1;
    for (; w >= 0; --w)
      g[w].cancel();
    d.items = [], this._notify(a, d, Date.now(), "complete");
  }
  remove(a) {
    return this._charts.delete(a);
  }
}
var Rl = /* @__PURE__ */ new oE();
const _1 = "transparent", aE = {
  boolean(m, a, d) {
    return d > 0.5 ? a : m;
  },
  color(m, a, d) {
    const g = o1(m || _1), w = g.valid && o1(a || _1);
    return w && w.valid ? w.mix(g, d).hexString() : a;
  },
  number(m, a, d) {
    return m + (a - m) * d;
  }
};
class lE {
  constructor(a, d, g, w) {
    const b = d[g];
    w = Tf([
      a.to,
      w,
      b,
      a.from
    ]);
    const E = Tf([
      a.from,
      b,
      w
    ]);
    this._active = !0, this._fn = a.fn || aE[a.type || typeof E], this._easing = Lf[a.easing] || Lf.linear, this._start = Math.floor(Date.now() + (a.delay || 0)), this._duration = this._total = Math.floor(a.duration), this._loop = !!a.loop, this._target = d, this._prop = g, this._from = E, this._to = w, this._promises = void 0;
  }
  active() {
    return this._active;
  }
  update(a, d, g) {
    if (this._active) {
      this._notify(!1);
      const w = this._target[this._prop], b = g - this._start, E = this._duration - b;
      this._start = g, this._duration = Math.floor(Math.max(E, a.duration)), this._total += b, this._loop = !!a.loop, this._to = Tf([
        a.to,
        d,
        w,
        a.from
      ]), this._from = Tf([
        a.from,
        w,
        d
      ]);
    }
  }
  cancel() {
    this._active && (this.tick(Date.now()), this._active = !1, this._notify(!1));
  }
  tick(a) {
    const d = a - this._start, g = this._duration, w = this._prop, b = this._from, E = this._loop, i = this._to;
    let O;
    if (this._active = b !== i && (E || d < g), !this._active) {
      this._target[w] = i, this._notify(!0);
      return;
    }
    if (d < 0) {
      this._target[w] = b;
      return;
    }
    O = d / g % 2, O = E && O > 1 ? 2 - O : O, O = this._easing(Math.min(1, Math.max(0, O))), this._target[w] = this._fn(b, i, O);
  }
  wait() {
    const a = this._promises || (this._promises = []);
    return new Promise((d, g) => {
      a.push({
        res: d,
        rej: g
      });
    });
  }
  _notify(a) {
    const d = a ? "res" : "rej", g = this._promises || [];
    for (let w = 0; w < g.length; w++)
      g[w][d]();
  }
}
class $b {
  constructor(a, d) {
    this._chart = a, this._properties = /* @__PURE__ */ new Map(), this.configure(d);
  }
  configure(a) {
    if (!yn(a))
      return;
    const d = Object.keys(ys.animation), g = this._properties;
    Object.getOwnPropertyNames(a).forEach((w) => {
      const b = a[w];
      if (!yn(b))
        return;
      const E = {};
      for (const i of d)
        E[i] = b[i];
      (hs(b.properties) && b.properties || [
        w
      ]).forEach((i) => {
        (i === w || !g.has(i)) && g.set(i, E);
      });
    });
  }
  _animateOptions(a, d) {
    const g = d.options, w = hE(a, g);
    if (!w)
      return [];
    const b = this._createAnimations(w, g);
    return g.$shared && cE(a.options.$animations, g).then(() => {
      a.options = g;
    }, () => {
    }), b;
  }
  _createAnimations(a, d) {
    const g = this._properties, w = [], b = a.$animations || (a.$animations = {}), E = Object.keys(d), i = Date.now();
    let O;
    for (O = E.length - 1; O >= 0; --O) {
      const j = E[O];
      if (j.charAt(0) === "$")
        continue;
      if (j === "options") {
        w.push(...this._animateOptions(a, d));
        continue;
      }
      const Y = d[j];
      let J = b[j];
      const ae = g.get(j);
      if (J)
        if (ae && J.active()) {
          J.update(ae, Y, i);
          continue;
        } else
          J.cancel();
      if (!ae || !ae.duration) {
        a[j] = Y;
        continue;
      }
      b[j] = J = new lE(ae, a, j, Y), w.push(J);
    }
    return w;
  }
  update(a, d) {
    if (this._properties.size === 0) {
      Object.assign(a, d);
      return;
    }
    const g = this._createAnimations(a, d);
    if (g.length)
      return Rl.add(this._chart, g), !0;
  }
}
function cE(m, a) {
  const d = [], g = Object.keys(a);
  for (let w = 0; w < g.length; w++) {
    const b = m[g[w]];
    b && b.active() && d.push(b.wait());
  }
  return Promise.all(d);
}
function hE(m, a) {
  if (!a)
    return;
  let d = m.options;
  if (!d) {
    m.options = a;
    return;
  }
  return d.$shared && (m.options = d = Object.assign({}, d, {
    $shared: !1,
    $animations: {}
  })), d;
}
function g1(m, a) {
  const d = m && m.options || {}, g = d.reverse, w = d.min === void 0 ? a : 0, b = d.max === void 0 ? a : 0;
  return {
    start: g ? b : w,
    end: g ? w : b
  };
}
function uE(m, a, d) {
  if (d === !1)
    return !1;
  const g = g1(m, d), w = g1(a, d);
  return {
    top: w.end,
    right: g.end,
    bottom: w.start,
    left: g.start
  };
}
function dE(m) {
  let a, d, g, w;
  return yn(m) ? (a = m.top, d = m.right, g = m.bottom, w = m.left) : a = d = g = w = m, {
    top: a,
    right: d,
    bottom: g,
    left: w,
    disabled: m === !1
  };
}
function Xb(m, a) {
  const d = [], g = m._getSortedDatasetMetas(a);
  let w, b;
  for (w = 0, b = g.length; w < b; ++w)
    d.push(g[w].index);
  return d;
}
function y1(m, a, d, g = {}) {
  const w = m.keys, b = g.mode === "single";
  let E, i, O, j;
  if (a === null)
    return;
  let Y = !1;
  for (E = 0, i = w.length; E < i; ++E) {
    if (O = +w[E], O === d) {
      if (Y = !0, g.all)
        continue;
      break;
    }
    j = m.values[O], As(j) && (b || a === 0 || ll(a) === ll(j)) && (a += j);
  }
  return !Y && !g.all ? 0 : a;
}
function fE(m, a) {
  const { iScale: d, vScale: g } = a, w = d.axis === "x" ? "x" : "y", b = g.axis === "x" ? "x" : "y", E = Object.keys(m), i = new Array(E.length);
  let O, j, Y;
  for (O = 0, j = E.length; O < j; ++O)
    Y = E[O], i[O] = {
      [w]: Y,
      [b]: m[Y]
    };
  return i;
}
function Dg(m, a) {
  const d = m && m.options.stacked;
  return d || d === void 0 && a.stack !== void 0;
}
function pE(m, a, d) {
  return `${m.id}.${a.id}.${d.stack || d.type}`;
}
function mE(m) {
  const { min: a, max: d, minDefined: g, maxDefined: w } = m.getUserBounds();
  return {
    min: g ? a : Number.NEGATIVE_INFINITY,
    max: w ? d : Number.POSITIVE_INFINITY
  };
}
function _E(m, a, d) {
  const g = m[a] || (m[a] = {});
  return g[d] || (g[d] = {});
}
function x1(m, a, d, g) {
  for (const w of a.getMatchingVisibleMetas(g).reverse()) {
    const b = m[w.index];
    if (d && b > 0 || !d && b < 0)
      return w.index;
  }
  return null;
}
function v1(m, a) {
  const { chart: d, _cachedMeta: g } = m, w = d._stacks || (d._stacks = {}), { iScale: b, vScale: E, index: i } = g, O = b.axis, j = E.axis, Y = pE(b, E, g), J = a.length;
  let ae;
  for (let ce = 0; ce < J; ++ce) {
    const Te = a[ce], { [O]: be, [j]: Ze } = Te, je = Te._stacks || (Te._stacks = {});
    ae = je[j] = _E(w, Y, be), ae[i] = Ze, ae._top = x1(ae, E, !0, g.type), ae._bottom = x1(ae, E, !1, g.type);
    const ot = ae._visualValues || (ae._visualValues = {});
    ot[i] = Ze;
  }
}
function kg(m, a) {
  const d = m.scales;
  return Object.keys(d).filter((g) => d[g].axis === a).shift();
}
function gE(m, a) {
  return Fc(m, {
    active: !1,
    dataset: void 0,
    datasetIndex: a,
    index: a,
    mode: "default",
    type: "dataset"
  });
}
function yE(m, a, d) {
  return Fc(m, {
    active: !1,
    dataIndex: a,
    parsed: void 0,
    raw: void 0,
    element: d,
    index: a,
    mode: "default",
    type: "data"
  });
}
function gf(m, a) {
  const d = m.controller.index, g = m.vScale && m.vScale.axis;
  if (g) {
    a = a || m._parsed;
    for (const w of a) {
      const b = w._stacks;
      if (!b || b[g] === void 0 || b[g][d] === void 0)
        return;
      delete b[g][d], b[g]._visualValues !== void 0 && b[g]._visualValues[d] !== void 0 && delete b[g]._visualValues[d];
    }
  }
}
const Rg = (m) => m === "reset" || m === "none", b1 = (m, a) => a ? m : Object.assign({}, m), xE = (m, a, d) => m && !a.hidden && a._stacked && {
  keys: Xb(d, !0),
  values: null
};
class za {
  constructor(a, d) {
    this.chart = a, this._ctx = a.ctx, this.index = d, this._cachedDataOpts = {}, this._cachedMeta = this.getMeta(), this._type = this._cachedMeta.type, this.options = void 0, this._parsing = !1, this._data = void 0, this._objectData = void 0, this._sharedOptions = void 0, this._drawStart = void 0, this._drawCount = void 0, this.enableOptionSharing = !1, this.supportsDecimation = !1, this.$context = void 0, this._syncList = [], this.datasetElementType = new.target.datasetElementType, this.dataElementType = new.target.dataElementType, this.initialize();
  }
  initialize() {
    const a = this._cachedMeta;
    this.configure(), this.linkScales(), a._stacked = Dg(a.vScale, a), this.addElements(), this.options.fill && !this.chart.isPluginEnabled("filler") && console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options");
  }
  updateIndex(a) {
    this.index !== a && gf(this._cachedMeta), this.index = a;
  }
  linkScales() {
    const a = this.chart, d = this._cachedMeta, g = this.getDataset(), w = (J, ae, ce, Te) => J === "x" ? ae : J === "r" ? Te : ce, b = d.xAxisID = en(g.xAxisID, kg(a, "x")), E = d.yAxisID = en(g.yAxisID, kg(a, "y")), i = d.rAxisID = en(g.rAxisID, kg(a, "r")), O = d.indexAxis, j = d.iAxisID = w(O, b, E, i), Y = d.vAxisID = w(O, E, b, i);
    d.xScale = this.getScaleForId(b), d.yScale = this.getScaleForId(E), d.rScale = this.getScaleForId(i), d.iScale = this.getScaleForId(j), d.vScale = this.getScaleForId(Y);
  }
  getDataset() {
    return this.chart.data.datasets[this.index];
  }
  getMeta() {
    return this.chart.getDatasetMeta(this.index);
  }
  getScaleForId(a) {
    return this.chart.scales[a];
  }
  _getOtherScale(a) {
    const d = this._cachedMeta;
    return a === d.iScale ? d.vScale : d.iScale;
  }
  reset() {
    this._update("reset");
  }
  _destroy() {
    const a = this._cachedMeta;
    this._data && n1(this._data, this), a._stacked && gf(a);
  }
  _dataCheck() {
    const a = this.getDataset(), d = a.data || (a.data = []), g = this._data;
    if (yn(d)) {
      const w = this._cachedMeta;
      this._data = fE(d, w);
    } else if (g !== d) {
      if (g) {
        n1(g, this);
        const w = this._cachedMeta;
        gf(w), w._parsed = [];
      }
      d && Object.isExtensible(d) && sS(d, this), this._syncList = [], this._data = d;
    }
  }
  addElements() {
    const a = this._cachedMeta;
    this._dataCheck(), this.datasetElementType && (a.dataset = new this.datasetElementType());
  }
  buildOrUpdateElements(a) {
    const d = this._cachedMeta, g = this.getDataset();
    let w = !1;
    this._dataCheck();
    const b = d._stacked;
    d._stacked = Dg(d.vScale, d), d.stack !== g.stack && (w = !0, gf(d), d.stack = g.stack), this._resyncElements(a), (w || b !== d._stacked) && (v1(this, d._parsed), d._stacked = Dg(d.vScale, d));
  }
  configure() {
    const a = this.chart.config, d = a.datasetScopeKeys(this._type), g = a.getOptionScopes(this.getDataset(), d, !0);
    this.options = a.createResolver(g, this.getContext()), this._parsing = this.options.parsing, this._cachedDataOpts = {};
  }
  parse(a, d) {
    const { _cachedMeta: g, _data: w } = this, { iScale: b, _stacked: E } = g, i = b.axis;
    let O = a === 0 && d === w.length ? !0 : g._sorted, j = a > 0 && g._parsed[a - 1], Y, J, ae;
    if (this._parsing === !1)
      g._parsed = w, g._sorted = !0, ae = w;
    else {
      hs(w[a]) ? ae = this.parseArrayData(g, w, a, d) : yn(w[a]) ? ae = this.parseObjectData(g, w, a, d) : ae = this.parsePrimitiveData(g, w, a, d);
      const ce = () => J[i] === null || j && J[i] < j[i];
      for (Y = 0; Y < d; ++Y)
        g._parsed[Y + a] = J = ae[Y], O && (ce() && (O = !1), j = J);
      g._sorted = O;
    }
    E && v1(this, ae);
  }
  parsePrimitiveData(a, d, g, w) {
    const { iScale: b, vScale: E } = a, i = b.axis, O = E.axis, j = b.getLabels(), Y = b === E, J = new Array(w);
    let ae, ce, Te;
    for (ae = 0, ce = w; ae < ce; ++ae)
      Te = ae + g, J[ae] = {
        [i]: Y || b.parse(j[Te], Te),
        [O]: E.parse(d[Te], Te)
      };
    return J;
  }
  parseArrayData(a, d, g, w) {
    const { xScale: b, yScale: E } = a, i = new Array(w);
    let O, j, Y, J;
    for (O = 0, j = w; O < j; ++O)
      Y = O + g, J = d[Y], i[O] = {
        x: b.parse(J[0], Y),
        y: E.parse(J[1], Y)
      };
    return i;
  }
  parseObjectData(a, d, g, w) {
    const { xScale: b, yScale: E } = a, { xAxisKey: i = "x", yAxisKey: O = "y" } = this._parsing, j = new Array(w);
    let Y, J, ae, ce;
    for (Y = 0, J = w; Y < J; ++Y)
      ae = Y + g, ce = d[ae], j[Y] = {
        x: b.parse(Rc(ce, i), ae),
        y: E.parse(Rc(ce, O), ae)
      };
    return j;
  }
  getParsed(a) {
    return this._cachedMeta._parsed[a];
  }
  getDataElement(a) {
    return this._cachedMeta.data[a];
  }
  applyStack(a, d, g) {
    const w = this.chart, b = this._cachedMeta, E = d[a.axis], i = {
      keys: Xb(w, !0),
      values: d._stacks[a.axis]._visualValues
    };
    return y1(i, E, b.index, {
      mode: g
    });
  }
  updateRangeFromParsed(a, d, g, w) {
    const b = g[d.axis];
    let E = b === null ? NaN : b;
    const i = w && g._stacks[d.axis];
    w && i && (w.values = i, E = y1(w, b, this._cachedMeta.index)), a.min = Math.min(a.min, E), a.max = Math.max(a.max, E);
  }
  getMinMax(a, d) {
    const g = this._cachedMeta, w = g._parsed, b = g._sorted && a === g.iScale, E = w.length, i = this._getOtherScale(a), O = xE(d, g, this.chart), j = {
      min: Number.POSITIVE_INFINITY,
      max: Number.NEGATIVE_INFINITY
    }, { min: Y, max: J } = mE(i);
    let ae, ce;
    function Te() {
      ce = w[ae];
      const be = ce[i.axis];
      return !As(ce[a.axis]) || Y > be || J < be;
    }
    for (ae = 0; ae < E && !(!Te() && (this.updateRangeFromParsed(j, a, ce, O), b)); ++ae)
      ;
    if (b) {
      for (ae = E - 1; ae >= 0; --ae)
        if (!Te()) {
          this.updateRangeFromParsed(j, a, ce, O);
          break;
        }
    }
    return j;
  }
  getAllParsedValues(a) {
    const d = this._cachedMeta._parsed, g = [];
    let w, b, E;
    for (w = 0, b = d.length; w < b; ++w)
      E = d[w][a.axis], As(E) && g.push(E);
    return g;
  }
  getMaxOverflow() {
    return !1;
  }
  getLabelAndValue(a) {
    const d = this._cachedMeta, g = d.iScale, w = d.vScale, b = this.getParsed(a);
    return {
      label: g ? "" + g.getLabelForValue(b[g.axis]) : "",
      value: w ? "" + w.getLabelForValue(b[w.axis]) : ""
    };
  }
  _update(a) {
    const d = this._cachedMeta;
    this.update(a || "default"), d._clip = dE(en(this.options.clip, uE(d.xScale, d.yScale, this.getMaxOverflow())));
  }
  update(a) {
  }
  draw() {
    const a = this._ctx, d = this.chart, g = this._cachedMeta, w = g.data || [], b = d.chartArea, E = [], i = this._drawStart || 0, O = this._drawCount || w.length - i, j = this.options.drawActiveElementsOnTop;
    let Y;
    for (g.dataset && g.dataset.draw(a, b, i, O), Y = i; Y < i + O; ++Y) {
      const J = w[Y];
      J.hidden || (J.active && j ? E.push(J) : J.draw(a, b));
    }
    for (Y = 0; Y < E.length; ++Y)
      E[Y].draw(a, b);
  }
  getStyle(a, d) {
    const g = d ? "active" : "default";
    return a === void 0 && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(g) : this.resolveDataElementOptions(a || 0, g);
  }
  getContext(a, d, g) {
    const w = this.getDataset();
    let b;
    if (a >= 0 && a < this._cachedMeta.data.length) {
      const E = this._cachedMeta.data[a];
      b = E.$context || (E.$context = yE(this.getContext(), a, E)), b.parsed = this.getParsed(a), b.raw = w.data[a], b.index = b.dataIndex = a;
    } else
      b = this.$context || (this.$context = gE(this.chart.getContext(), this.index)), b.dataset = w, b.index = b.datasetIndex = this.index;
    return b.active = !!d, b.mode = g, b;
  }
  resolveDatasetElementOptions(a) {
    return this._resolveElementOptions(this.datasetElementType.id, a);
  }
  resolveDataElementOptions(a, d) {
    return this._resolveElementOptions(this.dataElementType.id, d, a);
  }
  _resolveElementOptions(a, d = "default", g) {
    const w = d === "active", b = this._cachedDataOpts, E = a + "-" + d, i = b[E], O = this.enableOptionSharing && Of(g);
    if (i)
      return b1(i, O);
    const j = this.chart.config, Y = j.datasetElementScopeKeys(this._type, a), J = w ? [
      `${a}Hover`,
      "hover",
      a,
      ""
    ] : [
      a,
      ""
    ], ae = j.getOptionScopes(this.getDataset(), Y), ce = Object.keys(ys.elements[a]), Te = () => this.getContext(g, w, d), be = j.resolveNamedOptions(ae, ce, Te, J);
    return be.$shared && (be.$shared = O, b[E] = Object.freeze(b1(be, O))), be;
  }
  _resolveAnimations(a, d, g) {
    const w = this.chart, b = this._cachedDataOpts, E = `animation-${d}`, i = b[E];
    if (i)
      return i;
    let O;
    if (w.options.animation !== !1) {
      const Y = this.chart.config, J = Y.datasetAnimationScopeKeys(this._type, d), ae = Y.getOptionScopes(this.getDataset(), J);
      O = Y.createResolver(ae, this.getContext(a, g, d));
    }
    const j = new $b(w, O && O.animations);
    return O && O._cacheable && (b[E] = Object.freeze(j)), j;
  }
  getSharedOptions(a) {
    if (a.$shared)
      return this._sharedOptions || (this._sharedOptions = Object.assign({}, a));
  }
  includeOptions(a, d) {
    return !d || Rg(a) || this.chart._animationsDisabled;
  }
  _getSharedOptions(a, d) {
    const g = this.resolveDataElementOptions(a, d), w = this._sharedOptions, b = this.getSharedOptions(g), E = this.includeOptions(d, b) || b !== w;
    return this.updateSharedOptions(b, d, g), {
      sharedOptions: b,
      includeOptions: E
    };
  }
  updateElement(a, d, g, w) {
    Rg(w) ? Object.assign(a, g) : this._resolveAnimations(d, w).update(a, g);
  }
  updateSharedOptions(a, d, g) {
    a && !Rg(d) && this._resolveAnimations(void 0, d).update(a, g);
  }
  _setStyle(a, d, g, w) {
    a.active = w;
    const b = this.getStyle(d, w);
    this._resolveAnimations(d, g, w).update(a, {
      options: !w && this.getSharedOptions(b) || b
    });
  }
  removeHoverStyle(a, d, g) {
    this._setStyle(a, g, "active", !1);
  }
  setHoverStyle(a, d, g) {
    this._setStyle(a, g, "active", !0);
  }
  _removeDatasetHoverStyle() {
    const a = this._cachedMeta.dataset;
    a && this._setStyle(a, void 0, "active", !1);
  }
  _setDatasetHoverStyle() {
    const a = this._cachedMeta.dataset;
    a && this._setStyle(a, void 0, "active", !0);
  }
  _resyncElements(a) {
    const d = this._data, g = this._cachedMeta.data;
    for (const [i, O, j] of this._syncList)
      this[i](O, j);
    this._syncList = [];
    const w = g.length, b = d.length, E = Math.min(b, w);
    E && this.parse(0, E), b > w ? this._insertElements(w, b - w, a) : b < w && this._removeElements(b, w - b);
  }
  _insertElements(a, d, g = !0) {
    const w = this._cachedMeta, b = w.data, E = a + d;
    let i;
    const O = (j) => {
      for (j.length += d, i = j.length - 1; i >= E; i--)
        j[i] = j[i - d];
    };
    for (O(b), i = a; i < E; ++i)
      b[i] = new this.dataElementType();
    this._parsing && O(w._parsed), this.parse(a, d), g && this.updateElements(b, a, d, "reset");
  }
  updateElements(a, d, g, w) {
  }
  _removeElements(a, d) {
    const g = this._cachedMeta;
    if (this._parsing) {
      const w = g._parsed.splice(a, d);
      g._stacked && gf(g, w);
    }
    g.data.splice(a, d);
  }
  _sync(a) {
    if (this._parsing)
      this._syncList.push(a);
    else {
      const [d, g, w] = a;
      this[d](g, w);
    }
    this.chart._dataChanges.push([
      this.index,
      ...a
    ]);
  }
  _onDataPush() {
    const a = arguments.length;
    this._sync([
      "_insertElements",
      this.getDataset().data.length - a,
      a
    ]);
  }
  _onDataPop() {
    this._sync([
      "_removeElements",
      this._cachedMeta.data.length - 1,
      1
    ]);
  }
  _onDataShift() {
    this._sync([
      "_removeElements",
      0,
      1
    ]);
  }
  _onDataSplice(a, d) {
    d && this._sync([
      "_removeElements",
      a,
      d
    ]);
    const g = arguments.length - 2;
    g && this._sync([
      "_insertElements",
      a,
      g
    ]);
  }
  _onDataUnshift() {
    this._sync([
      "_insertElements",
      0,
      arguments.length
    ]);
  }
}
Yt(za, "defaults", {}), Yt(za, "datasetElementType", null), Yt(za, "dataElementType", null);
function vE(m, a) {
  if (!m._cache.$bar) {
    const d = m.getMatchingVisibleMetas(a);
    let g = [];
    for (let w = 0, b = d.length; w < b; w++)
      g = g.concat(d[w].controller.getAllParsedValues(m));
    m._cache.$bar = Cb(g.sort((w, b) => w - b));
  }
  return m._cache.$bar;
}
function bE(m) {
  const a = m.iScale, d = vE(a, m.type);
  let g = a._length, w, b, E, i;
  const O = () => {
    E === 32767 || E === -32768 || (Of(i) && (g = Math.min(g, Math.abs(E - i) || g)), i = E);
  };
  for (w = 0, b = d.length; w < b; ++w)
    E = a.getPixelForValue(d[w]), O();
  for (i = void 0, w = 0, b = a.ticks.length; w < b; ++w)
    E = a.getPixelForTick(w), O();
  return g;
}
function wE(m, a, d, g) {
  const w = d.barThickness;
  let b, E;
  return En(w) ? (b = a.min * d.categoryPercentage, E = d.barPercentage) : (b = w * g, E = 1), {
    chunk: b / g,
    ratio: E,
    start: a.pixels[m] - b / 2
  };
}
function TE(m, a, d, g) {
  const w = a.pixels, b = w[m];
  let E = m > 0 ? w[m - 1] : null, i = m < w.length - 1 ? w[m + 1] : null;
  const O = d.categoryPercentage;
  E === null && (E = b - (i === null ? a.end - a.start : i - b)), i === null && (i = b + b - E);
  const j = b - (b - Math.min(E, i)) / 2 * O;
  return {
    chunk: Math.abs(i - E) / 2 * O / g,
    ratio: d.barPercentage,
    start: j
  };
}
function ME(m, a, d, g) {
  const w = d.parse(m[0], g), b = d.parse(m[1], g), E = Math.min(w, b), i = Math.max(w, b);
  let O = E, j = i;
  Math.abs(E) > Math.abs(i) && (O = i, j = E), a[d.axis] = j, a._custom = {
    barStart: O,
    barEnd: j,
    start: w,
    end: b,
    min: E,
    max: i
  };
}
function Yb(m, a, d, g) {
  return hs(m) ? ME(m, a, d, g) : a[d.axis] = d.parse(m, g), a;
}
function w1(m, a, d, g) {
  const w = m.iScale, b = m.vScale, E = w.getLabels(), i = w === b, O = [];
  let j, Y, J, ae;
  for (j = d, Y = d + g; j < Y; ++j)
    ae = a[j], J = {}, J[w.axis] = i || w.parse(E[j], j), O.push(Yb(ae, J, b, j));
  return O;
}
function Og(m) {
  return m && m.barStart !== void 0 && m.barEnd !== void 0;
}
function SE(m, a, d) {
  return m !== 0 ? ll(m) : (a.isHorizontal() ? 1 : -1) * (a.min >= d ? 1 : -1);
}
function EE(m) {
  let a, d, g, w, b;
  return m.horizontal ? (a = m.base > m.x, d = "left", g = "right") : (a = m.base < m.y, d = "bottom", g = "top"), a ? (w = "end", b = "start") : (w = "start", b = "end"), {
    start: d,
    end: g,
    reverse: a,
    top: w,
    bottom: b
  };
}
function PE(m, a, d, g) {
  let w = a.borderSkipped;
  const b = {};
  if (!w) {
    m.borderSkipped = b;
    return;
  }
  if (w === !0) {
    m.borderSkipped = {
      top: !0,
      right: !0,
      bottom: !0,
      left: !0
    };
    return;
  }
  const { start: E, end: i, reverse: O, top: j, bottom: Y } = EE(m);
  w === "middle" && d && (m.enableBorderRadius = !0, (d._top || 0) === g ? w = j : (d._bottom || 0) === g ? w = Y : (b[T1(Y, E, i, O)] = !0, w = j)), b[T1(w, E, i, O)] = !0, m.borderSkipped = b;
}
function T1(m, a, d, g) {
  return g ? (m = AE(m, a, d), m = M1(m, d, a)) : m = M1(m, a, d), m;
}
function AE(m, a, d) {
  return m === a ? d : m === d ? a : m;
}
function M1(m, a, d) {
  return m === "start" ? a : m === "end" ? d : m;
}
function CE(m, { inflateAmount: a }, d) {
  m.inflateAmount = a === "auto" ? d === 1 ? 0.33 : 0 : a;
}
class Pm extends za {
  parsePrimitiveData(a, d, g, w) {
    return w1(a, d, g, w);
  }
  parseArrayData(a, d, g, w) {
    return w1(a, d, g, w);
  }
  parseObjectData(a, d, g, w) {
    const { iScale: b, vScale: E } = a, { xAxisKey: i = "x", yAxisKey: O = "y" } = this._parsing, j = b.axis === "x" ? i : O, Y = E.axis === "x" ? i : O, J = [];
    let ae, ce, Te, be;
    for (ae = g, ce = g + w; ae < ce; ++ae)
      be = d[ae], Te = {}, Te[b.axis] = b.parse(Rc(be, j), ae), J.push(Yb(Rc(be, Y), Te, E, ae));
    return J;
  }
  updateRangeFromParsed(a, d, g, w) {
    super.updateRangeFromParsed(a, d, g, w);
    const b = g._custom;
    b && d === this._cachedMeta.vScale && (a.min = Math.min(a.min, b.min), a.max = Math.max(a.max, b.max));
  }
  getMaxOverflow() {
    return 0;
  }
  getLabelAndValue(a) {
    const d = this._cachedMeta, { iScale: g, vScale: w } = d, b = this.getParsed(a), E = b._custom, i = Og(E) ? "[" + E.start + ", " + E.end + "]" : "" + w.getLabelForValue(b[w.axis]);
    return {
      label: "" + g.getLabelForValue(b[g.axis]),
      value: i
    };
  }
  initialize() {
    this.enableOptionSharing = !0, super.initialize();
    const a = this._cachedMeta;
    a.stack = this.getDataset().stack;
  }
  update(a) {
    const d = this._cachedMeta;
    this.updateElements(d.data, 0, d.data.length, a);
  }
  updateElements(a, d, g, w) {
    const b = w === "reset", { index: E, _cachedMeta: { vScale: i } } = this, O = i.getBasePixel(), j = i.isHorizontal(), Y = this._getRuler(), { sharedOptions: J, includeOptions: ae } = this._getSharedOptions(d, w);
    for (let ce = d; ce < d + g; ce++) {
      const Te = this.getParsed(ce), be = b || En(Te[i.axis]) ? {
        base: O,
        head: O
      } : this._calculateBarValuePixels(ce), Ze = this._calculateBarIndexPixels(ce, Y), je = (Te._stacks || {})[i.axis], ot = {
        horizontal: j,
        base: be.base,
        enableBorderRadius: !je || Og(Te._custom) || E === je._top || E === je._bottom,
        x: j ? be.head : Ze.center,
        y: j ? Ze.center : be.head,
        height: j ? Ze.size : Math.abs(be.size),
        width: j ? Math.abs(be.size) : Ze.size
      };
      ae && (ot.options = J || this.resolveDataElementOptions(ce, a[ce].active ? "active" : w));
      const vt = ot.options || a[ce].options;
      PE(ot, vt, je, E), CE(ot, vt, Y.ratio), this.updateElement(a[ce], ce, ot, w);
    }
  }
  _getStacks(a, d) {
    const { iScale: g } = this._cachedMeta, w = g.getMatchingVisibleMetas(this._type).filter((Y) => Y.controller.options.grouped), b = g.options.stacked, E = [], i = this._cachedMeta.controller.getParsed(d), O = i && i[g.axis], j = (Y) => {
      const J = Y._parsed.find((ce) => ce[g.axis] === O), ae = J && J[Y.vScale.axis];
      if (En(ae) || isNaN(ae))
        return !0;
    };
    for (const Y of w)
      if (!(d !== void 0 && j(Y)) && ((b === !1 || E.indexOf(Y.stack) === -1 || b === void 0 && Y.stack === void 0) && E.push(Y.stack), Y.index === a))
        break;
    return E.length || E.push(void 0), E;
  }
  _getStackCount(a) {
    return this._getStacks(void 0, a).length;
  }
  _getStackIndex(a, d, g) {
    const w = this._getStacks(a, g), b = d !== void 0 ? w.indexOf(d) : -1;
    return b === -1 ? w.length - 1 : b;
  }
  _getRuler() {
    const a = this.options, d = this._cachedMeta, g = d.iScale, w = [];
    let b, E;
    for (b = 0, E = d.data.length; b < E; ++b)
      w.push(g.getPixelForValue(this.getParsed(b)[g.axis], b));
    const i = a.barThickness;
    return {
      min: i || bE(d),
      pixels: w,
      start: g._startPixel,
      end: g._endPixel,
      stackCount: this._getStackCount(),
      scale: g,
      grouped: a.grouped,
      ratio: i ? 1 : a.categoryPercentage * a.barPercentage
    };
  }
  _calculateBarValuePixels(a) {
    const { _cachedMeta: { vScale: d, _stacked: g, index: w }, options: { base: b, minBarLength: E } } = this, i = b || 0, O = this.getParsed(a), j = O._custom, Y = Og(j);
    let J = O[d.axis], ae = 0, ce = g ? this.applyStack(d, O, g) : J, Te, be;
    ce !== J && (ae = ce - J, ce = J), Y && (J = j.barStart, ce = j.barEnd - j.barStart, J !== 0 && ll(J) !== ll(j.barEnd) && (ae = 0), ae += J);
    const Ze = !En(b) && !Y ? b : ae;
    let je = d.getPixelForValue(Ze);
    if (this.chart.getDataVisibility(a) ? Te = d.getPixelForValue(ae + ce) : Te = je, be = Te - je, Math.abs(be) < E) {
      be = SE(be, d, i) * E, J === i && (je -= be / 2);
      const ot = d.getPixelForDecimal(0), vt = d.getPixelForDecimal(1), ht = Math.min(ot, vt), gt = Math.max(ot, vt);
      je = Math.max(Math.min(je, gt), ht), Te = je + be, g && !Y && (O._stacks[d.axis]._visualValues[w] = d.getValueForPixel(Te) - d.getValueForPixel(je));
    }
    if (je === d.getPixelForValue(i)) {
      const ot = ll(be) * d.getLineWidthForValue(i) / 2;
      je += ot, be -= ot;
    }
    return {
      size: be,
      base: je,
      head: Te,
      center: Te + be / 2
    };
  }
  _calculateBarIndexPixels(a, d) {
    const g = d.scale, w = this.options, b = w.skipNull, E = en(w.maxBarThickness, 1 / 0);
    let i, O;
    if (d.grouped) {
      const j = b ? this._getStackCount(a) : d.stackCount, Y = w.barThickness === "flex" ? TE(a, d, w, j) : wE(a, d, w, j), J = this._getStackIndex(this.index, this._cachedMeta.stack, b ? a : void 0);
      i = Y.start + Y.chunk * J + Y.chunk / 2, O = Math.min(E, Y.chunk * Y.ratio);
    } else
      i = g.getPixelForValue(this.getParsed(a)[g.axis], a), O = Math.min(E, d.min * d.ratio);
    return {
      base: i - O / 2,
      head: i + O / 2,
      center: i,
      size: O
    };
  }
  draw() {
    const a = this._cachedMeta, d = a.vScale, g = a.data, w = g.length;
    let b = 0;
    for (; b < w; ++b)
      this.getParsed(b)[d.axis] !== null && !g[b].hidden && g[b].draw(this._ctx);
  }
}
Yt(Pm, "id", "bar"), Yt(Pm, "defaults", {
  datasetElementType: !1,
  dataElementType: "bar",
  categoryPercentage: 0.8,
  barPercentage: 0.9,
  grouped: !0,
  animations: {
    numbers: {
      type: "number",
      properties: [
        "x",
        "y",
        "base",
        "width",
        "height"
      ]
    }
  }
}), Yt(Pm, "overrides", {
  scales: {
    _index_: {
      type: "category",
      offset: !0,
      grid: {
        offset: !0
      }
    },
    _value_: {
      type: "linear",
      beginAtZero: !0
    }
  }
});
class Am extends za {
  initialize() {
    this.enableOptionSharing = !0, super.initialize();
  }
  parsePrimitiveData(a, d, g, w) {
    const b = super.parsePrimitiveData(a, d, g, w);
    for (let E = 0; E < b.length; E++)
      b[E]._custom = this.resolveDataElementOptions(E + g).radius;
    return b;
  }
  parseArrayData(a, d, g, w) {
    const b = super.parseArrayData(a, d, g, w);
    for (let E = 0; E < b.length; E++) {
      const i = d[g + E];
      b[E]._custom = en(i[2], this.resolveDataElementOptions(E + g).radius);
    }
    return b;
  }
  parseObjectData(a, d, g, w) {
    const b = super.parseObjectData(a, d, g, w);
    for (let E = 0; E < b.length; E++) {
      const i = d[g + E];
      b[E]._custom = en(i && i.r && +i.r, this.resolveDataElementOptions(E + g).radius);
    }
    return b;
  }
  getMaxOverflow() {
    const a = this._cachedMeta.data;
    let d = 0;
    for (let g = a.length - 1; g >= 0; --g)
      d = Math.max(d, a[g].size(this.resolveDataElementOptions(g)) / 2);
    return d > 0 && d;
  }
  getLabelAndValue(a) {
    const d = this._cachedMeta, g = this.chart.data.labels || [], { xScale: w, yScale: b } = d, E = this.getParsed(a), i = w.getLabelForValue(E.x), O = b.getLabelForValue(E.y), j = E._custom;
    return {
      label: g[a] || "",
      value: "(" + i + ", " + O + (j ? ", " + j : "") + ")"
    };
  }
  update(a) {
    const d = this._cachedMeta.data;
    this.updateElements(d, 0, d.length, a);
  }
  updateElements(a, d, g, w) {
    const b = w === "reset", { iScale: E, vScale: i } = this._cachedMeta, { sharedOptions: O, includeOptions: j } = this._getSharedOptions(d, w), Y = E.axis, J = i.axis;
    for (let ae = d; ae < d + g; ae++) {
      const ce = a[ae], Te = !b && this.getParsed(ae), be = {}, Ze = be[Y] = b ? E.getPixelForDecimal(0.5) : E.getPixelForValue(Te[Y]), je = be[J] = b ? i.getBasePixel() : i.getPixelForValue(Te[J]);
      be.skip = isNaN(Ze) || isNaN(je), j && (be.options = O || this.resolveDataElementOptions(ae, ce.active ? "active" : w), b && (be.options.radius = 0)), this.updateElement(ce, ae, be, w);
    }
  }
  resolveDataElementOptions(a, d) {
    const g = this.getParsed(a);
    let w = super.resolveDataElementOptions(a, d);
    w.$shared && (w = Object.assign({}, w, {
      $shared: !1
    }));
    const b = w.radius;
    return d !== "active" && (w.radius = 0), w.radius += en(g && g._custom, b), w;
  }
}
Yt(Am, "id", "bubble"), Yt(Am, "defaults", {
  datasetElementType: !1,
  dataElementType: "point",
  animations: {
    numbers: {
      type: "number",
      properties: [
        "x",
        "y",
        "borderWidth",
        "radius"
      ]
    }
  }
}), Yt(Am, "overrides", {
  scales: {
    x: {
      type: "linear"
    },
    y: {
      type: "linear"
    }
  }
});
function IE(m, a, d) {
  let g = 1, w = 1, b = 0, E = 0;
  if (a < us) {
    const i = m, O = i + a, j = Math.cos(i), Y = Math.sin(i), J = Math.cos(O), ae = Math.sin(O), ce = (vt, ht, gt) => Ff(vt, i, O, !0) ? 1 : Math.max(ht, ht * d, gt, gt * d), Te = (vt, ht, gt) => Ff(vt, i, O, !0) ? -1 : Math.min(ht, ht * d, gt, gt * d), be = ce(0, j, J), Ze = ce(Ns, Y, ae), je = Te(ds, j, J), ot = Te(ds + Ns, Y, ae);
    g = (be - je) / 2, w = (Ze - ot) / 2, b = -(be + je) / 2, E = -(Ze + ot) / 2;
  }
  return {
    ratioX: g,
    ratioY: w,
    offsetX: b,
    offsetY: E
  };
}
class Dh extends za {
  constructor(a, d) {
    super(a, d), this.enableOptionSharing = !0, this.innerRadius = void 0, this.outerRadius = void 0, this.offsetX = void 0, this.offsetY = void 0;
  }
  linkScales() {
  }
  parse(a, d) {
    const g = this.getDataset().data, w = this._cachedMeta;
    if (this._parsing === !1)
      w._parsed = g;
    else {
      let b = (O) => +g[O];
      if (yn(g[a])) {
        const { key: O = "value" } = this._parsing;
        b = (j) => +Rc(g[j], O);
      }
      let E, i;
      for (E = a, i = a + d; E < i; ++E)
        w._parsed[E] = b(E);
    }
  }
  _getRotation() {
    return Ia(this.options.rotation - 90);
  }
  _getCircumference() {
    return Ia(this.options.circumference);
  }
  _getRotationExtents() {
    let a = us, d = -us;
    for (let g = 0; g < this.chart.data.datasets.length; ++g)
      if (this.chart.isDatasetVisible(g) && this.chart.getDatasetMeta(g).type === this._type) {
        const w = this.chart.getDatasetMeta(g).controller, b = w._getRotation(), E = w._getCircumference();
        a = Math.min(a, b), d = Math.max(d, b + E);
      }
    return {
      rotation: a,
      circumference: d - a
    };
  }
  update(a) {
    const d = this.chart, { chartArea: g } = d, w = this._cachedMeta, b = w.data, E = this.getMaxBorderWidth() + this.getMaxOffset(b) + this.options.spacing, i = Math.max((Math.min(g.width, g.height) - E) / 2, 0), O = Math.min(ZM(this.options.cutout, i), 1), j = this._getRingWeight(this.index), { circumference: Y, rotation: J } = this._getRotationExtents(), { ratioX: ae, ratioY: ce, offsetX: Te, offsetY: be } = IE(J, Y, O), Ze = (g.width - E) / ae, je = (g.height - E) / ce, ot = Math.max(Math.min(Ze, je) / 2, 0), vt = Mb(this.options.radius, ot), ht = Math.max(vt * O, 0), gt = (vt - ht) / this._getVisibleDatasetWeightTotal();
    this.offsetX = Te * vt, this.offsetY = be * vt, w.total = this.calculateTotal(), this.outerRadius = vt - gt * this._getRingWeightOffset(this.index), this.innerRadius = Math.max(this.outerRadius - gt * j, 0), this.updateElements(b, 0, b.length, a);
  }
  _circumference(a, d) {
    const g = this.options, w = this._cachedMeta, b = this._getCircumference();
    return d && g.animation.animateRotate || !this.chart.getDataVisibility(a) || w._parsed[a] === null || w.data[a].hidden ? 0 : this.calculateCircumference(w._parsed[a] * b / us);
  }
  updateElements(a, d, g, w) {
    const b = w === "reset", E = this.chart, i = E.chartArea, j = E.options.animation, Y = (i.left + i.right) / 2, J = (i.top + i.bottom) / 2, ae = b && j.animateScale, ce = ae ? 0 : this.innerRadius, Te = ae ? 0 : this.outerRadius, { sharedOptions: be, includeOptions: Ze } = this._getSharedOptions(d, w);
    let je = this._getRotation(), ot;
    for (ot = 0; ot < d; ++ot)
      je += this._circumference(ot, b);
    for (ot = d; ot < d + g; ++ot) {
      const vt = this._circumference(ot, b), ht = a[ot], gt = {
        x: Y + this.offsetX,
        y: J + this.offsetY,
        startAngle: je,
        endAngle: je + vt,
        circumference: vt,
        outerRadius: Te,
        innerRadius: ce
      };
      Ze && (gt.options = be || this.resolveDataElementOptions(ot, ht.active ? "active" : w)), je += vt, this.updateElement(ht, ot, gt, w);
    }
  }
  calculateTotal() {
    const a = this._cachedMeta, d = a.data;
    let g = 0, w;
    for (w = 0; w < d.length; w++) {
      const b = a._parsed[w];
      b !== null && !isNaN(b) && this.chart.getDataVisibility(w) && !d[w].hidden && (g += Math.abs(b));
    }
    return g;
  }
  calculateCircumference(a) {
    const d = this._cachedMeta.total;
    return d > 0 && !isNaN(a) ? us * (Math.abs(a) / d) : 0;
  }
  getLabelAndValue(a) {
    const d = this._cachedMeta, g = this.chart, w = g.data.labels || [], b = Zf(d._parsed[a], g.options.locale);
    return {
      label: w[a] || "",
      value: b
    };
  }
  getMaxBorderWidth(a) {
    let d = 0;
    const g = this.chart;
    let w, b, E, i, O;
    if (!a) {
      for (w = 0, b = g.data.datasets.length; w < b; ++w)
        if (g.isDatasetVisible(w)) {
          E = g.getDatasetMeta(w), a = E.data, i = E.controller;
          break;
        }
    }
    if (!a)
      return 0;
    for (w = 0, b = a.length; w < b; ++w)
      O = i.resolveDataElementOptions(w), O.borderAlign !== "inner" && (d = Math.max(d, O.borderWidth || 0, O.hoverBorderWidth || 0));
    return d;
  }
  getMaxOffset(a) {
    let d = 0;
    for (let g = 0, w = a.length; g < w; ++g) {
      const b = this.resolveDataElementOptions(g);
      d = Math.max(d, b.offset || 0, b.hoverOffset || 0);
    }
    return d;
  }
  _getRingWeightOffset(a) {
    let d = 0;
    for (let g = 0; g < a; ++g)
      this.chart.isDatasetVisible(g) && (d += this._getRingWeight(g));
    return d;
  }
  _getRingWeight(a) {
    return Math.max(en(this.chart.data.datasets[a].weight, 1), 0);
  }
  _getVisibleDatasetWeightTotal() {
    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
  }
}
Yt(Dh, "id", "doughnut"), Yt(Dh, "defaults", {
  datasetElementType: !1,
  dataElementType: "arc",
  animation: {
    animateRotate: !0,
    animateScale: !1
  },
  animations: {
    numbers: {
      type: "number",
      properties: [
        "circumference",
        "endAngle",
        "innerRadius",
        "outerRadius",
        "startAngle",
        "x",
        "y",
        "offset",
        "borderWidth",
        "spacing"
      ]
    }
  },
  cutout: "50%",
  rotation: 0,
  circumference: 360,
  radius: "100%",
  spacing: 0,
  indexAxis: "r"
}), Yt(Dh, "descriptors", {
  _scriptable: (a) => a !== "spacing",
  _indexable: (a) => a !== "spacing" && !a.startsWith("borderDash") && !a.startsWith("hoverBorderDash")
}), Yt(Dh, "overrides", {
  aspectRatio: 1,
  plugins: {
    legend: {
      labels: {
        generateLabels(a) {
          const d = a.data;
          if (d.labels.length && d.datasets.length) {
            const { labels: { pointStyle: g, color: w } } = a.legend.options;
            return d.labels.map((b, E) => {
              const O = a.getDatasetMeta(0).controller.getStyle(E);
              return {
                text: b,
                fillStyle: O.backgroundColor,
                strokeStyle: O.borderColor,
                fontColor: w,
                lineWidth: O.borderWidth,
                pointStyle: g,
                hidden: !a.getDataVisibility(E),
                index: E
              };
            });
          }
          return [];
        }
      },
      onClick(a, d, g) {
        g.chart.toggleDataVisibility(d.index), g.chart.update();
      }
    }
  }
});
class Cm extends za {
  initialize() {
    this.enableOptionSharing = !0, this.supportsDecimation = !0, super.initialize();
  }
  update(a) {
    const d = this._cachedMeta, { dataset: g, data: w = [], _dataset: b } = d, E = this.chart._animationsDisabled;
    let { start: i, count: O } = zb(d, w, E);
    this._drawStart = i, this._drawCount = O, Db(d) && (i = 0, O = w.length), g._chart = this.chart, g._datasetIndex = this.index, g._decimated = !!b._decimated, g.points = w;
    const j = this.resolveDatasetElementOptions(a);
    this.options.showLine || (j.borderWidth = 0), j.segment = this.options.segment, this.updateElement(g, void 0, {
      animated: !E,
      options: j
    }, a), this.updateElements(w, i, O, a);
  }
  updateElements(a, d, g, w) {
    const b = w === "reset", { iScale: E, vScale: i, _stacked: O, _dataset: j } = this._cachedMeta, { sharedOptions: Y, includeOptions: J } = this._getSharedOptions(d, w), ae = E.axis, ce = i.axis, { spanGaps: Te, segment: be } = this.options, Ze = Xu(Te) ? Te : Number.POSITIVE_INFINITY, je = this.chart._animationsDisabled || b || w === "none", ot = d + g, vt = a.length;
    let ht = d > 0 && this.getParsed(d - 1);
    for (let gt = 0; gt < vt; ++gt) {
      const Vt = a[gt], pt = je ? Vt : {};
      if (gt < d || gt >= ot) {
        pt.skip = !0;
        continue;
      }
      const Gt = this.getParsed(gt), ui = En(Gt[ce]), kt = pt[ae] = E.getPixelForValue(Gt[ae], gt), Pt = pt[ce] = b || ui ? i.getBasePixel() : i.getPixelForValue(O ? this.applyStack(i, Gt, O) : Gt[ce], gt);
      pt.skip = isNaN(kt) || isNaN(Pt) || ui, pt.stop = gt > 0 && Math.abs(Gt[ae] - ht[ae]) > Ze, be && (pt.parsed = Gt, pt.raw = j.data[gt]), J && (pt.options = Y || this.resolveDataElementOptions(gt, Vt.active ? "active" : w)), je || this.updateElement(Vt, gt, pt, w), ht = Gt;
    }
  }
  getMaxOverflow() {
    const a = this._cachedMeta, d = a.dataset, g = d.options && d.options.borderWidth || 0, w = a.data || [];
    if (!w.length)
      return g;
    const b = w[0].size(this.resolveDataElementOptions(0)), E = w[w.length - 1].size(this.resolveDataElementOptions(w.length - 1));
    return Math.max(g, b, E) / 2;
  }
  draw() {
    const a = this._cachedMeta;
    a.dataset.updateControlPoints(this.chart.chartArea, a.iScale.axis), super.draw();
  }
}
Yt(Cm, "id", "line"), Yt(Cm, "defaults", {
  datasetElementType: "line",
  dataElementType: "point",
  showLine: !0,
  spanGaps: !1
}), Yt(Cm, "overrides", {
  scales: {
    _index_: {
      type: "category"
    },
    _value_: {
      type: "linear"
    }
  }
});
class Df extends za {
  constructor(a, d) {
    super(a, d), this.innerRadius = void 0, this.outerRadius = void 0;
  }
  getLabelAndValue(a) {
    const d = this._cachedMeta, g = this.chart, w = g.data.labels || [], b = Zf(d._parsed[a].r, g.options.locale);
    return {
      label: w[a] || "",
      value: b
    };
  }
  parseObjectData(a, d, g, w) {
    return Ub.bind(this)(a, d, g, w);
  }
  update(a) {
    const d = this._cachedMeta.data;
    this._updateRadius(), this.updateElements(d, 0, d.length, a);
  }
  getMinMax() {
    const a = this._cachedMeta, d = {
      min: Number.POSITIVE_INFINITY,
      max: Number.NEGATIVE_INFINITY
    };
    return a.data.forEach((g, w) => {
      const b = this.getParsed(w).r;
      !isNaN(b) && this.chart.getDataVisibility(w) && (b < d.min && (d.min = b), b > d.max && (d.max = b));
    }), d;
  }
  _updateRadius() {
    const a = this.chart, d = a.chartArea, g = a.options, w = Math.min(d.right - d.left, d.bottom - d.top), b = Math.max(w / 2, 0), E = Math.max(g.cutoutPercentage ? b / 100 * g.cutoutPercentage : 1, 0), i = (b - E) / a.getVisibleDatasetCount();
    this.outerRadius = b - i * this.index, this.innerRadius = this.outerRadius - i;
  }
  updateElements(a, d, g, w) {
    const b = w === "reset", E = this.chart, O = E.options.animation, j = this._cachedMeta.rScale, Y = j.xCenter, J = j.yCenter, ae = j.getIndexAngle(0) - 0.5 * ds;
    let ce = ae, Te;
    const be = 360 / this.countVisibleElements();
    for (Te = 0; Te < d; ++Te)
      ce += this._computeAngle(Te, w, be);
    for (Te = d; Te < d + g; Te++) {
      const Ze = a[Te];
      let je = ce, ot = ce + this._computeAngle(Te, w, be), vt = E.getDataVisibility(Te) ? j.getDistanceFromCenterForValue(this.getParsed(Te).r) : 0;
      ce = ot, b && (O.animateScale && (vt = 0), O.animateRotate && (je = ot = ae));
      const ht = {
        x: Y,
        y: J,
        innerRadius: 0,
        outerRadius: vt,
        startAngle: je,
        endAngle: ot,
        options: this.resolveDataElementOptions(Te, Ze.active ? "active" : w)
      };
      this.updateElement(Ze, Te, ht, w);
    }
  }
  countVisibleElements() {
    const a = this._cachedMeta;
    let d = 0;
    return a.data.forEach((g, w) => {
      !isNaN(this.getParsed(w).r) && this.chart.getDataVisibility(w) && d++;
    }), d;
  }
  _computeAngle(a, d, g) {
    return this.chart.getDataVisibility(a) ? Ia(this.resolveDataElementOptions(a, d).angle || g) : 0;
  }
}
Yt(Df, "id", "polarArea"), Yt(Df, "defaults", {
  dataElementType: "arc",
  animation: {
    animateRotate: !0,
    animateScale: !0
  },
  animations: {
    numbers: {
      type: "number",
      properties: [
        "x",
        "y",
        "startAngle",
        "endAngle",
        "innerRadius",
        "outerRadius"
      ]
    }
  },
  indexAxis: "r",
  startAngle: 0
}), Yt(Df, "overrides", {
  aspectRatio: 1,
  plugins: {
    legend: {
      labels: {
        generateLabels(a) {
          const d = a.data;
          if (d.labels.length && d.datasets.length) {
            const { labels: { pointStyle: g, color: w } } = a.legend.options;
            return d.labels.map((b, E) => {
              const O = a.getDatasetMeta(0).controller.getStyle(E);
              return {
                text: b,
                fillStyle: O.backgroundColor,
                strokeStyle: O.borderColor,
                fontColor: w,
                lineWidth: O.borderWidth,
                pointStyle: g,
                hidden: !a.getDataVisibility(E),
                index: E
              };
            });
          }
          return [];
        }
      },
      onClick(a, d, g) {
        g.chart.toggleDataVisibility(d.index), g.chart.update();
      }
    }
  },
  scales: {
    r: {
      type: "radialLinear",
      angleLines: {
        display: !1
      },
      beginAtZero: !0,
      grid: {
        circular: !0
      },
      pointLabels: {
        display: !1
      },
      startAngle: 0
    }
  }
});
class Wg extends Dh {
}
Yt(Wg, "id", "pie"), Yt(Wg, "defaults", {
  cutout: 0,
  rotation: 0,
  circumference: 360,
  radius: "100%"
});
class Im extends za {
  getLabelAndValue(a) {
    const d = this._cachedMeta.vScale, g = this.getParsed(a);
    return {
      label: d.getLabels()[a],
      value: "" + d.getLabelForValue(g[d.axis])
    };
  }
  parseObjectData(a, d, g, w) {
    return Ub.bind(this)(a, d, g, w);
  }
  update(a) {
    const d = this._cachedMeta, g = d.dataset, w = d.data || [], b = d.iScale.getLabels();
    if (g.points = w, a !== "resize") {
      const E = this.resolveDatasetElementOptions(a);
      this.options.showLine || (E.borderWidth = 0);
      const i = {
        _loop: !0,
        _fullLoop: b.length === w.length,
        options: E
      };
      this.updateElement(g, void 0, i, a);
    }
    this.updateElements(w, 0, w.length, a);
  }
  updateElements(a, d, g, w) {
    const b = this._cachedMeta.rScale, E = w === "reset";
    for (let i = d; i < d + g; i++) {
      const O = a[i], j = this.resolveDataElementOptions(i, O.active ? "active" : w), Y = b.getPointPositionForValue(i, this.getParsed(i).r), J = E ? b.xCenter : Y.x, ae = E ? b.yCenter : Y.y, ce = {
        x: J,
        y: ae,
        angle: Y.angle,
        skip: isNaN(J) || isNaN(ae),
        options: j
      };
      this.updateElement(O, i, ce, w);
    }
  }
}
Yt(Im, "id", "radar"), Yt(Im, "defaults", {
  datasetElementType: "line",
  dataElementType: "point",
  indexAxis: "r",
  showLine: !0,
  elements: {
    line: {
      fill: "start"
    }
  }
}), Yt(Im, "overrides", {
  aspectRatio: 1,
  scales: {
    r: {
      type: "radialLinear"
    }
  }
});
class Lm extends za {
  getLabelAndValue(a) {
    const d = this._cachedMeta, g = this.chart.data.labels || [], { xScale: w, yScale: b } = d, E = this.getParsed(a), i = w.getLabelForValue(E.x), O = b.getLabelForValue(E.y);
    return {
      label: g[a] || "",
      value: "(" + i + ", " + O + ")"
    };
  }
  update(a) {
    const d = this._cachedMeta, { data: g = [] } = d, w = this.chart._animationsDisabled;
    let { start: b, count: E } = zb(d, g, w);
    if (this._drawStart = b, this._drawCount = E, Db(d) && (b = 0, E = g.length), this.options.showLine) {
      this.datasetElementType || this.addElements();
      const { dataset: i, _dataset: O } = d;
      i._chart = this.chart, i._datasetIndex = this.index, i._decimated = !!O._decimated, i.points = g;
      const j = this.resolveDatasetElementOptions(a);
      j.segment = this.options.segment, this.updateElement(i, void 0, {
        animated: !w,
        options: j
      }, a);
    } else
      this.datasetElementType && (delete d.dataset, this.datasetElementType = !1);
    this.updateElements(g, b, E, a);
  }
  addElements() {
    const { showLine: a } = this.options;
    !this.datasetElementType && a && (this.datasetElementType = this.chart.registry.getElement("line")), super.addElements();
  }
  updateElements(a, d, g, w) {
    const b = w === "reset", { iScale: E, vScale: i, _stacked: O, _dataset: j } = this._cachedMeta, Y = this.resolveDataElementOptions(d, w), J = this.getSharedOptions(Y), ae = this.includeOptions(w, J), ce = E.axis, Te = i.axis, { spanGaps: be, segment: Ze } = this.options, je = Xu(be) ? be : Number.POSITIVE_INFINITY, ot = this.chart._animationsDisabled || b || w === "none";
    let vt = d > 0 && this.getParsed(d - 1);
    for (let ht = d; ht < d + g; ++ht) {
      const gt = a[ht], Vt = this.getParsed(ht), pt = ot ? gt : {}, Gt = En(Vt[Te]), ui = pt[ce] = E.getPixelForValue(Vt[ce], ht), kt = pt[Te] = b || Gt ? i.getBasePixel() : i.getPixelForValue(O ? this.applyStack(i, Vt, O) : Vt[Te], ht);
      pt.skip = isNaN(ui) || isNaN(kt) || Gt, pt.stop = ht > 0 && Math.abs(Vt[ce] - vt[ce]) > je, Ze && (pt.parsed = Vt, pt.raw = j.data[ht]), ae && (pt.options = J || this.resolveDataElementOptions(ht, gt.active ? "active" : w)), ot || this.updateElement(gt, ht, pt, w), vt = Vt;
    }
    this.updateSharedOptions(J, w, Y);
  }
  getMaxOverflow() {
    const a = this._cachedMeta, d = a.data || [];
    if (!this.options.showLine) {
      let i = 0;
      for (let O = d.length - 1; O >= 0; --O)
        i = Math.max(i, d[O].size(this.resolveDataElementOptions(O)) / 2);
      return i > 0 && i;
    }
    const g = a.dataset, w = g.options && g.options.borderWidth || 0;
    if (!d.length)
      return w;
    const b = d[0].size(this.resolveDataElementOptions(0)), E = d[d.length - 1].size(this.resolveDataElementOptions(d.length - 1));
    return Math.max(w, b, E) / 2;
  }
}
Yt(Lm, "id", "scatter"), Yt(Lm, "defaults", {
  datasetElementType: !1,
  dataElementType: "point",
  showLine: !1,
  fill: !1
}), Yt(Lm, "overrides", {
  interaction: {
    mode: "point"
  },
  scales: {
    x: {
      type: "linear"
    },
    y: {
      type: "linear"
    }
  }
});
var LE = /* @__PURE__ */ Object.freeze({
  __proto__: null,
  BarController: Pm,
  BubbleController: Am,
  DoughnutController: Dh,
  LineController: Cm,
  PieController: Wg,
  PolarAreaController: Df,
  RadarController: Im,
  ScatterController: Lm
});
function Ch() {
  throw new Error("This method is not implemented: Check that a complete date adapter is provided.");
}
class by {
  constructor(a) {
    Yt(this, "options");
    this.options = a || {};
  }
  /**
  * Override default date adapter methods.
  * Accepts type parameter to define options type.
  * @example
  * Chart._adapters._date.override<{myAdapterOption: string}>({
  *   init() {
  *     console.log(this.options.myAdapterOption);
  *   }
  * })
  */
  static override(a) {
    Object.assign(by.prototype, a);
  }
  // eslint-disable-next-line @typescript-eslint/no-empty-function
  init() {
  }
  formats() {
    return Ch();
  }
  parse() {
    return Ch();
  }
  format() {
    return Ch();
  }
  add() {
    return Ch();
  }
  diff() {
    return Ch();
  }
  startOf() {
    return Ch();
  }
  endOf() {
    return Ch();
  }
}
var zE = {
  _date: by
};
function DE(m, a, d, g) {
  const { controller: w, data: b, _sorted: E } = m, i = w._cachedMeta.iScale;
  if (i && a === i.axis && a !== "r" && E && b.length) {
    const O = i._reversePixels ? iS : Vl;
    if (g) {
      if (w._sharedOptions) {
        const j = b[0], Y = typeof j.getRange == "function" && j.getRange(a);
        if (Y) {
          const J = O(b, a, d - Y), ae = O(b, a, d + Y);
          return {
            lo: J.lo,
            hi: ae.hi
          };
        }
      }
    } else
      return O(b, a, d);
  }
  return {
    lo: 0,
    hi: b.length - 1
  };
}
function Hf(m, a, d, g, w) {
  const b = m.getSortedVisibleDatasetMetas(), E = d[a];
  for (let i = 0, O = b.length; i < O; ++i) {
    const { index: j, data: Y } = b[i], { lo: J, hi: ae } = DE(b[i], a, E, w);
    for (let ce = J; ce <= ae; ++ce) {
      const Te = Y[ce];
      Te.skip || g(Te, j, ce);
    }
  }
}
function kE(m) {
  const a = m.indexOf("x") !== -1, d = m.indexOf("y") !== -1;
  return function(g, w) {
    const b = a ? Math.abs(g.x - w.x) : 0, E = d ? Math.abs(g.y - w.y) : 0;
    return Math.sqrt(Math.pow(b, 2) + Math.pow(E, 2));
  };
}
function Fg(m, a, d, g, w) {
  const b = [];
  return !w && !m.isPointInArea(a) || Hf(m, d, a, function(i, O, j) {
    !w && !Ul(i, m.chartArea, 0) || i.inRange(a.x, a.y, g) && b.push({
      element: i,
      datasetIndex: O,
      index: j
    });
  }, !0), b;
}
function RE(m, a, d, g) {
  let w = [];
  function b(E, i, O) {
    const { startAngle: j, endAngle: Y } = E.getProps([
      "startAngle",
      "endAngle"
    ], g), { angle: J } = Pb(E, {
      x: a.x,
      y: a.y
    });
    Ff(J, j, Y) && w.push({
      element: E,
      datasetIndex: i,
      index: O
    });
  }
  return Hf(m, d, a, b), w;
}
function OE(m, a, d, g, w, b) {
  let E = [];
  const i = kE(d);
  let O = Number.POSITIVE_INFINITY;
  function j(Y, J, ae) {
    const ce = Y.inRange(a.x, a.y, w);
    if (g && !ce)
      return;
    const Te = Y.getCenterPoint(w);
    if (!(!!b || m.isPointInArea(Te)) && !ce)
      return;
    const Ze = i(a, Te);
    Ze < O ? (E = [
      {
        element: Y,
        datasetIndex: J,
        index: ae
      }
    ], O = Ze) : Ze === O && E.push({
      element: Y,
      datasetIndex: J,
      index: ae
    });
  }
  return Hf(m, d, a, j), E;
}
function Bg(m, a, d, g, w, b) {
  return !b && !m.isPointInArea(a) ? [] : d === "r" && !g ? RE(m, a, d, w) : OE(m, a, d, g, w, b);
}
function S1(m, a, d, g, w) {
  const b = [], E = d === "x" ? "inXRange" : "inYRange";
  let i = !1;
  return Hf(m, d, a, (O, j, Y) => {
    O[E] && O[E](a[d], w) && (b.push({
      element: O,
      datasetIndex: j,
      index: Y
    }), i = i || O.inRange(a.x, a.y, w));
  }), g && !i ? [] : b;
}
var FE = {
  evaluateInteractionItems: Hf,
  modes: {
    index(m, a, d, g) {
      const w = Lh(a, m), b = d.axis || "x", E = d.includeInvisible || !1, i = d.intersect ? Fg(m, w, b, g, E) : Bg(m, w, b, !1, g, E), O = [];
      return i.length ? (m.getSortedVisibleDatasetMetas().forEach((j) => {
        const Y = i[0].index, J = j.data[Y];
        J && !J.skip && O.push({
          element: J,
          datasetIndex: j.index,
          index: Y
        });
      }), O) : [];
    },
    dataset(m, a, d, g) {
      const w = Lh(a, m), b = d.axis || "xy", E = d.includeInvisible || !1;
      let i = d.intersect ? Fg(m, w, b, g, E) : Bg(m, w, b, !1, g, E);
      if (i.length > 0) {
        const O = i[0].datasetIndex, j = m.getDatasetMeta(O).data;
        i = [];
        for (let Y = 0; Y < j.length; ++Y)
          i.push({
            element: j[Y],
            datasetIndex: O,
            index: Y
          });
      }
      return i;
    },
    point(m, a, d, g) {
      const w = Lh(a, m), b = d.axis || "xy", E = d.includeInvisible || !1;
      return Fg(m, w, b, g, E);
    },
    nearest(m, a, d, g) {
      const w = Lh(a, m), b = d.axis || "xy", E = d.includeInvisible || !1;
      return Bg(m, w, b, d.intersect, g, E);
    },
    x(m, a, d, g) {
      const w = Lh(a, m);
      return S1(m, w, "x", d.intersect, g);
    },
    y(m, a, d, g) {
      const w = Lh(a, m);
      return S1(m, w, "y", d.intersect, g);
    }
  }
};
const Kb = [
  "left",
  "top",
  "right",
  "bottom"
];
function yf(m, a) {
  return m.filter((d) => d.pos === a);
}
function E1(m, a) {
  return m.filter((d) => Kb.indexOf(d.pos) === -1 && d.box.axis === a);
}
function xf(m, a) {
  return m.sort((d, g) => {
    const w = a ? g : d, b = a ? d : g;
    return w.weight === b.weight ? w.index - b.index : w.weight - b.weight;
  });
}
function BE(m) {
  const a = [];
  let d, g, w, b, E, i;
  for (d = 0, g = (m || []).length; d < g; ++d)
    w = m[d], { position: b, options: { stack: E, stackWeight: i = 1 } } = w, a.push({
      index: d,
      box: w,
      pos: b,
      horizontal: w.isHorizontal(),
      weight: w.weight,
      stack: E && b + E,
      stackWeight: i
    });
  return a;
}
function NE(m) {
  const a = {};
  for (const d of m) {
    const { stack: g, pos: w, stackWeight: b } = d;
    if (!g || !Kb.includes(w))
      continue;
    const E = a[g] || (a[g] = {
      count: 0,
      placed: 0,
      weight: 0,
      size: 0
    });
    E.count++, E.weight += b;
  }
  return a;
}
function VE(m, a) {
  const d = NE(m), { vBoxMaxWidth: g, hBoxMaxHeight: w } = a;
  let b, E, i;
  for (b = 0, E = m.length; b < E; ++b) {
    i = m[b];
    const { fullSize: O } = i.box, j = d[i.stack], Y = j && i.stackWeight / j.weight;
    i.horizontal ? (i.width = Y ? Y * g : O && a.availableWidth, i.height = w) : (i.width = g, i.height = Y ? Y * w : O && a.availableHeight);
  }
  return d;
}
function UE(m) {
  const a = BE(m), d = xf(a.filter((j) => j.box.fullSize), !0), g = xf(yf(a, "left"), !0), w = xf(yf(a, "right")), b = xf(yf(a, "top"), !0), E = xf(yf(a, "bottom")), i = E1(a, "x"), O = E1(a, "y");
  return {
    fullSize: d,
    leftAndTop: g.concat(b),
    rightAndBottom: w.concat(O).concat(E).concat(i),
    chartArea: yf(a, "chartArea"),
    vertical: g.concat(w).concat(O),
    horizontal: b.concat(E).concat(i)
  };
}
function P1(m, a, d, g) {
  return Math.max(m[d], a[d]) + Math.max(m[g], a[g]);
}
function Jb(m, a) {
  m.top = Math.max(m.top, a.top), m.left = Math.max(m.left, a.left), m.bottom = Math.max(m.bottom, a.bottom), m.right = Math.max(m.right, a.right);
}
function jE(m, a, d, g) {
  const { pos: w, box: b } = d, E = m.maxPadding;
  if (!yn(w)) {
    d.size && (m[w] -= d.size);
    const J = g[d.stack] || {
      size: 0,
      count: 1
    };
    J.size = Math.max(J.size, d.horizontal ? b.height : b.width), d.size = J.size / J.count, m[w] += d.size;
  }
  b.getPadding && Jb(E, b.getPadding());
  const i = Math.max(0, a.outerWidth - P1(E, m, "left", "right")), O = Math.max(0, a.outerHeight - P1(E, m, "top", "bottom")), j = i !== m.w, Y = O !== m.h;
  return m.w = i, m.h = O, d.horizontal ? {
    same: j,
    other: Y
  } : {
    same: Y,
    other: j
  };
}
function GE(m) {
  const a = m.maxPadding;
  function d(g) {
    const w = Math.max(a[g] - m[g], 0);
    return m[g] += w, w;
  }
  m.y += d("top"), m.x += d("left"), d("right"), d("bottom");
}
function ZE(m, a) {
  const d = a.maxPadding;
  function g(w) {
    const b = {
      left: 0,
      top: 0,
      right: 0,
      bottom: 0
    };
    return w.forEach((E) => {
      b[E] = Math.max(a[E], d[E]);
    }), b;
  }
  return g(m ? [
    "left",
    "right"
  ] : [
    "top",
    "bottom"
  ]);
}
function Mf(m, a, d, g) {
  const w = [];
  let b, E, i, O, j, Y;
  for (b = 0, E = m.length, j = 0; b < E; ++b) {
    i = m[b], O = i.box, O.update(i.width || a.w, i.height || a.h, ZE(i.horizontal, a));
    const { same: J, other: ae } = jE(a, d, i, g);
    j |= J && w.length, Y = Y || ae, O.fullSize || w.push(i);
  }
  return j && Mf(w, a, d, g) || Y;
}
function gm(m, a, d, g, w) {
  m.top = d, m.left = a, m.right = a + g, m.bottom = d + w, m.width = g, m.height = w;
}
function A1(m, a, d, g) {
  const w = d.padding;
  let { x: b, y: E } = a;
  for (const i of m) {
    const O = i.box, j = g[i.stack] || {
      count: 1,
      placed: 0,
      weight: 1
    }, Y = i.stackWeight / j.weight || 1;
    if (i.horizontal) {
      const J = a.w * Y, ae = j.size || O.height;
      Of(j.start) && (E = j.start), O.fullSize ? gm(O, w.left, E, d.outerWidth - w.right - w.left, ae) : gm(O, a.left + j.placed, E, J, ae), j.start = E, j.placed += J, E = O.bottom;
    } else {
      const J = a.h * Y, ae = j.size || O.width;
      Of(j.start) && (b = j.start), O.fullSize ? gm(O, b, w.top, ae, d.outerHeight - w.bottom - w.top) : gm(O, b, a.top + j.placed, ae, J), j.start = b, j.placed += J, b = O.right;
    }
  }
  a.x = b, a.y = E;
}
var jr = {
  addBox(m, a) {
    m.boxes || (m.boxes = []), a.fullSize = a.fullSize || !1, a.position = a.position || "top", a.weight = a.weight || 0, a._layers = a._layers || function() {
      return [
        {
          z: 0,
          draw(d) {
            a.draw(d);
          }
        }
      ];
    }, m.boxes.push(a);
  },
  removeBox(m, a) {
    const d = m.boxes ? m.boxes.indexOf(a) : -1;
    d !== -1 && m.boxes.splice(d, 1);
  },
  configure(m, a, d) {
    a.fullSize = d.fullSize, a.position = d.position, a.weight = d.weight;
  },
  update(m, a, d, g) {
    if (!m)
      return;
    const w = Gr(m.options.layout.padding), b = Math.max(a - w.width, 0), E = Math.max(d - w.height, 0), i = UE(m.boxes), O = i.vertical, j = i.horizontal;
    Zn(m.boxes, (be) => {
      typeof be.beforeLayout == "function" && be.beforeLayout();
    });
    const Y = O.reduce((be, Ze) => Ze.box.options && Ze.box.options.display === !1 ? be : be + 1, 0) || 1, J = Object.freeze({
      outerWidth: a,
      outerHeight: d,
      padding: w,
      availableWidth: b,
      availableHeight: E,
      vBoxMaxWidth: b / 2 / Y,
      hBoxMaxHeight: E / 2
    }), ae = Object.assign({}, w);
    Jb(ae, Gr(g));
    const ce = Object.assign({
      maxPadding: ae,
      w: b,
      h: E,
      x: w.left,
      y: w.top
    }, w), Te = VE(O.concat(j), J);
    Mf(i.fullSize, ce, J, Te), Mf(O, ce, J, Te), Mf(j, ce, J, Te) && Mf(O, ce, J, Te), GE(ce), A1(i.leftAndTop, ce, J, Te), ce.x += ce.w, ce.y += ce.h, A1(i.rightAndBottom, ce, J, Te), m.chartArea = {
      left: ce.left,
      top: ce.top,
      right: ce.left + ce.w,
      bottom: ce.top + ce.h,
      height: ce.h,
      width: ce.w
    }, Zn(i.chartArea, (be) => {
      const Ze = be.box;
      Object.assign(Ze, m.chartArea), Ze.update(ce.w, ce.h, {
        left: 0,
        top: 0,
        right: 0,
        bottom: 0
      });
    });
  }
};
class Qb {
  acquireContext(a, d) {
  }
  releaseContext(a) {
    return !1;
  }
  addEventListener(a, d, g) {
  }
  removeEventListener(a, d, g) {
  }
  getDevicePixelRatio() {
    return 1;
  }
  getMaximumSize(a, d, g, w) {
    return d = Math.max(0, d || a.width), g = g || a.height, {
      width: d,
      height: Math.max(0, w ? Math.floor(d / w) : g)
    };
  }
  isAttached(a) {
    return !0;
  }
  updateConfig(a) {
  }
}
class HE extends Qb {
  acquireContext(a) {
    return a && a.getContext && a.getContext("2d") || null;
  }
  updateConfig(a) {
    a.options.animation = !1;
  }
}
const zm = "$chartjs", qE = {
  touchstart: "mousedown",
  touchmove: "mousemove",
  touchend: "mouseup",
  pointerenter: "mouseenter",
  pointerdown: "mousedown",
  pointermove: "mousemove",
  pointerup: "mouseup",
  pointerleave: "mouseout",
  pointerout: "mouseout"
}, C1 = (m) => m === null || m === "";
function WE(m, a) {
  const d = m.style, g = m.getAttribute("height"), w = m.getAttribute("width");
  if (m[zm] = {
    initial: {
      height: g,
      width: w,
      style: {
        display: d.display,
        height: d.height,
        width: d.width
      }
    }
  }, d.display = d.display || "block", d.boxSizing = d.boxSizing || "border-box", C1(w)) {
    const b = d1(m, "width");
    b !== void 0 && (m.width = b);
  }
  if (C1(g))
    if (m.style.height === "")
      m.height = m.width / (a || 2);
    else {
      const b = d1(m, "height");
      b !== void 0 && (m.height = b);
    }
  return m;
}
const ew = XS ? {
  passive: !0
} : !1;
function $E(m, a, d) {
  m && m.addEventListener(a, d, ew);
}
function XE(m, a, d) {
  m && m.canvas && m.canvas.removeEventListener(a, d, ew);
}
function YE(m, a) {
  const d = qE[m.type] || m.type, { x: g, y: w } = Lh(m, a);
  return {
    type: d,
    chart: a,
    native: m,
    x: g !== void 0 ? g : null,
    y: w !== void 0 ? w : null
  };
}
function Um(m, a) {
  for (const d of m)
    if (d === a || d.contains(a))
      return !0;
}
function KE(m, a, d) {
  const g = m.canvas, w = new MutationObserver((b) => {
    let E = !1;
    for (const i of b)
      E = E || Um(i.addedNodes, g), E = E && !Um(i.removedNodes, g);
    E && d();
  });
  return w.observe(document, {
    childList: !0,
    subtree: !0
  }), w;
}
function JE(m, a, d) {
  const g = m.canvas, w = new MutationObserver((b) => {
    let E = !1;
    for (const i of b)
      E = E || Um(i.removedNodes, g), E = E && !Um(i.addedNodes, g);
    E && d();
  });
  return w.observe(document, {
    childList: !0,
    subtree: !0
  }), w;
}
const Nf = /* @__PURE__ */ new Map();
let I1 = 0;
function tw() {
  const m = window.devicePixelRatio;
  m !== I1 && (I1 = m, Nf.forEach((a, d) => {
    d.currentDevicePixelRatio !== m && a();
  }));
}
function QE(m, a) {
  Nf.size || window.addEventListener("resize", tw), Nf.set(m, a);
}
function eP(m) {
  Nf.delete(m), Nf.size || window.removeEventListener("resize", tw);
}
function tP(m, a, d) {
  const g = m.canvas, w = g && vy(g);
  if (!w)
    return;
  const b = Lb((i, O) => {
    const j = w.clientWidth;
    d(i, O), j < w.clientWidth && d();
  }, window), E = new ResizeObserver((i) => {
    const O = i[0], j = O.contentRect.width, Y = O.contentRect.height;
    j === 0 && Y === 0 || b(j, Y);
  });
  return E.observe(w), QE(m, b), E;
}
function Ng(m, a, d) {
  d && d.disconnect(), a === "resize" && eP(m);
}
function iP(m, a, d) {
  const g = m.canvas, w = Lb((b) => {
    m.ctx !== null && d(YE(b, m));
  }, m);
  return $E(g, a, w), w;
}
class nP extends Qb {
  acquireContext(a, d) {
    const g = a && a.getContext && a.getContext("2d");
    return g && g.canvas === a ? (WE(a, d), g) : null;
  }
  releaseContext(a) {
    const d = a.canvas;
    if (!d[zm])
      return !1;
    const g = d[zm].initial;
    [
      "height",
      "width"
    ].forEach((b) => {
      const E = g[b];
      En(E) ? d.removeAttribute(b) : d.setAttribute(b, E);
    });
    const w = g.style || {};
    return Object.keys(w).forEach((b) => {
      d.style[b] = w[b];
    }), d.width = d.width, delete d[zm], !0;
  }
  addEventListener(a, d, g) {
    this.removeEventListener(a, d);
    const w = a.$proxies || (a.$proxies = {}), E = {
      attach: KE,
      detach: JE,
      resize: tP
    }[d] || iP;
    w[d] = E(a, d, g);
  }
  removeEventListener(a, d) {
    const g = a.$proxies || (a.$proxies = {}), w = g[d];
    if (!w)
      return;
    ({
      attach: Ng,
      detach: Ng,
      resize: Ng
    }[d] || XE)(a, d, w), g[d] = void 0;
  }
  getDevicePixelRatio() {
    return window.devicePixelRatio;
  }
  getMaximumSize(a, d, g, w) {
    return $S(a, d, g, w);
  }
  isAttached(a) {
    const d = a && vy(a);
    return !!(d && d.isConnected);
  }
}
function sP(m) {
  return !xy() || typeof OffscreenCanvas < "u" && m instanceof OffscreenCanvas ? HE : nP;
}
var Em;
let jl = (Em = class {
  constructor() {
    Yt(this, "x");
    Yt(this, "y");
    Yt(this, "active", !1);
    Yt(this, "options");
    Yt(this, "$animations");
  }
  tooltipPosition(a) {
    const { x: d, y: g } = this.getProps([
      "x",
      "y"
    ], a);
    return {
      x: d,
      y: g
    };
  }
  hasValue() {
    return Xu(this.x) && Xu(this.y);
  }
  getProps(a, d) {
    const g = this.$animations;
    if (!d || !g)
      return this;
    const w = {};
    return a.forEach((b) => {
      w[b] = g[b] && g[b].active() ? g[b]._to : this[b];
    }), w;
  }
}, Yt(Em, "defaults", {}), Yt(Em, "defaultRoutes"), Em);
function rP(m, a) {
  const d = m.options.ticks, g = oP(m), w = Math.min(d.maxTicksLimit || g, g), b = d.major.enabled ? lP(a) : [], E = b.length, i = b[0], O = b[E - 1], j = [];
  if (E > w)
    return cP(a, j, b, E / w), j;
  const Y = aP(b, a, w);
  if (E > 0) {
    let J, ae;
    const ce = E > 1 ? Math.round((O - i) / (E - 1)) : null;
    for (ym(a, j, Y, En(ce) ? 0 : i - ce, i), J = 0, ae = E - 1; J < ae; J++)
      ym(a, j, Y, b[J], b[J + 1]);
    return ym(a, j, Y, O, En(ce) ? a.length : O + ce), j;
  }
  return ym(a, j, Y), j;
}
function oP(m) {
  const a = m.options.offset, d = m._tickSize(), g = m._length / d + (a ? 0 : 1), w = m._maxLength / d;
  return Math.floor(Math.min(g, w));
}
function aP(m, a, d) {
  const g = hP(m), w = a.length / d;
  if (!g)
    return Math.max(w, 1);
  const b = JM(g);
  for (let E = 0, i = b.length - 1; E < i; E++) {
    const O = b[E];
    if (O > w)
      return O;
  }
  return Math.max(w, 1);
}
function lP(m) {
  const a = [];
  let d, g;
  for (d = 0, g = m.length; d < g; d++)
    m[d].major && a.push(d);
  return a;
}
function cP(m, a, d, g) {
  let w = 0, b = d[0], E;
  for (g = Math.ceil(g), E = 0; E < m.length; E++)
    E === b && (a.push(m[E]), w++, b = d[w * g]);
}
function ym(m, a, d, g, w) {
  const b = en(g, 0), E = Math.min(en(w, m.length), m.length);
  let i = 0, O, j, Y;
  for (d = Math.ceil(d), w && (O = w - g, d = O / Math.floor(O / d)), Y = b; Y < 0; )
    i++, Y = Math.round(b + i * d);
  for (j = Math.max(b, 0); j < E; j++)
    j === Y && (a.push(m[j]), i++, Y = Math.round(b + i * d));
}
function hP(m) {
  const a = m.length;
  let d, g;
  if (a < 2)
    return !1;
  for (g = m[0], d = 1; d < a; ++d)
    if (m[d] - m[d - 1] !== g)
      return !1;
  return g;
}
const uP = (m) => m === "left" ? "right" : m === "right" ? "left" : m, L1 = (m, a, d) => a === "top" || a === "left" ? m[a] + d : m[a] - d, z1 = (m, a) => Math.min(a || m, m);
function D1(m, a) {
  const d = [], g = m.length / a, w = m.length;
  let b = 0;
  for (; b < w; b += g)
    d.push(m[Math.floor(b)]);
  return d;
}
function dP(m, a, d) {
  const g = m.ticks.length, w = Math.min(a, g - 1), b = m._startPixel, E = m._endPixel, i = 1e-6;
  let O = m.getPixelForTick(w), j;
  if (!(d && (g === 1 ? j = Math.max(O - b, E - O) : a === 0 ? j = (m.getPixelForTick(1) - O) / 2 : j = (O - m.getPixelForTick(w - 1)) / 2, O += w < a ? j : -j, O < b - i || O > E + i)))
    return O;
}
function fP(m, a) {
  Zn(m, (d) => {
    const g = d.gc, w = g.length / 2;
    let b;
    if (w > a) {
      for (b = 0; b < w; ++b)
        delete d.data[g[b]];
      g.splice(0, w);
    }
  });
}
function vf(m) {
  return m.drawTicks ? m.tickLength : 0;
}
function k1(m, a) {
  if (!m.display)
    return 0;
  const d = ir(m.font, a), g = Gr(m.padding);
  return (hs(m.text) ? m.text.length : 1) * d.lineHeight + g.height;
}
function pP(m, a) {
  return Fc(m, {
    scale: a,
    type: "scale"
  });
}
function mP(m, a, d) {
  return Fc(m, {
    tick: d,
    index: a,
    type: "tick"
  });
}
function _P(m, a, d) {
  let g = fy(m);
  return (d && a !== "right" || !d && a === "right") && (g = uP(g)), g;
}
function gP(m, a, d, g) {
  const { top: w, left: b, bottom: E, right: i, chart: O } = m, { chartArea: j, scales: Y } = O;
  let J = 0, ae, ce, Te;
  const be = E - w, Ze = i - b;
  if (m.isHorizontal()) {
    if (ce = Ur(g, b, i), yn(d)) {
      const je = Object.keys(d)[0], ot = d[je];
      Te = Y[je].getPixelForValue(ot) + be - a;
    } else
      d === "center" ? Te = (j.bottom + j.top) / 2 + be - a : Te = L1(m, d, a);
    ae = i - b;
  } else {
    if (yn(d)) {
      const je = Object.keys(d)[0], ot = d[je];
      ce = Y[je].getPixelForValue(ot) - Ze + a;
    } else
      d === "center" ? ce = (j.left + j.right) / 2 - Ze + a : ce = L1(m, d, a);
    Te = Ur(g, E, w), J = d === "left" ? -Ns : Ns;
  }
  return {
    titleX: ce,
    titleY: Te,
    maxWidth: ae,
    rotation: J
  };
}
class Bh extends jl {
  constructor(a) {
    super(), this.id = a.id, this.type = a.type, this.options = void 0, this.ctx = a.ctx, this.chart = a.chart, this.top = void 0, this.bottom = void 0, this.left = void 0, this.right = void 0, this.width = void 0, this.height = void 0, this._margins = {
      left: 0,
      right: 0,
      top: 0,
      bottom: 0
    }, this.maxWidth = void 0, this.maxHeight = void 0, this.paddingTop = void 0, this.paddingBottom = void 0, this.paddingLeft = void 0, this.paddingRight = void 0, this.axis = void 0, this.labelRotation = void 0, this.min = void 0, this.max = void 0, this._range = void 0, this.ticks = [], this._gridLineItems = null, this._labelItems = null, this._labelSizes = null, this._length = 0, this._maxLength = 0, this._longestTextCache = {}, this._startPixel = void 0, this._endPixel = void 0, this._reversePixels = !1, this._userMax = void 0, this._userMin = void 0, this._suggestedMax = void 0, this._suggestedMin = void 0, this._ticksLength = 0, this._borderValue = 0, this._cache = {}, this._dataLimitsCached = !1, this.$context = void 0;
  }
  init(a) {
    this.options = a.setContext(this.getContext()), this.axis = a.axis, this._userMin = this.parse(a.min), this._userMax = this.parse(a.max), this._suggestedMin = this.parse(a.suggestedMin), this._suggestedMax = this.parse(a.suggestedMax);
  }
  parse(a, d) {
    return a;
  }
  getUserBounds() {
    let { _userMin: a, _userMax: d, _suggestedMin: g, _suggestedMax: w } = this;
    return a = Bo(a, Number.POSITIVE_INFINITY), d = Bo(d, Number.NEGATIVE_INFINITY), g = Bo(g, Number.POSITIVE_INFINITY), w = Bo(w, Number.NEGATIVE_INFINITY), {
      min: Bo(a, g),
      max: Bo(d, w),
      minDefined: As(a),
      maxDefined: As(d)
    };
  }
  getMinMax(a) {
    let { min: d, max: g, minDefined: w, maxDefined: b } = this.getUserBounds(), E;
    if (w && b)
      return {
        min: d,
        max: g
      };
    const i = this.getMatchingVisibleMetas();
    for (let O = 0, j = i.length; O < j; ++O)
      E = i[O].controller.getMinMax(this, a), w || (d = Math.min(d, E.min)), b || (g = Math.max(g, E.max));
    return d = b && d > g ? g : d, g = w && d > g ? d : g, {
      min: Bo(d, Bo(g, d)),
      max: Bo(g, Bo(d, g))
    };
  }
  getPadding() {
    return {
      left: this.paddingLeft || 0,
      top: this.paddingTop || 0,
      right: this.paddingRight || 0,
      bottom: this.paddingBottom || 0
    };
  }
  getTicks() {
    return this.ticks;
  }
  getLabels() {
    const a = this.chart.data;
    return this.options.labels || (this.isHorizontal() ? a.xLabels : a.yLabels) || a.labels || [];
  }
  getLabelItems(a = this.chart.chartArea) {
    return this._labelItems || (this._labelItems = this._computeLabelItems(a));
  }
  beforeLayout() {
    this._cache = {}, this._dataLimitsCached = !1;
  }
  beforeUpdate() {
    is(this.options.beforeUpdate, [
      this
    ]);
  }
  update(a, d, g) {
    const { beginAtZero: w, grace: b, ticks: E } = this.options, i = E.sampleSize;
    this.beforeUpdate(), this.maxWidth = a, this.maxHeight = d, this._margins = g = Object.assign({
      left: 0,
      right: 0,
      top: 0,
      bottom: 0
    }, g), this.ticks = null, this._labelSizes = null, this._gridLineItems = null, this._labelItems = null, this.beforeSetDimensions(), this.setDimensions(), this.afterSetDimensions(), this._maxLength = this.isHorizontal() ? this.width + g.left + g.right : this.height + g.top + g.bottom, this._dataLimitsCached || (this.beforeDataLimits(), this.determineDataLimits(), this.afterDataLimits(), this._range = ES(this, b, w), this._dataLimitsCached = !0), this.beforeBuildTicks(), this.ticks = this.buildTicks() || [], this.afterBuildTicks();
    const O = i < this.ticks.length;
    this._convertTicksToLabels(O ? D1(this.ticks, i) : this.ticks), this.configure(), this.beforeCalculateLabelRotation(), this.calculateLabelRotation(), this.afterCalculateLabelRotation(), E.display && (E.autoSkip || E.source === "auto") && (this.ticks = rP(this, this.ticks), this._labelSizes = null, this.afterAutoSkip()), O && this._convertTicksToLabels(this.ticks), this.beforeFit(), this.fit(), this.afterFit(), this.afterUpdate();
  }
  configure() {
    let a = this.options.reverse, d, g;
    this.isHorizontal() ? (d = this.left, g = this.right) : (d = this.top, g = this.bottom, a = !a), this._startPixel = d, this._endPixel = g, this._reversePixels = a, this._length = g - d, this._alignToPixels = this.options.alignToPixels;
  }
  afterUpdate() {
    is(this.options.afterUpdate, [
      this
    ]);
  }
  beforeSetDimensions() {
    is(this.options.beforeSetDimensions, [
      this
    ]);
  }
  setDimensions() {
    this.isHorizontal() ? (this.width = this.maxWidth, this.left = 0, this.right = this.width) : (this.height = this.maxHeight, this.top = 0, this.bottom = this.height), this.paddingLeft = 0, this.paddingTop = 0, this.paddingRight = 0, this.paddingBottom = 0;
  }
  afterSetDimensions() {
    is(this.options.afterSetDimensions, [
      this
    ]);
  }
  _callHooks(a) {
    this.chart.notifyPlugins(a, this.getContext()), is(this.options[a], [
      this
    ]);
  }
  beforeDataLimits() {
    this._callHooks("beforeDataLimits");
  }
  determineDataLimits() {
  }
  afterDataLimits() {
    this._callHooks("afterDataLimits");
  }
  beforeBuildTicks() {
    this._callHooks("beforeBuildTicks");
  }
  buildTicks() {
    return [];
  }
  afterBuildTicks() {
    this._callHooks("afterBuildTicks");
  }
  beforeTickToLabelConversion() {
    is(this.options.beforeTickToLabelConversion, [
      this
    ]);
  }
  generateTickLabels(a) {
    const d = this.options.ticks;
    let g, w, b;
    for (g = 0, w = a.length; g < w; g++)
      b = a[g], b.label = is(d.callback, [
        b.value,
        g,
        a
      ], this);
  }
  afterTickToLabelConversion() {
    is(this.options.afterTickToLabelConversion, [
      this
    ]);
  }
  beforeCalculateLabelRotation() {
    is(this.options.beforeCalculateLabelRotation, [
      this
    ]);
  }
  calculateLabelRotation() {
    const a = this.options, d = a.ticks, g = z1(this.ticks.length, a.ticks.maxTicksLimit), w = d.minRotation || 0, b = d.maxRotation;
    let E = w, i, O, j;
    if (!this._isVisible() || !d.display || w >= b || g <= 1 || !this.isHorizontal()) {
      this.labelRotation = w;
      return;
    }
    const Y = this._getLabelSizes(), J = Y.widest.width, ae = Y.highest.height, ce = gr(this.chart.width - J, 0, this.maxWidth);
    i = a.offset ? this.maxWidth / g : ce / (g - 1), J + 6 > i && (i = ce / (g - (a.offset ? 0.5 : 1)), O = this.maxHeight - vf(a.grid) - d.padding - k1(a.title, this.chart.options.font), j = Math.sqrt(J * J + ae * ae), E = uy(Math.min(Math.asin(gr((Y.highest.height + 6) / i, -1, 1)), Math.asin(gr(O / j, -1, 1)) - Math.asin(gr(ae / j, -1, 1)))), E = Math.max(w, Math.min(b, E))), this.labelRotation = E;
  }
  afterCalculateLabelRotation() {
    is(this.options.afterCalculateLabelRotation, [
      this
    ]);
  }
  afterAutoSkip() {
  }
  beforeFit() {
    is(this.options.beforeFit, [
      this
    ]);
  }
  fit() {
    const a = {
      width: 0,
      height: 0
    }, { chart: d, options: { ticks: g, title: w, grid: b } } = this, E = this._isVisible(), i = this.isHorizontal();
    if (E) {
      const O = k1(w, d.options.font);
      if (i ? (a.width = this.maxWidth, a.height = vf(b) + O) : (a.height = this.maxHeight, a.width = vf(b) + O), g.display && this.ticks.length) {
        const { first: j, last: Y, widest: J, highest: ae } = this._getLabelSizes(), ce = g.padding * 2, Te = Ia(this.labelRotation), be = Math.cos(Te), Ze = Math.sin(Te);
        if (i) {
          const je = g.mirror ? 0 : Ze * J.width + be * ae.height;
          a.height = Math.min(this.maxHeight, a.height + je + ce);
        } else {
          const je = g.mirror ? 0 : be * J.width + Ze * ae.height;
          a.width = Math.min(this.maxWidth, a.width + je + ce);
        }
        this._calculatePadding(j, Y, Ze, be);
      }
    }
    this._handleMargins(), i ? (this.width = this._length = d.width - this._margins.left - this._margins.right, this.height = a.height) : (this.width = a.width, this.height = this._length = d.height - this._margins.top - this._margins.bottom);
  }
  _calculatePadding(a, d, g, w) {
    const { ticks: { align: b, padding: E }, position: i } = this.options, O = this.labelRotation !== 0, j = i !== "top" && this.axis === "x";
    if (this.isHorizontal()) {
      const Y = this.getPixelForTick(0) - this.left, J = this.right - this.getPixelForTick(this.ticks.length - 1);
      let ae = 0, ce = 0;
      O ? j ? (ae = w * a.width, ce = g * d.height) : (ae = g * a.height, ce = w * d.width) : b === "start" ? ce = d.width : b === "end" ? ae = a.width : b !== "inner" && (ae = a.width / 2, ce = d.width / 2), this.paddingLeft = Math.max((ae - Y + E) * this.width / (this.width - Y), 0), this.paddingRight = Math.max((ce - J + E) * this.width / (this.width - J), 0);
    } else {
      let Y = d.height / 2, J = a.height / 2;
      b === "start" ? (Y = 0, J = a.height) : b === "end" && (Y = d.height, J = 0), this.paddingTop = Y + E, this.paddingBottom = J + E;
    }
  }
  _handleMargins() {
    this._margins && (this._margins.left = Math.max(this.paddingLeft, this._margins.left), this._margins.top = Math.max(this.paddingTop, this._margins.top), this._margins.right = Math.max(this.paddingRight, this._margins.right), this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom));
  }
  afterFit() {
    is(this.options.afterFit, [
      this
    ]);
  }
  isHorizontal() {
    const { axis: a, position: d } = this.options;
    return d === "top" || d === "bottom" || a === "x";
  }
  isFullSize() {
    return this.options.fullSize;
  }
  _convertTicksToLabels(a) {
    this.beforeTickToLabelConversion(), this.generateTickLabels(a);
    let d, g;
    for (d = 0, g = a.length; d < g; d++)
      En(a[d].label) && (a.splice(d, 1), g--, d--);
    this.afterTickToLabelConversion();
  }
  _getLabelSizes() {
    let a = this._labelSizes;
    if (!a) {
      const d = this.options.ticks.sampleSize;
      let g = this.ticks;
      d < g.length && (g = D1(g, d)), this._labelSizes = a = this._computeLabelSizes(g, g.length, this.options.ticks.maxTicksLimit);
    }
    return a;
  }
  _computeLabelSizes(a, d, g) {
    const { ctx: w, _longestTextCache: b } = this, E = [], i = [], O = Math.floor(d / z1(d, g));
    let j = 0, Y = 0, J, ae, ce, Te, be, Ze, je, ot, vt, ht, gt;
    for (J = 0; J < d; J += O) {
      if (Te = a[J].label, be = this._resolveTickFontOptions(J), w.font = Ze = be.string, je = b[Ze] = b[Ze] || {
        data: {},
        gc: []
      }, ot = be.lineHeight, vt = ht = 0, !En(Te) && !hs(Te))
        vt = Nm(w, je.data, je.gc, vt, Te), ht = ot;
      else if (hs(Te))
        for (ae = 0, ce = Te.length; ae < ce; ++ae)
          gt = Te[ae], !En(gt) && !hs(gt) && (vt = Nm(w, je.data, je.gc, vt, gt), ht += ot);
      E.push(vt), i.push(ht), j = Math.max(vt, j), Y = Math.max(ht, Y);
    }
    fP(b, d);
    const Vt = E.indexOf(j), pt = i.indexOf(Y), Gt = (ui) => ({
      width: E[ui] || 0,
      height: i[ui] || 0
    });
    return {
      first: Gt(0),
      last: Gt(d - 1),
      widest: Gt(Vt),
      highest: Gt(pt),
      widths: E,
      heights: i
    };
  }
  getLabelForValue(a) {
    return a;
  }
  getPixelForValue(a, d) {
    return NaN;
  }
  getValueForPixel(a) {
  }
  getPixelForTick(a) {
    const d = this.ticks;
    return a < 0 || a > d.length - 1 ? null : this.getPixelForValue(d[a].value);
  }
  getPixelForDecimal(a) {
    this._reversePixels && (a = 1 - a);
    const d = this._startPixel + a * this._length;
    return tS(this._alignToPixels ? Ah(this.chart, d, 0) : d);
  }
  getDecimalForPixel(a) {
    const d = (a - this._startPixel) / this._length;
    return this._reversePixels ? 1 - d : d;
  }
  getBasePixel() {
    return this.getPixelForValue(this.getBaseValue());
  }
  getBaseValue() {
    const { min: a, max: d } = this;
    return a < 0 && d < 0 ? d : a > 0 && d > 0 ? a : 0;
  }
  getContext(a) {
    const d = this.ticks || [];
    if (a >= 0 && a < d.length) {
      const g = d[a];
      return g.$context || (g.$context = mP(this.getContext(), a, g));
    }
    return this.$context || (this.$context = pP(this.chart.getContext(), this));
  }
  _tickSize() {
    const a = this.options.ticks, d = Ia(this.labelRotation), g = Math.abs(Math.cos(d)), w = Math.abs(Math.sin(d)), b = this._getLabelSizes(), E = a.autoSkipPadding || 0, i = b ? b.widest.width + E : 0, O = b ? b.highest.height + E : 0;
    return this.isHorizontal() ? O * g > i * w ? i / g : O / w : O * w < i * g ? O / g : i / w;
  }
  _isVisible() {
    const a = this.options.display;
    return a !== "auto" ? !!a : this.getMatchingVisibleMetas().length > 0;
  }
  _computeGridLineItems(a) {
    const d = this.axis, g = this.chart, w = this.options, { grid: b, position: E, border: i } = w, O = b.offset, j = this.isHorizontal(), J = this.ticks.length + (O ? 1 : 0), ae = vf(b), ce = [], Te = i.setContext(this.getContext()), be = Te.display ? Te.width : 0, Ze = be / 2, je = function(Si) {
      return Ah(g, Si, be);
    };
    let ot, vt, ht, gt, Vt, pt, Gt, ui, kt, Pt, Mi, Pn;
    if (E === "top")
      ot = je(this.bottom), pt = this.bottom - ae, ui = ot - Ze, Pt = je(a.top) + Ze, Pn = a.bottom;
    else if (E === "bottom")
      ot = je(this.top), Pt = a.top, Pn = je(a.bottom) - Ze, pt = ot + Ze, ui = this.top + ae;
    else if (E === "left")
      ot = je(this.right), Vt = this.right - ae, Gt = ot - Ze, kt = je(a.left) + Ze, Mi = a.right;
    else if (E === "right")
      ot = je(this.left), kt = a.left, Mi = je(a.right) - Ze, Vt = ot + Ze, Gt = this.left + ae;
    else if (d === "x") {
      if (E === "center")
        ot = je((a.top + a.bottom) / 2 + 0.5);
      else if (yn(E)) {
        const Si = Object.keys(E)[0], Ji = E[Si];
        ot = je(this.chart.scales[Si].getPixelForValue(Ji));
      }
      Pt = a.top, Pn = a.bottom, pt = ot + Ze, ui = pt + ae;
    } else if (d === "y") {
      if (E === "center")
        ot = je((a.left + a.right) / 2);
      else if (yn(E)) {
        const Si = Object.keys(E)[0], Ji = E[Si];
        ot = je(this.chart.scales[Si].getPixelForValue(Ji));
      }
      Vt = ot - Ze, Gt = Vt - ae, kt = a.left, Mi = a.right;
    }
    const hn = en(w.ticks.maxTicksLimit, J), Ht = Math.max(1, Math.ceil(J / hn));
    for (vt = 0; vt < J; vt += Ht) {
      const Si = this.getContext(vt), Ji = b.setContext(Si), fi = i.setContext(Si), jt = Ji.lineWidth, ni = Ji.color, Gi = fi.dash || [], an = fi.dashOffset, qt = Ji.tickWidth, ln = Ji.tickColor, Di = Ji.tickBorderDash || [], xi = Ji.tickBorderDashOffset;
      ht = dP(this, vt, O), ht !== void 0 && (gt = Ah(g, ht, jt), j ? Vt = Gt = kt = Mi = gt : pt = ui = Pt = Pn = gt, ce.push({
        tx1: Vt,
        ty1: pt,
        tx2: Gt,
        ty2: ui,
        x1: kt,
        y1: Pt,
        x2: Mi,
        y2: Pn,
        width: jt,
        color: ni,
        borderDash: Gi,
        borderDashOffset: an,
        tickWidth: qt,
        tickColor: ln,
        tickBorderDash: Di,
        tickBorderDashOffset: xi
      }));
    }
    return this._ticksLength = J, this._borderValue = ot, ce;
  }
  _computeLabelItems(a) {
    const d = this.axis, g = this.options, { position: w, ticks: b } = g, E = this.isHorizontal(), i = this.ticks, { align: O, crossAlign: j, padding: Y, mirror: J } = b, ae = vf(g.grid), ce = ae + Y, Te = J ? -Y : ce, be = -Ia(this.labelRotation), Ze = [];
    let je, ot, vt, ht, gt, Vt, pt, Gt, ui, kt, Pt, Mi, Pn = "middle";
    if (w === "top")
      Vt = this.bottom - Te, pt = this._getXAxisLabelAlignment();
    else if (w === "bottom")
      Vt = this.top + Te, pt = this._getXAxisLabelAlignment();
    else if (w === "left") {
      const Ht = this._getYAxisLabelAlignment(ae);
      pt = Ht.textAlign, gt = Ht.x;
    } else if (w === "right") {
      const Ht = this._getYAxisLabelAlignment(ae);
      pt = Ht.textAlign, gt = Ht.x;
    } else if (d === "x") {
      if (w === "center")
        Vt = (a.top + a.bottom) / 2 + ce;
      else if (yn(w)) {
        const Ht = Object.keys(w)[0], Si = w[Ht];
        Vt = this.chart.scales[Ht].getPixelForValue(Si) + ce;
      }
      pt = this._getXAxisLabelAlignment();
    } else if (d === "y") {
      if (w === "center")
        gt = (a.left + a.right) / 2 - ce;
      else if (yn(w)) {
        const Ht = Object.keys(w)[0], Si = w[Ht];
        gt = this.chart.scales[Ht].getPixelForValue(Si);
      }
      pt = this._getYAxisLabelAlignment(ae).textAlign;
    }
    d === "y" && (O === "start" ? Pn = "top" : O === "end" && (Pn = "bottom"));
    const hn = this._getLabelSizes();
    for (je = 0, ot = i.length; je < ot; ++je) {
      vt = i[je], ht = vt.label;
      const Ht = b.setContext(this.getContext(je));
      Gt = this.getPixelForTick(je) + b.labelOffset, ui = this._resolveTickFontOptions(je), kt = ui.lineHeight, Pt = hs(ht) ? ht.length : 1;
      const Si = Pt / 2, Ji = Ht.color, fi = Ht.textStrokeColor, jt = Ht.textStrokeWidth;
      let ni = pt;
      E ? (gt = Gt, pt === "inner" && (je === ot - 1 ? ni = this.options.reverse ? "left" : "right" : je === 0 ? ni = this.options.reverse ? "right" : "left" : ni = "center"), w === "top" ? j === "near" || be !== 0 ? Mi = -Pt * kt + kt / 2 : j === "center" ? Mi = -hn.highest.height / 2 - Si * kt + kt : Mi = -hn.highest.height + kt / 2 : j === "near" || be !== 0 ? Mi = kt / 2 : j === "center" ? Mi = hn.highest.height / 2 - Si * kt : Mi = hn.highest.height - Pt * kt, J && (Mi *= -1), be !== 0 && !Ht.showLabelBackdrop && (gt += kt / 2 * Math.sin(be))) : (Vt = Gt, Mi = (1 - Pt) * kt / 2);
      let Gi;
      if (Ht.showLabelBackdrop) {
        const an = Gr(Ht.backdropPadding), qt = hn.heights[je], ln = hn.widths[je];
        let Di = Mi - an.top, xi = 0 - an.left;
        switch (Pn) {
          case "middle":
            Di -= qt / 2;
            break;
          case "bottom":
            Di -= qt;
            break;
        }
        switch (pt) {
          case "center":
            xi -= ln / 2;
            break;
          case "right":
            xi -= ln;
            break;
          case "inner":
            je === ot - 1 ? xi -= ln : je > 0 && (xi -= ln / 2);
            break;
        }
        Gi = {
          left: xi,
          top: Di,
          width: ln + an.width,
          height: qt + an.height,
          color: Ht.backdropColor
        };
      }
      Ze.push({
        label: ht,
        font: ui,
        textOffset: Mi,
        options: {
          rotation: be,
          color: Ji,
          strokeColor: fi,
          strokeWidth: jt,
          textAlign: ni,
          textBaseline: Pn,
          translation: [
            gt,
            Vt
          ],
          backdrop: Gi
        }
      });
    }
    return Ze;
  }
  _getXAxisLabelAlignment() {
    const { position: a, ticks: d } = this.options;
    if (-Ia(this.labelRotation))
      return a === "top" ? "left" : "right";
    let w = "center";
    return d.align === "start" ? w = "left" : d.align === "end" ? w = "right" : d.align === "inner" && (w = "inner"), w;
  }
  _getYAxisLabelAlignment(a) {
    const { position: d, ticks: { crossAlign: g, mirror: w, padding: b } } = this.options, E = this._getLabelSizes(), i = a + b, O = E.widest.width;
    let j, Y;
    return d === "left" ? w ? (Y = this.right + b, g === "near" ? j = "left" : g === "center" ? (j = "center", Y += O / 2) : (j = "right", Y += O)) : (Y = this.right - i, g === "near" ? j = "right" : g === "center" ? (j = "center", Y -= O / 2) : (j = "left", Y = this.left)) : d === "right" ? w ? (Y = this.left + b, g === "near" ? j = "right" : g === "center" ? (j = "center", Y -= O / 2) : (j = "left", Y -= O)) : (Y = this.left + i, g === "near" ? j = "left" : g === "center" ? (j = "center", Y += O / 2) : (j = "right", Y = this.right)) : j = "right", {
      textAlign: j,
      x: Y
    };
  }
  _computeLabelArea() {
    if (this.options.ticks.mirror)
      return;
    const a = this.chart, d = this.options.position;
    if (d === "left" || d === "right")
      return {
        top: 0,
        left: this.left,
        bottom: a.height,
        right: this.right
      };
    if (d === "top" || d === "bottom")
      return {
        top: this.top,
        left: 0,
        bottom: this.bottom,
        right: a.width
      };
  }
  drawBackground() {
    const { ctx: a, options: { backgroundColor: d }, left: g, top: w, width: b, height: E } = this;
    d && (a.save(), a.fillStyle = d, a.fillRect(g, w, b, E), a.restore());
  }
  getLineWidthForValue(a) {
    const d = this.options.grid;
    if (!this._isVisible() || !d.display)
      return 0;
    const w = this.ticks.findIndex((b) => b.value === a);
    return w >= 0 ? d.setContext(this.getContext(w)).lineWidth : 0;
  }
  drawGrid(a) {
    const d = this.options.grid, g = this.ctx, w = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(a));
    let b, E;
    const i = (O, j, Y) => {
      !Y.width || !Y.color || (g.save(), g.lineWidth = Y.width, g.strokeStyle = Y.color, g.setLineDash(Y.borderDash || []), g.lineDashOffset = Y.borderDashOffset, g.beginPath(), g.moveTo(O.x, O.y), g.lineTo(j.x, j.y), g.stroke(), g.restore());
    };
    if (d.display)
      for (b = 0, E = w.length; b < E; ++b) {
        const O = w[b];
        d.drawOnChartArea && i({
          x: O.x1,
          y: O.y1
        }, {
          x: O.x2,
          y: O.y2
        }, O), d.drawTicks && i({
          x: O.tx1,
          y: O.ty1
        }, {
          x: O.tx2,
          y: O.ty2
        }, {
          color: O.tickColor,
          width: O.tickWidth,
          borderDash: O.tickBorderDash,
          borderDashOffset: O.tickBorderDashOffset
        });
      }
  }
  drawBorder() {
    const { chart: a, ctx: d, options: { border: g, grid: w } } = this, b = g.setContext(this.getContext()), E = g.display ? b.width : 0;
    if (!E)
      return;
    const i = w.setContext(this.getContext(0)).lineWidth, O = this._borderValue;
    let j, Y, J, ae;
    this.isHorizontal() ? (j = Ah(a, this.left, E) - E / 2, Y = Ah(a, this.right, i) + i / 2, J = ae = O) : (J = Ah(a, this.top, E) - E / 2, ae = Ah(a, this.bottom, i) + i / 2, j = Y = O), d.save(), d.lineWidth = b.width, d.strokeStyle = b.color, d.beginPath(), d.moveTo(j, J), d.lineTo(Y, ae), d.stroke(), d.restore();
  }
  drawLabels(a) {
    if (!this.options.ticks.display)
      return;
    const g = this.ctx, w = this._computeLabelArea();
    w && Wm(g, w);
    const b = this.getLabelItems(a);
    for (const E of b) {
      const i = E.options, O = E.font, j = E.label, Y = E.textOffset;
      Fh(g, j, 0, Y, O, i);
    }
    w && $m(g);
  }
  drawTitle() {
    const { ctx: a, options: { position: d, title: g, reverse: w } } = this;
    if (!g.display)
      return;
    const b = ir(g.font), E = Gr(g.padding), i = g.align;
    let O = b.lineHeight / 2;
    d === "bottom" || d === "center" || yn(d) ? (O += E.bottom, hs(g.text) && (O += b.lineHeight * (g.text.length - 1))) : O += E.top;
    const { titleX: j, titleY: Y, maxWidth: J, rotation: ae } = gP(this, O, d, i);
    Fh(a, g.text, 0, 0, b, {
      color: g.color,
      maxWidth: J,
      rotation: ae,
      textAlign: _P(i, d, w),
      textBaseline: "middle",
      translation: [
        j,
        Y
      ]
    });
  }
  draw(a) {
    this._isVisible() && (this.drawBackground(), this.drawGrid(a), this.drawBorder(), this.drawTitle(), this.drawLabels(a));
  }
  _layers() {
    const a = this.options, d = a.ticks && a.ticks.z || 0, g = en(a.grid && a.grid.z, -1), w = en(a.border && a.border.z, 0);
    return !this._isVisible() || this.draw !== Bh.prototype.draw ? [
      {
        z: d,
        draw: (b) => {
          this.draw(b);
        }
      }
    ] : [
      {
        z: g,
        draw: (b) => {
          this.drawBackground(), this.drawGrid(b), this.drawTitle();
        }
      },
      {
        z: w,
        draw: () => {
          this.drawBorder();
        }
      },
      {
        z: d,
        draw: (b) => {
          this.drawLabels(b);
        }
      }
    ];
  }
  getMatchingVisibleMetas(a) {
    const d = this.chart.getSortedVisibleDatasetMetas(), g = this.axis + "AxisID", w = [];
    let b, E;
    for (b = 0, E = d.length; b < E; ++b) {
      const i = d[b];
      i[g] === this.id && (!a || i.type === a) && w.push(i);
    }
    return w;
  }
  _resolveTickFontOptions(a) {
    const d = this.options.ticks.setContext(this.getContext(a));
    return ir(d.font);
  }
  _maxDigits() {
    const a = this._resolveTickFontOptions(0).lineHeight;
    return (this.isHorizontal() ? this.width : this.height) / a;
  }
}
class xm {
  constructor(a, d, g) {
    this.type = a, this.scope = d, this.override = g, this.items = /* @__PURE__ */ Object.create(null);
  }
  isForType(a) {
    return Object.prototype.isPrototypeOf.call(this.type.prototype, a.prototype);
  }
  register(a) {
    const d = Object.getPrototypeOf(a);
    let g;
    vP(d) && (g = this.register(d));
    const w = this.items, b = a.id, E = this.scope + "." + b;
    if (!b)
      throw new Error("class does not have id: " + a);
    return b in w || (w[b] = a, yP(a, E, g), this.override && ys.override(a.id, a.overrides)), E;
  }
  get(a) {
    return this.items[a];
  }
  unregister(a) {
    const d = this.items, g = a.id, w = this.scope;
    g in d && delete d[g], w && g in ys[w] && (delete ys[w][g], this.override && delete Oh[g]);
  }
}
function yP(m, a, d) {
  const g = Rf(/* @__PURE__ */ Object.create(null), [
    d ? ys.get(d) : {},
    ys.get(a),
    m.defaults
  ]);
  ys.set(a, g), m.defaultRoutes && xP(a, m.defaultRoutes), m.descriptors && ys.describe(a, m.descriptors);
}
function xP(m, a) {
  Object.keys(a).forEach((d) => {
    const g = d.split("."), w = g.pop(), b = [
      m
    ].concat(g).join("."), E = a[d].split("."), i = E.pop(), O = E.join(".");
    ys.route(b, w, O, i);
  });
}
function vP(m) {
  return "id" in m && "defaults" in m;
}
class bP {
  constructor() {
    this.controllers = new xm(za, "datasets", !0), this.elements = new xm(jl, "elements"), this.plugins = new xm(Object, "plugins"), this.scales = new xm(Bh, "scales"), this._typedRegistries = [
      this.controllers,
      this.scales,
      this.elements
    ];
  }
  add(...a) {
    this._each("register", a);
  }
  remove(...a) {
    this._each("unregister", a);
  }
  addControllers(...a) {
    this._each("register", a, this.controllers);
  }
  addElements(...a) {
    this._each("register", a, this.elements);
  }
  addPlugins(...a) {
    this._each("register", a, this.plugins);
  }
  addScales(...a) {
    this._each("register", a, this.scales);
  }
  getController(a) {
    return this._get(a, this.controllers, "controller");
  }
  getElement(a) {
    return this._get(a, this.elements, "element");
  }
  getPlugin(a) {
    return this._get(a, this.plugins, "plugin");
  }
  getScale(a) {
    return this._get(a, this.scales, "scale");
  }
  removeControllers(...a) {
    this._each("unregister", a, this.controllers);
  }
  removeElements(...a) {
    this._each("unregister", a, this.elements);
  }
  removePlugins(...a) {
    this._each("unregister", a, this.plugins);
  }
  removeScales(...a) {
    this._each("unregister", a, this.scales);
  }
  _each(a, d, g) {
    [
      ...d
    ].forEach((w) => {
      const b = g || this._getRegistryForType(w);
      g || b.isForType(w) || b === this.plugins && w.id ? this._exec(a, b, w) : Zn(w, (E) => {
        const i = g || this._getRegistryForType(E);
        this._exec(a, i, E);
      });
    });
  }
  _exec(a, d, g) {
    const w = hy(a);
    is(g["before" + w], [], g), d[a](g), is(g["after" + w], [], g);
  }
  _getRegistryForType(a) {
    for (let d = 0; d < this._typedRegistries.length; d++) {
      const g = this._typedRegistries[d];
      if (g.isForType(a))
        return g;
    }
    return this.plugins;
  }
  _get(a, d, g) {
    const w = d.get(a);
    if (w === void 0)
      throw new Error('"' + a + '" is not a registered ' + g + ".");
    return w;
  }
}
var al = /* @__PURE__ */ new bP();
class wP {
  constructor() {
    this._init = [];
  }
  notify(a, d, g, w) {
    d === "beforeInit" && (this._init = this._createDescriptors(a, !0), this._notify(this._init, a, "install"));
    const b = w ? this._descriptors(a).filter(w) : this._descriptors(a), E = this._notify(b, a, d, g);
    return d === "afterDestroy" && (this._notify(b, a, "stop"), this._notify(this._init, a, "uninstall")), E;
  }
  _notify(a, d, g, w) {
    w = w || {};
    for (const b of a) {
      const E = b.plugin, i = E[g], O = [
        d,
        w,
        b.options
      ];
      if (is(i, O, E) === !1 && w.cancelable)
        return !1;
    }
    return !0;
  }
  invalidate() {
    En(this._cache) || (this._oldCache = this._cache, this._cache = void 0);
  }
  _descriptors(a) {
    if (this._cache)
      return this._cache;
    const d = this._cache = this._createDescriptors(a);
    return this._notifyStateChanges(a), d;
  }
  _createDescriptors(a, d) {
    const g = a && a.config, w = en(g.options && g.options.plugins, {}), b = TP(g);
    return w === !1 && !d ? [] : SP(a, b, w, d);
  }
  _notifyStateChanges(a) {
    const d = this._oldCache || [], g = this._cache, w = (b, E) => b.filter((i) => !E.some((O) => i.plugin.id === O.plugin.id));
    this._notify(w(d, g), a, "stop"), this._notify(w(g, d), a, "start");
  }
}
function TP(m) {
  const a = {}, d = [], g = Object.keys(al.plugins.items);
  for (let b = 0; b < g.length; b++)
    d.push(al.getPlugin(g[b]));
  const w = m.plugins || [];
  for (let b = 0; b < w.length; b++) {
    const E = w[b];
    d.indexOf(E) === -1 && (d.push(E), a[E.id] = !0);
  }
  return {
    plugins: d,
    localIds: a
  };
}
function MP(m, a) {
  return !a && m === !1 ? null : m === !0 ? {} : m;
}
function SP(m, { plugins: a, localIds: d }, g, w) {
  const b = [], E = m.getContext();
  for (const i of a) {
    const O = i.id, j = MP(g[O], w);
    j !== null && b.push({
      plugin: i,
      options: EP(m.config, {
        plugin: i,
        local: d[O]
      }, j, E)
    });
  }
  return b;
}
function EP(m, { plugin: a, local: d }, g, w) {
  const b = m.pluginScopeKeys(a), E = m.getOptionScopes(g, b);
  return d && a.defaults && E.push(a.defaults), m.createResolver(E, w, [
    ""
  ], {
    scriptable: !1,
    indexable: !1,
    allKeys: !0
  });
}
function $g(m, a) {
  const d = ys.datasets[m] || {};
  return ((a.datasets || {})[m] || {}).indexAxis || a.indexAxis || d.indexAxis || "x";
}
function PP(m, a) {
  let d = m;
  return m === "_index_" ? d = a : m === "_value_" && (d = a === "x" ? "y" : "x"), d;
}
function AP(m, a) {
  return m === a ? "_index_" : "_value_";
}
function R1(m) {
  if (m === "x" || m === "y" || m === "r")
    return m;
}
function CP(m) {
  if (m === "top" || m === "bottom")
    return "x";
  if (m === "left" || m === "right")
    return "y";
}
function Xg(m, ...a) {
  if (R1(m))
    return m;
  for (const d of a) {
    const g = d.axis || CP(d.position) || m.length > 1 && R1(m[0].toLowerCase());
    if (g)
      return g;
  }
  throw new Error(`Cannot determine type of '${m}' axis. Please provide 'axis' or 'position' option.`);
}
function O1(m, a, d) {
  if (d[a + "AxisID"] === m)
    return {
      axis: a
    };
}
function IP(m, a) {
  if (a.data && a.data.datasets) {
    const d = a.data.datasets.filter((g) => g.xAxisID === m || g.yAxisID === m);
    if (d.length)
      return O1(m, "x", d[0]) || O1(m, "y", d[0]);
  }
  return {};
}
function LP(m, a) {
  const d = Oh[m.type] || {
    scales: {}
  }, g = a.scales || {}, w = $g(m.type, a), b = /* @__PURE__ */ Object.create(null);
  return Object.keys(g).forEach((E) => {
    const i = g[E];
    if (!yn(i))
      return console.error(`Invalid scale configuration for scale: ${E}`);
    if (i._proxy)
      return console.warn(`Ignoring resolver passed as options for scale: ${E}`);
    const O = Xg(E, i, IP(E, m), ys.scales[i.type]), j = AP(O, w), Y = d.scales || {};
    b[E] = Cf(/* @__PURE__ */ Object.create(null), [
      {
        axis: O
      },
      i,
      Y[O],
      Y[j]
    ]);
  }), m.data.datasets.forEach((E) => {
    const i = E.type || m.type, O = E.indexAxis || $g(i, a), Y = (Oh[i] || {}).scales || {};
    Object.keys(Y).forEach((J) => {
      const ae = PP(J, O), ce = E[ae + "AxisID"] || ae;
      b[ce] = b[ce] || /* @__PURE__ */ Object.create(null), Cf(b[ce], [
        {
          axis: ae
        },
        g[ce],
        Y[J]
      ]);
    });
  }), Object.keys(b).forEach((E) => {
    const i = b[E];
    Cf(i, [
      ys.scales[i.type],
      ys.scale
    ]);
  }), b;
}
function iw(m) {
  const a = m.options || (m.options = {});
  a.plugins = en(a.plugins, {}), a.scales = LP(m, a);
}
function nw(m) {
  return m = m || {}, m.datasets = m.datasets || [], m.labels = m.labels || [], m;
}
function zP(m) {
  return m = m || {}, m.data = nw(m.data), iw(m), m;
}
const F1 = /* @__PURE__ */ new Map(), sw = /* @__PURE__ */ new Set();
function vm(m, a) {
  let d = F1.get(m);
  return d || (d = a(), F1.set(m, d), sw.add(d)), d;
}
const bf = (m, a, d) => {
  const g = Rc(a, d);
  g !== void 0 && m.add(g);
};
class DP {
  constructor(a) {
    this._config = zP(a), this._scopeCache = /* @__PURE__ */ new Map(), this._resolverCache = /* @__PURE__ */ new Map();
  }
  get platform() {
    return this._config.platform;
  }
  get type() {
    return this._config.type;
  }
  set type(a) {
    this._config.type = a;
  }
  get data() {
    return this._config.data;
  }
  set data(a) {
    this._config.data = nw(a);
  }
  get options() {
    return this._config.options;
  }
  set options(a) {
    this._config.options = a;
  }
  get plugins() {
    return this._config.plugins;
  }
  update() {
    const a = this._config;
    this.clearCache(), iw(a);
  }
  clearCache() {
    this._scopeCache.clear(), this._resolverCache.clear();
  }
  datasetScopeKeys(a) {
    return vm(a, () => [
      [
        `datasets.${a}`,
        ""
      ]
    ]);
  }
  datasetAnimationScopeKeys(a, d) {
    return vm(`${a}.transition.${d}`, () => [
      [
        `datasets.${a}.transitions.${d}`,
        `transitions.${d}`
      ],
      [
        `datasets.${a}`,
        ""
      ]
    ]);
  }
  datasetElementScopeKeys(a, d) {
    return vm(`${a}-${d}`, () => [
      [
        `datasets.${a}.elements.${d}`,
        `datasets.${a}`,
        `elements.${d}`,
        ""
      ]
    ]);
  }
  pluginScopeKeys(a) {
    const d = a.id, g = this.type;
    return vm(`${g}-plugin-${d}`, () => [
      [
        `plugins.${d}`,
        ...a.additionalOptionScopes || []
      ]
    ]);
  }
  _cachedScopes(a, d) {
    const g = this._scopeCache;
    let w = g.get(a);
    return (!w || d) && (w = /* @__PURE__ */ new Map(), g.set(a, w)), w;
  }
  getOptionScopes(a, d, g) {
    const { options: w, type: b } = this, E = this._cachedScopes(a, g), i = E.get(d);
    if (i)
      return i;
    const O = /* @__PURE__ */ new Set();
    d.forEach((Y) => {
      a && (O.add(a), Y.forEach((J) => bf(O, a, J))), Y.forEach((J) => bf(O, w, J)), Y.forEach((J) => bf(O, Oh[b] || {}, J)), Y.forEach((J) => bf(O, ys, J)), Y.forEach((J) => bf(O, Hg, J));
    });
    const j = Array.from(O);
    return j.length === 0 && j.push(/* @__PURE__ */ Object.create(null)), sw.has(d) && E.set(d, j), j;
  }
  chartOptionScopes() {
    const { options: a, type: d } = this;
    return [
      a,
      Oh[d] || {},
      ys.datasets[d] || {},
      {
        type: d
      },
      ys,
      Hg
    ];
  }
  resolveNamedOptions(a, d, g, w = [
    ""
  ]) {
    const b = {
      $shared: !0
    }, { resolver: E, subPrefixes: i } = B1(this._resolverCache, a, w);
    let O = E;
    if (RP(E, d)) {
      b.$shared = !1, g = Oc(g) ? g() : g;
      const j = this.createResolver(a, g, i);
      O = Yu(E, g, j);
    }
    for (const j of d)
      b[j] = O[j];
    return b;
  }
  createResolver(a, d, g = [
    ""
  ], w) {
    const { resolver: b } = B1(this._resolverCache, a, g);
    return yn(d) ? Yu(b, d, void 0, w) : b;
  }
}
function B1(m, a, d) {
  let g = m.get(a);
  g || (g = /* @__PURE__ */ new Map(), m.set(a, g));
  const w = d.join();
  let b = g.get(w);
  return b || (b = {
    resolver: _y(a, d),
    subPrefixes: d.filter((i) => !i.toLowerCase().includes("hover"))
  }, g.set(w, b)), b;
}
const kP = (m) => yn(m) && Object.getOwnPropertyNames(m).some((a) => Oc(m[a]));
function RP(m, a) {
  const { isScriptable: d, isIndexable: g } = Fb(m);
  for (const w of a) {
    const b = d(w), E = g(w), i = (E || b) && m[w];
    if (b && (Oc(i) || kP(i)) || E && hs(i))
      return !0;
  }
  return !1;
}
var OP = "4.4.7";
const FP = [
  "top",
  "bottom",
  "left",
  "right",
  "chartArea"
];
function N1(m, a) {
  return m === "top" || m === "bottom" || FP.indexOf(m) === -1 && a === "x";
}
function V1(m, a) {
  return function(d, g) {
    return d[m] === g[m] ? d[a] - g[a] : d[m] - g[m];
  };
}
function U1(m) {
  const a = m.chart, d = a.options.animation;
  a.notifyPlugins("afterRender"), is(d && d.onComplete, [
    m
  ], a);
}
function BP(m) {
  const a = m.chart, d = a.options.animation;
  is(d && d.onProgress, [
    m
  ], a);
}
function rw(m) {
  return xy() && typeof m == "string" ? m = document.getElementById(m) : m && m.length && (m = m[0]), m && m.canvas && (m = m.canvas), m;
}
const Dm = {}, j1 = (m) => {
  const a = rw(m);
  return Object.values(Dm).filter((d) => d.canvas === a).pop();
};
function NP(m, a, d) {
  const g = Object.keys(m);
  for (const w of g) {
    const b = +w;
    if (b >= a) {
      const E = m[w];
      delete m[w], (d > 0 || b > a) && (m[b + d] = E);
    }
  }
}
function VP(m, a, d, g) {
  return !d || m.type === "mouseout" ? null : g ? a : m;
}
function bm(m, a, d) {
  return m.options.clip ? m[d] : a[d];
}
function UP(m, a) {
  const { xScale: d, yScale: g } = m;
  return d && g ? {
    left: bm(d, a, "left"),
    right: bm(d, a, "right"),
    top: bm(g, a, "top"),
    bottom: bm(g, a, "bottom")
  } : a;
}
class Bl {
  static register(...a) {
    al.add(...a), G1();
  }
  static unregister(...a) {
    al.remove(...a), G1();
  }
  constructor(a, d) {
    const g = this.config = new DP(d), w = rw(a), b = j1(w);
    if (b)
      throw new Error("Canvas is already in use. Chart with ID '" + b.id + "' must be destroyed before the canvas with ID '" + b.canvas.id + "' can be reused.");
    const E = g.createResolver(g.chartOptionScopes(), this.getContext());
    this.platform = new (g.platform || sP(w))(), this.platform.updateConfig(g);
    const i = this.platform.acquireContext(w, E.aspectRatio), O = i && i.canvas, j = O && O.height, Y = O && O.width;
    if (this.id = GM(), this.ctx = i, this.canvas = O, this.width = Y, this.height = j, this._options = E, this._aspectRatio = this.aspectRatio, this._layers = [], this._metasets = [], this._stacks = void 0, this.boxes = [], this.currentDevicePixelRatio = void 0, this.chartArea = void 0, this._active = [], this._lastEvent = void 0, this._listeners = {}, this._responsiveListeners = void 0, this._sortedMetasets = [], this.scales = {}, this._plugins = new wP(), this.$proxies = {}, this._hiddenIndices = {}, this.attached = !1, this._animationsDisabled = void 0, this.$context = void 0, this._doResize = rS((J) => this.update(J), E.resizeDelay || 0), this._dataChanges = [], Dm[this.id] = this, !i || !O) {
      console.error("Failed to create chart: can't acquire context from the given item");
      return;
    }
    Rl.listen(this, "complete", U1), Rl.listen(this, "progress", BP), this._initialize(), this.attached && this.update();
  }
  get aspectRatio() {
    const { options: { aspectRatio: a, maintainAspectRatio: d }, width: g, height: w, _aspectRatio: b } = this;
    return En(a) ? d && b ? b : w ? g / w : null : a;
  }
  get data() {
    return this.config.data;
  }
  set data(a) {
    this.config.data = a;
  }
  get options() {
    return this._options;
  }
  set options(a) {
    this.config.options = a;
  }
  get registry() {
    return al;
  }
  _initialize() {
    return this.notifyPlugins("beforeInit"), this.options.responsive ? this.resize() : u1(this, this.options.devicePixelRatio), this.bindEvents(), this.notifyPlugins("afterInit"), this;
  }
  clear() {
    return l1(this.canvas, this.ctx), this;
  }
  stop() {
    return Rl.stop(this), this;
  }
  resize(a, d) {
    Rl.running(this) ? this._resizeBeforeDraw = {
      width: a,
      height: d
    } : this._resize(a, d);
  }
  _resize(a, d) {
    const g = this.options, w = this.canvas, b = g.maintainAspectRatio && this.aspectRatio, E = this.platform.getMaximumSize(w, a, d, b), i = g.devicePixelRatio || this.platform.getDevicePixelRatio(), O = this.width ? "resize" : "attach";
    this.width = E.width, this.height = E.height, this._aspectRatio = this.aspectRatio, u1(this, i, !0) && (this.notifyPlugins("resize", {
      size: E
    }), is(g.onResize, [
      this,
      E
    ], this), this.attached && this._doResize(O) && this.render());
  }
  ensureScalesHaveIDs() {
    const d = this.options.scales || {};
    Zn(d, (g, w) => {
      g.id = w;
    });
  }
  buildOrUpdateScales() {
    const a = this.options, d = a.scales, g = this.scales, w = Object.keys(g).reduce((E, i) => (E[i] = !1, E), {});
    let b = [];
    d && (b = b.concat(Object.keys(d).map((E) => {
      const i = d[E], O = Xg(E, i), j = O === "r", Y = O === "x";
      return {
        options: i,
        dposition: j ? "chartArea" : Y ? "bottom" : "left",
        dtype: j ? "radialLinear" : Y ? "category" : "linear"
      };
    }))), Zn(b, (E) => {
      const i = E.options, O = i.id, j = Xg(O, i), Y = en(i.type, E.dtype);
      (i.position === void 0 || N1(i.position, j) !== N1(E.dposition)) && (i.position = E.dposition), w[O] = !0;
      let J = null;
      if (O in g && g[O].type === Y)
        J = g[O];
      else {
        const ae = al.getScale(Y);
        J = new ae({
          id: O,
          type: Y,
          ctx: this.ctx,
          chart: this
        }), g[J.id] = J;
      }
      J.init(i, a);
    }), Zn(w, (E, i) => {
      E || delete g[i];
    }), Zn(g, (E) => {
      jr.configure(this, E, E.options), jr.addBox(this, E);
    });
  }
  _updateMetasets() {
    const a = this._metasets, d = this.data.datasets.length, g = a.length;
    if (a.sort((w, b) => w.index - b.index), g > d) {
      for (let w = d; w < g; ++w)
        this._destroyDatasetMeta(w);
      a.splice(d, g - d);
    }
    this._sortedMetasets = a.slice(0).sort(V1("order", "index"));
  }
  _removeUnreferencedMetasets() {
    const { _metasets: a, data: { datasets: d } } = this;
    a.length > d.length && delete this._stacks, a.forEach((g, w) => {
      d.filter((b) => b === g._dataset).length === 0 && this._destroyDatasetMeta(w);
    });
  }
  buildOrUpdateControllers() {
    const a = [], d = this.data.datasets;
    let g, w;
    for (this._removeUnreferencedMetasets(), g = 0, w = d.length; g < w; g++) {
      const b = d[g];
      let E = this.getDatasetMeta(g);
      const i = b.type || this.config.type;
      if (E.type && E.type !== i && (this._destroyDatasetMeta(g), E = this.getDatasetMeta(g)), E.type = i, E.indexAxis = b.indexAxis || $g(i, this.options), E.order = b.order || 0, E.index = g, E.label = "" + b.label, E.visible = this.isDatasetVisible(g), E.controller)
        E.controller.updateIndex(g), E.controller.linkScales();
      else {
        const O = al.getController(i), { datasetElementType: j, dataElementType: Y } = ys.datasets[i];
        Object.assign(O, {
          dataElementType: al.getElement(Y),
          datasetElementType: j && al.getElement(j)
        }), E.controller = new O(this, g), a.push(E.controller);
      }
    }
    return this._updateMetasets(), a;
  }
  _resetElements() {
    Zn(this.data.datasets, (a, d) => {
      this.getDatasetMeta(d).controller.reset();
    }, this);
  }
  reset() {
    this._resetElements(), this.notifyPlugins("reset");
  }
  update(a) {
    const d = this.config;
    d.update();
    const g = this._options = d.createResolver(d.chartOptionScopes(), this.getContext()), w = this._animationsDisabled = !g.animation;
    if (this._updateScales(), this._checkEventBindings(), this._updateHiddenIndices(), this._plugins.invalidate(), this.notifyPlugins("beforeUpdate", {
      mode: a,
      cancelable: !0
    }) === !1)
      return;
    const b = this.buildOrUpdateControllers();
    this.notifyPlugins("beforeElementsUpdate");
    let E = 0;
    for (let j = 0, Y = this.data.datasets.length; j < Y; j++) {
      const { controller: J } = this.getDatasetMeta(j), ae = !w && b.indexOf(J) === -1;
      J.buildOrUpdateElements(ae), E = Math.max(+J.getMaxOverflow(), E);
    }
    E = this._minPadding = g.layout.autoPadding ? E : 0, this._updateLayout(E), w || Zn(b, (j) => {
      j.reset();
    }), this._updateDatasets(a), this.notifyPlugins("afterUpdate", {
      mode: a
    }), this._layers.sort(V1("z", "_idx"));
    const { _active: i, _lastEvent: O } = this;
    O ? this._eventHandler(O, !0) : i.length && this._updateHoverStyles(i, i, !0), this.render();
  }
  _updateScales() {
    Zn(this.scales, (a) => {
      jr.removeBox(this, a);
    }), this.ensureScalesHaveIDs(), this.buildOrUpdateScales();
  }
  _checkEventBindings() {
    const a = this.options, d = new Set(Object.keys(this._listeners)), g = new Set(a.events);
    (!Qv(d, g) || !!this._responsiveListeners !== a.responsive) && (this.unbindEvents(), this.bindEvents());
  }
  _updateHiddenIndices() {
    const { _hiddenIndices: a } = this, d = this._getUniformDataChanges() || [];
    for (const { method: g, start: w, count: b } of d) {
      const E = g === "_removeElements" ? -b : b;
      NP(a, w, E);
    }
  }
  _getUniformDataChanges() {
    const a = this._dataChanges;
    if (!a || !a.length)
      return;
    this._dataChanges = [];
    const d = this.data.datasets.length, g = (b) => new Set(a.filter((E) => E[0] === b).map((E, i) => i + "," + E.splice(1).join(","))), w = g(0);
    for (let b = 1; b < d; b++)
      if (!Qv(w, g(b)))
        return;
    return Array.from(w).map((b) => b.split(",")).map((b) => ({
      method: b[1],
      start: +b[2],
      count: +b[3]
    }));
  }
  _updateLayout(a) {
    if (this.notifyPlugins("beforeLayout", {
      cancelable: !0
    }) === !1)
      return;
    jr.update(this, this.width, this.height, a);
    const d = this.chartArea, g = d.width <= 0 || d.height <= 0;
    this._layers = [], Zn(this.boxes, (w) => {
      g && w.position === "chartArea" || (w.configure && w.configure(), this._layers.push(...w._layers()));
    }, this), this._layers.forEach((w, b) => {
      w._idx = b;
    }), this.notifyPlugins("afterLayout");
  }
  _updateDatasets(a) {
    if (this.notifyPlugins("beforeDatasetsUpdate", {
      mode: a,
      cancelable: !0
    }) !== !1) {
      for (let d = 0, g = this.data.datasets.length; d < g; ++d)
        this.getDatasetMeta(d).controller.configure();
      for (let d = 0, g = this.data.datasets.length; d < g; ++d)
        this._updateDataset(d, Oc(a) ? a({
          datasetIndex: d
        }) : a);
      this.notifyPlugins("afterDatasetsUpdate", {
        mode: a
      });
    }
  }
  _updateDataset(a, d) {
    const g = this.getDatasetMeta(a), w = {
      meta: g,
      index: a,
      mode: d,
      cancelable: !0
    };
    this.notifyPlugins("beforeDatasetUpdate", w) !== !1 && (g.controller._update(d), w.cancelable = !1, this.notifyPlugins("afterDatasetUpdate", w));
  }
  render() {
    this.notifyPlugins("beforeRender", {
      cancelable: !0
    }) !== !1 && (Rl.has(this) ? this.attached && !Rl.running(this) && Rl.start(this) : (this.draw(), U1({
      chart: this
    })));
  }
  draw() {
    let a;
    if (this._resizeBeforeDraw) {
      const { width: g, height: w } = this._resizeBeforeDraw;
      this._resizeBeforeDraw = null, this._resize(g, w);
    }
    if (this.clear(), this.width <= 0 || this.height <= 0 || this.notifyPlugins("beforeDraw", {
      cancelable: !0
    }) === !1)
      return;
    const d = this._layers;
    for (a = 0; a < d.length && d[a].z <= 0; ++a)
      d[a].draw(this.chartArea);
    for (this._drawDatasets(); a < d.length; ++a)
      d[a].draw(this.chartArea);
    this.notifyPlugins("afterDraw");
  }
  _getSortedDatasetMetas(a) {
    const d = this._sortedMetasets, g = [];
    let w, b;
    for (w = 0, b = d.length; w < b; ++w) {
      const E = d[w];
      (!a || E.visible) && g.push(E);
    }
    return g;
  }
  getSortedVisibleDatasetMetas() {
    return this._getSortedDatasetMetas(!0);
  }
  _drawDatasets() {
    if (this.notifyPlugins("beforeDatasetsDraw", {
      cancelable: !0
    }) === !1)
      return;
    const a = this.getSortedVisibleDatasetMetas();
    for (let d = a.length - 1; d >= 0; --d)
      this._drawDataset(a[d]);
    this.notifyPlugins("afterDatasetsDraw");
  }
  _drawDataset(a) {
    const d = this.ctx, g = a._clip, w = !g.disabled, b = UP(a, this.chartArea), E = {
      meta: a,
      index: a.index,
      cancelable: !0
    };
    this.notifyPlugins("beforeDatasetDraw", E) !== !1 && (w && Wm(d, {
      left: g.left === !1 ? 0 : b.left - g.left,
      right: g.right === !1 ? this.width : b.right + g.right,
      top: g.top === !1 ? 0 : b.top - g.top,
      bottom: g.bottom === !1 ? this.height : b.bottom + g.bottom
    }), a.controller.draw(), w && $m(d), E.cancelable = !1, this.notifyPlugins("afterDatasetDraw", E));
  }
  isPointInArea(a) {
    return Ul(a, this.chartArea, this._minPadding);
  }
  getElementsAtEventForMode(a, d, g, w) {
    const b = FE.modes[d];
    return typeof b == "function" ? b(this, a, g, w) : [];
  }
  getDatasetMeta(a) {
    const d = this.data.datasets[a], g = this._metasets;
    let w = g.filter((b) => b && b._dataset === d).pop();
    return w || (w = {
      type: null,
      data: [],
      dataset: null,
      controller: null,
      hidden: null,
      xAxisID: null,
      yAxisID: null,
      order: d && d.order || 0,
      index: a,
      _dataset: d,
      _parsed: [],
      _sorted: !1
    }, g.push(w)), w;
  }
  getContext() {
    return this.$context || (this.$context = Fc(null, {
      chart: this,
      type: "chart"
    }));
  }
  getVisibleDatasetCount() {
    return this.getSortedVisibleDatasetMetas().length;
  }
  isDatasetVisible(a) {
    const d = this.data.datasets[a];
    if (!d)
      return !1;
    const g = this.getDatasetMeta(a);
    return typeof g.hidden == "boolean" ? !g.hidden : !d.hidden;
  }
  setDatasetVisibility(a, d) {
    const g = this.getDatasetMeta(a);
    g.hidden = !d;
  }
  toggleDataVisibility(a) {
    this._hiddenIndices[a] = !this._hiddenIndices[a];
  }
  getDataVisibility(a) {
    return !this._hiddenIndices[a];
  }
  _updateVisibility(a, d, g) {
    const w = g ? "show" : "hide", b = this.getDatasetMeta(a), E = b.controller._resolveAnimations(void 0, w);
    Of(d) ? (b.data[d].hidden = !g, this.update()) : (this.setDatasetVisibility(a, g), E.update(b, {
      visible: g
    }), this.update((i) => i.datasetIndex === a ? w : void 0));
  }
  hide(a, d) {
    this._updateVisibility(a, d, !1);
  }
  show(a, d) {
    this._updateVisibility(a, d, !0);
  }
  _destroyDatasetMeta(a) {
    const d = this._metasets[a];
    d && d.controller && d.controller._destroy(), delete this._metasets[a];
  }
  _stop() {
    let a, d;
    for (this.stop(), Rl.remove(this), a = 0, d = this.data.datasets.length; a < d; ++a)
      this._destroyDatasetMeta(a);
  }
  destroy() {
    this.notifyPlugins("beforeDestroy");
    const { canvas: a, ctx: d } = this;
    this._stop(), this.config.clearCache(), a && (this.unbindEvents(), l1(a, d), this.platform.releaseContext(d), this.canvas = null, this.ctx = null), delete Dm[this.id], this.notifyPlugins("afterDestroy");
  }
  toBase64Image(...a) {
    return this.canvas.toDataURL(...a);
  }
  bindEvents() {
    this.bindUserEvents(), this.options.responsive ? this.bindResponsiveEvents() : this.attached = !0;
  }
  bindUserEvents() {
    const a = this._listeners, d = this.platform, g = (b, E) => {
      d.addEventListener(this, b, E), a[b] = E;
    }, w = (b, E, i) => {
      b.offsetX = E, b.offsetY = i, this._eventHandler(b);
    };
    Zn(this.options.events, (b) => g(b, w));
  }
  bindResponsiveEvents() {
    this._responsiveListeners || (this._responsiveListeners = {});
    const a = this._responsiveListeners, d = this.platform, g = (O, j) => {
      d.addEventListener(this, O, j), a[O] = j;
    }, w = (O, j) => {
      a[O] && (d.removeEventListener(this, O, j), delete a[O]);
    }, b = (O, j) => {
      this.canvas && this.resize(O, j);
    };
    let E;
    const i = () => {
      w("attach", i), this.attached = !0, this.resize(), g("resize", b), g("detach", E);
    };
    E = () => {
      this.attached = !1, w("resize", b), this._stop(), this._resize(0, 0), g("attach", i);
    }, d.isAttached(this.canvas) ? i() : E();
  }
  unbindEvents() {
    Zn(this._listeners, (a, d) => {
      this.platform.removeEventListener(this, d, a);
    }), this._listeners = {}, Zn(this._responsiveListeners, (a, d) => {
      this.platform.removeEventListener(this, d, a);
    }), this._responsiveListeners = void 0;
  }
  updateHoverStyle(a, d, g) {
    const w = g ? "set" : "remove";
    let b, E, i, O;
    for (d === "dataset" && (b = this.getDatasetMeta(a[0].datasetIndex), b.controller["_" + w + "DatasetHoverStyle"]()), i = 0, O = a.length; i < O; ++i) {
      E = a[i];
      const j = E && this.getDatasetMeta(E.datasetIndex).controller;
      j && j[w + "HoverStyle"](E.element, E.datasetIndex, E.index);
    }
  }
  getActiveElements() {
    return this._active || [];
  }
  setActiveElements(a) {
    const d = this._active || [], g = a.map(({ datasetIndex: b, index: E }) => {
      const i = this.getDatasetMeta(b);
      if (!i)
        throw new Error("No dataset found at index " + b);
      return {
        datasetIndex: b,
        element: i.data[E],
        index: E
      };
    });
    !Om(g, d) && (this._active = g, this._lastEvent = null, this._updateHoverStyles(g, d));
  }
  notifyPlugins(a, d, g) {
    return this._plugins.notify(this, a, d, g);
  }
  isPluginEnabled(a) {
    return this._plugins._cache.filter((d) => d.plugin.id === a).length === 1;
  }
  _updateHoverStyles(a, d, g) {
    const w = this.options.hover, b = (O, j) => O.filter((Y) => !j.some((J) => Y.datasetIndex === J.datasetIndex && Y.index === J.index)), E = b(d, a), i = g ? a : b(a, d);
    E.length && this.updateHoverStyle(E, w.mode, !1), i.length && w.mode && this.updateHoverStyle(i, w.mode, !0);
  }
  _eventHandler(a, d) {
    const g = {
      event: a,
      replay: d,
      cancelable: !0,
      inChartArea: this.isPointInArea(a)
    }, w = (E) => (E.options.events || this.options.events).includes(a.native.type);
    if (this.notifyPlugins("beforeEvent", g, w) === !1)
      return;
    const b = this._handleEvent(a, d, g.inChartArea);
    return g.cancelable = !1, this.notifyPlugins("afterEvent", g, w), (b || g.changed) && this.render(), this;
  }
  _handleEvent(a, d, g) {
    const { _active: w = [], options: b } = this, E = d, i = this._getActiveElements(a, w, g, E), O = XM(a), j = VP(a, this._lastEvent, g, O);
    g && (this._lastEvent = null, is(b.onHover, [
      a,
      i,
      this
    ], this), O && is(b.onClick, [
      a,
      i,
      this
    ], this));
    const Y = !Om(i, w);
    return (Y || d) && (this._active = i, this._updateHoverStyles(i, w, d)), this._lastEvent = j, Y;
  }
  _getActiveElements(a, d, g, w) {
    if (a.type === "mouseout")
      return [];
    if (!g)
      return d;
    const b = this.options.hover;
    return this.getElementsAtEventForMode(a, b.mode, b, w);
  }
}
Yt(Bl, "defaults", ys), Yt(Bl, "instances", Dm), Yt(Bl, "overrides", Oh), Yt(Bl, "registry", al), Yt(Bl, "version", OP), Yt(Bl, "getChart", j1);
function G1() {
  return Zn(Bl.instances, (m) => m._plugins.invalidate());
}
function jP(m, a, d) {
  const { startAngle: g, pixelMargin: w, x: b, y: E, outerRadius: i, innerRadius: O } = a;
  let j = w / i;
  m.beginPath(), m.arc(b, E, i, g - j, d + j), O > w ? (j = w / O, m.arc(b, E, O, d + j, g - j, !0)) : m.arc(b, E, w, d + Ns, g - Ns), m.closePath(), m.clip();
}
function GP(m) {
  return my(m, [
    "outerStart",
    "outerEnd",
    "innerStart",
    "innerEnd"
  ]);
}
function ZP(m, a, d, g) {
  const w = GP(m.options.borderRadius), b = (d - a) / 2, E = Math.min(b, g * a / 2), i = (O) => {
    const j = (d - Math.min(b, O)) * g / 2;
    return gr(O, 0, Math.min(b, j));
  };
  return {
    outerStart: i(w.outerStart),
    outerEnd: i(w.outerEnd),
    innerStart: gr(w.innerStart, 0, E),
    innerEnd: gr(w.innerEnd, 0, E)
  };
}
function Wu(m, a, d, g) {
  return {
    x: d + m * Math.cos(a),
    y: g + m * Math.sin(a)
  };
}
function jm(m, a, d, g, w, b) {
  const { x: E, y: i, startAngle: O, pixelMargin: j, innerRadius: Y } = a, J = Math.max(a.outerRadius + g + d - j, 0), ae = Y > 0 ? Y + g + d + j : 0;
  let ce = 0;
  const Te = w - O;
  if (g) {
    const Ht = Y > 0 ? Y - g : 0, Si = J > 0 ? J - g : 0, Ji = (Ht + Si) / 2, fi = Ji !== 0 ? Te * Ji / (Ji + g) : Te;
    ce = (Te - fi) / 2;
  }
  const be = Math.max(1e-3, Te * J - d / ds) / J, Ze = (Te - be) / 2, je = O + Ze + ce, ot = w - Ze - ce, { outerStart: vt, outerEnd: ht, innerStart: gt, innerEnd: Vt } = ZP(a, ae, J, ot - je), pt = J - vt, Gt = J - ht, ui = je + vt / pt, kt = ot - ht / Gt, Pt = ae + gt, Mi = ae + Vt, Pn = je + gt / Pt, hn = ot - Vt / Mi;
  if (m.beginPath(), b) {
    const Ht = (ui + kt) / 2;
    if (m.arc(E, i, J, ui, Ht), m.arc(E, i, J, Ht, kt), ht > 0) {
      const jt = Wu(Gt, kt, E, i);
      m.arc(jt.x, jt.y, ht, kt, ot + Ns);
    }
    const Si = Wu(Mi, ot, E, i);
    if (m.lineTo(Si.x, Si.y), Vt > 0) {
      const jt = Wu(Mi, hn, E, i);
      m.arc(jt.x, jt.y, Vt, ot + Ns, hn + Math.PI);
    }
    const Ji = (ot - Vt / ae + (je + gt / ae)) / 2;
    if (m.arc(E, i, ae, ot - Vt / ae, Ji, !0), m.arc(E, i, ae, Ji, je + gt / ae, !0), gt > 0) {
      const jt = Wu(Pt, Pn, E, i);
      m.arc(jt.x, jt.y, gt, Pn + Math.PI, je - Ns);
    }
    const fi = Wu(pt, je, E, i);
    if (m.lineTo(fi.x, fi.y), vt > 0) {
      const jt = Wu(pt, ui, E, i);
      m.arc(jt.x, jt.y, vt, je - Ns, ui);
    }
  } else {
    m.moveTo(E, i);
    const Ht = Math.cos(ui) * J + E, Si = Math.sin(ui) * J + i;
    m.lineTo(Ht, Si);
    const Ji = Math.cos(kt) * J + E, fi = Math.sin(kt) * J + i;
    m.lineTo(Ji, fi);
  }
  m.closePath();
}
function HP(m, a, d, g, w) {
  const { fullCircles: b, startAngle: E, circumference: i } = a;
  let O = a.endAngle;
  if (b) {
    jm(m, a, d, g, O, w);
    for (let j = 0; j < b; ++j)
      m.fill();
    isNaN(i) || (O = E + (i % us || us));
  }
  return jm(m, a, d, g, O, w), m.fill(), O;
}
function qP(m, a, d, g, w) {
  const { fullCircles: b, startAngle: E, circumference: i, options: O } = a, { borderWidth: j, borderJoinStyle: Y, borderDash: J, borderDashOffset: ae } = O, ce = O.borderAlign === "inner";
  if (!j)
    return;
  m.setLineDash(J || []), m.lineDashOffset = ae, ce ? (m.lineWidth = j * 2, m.lineJoin = Y || "round") : (m.lineWidth = j, m.lineJoin = Y || "bevel");
  let Te = a.endAngle;
  if (b) {
    jm(m, a, d, g, Te, w);
    for (let be = 0; be < b; ++be)
      m.stroke();
    isNaN(i) || (Te = E + (i % us || us));
  }
  ce && jP(m, a, Te), b || (jm(m, a, d, g, Te, w), m.stroke());
}
class Sf extends jl {
  constructor(d) {
    super();
    Yt(this, "circumference");
    Yt(this, "endAngle");
    Yt(this, "fullCircles");
    Yt(this, "innerRadius");
    Yt(this, "outerRadius");
    Yt(this, "pixelMargin");
    Yt(this, "startAngle");
    this.options = void 0, this.circumference = void 0, this.startAngle = void 0, this.endAngle = void 0, this.innerRadius = void 0, this.outerRadius = void 0, this.pixelMargin = 0, this.fullCircles = 0, d && Object.assign(this, d);
  }
  inRange(d, g, w) {
    const b = this.getProps([
      "x",
      "y"
    ], w), { angle: E, distance: i } = Pb(b, {
      x: d,
      y: g
    }), { startAngle: O, endAngle: j, innerRadius: Y, outerRadius: J, circumference: ae } = this.getProps([
      "startAngle",
      "endAngle",
      "innerRadius",
      "outerRadius",
      "circumference"
    ], w), ce = (this.options.spacing + this.options.borderWidth) / 2, Te = en(ae, j - O), be = Ff(E, O, j) && O !== j, Ze = Te >= us || be, je = Nl(i, Y + ce, J + ce);
    return Ze && je;
  }
  getCenterPoint(d) {
    const { x: g, y: w, startAngle: b, endAngle: E, innerRadius: i, outerRadius: O } = this.getProps([
      "x",
      "y",
      "startAngle",
      "endAngle",
      "innerRadius",
      "outerRadius"
    ], d), { offset: j, spacing: Y } = this.options, J = (b + E) / 2, ae = (i + O + Y + j) / 2;
    return {
      x: g + Math.cos(J) * ae,
      y: w + Math.sin(J) * ae
    };
  }
  tooltipPosition(d) {
    return this.getCenterPoint(d);
  }
  draw(d) {
    const { options: g, circumference: w } = this, b = (g.offset || 0) / 4, E = (g.spacing || 0) / 2, i = g.circular;
    if (this.pixelMargin = g.borderAlign === "inner" ? 0.33 : 0, this.fullCircles = w > us ? Math.floor(w / us) : 0, w === 0 || this.innerRadius < 0 || this.outerRadius < 0)
      return;
    d.save();
    const O = (this.startAngle + this.endAngle) / 2;
    d.translate(Math.cos(O) * b, Math.sin(O) * b);
    const j = 1 - Math.sin(Math.min(ds, w || 0)), Y = b * j;
    d.fillStyle = g.backgroundColor, d.strokeStyle = g.borderColor, HP(d, this, Y, E, i), qP(d, this, Y, E, i), d.restore();
  }
}
Yt(Sf, "id", "arc"), Yt(Sf, "defaults", {
  borderAlign: "center",
  borderColor: "#fff",
  borderDash: [],
  borderDashOffset: 0,
  borderJoinStyle: void 0,
  borderRadius: 0,
  borderWidth: 2,
  offset: 0,
  spacing: 0,
  angle: void 0,
  circular: !0
}), Yt(Sf, "defaultRoutes", {
  backgroundColor: "backgroundColor"
}), Yt(Sf, "descriptors", {
  _scriptable: !0,
  _indexable: (d) => d !== "borderDash"
});
function ow(m, a, d = a) {
  m.lineCap = en(d.borderCapStyle, a.borderCapStyle), m.setLineDash(en(d.borderDash, a.borderDash)), m.lineDashOffset = en(d.borderDashOffset, a.borderDashOffset), m.lineJoin = en(d.borderJoinStyle, a.borderJoinStyle), m.lineWidth = en(d.borderWidth, a.borderWidth), m.strokeStyle = en(d.borderColor, a.borderColor);
}
function WP(m, a, d) {
  m.lineTo(d.x, d.y);
}
function $P(m) {
  return m.stepped ? gS : m.tension || m.cubicInterpolationMode === "monotone" ? yS : WP;
}
function aw(m, a, d = {}) {
  const g = m.length, { start: w = 0, end: b = g - 1 } = d, { start: E, end: i } = a, O = Math.max(w, E), j = Math.min(b, i), Y = w < E && b < E || w > i && b > i;
  return {
    count: g,
    start: O,
    loop: a.loop,
    ilen: j < O && !Y ? g + j - O : j - O
  };
}
function XP(m, a, d, g) {
  const { points: w, options: b } = a, { count: E, start: i, loop: O, ilen: j } = aw(w, d, g), Y = $P(b);
  let { move: J = !0, reverse: ae } = g || {}, ce, Te, be;
  for (ce = 0; ce <= j; ++ce)
    Te = w[(i + (ae ? j - ce : ce)) % E], !Te.skip && (J ? (m.moveTo(Te.x, Te.y), J = !1) : Y(m, be, Te, ae, b.stepped), be = Te);
  return O && (Te = w[(i + (ae ? j : 0)) % E], Y(m, be, Te, ae, b.stepped)), !!O;
}
function YP(m, a, d, g) {
  const w = a.points, { count: b, start: E, ilen: i } = aw(w, d, g), { move: O = !0, reverse: j } = g || {};
  let Y = 0, J = 0, ae, ce, Te, be, Ze, je;
  const ot = (ht) => (E + (j ? i - ht : ht)) % b, vt = () => {
    be !== Ze && (m.lineTo(Y, Ze), m.lineTo(Y, be), m.lineTo(Y, je));
  };
  for (O && (ce = w[ot(0)], m.moveTo(ce.x, ce.y)), ae = 0; ae <= i; ++ae) {
    if (ce = w[ot(ae)], ce.skip)
      continue;
    const ht = ce.x, gt = ce.y, Vt = ht | 0;
    Vt === Te ? (gt < be ? be = gt : gt > Ze && (Ze = gt), Y = (J * Y + ht) / ++J) : (vt(), m.lineTo(ht, gt), Te = Vt, J = 0, be = Ze = gt), je = gt;
  }
  vt();
}
function Yg(m) {
  const a = m.options, d = a.borderDash && a.borderDash.length;
  return !m._decimated && !m._loop && !a.tension && a.cubicInterpolationMode !== "monotone" && !a.stepped && !d ? YP : XP;
}
function KP(m) {
  return m.stepped ? YS : m.tension || m.cubicInterpolationMode === "monotone" ? KS : zh;
}
function JP(m, a, d, g) {
  let w = a._path;
  w || (w = a._path = new Path2D(), a.path(w, d, g) && w.closePath()), ow(m, a.options), m.stroke(w);
}
function QP(m, a, d, g) {
  const { segments: w, options: b } = a, E = Yg(a);
  for (const i of w)
    ow(m, b, i.style), m.beginPath(), E(m, a, i, {
      start: d,
      end: d + g - 1
    }) && m.closePath(), m.stroke();
}
const eA = typeof Path2D == "function";
function tA(m, a, d, g) {
  eA && !a.options.segment ? JP(m, a, d, g) : QP(m, a, d, g);
}
class zc extends jl {
  constructor(a) {
    super(), this.animated = !0, this.options = void 0, this._chart = void 0, this._loop = void 0, this._fullLoop = void 0, this._path = void 0, this._points = void 0, this._segments = void 0, this._decimated = !1, this._pointsUpdated = !1, this._datasetIndex = void 0, a && Object.assign(this, a);
  }
  updateControlPoints(a, d) {
    const g = this.options;
    if ((g.tension || g.cubicInterpolationMode === "monotone") && !g.stepped && !this._pointsUpdated) {
      const w = g.spanGaps ? this._loop : this._fullLoop;
      jS(this._points, g, a, w, d), this._pointsUpdated = !0;
    }
  }
  set points(a) {
    this._points = a, delete this._segments, delete this._path, this._pointsUpdated = !1;
  }
  get points() {
    return this._points;
  }
  get segments() {
    return this._segments || (this._segments = nE(this, this.options.segment));
  }
  first() {
    const a = this.segments, d = this.points;
    return a.length && d[a[0].start];
  }
  last() {
    const a = this.segments, d = this.points, g = a.length;
    return g && d[a[g - 1].end];
  }
  interpolate(a, d) {
    const g = this.options, w = a[d], b = this.points, E = Wb(this, {
      property: d,
      start: w,
      end: w
    });
    if (!E.length)
      return;
    const i = [], O = KP(g);
    let j, Y;
    for (j = 0, Y = E.length; j < Y; ++j) {
      const { start: J, end: ae } = E[j], ce = b[J], Te = b[ae];
      if (ce === Te) {
        i.push(ce);
        continue;
      }
      const be = Math.abs((w - ce[d]) / (Te[d] - ce[d])), Ze = O(ce, Te, be, g.stepped);
      Ze[d] = a[d], i.push(Ze);
    }
    return i.length === 1 ? i[0] : i;
  }
  pathSegment(a, d, g) {
    return Yg(this)(a, this, d, g);
  }
  path(a, d, g) {
    const w = this.segments, b = Yg(this);
    let E = this._loop;
    d = d || 0, g = g || this.points.length - d;
    for (const i of w)
      E &= b(a, this, i, {
        start: d,
        end: d + g - 1
      });
    return !!E;
  }
  draw(a, d, g, w) {
    const b = this.options || {};
    (this.points || []).length && b.borderWidth && (a.save(), tA(a, this, g, w), a.restore()), this.animated && (this._pointsUpdated = !1, this._path = void 0);
  }
}
Yt(zc, "id", "line"), Yt(zc, "defaults", {
  borderCapStyle: "butt",
  borderDash: [],
  borderDashOffset: 0,
  borderJoinStyle: "miter",
  borderWidth: 3,
  capBezierPoints: !0,
  cubicInterpolationMode: "default",
  fill: !1,
  spanGaps: !1,
  stepped: !1,
  tension: 0
}), Yt(zc, "defaultRoutes", {
  backgroundColor: "backgroundColor",
  borderColor: "borderColor"
}), Yt(zc, "descriptors", {
  _scriptable: !0,
  _indexable: (a) => a !== "borderDash" && a !== "fill"
});
function Z1(m, a, d, g) {
  const w = m.options, { [d]: b } = m.getProps([
    d
  ], g);
  return Math.abs(a - b) < w.radius + w.hitRadius;
}
class km extends jl {
  constructor(d) {
    super();
    Yt(this, "parsed");
    Yt(this, "skip");
    Yt(this, "stop");
    this.options = void 0, this.parsed = void 0, this.skip = void 0, this.stop = void 0, d && Object.assign(this, d);
  }
  inRange(d, g, w) {
    const b = this.options, { x: E, y: i } = this.getProps([
      "x",
      "y"
    ], w);
    return Math.pow(d - E, 2) + Math.pow(g - i, 2) < Math.pow(b.hitRadius + b.radius, 2);
  }
  inXRange(d, g) {
    return Z1(this, d, "x", g);
  }
  inYRange(d, g) {
    return Z1(this, d, "y", g);
  }
  getCenterPoint(d) {
    const { x: g, y: w } = this.getProps([
      "x",
      "y"
    ], d);
    return {
      x: g,
      y: w
    };
  }
  size(d) {
    d = d || this.options || {};
    let g = d.radius || 0;
    g = Math.max(g, g && d.hoverRadius || 0);
    const w = g && d.borderWidth || 0;
    return (g + w) * 2;
  }
  draw(d, g) {
    const w = this.options;
    this.skip || w.radius < 0.1 || !Ul(this, g, this.size(w) / 2) || (d.strokeStyle = w.borderColor, d.lineWidth = w.borderWidth, d.fillStyle = w.backgroundColor, qg(d, w, this.x, this.y));
  }
  getRange() {
    const d = this.options || {};
    return d.radius + d.hitRadius;
  }
}
Yt(km, "id", "point"), /**
* @type {any}
*/
Yt(km, "defaults", {
  borderWidth: 1,
  hitRadius: 1,
  hoverBorderWidth: 1,
  hoverRadius: 4,
  pointStyle: "circle",
  radius: 3,
  rotation: 0
}), /**
* @type {any}
*/
Yt(km, "defaultRoutes", {
  backgroundColor: "backgroundColor",
  borderColor: "borderColor"
});
function lw(m, a) {
  const { x: d, y: g, base: w, width: b, height: E } = m.getProps([
    "x",
    "y",
    "base",
    "width",
    "height"
  ], a);
  let i, O, j, Y, J;
  return m.horizontal ? (J = E / 2, i = Math.min(d, w), O = Math.max(d, w), j = g - J, Y = g + J) : (J = b / 2, i = d - J, O = d + J, j = Math.min(g, w), Y = Math.max(g, w)), {
    left: i,
    top: j,
    right: O,
    bottom: Y
  };
}
function Dc(m, a, d, g) {
  return m ? 0 : gr(a, d, g);
}
function iA(m, a, d) {
  const g = m.options.borderWidth, w = m.borderSkipped, b = Ob(g);
  return {
    t: Dc(w.top, b.top, 0, d),
    r: Dc(w.right, b.right, 0, a),
    b: Dc(w.bottom, b.bottom, 0, d),
    l: Dc(w.left, b.left, 0, a)
  };
}
function nA(m, a, d) {
  const { enableBorderRadius: g } = m.getProps([
    "enableBorderRadius"
  ]), w = m.options.borderRadius, b = kh(w), E = Math.min(a, d), i = m.borderSkipped, O = g || yn(w);
  return {
    topLeft: Dc(!O || i.top || i.left, b.topLeft, 0, E),
    topRight: Dc(!O || i.top || i.right, b.topRight, 0, E),
    bottomLeft: Dc(!O || i.bottom || i.left, b.bottomLeft, 0, E),
    bottomRight: Dc(!O || i.bottom || i.right, b.bottomRight, 0, E)
  };
}
function sA(m) {
  const a = lw(m), d = a.right - a.left, g = a.bottom - a.top, w = iA(m, d / 2, g / 2), b = nA(m, d / 2, g / 2);
  return {
    outer: {
      x: a.left,
      y: a.top,
      w: d,
      h: g,
      radius: b
    },
    inner: {
      x: a.left + w.l,
      y: a.top + w.t,
      w: d - w.l - w.r,
      h: g - w.t - w.b,
      radius: {
        topLeft: Math.max(0, b.topLeft - Math.max(w.t, w.l)),
        topRight: Math.max(0, b.topRight - Math.max(w.t, w.r)),
        bottomLeft: Math.max(0, b.bottomLeft - Math.max(w.b, w.l)),
        bottomRight: Math.max(0, b.bottomRight - Math.max(w.b, w.r))
      }
    }
  };
}
function Vg(m, a, d, g) {
  const w = a === null, b = d === null, i = m && !(w && b) && lw(m, g);
  return i && (w || Nl(a, i.left, i.right)) && (b || Nl(d, i.top, i.bottom));
}
function rA(m) {
  return m.topLeft || m.topRight || m.bottomLeft || m.bottomRight;
}
function oA(m, a) {
  m.rect(a.x, a.y, a.w, a.h);
}
function Ug(m, a, d = {}) {
  const g = m.x !== d.x ? -a : 0, w = m.y !== d.y ? -a : 0, b = (m.x + m.w !== d.x + d.w ? a : 0) - g, E = (m.y + m.h !== d.y + d.h ? a : 0) - w;
  return {
    x: m.x + g,
    y: m.y + w,
    w: m.w + b,
    h: m.h + E,
    radius: m.radius
  };
}
class Rm extends jl {
  constructor(a) {
    super(), this.options = void 0, this.horizontal = void 0, this.base = void 0, this.width = void 0, this.height = void 0, this.inflateAmount = void 0, a && Object.assign(this, a);
  }
  draw(a) {
    const { inflateAmount: d, options: { borderColor: g, backgroundColor: w } } = this, { inner: b, outer: E } = sA(this), i = rA(E.radius) ? Bf : oA;
    a.save(), (E.w !== b.w || E.h !== b.h) && (a.beginPath(), i(a, Ug(E, d, b)), a.clip(), i(a, Ug(b, -d, E)), a.fillStyle = g, a.fill("evenodd")), a.beginPath(), i(a, Ug(b, d)), a.fillStyle = w, a.fill(), a.restore();
  }
  inRange(a, d, g) {
    return Vg(this, a, d, g);
  }
  inXRange(a, d) {
    return Vg(this, a, null, d);
  }
  inYRange(a, d) {
    return Vg(this, null, a, d);
  }
  getCenterPoint(a) {
    const { x: d, y: g, base: w, horizontal: b } = this.getProps([
      "x",
      "y",
      "base",
      "horizontal"
    ], a);
    return {
      x: b ? (d + w) / 2 : d,
      y: b ? g : (g + w) / 2
    };
  }
  getRange(a) {
    return a === "x" ? this.width / 2 : this.height / 2;
  }
}
Yt(Rm, "id", "bar"), Yt(Rm, "defaults", {
  borderSkipped: "start",
  borderWidth: 0,
  borderRadius: 0,
  inflateAmount: "auto",
  pointStyle: void 0
}), Yt(Rm, "defaultRoutes", {
  backgroundColor: "backgroundColor",
  borderColor: "borderColor"
});
var aA = /* @__PURE__ */ Object.freeze({
  __proto__: null,
  ArcElement: Sf,
  BarElement: Rm,
  LineElement: zc,
  PointElement: km
});
const Kg = [
  "rgb(54, 162, 235)",
  "rgb(255, 99, 132)",
  "rgb(255, 159, 64)",
  "rgb(255, 205, 86)",
  "rgb(75, 192, 192)",
  "rgb(153, 102, 255)",
  "rgb(201, 203, 207)"
  // grey
], H1 = /* @__PURE__ */ Kg.map((m) => m.replace("rgb(", "rgba(").replace(")", ", 0.5)"));
function cw(m) {
  return Kg[m % Kg.length];
}
function hw(m) {
  return H1[m % H1.length];
}
function lA(m, a) {
  return m.borderColor = cw(a), m.backgroundColor = hw(a), ++a;
}
function cA(m, a) {
  return m.backgroundColor = m.data.map(() => cw(a++)), a;
}
function hA(m, a) {
  return m.backgroundColor = m.data.map(() => hw(a++)), a;
}
function uA(m) {
  let a = 0;
  return (d, g) => {
    const w = m.getDatasetMeta(g).controller;
    w instanceof Dh ? a = cA(d, a) : w instanceof Df ? a = hA(d, a) : w && (a = lA(d, a));
  };
}
function q1(m) {
  let a;
  for (a in m)
    if (m[a].borderColor || m[a].backgroundColor)
      return !0;
  return !1;
}
function dA(m) {
  return m && (m.borderColor || m.backgroundColor);
}
function fA() {
  return ys.borderColor !== "rgba(0,0,0,0.1)" || ys.backgroundColor !== "rgba(0,0,0,0.1)";
}
var pA = {
  id: "colors",
  defaults: {
    enabled: !0,
    forceOverride: !1
  },
  beforeLayout(m, a, d) {
    if (!d.enabled)
      return;
    const { data: { datasets: g }, options: w } = m.config, { elements: b } = w, E = q1(g) || dA(w) || b && q1(b) || fA();
    if (!d.forceOverride && E)
      return;
    const i = uA(m);
    g.forEach(i);
  }
};
function mA(m, a, d, g, w) {
  const b = w.samples || g;
  if (b >= d)
    return m.slice(a, a + d);
  const E = [], i = (d - 2) / (b - 2);
  let O = 0;
  const j = a + d - 1;
  let Y = a, J, ae, ce, Te, be;
  for (E[O++] = m[Y], J = 0; J < b - 2; J++) {
    let Ze = 0, je = 0, ot;
    const vt = Math.floor((J + 1) * i) + 1 + a, ht = Math.min(Math.floor((J + 2) * i) + 1, d) + a, gt = ht - vt;
    for (ot = vt; ot < ht; ot++)
      Ze += m[ot].x, je += m[ot].y;
    Ze /= gt, je /= gt;
    const Vt = Math.floor(J * i) + 1 + a, pt = Math.min(Math.floor((J + 1) * i) + 1, d) + a, { x: Gt, y: ui } = m[Y];
    for (ce = Te = -1, ot = Vt; ot < pt; ot++)
      Te = 0.5 * Math.abs((Gt - Ze) * (m[ot].y - ui) - (Gt - m[ot].x) * (je - ui)), Te > ce && (ce = Te, ae = m[ot], be = ot);
    E[O++] = ae, Y = be;
  }
  return E[O++] = m[j], E;
}
function _A(m, a, d, g) {
  let w = 0, b = 0, E, i, O, j, Y, J, ae, ce, Te, be;
  const Ze = [], je = a + d - 1, ot = m[a].x, ht = m[je].x - ot;
  for (E = a; E < a + d; ++E) {
    i = m[E], O = (i.x - ot) / ht * g, j = i.y;
    const gt = O | 0;
    if (gt === Y)
      j < Te ? (Te = j, J = E) : j > be && (be = j, ae = E), w = (b * w + i.x) / ++b;
    else {
      const Vt = E - 1;
      if (!En(J) && !En(ae)) {
        const pt = Math.min(J, ae), Gt = Math.max(J, ae);
        pt !== ce && pt !== Vt && Ze.push({
          ...m[pt],
          x: w
        }), Gt !== ce && Gt !== Vt && Ze.push({
          ...m[Gt],
          x: w
        });
      }
      E > 0 && Vt !== ce && Ze.push(m[Vt]), Ze.push(i), Y = gt, b = 0, Te = be = j, J = ae = ce = E;
    }
  }
  return Ze;
}
function uw(m) {
  if (m._decimated) {
    const a = m._data;
    delete m._decimated, delete m._data, Object.defineProperty(m, "data", {
      configurable: !0,
      enumerable: !0,
      writable: !0,
      value: a
    });
  }
}
function W1(m) {
  m.data.datasets.forEach((a) => {
    uw(a);
  });
}
function gA(m, a) {
  const d = a.length;
  let g = 0, w;
  const { iScale: b } = m, { min: E, max: i, minDefined: O, maxDefined: j } = b.getUserBounds();
  return O && (g = gr(Vl(a, b.axis, E).lo, 0, d - 1)), j ? w = gr(Vl(a, b.axis, i).hi + 1, g, d) - g : w = d - g, {
    start: g,
    count: w
  };
}
var yA = {
  id: "decimation",
  defaults: {
    algorithm: "min-max",
    enabled: !1
  },
  beforeElementsUpdate: (m, a, d) => {
    if (!d.enabled) {
      W1(m);
      return;
    }
    const g = m.width;
    m.data.datasets.forEach((w, b) => {
      const { _data: E, indexAxis: i } = w, O = m.getDatasetMeta(b), j = E || w.data;
      if (Tf([
        i,
        m.options.indexAxis
      ]) === "y" || !O.controller.supportsDecimation)
        return;
      const Y = m.scales[O.xAxisID];
      if (Y.type !== "linear" && Y.type !== "time" || m.options.parsing)
        return;
      let { start: J, count: ae } = gA(O, j);
      const ce = d.threshold || 4 * g;
      if (ae <= ce) {
        uw(w);
        return;
      }
      En(E) && (w._data = j, delete w.data, Object.defineProperty(w, "data", {
        configurable: !0,
        enumerable: !0,
        get: function() {
          return this._decimated;
        },
        set: function(be) {
          this._data = be;
        }
      }));
      let Te;
      switch (d.algorithm) {
        case "lttb":
          Te = mA(j, J, ae, g, d);
          break;
        case "min-max":
          Te = _A(j, J, ae, g);
          break;
        default:
          throw new Error(`Unsupported decimation algorithm '${d.algorithm}'`);
      }
      w._decimated = Te;
    });
  },
  destroy(m) {
    W1(m);
  }
};
function xA(m, a, d) {
  const g = m.segments, w = m.points, b = a.points, E = [];
  for (const i of g) {
    let { start: O, end: j } = i;
    j = wy(O, j, w);
    const Y = Jg(d, w[O], w[j], i.loop);
    if (!a.segments) {
      E.push({
        source: i,
        target: Y,
        start: w[O],
        end: w[j]
      });
      continue;
    }
    const J = Wb(a, Y);
    for (const ae of J) {
      const ce = Jg(d, b[ae.start], b[ae.end], ae.loop), Te = qb(i, w, ce);
      for (const be of Te)
        E.push({
          source: be,
          target: ae,
          start: {
            [d]: $1(Y, ce, "start", Math.max)
          },
          end: {
            [d]: $1(Y, ce, "end", Math.min)
          }
        });
    }
  }
  return E;
}
function Jg(m, a, d, g) {
  if (g)
    return;
  let w = a[m], b = d[m];
  return m === "angle" && (w = No(w), b = No(b)), {
    property: m,
    start: w,
    end: b
  };
}
function vA(m, a) {
  const { x: d = null, y: g = null } = m || {}, w = a.points, b = [];
  return a.segments.forEach(({ start: E, end: i }) => {
    i = wy(E, i, w);
    const O = w[E], j = w[i];
    g !== null ? (b.push({
      x: O.x,
      y: g
    }), b.push({
      x: j.x,
      y: g
    })) : d !== null && (b.push({
      x: d,
      y: O.y
    }), b.push({
      x: d,
      y: j.y
    }));
  }), b;
}
function wy(m, a, d) {
  for (; a > m; a--) {
    const g = d[a];
    if (!isNaN(g.x) && !isNaN(g.y))
      break;
  }
  return a;
}
function $1(m, a, d, g) {
  return m && a ? g(m[d], a[d]) : m ? m[d] : a ? a[d] : 0;
}
function dw(m, a) {
  let d = [], g = !1;
  return hs(m) ? (g = !0, d = m) : d = vA(m, a), d.length ? new zc({
    points: d,
    options: {
      tension: 0
    },
    _loop: g,
    _fullLoop: g
  }) : null;
}
function X1(m) {
  return m && m.fill !== !1;
}
function bA(m, a, d) {
  let w = m[a].fill;
  const b = [
    a
  ];
  let E;
  if (!d)
    return w;
  for (; w !== !1 && b.indexOf(w) === -1; ) {
    if (!As(w))
      return w;
    if (E = m[w], !E)
      return !1;
    if (E.visible)
      return w;
    b.push(w), w = E.fill;
  }
  return !1;
}
function wA(m, a, d) {
  const g = EA(m);
  if (yn(g))
    return isNaN(g.value) ? !1 : g;
  let w = parseFloat(g);
  return As(w) && Math.floor(w) === w ? TA(g[0], a, w, d) : [
    "origin",
    "start",
    "end",
    "stack",
    "shape"
  ].indexOf(g) >= 0 && g;
}
function TA(m, a, d, g) {
  return (m === "-" || m === "+") && (d = a + d), d === a || d < 0 || d >= g ? !1 : d;
}
function MA(m, a) {
  let d = null;
  return m === "start" ? d = a.bottom : m === "end" ? d = a.top : yn(m) ? d = a.getPixelForValue(m.value) : a.getBasePixel && (d = a.getBasePixel()), d;
}
function SA(m, a, d) {
  let g;
  return m === "start" ? g = d : m === "end" ? g = a.options.reverse ? a.min : a.max : yn(m) ? g = m.value : g = a.getBaseValue(), g;
}
function EA(m) {
  const a = m.options, d = a.fill;
  let g = en(d && d.target, d);
  return g === void 0 && (g = !!a.backgroundColor), g === !1 || g === null ? !1 : g === !0 ? "origin" : g;
}
function PA(m) {
  const { scale: a, index: d, line: g } = m, w = [], b = g.segments, E = g.points, i = AA(a, d);
  i.push(dw({
    x: null,
    y: a.bottom
  }, g));
  for (let O = 0; O < b.length; O++) {
    const j = b[O];
    for (let Y = j.start; Y <= j.end; Y++)
      CA(w, E[Y], i);
  }
  return new zc({
    points: w,
    options: {}
  });
}
function AA(m, a) {
  const d = [], g = m.getMatchingVisibleMetas("line");
  for (let w = 0; w < g.length; w++) {
    const b = g[w];
    if (b.index === a)
      break;
    b.hidden || d.unshift(b.dataset);
  }
  return d;
}
function CA(m, a, d) {
  const g = [];
  for (let w = 0; w < d.length; w++) {
    const b = d[w], { first: E, last: i, point: O } = IA(b, a, "x");
    if (!(!O || E && i)) {
      if (E)
        g.unshift(O);
      else if (m.push(O), !i)
        break;
    }
  }
  m.push(...g);
}
function IA(m, a, d) {
  const g = m.interpolate(a, d);
  if (!g)
    return {};
  const w = g[d], b = m.segments, E = m.points;
  let i = !1, O = !1;
  for (let j = 0; j < b.length; j++) {
    const Y = b[j], J = E[Y.start][d], ae = E[Y.end][d];
    if (Nl(w, J, ae)) {
      i = w === J, O = w === ae;
      break;
    }
  }
  return {
    first: i,
    last: O,
    point: g
  };
}
class fw {
  constructor(a) {
    this.x = a.x, this.y = a.y, this.radius = a.radius;
  }
  pathSegment(a, d, g) {
    const { x: w, y: b, radius: E } = this;
    return d = d || {
      start: 0,
      end: us
    }, a.arc(w, b, E, d.end, d.start, !0), !g.bounds;
  }
  interpolate(a) {
    const { x: d, y: g, radius: w } = this, b = a.angle;
    return {
      x: d + Math.cos(b) * w,
      y: g + Math.sin(b) * w,
      angle: b
    };
  }
}
function LA(m) {
  const { chart: a, fill: d, line: g } = m;
  if (As(d))
    return zA(a, d);
  if (d === "stack")
    return PA(m);
  if (d === "shape")
    return !0;
  const w = DA(m);
  return w instanceof fw ? w : dw(w, g);
}
function zA(m, a) {
  const d = m.getDatasetMeta(a);
  return d && m.isDatasetVisible(a) ? d.dataset : null;
}
function DA(m) {
  return (m.scale || {}).getPointPositionForValue ? RA(m) : kA(m);
}
function kA(m) {
  const { scale: a = {}, fill: d } = m, g = MA(d, a);
  if (As(g)) {
    const w = a.isHorizontal();
    return {
      x: w ? g : null,
      y: w ? null : g
    };
  }
  return null;
}
function RA(m) {
  const { scale: a, fill: d } = m, g = a.options, w = a.getLabels().length, b = g.reverse ? a.max : a.min, E = SA(d, a, b), i = [];
  if (g.grid.circular) {
    const O = a.getPointPositionForValue(0, b);
    return new fw({
      x: O.x,
      y: O.y,
      radius: a.getDistanceFromCenterForValue(E)
    });
  }
  for (let O = 0; O < w; ++O)
    i.push(a.getPointPositionForValue(O, E));
  return i;
}
function jg(m, a, d) {
  const g = LA(a), { line: w, scale: b, axis: E } = a, i = w.options, O = i.fill, j = i.backgroundColor, { above: Y = j, below: J = j } = O || {};
  g && w.points.length && (Wm(m, d), OA(m, {
    line: w,
    target: g,
    above: Y,
    below: J,
    area: d,
    scale: b,
    axis: E
  }), $m(m));
}
function OA(m, a) {
  const { line: d, target: g, above: w, below: b, area: E, scale: i } = a, O = d._loop ? "angle" : a.axis;
  m.save(), O === "x" && b !== w && (Y1(m, g, E.top), K1(m, {
    line: d,
    target: g,
    color: w,
    scale: i,
    property: O
  }), m.restore(), m.save(), Y1(m, g, E.bottom)), K1(m, {
    line: d,
    target: g,
    color: b,
    scale: i,
    property: O
  }), m.restore();
}
function Y1(m, a, d) {
  const { segments: g, points: w } = a;
  let b = !0, E = !1;
  m.beginPath();
  for (const i of g) {
    const { start: O, end: j } = i, Y = w[O], J = w[wy(O, j, w)];
    b ? (m.moveTo(Y.x, Y.y), b = !1) : (m.lineTo(Y.x, d), m.lineTo(Y.x, Y.y)), E = !!a.pathSegment(m, i, {
      move: E
    }), E ? m.closePath() : m.lineTo(J.x, d);
  }
  m.lineTo(a.first().x, d), m.closePath(), m.clip();
}
function K1(m, a) {
  const { line: d, target: g, property: w, color: b, scale: E } = a, i = xA(d, g, w);
  for (const { source: O, target: j, start: Y, end: J } of i) {
    const { style: { backgroundColor: ae = b } = {} } = O, ce = g !== !0;
    m.save(), m.fillStyle = ae, FA(m, E, ce && Jg(w, Y, J)), m.beginPath();
    const Te = !!d.pathSegment(m, O);
    let be;
    if (ce) {
      Te ? m.closePath() : J1(m, g, J, w);
      const Ze = !!g.pathSegment(m, j, {
        move: Te,
        reverse: !0
      });
      be = Te && Ze, be || J1(m, g, Y, w);
    }
    m.closePath(), m.fill(be ? "evenodd" : "nonzero"), m.restore();
  }
}
function FA(m, a, d) {
  const { top: g, bottom: w } = a.chart.chartArea, { property: b, start: E, end: i } = d || {};
  b === "x" && (m.beginPath(), m.rect(E, g, i - E, w - g), m.clip());
}
function J1(m, a, d, g) {
  const w = a.interpolate(d, g);
  w && m.lineTo(w.x, w.y);
}
var BA = {
  id: "filler",
  afterDatasetsUpdate(m, a, d) {
    const g = (m.data.datasets || []).length, w = [];
    let b, E, i, O;
    for (E = 0; E < g; ++E)
      b = m.getDatasetMeta(E), i = b.dataset, O = null, i && i.options && i instanceof zc && (O = {
        visible: m.isDatasetVisible(E),
        index: E,
        fill: wA(i, E, g),
        chart: m,
        axis: b.controller.options.indexAxis,
        scale: b.vScale,
        line: i
      }), b.$filler = O, w.push(O);
    for (E = 0; E < g; ++E)
      O = w[E], !(!O || O.fill === !1) && (O.fill = bA(w, E, d.propagate));
  },
  beforeDraw(m, a, d) {
    const g = d.drawTime === "beforeDraw", w = m.getSortedVisibleDatasetMetas(), b = m.chartArea;
    for (let E = w.length - 1; E >= 0; --E) {
      const i = w[E].$filler;
      i && (i.line.updateControlPoints(b, i.axis), g && i.fill && jg(m.ctx, i, b));
    }
  },
  beforeDatasetsDraw(m, a, d) {
    if (d.drawTime !== "beforeDatasetsDraw")
      return;
    const g = m.getSortedVisibleDatasetMetas();
    for (let w = g.length - 1; w >= 0; --w) {
      const b = g[w].$filler;
      X1(b) && jg(m.ctx, b, m.chartArea);
    }
  },
  beforeDatasetDraw(m, a, d) {
    const g = a.meta.$filler;
    !X1(g) || d.drawTime !== "beforeDatasetDraw" || jg(m.ctx, g, m.chartArea);
  },
  defaults: {
    propagate: !0,
    drawTime: "beforeDatasetDraw"
  }
};
const Q1 = (m, a) => {
  let { boxHeight: d = a, boxWidth: g = a } = m;
  return m.usePointStyle && (d = Math.min(d, a), g = m.pointStyleWidth || Math.min(g, a)), {
    boxWidth: g,
    boxHeight: d,
    itemHeight: Math.max(a, d)
  };
}, NA = (m, a) => m !== null && a !== null && m.datasetIndex === a.datasetIndex && m.index === a.index;
class eb extends jl {
  constructor(a) {
    super(), this._added = !1, this.legendHitBoxes = [], this._hoveredItem = null, this.doughnutMode = !1, this.chart = a.chart, this.options = a.options, this.ctx = a.ctx, this.legendItems = void 0, this.columnSizes = void 0, this.lineWidths = void 0, this.maxHeight = void 0, this.maxWidth = void 0, this.top = void 0, this.bottom = void 0, this.left = void 0, this.right = void 0, this.height = void 0, this.width = void 0, this._margins = void 0, this.position = void 0, this.weight = void 0, this.fullSize = void 0;
  }
  update(a, d, g) {
    this.maxWidth = a, this.maxHeight = d, this._margins = g, this.setDimensions(), this.buildLabels(), this.fit();
  }
  setDimensions() {
    this.isHorizontal() ? (this.width = this.maxWidth, this.left = this._margins.left, this.right = this.width) : (this.height = this.maxHeight, this.top = this._margins.top, this.bottom = this.height);
  }
  buildLabels() {
    const a = this.options.labels || {};
    let d = is(a.generateLabels, [
      this.chart
    ], this) || [];
    a.filter && (d = d.filter((g) => a.filter(g, this.chart.data))), a.sort && (d = d.sort((g, w) => a.sort(g, w, this.chart.data))), this.options.reverse && d.reverse(), this.legendItems = d;
  }
  fit() {
    const { options: a, ctx: d } = this;
    if (!a.display) {
      this.width = this.height = 0;
      return;
    }
    const g = a.labels, w = ir(g.font), b = w.size, E = this._computeTitleHeight(), { boxWidth: i, itemHeight: O } = Q1(g, b);
    let j, Y;
    d.font = w.string, this.isHorizontal() ? (j = this.maxWidth, Y = this._fitRows(E, b, i, O) + 10) : (Y = this.maxHeight, j = this._fitCols(E, w, i, O) + 10), this.width = Math.min(j, a.maxWidth || this.maxWidth), this.height = Math.min(Y, a.maxHeight || this.maxHeight);
  }
  _fitRows(a, d, g, w) {
    const { ctx: b, maxWidth: E, options: { labels: { padding: i } } } = this, O = this.legendHitBoxes = [], j = this.lineWidths = [
      0
    ], Y = w + i;
    let J = a;
    b.textAlign = "left", b.textBaseline = "middle";
    let ae = -1, ce = -Y;
    return this.legendItems.forEach((Te, be) => {
      const Ze = g + d / 2 + b.measureText(Te.text).width;
      (be === 0 || j[j.length - 1] + Ze + 2 * i > E) && (J += Y, j[j.length - (be > 0 ? 0 : 1)] = 0, ce += Y, ae++), O[be] = {
        left: 0,
        top: ce,
        row: ae,
        width: Ze,
        height: w
      }, j[j.length - 1] += Ze + i;
    }), J;
  }
  _fitCols(a, d, g, w) {
    const { ctx: b, maxHeight: E, options: { labels: { padding: i } } } = this, O = this.legendHitBoxes = [], j = this.columnSizes = [], Y = E - a;
    let J = i, ae = 0, ce = 0, Te = 0, be = 0;
    return this.legendItems.forEach((Ze, je) => {
      const { itemWidth: ot, itemHeight: vt } = VA(g, d, b, Ze, w);
      je > 0 && ce + vt + 2 * i > Y && (J += ae + i, j.push({
        width: ae,
        height: ce
      }), Te += ae + i, be++, ae = ce = 0), O[je] = {
        left: Te,
        top: ce,
        col: be,
        width: ot,
        height: vt
      }, ae = Math.max(ae, ot), ce += vt + i;
    }), J += ae, j.push({
      width: ae,
      height: ce
    }), J;
  }
  adjustHitBoxes() {
    if (!this.options.display)
      return;
    const a = this._computeTitleHeight(), { legendHitBoxes: d, options: { align: g, labels: { padding: w }, rtl: b } } = this, E = $u(b, this.left, this.width);
    if (this.isHorizontal()) {
      let i = 0, O = Ur(g, this.left + w, this.right - this.lineWidths[i]);
      for (const j of d)
        i !== j.row && (i = j.row, O = Ur(g, this.left + w, this.right - this.lineWidths[i])), j.top += this.top + a + w, j.left = E.leftForLtr(E.x(O), j.width), O += j.width + w;
    } else {
      let i = 0, O = Ur(g, this.top + a + w, this.bottom - this.columnSizes[i].height);
      for (const j of d)
        j.col !== i && (i = j.col, O = Ur(g, this.top + a + w, this.bottom - this.columnSizes[i].height)), j.top = O, j.left += this.left + w, j.left = E.leftForLtr(E.x(j.left), j.width), O += j.height + w;
    }
  }
  isHorizontal() {
    return this.options.position === "top" || this.options.position === "bottom";
  }
  draw() {
    if (this.options.display) {
      const a = this.ctx;
      Wm(a, this), this._draw(), $m(a);
    }
  }
  _draw() {
    const { options: a, columnSizes: d, lineWidths: g, ctx: w } = this, { align: b, labels: E } = a, i = ys.color, O = $u(a.rtl, this.left, this.width), j = ir(E.font), { padding: Y } = E, J = j.size, ae = J / 2;
    let ce;
    this.drawTitle(), w.textAlign = O.textAlign("left"), w.textBaseline = "middle", w.lineWidth = 0.5, w.font = j.string;
    const { boxWidth: Te, boxHeight: be, itemHeight: Ze } = Q1(E, J), je = function(Vt, pt, Gt) {
      if (isNaN(Te) || Te <= 0 || isNaN(be) || be < 0)
        return;
      w.save();
      const ui = en(Gt.lineWidth, 1);
      if (w.fillStyle = en(Gt.fillStyle, i), w.lineCap = en(Gt.lineCap, "butt"), w.lineDashOffset = en(Gt.lineDashOffset, 0), w.lineJoin = en(Gt.lineJoin, "miter"), w.lineWidth = ui, w.strokeStyle = en(Gt.strokeStyle, i), w.setLineDash(en(Gt.lineDash, [])), E.usePointStyle) {
        const kt = {
          radius: be * Math.SQRT2 / 2,
          pointStyle: Gt.pointStyle,
          rotation: Gt.rotation,
          borderWidth: ui
        }, Pt = O.xPlus(Vt, Te / 2), Mi = pt + ae;
        Rb(w, kt, Pt, Mi, E.pointStyleWidth && Te);
      } else {
        const kt = pt + Math.max((J - be) / 2, 0), Pt = O.leftForLtr(Vt, Te), Mi = kh(Gt.borderRadius);
        w.beginPath(), Object.values(Mi).some((Pn) => Pn !== 0) ? Bf(w, {
          x: Pt,
          y: kt,
          w: Te,
          h: be,
          radius: Mi
        }) : w.rect(Pt, kt, Te, be), w.fill(), ui !== 0 && w.stroke();
      }
      w.restore();
    }, ot = function(Vt, pt, Gt) {
      Fh(w, Gt.text, Vt, pt + Ze / 2, j, {
        strikethrough: Gt.hidden,
        textAlign: O.textAlign(Gt.textAlign)
      });
    }, vt = this.isHorizontal(), ht = this._computeTitleHeight();
    vt ? ce = {
      x: Ur(b, this.left + Y, this.right - g[0]),
      y: this.top + Y + ht,
      line: 0
    } : ce = {
      x: this.left + Y,
      y: Ur(b, this.top + ht + Y, this.bottom - d[0].height),
      line: 0
    }, Gb(this.ctx, a.textDirection);
    const gt = Ze + Y;
    this.legendItems.forEach((Vt, pt) => {
      w.strokeStyle = Vt.fontColor, w.fillStyle = Vt.fontColor;
      const Gt = w.measureText(Vt.text).width, ui = O.textAlign(Vt.textAlign || (Vt.textAlign = E.textAlign)), kt = Te + ae + Gt;
      let Pt = ce.x, Mi = ce.y;
      O.setWidth(this.width), vt ? pt > 0 && Pt + kt + Y > this.right && (Mi = ce.y += gt, ce.line++, Pt = ce.x = Ur(b, this.left + Y, this.right - g[ce.line])) : pt > 0 && Mi + gt > this.bottom && (Pt = ce.x = Pt + d[ce.line].width + Y, ce.line++, Mi = ce.y = Ur(b, this.top + ht + Y, this.bottom - d[ce.line].height));
      const Pn = O.x(Pt);
      if (je(Pn, Mi, Vt), Pt = oS(ui, Pt + Te + ae, vt ? Pt + kt : this.right, a.rtl), ot(O.x(Pt), Mi, Vt), vt)
        ce.x += kt + Y;
      else if (typeof Vt.text != "string") {
        const hn = j.lineHeight;
        ce.y += pw(Vt, hn) + Y;
      } else
        ce.y += gt;
    }), Zb(this.ctx, a.textDirection);
  }
  drawTitle() {
    const a = this.options, d = a.title, g = ir(d.font), w = Gr(d.padding);
    if (!d.display)
      return;
    const b = $u(a.rtl, this.left, this.width), E = this.ctx, i = d.position, O = g.size / 2, j = w.top + O;
    let Y, J = this.left, ae = this.width;
    if (this.isHorizontal())
      ae = Math.max(...this.lineWidths), Y = this.top + j, J = Ur(a.align, J, this.right - ae);
    else {
      const Te = this.columnSizes.reduce((be, Ze) => Math.max(be, Ze.height), 0);
      Y = j + Ur(a.align, this.top, this.bottom - Te - a.labels.padding - this._computeTitleHeight());
    }
    const ce = Ur(i, J, J + ae);
    E.textAlign = b.textAlign(fy(i)), E.textBaseline = "middle", E.strokeStyle = d.color, E.fillStyle = d.color, E.font = g.string, Fh(E, d.text, ce, Y, g);
  }
  _computeTitleHeight() {
    const a = this.options.title, d = ir(a.font), g = Gr(a.padding);
    return a.display ? d.lineHeight + g.height : 0;
  }
  _getLegendItemAt(a, d) {
    let g, w, b;
    if (Nl(a, this.left, this.right) && Nl(d, this.top, this.bottom)) {
      for (b = this.legendHitBoxes, g = 0; g < b.length; ++g)
        if (w = b[g], Nl(a, w.left, w.left + w.width) && Nl(d, w.top, w.top + w.height))
          return this.legendItems[g];
    }
    return null;
  }
  handleEvent(a) {
    const d = this.options;
    if (!GA(a.type, d))
      return;
    const g = this._getLegendItemAt(a.x, a.y);
    if (a.type === "mousemove" || a.type === "mouseout") {
      const w = this._hoveredItem, b = NA(w, g);
      w && !b && is(d.onLeave, [
        a,
        w,
        this
      ], this), this._hoveredItem = g, g && !b && is(d.onHover, [
        a,
        g,
        this
      ], this);
    } else
      g && is(d.onClick, [
        a,
        g,
        this
      ], this);
  }
}
function VA(m, a, d, g, w) {
  const b = UA(g, m, a, d), E = jA(w, g, a.lineHeight);
  return {
    itemWidth: b,
    itemHeight: E
  };
}
function UA(m, a, d, g) {
  let w = m.text;
  return w && typeof w != "string" && (w = w.reduce((b, E) => b.length > E.length ? b : E)), a + d.size / 2 + g.measureText(w).width;
}
function jA(m, a, d) {
  let g = m;
  return typeof a.text != "string" && (g = pw(a, d)), g;
}
function pw(m, a) {
  const d = m.text ? m.text.length : 0;
  return a * d;
}
function GA(m, a) {
  return !!((m === "mousemove" || m === "mouseout") && (a.onHover || a.onLeave) || a.onClick && (m === "click" || m === "mouseup"));
}
var ZA = {
  id: "legend",
  _element: eb,
  start(m, a, d) {
    const g = m.legend = new eb({
      ctx: m.ctx,
      options: d,
      chart: m
    });
    jr.configure(m, g, d), jr.addBox(m, g);
  },
  stop(m) {
    jr.removeBox(m, m.legend), delete m.legend;
  },
  beforeUpdate(m, a, d) {
    const g = m.legend;
    jr.configure(m, g, d), g.options = d;
  },
  afterUpdate(m) {
    const a = m.legend;
    a.buildLabels(), a.adjustHitBoxes();
  },
  afterEvent(m, a) {
    a.replay || m.legend.handleEvent(a.event);
  },
  defaults: {
    display: !0,
    position: "top",
    align: "center",
    fullSize: !0,
    reverse: !1,
    weight: 1e3,
    onClick(m, a, d) {
      const g = a.datasetIndex, w = d.chart;
      w.isDatasetVisible(g) ? (w.hide(g), a.hidden = !0) : (w.show(g), a.hidden = !1);
    },
    onHover: null,
    onLeave: null,
    labels: {
      color: (m) => m.chart.options.color,
      boxWidth: 40,
      padding: 10,
      generateLabels(m) {
        const a = m.data.datasets, { labels: { usePointStyle: d, pointStyle: g, textAlign: w, color: b, useBorderRadius: E, borderRadius: i } } = m.legend.options;
        return m._getSortedDatasetMetas().map((O) => {
          const j = O.controller.getStyle(d ? 0 : void 0), Y = Gr(j.borderWidth);
          return {
            text: a[O.index].label,
            fillStyle: j.backgroundColor,
            fontColor: b,
            hidden: !O.visible,
            lineCap: j.borderCapStyle,
            lineDash: j.borderDash,
            lineDashOffset: j.borderDashOffset,
            lineJoin: j.borderJoinStyle,
            lineWidth: (Y.width + Y.height) / 4,
            strokeStyle: j.borderColor,
            pointStyle: g || j.pointStyle,
            rotation: j.rotation,
            textAlign: w || j.textAlign,
            borderRadius: E && (i || j.borderRadius),
            datasetIndex: O.index
          };
        }, this);
      }
    },
    title: {
      color: (m) => m.chart.options.color,
      display: !1,
      position: "center",
      text: ""
    }
  },
  descriptors: {
    _scriptable: (m) => !m.startsWith("on"),
    labels: {
      _scriptable: (m) => ![
        "generateLabels",
        "filter",
        "sort"
      ].includes(m)
    }
  }
};
class Ty extends jl {
  constructor(a) {
    super(), this.chart = a.chart, this.options = a.options, this.ctx = a.ctx, this._padding = void 0, this.top = void 0, this.bottom = void 0, this.left = void 0, this.right = void 0, this.width = void 0, this.height = void 0, this.position = void 0, this.weight = void 0, this.fullSize = void 0;
  }
  update(a, d) {
    const g = this.options;
    if (this.left = 0, this.top = 0, !g.display) {
      this.width = this.height = this.right = this.bottom = 0;
      return;
    }
    this.width = this.right = a, this.height = this.bottom = d;
    const w = hs(g.text) ? g.text.length : 1;
    this._padding = Gr(g.padding);
    const b = w * ir(g.font).lineHeight + this._padding.height;
    this.isHorizontal() ? this.height = b : this.width = b;
  }
  isHorizontal() {
    const a = this.options.position;
    return a === "top" || a === "bottom";
  }
  _drawArgs(a) {
    const { top: d, left: g, bottom: w, right: b, options: E } = this, i = E.align;
    let O = 0, j, Y, J;
    return this.isHorizontal() ? (Y = Ur(i, g, b), J = d + a, j = b - g) : (E.position === "left" ? (Y = g + a, J = Ur(i, w, d), O = ds * -0.5) : (Y = b - a, J = Ur(i, d, w), O = ds * 0.5), j = w - d), {
      titleX: Y,
      titleY: J,
      maxWidth: j,
      rotation: O
    };
  }
  draw() {
    const a = this.ctx, d = this.options;
    if (!d.display)
      return;
    const g = ir(d.font), b = g.lineHeight / 2 + this._padding.top, { titleX: E, titleY: i, maxWidth: O, rotation: j } = this._drawArgs(b);
    Fh(a, d.text, 0, 0, g, {
      color: d.color,
      maxWidth: O,
      rotation: j,
      textAlign: fy(d.align),
      textBaseline: "middle",
      translation: [
        E,
        i
      ]
    });
  }
}
function HA(m, a) {
  const d = new Ty({
    ctx: m.ctx,
    options: a,
    chart: m
  });
  jr.configure(m, d, a), jr.addBox(m, d), m.titleBlock = d;
}
var qA = {
  id: "title",
  _element: Ty,
  start(m, a, d) {
    HA(m, d);
  },
  stop(m) {
    const a = m.titleBlock;
    jr.removeBox(m, a), delete m.titleBlock;
  },
  beforeUpdate(m, a, d) {
    const g = m.titleBlock;
    jr.configure(m, g, d), g.options = d;
  },
  defaults: {
    align: "center",
    display: !1,
    font: {
      weight: "bold"
    },
    fullSize: !0,
    padding: 10,
    position: "top",
    text: "",
    weight: 2e3
  },
  defaultRoutes: {
    color: "color"
  },
  descriptors: {
    _scriptable: !0,
    _indexable: !1
  }
};
const wm = /* @__PURE__ */ new WeakMap();
var WA = {
  id: "subtitle",
  start(m, a, d) {
    const g = new Ty({
      ctx: m.ctx,
      options: d,
      chart: m
    });
    jr.configure(m, g, d), jr.addBox(m, g), wm.set(m, g);
  },
  stop(m) {
    jr.removeBox(m, wm.get(m)), wm.delete(m);
  },
  beforeUpdate(m, a, d) {
    const g = wm.get(m);
    jr.configure(m, g, d), g.options = d;
  },
  defaults: {
    align: "center",
    display: !1,
    font: {
      weight: "normal"
    },
    fullSize: !0,
    padding: 0,
    position: "top",
    text: "",
    weight: 1500
  },
  defaultRoutes: {
    color: "color"
  },
  descriptors: {
    _scriptable: !0,
    _indexable: !1
  }
};
const Ef = {
  average(m) {
    if (!m.length)
      return !1;
    let a, d, g = /* @__PURE__ */ new Set(), w = 0, b = 0;
    for (a = 0, d = m.length; a < d; ++a) {
      const i = m[a].element;
      if (i && i.hasValue()) {
        const O = i.tooltipPosition();
        g.add(O.x), w += O.y, ++b;
      }
    }
    return b === 0 || g.size === 0 ? !1 : {
      x: [
        ...g
      ].reduce((i, O) => i + O) / g.size,
      y: w / b
    };
  },
  nearest(m, a) {
    if (!m.length)
      return !1;
    let d = a.x, g = a.y, w = Number.POSITIVE_INFINITY, b, E, i;
    for (b = 0, E = m.length; b < E; ++b) {
      const O = m[b].element;
      if (O && O.hasValue()) {
        const j = O.getCenterPoint(), Y = Zg(a, j);
        Y < w && (w = Y, i = O);
      }
    }
    if (i) {
      const O = i.tooltipPosition();
      d = O.x, g = O.y;
    }
    return {
      x: d,
      y: g
    };
  }
};
function ol(m, a) {
  return a && (hs(a) ? Array.prototype.push.apply(m, a) : m.push(a)), m;
}
function Ol(m) {
  return (typeof m == "string" || m instanceof String) && m.indexOf(`
`) > -1 ? m.split(`
`) : m;
}
function $A(m, a) {
  const { element: d, datasetIndex: g, index: w } = a, b = m.getDatasetMeta(g).controller, { label: E, value: i } = b.getLabelAndValue(w);
  return {
    chart: m,
    label: E,
    parsed: b.getParsed(w),
    raw: m.data.datasets[g].data[w],
    formattedValue: i,
    dataset: b.getDataset(),
    dataIndex: w,
    datasetIndex: g,
    element: d
  };
}
function tb(m, a) {
  const d = m.chart.ctx, { body: g, footer: w, title: b } = m, { boxWidth: E, boxHeight: i } = a, O = ir(a.bodyFont), j = ir(a.titleFont), Y = ir(a.footerFont), J = b.length, ae = w.length, ce = g.length, Te = Gr(a.padding);
  let be = Te.height, Ze = 0, je = g.reduce((ht, gt) => ht + gt.before.length + gt.lines.length + gt.after.length, 0);
  if (je += m.beforeBody.length + m.afterBody.length, J && (be += J * j.lineHeight + (J - 1) * a.titleSpacing + a.titleMarginBottom), je) {
    const ht = a.displayColors ? Math.max(i, O.lineHeight) : O.lineHeight;
    be += ce * ht + (je - ce) * O.lineHeight + (je - 1) * a.bodySpacing;
  }
  ae && (be += a.footerMarginTop + ae * Y.lineHeight + (ae - 1) * a.footerSpacing);
  let ot = 0;
  const vt = function(ht) {
    Ze = Math.max(Ze, d.measureText(ht).width + ot);
  };
  return d.save(), d.font = j.string, Zn(m.title, vt), d.font = O.string, Zn(m.beforeBody.concat(m.afterBody), vt), ot = a.displayColors ? E + 2 + a.boxPadding : 0, Zn(g, (ht) => {
    Zn(ht.before, vt), Zn(ht.lines, vt), Zn(ht.after, vt);
  }), ot = 0, d.font = Y.string, Zn(m.footer, vt), d.restore(), Ze += Te.width, {
    width: Ze,
    height: be
  };
}
function XA(m, a) {
  const { y: d, height: g } = a;
  return d < g / 2 ? "top" : d > m.height - g / 2 ? "bottom" : "center";
}
function YA(m, a, d, g) {
  const { x: w, width: b } = g, E = d.caretSize + d.caretPadding;
  if (m === "left" && w + b + E > a.width || m === "right" && w - b - E < 0)
    return !0;
}
function KA(m, a, d, g) {
  const { x: w, width: b } = d, { width: E, chartArea: { left: i, right: O } } = m;
  let j = "center";
  return g === "center" ? j = w <= (i + O) / 2 ? "left" : "right" : w <= b / 2 ? j = "left" : w >= E - b / 2 && (j = "right"), YA(j, m, a, d) && (j = "center"), j;
}
function ib(m, a, d) {
  const g = d.yAlign || a.yAlign || XA(m, d);
  return {
    xAlign: d.xAlign || a.xAlign || KA(m, a, d, g),
    yAlign: g
  };
}
function JA(m, a) {
  let { x: d, width: g } = m;
  return a === "right" ? d -= g : a === "center" && (d -= g / 2), d;
}
function QA(m, a, d) {
  let { y: g, height: w } = m;
  return a === "top" ? g += d : a === "bottom" ? g -= w + d : g -= w / 2, g;
}
function nb(m, a, d, g) {
  const { caretSize: w, caretPadding: b, cornerRadius: E } = m, { xAlign: i, yAlign: O } = d, j = w + b, { topLeft: Y, topRight: J, bottomLeft: ae, bottomRight: ce } = kh(E);
  let Te = JA(a, i);
  const be = QA(a, O, j);
  return O === "center" ? i === "left" ? Te += j : i === "right" && (Te -= j) : i === "left" ? Te -= Math.max(Y, ae) + w : i === "right" && (Te += Math.max(J, ce) + w), {
    x: gr(Te, 0, g.width - a.width),
    y: gr(be, 0, g.height - a.height)
  };
}
function Tm(m, a, d) {
  const g = Gr(d.padding);
  return a === "center" ? m.x + m.width / 2 : a === "right" ? m.x + m.width - g.right : m.x + g.left;
}
function sb(m) {
  return ol([], Ol(m));
}
function eC(m, a, d) {
  return Fc(m, {
    tooltip: a,
    tooltipItems: d,
    type: "tooltip"
  });
}
function rb(m, a) {
  const d = a && a.dataset && a.dataset.tooltip && a.dataset.tooltip.callbacks;
  return d ? m.override(d) : m;
}
const mw = {
  beforeTitle: kl,
  title(m) {
    if (m.length > 0) {
      const a = m[0], d = a.chart.data.labels, g = d ? d.length : 0;
      if (this && this.options && this.options.mode === "dataset")
        return a.dataset.label || "";
      if (a.label)
        return a.label;
      if (g > 0 && a.dataIndex < g)
        return d[a.dataIndex];
    }
    return "";
  },
  afterTitle: kl,
  beforeBody: kl,
  beforeLabel: kl,
  label(m) {
    if (this && this.options && this.options.mode === "dataset")
      return m.label + ": " + m.formattedValue || m.formattedValue;
    let a = m.dataset.label || "";
    a && (a += ": ");
    const d = m.formattedValue;
    return En(d) || (a += d), a;
  },
  labelColor(m) {
    const d = m.chart.getDatasetMeta(m.datasetIndex).controller.getStyle(m.dataIndex);
    return {
      borderColor: d.borderColor,
      backgroundColor: d.backgroundColor,
      borderWidth: d.borderWidth,
      borderDash: d.borderDash,
      borderDashOffset: d.borderDashOffset,
      borderRadius: 0
    };
  },
  labelTextColor() {
    return this.options.bodyColor;
  },
  labelPointStyle(m) {
    const d = m.chart.getDatasetMeta(m.datasetIndex).controller.getStyle(m.dataIndex);
    return {
      pointStyle: d.pointStyle,
      rotation: d.rotation
    };
  },
  afterLabel: kl,
  afterBody: kl,
  beforeFooter: kl,
  footer: kl,
  afterFooter: kl
};
function mo(m, a, d, g) {
  const w = m[a].call(d, g);
  return typeof w > "u" ? mw[a].call(d, g) : w;
}
class Qg extends jl {
  constructor(a) {
    super(), this.opacity = 0, this._active = [], this._eventPosition = void 0, this._size = void 0, this._cachedAnimations = void 0, this._tooltipItems = [], this.$animations = void 0, this.$context = void 0, this.chart = a.chart, this.options = a.options, this.dataPoints = void 0, this.title = void 0, this.beforeBody = void 0, this.body = void 0, this.afterBody = void 0, this.footer = void 0, this.xAlign = void 0, this.yAlign = void 0, this.x = void 0, this.y = void 0, this.height = void 0, this.width = void 0, this.caretX = void 0, this.caretY = void 0, this.labelColors = void 0, this.labelPointStyles = void 0, this.labelTextColors = void 0;
  }
  initialize(a) {
    this.options = a, this._cachedAnimations = void 0, this.$context = void 0;
  }
  _resolveAnimations() {
    const a = this._cachedAnimations;
    if (a)
      return a;
    const d = this.chart, g = this.options.setContext(this.getContext()), w = g.enabled && d.options.animation && g.animations, b = new $b(this.chart, w);
    return w._cacheable && (this._cachedAnimations = Object.freeze(b)), b;
  }
  getContext() {
    return this.$context || (this.$context = eC(this.chart.getContext(), this, this._tooltipItems));
  }
  getTitle(a, d) {
    const { callbacks: g } = d, w = mo(g, "beforeTitle", this, a), b = mo(g, "title", this, a), E = mo(g, "afterTitle", this, a);
    let i = [];
    return i = ol(i, Ol(w)), i = ol(i, Ol(b)), i = ol(i, Ol(E)), i;
  }
  getBeforeBody(a, d) {
    return sb(mo(d.callbacks, "beforeBody", this, a));
  }
  getBody(a, d) {
    const { callbacks: g } = d, w = [];
    return Zn(a, (b) => {
      const E = {
        before: [],
        lines: [],
        after: []
      }, i = rb(g, b);
      ol(E.before, Ol(mo(i, "beforeLabel", this, b))), ol(E.lines, mo(i, "label", this, b)), ol(E.after, Ol(mo(i, "afterLabel", this, b))), w.push(E);
    }), w;
  }
  getAfterBody(a, d) {
    return sb(mo(d.callbacks, "afterBody", this, a));
  }
  getFooter(a, d) {
    const { callbacks: g } = d, w = mo(g, "beforeFooter", this, a), b = mo(g, "footer", this, a), E = mo(g, "afterFooter", this, a);
    let i = [];
    return i = ol(i, Ol(w)), i = ol(i, Ol(b)), i = ol(i, Ol(E)), i;
  }
  _createItems(a) {
    const d = this._active, g = this.chart.data, w = [], b = [], E = [];
    let i = [], O, j;
    for (O = 0, j = d.length; O < j; ++O)
      i.push($A(this.chart, d[O]));
    return a.filter && (i = i.filter((Y, J, ae) => a.filter(Y, J, ae, g))), a.itemSort && (i = i.sort((Y, J) => a.itemSort(Y, J, g))), Zn(i, (Y) => {
      const J = rb(a.callbacks, Y);
      w.push(mo(J, "labelColor", this, Y)), b.push(mo(J, "labelPointStyle", this, Y)), E.push(mo(J, "labelTextColor", this, Y));
    }), this.labelColors = w, this.labelPointStyles = b, this.labelTextColors = E, this.dataPoints = i, i;
  }
  update(a, d) {
    const g = this.options.setContext(this.getContext()), w = this._active;
    let b, E = [];
    if (!w.length)
      this.opacity !== 0 && (b = {
        opacity: 0
      });
    else {
      const i = Ef[g.position].call(this, w, this._eventPosition);
      E = this._createItems(g), this.title = this.getTitle(E, g), this.beforeBody = this.getBeforeBody(E, g), this.body = this.getBody(E, g), this.afterBody = this.getAfterBody(E, g), this.footer = this.getFooter(E, g);
      const O = this._size = tb(this, g), j = Object.assign({}, i, O), Y = ib(this.chart, g, j), J = nb(g, j, Y, this.chart);
      this.xAlign = Y.xAlign, this.yAlign = Y.yAlign, b = {
        opacity: 1,
        x: J.x,
        y: J.y,
        width: O.width,
        height: O.height,
        caretX: i.x,
        caretY: i.y
      };
    }
    this._tooltipItems = E, this.$context = void 0, b && this._resolveAnimations().update(this, b), a && g.external && g.external.call(this, {
      chart: this.chart,
      tooltip: this,
      replay: d
    });
  }
  drawCaret(a, d, g, w) {
    const b = this.getCaretPosition(a, g, w);
    d.lineTo(b.x1, b.y1), d.lineTo(b.x2, b.y2), d.lineTo(b.x3, b.y3);
  }
  getCaretPosition(a, d, g) {
    const { xAlign: w, yAlign: b } = this, { caretSize: E, cornerRadius: i } = g, { topLeft: O, topRight: j, bottomLeft: Y, bottomRight: J } = kh(i), { x: ae, y: ce } = a, { width: Te, height: be } = d;
    let Ze, je, ot, vt, ht, gt;
    return b === "center" ? (ht = ce + be / 2, w === "left" ? (Ze = ae, je = Ze - E, vt = ht + E, gt = ht - E) : (Ze = ae + Te, je = Ze + E, vt = ht - E, gt = ht + E), ot = Ze) : (w === "left" ? je = ae + Math.max(O, Y) + E : w === "right" ? je = ae + Te - Math.max(j, J) - E : je = this.caretX, b === "top" ? (vt = ce, ht = vt - E, Ze = je - E, ot = je + E) : (vt = ce + be, ht = vt + E, Ze = je + E, ot = je - E), gt = vt), {
      x1: Ze,
      x2: je,
      x3: ot,
      y1: vt,
      y2: ht,
      y3: gt
    };
  }
  drawTitle(a, d, g) {
    const w = this.title, b = w.length;
    let E, i, O;
    if (b) {
      const j = $u(g.rtl, this.x, this.width);
      for (a.x = Tm(this, g.titleAlign, g), d.textAlign = j.textAlign(g.titleAlign), d.textBaseline = "middle", E = ir(g.titleFont), i = g.titleSpacing, d.fillStyle = g.titleColor, d.font = E.string, O = 0; O < b; ++O)
        d.fillText(w[O], j.x(a.x), a.y + E.lineHeight / 2), a.y += E.lineHeight + i, O + 1 === b && (a.y += g.titleMarginBottom - i);
    }
  }
  _drawColorBox(a, d, g, w, b) {
    const E = this.labelColors[g], i = this.labelPointStyles[g], { boxHeight: O, boxWidth: j } = b, Y = ir(b.bodyFont), J = Tm(this, "left", b), ae = w.x(J), ce = O < Y.lineHeight ? (Y.lineHeight - O) / 2 : 0, Te = d.y + ce;
    if (b.usePointStyle) {
      const be = {
        radius: Math.min(j, O) / 2,
        pointStyle: i.pointStyle,
        rotation: i.rotation,
        borderWidth: 1
      }, Ze = w.leftForLtr(ae, j) + j / 2, je = Te + O / 2;
      a.strokeStyle = b.multiKeyBackground, a.fillStyle = b.multiKeyBackground, qg(a, be, Ze, je), a.strokeStyle = E.borderColor, a.fillStyle = E.backgroundColor, qg(a, be, Ze, je);
    } else {
      a.lineWidth = yn(E.borderWidth) ? Math.max(...Object.values(E.borderWidth)) : E.borderWidth || 1, a.strokeStyle = E.borderColor, a.setLineDash(E.borderDash || []), a.lineDashOffset = E.borderDashOffset || 0;
      const be = w.leftForLtr(ae, j), Ze = w.leftForLtr(w.xPlus(ae, 1), j - 2), je = kh(E.borderRadius);
      Object.values(je).some((ot) => ot !== 0) ? (a.beginPath(), a.fillStyle = b.multiKeyBackground, Bf(a, {
        x: be,
        y: Te,
        w: j,
        h: O,
        radius: je
      }), a.fill(), a.stroke(), a.fillStyle = E.backgroundColor, a.beginPath(), Bf(a, {
        x: Ze,
        y: Te + 1,
        w: j - 2,
        h: O - 2,
        radius: je
      }), a.fill()) : (a.fillStyle = b.multiKeyBackground, a.fillRect(be, Te, j, O), a.strokeRect(be, Te, j, O), a.fillStyle = E.backgroundColor, a.fillRect(Ze, Te + 1, j - 2, O - 2));
    }
    a.fillStyle = this.labelTextColors[g];
  }
  drawBody(a, d, g) {
    const { body: w } = this, { bodySpacing: b, bodyAlign: E, displayColors: i, boxHeight: O, boxWidth: j, boxPadding: Y } = g, J = ir(g.bodyFont);
    let ae = J.lineHeight, ce = 0;
    const Te = $u(g.rtl, this.x, this.width), be = function(Gt) {
      d.fillText(Gt, Te.x(a.x + ce), a.y + ae / 2), a.y += ae + b;
    }, Ze = Te.textAlign(E);
    let je, ot, vt, ht, gt, Vt, pt;
    for (d.textAlign = E, d.textBaseline = "middle", d.font = J.string, a.x = Tm(this, Ze, g), d.fillStyle = g.bodyColor, Zn(this.beforeBody, be), ce = i && Ze !== "right" ? E === "center" ? j / 2 + Y : j + 2 + Y : 0, ht = 0, Vt = w.length; ht < Vt; ++ht) {
      for (je = w[ht], ot = this.labelTextColors[ht], d.fillStyle = ot, Zn(je.before, be), vt = je.lines, i && vt.length && (this._drawColorBox(d, a, ht, Te, g), ae = Math.max(J.lineHeight, O)), gt = 0, pt = vt.length; gt < pt; ++gt)
        be(vt[gt]), ae = J.lineHeight;
      Zn(je.after, be);
    }
    ce = 0, ae = J.lineHeight, Zn(this.afterBody, be), a.y -= b;
  }
  drawFooter(a, d, g) {
    const w = this.footer, b = w.length;
    let E, i;
    if (b) {
      const O = $u(g.rtl, this.x, this.width);
      for (a.x = Tm(this, g.footerAlign, g), a.y += g.footerMarginTop, d.textAlign = O.textAlign(g.footerAlign), d.textBaseline = "middle", E = ir(g.footerFont), d.fillStyle = g.footerColor, d.font = E.string, i = 0; i < b; ++i)
        d.fillText(w[i], O.x(a.x), a.y + E.lineHeight / 2), a.y += E.lineHeight + g.footerSpacing;
    }
  }
  drawBackground(a, d, g, w) {
    const { xAlign: b, yAlign: E } = this, { x: i, y: O } = a, { width: j, height: Y } = g, { topLeft: J, topRight: ae, bottomLeft: ce, bottomRight: Te } = kh(w.cornerRadius);
    d.fillStyle = w.backgroundColor, d.strokeStyle = w.borderColor, d.lineWidth = w.borderWidth, d.beginPath(), d.moveTo(i + J, O), E === "top" && this.drawCaret(a, d, g, w), d.lineTo(i + j - ae, O), d.quadraticCurveTo(i + j, O, i + j, O + ae), E === "center" && b === "right" && this.drawCaret(a, d, g, w), d.lineTo(i + j, O + Y - Te), d.quadraticCurveTo(i + j, O + Y, i + j - Te, O + Y), E === "bottom" && this.drawCaret(a, d, g, w), d.lineTo(i + ce, O + Y), d.quadraticCurveTo(i, O + Y, i, O + Y - ce), E === "center" && b === "left" && this.drawCaret(a, d, g, w), d.lineTo(i, O + J), d.quadraticCurveTo(i, O, i + J, O), d.closePath(), d.fill(), w.borderWidth > 0 && d.stroke();
  }
  _updateAnimationTarget(a) {
    const d = this.chart, g = this.$animations, w = g && g.x, b = g && g.y;
    if (w || b) {
      const E = Ef[a.position].call(this, this._active, this._eventPosition);
      if (!E)
        return;
      const i = this._size = tb(this, a), O = Object.assign({}, E, this._size), j = ib(d, a, O), Y = nb(a, O, j, d);
      (w._to !== Y.x || b._to !== Y.y) && (this.xAlign = j.xAlign, this.yAlign = j.yAlign, this.width = i.width, this.height = i.height, this.caretX = E.x, this.caretY = E.y, this._resolveAnimations().update(this, Y));
    }
  }
  _willRender() {
    return !!this.opacity;
  }
  draw(a) {
    const d = this.options.setContext(this.getContext());
    let g = this.opacity;
    if (!g)
      return;
    this._updateAnimationTarget(d);
    const w = {
      width: this.width,
      height: this.height
    }, b = {
      x: this.x,
      y: this.y
    };
    g = Math.abs(g) < 1e-3 ? 0 : g;
    const E = Gr(d.padding), i = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
    d.enabled && i && (a.save(), a.globalAlpha = g, this.drawBackground(b, a, w, d), Gb(a, d.textDirection), b.y += E.top, this.drawTitle(b, a, d), this.drawBody(b, a, d), this.drawFooter(b, a, d), Zb(a, d.textDirection), a.restore());
  }
  getActiveElements() {
    return this._active || [];
  }
  setActiveElements(a, d) {
    const g = this._active, w = a.map(({ datasetIndex: i, index: O }) => {
      const j = this.chart.getDatasetMeta(i);
      if (!j)
        throw new Error("Cannot find a dataset at index " + i);
      return {
        datasetIndex: i,
        element: j.data[O],
        index: O
      };
    }), b = !Om(g, w), E = this._positionChanged(w, d);
    (b || E) && (this._active = w, this._eventPosition = d, this._ignoreReplayEvents = !0, this.update(!0));
  }
  handleEvent(a, d, g = !0) {
    if (d && this._ignoreReplayEvents)
      return !1;
    this._ignoreReplayEvents = !1;
    const w = this.options, b = this._active || [], E = this._getActiveElements(a, b, d, g), i = this._positionChanged(E, a), O = d || !Om(E, b) || i;
    return O && (this._active = E, (w.enabled || w.external) && (this._eventPosition = {
      x: a.x,
      y: a.y
    }, this.update(!0, d))), O;
  }
  _getActiveElements(a, d, g, w) {
    const b = this.options;
    if (a.type === "mouseout")
      return [];
    if (!w)
      return d.filter((i) => this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== void 0);
    const E = this.chart.getElementsAtEventForMode(a, b.mode, b, g);
    return b.reverse && E.reverse(), E;
  }
  _positionChanged(a, d) {
    const { caretX: g, caretY: w, options: b } = this, E = Ef[b.position].call(this, a, d);
    return E !== !1 && (g !== E.x || w !== E.y);
  }
}
Yt(Qg, "positioners", Ef);
var tC = {
  id: "tooltip",
  _element: Qg,
  positioners: Ef,
  afterInit(m, a, d) {
    d && (m.tooltip = new Qg({
      chart: m,
      options: d
    }));
  },
  beforeUpdate(m, a, d) {
    m.tooltip && m.tooltip.initialize(d);
  },
  reset(m, a, d) {
    m.tooltip && m.tooltip.initialize(d);
  },
  afterDraw(m) {
    const a = m.tooltip;
    if (a && a._willRender()) {
      const d = {
        tooltip: a
      };
      if (m.notifyPlugins("beforeTooltipDraw", {
        ...d,
        cancelable: !0
      }) === !1)
        return;
      a.draw(m.ctx), m.notifyPlugins("afterTooltipDraw", d);
    }
  },
  afterEvent(m, a) {
    if (m.tooltip) {
      const d = a.replay;
      m.tooltip.handleEvent(a.event, d, a.inChartArea) && (a.changed = !0);
    }
  },
  defaults: {
    enabled: !0,
    external: null,
    position: "average",
    backgroundColor: "rgba(0,0,0,0.8)",
    titleColor: "#fff",
    titleFont: {
      weight: "bold"
    },
    titleSpacing: 2,
    titleMarginBottom: 6,
    titleAlign: "left",
    bodyColor: "#fff",
    bodySpacing: 2,
    bodyFont: {},
    bodyAlign: "left",
    footerColor: "#fff",
    footerSpacing: 2,
    footerMarginTop: 6,
    footerFont: {
      weight: "bold"
    },
    footerAlign: "left",
    padding: 6,
    caretPadding: 2,
    caretSize: 5,
    cornerRadius: 6,
    boxHeight: (m, a) => a.bodyFont.size,
    boxWidth: (m, a) => a.bodyFont.size,
    multiKeyBackground: "#fff",
    displayColors: !0,
    boxPadding: 0,
    borderColor: "rgba(0,0,0,0)",
    borderWidth: 0,
    animation: {
      duration: 400,
      easing: "easeOutQuart"
    },
    animations: {
      numbers: {
        type: "number",
        properties: [
          "x",
          "y",
          "width",
          "height",
          "caretX",
          "caretY"
        ]
      },
      opacity: {
        easing: "linear",
        duration: 200
      }
    },
    callbacks: mw
  },
  defaultRoutes: {
    bodyFont: "font",
    footerFont: "font",
    titleFont: "font"
  },
  descriptors: {
    _scriptable: (m) => m !== "filter" && m !== "itemSort" && m !== "external",
    _indexable: !1,
    callbacks: {
      _scriptable: !1,
      _indexable: !1
    },
    animation: {
      _fallback: !1
    },
    animations: {
      _fallback: "animation"
    }
  },
  additionalOptionScopes: [
    "interaction"
  ]
}, iC = /* @__PURE__ */ Object.freeze({
  __proto__: null,
  Colors: pA,
  Decimation: yA,
  Filler: BA,
  Legend: ZA,
  SubTitle: WA,
  Title: qA,
  Tooltip: tC
});
const nC = (m, a, d, g) => (typeof a == "string" ? (d = m.push(a) - 1, g.unshift({
  index: d,
  label: a
})) : isNaN(a) && (d = null), d);
function sC(m, a, d, g) {
  const w = m.indexOf(a);
  if (w === -1)
    return nC(m, a, d, g);
  const b = m.lastIndexOf(a);
  return w !== b ? d : w;
}
const rC = (m, a) => m === null ? null : gr(Math.round(m), 0, a);
function ob(m) {
  const a = this.getLabels();
  return m >= 0 && m < a.length ? a[m] : m;
}
class ey extends Bh {
  constructor(a) {
    super(a), this._startValue = void 0, this._valueRange = 0, this._addedLabels = [];
  }
  init(a) {
    const d = this._addedLabels;
    if (d.length) {
      const g = this.getLabels();
      for (const { index: w, label: b } of d)
        g[w] === b && g.splice(w, 1);
      this._addedLabels = [];
    }
    super.init(a);
  }
  parse(a, d) {
    if (En(a))
      return null;
    const g = this.getLabels();
    return d = isFinite(d) && g[d] === a ? d : sC(g, a, en(d, a), this._addedLabels), rC(d, g.length - 1);
  }
  determineDataLimits() {
    const { minDefined: a, maxDefined: d } = this.getUserBounds();
    let { min: g, max: w } = this.getMinMax(!0);
    this.options.bounds === "ticks" && (a || (g = 0), d || (w = this.getLabels().length - 1)), this.min = g, this.max = w;
  }
  buildTicks() {
    const a = this.min, d = this.max, g = this.options.offset, w = [];
    let b = this.getLabels();
    b = a === 0 && d === b.length - 1 ? b : b.slice(a, d + 1), this._valueRange = Math.max(b.length - (g ? 0 : 1), 1), this._startValue = this.min - (g ? 0.5 : 0);
    for (let E = a; E <= d; E++)
      w.push({
        value: E
      });
    return w;
  }
  getLabelForValue(a) {
    return ob.call(this, a);
  }
  configure() {
    super.configure(), this.isHorizontal() || (this._reversePixels = !this._reversePixels);
  }
  getPixelForValue(a) {
    return typeof a != "number" && (a = this.parse(a)), a === null ? NaN : this.getPixelForDecimal((a - this._startValue) / this._valueRange);
  }
  getPixelForTick(a) {
    const d = this.ticks;
    return a < 0 || a > d.length - 1 ? null : this.getPixelForValue(d[a].value);
  }
  getValueForPixel(a) {
    return Math.round(this._startValue + this.getDecimalForPixel(a) * this._valueRange);
  }
  getBasePixel() {
    return this.bottom;
  }
}
Yt(ey, "id", "category"), Yt(ey, "defaults", {
  ticks: {
    callback: ob
  }
});
function oC(m, a) {
  const d = [], { bounds: w, step: b, min: E, max: i, precision: O, count: j, maxTicks: Y, maxDigits: J, includeBounds: ae } = m, ce = b || 1, Te = Y - 1, { min: be, max: Ze } = a, je = !En(E), ot = !En(i), vt = !En(j), ht = (Ze - be) / (J + 1);
  let gt = t1((Ze - be) / Te / ce) * ce, Vt, pt, Gt, ui;
  if (gt < 1e-14 && !je && !ot)
    return [
      {
        value: be
      },
      {
        value: Ze
      }
    ];
  ui = Math.ceil(Ze / gt) - Math.floor(be / gt), ui > Te && (gt = t1(ui * gt / Te / ce) * ce), En(O) || (Vt = Math.pow(10, O), gt = Math.ceil(gt * Vt) / Vt), w === "ticks" ? (pt = Math.floor(be / gt) * gt, Gt = Math.ceil(Ze / gt) * gt) : (pt = be, Gt = Ze), je && ot && b && QM((i - E) / b, gt / 1e3) ? (ui = Math.round(Math.min((i - E) / gt, Y)), gt = (i - E) / ui, pt = E, Gt = i) : vt ? (pt = je ? E : pt, Gt = ot ? i : Gt, ui = j - 1, gt = (Gt - pt) / ui) : (ui = (Gt - pt) / gt, If(ui, Math.round(ui), gt / 1e3) ? ui = Math.round(ui) : ui = Math.ceil(ui));
  const kt = Math.max(i1(gt), i1(pt));
  Vt = Math.pow(10, En(O) ? kt : O), pt = Math.round(pt * Vt) / Vt, Gt = Math.round(Gt * Vt) / Vt;
  let Pt = 0;
  for (je && (ae && pt !== E ? (d.push({
    value: E
  }), pt < E && Pt++, If(Math.round((pt + Pt * gt) * Vt) / Vt, E, ab(E, ht, m)) && Pt++) : pt < E && Pt++); Pt < ui; ++Pt) {
    const Mi = Math.round((pt + Pt * gt) * Vt) / Vt;
    if (ot && Mi > i)
      break;
    d.push({
      value: Mi
    });
  }
  return ot && ae && Gt !== i ? d.length && If(d[d.length - 1].value, i, ab(i, ht, m)) ? d[d.length - 1].value = i : d.push({
    value: i
  }) : (!ot || Gt === i) && d.push({
    value: Gt
  }), d;
}
function ab(m, a, { horizontal: d, minRotation: g }) {
  const w = Ia(g), b = (d ? Math.sin(w) : Math.cos(w)) || 1e-3, E = 0.75 * a * ("" + m).length;
  return Math.min(a / b, E);
}
class Gm extends Bh {
  constructor(a) {
    super(a), this.start = void 0, this.end = void 0, this._startValue = void 0, this._endValue = void 0, this._valueRange = 0;
  }
  parse(a, d) {
    return En(a) || (typeof a == "number" || a instanceof Number) && !isFinite(+a) ? null : +a;
  }
  handleTickRangeOptions() {
    const { beginAtZero: a } = this.options, { minDefined: d, maxDefined: g } = this.getUserBounds();
    let { min: w, max: b } = this;
    const E = (O) => w = d ? w : O, i = (O) => b = g ? b : O;
    if (a) {
      const O = ll(w), j = ll(b);
      O < 0 && j < 0 ? i(0) : O > 0 && j > 0 && E(0);
    }
    if (w === b) {
      let O = b === 0 ? 1 : Math.abs(b * 0.05);
      i(b + O), a || E(w - O);
    }
    this.min = w, this.max = b;
  }
  getTickLimit() {
    const a = this.options.ticks;
    let { maxTicksLimit: d, stepSize: g } = a, w;
    return g ? (w = Math.ceil(this.max / g) - Math.floor(this.min / g) + 1, w > 1e3 && (console.warn(`scales.${this.id}.ticks.stepSize: ${g} would result generating up to ${w} ticks. Limiting to 1000.`), w = 1e3)) : (w = this.computeTickLimit(), d = d || 11), d && (w = Math.min(d, w)), w;
  }
  computeTickLimit() {
    return Number.POSITIVE_INFINITY;
  }
  buildTicks() {
    const a = this.options, d = a.ticks;
    let g = this.getTickLimit();
    g = Math.max(2, g);
    const w = {
      maxTicks: g,
      bounds: a.bounds,
      min: a.min,
      max: a.max,
      precision: d.precision,
      step: d.stepSize,
      count: d.count,
      maxDigits: this._maxDigits(),
      horizontal: this.isHorizontal(),
      minRotation: d.minRotation || 0,
      includeBounds: d.includeBounds !== !1
    }, b = this._range || this, E = oC(w, b);
    return a.bounds === "ticks" && Eb(E, this, "value"), a.reverse ? (E.reverse(), this.start = this.max, this.end = this.min) : (this.start = this.min, this.end = this.max), E;
  }
  configure() {
    const a = this.ticks;
    let d = this.min, g = this.max;
    if (super.configure(), this.options.offset && a.length) {
      const w = (g - d) / Math.max(a.length - 1, 1) / 2;
      d -= w, g += w;
    }
    this._startValue = d, this._endValue = g, this._valueRange = g - d;
  }
  getLabelForValue(a) {
    return Zf(a, this.chart.options.locale, this.options.ticks.format);
  }
}
class ty extends Gm {
  determineDataLimits() {
    const { min: a, max: d } = this.getMinMax(!0);
    this.min = As(a) ? a : 0, this.max = As(d) ? d : 1, this.handleTickRangeOptions();
  }
  computeTickLimit() {
    const a = this.isHorizontal(), d = a ? this.width : this.height, g = Ia(this.options.ticks.minRotation), w = (a ? Math.sin(g) : Math.cos(g)) || 1e-3, b = this._resolveTickFontOptions(0);
    return Math.ceil(d / Math.min(40, b.lineHeight / w));
  }
  getPixelForValue(a) {
    return a === null ? NaN : this.getPixelForDecimal((a - this._startValue) / this._valueRange);
  }
  getValueForPixel(a) {
    return this._startValue + this.getDecimalForPixel(a) * this._valueRange;
  }
}
Yt(ty, "id", "linear"), Yt(ty, "defaults", {
  ticks: {
    callback: qm.formatters.numeric
  }
});
const Vf = (m) => Math.floor(Lc(m)), Ih = (m, a) => Math.pow(10, Vf(m) + a);
function lb(m) {
  return m / Math.pow(10, Vf(m)) === 1;
}
function cb(m, a, d) {
  const g = Math.pow(10, d), w = Math.floor(m / g);
  return Math.ceil(a / g) - w;
}
function aC(m, a) {
  const d = a - m;
  let g = Vf(d);
  for (; cb(m, a, g) > 10; )
    g++;
  for (; cb(m, a, g) < 10; )
    g--;
  return Math.min(g, Vf(m));
}
function lC(m, { min: a, max: d }) {
  a = Bo(m.min, a);
  const g = [], w = Vf(a);
  let b = aC(a, d), E = b < 0 ? Math.pow(10, Math.abs(b)) : 1;
  const i = Math.pow(10, b), O = w > b ? Math.pow(10, w) : 0, j = Math.round((a - O) * E) / E, Y = Math.floor((a - O) / i / 10) * i * 10;
  let J = Math.floor((j - Y) / Math.pow(10, b)), ae = Bo(m.min, Math.round((O + Y + J * Math.pow(10, b)) * E) / E);
  for (; ae < d; )
    g.push({
      value: ae,
      major: lb(ae),
      significand: J
    }), J >= 10 ? J = J < 15 ? 15 : 20 : J++, J >= 20 && (b++, J = 2, E = b >= 0 ? 1 : E), ae = Math.round((O + Y + J * Math.pow(10, b)) * E) / E;
  const ce = Bo(m.max, ae);
  return g.push({
    value: ce,
    major: lb(ce),
    significand: J
  }), g;
}
class iy extends Bh {
  constructor(a) {
    super(a), this.start = void 0, this.end = void 0, this._startValue = void 0, this._valueRange = 0;
  }
  parse(a, d) {
    const g = Gm.prototype.parse.apply(this, [
      a,
      d
    ]);
    if (g === 0) {
      this._zero = !0;
      return;
    }
    return As(g) && g > 0 ? g : null;
  }
  determineDataLimits() {
    const { min: a, max: d } = this.getMinMax(!0);
    this.min = As(a) ? Math.max(0, a) : null, this.max = As(d) ? Math.max(0, d) : null, this.options.beginAtZero && (this._zero = !0), this._zero && this.min !== this._suggestedMin && !As(this._userMin) && (this.min = a === Ih(this.min, 0) ? Ih(this.min, -1) : Ih(this.min, 0)), this.handleTickRangeOptions();
  }
  handleTickRangeOptions() {
    const { minDefined: a, maxDefined: d } = this.getUserBounds();
    let g = this.min, w = this.max;
    const b = (i) => g = a ? g : i, E = (i) => w = d ? w : i;
    g === w && (g <= 0 ? (b(1), E(10)) : (b(Ih(g, -1)), E(Ih(w, 1)))), g <= 0 && b(Ih(w, -1)), w <= 0 && E(Ih(g, 1)), this.min = g, this.max = w;
  }
  buildTicks() {
    const a = this.options, d = {
      min: this._userMin,
      max: this._userMax
    }, g = lC(d, this);
    return a.bounds === "ticks" && Eb(g, this, "value"), a.reverse ? (g.reverse(), this.start = this.max, this.end = this.min) : (this.start = this.min, this.end = this.max), g;
  }
  getLabelForValue(a) {
    return a === void 0 ? "0" : Zf(a, this.chart.options.locale, this.options.ticks.format);
  }
  configure() {
    const a = this.min;
    super.configure(), this._startValue = Lc(a), this._valueRange = Lc(this.max) - Lc(a);
  }
  getPixelForValue(a) {
    return (a === void 0 || a === 0) && (a = this.min), a === null || isNaN(a) ? NaN : this.getPixelForDecimal(a === this.min ? 0 : (Lc(a) - this._startValue) / this._valueRange);
  }
  getValueForPixel(a) {
    const d = this.getDecimalForPixel(a);
    return Math.pow(10, this._startValue + d * this._valueRange);
  }
}
Yt(iy, "id", "logarithmic"), Yt(iy, "defaults", {
  ticks: {
    callback: qm.formatters.logarithmic,
    major: {
      enabled: !0
    }
  }
});
function ny(m) {
  const a = m.ticks;
  if (a.display && m.display) {
    const d = Gr(a.backdropPadding);
    return en(a.font && a.font.size, ys.font.size) + d.height;
  }
  return 0;
}
function cC(m, a, d) {
  return d = hs(d) ? d : [
    d
  ], {
    w: _S(m, a.string, d),
    h: d.length * a.lineHeight
  };
}
function hb(m, a, d, g, w) {
  return m === g || m === w ? {
    start: a - d / 2,
    end: a + d / 2
  } : m < g || m > w ? {
    start: a - d,
    end: a
  } : {
    start: a,
    end: a + d
  };
}
function hC(m) {
  const a = {
    l: m.left + m._padding.left,
    r: m.right - m._padding.right,
    t: m.top + m._padding.top,
    b: m.bottom - m._padding.bottom
  }, d = Object.assign({}, a), g = [], w = [], b = m._pointLabels.length, E = m.options.pointLabels, i = E.centerPointLabels ? ds / b : 0;
  for (let O = 0; O < b; O++) {
    const j = E.setContext(m.getPointLabelContext(O));
    w[O] = j.padding;
    const Y = m.getPointPosition(O, m.drawingArea + w[O], i), J = ir(j.font), ae = cC(m.ctx, J, m._pointLabels[O]);
    g[O] = ae;
    const ce = No(m.getIndexAngle(O) + i), Te = Math.round(uy(ce)), be = hb(Te, Y.x, ae.w, 0, 180), Ze = hb(Te, Y.y, ae.h, 90, 270);
    uC(d, a, ce, be, Ze);
  }
  m.setCenterPoint(a.l - d.l, d.r - a.r, a.t - d.t, d.b - a.b), m._pointLabelItems = pC(m, g, w);
}
function uC(m, a, d, g, w) {
  const b = Math.abs(Math.sin(d)), E = Math.abs(Math.cos(d));
  let i = 0, O = 0;
  g.start < a.l ? (i = (a.l - g.start) / b, m.l = Math.min(m.l, a.l - i)) : g.end > a.r && (i = (g.end - a.r) / b, m.r = Math.max(m.r, a.r + i)), w.start < a.t ? (O = (a.t - w.start) / E, m.t = Math.min(m.t, a.t - O)) : w.end > a.b && (O = (w.end - a.b) / E, m.b = Math.max(m.b, a.b + O));
}
function dC(m, a, d) {
  const g = m.drawingArea, { extra: w, additionalAngle: b, padding: E, size: i } = d, O = m.getPointPosition(a, g + w + E, b), j = Math.round(uy(No(O.angle + Ns))), Y = gC(O.y, i.h, j), J = mC(j), ae = _C(O.x, i.w, J);
  return {
    visible: !0,
    x: O.x,
    y: Y,
    textAlign: J,
    left: ae,
    top: Y,
    right: ae + i.w,
    bottom: Y + i.h
  };
}
function fC(m, a) {
  if (!a)
    return !0;
  const { left: d, top: g, right: w, bottom: b } = m;
  return !(Ul({
    x: d,
    y: g
  }, a) || Ul({
    x: d,
    y: b
  }, a) || Ul({
    x: w,
    y: g
  }, a) || Ul({
    x: w,
    y: b
  }, a));
}
function pC(m, a, d) {
  const g = [], w = m._pointLabels.length, b = m.options, { centerPointLabels: E, display: i } = b.pointLabels, O = {
    extra: ny(b) / 2,
    additionalAngle: E ? ds / w : 0
  };
  let j;
  for (let Y = 0; Y < w; Y++) {
    O.padding = d[Y], O.size = a[Y];
    const J = dC(m, Y, O);
    g.push(J), i === "auto" && (J.visible = fC(J, j), J.visible && (j = J));
  }
  return g;
}
function mC(m) {
  return m === 0 || m === 180 ? "center" : m < 180 ? "left" : "right";
}
function _C(m, a, d) {
  return d === "right" ? m -= a : d === "center" && (m -= a / 2), m;
}
function gC(m, a, d) {
  return d === 90 || d === 270 ? m -= a / 2 : (d > 270 || d < 90) && (m -= a), m;
}
function yC(m, a, d) {
  const { left: g, top: w, right: b, bottom: E } = d, { backdropColor: i } = a;
  if (!En(i)) {
    const O = kh(a.borderRadius), j = Gr(a.backdropPadding);
    m.fillStyle = i;
    const Y = g - j.left, J = w - j.top, ae = b - g + j.width, ce = E - w + j.height;
    Object.values(O).some((Te) => Te !== 0) ? (m.beginPath(), Bf(m, {
      x: Y,
      y: J,
      w: ae,
      h: ce,
      radius: O
    }), m.fill()) : m.fillRect(Y, J, ae, ce);
  }
}
function xC(m, a) {
  const { ctx: d, options: { pointLabels: g } } = m;
  for (let w = a - 1; w >= 0; w--) {
    const b = m._pointLabelItems[w];
    if (!b.visible)
      continue;
    const E = g.setContext(m.getPointLabelContext(w));
    yC(d, E, b);
    const i = ir(E.font), { x: O, y: j, textAlign: Y } = b;
    Fh(d, m._pointLabels[w], O, j + i.lineHeight / 2, i, {
      color: E.color,
      textAlign: Y,
      textBaseline: "middle"
    });
  }
}
function _w(m, a, d, g) {
  const { ctx: w } = m;
  if (d)
    w.arc(m.xCenter, m.yCenter, a, 0, us);
  else {
    let b = m.getPointPosition(0, a);
    w.moveTo(b.x, b.y);
    for (let E = 1; E < g; E++)
      b = m.getPointPosition(E, a), w.lineTo(b.x, b.y);
  }
}
function vC(m, a, d, g, w) {
  const b = m.ctx, E = a.circular, { color: i, lineWidth: O } = a;
  !E && !g || !i || !O || d < 0 || (b.save(), b.strokeStyle = i, b.lineWidth = O, b.setLineDash(w.dash || []), b.lineDashOffset = w.dashOffset, b.beginPath(), _w(m, d, E, g), b.closePath(), b.stroke(), b.restore());
}
function bC(m, a, d) {
  return Fc(m, {
    label: d,
    index: a,
    type: "pointLabel"
  });
}
class Pf extends Gm {
  constructor(a) {
    super(a), this.xCenter = void 0, this.yCenter = void 0, this.drawingArea = void 0, this._pointLabels = [], this._pointLabelItems = [];
  }
  setDimensions() {
    const a = this._padding = Gr(ny(this.options) / 2), d = this.width = this.maxWidth - a.width, g = this.height = this.maxHeight - a.height;
    this.xCenter = Math.floor(this.left + d / 2 + a.left), this.yCenter = Math.floor(this.top + g / 2 + a.top), this.drawingArea = Math.floor(Math.min(d, g) / 2);
  }
  determineDataLimits() {
    const { min: a, max: d } = this.getMinMax(!1);
    this.min = As(a) && !isNaN(a) ? a : 0, this.max = As(d) && !isNaN(d) ? d : 0, this.handleTickRangeOptions();
  }
  computeTickLimit() {
    return Math.ceil(this.drawingArea / ny(this.options));
  }
  generateTickLabels(a) {
    Gm.prototype.generateTickLabels.call(this, a), this._pointLabels = this.getLabels().map((d, g) => {
      const w = is(this.options.pointLabels.callback, [
        d,
        g
      ], this);
      return w || w === 0 ? w : "";
    }).filter((d, g) => this.chart.getDataVisibility(g));
  }
  fit() {
    const a = this.options;
    a.display && a.pointLabels.display ? hC(this) : this.setCenterPoint(0, 0, 0, 0);
  }
  setCenterPoint(a, d, g, w) {
    this.xCenter += Math.floor((a - d) / 2), this.yCenter += Math.floor((g - w) / 2), this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(a, d, g, w));
  }
  getIndexAngle(a) {
    const d = us / (this._pointLabels.length || 1), g = this.options.startAngle || 0;
    return No(a * d + Ia(g));
  }
  getDistanceFromCenterForValue(a) {
    if (En(a))
      return NaN;
    const d = this.drawingArea / (this.max - this.min);
    return this.options.reverse ? (this.max - a) * d : (a - this.min) * d;
  }
  getValueForDistanceFromCenter(a) {
    if (En(a))
      return NaN;
    const d = a / (this.drawingArea / (this.max - this.min));
    return this.options.reverse ? this.max - d : this.min + d;
  }
  getPointLabelContext(a) {
    const d = this._pointLabels || [];
    if (a >= 0 && a < d.length) {
      const g = d[a];
      return bC(this.getContext(), a, g);
    }
  }
  getPointPosition(a, d, g = 0) {
    const w = this.getIndexAngle(a) - Ns + g;
    return {
      x: Math.cos(w) * d + this.xCenter,
      y: Math.sin(w) * d + this.yCenter,
      angle: w
    };
  }
  getPointPositionForValue(a, d) {
    return this.getPointPosition(a, this.getDistanceFromCenterForValue(d));
  }
  getBasePosition(a) {
    return this.getPointPositionForValue(a || 0, this.getBaseValue());
  }
  getPointLabelPosition(a) {
    const { left: d, top: g, right: w, bottom: b } = this._pointLabelItems[a];
    return {
      left: d,
      top: g,
      right: w,
      bottom: b
    };
  }
  drawBackground() {
    const { backgroundColor: a, grid: { circular: d } } = this.options;
    if (a) {
      const g = this.ctx;
      g.save(), g.beginPath(), _w(this, this.getDistanceFromCenterForValue(this._endValue), d, this._pointLabels.length), g.closePath(), g.fillStyle = a, g.fill(), g.restore();
    }
  }
  drawGrid() {
    const a = this.ctx, d = this.options, { angleLines: g, grid: w, border: b } = d, E = this._pointLabels.length;
    let i, O, j;
    if (d.pointLabels.display && xC(this, E), w.display && this.ticks.forEach((Y, J) => {
      if (J !== 0 || J === 0 && this.min < 0) {
        O = this.getDistanceFromCenterForValue(Y.value);
        const ae = this.getContext(J), ce = w.setContext(ae), Te = b.setContext(ae);
        vC(this, ce, O, E, Te);
      }
    }), g.display) {
      for (a.save(), i = E - 1; i >= 0; i--) {
        const Y = g.setContext(this.getPointLabelContext(i)), { color: J, lineWidth: ae } = Y;
        !ae || !J || (a.lineWidth = ae, a.strokeStyle = J, a.setLineDash(Y.borderDash), a.lineDashOffset = Y.borderDashOffset, O = this.getDistanceFromCenterForValue(d.reverse ? this.min : this.max), j = this.getPointPosition(i, O), a.beginPath(), a.moveTo(this.xCenter, this.yCenter), a.lineTo(j.x, j.y), a.stroke());
      }
      a.restore();
    }
  }
  drawBorder() {
  }
  drawLabels() {
    const a = this.ctx, d = this.options, g = d.ticks;
    if (!g.display)
      return;
    const w = this.getIndexAngle(0);
    let b, E;
    a.save(), a.translate(this.xCenter, this.yCenter), a.rotate(w), a.textAlign = "center", a.textBaseline = "middle", this.ticks.forEach((i, O) => {
      if (O === 0 && this.min >= 0 && !d.reverse)
        return;
      const j = g.setContext(this.getContext(O)), Y = ir(j.font);
      if (b = this.getDistanceFromCenterForValue(this.ticks[O].value), j.showLabelBackdrop) {
        a.font = Y.string, E = a.measureText(i.label).width, a.fillStyle = j.backdropColor;
        const J = Gr(j.backdropPadding);
        a.fillRect(-E / 2 - J.left, -b - Y.size / 2 - J.top, E + J.width, Y.size + J.height);
      }
      Fh(a, i.label, 0, -b, Y, {
        color: j.color,
        strokeColor: j.textStrokeColor,
        strokeWidth: j.textStrokeWidth
      });
    }), a.restore();
  }
  drawTitle() {
  }
}
Yt(Pf, "id", "radialLinear"), Yt(Pf, "defaults", {
  display: !0,
  animate: !0,
  position: "chartArea",
  angleLines: {
    display: !0,
    lineWidth: 1,
    borderDash: [],
    borderDashOffset: 0
  },
  grid: {
    circular: !1
  },
  startAngle: 0,
  ticks: {
    showLabelBackdrop: !0,
    callback: qm.formatters.numeric
  },
  pointLabels: {
    backdropColor: void 0,
    backdropPadding: 2,
    display: !0,
    font: {
      size: 10
    },
    callback(a) {
      return a;
    },
    padding: 5,
    centerPointLabels: !1
  }
}), Yt(Pf, "defaultRoutes", {
  "angleLines.color": "borderColor",
  "pointLabels.color": "color",
  "ticks.color": "color"
}), Yt(Pf, "descriptors", {
  angleLines: {
    _fallback: "grid"
  }
});
const Ym = {
  millisecond: {
    common: !0,
    size: 1,
    steps: 1e3
  },
  second: {
    common: !0,
    size: 1e3,
    steps: 60
  },
  minute: {
    common: !0,
    size: 6e4,
    steps: 60
  },
  hour: {
    common: !0,
    size: 36e5,
    steps: 24
  },
  day: {
    common: !0,
    size: 864e5,
    steps: 30
  },
  week: {
    common: !1,
    size: 6048e5,
    steps: 4
  },
  month: {
    common: !0,
    size: 2628e6,
    steps: 12
  },
  quarter: {
    common: !1,
    size: 7884e6,
    steps: 4
  },
  year: {
    common: !0,
    size: 3154e7
  }
}, go = /* @__PURE__ */ Object.keys(Ym);
function ub(m, a) {
  return m - a;
}
function db(m, a) {
  if (En(a))
    return null;
  const d = m._adapter, { parser: g, round: w, isoWeekday: b } = m._parseOpts;
  let E = a;
  return typeof g == "function" && (E = g(E)), As(E) || (E = typeof g == "string" ? d.parse(E, g) : d.parse(E)), E === null ? null : (w && (E = w === "week" && (Xu(b) || b === !0) ? d.startOf(E, "isoWeek", b) : d.startOf(E, w)), +E);
}
function fb(m, a, d, g) {
  const w = go.length;
  for (let b = go.indexOf(m); b < w - 1; ++b) {
    const E = Ym[go[b]], i = E.steps ? E.steps : Number.MAX_SAFE_INTEGER;
    if (E.common && Math.ceil((d - a) / (i * E.size)) <= g)
      return go[b];
  }
  return go[w - 1];
}
function wC(m, a, d, g, w) {
  for (let b = go.length - 1; b >= go.indexOf(d); b--) {
    const E = go[b];
    if (Ym[E].common && m._adapter.diff(w, g, E) >= a - 1)
      return E;
  }
  return go[d ? go.indexOf(d) : 0];
}
function TC(m) {
  for (let a = go.indexOf(m) + 1, d = go.length; a < d; ++a)
    if (Ym[go[a]].common)
      return go[a];
}
function pb(m, a, d) {
  if (!d)
    m[a] = !0;
  else if (d.length) {
    const { lo: g, hi: w } = dy(d, a), b = d[g] >= a ? d[g] : d[w];
    m[b] = !0;
  }
}
function MC(m, a, d, g) {
  const w = m._adapter, b = +w.startOf(a[0].value, g), E = a[a.length - 1].value;
  let i, O;
  for (i = b; i <= E; i = +w.add(i, 1, g))
    O = d[i], O >= 0 && (a[O].major = !0);
  return a;
}
function mb(m, a, d) {
  const g = [], w = {}, b = a.length;
  let E, i;
  for (E = 0; E < b; ++E)
    i = a[E], w[i] = E, g.push({
      value: i,
      major: !1
    });
  return b === 0 || !d ? g : MC(m, g, w, d);
}
class Uf extends Bh {
  constructor(a) {
    super(a), this._cache = {
      data: [],
      labels: [],
      all: []
    }, this._unit = "day", this._majorUnit = void 0, this._offsets = {}, this._normalized = !1, this._parseOpts = void 0;
  }
  init(a, d = {}) {
    const g = a.time || (a.time = {}), w = this._adapter = new zE._date(a.adapters.date);
    w.init(d), Cf(g.displayFormats, w.formats()), this._parseOpts = {
      parser: g.parser,
      round: g.round,
      isoWeekday: g.isoWeekday
    }, super.init(a), this._normalized = d.normalized;
  }
  parse(a, d) {
    return a === void 0 ? null : db(this, a);
  }
  beforeLayout() {
    super.beforeLayout(), this._cache = {
      data: [],
      labels: [],
      all: []
    };
  }
  determineDataLimits() {
    const a = this.options, d = this._adapter, g = a.time.unit || "day";
    let { min: w, max: b, minDefined: E, maxDefined: i } = this.getUserBounds();
    function O(j) {
      !E && !isNaN(j.min) && (w = Math.min(w, j.min)), !i && !isNaN(j.max) && (b = Math.max(b, j.max));
    }
    (!E || !i) && (O(this._getLabelBounds()), (a.bounds !== "ticks" || a.ticks.source !== "labels") && O(this.getMinMax(!1))), w = As(w) && !isNaN(w) ? w : +d.startOf(Date.now(), g), b = As(b) && !isNaN(b) ? b : +d.endOf(Date.now(), g) + 1, this.min = Math.min(w, b - 1), this.max = Math.max(w + 1, b);
  }
  _getLabelBounds() {
    const a = this.getLabelTimestamps();
    let d = Number.POSITIVE_INFINITY, g = Number.NEGATIVE_INFINITY;
    return a.length && (d = a[0], g = a[a.length - 1]), {
      min: d,
      max: g
    };
  }
  buildTicks() {
    const a = this.options, d = a.time, g = a.ticks, w = g.source === "labels" ? this.getLabelTimestamps() : this._generate();
    a.bounds === "ticks" && w.length && (this.min = this._userMin || w[0], this.max = this._userMax || w[w.length - 1]);
    const b = this.min, E = this.max, i = nS(w, b, E);
    return this._unit = d.unit || (g.autoSkip ? fb(d.minUnit, this.min, this.max, this._getLabelCapacity(b)) : wC(this, i.length, d.minUnit, this.min, this.max)), this._majorUnit = !g.major.enabled || this._unit === "year" ? void 0 : TC(this._unit), this.initOffsets(w), a.reverse && i.reverse(), mb(this, i, this._majorUnit);
  }
  afterAutoSkip() {
    this.options.offsetAfterAutoskip && this.initOffsets(this.ticks.map((a) => +a.value));
  }
  initOffsets(a = []) {
    let d = 0, g = 0, w, b;
    this.options.offset && a.length && (w = this.getDecimalForValue(a[0]), a.length === 1 ? d = 1 - w : d = (this.getDecimalForValue(a[1]) - w) / 2, b = this.getDecimalForValue(a[a.length - 1]), a.length === 1 ? g = b : g = (b - this.getDecimalForValue(a[a.length - 2])) / 2);
    const E = a.length < 3 ? 0.5 : 0.25;
    d = gr(d, 0, E), g = gr(g, 0, E), this._offsets = {
      start: d,
      end: g,
      factor: 1 / (d + 1 + g)
    };
  }
  _generate() {
    const a = this._adapter, d = this.min, g = this.max, w = this.options, b = w.time, E = b.unit || fb(b.minUnit, d, g, this._getLabelCapacity(d)), i = en(w.ticks.stepSize, 1), O = E === "week" ? b.isoWeekday : !1, j = Xu(O) || O === !0, Y = {};
    let J = d, ae, ce;
    if (j && (J = +a.startOf(J, "isoWeek", O)), J = +a.startOf(J, j ? "day" : E), a.diff(g, d, E) > 1e5 * i)
      throw new Error(d + " and " + g + " are too far apart with stepSize of " + i + " " + E);
    const Te = w.ticks.source === "data" && this.getDataTimestamps();
    for (ae = J, ce = 0; ae < g; ae = +a.add(ae, i, E), ce++)
      pb(Y, ae, Te);
    return (ae === g || w.bounds === "ticks" || ce === 1) && pb(Y, ae, Te), Object.keys(Y).sort(ub).map((be) => +be);
  }
  getLabelForValue(a) {
    const d = this._adapter, g = this.options.time;
    return g.tooltipFormat ? d.format(a, g.tooltipFormat) : d.format(a, g.displayFormats.datetime);
  }
  format(a, d) {
    const w = this.options.time.displayFormats, b = this._unit, E = d || w[b];
    return this._adapter.format(a, E);
  }
  _tickFormatFunction(a, d, g, w) {
    const b = this.options, E = b.ticks.callback;
    if (E)
      return is(E, [
        a,
        d,
        g
      ], this);
    const i = b.time.displayFormats, O = this._unit, j = this._majorUnit, Y = O && i[O], J = j && i[j], ae = g[d], ce = j && J && ae && ae.major;
    return this._adapter.format(a, w || (ce ? J : Y));
  }
  generateTickLabels(a) {
    let d, g, w;
    for (d = 0, g = a.length; d < g; ++d)
      w = a[d], w.label = this._tickFormatFunction(w.value, d, a);
  }
  getDecimalForValue(a) {
    return a === null ? NaN : (a - this.min) / (this.max - this.min);
  }
  getPixelForValue(a) {
    const d = this._offsets, g = this.getDecimalForValue(a);
    return this.getPixelForDecimal((d.start + g) * d.factor);
  }
  getValueForPixel(a) {
    const d = this._offsets, g = this.getDecimalForPixel(a) / d.factor - d.end;
    return this.min + g * (this.max - this.min);
  }
  _getLabelSize(a) {
    const d = this.options.ticks, g = this.ctx.measureText(a).width, w = Ia(this.isHorizontal() ? d.maxRotation : d.minRotation), b = Math.cos(w), E = Math.sin(w), i = this._resolveTickFontOptions(0).size;
    return {
      w: g * b + i * E,
      h: g * E + i * b
    };
  }
  _getLabelCapacity(a) {
    const d = this.options.time, g = d.displayFormats, w = g[d.unit] || g.millisecond, b = this._tickFormatFunction(a, 0, mb(this, [
      a
    ], this._majorUnit), w), E = this._getLabelSize(b), i = Math.floor(this.isHorizontal() ? this.width / E.w : this.height / E.h) - 1;
    return i > 0 ? i : 1;
  }
  getDataTimestamps() {
    let a = this._cache.data || [], d, g;
    if (a.length)
      return a;
    const w = this.getMatchingVisibleMetas();
    if (this._normalized && w.length)
      return this._cache.data = w[0].controller.getAllParsedValues(this);
    for (d = 0, g = w.length; d < g; ++d)
      a = a.concat(w[d].controller.getAllParsedValues(this));
    return this._cache.data = this.normalize(a);
  }
  getLabelTimestamps() {
    const a = this._cache.labels || [];
    let d, g;
    if (a.length)
      return a;
    const w = this.getLabels();
    for (d = 0, g = w.length; d < g; ++d)
      a.push(db(this, w[d]));
    return this._cache.labels = this._normalized ? a : this.normalize(a);
  }
  normalize(a) {
    return Cb(a.sort(ub));
  }
}
Yt(Uf, "id", "time"), Yt(Uf, "defaults", {
  bounds: "data",
  adapters: {},
  time: {
    parser: !1,
    unit: !1,
    round: !1,
    isoWeekday: !1,
    minUnit: "millisecond",
    displayFormats: {}
  },
  ticks: {
    source: "auto",
    callback: !1,
    major: {
      enabled: !1
    }
  }
});
function Mm(m, a, d) {
  let g = 0, w = m.length - 1, b, E, i, O;
  d ? (a >= m[g].pos && a <= m[w].pos && ({ lo: g, hi: w } = Vl(m, "pos", a)), { pos: b, time: i } = m[g], { pos: E, time: O } = m[w]) : (a >= m[g].time && a <= m[w].time && ({ lo: g, hi: w } = Vl(m, "time", a)), { time: b, pos: i } = m[g], { time: E, pos: O } = m[w]);
  const j = E - b;
  return j ? i + (O - i) * (a - b) / j : i;
}
class sy extends Uf {
  constructor(a) {
    super(a), this._table = [], this._minPos = void 0, this._tableRange = void 0;
  }
  initOffsets() {
    const a = this._getTimestampsForTable(), d = this._table = this.buildLookupTable(a);
    this._minPos = Mm(d, this.min), this._tableRange = Mm(d, this.max) - this._minPos, super.initOffsets(a);
  }
  buildLookupTable(a) {
    const { min: d, max: g } = this, w = [], b = [];
    let E, i, O, j, Y;
    for (E = 0, i = a.length; E < i; ++E)
      j = a[E], j >= d && j <= g && w.push(j);
    if (w.length < 2)
      return [
        {
          time: d,
          pos: 0
        },
        {
          time: g,
          pos: 1
        }
      ];
    for (E = 0, i = w.length; E < i; ++E)
      Y = w[E + 1], O = w[E - 1], j = w[E], Math.round((Y + O) / 2) !== j && b.push({
        time: j,
        pos: E / (i - 1)
      });
    return b;
  }
  _generate() {
    const a = this.min, d = this.max;
    let g = super.getDataTimestamps();
    return (!g.includes(a) || !g.length) && g.splice(0, 0, a), (!g.includes(d) || g.length === 1) && g.push(d), g.sort((w, b) => w - b);
  }
  _getTimestampsForTable() {
    let a = this._cache.all || [];
    if (a.length)
      return a;
    const d = this.getDataTimestamps(), g = this.getLabelTimestamps();
    return d.length && g.length ? a = this.normalize(d.concat(g)) : a = d.length ? d : g, a = this._cache.all = a, a;
  }
  getDecimalForValue(a) {
    return (Mm(this._table, a) - this._minPos) / this._tableRange;
  }
  getValueForPixel(a) {
    const d = this._offsets, g = this.getDecimalForPixel(a) / d.factor - d.end;
    return Mm(this._table, g * this._tableRange + this._minPos, !0);
  }
}
Yt(sy, "id", "timeseries"), Yt(sy, "defaults", Uf.defaults);
var SC = /* @__PURE__ */ Object.freeze({
  __proto__: null,
  CategoryScale: ey,
  LinearScale: ty,
  LogarithmicScale: iy,
  RadialLinearScale: Pf,
  TimeScale: Uf,
  TimeSeriesScale: sy
});
const EC = [
  LE,
  aA,
  iC,
  SC
], Zm = {
  Utils: {
    DividePolylinesPoints(m) {
      let a = 0;
      const d = [], g = m.length;
      for (let w = 0; w < g; w++)
        m[w] === null && (d.push(m.slice(a === 0 ? 0 : a + 1, w)), a = w);
      return g - 1 !== a && d.push(m.slice(a)), d;
    },
    GetItemFromArray(m, a) {
      try {
        return m[a];
      } catch {
        return [0, 0];
      }
    }
  }
};
var Km = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
function gw(m) {
  return m && m.__esModule && Object.prototype.hasOwnProperty.call(m, "default") ? m.default : m;
}
var Sm = { exports: {} };
/* @preserve
 * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com
 * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade
 */
var _b;
function yw() {
  return _b || (_b = 1, function(m, a) {
    (function(d, g) {
      g(a);
    })(Km, function(d) {
      var g = "1.9.4";
      function w(p) {
        var A, B, X, ne;
        for (B = 1, X = arguments.length; B < X; B++) {
          ne = arguments[B];
          for (A in ne)
            p[A] = ne[A];
        }
        return p;
      }
      var b = Object.create || function() {
        function p() {
        }
        return function(A) {
          return p.prototype = A, new p();
        };
      }();
      function E(p, A) {
        var B = Array.prototype.slice;
        if (p.bind)
          return p.bind.apply(p, B.call(arguments, 1));
        var X = B.call(arguments, 2);
        return function() {
          return p.apply(A, X.length ? X.concat(B.call(arguments)) : arguments);
        };
      }
      var i = 0;
      function O(p) {
        return "_leaflet_id" in p || (p._leaflet_id = ++i), p._leaflet_id;
      }
      function j(p, A, B) {
        var X, ne, ye, We;
        return We = function() {
          X = !1, ne && (ye.apply(B, ne), ne = !1);
        }, ye = function() {
          X ? ne = arguments : (p.apply(B, arguments), setTimeout(We, A), X = !0);
        }, ye;
      }
      function Y(p, A, B) {
        var X = A[1], ne = A[0], ye = X - ne;
        return p === X && B ? p : ((p - ne) % ye + ye) % ye + ne;
      }
      function J() {
        return !1;
      }
      function ae(p, A) {
        if (A === !1)
          return p;
        var B = Math.pow(10, A === void 0 ? 6 : A);
        return Math.round(p * B) / B;
      }
      function ce(p) {
        return p.trim ? p.trim() : p.replace(/^\s+|\s+$/g, "");
      }
      function Te(p) {
        return ce(p).split(/\s+/);
      }
      function be(p, A) {
        Object.prototype.hasOwnProperty.call(p, "options") || (p.options = p.options ? b(p.options) : {});
        for (var B in A)
          p.options[B] = A[B];
        return p.options;
      }
      function Ze(p, A, B) {
        var X = [];
        for (var ne in p)
          X.push(encodeURIComponent(B ? ne.toUpperCase() : ne) + "=" + encodeURIComponent(p[ne]));
        return (!A || A.indexOf("?") === -1 ? "?" : "&") + X.join("&");
      }
      var je = /\{ *([\w_ -]+) *\}/g;
      function ot(p, A) {
        return p.replace(je, function(B, X) {
          var ne = A[X];
          if (ne === void 0)
            throw new Error("No value provided for variable " + B);
          return typeof ne == "function" && (ne = ne(A)), ne;
        });
      }
      var vt = Array.isArray || function(p) {
        return Object.prototype.toString.call(p) === "[object Array]";
      };
      function ht(p, A) {
        for (var B = 0; B < p.length; B++)
          if (p[B] === A)
            return B;
        return -1;
      }
      var gt = "data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";
      function Vt(p) {
        return window["webkit" + p] || window["moz" + p] || window["ms" + p];
      }
      var pt = 0;
      function Gt(p) {
        var A = +/* @__PURE__ */ new Date(), B = Math.max(0, 16 - (A - pt));
        return pt = A + B, window.setTimeout(p, B);
      }
      var ui = window.requestAnimationFrame || Vt("RequestAnimationFrame") || Gt, kt = window.cancelAnimationFrame || Vt("CancelAnimationFrame") || Vt("CancelRequestAnimationFrame") || function(p) {
        window.clearTimeout(p);
      };
      function Pt(p, A, B) {
        if (B && ui === Gt)
          p.call(A);
        else
          return ui.call(window, E(p, A));
      }
      function Mi(p) {
        p && kt.call(window, p);
      }
      var Pn = {
        __proto__: null,
        extend: w,
        create: b,
        bind: E,
        get lastId() {
          return i;
        },
        stamp: O,
        throttle: j,
        wrapNum: Y,
        falseFn: J,
        formatNum: ae,
        trim: ce,
        splitWords: Te,
        setOptions: be,
        getParamString: Ze,
        template: ot,
        isArray: vt,
        indexOf: ht,
        emptyImageUrl: gt,
        requestFn: ui,
        cancelFn: kt,
        requestAnimFrame: Pt,
        cancelAnimFrame: Mi
      };
      function hn() {
      }
      hn.extend = function(p) {
        var A = function() {
          be(this), this.initialize && this.initialize.apply(this, arguments), this.callInitHooks();
        }, B = A.__super__ = this.prototype, X = b(B);
        X.constructor = A, A.prototype = X;
        for (var ne in this)
          Object.prototype.hasOwnProperty.call(this, ne) && ne !== "prototype" && ne !== "__super__" && (A[ne] = this[ne]);
        return p.statics && w(A, p.statics), p.includes && (Ht(p.includes), w.apply(null, [X].concat(p.includes))), w(X, p), delete X.statics, delete X.includes, X.options && (X.options = B.options ? b(B.options) : {}, w(X.options, p.options)), X._initHooks = [], X.callInitHooks = function() {
          if (!this._initHooksCalled) {
            B.callInitHooks && B.callInitHooks.call(this), this._initHooksCalled = !0;
            for (var ye = 0, We = X._initHooks.length; ye < We; ye++)
              X._initHooks[ye].call(this);
          }
        }, A;
      }, hn.include = function(p) {
        var A = this.prototype.options;
        return w(this.prototype, p), p.options && (this.prototype.options = A, this.mergeOptions(p.options)), this;
      }, hn.mergeOptions = function(p) {
        return w(this.prototype.options, p), this;
      }, hn.addInitHook = function(p) {
        var A = Array.prototype.slice.call(arguments, 1), B = typeof p == "function" ? p : function() {
          this[p].apply(this, A);
        };
        return this.prototype._initHooks = this.prototype._initHooks || [], this.prototype._initHooks.push(B), this;
      };
      function Ht(p) {
        if (!(typeof L > "u" || !L || !L.Mixin)) {
          p = vt(p) ? p : [p];
          for (var A = 0; A < p.length; A++)
            p[A] === L.Mixin.Events && console.warn("Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.", new Error().stack);
        }
      }
      var Si = {
        /* @method on(type: String, fn: Function, context?: Object): this
         * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).
         *
         * @alternative
         * @method on(eventMap: Object): this
         * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`
         */
        on: function(p, A, B) {
          if (typeof p == "object")
            for (var X in p)
              this._on(X, p[X], A);
          else {
            p = Te(p);
            for (var ne = 0, ye = p.length; ne < ye; ne++)
              this._on(p[ne], A, B);
          }
          return this;
        },
        /* @method off(type: String, fn?: Function, context?: Object): this
         * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.
         *
         * @alternative
         * @method off(eventMap: Object): this
         * Removes a set of type/listener pairs.
         *
         * @alternative
         * @method off: this
         * Removes all listeners to all events on the object. This includes implicitly attached events.
         */
        off: function(p, A, B) {
          if (!arguments.length)
            delete this._events;
          else if (typeof p == "object")
            for (var X in p)
              this._off(X, p[X], A);
          else {
            p = Te(p);
            for (var ne = arguments.length === 1, ye = 0, We = p.length; ye < We; ye++)
              ne ? this._off(p[ye]) : this._off(p[ye], A, B);
          }
          return this;
        },
        // attach listener (without syntactic sugar now)
        _on: function(p, A, B, X) {
          if (typeof A != "function") {
            console.warn("wrong listener type: " + typeof A);
            return;
          }
          if (this._listens(p, A, B) === !1) {
            B === this && (B = void 0);
            var ne = { fn: A, ctx: B };
            X && (ne.once = !0), this._events = this._events || {}, this._events[p] = this._events[p] || [], this._events[p].push(ne);
          }
        },
        _off: function(p, A, B) {
          var X, ne, ye;
          if (this._events && (X = this._events[p], !!X)) {
            if (arguments.length === 1) {
              if (this._firingCount)
                for (ne = 0, ye = X.length; ne < ye; ne++)
                  X[ne].fn = J;
              delete this._events[p];
              return;
            }
            if (typeof A != "function") {
              console.warn("wrong listener type: " + typeof A);
              return;
            }
            var We = this._listens(p, A, B);
            if (We !== !1) {
              var at = X[We];
              this._firingCount && (at.fn = J, this._events[p] = X = X.slice()), X.splice(We, 1);
            }
          }
        },
        // @method fire(type: String, data?: Object, propagate?: Boolean): this
        // Fires an event of the specified type. You can optionally provide a data
        // object — the first argument of the listener function will contain its
        // properties. The event can optionally be propagated to event parents.
        fire: function(p, A, B) {
          if (!this.listens(p, B))
            return this;
          var X = w({}, A, {
            type: p,
            target: this,
            sourceTarget: A && A.sourceTarget || this
          });
          if (this._events) {
            var ne = this._events[p];
            if (ne) {
              this._firingCount = this._firingCount + 1 || 1;
              for (var ye = 0, We = ne.length; ye < We; ye++) {
                var at = ne[ye], ft = at.fn;
                at.once && this.off(p, ft, at.ctx), ft.call(at.ctx || this, X);
              }
              this._firingCount--;
            }
          }
          return B && this._propagateEvent(X), this;
        },
        // @method listens(type: String, propagate?: Boolean): Boolean
        // @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean
        // Returns `true` if a particular event type has any listeners attached to it.
        // The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.
        listens: function(p, A, B, X) {
          typeof p != "string" && console.warn('"string" type argument expected');
          var ne = A;
          typeof A != "function" && (X = !!A, ne = void 0, B = void 0);
          var ye = this._events && this._events[p];
          if (ye && ye.length && this._listens(p, ne, B) !== !1)
            return !0;
          if (X) {
            for (var We in this._eventParents)
              if (this._eventParents[We].listens(p, A, B, X))
                return !0;
          }
          return !1;
        },
        // returns the index (number) or false
        _listens: function(p, A, B) {
          if (!this._events)
            return !1;
          var X = this._events[p] || [];
          if (!A)
            return !!X.length;
          B === this && (B = void 0);
          for (var ne = 0, ye = X.length; ne < ye; ne++)
            if (X[ne].fn === A && X[ne].ctx === B)
              return ne;
          return !1;
        },
        // @method once(…): this
        // Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.
        once: function(p, A, B) {
          if (typeof p == "object")
            for (var X in p)
              this._on(X, p[X], A, !0);
          else {
            p = Te(p);
            for (var ne = 0, ye = p.length; ne < ye; ne++)
              this._on(p[ne], A, B, !0);
          }
          return this;
        },
        // @method addEventParent(obj: Evented): this
        // Adds an event parent - an `Evented` that will receive propagated events
        addEventParent: function(p) {
          return this._eventParents = this._eventParents || {}, this._eventParents[O(p)] = p, this;
        },
        // @method removeEventParent(obj: Evented): this
        // Removes an event parent, so it will stop receiving propagated events
        removeEventParent: function(p) {
          return this._eventParents && delete this._eventParents[O(p)], this;
        },
        _propagateEvent: function(p) {
          for (var A in this._eventParents)
            this._eventParents[A].fire(p.type, w({
              layer: p.target,
              propagatedFrom: p.target
            }, p), !0);
        }
      };
      Si.addEventListener = Si.on, Si.removeEventListener = Si.clearAllEventListeners = Si.off, Si.addOneTimeEventListener = Si.once, Si.fireEvent = Si.fire, Si.hasEventListeners = Si.listens;
      var Ji = hn.extend(Si);
      function fi(p, A, B) {
        this.x = B ? Math.round(p) : p, this.y = B ? Math.round(A) : A;
      }
      var jt = Math.trunc || function(p) {
        return p > 0 ? Math.floor(p) : Math.ceil(p);
      };
      fi.prototype = {
        // @method clone(): Point
        // Returns a copy of the current point.
        clone: function() {
          return new fi(this.x, this.y);
        },
        // @method add(otherPoint: Point): Point
        // Returns the result of addition of the current and the given points.
        add: function(p) {
          return this.clone()._add(ni(p));
        },
        _add: function(p) {
          return this.x += p.x, this.y += p.y, this;
        },
        // @method subtract(otherPoint: Point): Point
        // Returns the result of subtraction of the given point from the current.
        subtract: function(p) {
          return this.clone()._subtract(ni(p));
        },
        _subtract: function(p) {
          return this.x -= p.x, this.y -= p.y, this;
        },
        // @method divideBy(num: Number): Point
        // Returns the result of division of the current point by the given number.
        divideBy: function(p) {
          return this.clone()._divideBy(p);
        },
        _divideBy: function(p) {
          return this.x /= p, this.y /= p, this;
        },
        // @method multiplyBy(num: Number): Point
        // Returns the result of multiplication of the current point by the given number.
        multiplyBy: function(p) {
          return this.clone()._multiplyBy(p);
        },
        _multiplyBy: function(p) {
          return this.x *= p, this.y *= p, this;
        },
        // @method scaleBy(scale: Point): Point
        // Multiply each coordinate of the current point by each coordinate of
        // `scale`. In linear algebra terms, multiply the point by the
        // [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)
        // defined by `scale`.
        scaleBy: function(p) {
          return new fi(this.x * p.x, this.y * p.y);
        },
        // @method unscaleBy(scale: Point): Point
        // Inverse of `scaleBy`. Divide each coordinate of the current point by
        // each coordinate of `scale`.
        unscaleBy: function(p) {
          return new fi(this.x / p.x, this.y / p.y);
        },
        // @method round(): Point
        // Returns a copy of the current point with rounded coordinates.
        round: function() {
          return this.clone()._round();
        },
        _round: function() {
          return this.x = Math.round(this.x), this.y = Math.round(this.y), this;
        },
        // @method floor(): Point
        // Returns a copy of the current point with floored coordinates (rounded down).
        floor: function() {
          return this.clone()._floor();
        },
        _floor: function() {
          return this.x = Math.floor(this.x), this.y = Math.floor(this.y), this;
        },
        // @method ceil(): Point
        // Returns a copy of the current point with ceiled coordinates (rounded up).
        ceil: function() {
          return this.clone()._ceil();
        },
        _ceil: function() {
          return this.x = Math.ceil(this.x), this.y = Math.ceil(this.y), this;
        },
        // @method trunc(): Point
        // Returns a copy of the current point with truncated coordinates (rounded towards zero).
        trunc: function() {
          return this.clone()._trunc();
        },
        _trunc: function() {
          return this.x = jt(this.x), this.y = jt(this.y), this;
        },
        // @method distanceTo(otherPoint: Point): Number
        // Returns the cartesian distance between the current and the given points.
        distanceTo: function(p) {
          p = ni(p);
          var A = p.x - this.x, B = p.y - this.y;
          return Math.sqrt(A * A + B * B);
        },
        // @method equals(otherPoint: Point): Boolean
        // Returns `true` if the given point has the same coordinates.
        equals: function(p) {
          return p = ni(p), p.x === this.x && p.y === this.y;
        },
        // @method contains(otherPoint: Point): Boolean
        // Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).
        contains: function(p) {
          return p = ni(p), Math.abs(p.x) <= Math.abs(this.x) && Math.abs(p.y) <= Math.abs(this.y);
        },
        // @method toString(): String
        // Returns a string representation of the point for debugging purposes.
        toString: function() {
          return "Point(" + ae(this.x) + ", " + ae(this.y) + ")";
        }
      };
      function ni(p, A, B) {
        return p instanceof fi ? p : vt(p) ? new fi(p[0], p[1]) : p == null ? p : typeof p == "object" && "x" in p && "y" in p ? new fi(p.x, p.y) : new fi(p, A, B);
      }
      function Gi(p, A) {
        if (p)
          for (var B = A ? [p, A] : p, X = 0, ne = B.length; X < ne; X++)
            this.extend(B[X]);
      }
      Gi.prototype = {
        // @method extend(point: Point): this
        // Extends the bounds to contain the given point.
        // @alternative
        // @method extend(otherBounds: Bounds): this
        // Extend the bounds to contain the given bounds
        extend: function(p) {
          var A, B;
          if (!p)
            return this;
          if (p instanceof fi || typeof p[0] == "number" || "x" in p)
            A = B = ni(p);
          else if (p = an(p), A = p.min, B = p.max, !A || !B)
            return this;
          return !this.min && !this.max ? (this.min = A.clone(), this.max = B.clone()) : (this.min.x = Math.min(A.x, this.min.x), this.max.x = Math.max(B.x, this.max.x), this.min.y = Math.min(A.y, this.min.y), this.max.y = Math.max(B.y, this.max.y)), this;
        },
        // @method getCenter(round?: Boolean): Point
        // Returns the center point of the bounds.
        getCenter: function(p) {
          return ni(
            (this.min.x + this.max.x) / 2,
            (this.min.y + this.max.y) / 2,
            p
          );
        },
        // @method getBottomLeft(): Point
        // Returns the bottom-left point of the bounds.
        getBottomLeft: function() {
          return ni(this.min.x, this.max.y);
        },
        // @method getTopRight(): Point
        // Returns the top-right point of the bounds.
        getTopRight: function() {
          return ni(this.max.x, this.min.y);
        },
        // @method getTopLeft(): Point
        // Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).
        getTopLeft: function() {
          return this.min;
        },
        // @method getBottomRight(): Point
        // Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).
        getBottomRight: function() {
          return this.max;
        },
        // @method getSize(): Point
        // Returns the size of the given bounds
        getSize: function() {
          return this.max.subtract(this.min);
        },
        // @method contains(otherBounds: Bounds): Boolean
        // Returns `true` if the rectangle contains the given one.
        // @alternative
        // @method contains(point: Point): Boolean
        // Returns `true` if the rectangle contains the given point.
        contains: function(p) {
          var A, B;
          return typeof p[0] == "number" || p instanceof fi ? p = ni(p) : p = an(p), p instanceof Gi ? (A = p.min, B = p.max) : A = B = p, A.x >= this.min.x && B.x <= this.max.x && A.y >= this.min.y && B.y <= this.max.y;
        },
        // @method intersects(otherBounds: Bounds): Boolean
        // Returns `true` if the rectangle intersects the given bounds. Two bounds
        // intersect if they have at least one point in common.
        intersects: function(p) {
          p = an(p);
          var A = this.min, B = this.max, X = p.min, ne = p.max, ye = ne.x >= A.x && X.x <= B.x, We = ne.y >= A.y && X.y <= B.y;
          return ye && We;
        },
        // @method overlaps(otherBounds: Bounds): Boolean
        // Returns `true` if the rectangle overlaps the given bounds. Two bounds
        // overlap if their intersection is an area.
        overlaps: function(p) {
          p = an(p);
          var A = this.min, B = this.max, X = p.min, ne = p.max, ye = ne.x > A.x && X.x < B.x, We = ne.y > A.y && X.y < B.y;
          return ye && We;
        },
        // @method isValid(): Boolean
        // Returns `true` if the bounds are properly initialized.
        isValid: function() {
          return !!(this.min && this.max);
        },
        // @method pad(bufferRatio: Number): Bounds
        // Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
        // For example, a ratio of 0.5 extends the bounds by 50% in each direction.
        // Negative values will retract the bounds.
        pad: function(p) {
          var A = this.min, B = this.max, X = Math.abs(A.x - B.x) * p, ne = Math.abs(A.y - B.y) * p;
          return an(
            ni(A.x - X, A.y - ne),
            ni(B.x + X, B.y + ne)
          );
        },
        // @method equals(otherBounds: Bounds): Boolean
        // Returns `true` if the rectangle is equivalent to the given bounds.
        equals: function(p) {
          return p ? (p = an(p), this.min.equals(p.getTopLeft()) && this.max.equals(p.getBottomRight())) : !1;
        }
      };
      function an(p, A) {
        return !p || p instanceof Gi ? p : new Gi(p, A);
      }
      function qt(p, A) {
        if (p)
          for (var B = A ? [p, A] : p, X = 0, ne = B.length; X < ne; X++)
            this.extend(B[X]);
      }
      qt.prototype = {
        // @method extend(latlng: LatLng): this
        // Extend the bounds to contain the given point
        // @alternative
        // @method extend(otherBounds: LatLngBounds): this
        // Extend the bounds to contain the given bounds
        extend: function(p) {
          var A = this._southWest, B = this._northEast, X, ne;
          if (p instanceof Di)
            X = p, ne = p;
          else if (p instanceof qt) {
            if (X = p._southWest, ne = p._northEast, !X || !ne)
              return this;
          } else
            return p ? this.extend(xi(p) || ln(p)) : this;
          return !A && !B ? (this._southWest = new Di(X.lat, X.lng), this._northEast = new Di(ne.lat, ne.lng)) : (A.lat = Math.min(X.lat, A.lat), A.lng = Math.min(X.lng, A.lng), B.lat = Math.max(ne.lat, B.lat), B.lng = Math.max(ne.lng, B.lng)), this;
        },
        // @method pad(bufferRatio: Number): LatLngBounds
        // Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.
        // For example, a ratio of 0.5 extends the bounds by 50% in each direction.
        // Negative values will retract the bounds.
        pad: function(p) {
          var A = this._southWest, B = this._northEast, X = Math.abs(A.lat - B.lat) * p, ne = Math.abs(A.lng - B.lng) * p;
          return new qt(
            new Di(A.lat - X, A.lng - ne),
            new Di(B.lat + X, B.lng + ne)
          );
        },
        // @method getCenter(): LatLng
        // Returns the center point of the bounds.
        getCenter: function() {
          return new Di(
            (this._southWest.lat + this._northEast.lat) / 2,
            (this._southWest.lng + this._northEast.lng) / 2
          );
        },
        // @method getSouthWest(): LatLng
        // Returns the south-west point of the bounds.
        getSouthWest: function() {
          return this._southWest;
        },
        // @method getNorthEast(): LatLng
        // Returns the north-east point of the bounds.
        getNorthEast: function() {
          return this._northEast;
        },
        // @method getNorthWest(): LatLng
        // Returns the north-west point of the bounds.
        getNorthWest: function() {
          return new Di(this.getNorth(), this.getWest());
        },
        // @method getSouthEast(): LatLng
        // Returns the south-east point of the bounds.
        getSouthEast: function() {
          return new Di(this.getSouth(), this.getEast());
        },
        // @method getWest(): Number
        // Returns the west longitude of the bounds
        getWest: function() {
          return this._southWest.lng;
        },
        // @method getSouth(): Number
        // Returns the south latitude of the bounds
        getSouth: function() {
          return this._southWest.lat;
        },
        // @method getEast(): Number
        // Returns the east longitude of the bounds
        getEast: function() {
          return this._northEast.lng;
        },
        // @method getNorth(): Number
        // Returns the north latitude of the bounds
        getNorth: function() {
          return this._northEast.lat;
        },
        // @method contains(otherBounds: LatLngBounds): Boolean
        // Returns `true` if the rectangle contains the given one.
        // @alternative
        // @method contains (latlng: LatLng): Boolean
        // Returns `true` if the rectangle contains the given point.
        contains: function(p) {
          typeof p[0] == "number" || p instanceof Di || "lat" in p ? p = xi(p) : p = ln(p);
          var A = this._southWest, B = this._northEast, X, ne;
          return p instanceof qt ? (X = p.getSouthWest(), ne = p.getNorthEast()) : X = ne = p, X.lat >= A.lat && ne.lat <= B.lat && X.lng >= A.lng && ne.lng <= B.lng;
        },
        // @method intersects(otherBounds: LatLngBounds): Boolean
        // Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.
        intersects: function(p) {
          p = ln(p);
          var A = this._southWest, B = this._northEast, X = p.getSouthWest(), ne = p.getNorthEast(), ye = ne.lat >= A.lat && X.lat <= B.lat, We = ne.lng >= A.lng && X.lng <= B.lng;
          return ye && We;
        },
        // @method overlaps(otherBounds: LatLngBounds): Boolean
        // Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.
        overlaps: function(p) {
          p = ln(p);
          var A = this._southWest, B = this._northEast, X = p.getSouthWest(), ne = p.getNorthEast(), ye = ne.lat > A.lat && X.lat < B.lat, We = ne.lng > A.lng && X.lng < B.lng;
          return ye && We;
        },
        // @method toBBoxString(): String
        // Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.
        toBBoxString: function() {
          return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(",");
        },
        // @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean
        // Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.
        equals: function(p, A) {
          return p ? (p = ln(p), this._southWest.equals(p.getSouthWest(), A) && this._northEast.equals(p.getNorthEast(), A)) : !1;
        },
        // @method isValid(): Boolean
        // Returns `true` if the bounds are properly initialized.
        isValid: function() {
          return !!(this._southWest && this._northEast);
        }
      };
      function ln(p, A) {
        return p instanceof qt ? p : new qt(p, A);
      }
      function Di(p, A, B) {
        if (isNaN(p) || isNaN(A))
          throw new Error("Invalid LatLng object: (" + p + ", " + A + ")");
        this.lat = +p, this.lng = +A, B !== void 0 && (this.alt = +B);
      }
      Di.prototype = {
        // @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean
        // Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.
        equals: function(p, A) {
          if (!p)
            return !1;
          p = xi(p);
          var B = Math.max(
            Math.abs(this.lat - p.lat),
            Math.abs(this.lng - p.lng)
          );
          return B <= (A === void 0 ? 1e-9 : A);
        },
        // @method toString(): String
        // Returns a string representation of the point (for debugging purposes).
        toString: function(p) {
          return "LatLng(" + ae(this.lat, p) + ", " + ae(this.lng, p) + ")";
        },
        // @method distanceTo(otherLatLng: LatLng): Number
        // Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).
        distanceTo: function(p) {
          return xs.distance(this, xi(p));
        },
        // @method wrap(): LatLng
        // Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.
        wrap: function() {
          return xs.wrapLatLng(this);
        },
        // @method toBounds(sizeInMeters: Number): LatLngBounds
        // Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.
        toBounds: function(p) {
          var A = 180 * p / 40075017, B = A / Math.cos(Math.PI / 180 * this.lat);
          return ln(
            [this.lat - A, this.lng - B],
            [this.lat + A, this.lng + B]
          );
        },
        clone: function() {
          return new Di(this.lat, this.lng, this.alt);
        }
      };
      function xi(p, A, B) {
        return p instanceof Di ? p : vt(p) && typeof p[0] != "object" ? p.length === 3 ? new Di(p[0], p[1], p[2]) : p.length === 2 ? new Di(p[0], p[1]) : null : p == null ? p : typeof p == "object" && "lat" in p ? new Di(p.lat, "lng" in p ? p.lng : p.lon, p.alt) : A === void 0 ? null : new Di(p, A, B);
      }
      var Cs = {
        // @method latLngToPoint(latlng: LatLng, zoom: Number): Point
        // Projects geographical coordinates into pixel coordinates for a given zoom.
        latLngToPoint: function(p, A) {
          var B = this.projection.project(p), X = this.scale(A);
          return this.transformation._transform(B, X);
        },
        // @method pointToLatLng(point: Point, zoom: Number): LatLng
        // The inverse of `latLngToPoint`. Projects pixel coordinates on a given
        // zoom into geographical coordinates.
        pointToLatLng: function(p, A) {
          var B = this.scale(A), X = this.transformation.untransform(p, B);
          return this.projection.unproject(X);
        },
        // @method project(latlng: LatLng): Point
        // Projects geographical coordinates into coordinates in units accepted for
        // this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).
        project: function(p) {
          return this.projection.project(p);
        },
        // @method unproject(point: Point): LatLng
        // Given a projected coordinate returns the corresponding LatLng.
        // The inverse of `project`.
        unproject: function(p) {
          return this.projection.unproject(p);
        },
        // @method scale(zoom: Number): Number
        // Returns the scale used when transforming projected coordinates into
        // pixel coordinates for a particular zoom. For example, it returns
        // `256 * 2^zoom` for Mercator-based CRS.
        scale: function(p) {
          return 256 * Math.pow(2, p);
        },
        // @method zoom(scale: Number): Number
        // Inverse of `scale()`, returns the zoom level corresponding to a scale
        // factor of `scale`.
        zoom: function(p) {
          return Math.log(p / 256) / Math.LN2;
        },
        // @method getProjectedBounds(zoom: Number): Bounds
        // Returns the projection's bounds scaled and transformed for the provided `zoom`.
        getProjectedBounds: function(p) {
          if (this.infinite)
            return null;
          var A = this.projection.bounds, B = this.scale(p), X = this.transformation.transform(A.min, B), ne = this.transformation.transform(A.max, B);
          return new Gi(X, ne);
        },
        // @method distance(latlng1: LatLng, latlng2: LatLng): Number
        // Returns the distance between two geographical coordinates.
        // @property code: String
        // Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)
        //
        // @property wrapLng: Number[]
        // An array of two numbers defining whether the longitude (horizontal) coordinate
        // axis wraps around a given range and how. Defaults to `[-180, 180]` in most
        // geographical CRSs. If `undefined`, the longitude axis does not wrap around.
        //
        // @property wrapLat: Number[]
        // Like `wrapLng`, but for the latitude (vertical) axis.
        // wrapLng: [min, max],
        // wrapLat: [min, max],
        // @property infinite: Boolean
        // If true, the coordinate space will be unbounded (infinite in both axes)
        infinite: !1,
        // @method wrapLatLng(latlng: LatLng): LatLng
        // Returns a `LatLng` where lat and lng has been wrapped according to the
        // CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.
        wrapLatLng: function(p) {
          var A = this.wrapLng ? Y(p.lng, this.wrapLng, !0) : p.lng, B = this.wrapLat ? Y(p.lat, this.wrapLat, !0) : p.lat, X = p.alt;
          return new Di(B, A, X);
        },
        // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
        // Returns a `LatLngBounds` with the same size as the given one, ensuring
        // that its center is within the CRS's bounds.
        // Only accepts actual `L.LatLngBounds` instances, not arrays.
        wrapLatLngBounds: function(p) {
          var A = p.getCenter(), B = this.wrapLatLng(A), X = A.lat - B.lat, ne = A.lng - B.lng;
          if (X === 0 && ne === 0)
            return p;
          var ye = p.getSouthWest(), We = p.getNorthEast(), at = new Di(ye.lat - X, ye.lng - ne), ft = new Di(We.lat - X, We.lng - ne);
          return new qt(at, ft);
        }
      }, xs = w({}, Cs, {
        wrapLng: [-180, 180],
        // Mean Earth Radius, as recommended for use by
        // the International Union of Geodesy and Geophysics,
        // see https://rosettacode.org/wiki/Haversine_formula
        R: 6371e3,
        // distance between two geographical points using spherical law of cosines approximation
        distance: function(p, A) {
          var B = Math.PI / 180, X = p.lat * B, ne = A.lat * B, ye = Math.sin((A.lat - p.lat) * B / 2), We = Math.sin((A.lng - p.lng) * B / 2), at = ye * ye + Math.cos(X) * Math.cos(ne) * We * We, ft = 2 * Math.atan2(Math.sqrt(at), Math.sqrt(1 - at));
          return this.R * ft;
        }
      }), Is = 6378137, De = {
        R: Is,
        MAX_LATITUDE: 85.0511287798,
        project: function(p) {
          var A = Math.PI / 180, B = this.MAX_LATITUDE, X = Math.max(Math.min(B, p.lat), -B), ne = Math.sin(X * A);
          return new fi(
            this.R * p.lng * A,
            this.R * Math.log((1 + ne) / (1 - ne)) / 2
          );
        },
        unproject: function(p) {
          var A = 180 / Math.PI;
          return new Di(
            (2 * Math.atan(Math.exp(p.y / this.R)) - Math.PI / 2) * A,
            p.x * A / this.R
          );
        },
        bounds: function() {
          var p = Is * Math.PI;
          return new Gi([-p, -p], [p, p]);
        }()
      };
      function Vs(p, A, B, X) {
        if (vt(p)) {
          this._a = p[0], this._b = p[1], this._c = p[2], this._d = p[3];
          return;
        }
        this._a = p, this._b = A, this._c = B, this._d = X;
      }
      Vs.prototype = {
        // @method transform(point: Point, scale?: Number): Point
        // Returns a transformed point, optionally multiplied by the given scale.
        // Only accepts actual `L.Point` instances, not arrays.
        transform: function(p, A) {
          return this._transform(p.clone(), A);
        },
        // destructive transform (faster)
        _transform: function(p, A) {
          return A = A || 1, p.x = A * (this._a * p.x + this._b), p.y = A * (this._c * p.y + this._d), p;
        },
        // @method untransform(point: Point, scale?: Number): Point
        // Returns the reverse transformation of the given point, optionally divided
        // by the given scale. Only accepts actual `L.Point` instances, not arrays.
        untransform: function(p, A) {
          return A = A || 1, new fi(
            (p.x / A - this._b) / this._a,
            (p.y / A - this._d) / this._c
          );
        }
      };
      function Us(p, A, B, X) {
        return new Vs(p, A, B, X);
      }
      var Zr = w({}, xs, {
        code: "EPSG:3857",
        projection: De,
        transformation: function() {
          var p = 0.5 / (Math.PI * De.R);
          return Us(p, 0.5, -p, 0.5);
        }()
      }), Et = w({}, Zr, {
        code: "EPSG:900913"
      });
      function Ws(p) {
        return document.createElementNS("http://www.w3.org/2000/svg", p);
      }
      function $n(p, A) {
        var B = "", X, ne, ye, We, at, ft;
        for (X = 0, ye = p.length; X < ye; X++) {
          for (at = p[X], ne = 0, We = at.length; ne < We; ne++)
            ft = at[ne], B += (ne ? "L" : "M") + ft.x + " " + ft.y;
          B += A ? Pe.svg ? "z" : "x" : "";
        }
        return B || "M0 0";
      }
      var $s = document.documentElement.style, vi = "ActiveXObject" in window, kn = vi && !document.addEventListener, Xs = "msLaunchUri" in navigator && !("documentMode" in document), Hr = qe("webkit"), qr = qe("android"), Wr = qe("android 2") || qe("android 3"), si = parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10), fs = qr && qe("Google") && si < 537 && !("AudioNode" in window), zn = !!window.opera, Rn = !Xs && qe("chrome"), An = qe("gecko") && !Hr && !zn && !vi, js = !Rn && qe("safari"), yo = qe("phantom"), xo = "OTransition" in $s, vo = navigator.platform.indexOf("Win") === 0, yr = vi && "transition" in $s, Mr = "WebKitCSSMatrix" in window && "m11" in new window.WebKitCSSMatrix() && !Wr, io = "MozPerspective" in $s, Ys = !window.L_DISABLE_3D && (yr || Mr || io) && !xo && !yo, Sr = typeof orientation < "u" || qe("mobile"), mi = Sr && Hr, On = Sr && Mr, Vn = !window.PointerEvent && window.MSPointerEvent, Zi = !!(window.PointerEvent || Vn), Jn = "ontouchstart" in window || !!window.TouchEvent, Fn = !window.L_NO_TOUCH && (Jn || Zi), Ls = Sr && zn, zs = Sr && An, Vo = (window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI) > 1, Ke = function() {
        var p = !1;
        try {
          var A = Object.defineProperty({}, "passive", {
            get: function() {
              p = !0;
            }
          });
          window.addEventListener("testPassiveEventSupport", J, A), window.removeEventListener("testPassiveEventSupport", J, A);
        } catch {
        }
        return p;
      }(), re = function() {
        return !!document.createElement("canvas").getContext;
      }(), le = !!(document.createElementNS && Ws("svg").createSVGRect), ge = !!le && function() {
        var p = document.createElement("div");
        return p.innerHTML = "<svg/>", (p.firstChild && p.firstChild.namespaceURI) === "http://www.w3.org/2000/svg";
      }(), Le = !le && function() {
        try {
          var p = document.createElement("div");
          p.innerHTML = '<v:shape adj="1"/>';
          var A = p.firstChild;
          return A.style.behavior = "url(#default#VML)", A && typeof A.adj == "object";
        } catch {
          return !1;
        }
      }(), Ce = navigator.platform.indexOf("Mac") === 0, Be = navigator.platform.indexOf("Linux") === 0;
      function qe(p) {
        return navigator.userAgent.toLowerCase().indexOf(p) >= 0;
      }
      var Pe = {
        ie: vi,
        ielt9: kn,
        edge: Xs,
        webkit: Hr,
        android: qr,
        android23: Wr,
        androidStock: fs,
        opera: zn,
        chrome: Rn,
        gecko: An,
        safari: js,
        phantom: yo,
        opera12: xo,
        win: vo,
        ie3d: yr,
        webkit3d: Mr,
        gecko3d: io,
        any3d: Ys,
        mobile: Sr,
        mobileWebkit: mi,
        mobileWebkit3d: On,
        msPointer: Vn,
        pointer: Zi,
        touch: Fn,
        touchNative: Jn,
        mobileOpera: Ls,
        mobileGecko: zs,
        retina: Vo,
        passiveEvents: Ke,
        canvas: re,
        svg: le,
        vml: Le,
        inlineSvg: ge,
        mac: Ce,
        linux: Be
      }, Ye = Pe.msPointer ? "MSPointerDown" : "pointerdown", Qe = Pe.msPointer ? "MSPointerMove" : "pointermove", it = Pe.msPointer ? "MSPointerUp" : "pointerup", mt = Pe.msPointer ? "MSPointerCancel" : "pointercancel", Ct = {
        touchstart: Ye,
        touchmove: Qe,
        touchend: it,
        touchcancel: mt
      }, It = {
        touchstart: Xn,
        touchmove: Hi,
        touchend: Hi,
        touchcancel: Hi
      }, Kt = {}, di = !1;
      function li(p, A, B) {
        return A === "touchstart" && $i(), It[A] ? (B = It[A].bind(this, B), p.addEventListener(Ct[A], B, !1), B) : (console.warn("wrong event specified:", A), J);
      }
      function ri(p, A, B) {
        if (!Ct[A]) {
          console.warn("wrong event specified:", A);
          return;
        }
        p.removeEventListener(Ct[A], B, !1);
      }
      function Ki(p) {
        Kt[p.pointerId] = p;
      }
      function Ni(p) {
        Kt[p.pointerId] && (Kt[p.pointerId] = p);
      }
      function Ei(p) {
        delete Kt[p.pointerId];
      }
      function $i() {
        di || (document.addEventListener(Ye, Ki, !0), document.addEventListener(Qe, Ni, !0), document.addEventListener(it, Ei, !0), document.addEventListener(mt, Ei, !0), di = !0);
      }
      function Hi(p, A) {
        if (A.pointerType !== (A.MSPOINTER_TYPE_MOUSE || "mouse")) {
          A.touches = [];
          for (var B in Kt)
            A.touches.push(Kt[B]);
          A.changedTouches = [A], p(A);
        }
      }
      function Xn(p, A) {
        A.MSPOINTER_TYPE_TOUCH && A.pointerType === A.MSPOINTER_TYPE_TOUCH && _s(A), Hi(p, A);
      }
      function Gs(p) {
        var A = {}, B, X;
        for (X in p)
          B = p[X], A[X] = B && B.bind ? B.bind(p) : B;
        return p = A, A.type = "dblclick", A.detail = 2, A.isTrusted = !1, A._simulated = !0, A;
      }
      var ps = 200;
      function vs(p, A) {
        p.addEventListener("dblclick", A);
        var B = 0, X;
        function ne(ye) {
          if (ye.detail !== 1) {
            X = ye.detail;
            return;
          }
          if (!(ye.pointerType === "mouse" || ye.sourceCapabilities && !ye.sourceCapabilities.firesTouchEvents)) {
            var We = Ho(ye);
            if (!(We.some(function(ft) {
              return ft instanceof HTMLLabelElement && ft.attributes.for;
            }) && !We.some(function(ft) {
              return ft instanceof HTMLInputElement || ft instanceof HTMLSelectElement;
            }))) {
              var at = Date.now();
              at - B <= ps ? (X++, X === 2 && A(Gs(ye))) : X = 1, B = at;
            }
          }
        }
        return p.addEventListener("click", ne), {
          dblclick: A,
          simDblclick: ne
        };
      }
      function ra(p, A) {
        p.removeEventListener("dblclick", A.dblclick), p.removeEventListener("click", A.simDblclick);
      }
      var Er = nr(
        ["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]
      ), oa = nr(
        ["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]
      ), cl = oa === "webkitTransition" || oa === "OTransition" ? oa + "End" : "transitionend";
      function Uo(p) {
        return typeof p == "string" ? document.getElementById(p) : p;
      }
      function jo(p, A) {
        var B = p.style[A] || p.currentStyle && p.currentStyle[A];
        if ((!B || B === "auto") && document.defaultView) {
          var X = document.defaultView.getComputedStyle(p, null);
          B = X ? X[A] : null;
        }
        return B === "auto" ? null : B;
      }
      function tn(p, A, B) {
        var X = document.createElement(p);
        return X.className = A || "", B && B.appendChild(X), X;
      }
      function xn(p) {
        var A = p.parentNode;
        A && A.removeChild(p);
      }
      function no(p) {
        for (; p.firstChild; )
          p.removeChild(p.firstChild);
      }
      function Go(p) {
        var A = p.parentNode;
        A && A.lastChild !== p && A.appendChild(p);
      }
      function aa(p) {
        var A = p.parentNode;
        A && A.firstChild !== p && A.insertBefore(p, A.firstChild);
      }
      function Da(p, A) {
        if (p.classList !== void 0)
          return p.classList.contains(A);
        var B = Zs(p);
        return B.length > 0 && new RegExp("(^|\\s)" + A + "(\\s|$)").test(B);
      }
      function Vi(p, A) {
        if (p.classList !== void 0)
          for (var B = Te(A), X = 0, ne = B.length; X < ne; X++)
            p.classList.add(B[X]);
        else if (!Da(p, A)) {
          var ye = Zs(p);
          hl(p, (ye ? ye + " " : "") + A);
        }
      }
      function Hn(p, A) {
        p.classList !== void 0 ? p.classList.remove(A) : hl(p, ce((" " + Zs(p) + " ").replace(" " + A + " ", " ")));
      }
      function hl(p, A) {
        p.className.baseVal === void 0 ? p.className = A : p.className.baseVal = A;
      }
      function Zs(p) {
        return p.correspondingElement && (p = p.correspondingElement), p.className.baseVal === void 0 ? p.className : p.className.baseVal;
      }
      function Qn(p, A) {
        "opacity" in p.style ? p.style.opacity = A : "filter" in p.style && Pr(p, A);
      }
      function Pr(p, A) {
        var B = !1, X = "DXImageTransform.Microsoft.Alpha";
        try {
          B = p.filters.item(X);
        } catch {
          if (A === 1)
            return;
        }
        A = Math.round(A * 100), B ? (B.Enabled = A !== 100, B.Opacity = A) : p.style.filter += " progid:" + X + "(opacity=" + A + ")";
      }
      function nr(p) {
        for (var A = document.documentElement.style, B = 0; B < p.length; B++)
          if (p[B] in A)
            return p[B];
        return !1;
      }
      function Ks(p, A, B) {
        var X = A || new fi(0, 0);
        p.style[Er] = (Pe.ie3d ? "translate(" + X.x + "px," + X.y + "px)" : "translate3d(" + X.x + "px," + X.y + "px,0)") + (B ? " scale(" + B + ")" : "");
      }
      function Yn(p, A) {
        p._leaflet_pos = A, Pe.any3d ? Ks(p, A) : (p.style.left = A.x + "px", p.style.top = A.y + "px");
      }
      function $r(p) {
        return p._leaflet_pos || new fi(0, 0);
      }
      var Ar, Cr, ka;
      if ("onselectstart" in document)
        Ar = function() {
          Bi(window, "selectstart", _s);
        }, Cr = function() {
          Cn(window, "selectstart", _s);
        };
      else {
        var la = nr(
          ["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]
        );
        Ar = function() {
          if (la) {
            var p = document.documentElement.style;
            ka = p[la], p[la] = "none";
          }
        }, Cr = function() {
          la && (document.documentElement.style[la] = ka, ka = void 0);
        };
      }
      function Zo() {
        Bi(window, "dragstart", _s);
      }
      function sr() {
        Cn(window, "dragstart", _s);
      }
      var ca, Ra;
      function ki(p) {
        for (; p.tabIndex === -1; )
          p = p.parentNode;
        p.style && (Gl(), ca = p, Ra = p.style.outlineStyle, p.style.outlineStyle = "none", Bi(window, "keydown", Gl));
      }
      function Gl() {
        ca && (ca.style.outlineStyle = Ra, ca = void 0, Ra = void 0, Cn(window, "keydown", Gl));
      }
      function ei(p) {
        do
          p = p.parentNode;
        while ((!p.offsetWidth || !p.offsetHeight) && p !== document.body);
        return p;
      }
      function ul(p) {
        var A = p.getBoundingClientRect();
        return {
          x: A.width / p.offsetWidth || 1,
          y: A.height / p.offsetHeight || 1,
          boundingClientRect: A
        };
      }
      var Oi = {
        __proto__: null,
        TRANSFORM: Er,
        TRANSITION: oa,
        TRANSITION_END: cl,
        get: Uo,
        getStyle: jo,
        create: tn,
        remove: xn,
        empty: no,
        toFront: Go,
        toBack: aa,
        hasClass: Da,
        addClass: Vi,
        removeClass: Hn,
        setClass: hl,
        getClass: Zs,
        setOpacity: Qn,
        testProp: nr,
        setTransform: Ks,
        setPosition: Yn,
        getPosition: $r,
        get disableTextSelection() {
          return Ar;
        },
        get enableTextSelection() {
          return Cr;
        },
        disableImageDrag: Zo,
        enableImageDrag: sr,
        preventOutline: ki,
        restoreOutline: Gl,
        getSizedParentNode: ei,
        getScale: ul
      };
      function Bi(p, A, B, X) {
        if (A && typeof A == "object")
          for (var ne in A)
            Fi(p, ne, A[ne], B);
        else {
          A = Te(A);
          for (var ye = 0, We = A.length; ye < We; ye++)
            Fi(p, A[ye], B, X);
        }
        return this;
      }
      var ns = "_leaflet_events";
      function Cn(p, A, B, X) {
        if (arguments.length === 1)
          ha(p), delete p[ns];
        else if (A && typeof A == "object")
          for (var ne in A)
            Li(p, ne, A[ne], B);
        else if (A = Te(A), arguments.length === 2)
          ha(p, function(at) {
            return ht(A, at) !== -1;
          });
        else
          for (var ye = 0, We = A.length; ye < We; ye++)
            Li(p, A[ye], B, X);
        return this;
      }
      function ha(p, A) {
        for (var B in p[ns]) {
          var X = B.split(/\d/)[0];
          (!A || A(X)) && Li(p, X, null, null, B);
        }
      }
      var Ot = {
        mouseenter: "mouseover",
        mouseleave: "mouseout",
        wheel: !("onwheel" in window) && "mousewheel"
      };
      function Fi(p, A, B, X) {
        var ne = A + O(B) + (X ? "_" + O(X) : "");
        if (p[ns] && p[ns][ne])
          return this;
        var ye = function(at) {
          return B.call(X || p, at || window.event);
        }, We = ye;
        !Pe.touchNative && Pe.pointer && A.indexOf("touch") === 0 ? ye = li(p, A, ye) : Pe.touch && A === "dblclick" ? ye = vs(p, ye) : "addEventListener" in p ? A === "touchstart" || A === "touchmove" || A === "wheel" || A === "mousewheel" ? p.addEventListener(Ot[A] || A, ye, Pe.passiveEvents ? { passive: !1 } : !1) : A === "mouseenter" || A === "mouseleave" ? (ye = function(at) {
          at = at || window.event, ua(p, at) && We(at);
        }, p.addEventListener(Ot[A], ye, !1)) : p.addEventListener(A, We, !1) : p.attachEvent("on" + A, ye), p[ns] = p[ns] || {}, p[ns][ne] = ye;
      }
      function Li(p, A, B, X, ne) {
        ne = ne || A + O(B) + (X ? "_" + O(X) : "");
        var ye = p[ns] && p[ns][ne];
        if (!ye)
          return this;
        !Pe.touchNative && Pe.pointer && A.indexOf("touch") === 0 ? ri(p, A, ye) : Pe.touch && A === "dblclick" ? ra(p, ye) : "removeEventListener" in p ? p.removeEventListener(Ot[A] || A, ye, !1) : p.detachEvent("on" + A, ye), p[ns][ne] = null;
      }
      function ms(p) {
        return p.stopPropagation ? p.stopPropagation() : p.originalEvent ? p.originalEvent._stopped = !0 : p.cancelBubble = !0, this;
      }
      function bo(p) {
        return Fi(p, "wheel", ms), this;
      }
      function Pi(p) {
        return Bi(p, "mousedown touchstart dblclick contextmenu", ms), p._leaflet_disable_click = !0, this;
      }
      function _s(p) {
        return p.preventDefault ? p.preventDefault() : p.returnValue = !1, this;
      }
      function Js(p) {
        return _s(p), ms(p), this;
      }
      function Ho(p) {
        if (p.composedPath)
          return p.composedPath();
        for (var A = [], B = p.target; B; )
          A.push(B), B = B.parentNode;
        return A;
      }
      function Ss(p, A) {
        if (!A)
          return new fi(p.clientX, p.clientY);
        var B = ul(A), X = B.boundingClientRect;
        return new fi(
          // offset.left/top values are in page scale (like clientX/Y),
          // whereas clientLeft/Top (border width) values are the original values (before CSS scale applies).
          (p.clientX - X.left) / B.x - A.clientLeft,
          (p.clientY - X.top) / B.y - A.clientTop
        );
      }
      var un = Pe.linux && Pe.chrome ? window.devicePixelRatio : Pe.mac ? window.devicePixelRatio * 3 : window.devicePixelRatio > 0 ? 2 * window.devicePixelRatio : 1;
      function Bc(p) {
        return Pe.edge ? p.wheelDeltaY / 2 : (
          // Don't trust window-geometry-based delta
          p.deltaY && p.deltaMode === 0 ? -p.deltaY / un : (
            // Pixels
            p.deltaY && p.deltaMode === 1 ? -p.deltaY * 20 : (
              // Lines
              p.deltaY && p.deltaMode === 2 ? -p.deltaY * 60 : (
                // Pages
                p.deltaX || p.deltaZ ? 0 : (
                  // Skip horizontal/depth wheel events
                  p.wheelDelta ? (p.wheelDeltaY || p.wheelDelta) / 2 : (
                    // Legacy IE pixels
                    p.detail && Math.abs(p.detail) < 32765 ? -p.detail * 20 : (
                      // Legacy Moz lines
                      p.detail ? p.detail / -32765 * 60 : (
                        // Legacy Moz pages
                        0
                      )
                    )
                  )
                )
              )
            )
          )
        );
      }
      function ua(p, A) {
        var B = A.relatedTarget;
        if (!B)
          return !0;
        try {
          for (; B && B !== p; )
            B = B.parentNode;
        } catch {
          return !1;
        }
        return B !== p;
      }
      var Zl = {
        __proto__: null,
        on: Bi,
        off: Cn,
        stopPropagation: ms,
        disableScrollPropagation: bo,
        disableClickPropagation: Pi,
        preventDefault: _s,
        stop: Js,
        getPropagationPath: Ho,
        getMousePosition: Ss,
        getWheelDelta: Bc,
        isExternalTarget: ua,
        addListener: Bi,
        removeListener: Cn
      }, da = Ji.extend({
        // @method run(el: HTMLElement, newPos: Point, duration?: Number, easeLinearity?: Number)
        // Run an animation of a given element to a new position, optionally setting
        // duration in seconds (`0.25` by default) and easing linearity factor (3rd
        // argument of the [cubic bezier curve](https://cubic-bezier.com/#0,0,.5,1),
        // `0.5` by default).
        run: function(p, A, B, X) {
          this.stop(), this._el = p, this._inProgress = !0, this._duration = B || 0.25, this._easeOutPower = 1 / Math.max(X || 0.5, 0.2), this._startPos = $r(p), this._offset = A.subtract(this._startPos), this._startTime = +/* @__PURE__ */ new Date(), this.fire("start"), this._animate();
        },
        // @method stop()
        // Stops the animation (if currently running).
        stop: function() {
          this._inProgress && (this._step(!0), this._complete());
        },
        _animate: function() {
          this._animId = Pt(this._animate, this), this._step();
        },
        _step: function(p) {
          var A = +/* @__PURE__ */ new Date() - this._startTime, B = this._duration * 1e3;
          A < B ? this._runFrame(this._easeOut(A / B), p) : (this._runFrame(1), this._complete());
        },
        _runFrame: function(p, A) {
          var B = this._startPos.add(this._offset.multiplyBy(p));
          A && B._round(), Yn(this._el, B), this.fire("step");
        },
        _complete: function() {
          Mi(this._animId), this._inProgress = !1, this.fire("end");
        },
        _easeOut: function(p) {
          return 1 - Math.pow(1 - p, this._easeOutPower);
        }
      }), nn = Ji.extend({
        options: {
          // @section Map State Options
          // @option crs: CRS = L.CRS.EPSG3857
          // The [Coordinate Reference System](#crs) to use. Don't change this if you're not
          // sure what it means.
          crs: Zr,
          // @option center: LatLng = undefined
          // Initial geographic center of the map
          center: void 0,
          // @option zoom: Number = undefined
          // Initial map zoom level
          zoom: void 0,
          // @option minZoom: Number = *
          // Minimum zoom level of the map.
          // If not specified and at least one `GridLayer` or `TileLayer` is in the map,
          // the lowest of their `minZoom` options will be used instead.
          minZoom: void 0,
          // @option maxZoom: Number = *
          // Maximum zoom level of the map.
          // If not specified and at least one `GridLayer` or `TileLayer` is in the map,
          // the highest of their `maxZoom` options will be used instead.
          maxZoom: void 0,
          // @option layers: Layer[] = []
          // Array of layers that will be added to the map initially
          layers: [],
          // @option maxBounds: LatLngBounds = null
          // When this option is set, the map restricts the view to the given
          // geographical bounds, bouncing the user back if the user tries to pan
          // outside the view. To set the restriction dynamically, use
          // [`setMaxBounds`](#map-setmaxbounds) method.
          maxBounds: void 0,
          // @option renderer: Renderer = *
          // The default method for drawing vector layers on the map. `L.SVG`
          // or `L.Canvas` by default depending on browser support.
          renderer: void 0,
          // @section Animation Options
          // @option zoomAnimation: Boolean = true
          // Whether the map zoom animation is enabled. By default it's enabled
          // in all browsers that support CSS3 Transitions except Android.
          zoomAnimation: !0,
          // @option zoomAnimationThreshold: Number = 4
          // Won't animate zoom if the zoom difference exceeds this value.
          zoomAnimationThreshold: 4,
          // @option fadeAnimation: Boolean = true
          // Whether the tile fade animation is enabled. By default it's enabled
          // in all browsers that support CSS3 Transitions except Android.
          fadeAnimation: !0,
          // @option markerZoomAnimation: Boolean = true
          // Whether markers animate their zoom with the zoom animation, if disabled
          // they will disappear for the length of the animation. By default it's
          // enabled in all browsers that support CSS3 Transitions except Android.
          markerZoomAnimation: !0,
          // @option transform3DLimit: Number = 2^23
          // Defines the maximum size of a CSS translation transform. The default
          // value should not be changed unless a web browser positions layers in
          // the wrong place after doing a large `panBy`.
          transform3DLimit: 8388608,
          // Precision limit of a 32-bit float
          // @section Interaction Options
          // @option zoomSnap: Number = 1
          // Forces the map's zoom level to always be a multiple of this, particularly
          // right after a [`fitBounds()`](#map-fitbounds) or a pinch-zoom.
          // By default, the zoom level snaps to the nearest integer; lower values
          // (e.g. `0.5` or `0.1`) allow for greater granularity. A value of `0`
          // means the zoom level will not be snapped after `fitBounds` or a pinch-zoom.
          zoomSnap: 1,
          // @option zoomDelta: Number = 1
          // Controls how much the map's zoom level will change after a
          // [`zoomIn()`](#map-zoomin), [`zoomOut()`](#map-zoomout), pressing `+`
          // or `-` on the keyboard, or using the [zoom controls](#control-zoom).
          // Values smaller than `1` (e.g. `0.5`) allow for greater granularity.
          zoomDelta: 1,
          // @option trackResize: Boolean = true
          // Whether the map automatically handles browser window resize to update itself.
          trackResize: !0
        },
        initialize: function(p, A) {
          A = be(this, A), this._handlers = [], this._layers = {}, this._zoomBoundLayers = {}, this._sizeChanged = !0, this._initContainer(p), this._initLayout(), this._onResize = E(this._onResize, this), this._initEvents(), A.maxBounds && this.setMaxBounds(A.maxBounds), A.zoom !== void 0 && (this._zoom = this._limitZoom(A.zoom)), A.center && A.zoom !== void 0 && this.setView(xi(A.center), A.zoom, { reset: !0 }), this.callInitHooks(), this._zoomAnimated = oa && Pe.any3d && !Pe.mobileOpera && this.options.zoomAnimation, this._zoomAnimated && (this._createAnimProxy(), Bi(this._proxy, cl, this._catchTransitionEnd, this)), this._addLayers(this.options.layers);
        },
        // @section Methods for modifying map state
        // @method setView(center: LatLng, zoom: Number, options?: Zoom/pan options): this
        // Sets the view of the map (geographical center and zoom) with the given
        // animation options.
        setView: function(p, A, B) {
          if (A = A === void 0 ? this._zoom : this._limitZoom(A), p = this._limitCenter(xi(p), A, this.options.maxBounds), B = B || {}, this._stop(), this._loaded && !B.reset && B !== !0) {
            B.animate !== void 0 && (B.zoom = w({ animate: B.animate }, B.zoom), B.pan = w({ animate: B.animate, duration: B.duration }, B.pan));
            var X = this._zoom !== A ? this._tryAnimatedZoom && this._tryAnimatedZoom(p, A, B.zoom) : this._tryAnimatedPan(p, B.pan);
            if (X)
              return clearTimeout(this._sizeTimer), this;
          }
          return this._resetView(p, A, B.pan && B.pan.noMoveStart), this;
        },
        // @method setZoom(zoom: Number, options?: Zoom/pan options): this
        // Sets the zoom of the map.
        setZoom: function(p, A) {
          return this._loaded ? this.setView(this.getCenter(), p, { zoom: A }) : (this._zoom = p, this);
        },
        // @method zoomIn(delta?: Number, options?: Zoom options): this
        // Increases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
        zoomIn: function(p, A) {
          return p = p || (Pe.any3d ? this.options.zoomDelta : 1), this.setZoom(this._zoom + p, A);
        },
        // @method zoomOut(delta?: Number, options?: Zoom options): this
        // Decreases the zoom of the map by `delta` ([`zoomDelta`](#map-zoomdelta) by default).
        zoomOut: function(p, A) {
          return p = p || (Pe.any3d ? this.options.zoomDelta : 1), this.setZoom(this._zoom - p, A);
        },
        // @method setZoomAround(latlng: LatLng, zoom: Number, options: Zoom options): this
        // Zooms the map while keeping a specified geographical point on the map
        // stationary (e.g. used internally for scroll zoom and double-click zoom).
        // @alternative
        // @method setZoomAround(offset: Point, zoom: Number, options: Zoom options): this
        // Zooms the map while keeping a specified pixel on the map (relative to the top-left corner) stationary.
        setZoomAround: function(p, A, B) {
          var X = this.getZoomScale(A), ne = this.getSize().divideBy(2), ye = p instanceof fi ? p : this.latLngToContainerPoint(p), We = ye.subtract(ne).multiplyBy(1 - 1 / X), at = this.containerPointToLatLng(ne.add(We));
          return this.setView(at, A, { zoom: B });
        },
        _getBoundsCenterZoom: function(p, A) {
          A = A || {}, p = p.getBounds ? p.getBounds() : ln(p);
          var B = ni(A.paddingTopLeft || A.padding || [0, 0]), X = ni(A.paddingBottomRight || A.padding || [0, 0]), ne = this.getBoundsZoom(p, !1, B.add(X));
          if (ne = typeof A.maxZoom == "number" ? Math.min(A.maxZoom, ne) : ne, ne === 1 / 0)
            return {
              center: p.getCenter(),
              zoom: ne
            };
          var ye = X.subtract(B).divideBy(2), We = this.project(p.getSouthWest(), ne), at = this.project(p.getNorthEast(), ne), ft = this.unproject(We.add(at).divideBy(2).add(ye), ne);
          return {
            center: ft,
            zoom: ne
          };
        },
        // @method fitBounds(bounds: LatLngBounds, options?: fitBounds options): this
        // Sets a map view that contains the given geographical bounds with the
        // maximum zoom level possible.
        fitBounds: function(p, A) {
          if (p = ln(p), !p.isValid())
            throw new Error("Bounds are not valid.");
          var B = this._getBoundsCenterZoom(p, A);
          return this.setView(B.center, B.zoom, A);
        },
        // @method fitWorld(options?: fitBounds options): this
        // Sets a map view that mostly contains the whole world with the maximum
        // zoom level possible.
        fitWorld: function(p) {
          return this.fitBounds([[-90, -180], [90, 180]], p);
        },
        // @method panTo(latlng: LatLng, options?: Pan options): this
        // Pans the map to a given center.
        panTo: function(p, A) {
          return this.setView(p, this._zoom, { pan: A });
        },
        // @method panBy(offset: Point, options?: Pan options): this
        // Pans the map by a given number of pixels (animated).
        panBy: function(p, A) {
          if (p = ni(p).round(), A = A || {}, !p.x && !p.y)
            return this.fire("moveend");
          if (A.animate !== !0 && !this.getSize().contains(p))
            return this._resetView(this.unproject(this.project(this.getCenter()).add(p)), this.getZoom()), this;
          if (this._panAnim || (this._panAnim = new da(), this._panAnim.on({
            step: this._onPanTransitionStep,
            end: this._onPanTransitionEnd
          }, this)), A.noMoveStart || this.fire("movestart"), A.animate !== !1) {
            Vi(this._mapPane, "leaflet-pan-anim");
            var B = this._getMapPanePos().subtract(p).round();
            this._panAnim.run(this._mapPane, B, A.duration || 0.25, A.easeLinearity);
          } else
            this._rawPanBy(p), this.fire("move").fire("moveend");
          return this;
        },
        // @method flyTo(latlng: LatLng, zoom?: Number, options?: Zoom/pan options): this
        // Sets the view of the map (geographical center and zoom) performing a smooth
        // pan-zoom animation.
        flyTo: function(p, A, B) {
          if (B = B || {}, B.animate === !1 || !Pe.any3d)
            return this.setView(p, A, B);
          this._stop();
          var X = this.project(this.getCenter()), ne = this.project(p), ye = this.getSize(), We = this._zoom;
          p = xi(p), A = A === void 0 ? We : A;
          var at = Math.max(ye.x, ye.y), ft = at * this.getZoomScale(We, A), Rt = ne.distanceTo(X) || 1, ii = 1.42, Ci = ii * ii;
          function Wi(es) {
            var Ao = es ? -1 : 1, Yh = es ? ft : at, Kh = ft * ft - at * at + Ao * Ci * Ci * Rt * Rt, Yc = 2 * Yh * Ci * Rt, Ha = Kh / Yc, vr = Math.sqrt(Ha * Ha + 1) - Ha, Kc = vr < 1e-9 ? -18 : Math.log(vr);
            return Kc;
          }
          function Hs(es) {
            return (Math.exp(es) - Math.exp(-es)) / 2;
          }
          function ws(es) {
            return (Math.exp(es) + Math.exp(-es)) / 2;
          }
          function Rs(es) {
            return Hs(es) / ws(es);
          }
          var ur = Wi(0);
          function Za(es) {
            return at * (ws(ur) / ws(ur + ii * es));
          }
          function nd(es) {
            return at * (ws(ur) * Rs(ur + ii * es) - Hs(ur)) / Ci;
          }
          function sd(es) {
            return 1 - Math.pow(1 - es, 1.5);
          }
          var rd = Date.now(), Xh = (Wi(1) - ur) / ii, wl = B.duration ? 1e3 * B.duration : 1e3 * Xh * 0.8;
          function ic() {
            var es = (Date.now() - rd) / wl, Ao = sd(es) * Xh;
            es <= 1 ? (this._flyToFrame = Pt(ic, this), this._move(
              this.unproject(X.add(ne.subtract(X).multiplyBy(nd(Ao) / Rt)), We),
              this.getScaleZoom(at / Za(Ao), We),
              { flyTo: !0 }
            )) : this._move(p, A)._moveEnd(!0);
          }
          return this._moveStart(!0, B.noMoveStart), ic.call(this), this;
        },
        // @method flyToBounds(bounds: LatLngBounds, options?: fitBounds options): this
        // Sets the view of the map with a smooth animation like [`flyTo`](#map-flyto),
        // but takes a bounds parameter like [`fitBounds`](#map-fitbounds).
        flyToBounds: function(p, A) {
          var B = this._getBoundsCenterZoom(p, A);
          return this.flyTo(B.center, B.zoom, A);
        },
        // @method setMaxBounds(bounds: LatLngBounds): this
        // Restricts the map view to the given bounds (see the [maxBounds](#map-maxbounds) option).
        setMaxBounds: function(p) {
          return p = ln(p), this.listens("moveend", this._panInsideMaxBounds) && this.off("moveend", this._panInsideMaxBounds), p.isValid() ? (this.options.maxBounds = p, this._loaded && this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds)) : (this.options.maxBounds = null, this);
        },
        // @method setMinZoom(zoom: Number): this
        // Sets the lower limit for the available zoom levels (see the [minZoom](#map-minzoom) option).
        setMinZoom: function(p) {
          var A = this.options.minZoom;
          return this.options.minZoom = p, this._loaded && A !== p && (this.fire("zoomlevelschange"), this.getZoom() < this.options.minZoom) ? this.setZoom(p) : this;
        },
        // @method setMaxZoom(zoom: Number): this
        // Sets the upper limit for the available zoom levels (see the [maxZoom](#map-maxzoom) option).
        setMaxZoom: function(p) {
          var A = this.options.maxZoom;
          return this.options.maxZoom = p, this._loaded && A !== p && (this.fire("zoomlevelschange"), this.getZoom() > this.options.maxZoom) ? this.setZoom(p) : this;
        },
        // @method panInsideBounds(bounds: LatLngBounds, options?: Pan options): this
        // Pans the map to the closest view that would lie inside the given bounds (if it's not already), controlling the animation using the options specific, if any.
        panInsideBounds: function(p, A) {
          this._enforcingBounds = !0;
          var B = this.getCenter(), X = this._limitCenter(B, this._zoom, ln(p));
          return B.equals(X) || this.panTo(X, A), this._enforcingBounds = !1, this;
        },
        // @method panInside(latlng: LatLng, options?: padding options): this
        // Pans the map the minimum amount to make the `latlng` visible. Use
        // padding options to fit the display to more restricted bounds.
        // If `latlng` is already within the (optionally padded) display bounds,
        // the map will not be panned.
        panInside: function(p, A) {
          A = A || {};
          var B = ni(A.paddingTopLeft || A.padding || [0, 0]), X = ni(A.paddingBottomRight || A.padding || [0, 0]), ne = this.project(this.getCenter()), ye = this.project(p), We = this.getPixelBounds(), at = an([We.min.add(B), We.max.subtract(X)]), ft = at.getSize();
          if (!at.contains(ye)) {
            this._enforcingBounds = !0;
            var Rt = ye.subtract(at.getCenter()), ii = at.extend(ye).getSize().subtract(ft);
            ne.x += Rt.x < 0 ? -ii.x : ii.x, ne.y += Rt.y < 0 ? -ii.y : ii.y, this.panTo(this.unproject(ne), A), this._enforcingBounds = !1;
          }
          return this;
        },
        // @method invalidateSize(options: Zoom/pan options): this
        // Checks if the map container size changed and updates the map if so —
        // call it after you've changed the map size dynamically, also animating
        // pan by default. If `options.pan` is `false`, panning will not occur.
        // If `options.debounceMoveend` is `true`, it will delay `moveend` event so
        // that it doesn't happen often even if the method is called many
        // times in a row.
        // @alternative
        // @method invalidateSize(animate: Boolean): this
        // Checks if the map container size changed and updates the map if so —
        // call it after you've changed the map size dynamically, also animating
        // pan by default.
        invalidateSize: function(p) {
          if (!this._loaded)
            return this;
          p = w({
            animate: !1,
            pan: !0
          }, p === !0 ? { animate: !0 } : p);
          var A = this.getSize();
          this._sizeChanged = !0, this._lastCenter = null;
          var B = this.getSize(), X = A.divideBy(2).round(), ne = B.divideBy(2).round(), ye = X.subtract(ne);
          return !ye.x && !ye.y ? this : (p.animate && p.pan ? this.panBy(ye) : (p.pan && this._rawPanBy(ye), this.fire("move"), p.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer = setTimeout(E(this.fire, this, "moveend"), 200)) : this.fire("moveend")), this.fire("resize", {
            oldSize: A,
            newSize: B
          }));
        },
        // @section Methods for modifying map state
        // @method stop(): this
        // Stops the currently running `panTo` or `flyTo` animation, if any.
        stop: function() {
          return this.setZoom(this._limitZoom(this._zoom)), this.options.zoomSnap || this.fire("viewreset"), this._stop();
        },
        // @section Geolocation methods
        // @method locate(options?: Locate options): this
        // Tries to locate the user using the Geolocation API, firing a [`locationfound`](#map-locationfound)
        // event with location data on success or a [`locationerror`](#map-locationerror) event on failure,
        // and optionally sets the map view to the user's location with respect to
        // detection accuracy (or to the world view if geolocation failed).
        // Note that, if your page doesn't use HTTPS, this method will fail in
        // modern browsers ([Chrome 50 and newer](https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins))
        // See `Locate options` for more details.
        locate: function(p) {
          if (p = this._locateOptions = w({
            timeout: 1e4,
            watch: !1
            // setView: false
            // maxZoom: <Number>
            // maximumAge: 0
            // enableHighAccuracy: false
          }, p), !("geolocation" in navigator))
            return this._handleGeolocationError({
              code: 0,
              message: "Geolocation not supported."
            }), this;
          var A = E(this._handleGeolocationResponse, this), B = E(this._handleGeolocationError, this);
          return p.watch ? this._locationWatchId = navigator.geolocation.watchPosition(A, B, p) : navigator.geolocation.getCurrentPosition(A, B, p), this;
        },
        // @method stopLocate(): this
        // Stops watching location previously initiated by `map.locate({watch: true})`
        // and aborts resetting the map view if map.locate was called with
        // `{setView: true}`.
        stopLocate: function() {
          return navigator.geolocation && navigator.geolocation.clearWatch && navigator.geolocation.clearWatch(this._locationWatchId), this._locateOptions && (this._locateOptions.setView = !1), this;
        },
        _handleGeolocationError: function(p) {
          if (this._container._leaflet_id) {
            var A = p.code, B = p.message || (A === 1 ? "permission denied" : A === 2 ? "position unavailable" : "timeout");
            this._locateOptions.setView && !this._loaded && this.fitWorld(), this.fire("locationerror", {
              code: A,
              message: "Geolocation error: " + B + "."
            });
          }
        },
        _handleGeolocationResponse: function(p) {
          if (this._container._leaflet_id) {
            var A = p.coords.latitude, B = p.coords.longitude, X = new Di(A, B), ne = X.toBounds(p.coords.accuracy * 2), ye = this._locateOptions;
            if (ye.setView) {
              var We = this.getBoundsZoom(ne);
              this.setView(X, ye.maxZoom ? Math.min(We, ye.maxZoom) : We);
            }
            var at = {
              latlng: X,
              bounds: ne,
              timestamp: p.timestamp
            };
            for (var ft in p.coords)
              typeof p.coords[ft] == "number" && (at[ft] = p.coords[ft]);
            this.fire("locationfound", at);
          }
        },
        // TODO Appropriate docs section?
        // @section Other Methods
        // @method addHandler(name: String, HandlerClass: Function): this
        // Adds a new `Handler` to the map, given its name and constructor function.
        addHandler: function(p, A) {
          if (!A)
            return this;
          var B = this[p] = new A(this);
          return this._handlers.push(B), this.options[p] && B.enable(), this;
        },
        // @method remove(): this
        // Destroys the map and clears all related event listeners.
        remove: function() {
          if (this._initEvents(!0), this.options.maxBounds && this.off("moveend", this._panInsideMaxBounds), this._containerId !== this._container._leaflet_id)
            throw new Error("Map container is being reused by another instance");
          try {
            delete this._container._leaflet_id, delete this._containerId;
          } catch {
            this._container._leaflet_id = void 0, this._containerId = void 0;
          }
          this._locationWatchId !== void 0 && this.stopLocate(), this._stop(), xn(this._mapPane), this._clearControlPos && this._clearControlPos(), this._resizeRequest && (Mi(this._resizeRequest), this._resizeRequest = null), this._clearHandlers(), this._loaded && this.fire("unload");
          var p;
          for (p in this._layers)
            this._layers[p].remove();
          for (p in this._panes)
            xn(this._panes[p]);
          return this._layers = [], this._panes = [], delete this._mapPane, delete this._renderer, this;
        },
        // @section Other Methods
        // @method createPane(name: String, container?: HTMLElement): HTMLElement
        // Creates a new [map pane](#map-pane) with the given name if it doesn't exist already,
        // then returns it. The pane is created as a child of `container`, or
        // as a child of the main map pane if not set.
        createPane: function(p, A) {
          var B = "leaflet-pane" + (p ? " leaflet-" + p.replace("Pane", "") + "-pane" : ""), X = tn("div", B, A || this._mapPane);
          return p && (this._panes[p] = X), X;
        },
        // @section Methods for Getting Map State
        // @method getCenter(): LatLng
        // Returns the geographical center of the map view
        getCenter: function() {
          return this._checkIfLoaded(), this._lastCenter && !this._moved() ? this._lastCenter.clone() : this.layerPointToLatLng(this._getCenterLayerPoint());
        },
        // @method getZoom(): Number
        // Returns the current zoom level of the map view
        getZoom: function() {
          return this._zoom;
        },
        // @method getBounds(): LatLngBounds
        // Returns the geographical bounds visible in the current map view
        getBounds: function() {
          var p = this.getPixelBounds(), A = this.unproject(p.getBottomLeft()), B = this.unproject(p.getTopRight());
          return new qt(A, B);
        },
        // @method getMinZoom(): Number
        // Returns the minimum zoom level of the map (if set in the `minZoom` option of the map or of any layers), or `0` by default.
        getMinZoom: function() {
          return this.options.minZoom === void 0 ? this._layersMinZoom || 0 : this.options.minZoom;
        },
        // @method getMaxZoom(): Number
        // Returns the maximum zoom level of the map (if set in the `maxZoom` option of the map or of any layers).
        getMaxZoom: function() {
          return this.options.maxZoom === void 0 ? this._layersMaxZoom === void 0 ? 1 / 0 : this._layersMaxZoom : this.options.maxZoom;
        },
        // @method getBoundsZoom(bounds: LatLngBounds, inside?: Boolean, padding?: Point): Number
        // Returns the maximum zoom level on which the given bounds fit to the map
        // view in its entirety. If `inside` (optional) is set to `true`, the method
        // instead returns the minimum zoom level on which the map view fits into
        // the given bounds in its entirety.
        getBoundsZoom: function(p, A, B) {
          p = ln(p), B = ni(B || [0, 0]);
          var X = this.getZoom() || 0, ne = this.getMinZoom(), ye = this.getMaxZoom(), We = p.getNorthWest(), at = p.getSouthEast(), ft = this.getSize().subtract(B), Rt = an(this.project(at, X), this.project(We, X)).getSize(), ii = Pe.any3d ? this.options.zoomSnap : 1, Ci = ft.x / Rt.x, Wi = ft.y / Rt.y, Hs = A ? Math.max(Ci, Wi) : Math.min(Ci, Wi);
          return X = this.getScaleZoom(Hs, X), ii && (X = Math.round(X / (ii / 100)) * (ii / 100), X = A ? Math.ceil(X / ii) * ii : Math.floor(X / ii) * ii), Math.max(ne, Math.min(ye, X));
        },
        // @method getSize(): Point
        // Returns the current size of the map container (in pixels).
        getSize: function() {
          return (!this._size || this._sizeChanged) && (this._size = new fi(
            this._container.clientWidth || 0,
            this._container.clientHeight || 0
          ), this._sizeChanged = !1), this._size.clone();
        },
        // @method getPixelBounds(): Bounds
        // Returns the bounds of the current map view in projected pixel
        // coordinates (sometimes useful in layer and overlay implementations).
        getPixelBounds: function(p, A) {
          var B = this._getTopLeftPoint(p, A);
          return new Gi(B, B.add(this.getSize()));
        },
        // TODO: Check semantics - isn't the pixel origin the 0,0 coord relative to
        // the map pane? "left point of the map layer" can be confusing, specially
        // since there can be negative offsets.
        // @method getPixelOrigin(): Point
        // Returns the projected pixel coordinates of the top left point of
        // the map layer (useful in custom layer and overlay implementations).
        getPixelOrigin: function() {
          return this._checkIfLoaded(), this._pixelOrigin;
        },
        // @method getPixelWorldBounds(zoom?: Number): Bounds
        // Returns the world's bounds in pixel coordinates for zoom level `zoom`.
        // If `zoom` is omitted, the map's current zoom level is used.
        getPixelWorldBounds: function(p) {
          return this.options.crs.getProjectedBounds(p === void 0 ? this.getZoom() : p);
        },
        // @section Other Methods
        // @method getPane(pane: String|HTMLElement): HTMLElement
        // Returns a [map pane](#map-pane), given its name or its HTML element (its identity).
        getPane: function(p) {
          return typeof p == "string" ? this._panes[p] : p;
        },
        // @method getPanes(): Object
        // Returns a plain object containing the names of all [panes](#map-pane) as keys and
        // the panes as values.
        getPanes: function() {
          return this._panes;
        },
        // @method getContainer: HTMLElement
        // Returns the HTML element that contains the map.
        getContainer: function() {
          return this._container;
        },
        // @section Conversion Methods
        // @method getZoomScale(toZoom: Number, fromZoom: Number): Number
        // Returns the scale factor to be applied to a map transition from zoom level
        // `fromZoom` to `toZoom`. Used internally to help with zoom animations.
        getZoomScale: function(p, A) {
          var B = this.options.crs;
          return A = A === void 0 ? this._zoom : A, B.scale(p) / B.scale(A);
        },
        // @method getScaleZoom(scale: Number, fromZoom: Number): Number
        // Returns the zoom level that the map would end up at, if it is at `fromZoom`
        // level and everything is scaled by a factor of `scale`. Inverse of
        // [`getZoomScale`](#map-getZoomScale).
        getScaleZoom: function(p, A) {
          var B = this.options.crs;
          A = A === void 0 ? this._zoom : A;
          var X = B.zoom(p * B.scale(A));
          return isNaN(X) ? 1 / 0 : X;
        },
        // @method project(latlng: LatLng, zoom: Number): Point
        // Projects a geographical coordinate `LatLng` according to the projection
        // of the map's CRS, then scales it according to `zoom` and the CRS's
        // `Transformation`. The result is pixel coordinate relative to
        // the CRS origin.
        project: function(p, A) {
          return A = A === void 0 ? this._zoom : A, this.options.crs.latLngToPoint(xi(p), A);
        },
        // @method unproject(point: Point, zoom: Number): LatLng
        // Inverse of [`project`](#map-project).
        unproject: function(p, A) {
          return A = A === void 0 ? this._zoom : A, this.options.crs.pointToLatLng(ni(p), A);
        },
        // @method layerPointToLatLng(point: Point): LatLng
        // Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
        // returns the corresponding geographical coordinate (for the current zoom level).
        layerPointToLatLng: function(p) {
          var A = ni(p).add(this.getPixelOrigin());
          return this.unproject(A);
        },
        // @method latLngToLayerPoint(latlng: LatLng): Point
        // Given a geographical coordinate, returns the corresponding pixel coordinate
        // relative to the [origin pixel](#map-getpixelorigin).
        latLngToLayerPoint: function(p) {
          var A = this.project(xi(p))._round();
          return A._subtract(this.getPixelOrigin());
        },
        // @method wrapLatLng(latlng: LatLng): LatLng
        // Returns a `LatLng` where `lat` and `lng` has been wrapped according to the
        // map's CRS's `wrapLat` and `wrapLng` properties, if they are outside the
        // CRS's bounds.
        // By default this means longitude is wrapped around the dateline so its
        // value is between -180 and +180 degrees.
        wrapLatLng: function(p) {
          return this.options.crs.wrapLatLng(xi(p));
        },
        // @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds
        // Returns a `LatLngBounds` with the same size as the given one, ensuring that
        // its center is within the CRS's bounds.
        // By default this means the center longitude is wrapped around the dateline so its
        // value is between -180 and +180 degrees, and the majority of the bounds
        // overlaps the CRS's bounds.
        wrapLatLngBounds: function(p) {
          return this.options.crs.wrapLatLngBounds(ln(p));
        },
        // @method distance(latlng1: LatLng, latlng2: LatLng): Number
        // Returns the distance between two geographical coordinates according to
        // the map's CRS. By default this measures distance in meters.
        distance: function(p, A) {
          return this.options.crs.distance(xi(p), xi(A));
        },
        // @method containerPointToLayerPoint(point: Point): Point
        // Given a pixel coordinate relative to the map container, returns the corresponding
        // pixel coordinate relative to the [origin pixel](#map-getpixelorigin).
        containerPointToLayerPoint: function(p) {
          return ni(p).subtract(this._getMapPanePos());
        },
        // @method layerPointToContainerPoint(point: Point): Point
        // Given a pixel coordinate relative to the [origin pixel](#map-getpixelorigin),
        // returns the corresponding pixel coordinate relative to the map container.
        layerPointToContainerPoint: function(p) {
          return ni(p).add(this._getMapPanePos());
        },
        // @method containerPointToLatLng(point: Point): LatLng
        // Given a pixel coordinate relative to the map container, returns
        // the corresponding geographical coordinate (for the current zoom level).
        containerPointToLatLng: function(p) {
          var A = this.containerPointToLayerPoint(ni(p));
          return this.layerPointToLatLng(A);
        },
        // @method latLngToContainerPoint(latlng: LatLng): Point
        // Given a geographical coordinate, returns the corresponding pixel coordinate
        // relative to the map container.
        latLngToContainerPoint: function(p) {
          return this.layerPointToContainerPoint(this.latLngToLayerPoint(xi(p)));
        },
        // @method mouseEventToContainerPoint(ev: MouseEvent): Point
        // Given a MouseEvent object, returns the pixel coordinate relative to the
        // map container where the event took place.
        mouseEventToContainerPoint: function(p) {
          return Ss(p, this._container);
        },
        // @method mouseEventToLayerPoint(ev: MouseEvent): Point
        // Given a MouseEvent object, returns the pixel coordinate relative to
        // the [origin pixel](#map-getpixelorigin) where the event took place.
        mouseEventToLayerPoint: function(p) {
          return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(p));
        },
        // @method mouseEventToLatLng(ev: MouseEvent): LatLng
        // Given a MouseEvent object, returns geographical coordinate where the
        // event took place.
        mouseEventToLatLng: function(p) {
          return this.layerPointToLatLng(this.mouseEventToLayerPoint(p));
        },
        // map initialization methods
        _initContainer: function(p) {
          var A = this._container = Uo(p);
          if (A) {
            if (A._leaflet_id)
              throw new Error("Map container is already initialized.");
          } else
            throw new Error("Map container not found.");
          Bi(A, "scroll", this._onScroll, this), this._containerId = O(A);
        },
        _initLayout: function() {
          var p = this._container;
          this._fadeAnimated = this.options.fadeAnimation && Pe.any3d, Vi(p, "leaflet-container" + (Pe.touch ? " leaflet-touch" : "") + (Pe.retina ? " leaflet-retina" : "") + (Pe.ielt9 ? " leaflet-oldie" : "") + (Pe.safari ? " leaflet-safari" : "") + (this._fadeAnimated ? " leaflet-fade-anim" : ""));
          var A = jo(p, "position");
          A !== "absolute" && A !== "relative" && A !== "fixed" && A !== "sticky" && (p.style.position = "relative"), this._initPanes(), this._initControlPos && this._initControlPos();
        },
        _initPanes: function() {
          var p = this._panes = {};
          this._paneRenderers = {}, this._mapPane = this.createPane("mapPane", this._container), Yn(this._mapPane, new fi(0, 0)), this.createPane("tilePane"), this.createPane("overlayPane"), this.createPane("shadowPane"), this.createPane("markerPane"), this.createPane("tooltipPane"), this.createPane("popupPane"), this.options.markerZoomAnimation || (Vi(p.markerPane, "leaflet-zoom-hide"), Vi(p.shadowPane, "leaflet-zoom-hide"));
        },
        // private methods that modify map state
        // @section Map state change events
        _resetView: function(p, A, B) {
          Yn(this._mapPane, new fi(0, 0));
          var X = !this._loaded;
          this._loaded = !0, A = this._limitZoom(A), this.fire("viewprereset");
          var ne = this._zoom !== A;
          this._moveStart(ne, B)._move(p, A)._moveEnd(ne), this.fire("viewreset"), X && this.fire("load");
        },
        _moveStart: function(p, A) {
          return p && this.fire("zoomstart"), A || this.fire("movestart"), this;
        },
        _move: function(p, A, B, X) {
          A === void 0 && (A = this._zoom);
          var ne = this._zoom !== A;
          return this._zoom = A, this._lastCenter = p, this._pixelOrigin = this._getNewPixelOrigin(p), X ? B && B.pinch && this.fire("zoom", B) : ((ne || B && B.pinch) && this.fire("zoom", B), this.fire("move", B)), this;
        },
        _moveEnd: function(p) {
          return p && this.fire("zoomend"), this.fire("moveend");
        },
        _stop: function() {
          return Mi(this._flyToFrame), this._panAnim && this._panAnim.stop(), this;
        },
        _rawPanBy: function(p) {
          Yn(this._mapPane, this._getMapPanePos().subtract(p));
        },
        _getZoomSpan: function() {
          return this.getMaxZoom() - this.getMinZoom();
        },
        _panInsideMaxBounds: function() {
          this._enforcingBounds || this.panInsideBounds(this.options.maxBounds);
        },
        _checkIfLoaded: function() {
          if (!this._loaded)
            throw new Error("Set map center and zoom first.");
        },
        // DOM event handling
        // @section Interaction events
        _initEvents: function(p) {
          this._targets = {}, this._targets[O(this._container)] = this;
          var A = p ? Cn : Bi;
          A(this._container, "click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup", this._handleDOMEvent, this), this.options.trackResize && A(window, "resize", this._onResize, this), Pe.any3d && this.options.transform3DLimit && (p ? this.off : this.on).call(this, "moveend", this._onMoveEnd);
        },
        _onResize: function() {
          Mi(this._resizeRequest), this._resizeRequest = Pt(
            function() {
              this.invalidateSize({ debounceMoveend: !0 });
            },
            this
          );
        },
        _onScroll: function() {
          this._container.scrollTop = 0, this._container.scrollLeft = 0;
        },
        _onMoveEnd: function() {
          var p = this._getMapPanePos();
          Math.max(Math.abs(p.x), Math.abs(p.y)) >= this.options.transform3DLimit && this._resetView(this.getCenter(), this.getZoom());
        },
        _findEventTargets: function(p, A) {
          for (var B = [], X, ne = A === "mouseout" || A === "mouseover", ye = p.target || p.srcElement, We = !1; ye; ) {
            if (X = this._targets[O(ye)], X && (A === "click" || A === "preclick") && this._draggableMoved(X)) {
              We = !0;
              break;
            }
            if (X && X.listens(A, !0) && (ne && !ua(ye, p) || (B.push(X), ne)) || ye === this._container)
              break;
            ye = ye.parentNode;
          }
          return !B.length && !We && !ne && this.listens(A, !0) && (B = [this]), B;
        },
        _isClickDisabled: function(p) {
          for (; p && p !== this._container; ) {
            if (p._leaflet_disable_click)
              return !0;
            p = p.parentNode;
          }
        },
        _handleDOMEvent: function(p) {
          var A = p.target || p.srcElement;
          if (!(!this._loaded || A._leaflet_disable_events || p.type === "click" && this._isClickDisabled(A))) {
            var B = p.type;
            B === "mousedown" && ki(A), this._fireDOMEvent(p, B);
          }
        },
        _mouseEvents: ["click", "dblclick", "mouseover", "mouseout", "contextmenu"],
        _fireDOMEvent: function(p, A, B) {
          if (p.type === "click") {
            var X = w({}, p);
            X.type = "preclick", this._fireDOMEvent(X, X.type, B);
          }
          var ne = this._findEventTargets(p, A);
          if (B) {
            for (var ye = [], We = 0; We < B.length; We++)
              B[We].listens(A, !0) && ye.push(B[We]);
            ne = ye.concat(ne);
          }
          if (ne.length) {
            A === "contextmenu" && _s(p);
            var at = ne[0], ft = {
              originalEvent: p
            };
            if (p.type !== "keypress" && p.type !== "keydown" && p.type !== "keyup") {
              var Rt = at.getLatLng && (!at._radius || at._radius <= 10);
              ft.containerPoint = Rt ? this.latLngToContainerPoint(at.getLatLng()) : this.mouseEventToContainerPoint(p), ft.layerPoint = this.containerPointToLayerPoint(ft.containerPoint), ft.latlng = Rt ? at.getLatLng() : this.layerPointToLatLng(ft.layerPoint);
            }
            for (We = 0; We < ne.length; We++)
              if (ne[We].fire(A, ft, !0), ft.originalEvent._stopped || ne[We].options.bubblingMouseEvents === !1 && ht(this._mouseEvents, A) !== -1)
                return;
          }
        },
        _draggableMoved: function(p) {
          return p = p.dragging && p.dragging.enabled() ? p : this, p.dragging && p.dragging.moved() || this.boxZoom && this.boxZoom.moved();
        },
        _clearHandlers: function() {
          for (var p = 0, A = this._handlers.length; p < A; p++)
            this._handlers[p].disable();
        },
        // @section Other Methods
        // @method whenReady(fn: Function, context?: Object): this
        // Runs the given function `fn` when the map gets initialized with
        // a view (center and zoom) and at least one layer, or immediately
        // if it's already initialized, optionally passing a function context.
        whenReady: function(p, A) {
          return this._loaded ? p.call(A || this, { target: this }) : this.on("load", p, A), this;
        },
        // private methods for getting map state
        _getMapPanePos: function() {
          return $r(this._mapPane) || new fi(0, 0);
        },
        _moved: function() {
          var p = this._getMapPanePos();
          return p && !p.equals([0, 0]);
        },
        _getTopLeftPoint: function(p, A) {
          var B = p && A !== void 0 ? this._getNewPixelOrigin(p, A) : this.getPixelOrigin();
          return B.subtract(this._getMapPanePos());
        },
        _getNewPixelOrigin: function(p, A) {
          var B = this.getSize()._divideBy(2);
          return this.project(p, A)._subtract(B)._add(this._getMapPanePos())._round();
        },
        _latLngToNewLayerPoint: function(p, A, B) {
          var X = this._getNewPixelOrigin(B, A);
          return this.project(p, A)._subtract(X);
        },
        _latLngBoundsToNewLayerBounds: function(p, A, B) {
          var X = this._getNewPixelOrigin(B, A);
          return an([
            this.project(p.getSouthWest(), A)._subtract(X),
            this.project(p.getNorthWest(), A)._subtract(X),
            this.project(p.getSouthEast(), A)._subtract(X),
            this.project(p.getNorthEast(), A)._subtract(X)
          ]);
        },
        // layer point of the current center
        _getCenterLayerPoint: function() {
          return this.containerPointToLayerPoint(this.getSize()._divideBy(2));
        },
        // offset of the specified place to the current center in pixels
        _getCenterOffset: function(p) {
          return this.latLngToLayerPoint(p).subtract(this._getCenterLayerPoint());
        },
        // adjust center for view to get inside bounds
        _limitCenter: function(p, A, B) {
          if (!B)
            return p;
          var X = this.project(p, A), ne = this.getSize().divideBy(2), ye = new Gi(X.subtract(ne), X.add(ne)), We = this._getBoundsOffset(ye, B, A);
          return Math.abs(We.x) <= 1 && Math.abs(We.y) <= 1 ? p : this.unproject(X.add(We), A);
        },
        // adjust offset for view to get inside bounds
        _limitOffset: function(p, A) {
          if (!A)
            return p;
          var B = this.getPixelBounds(), X = new Gi(B.min.add(p), B.max.add(p));
          return p.add(this._getBoundsOffset(X, A));
        },
        // returns offset needed for pxBounds to get inside maxBounds at a specified zoom
        _getBoundsOffset: function(p, A, B) {
          var X = an(
            this.project(A.getNorthEast(), B),
            this.project(A.getSouthWest(), B)
          ), ne = X.min.subtract(p.min), ye = X.max.subtract(p.max), We = this._rebound(ne.x, -ye.x), at = this._rebound(ne.y, -ye.y);
          return new fi(We, at);
        },
        _rebound: function(p, A) {
          return p + A > 0 ? Math.round(p - A) / 2 : Math.max(0, Math.ceil(p)) - Math.max(0, Math.floor(A));
        },
        _limitZoom: function(p) {
          var A = this.getMinZoom(), B = this.getMaxZoom(), X = Pe.any3d ? this.options.zoomSnap : 1;
          return X && (p = Math.round(p / X) * X), Math.max(A, Math.min(B, p));
        },
        _onPanTransitionStep: function() {
          this.fire("move");
        },
        _onPanTransitionEnd: function() {
          Hn(this._mapPane, "leaflet-pan-anim"), this.fire("moveend");
        },
        _tryAnimatedPan: function(p, A) {
          var B = this._getCenterOffset(p)._trunc();
          return (A && A.animate) !== !0 && !this.getSize().contains(B) ? !1 : (this.panBy(B, A), !0);
        },
        _createAnimProxy: function() {
          var p = this._proxy = tn("div", "leaflet-proxy leaflet-zoom-animated");
          this._panes.mapPane.appendChild(p), this.on("zoomanim", function(A) {
            var B = Er, X = this._proxy.style[B];
            Ks(this._proxy, this.project(A.center, A.zoom), this.getZoomScale(A.zoom, 1)), X === this._proxy.style[B] && this._animatingZoom && this._onZoomTransitionEnd();
          }, this), this.on("load moveend", this._animMoveEnd, this), this._on("unload", this._destroyAnimProxy, this);
        },
        _destroyAnimProxy: function() {
          xn(this._proxy), this.off("load moveend", this._animMoveEnd, this), delete this._proxy;
        },
        _animMoveEnd: function() {
          var p = this.getCenter(), A = this.getZoom();
          Ks(this._proxy, this.project(p, A), this.getZoomScale(A, 1));
        },
        _catchTransitionEnd: function(p) {
          this._animatingZoom && p.propertyName.indexOf("transform") >= 0 && this._onZoomTransitionEnd();
        },
        _nothingToAnimate: function() {
          return !this._container.getElementsByClassName("leaflet-zoom-animated").length;
        },
        _tryAnimatedZoom: function(p, A, B) {
          if (this._animatingZoom)
            return !0;
          if (B = B || {}, !this._zoomAnimated || B.animate === !1 || this._nothingToAnimate() || Math.abs(A - this._zoom) > this.options.zoomAnimationThreshold)
            return !1;
          var X = this.getZoomScale(A), ne = this._getCenterOffset(p)._divideBy(1 - 1 / X);
          return B.animate !== !0 && !this.getSize().contains(ne) ? !1 : (Pt(function() {
            this._moveStart(!0, B.noMoveStart || !1)._animateZoom(p, A, !0);
          }, this), !0);
        },
        _animateZoom: function(p, A, B, X) {
          this._mapPane && (B && (this._animatingZoom = !0, this._animateToCenter = p, this._animateToZoom = A, Vi(this._mapPane, "leaflet-zoom-anim")), this.fire("zoomanim", {
            center: p,
            zoom: A,
            noUpdate: X
          }), this._tempFireZoomEvent || (this._tempFireZoomEvent = this._zoom !== this._animateToZoom), this._move(this._animateToCenter, this._animateToZoom, void 0, !0), setTimeout(E(this._onZoomTransitionEnd, this), 250));
        },
        _onZoomTransitionEnd: function() {
          this._animatingZoom && (this._mapPane && Hn(this._mapPane, "leaflet-zoom-anim"), this._animatingZoom = !1, this._move(this._animateToCenter, this._animateToZoom, void 0, !0), this._tempFireZoomEvent && this.fire("zoom"), delete this._tempFireZoomEvent, this.fire("move"), this._moveEnd(!0));
        }
      });
      function dl(p, A) {
        return new nn(p, A);
      }
      var Dn = hn.extend({
        // @section
        // @aka Control Options
        options: {
          // @option position: String = 'topright'
          // The position of the control (one of the map corners). Possible values are `'topleft'`,
          // `'topright'`, `'bottomleft'` or `'bottomright'`
          position: "topright"
        },
        initialize: function(p) {
          be(this, p);
        },
        /* @section
         * Classes extending L.Control will inherit the following methods:
         *
         * @method getPosition: string
         * Returns the position of the control.
         */
        getPosition: function() {
          return this.options.position;
        },
        // @method setPosition(position: string): this
        // Sets the position of the control.
        setPosition: function(p) {
          var A = this._map;
          return A && A.removeControl(this), this.options.position = p, A && A.addControl(this), this;
        },
        // @method getContainer: HTMLElement
        // Returns the HTMLElement that contains the control.
        getContainer: function() {
          return this._container;
        },
        // @method addTo(map: Map): this
        // Adds the control to the given map.
        addTo: function(p) {
          this.remove(), this._map = p;
          var A = this._container = this.onAdd(p), B = this.getPosition(), X = p._controlCorners[B];
          return Vi(A, "leaflet-control"), B.indexOf("bottom") !== -1 ? X.insertBefore(A, X.firstChild) : X.appendChild(A), this._map.on("unload", this.remove, this), this;
        },
        // @method remove: this
        // Removes the control from the map it is currently active on.
        remove: function() {
          return this._map ? (xn(this._container), this.onRemove && this.onRemove(this._map), this._map.off("unload", this.remove, this), this._map = null, this) : this;
        },
        _refocusOnMap: function(p) {
          this._map && p && p.screenX > 0 && p.screenY > 0 && this._map.getContainer().focus();
        }
      }), rr = function(p) {
        return new Dn(p);
      };
      nn.include({
        // @method addControl(control: Control): this
        // Adds the given control to the map
        addControl: function(p) {
          return p.addTo(this), this;
        },
        // @method removeControl(control: Control): this
        // Removes the given control from the map
        removeControl: function(p) {
          return p.remove(), this;
        },
        _initControlPos: function() {
          var p = this._controlCorners = {}, A = "leaflet-", B = this._controlContainer = tn("div", A + "control-container", this._container);
          function X(ne, ye) {
            var We = A + ne + " " + A + ye;
            p[ne + ye] = tn("div", We, B);
          }
          X("top", "left"), X("top", "right"), X("bottom", "left"), X("bottom", "right");
        },
        _clearControlPos: function() {
          for (var p in this._controlCorners)
            xn(this._controlCorners[p]);
          xn(this._controlContainer), delete this._controlCorners, delete this._controlContainer;
        }
      });
      var ss = Dn.extend({
        // @section
        // @aka Control.Layers options
        options: {
          // @option collapsed: Boolean = true
          // If `true`, the control will be collapsed into an icon and expanded on mouse hover, touch, or keyboard activation.
          collapsed: !0,
          position: "topright",
          // @option autoZIndex: Boolean = true
          // If `true`, the control will assign zIndexes in increasing order to all of its layers so that the order is preserved when switching them on/off.
          autoZIndex: !0,
          // @option hideSingleBase: Boolean = false
          // If `true`, the base layers in the control will be hidden when there is only one.
          hideSingleBase: !1,
          // @option sortLayers: Boolean = false
          // Whether to sort the layers. When `false`, layers will keep the order
          // in which they were added to the control.
          sortLayers: !1,
          // @option sortFunction: Function = *
          // A [compare function](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
          // that will be used for sorting the layers, when `sortLayers` is `true`.
          // The function receives both the `L.Layer` instances and their names, as in
          // `sortFunction(layerA, layerB, nameA, nameB)`.
          // By default, it sorts layers alphabetically by their name.
          sortFunction: function(p, A, B, X) {
            return B < X ? -1 : X < B ? 1 : 0;
          }
        },
        initialize: function(p, A, B) {
          be(this, B), this._layerControlInputs = [], this._layers = [], this._lastZIndex = 0, this._handlingClick = !1, this._preventClick = !1;
          for (var X in p)
            this._addLayer(p[X], X);
          for (X in A)
            this._addLayer(A[X], X, !0);
        },
        onAdd: function(p) {
          this._initLayout(), this._update(), this._map = p, p.on("zoomend", this._checkDisabledLayers, this);
          for (var A = 0; A < this._layers.length; A++)
            this._layers[A].layer.on("add remove", this._onLayerChange, this);
          return this._container;
        },
        addTo: function(p) {
          return Dn.prototype.addTo.call(this, p), this._expandIfNotCollapsed();
        },
        onRemove: function() {
          this._map.off("zoomend", this._checkDisabledLayers, this);
          for (var p = 0; p < this._layers.length; p++)
            this._layers[p].layer.off("add remove", this._onLayerChange, this);
        },
        // @method addBaseLayer(layer: Layer, name: String): this
        // Adds a base layer (radio button entry) with the given name to the control.
        addBaseLayer: function(p, A) {
          return this._addLayer(p, A), this._map ? this._update() : this;
        },
        // @method addOverlay(layer: Layer, name: String): this
        // Adds an overlay (checkbox entry) with the given name to the control.
        addOverlay: function(p, A) {
          return this._addLayer(p, A, !0), this._map ? this._update() : this;
        },
        // @method removeLayer(layer: Layer): this
        // Remove the given layer from the control.
        removeLayer: function(p) {
          p.off("add remove", this._onLayerChange, this);
          var A = this._getLayer(O(p));
          return A && this._layers.splice(this._layers.indexOf(A), 1), this._map ? this._update() : this;
        },
        // @method expand(): this
        // Expand the control container if collapsed.
        expand: function() {
          Vi(this._container, "leaflet-control-layers-expanded"), this._section.style.height = null;
          var p = this._map.getSize().y - (this._container.offsetTop + 50);
          return p < this._section.clientHeight ? (Vi(this._section, "leaflet-control-layers-scrollbar"), this._section.style.height = p + "px") : Hn(this._section, "leaflet-control-layers-scrollbar"), this._checkDisabledLayers(), this;
        },
        // @method collapse(): this
        // Collapse the control container if expanded.
        collapse: function() {
          return Hn(this._container, "leaflet-control-layers-expanded"), this;
        },
        _initLayout: function() {
          var p = "leaflet-control-layers", A = this._container = tn("div", p), B = this.options.collapsed;
          A.setAttribute("aria-haspopup", !0), Pi(A), bo(A);
          var X = this._section = tn("section", p + "-list");
          B && (this._map.on("click", this.collapse, this), Bi(A, {
            mouseenter: this._expandSafely,
            mouseleave: this.collapse
          }, this));
          var ne = this._layersLink = tn("a", p + "-toggle", A);
          ne.href = "#", ne.title = "Layers", ne.setAttribute("role", "button"), Bi(ne, {
            keydown: function(ye) {
              ye.keyCode === 13 && this._expandSafely();
            },
            // Certain screen readers intercept the key event and instead send a click event
            click: function(ye) {
              _s(ye), this._expandSafely();
            }
          }, this), B || this.expand(), this._baseLayersList = tn("div", p + "-base", X), this._separator = tn("div", p + "-separator", X), this._overlaysList = tn("div", p + "-overlays", X), A.appendChild(X);
        },
        _getLayer: function(p) {
          for (var A = 0; A < this._layers.length; A++)
            if (this._layers[A] && O(this._layers[A].layer) === p)
              return this._layers[A];
        },
        _addLayer: function(p, A, B) {
          this._map && p.on("add remove", this._onLayerChange, this), this._layers.push({
            layer: p,
            name: A,
            overlay: B
          }), this.options.sortLayers && this._layers.sort(E(function(X, ne) {
            return this.options.sortFunction(X.layer, ne.layer, X.name, ne.name);
          }, this)), this.options.autoZIndex && p.setZIndex && (this._lastZIndex++, p.setZIndex(this._lastZIndex)), this._expandIfNotCollapsed();
        },
        _update: function() {
          if (!this._container)
            return this;
          no(this._baseLayersList), no(this._overlaysList), this._layerControlInputs = [];
          var p, A, B, X, ne = 0;
          for (B = 0; B < this._layers.length; B++)
            X = this._layers[B], this._addItem(X), A = A || X.overlay, p = p || !X.overlay, ne += X.overlay ? 0 : 1;
          return this.options.hideSingleBase && (p = p && ne > 1, this._baseLayersList.style.display = p ? "" : "none"), this._separator.style.display = A && p ? "" : "none", this;
        },
        _onLayerChange: function(p) {
          this._handlingClick || this._update();
          var A = this._getLayer(O(p.target)), B = A.overlay ? p.type === "add" ? "overlayadd" : "overlayremove" : p.type === "add" ? "baselayerchange" : null;
          B && this._map.fire(B, A);
        },
        // IE7 bugs out if you create a radio dynamically, so you have to do it this hacky way (see https://stackoverflow.com/a/119079)
        _createRadioElement: function(p, A) {
          var B = '<input type="radio" class="leaflet-control-layers-selector" name="' + p + '"' + (A ? ' checked="checked"' : "") + "/>", X = document.createElement("div");
          return X.innerHTML = B, X.firstChild;
        },
        _addItem: function(p) {
          var A = document.createElement("label"), B = this._map.hasLayer(p.layer), X;
          p.overlay ? (X = document.createElement("input"), X.type = "checkbox", X.className = "leaflet-control-layers-selector", X.defaultChecked = B) : X = this._createRadioElement("leaflet-base-layers_" + O(this), B), this._layerControlInputs.push(X), X.layerId = O(p.layer), Bi(X, "click", this._onInputClick, this);
          var ne = document.createElement("span");
          ne.innerHTML = " " + p.name;
          var ye = document.createElement("span");
          A.appendChild(ye), ye.appendChild(X), ye.appendChild(ne);
          var We = p.overlay ? this._overlaysList : this._baseLayersList;
          return We.appendChild(A), this._checkDisabledLayers(), A;
        },
        _onInputClick: function() {
          if (!this._preventClick) {
            var p = this._layerControlInputs, A, B, X = [], ne = [];
            this._handlingClick = !0;
            for (var ye = p.length - 1; ye >= 0; ye--)
              A = p[ye], B = this._getLayer(A.layerId).layer, A.checked ? X.push(B) : A.checked || ne.push(B);
            for (ye = 0; ye < ne.length; ye++)
              this._map.hasLayer(ne[ye]) && this._map.removeLayer(ne[ye]);
            for (ye = 0; ye < X.length; ye++)
              this._map.hasLayer(X[ye]) || this._map.addLayer(X[ye]);
            this._handlingClick = !1, this._refocusOnMap();
          }
        },
        _checkDisabledLayers: function() {
          for (var p = this._layerControlInputs, A, B, X = this._map.getZoom(), ne = p.length - 1; ne >= 0; ne--)
            A = p[ne], B = this._getLayer(A.layerId).layer, A.disabled = B.options.minZoom !== void 0 && X < B.options.minZoom || B.options.maxZoom !== void 0 && X > B.options.maxZoom;
        },
        _expandIfNotCollapsed: function() {
          return this._map && !this.options.collapsed && this.expand(), this;
        },
        _expandSafely: function() {
          var p = this._section;
          this._preventClick = !0, Bi(p, "click", _s), this.expand();
          var A = this;
          setTimeout(function() {
            Cn(p, "click", _s), A._preventClick = !1;
          });
        }
      }), fa = function(p, A, B) {
        return new ss(p, A, B);
      }, wo = Dn.extend({
        // @section
        // @aka Control.Zoom options
        options: {
          position: "topleft",
          // @option zoomInText: String = '<span aria-hidden="true">+</span>'
          // The text set on the 'zoom in' button.
          zoomInText: '<span aria-hidden="true">+</span>',
          // @option zoomInTitle: String = 'Zoom in'
          // The title set on the 'zoom in' button.
          zoomInTitle: "Zoom in",
          // @option zoomOutText: String = '<span aria-hidden="true">&#x2212;</span>'
          // The text set on the 'zoom out' button.
          zoomOutText: '<span aria-hidden="true">&#x2212;</span>',
          // @option zoomOutTitle: String = 'Zoom out'
          // The title set on the 'zoom out' button.
          zoomOutTitle: "Zoom out"
        },
        onAdd: function(p) {
          var A = "leaflet-control-zoom", B = tn("div", A + " leaflet-bar"), X = this.options;
          return this._zoomInButton = this._createButton(
            X.zoomInText,
            X.zoomInTitle,
            A + "-in",
            B,
            this._zoomIn
          ), this._zoomOutButton = this._createButton(
            X.zoomOutText,
            X.zoomOutTitle,
            A + "-out",
            B,
            this._zoomOut
          ), this._updateDisabled(), p.on("zoomend zoomlevelschange", this._updateDisabled, this), B;
        },
        onRemove: function(p) {
          p.off("zoomend zoomlevelschange", this._updateDisabled, this);
        },
        disable: function() {
          return this._disabled = !0, this._updateDisabled(), this;
        },
        enable: function() {
          return this._disabled = !1, this._updateDisabled(), this;
        },
        _zoomIn: function(p) {
          !this._disabled && this._map._zoom < this._map.getMaxZoom() && this._map.zoomIn(this._map.options.zoomDelta * (p.shiftKey ? 3 : 1));
        },
        _zoomOut: function(p) {
          !this._disabled && this._map._zoom > this._map.getMinZoom() && this._map.zoomOut(this._map.options.zoomDelta * (p.shiftKey ? 3 : 1));
        },
        _createButton: function(p, A, B, X, ne) {
          var ye = tn("a", B, X);
          return ye.innerHTML = p, ye.href = "#", ye.title = A, ye.setAttribute("role", "button"), ye.setAttribute("aria-label", A), Pi(ye), Bi(ye, "click", Js), Bi(ye, "click", ne, this), Bi(ye, "click", this._refocusOnMap, this), ye;
        },
        _updateDisabled: function() {
          var p = this._map, A = "leaflet-disabled";
          Hn(this._zoomInButton, A), Hn(this._zoomOutButton, A), this._zoomInButton.setAttribute("aria-disabled", "false"), this._zoomOutButton.setAttribute("aria-disabled", "false"), (this._disabled || p._zoom === p.getMinZoom()) && (Vi(this._zoomOutButton, A), this._zoomOutButton.setAttribute("aria-disabled", "true")), (this._disabled || p._zoom === p.getMaxZoom()) && (Vi(this._zoomInButton, A), this._zoomInButton.setAttribute("aria-disabled", "true"));
        }
      });
      nn.mergeOptions({
        zoomControl: !0
      }), nn.addInitHook(function() {
        this.options.zoomControl && (this.zoomControl = new wo(), this.addControl(this.zoomControl));
      });
      var vn = function(p) {
        return new wo(p);
      }, Ir = Dn.extend({
        // @section
        // @aka Control.Scale options
        options: {
          position: "bottomleft",
          // @option maxWidth: Number = 100
          // Maximum width of the control in pixels. The width is set dynamically to show round values (e.g. 100, 200, 500).
          maxWidth: 100,
          // @option metric: Boolean = True
          // Whether to show the metric scale line (m/km).
          metric: !0,
          // @option imperial: Boolean = True
          // Whether to show the imperial scale line (mi/ft).
          imperial: !0
          // @option updateWhenIdle: Boolean = false
          // If `true`, the control is updated on [`moveend`](#map-moveend), otherwise it's always up-to-date (updated on [`move`](#map-move)).
        },
        onAdd: function(p) {
          var A = "leaflet-control-scale", B = tn("div", A), X = this.options;
          return this._addScales(X, A + "-line", B), p.on(X.updateWhenIdle ? "moveend" : "move", this._update, this), p.whenReady(this._update, this), B;
        },
        onRemove: function(p) {
          p.off(this.options.updateWhenIdle ? "moveend" : "move", this._update, this);
        },
        _addScales: function(p, A, B) {
          p.metric && (this._mScale = tn("div", A, B)), p.imperial && (this._iScale = tn("div", A, B));
        },
        _update: function() {
          var p = this._map, A = p.getSize().y / 2, B = p.distance(
            p.containerPointToLatLng([0, A]),
            p.containerPointToLatLng([this.options.maxWidth, A])
          );
          this._updateScales(B);
        },
        _updateScales: function(p) {
          this.options.metric && p && this._updateMetric(p), this.options.imperial && p && this._updateImperial(p);
        },
        _updateMetric: function(p) {
          var A = this._getRoundNum(p), B = A < 1e3 ? A + " m" : A / 1e3 + " km";
          this._updateScale(this._mScale, B, A / p);
        },
        _updateImperial: function(p) {
          var A = p * 3.2808399, B, X, ne;
          A > 5280 ? (B = A / 5280, X = this._getRoundNum(B), this._updateScale(this._iScale, X + " mi", X / B)) : (ne = this._getRoundNum(A), this._updateScale(this._iScale, ne + " ft", ne / A));
        },
        _updateScale: function(p, A, B) {
          p.style.width = Math.round(this.options.maxWidth * B) + "px", p.innerHTML = A;
        },
        _getRoundNum: function(p) {
          var A = Math.pow(10, (Math.floor(p) + "").length - 1), B = p / A;
          return B = B >= 10 ? 10 : B >= 5 ? 5 : B >= 3 ? 3 : B >= 2 ? 2 : 1, A * B;
        }
      }), Lr = function(p) {
        return new Ir(p);
      }, qn = '<svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="12" height="8" viewBox="0 0 12 8" class="leaflet-attribution-flag"><path fill="#4C7BE1" d="M0 0h12v4H0z"/><path fill="#FFD500" d="M0 4h12v3H0z"/><path fill="#E0BC00" d="M0 7h12v1H0z"/></svg>', pa = Dn.extend({
        // @section
        // @aka Control.Attribution options
        options: {
          position: "bottomright",
          // @option prefix: String|false = 'Leaflet'
          // The HTML text shown before the attributions. Pass `false` to disable.
          prefix: '<a href="https://leafletjs.com" title="A JavaScript library for interactive maps">' + (Pe.inlineSvg ? qn + " " : "") + "Leaflet</a>"
        },
        initialize: function(p) {
          be(this, p), this._attributions = {};
        },
        onAdd: function(p) {
          p.attributionControl = this, this._container = tn("div", "leaflet-control-attribution"), Pi(this._container);
          for (var A in p._layers)
            p._layers[A].getAttribution && this.addAttribution(p._layers[A].getAttribution());
          return this._update(), p.on("layeradd", this._addAttribution, this), this._container;
        },
        onRemove: function(p) {
          p.off("layeradd", this._addAttribution, this);
        },
        _addAttribution: function(p) {
          p.layer.getAttribution && (this.addAttribution(p.layer.getAttribution()), p.layer.once("remove", function() {
            this.removeAttribution(p.layer.getAttribution());
          }, this));
        },
        // @method setPrefix(prefix: String|false): this
        // The HTML text shown before the attributions. Pass `false` to disable.
        setPrefix: function(p) {
          return this.options.prefix = p, this._update(), this;
        },
        // @method addAttribution(text: String): this
        // Adds an attribution text (e.g. `'&copy; OpenStreetMap contributors'`).
        addAttribution: function(p) {
          return p ? (this._attributions[p] || (this._attributions[p] = 0), this._attributions[p]++, this._update(), this) : this;
        },
        // @method removeAttribution(text: String): this
        // Removes an attribution text.
        removeAttribution: function(p) {
          return p ? (this._attributions[p] && (this._attributions[p]--, this._update()), this) : this;
        },
        _update: function() {
          if (this._map) {
            var p = [];
            for (var A in this._attributions)
              this._attributions[A] && p.push(A);
            var B = [];
            this.options.prefix && B.push(this.options.prefix), p.length && B.push(p.join(", ")), this._container.innerHTML = B.join(' <span aria-hidden="true">|</span> ');
          }
        }
      });
      nn.mergeOptions({
        attributionControl: !0
      }), nn.addInitHook(function() {
        this.options.attributionControl && new pa().addTo(this);
      });
      var zr = function(p) {
        return new pa(p);
      };
      Dn.Layers = ss, Dn.Zoom = wo, Dn.Scale = Ir, Dn.Attribution = pa, rr.layers = fa, rr.zoom = vn, rr.scale = Lr, rr.attribution = zr;
      var Es = hn.extend({
        initialize: function(p) {
          this._map = p;
        },
        // @method enable(): this
        // Enables the handler
        enable: function() {
          return this._enabled ? this : (this._enabled = !0, this.addHooks(), this);
        },
        // @method disable(): this
        // Disables the handler
        disable: function() {
          return this._enabled ? (this._enabled = !1, this.removeHooks(), this) : this;
        },
        // @method enabled(): Boolean
        // Returns `true` if the handler is enabled
        enabled: function() {
          return !!this._enabled;
        }
        // @section Extension methods
        // Classes inheriting from `Handler` must implement the two following methods:
        // @method addHooks()
        // Called when the handler is enabled, should add event hooks.
        // @method removeHooks()
        // Called when the handler is disabled, should remove the event hooks added previously.
      });
      Es.addTo = function(p, A) {
        return p.addHandler(A, this), this;
      };
      var Oa = { Events: Si }, qo = Pe.touch ? "touchstart mousedown" : "mousedown", Wo = Ji.extend({
        options: {
          // @section
          // @aka Draggable options
          // @option clickTolerance: Number = 3
          // The max number of pixels a user can shift the mouse pointer during a click
          // for it to be considered a valid click (as opposed to a mouse drag).
          clickTolerance: 3
        },
        // @constructor L.Draggable(el: HTMLElement, dragHandle?: HTMLElement, preventOutline?: Boolean, options?: Draggable options)
        // Creates a `Draggable` object for moving `el` when you start dragging the `dragHandle` element (equals `el` itself by default).
        initialize: function(p, A, B, X) {
          be(this, X), this._element = p, this._dragStartTarget = A || p, this._preventOutline = B;
        },
        // @method enable()
        // Enables the dragging ability
        enable: function() {
          this._enabled || (Bi(this._dragStartTarget, qo, this._onDown, this), this._enabled = !0);
        },
        // @method disable()
        // Disables the dragging ability
        disable: function() {
          this._enabled && (Wo._dragging === this && this.finishDrag(!0), Cn(this._dragStartTarget, qo, this._onDown, this), this._enabled = !1, this._moved = !1);
        },
        _onDown: function(p) {
          if (this._enabled && (this._moved = !1, !Da(this._element, "leaflet-zoom-anim"))) {
            if (p.touches && p.touches.length !== 1) {
              Wo._dragging === this && this.finishDrag();
              return;
            }
            if (!(Wo._dragging || p.shiftKey || p.which !== 1 && p.button !== 1 && !p.touches) && (Wo._dragging = this, this._preventOutline && ki(this._element), Zo(), Ar(), !this._moving)) {
              this.fire("down");
              var A = p.touches ? p.touches[0] : p, B = ei(this._element);
              this._startPoint = new fi(A.clientX, A.clientY), this._startPos = $r(this._element), this._parentScale = ul(B);
              var X = p.type === "mousedown";
              Bi(document, X ? "mousemove" : "touchmove", this._onMove, this), Bi(document, X ? "mouseup" : "touchend touchcancel", this._onUp, this);
            }
          }
        },
        _onMove: function(p) {
          if (this._enabled) {
            if (p.touches && p.touches.length > 1) {
              this._moved = !0;
              return;
            }
            var A = p.touches && p.touches.length === 1 ? p.touches[0] : p, B = new fi(A.clientX, A.clientY)._subtract(this._startPoint);
            !B.x && !B.y || Math.abs(B.x) + Math.abs(B.y) < this.options.clickTolerance || (B.x /= this._parentScale.x, B.y /= this._parentScale.y, _s(p), this._moved || (this.fire("dragstart"), this._moved = !0, Vi(document.body, "leaflet-dragging"), this._lastTarget = p.target || p.srcElement, window.SVGElementInstance && this._lastTarget instanceof window.SVGElementInstance && (this._lastTarget = this._lastTarget.correspondingUseElement), Vi(this._lastTarget, "leaflet-drag-target")), this._newPos = this._startPos.add(B), this._moving = !0, this._lastEvent = p, this._updatePosition());
          }
        },
        _updatePosition: function() {
          var p = { originalEvent: this._lastEvent };
          this.fire("predrag", p), Yn(this._element, this._newPos), this.fire("drag", p);
        },
        _onUp: function() {
          this._enabled && this.finishDrag();
        },
        finishDrag: function(p) {
          Hn(document.body, "leaflet-dragging"), this._lastTarget && (Hn(this._lastTarget, "leaflet-drag-target"), this._lastTarget = null), Cn(document, "mousemove touchmove", this._onMove, this), Cn(document, "mouseup touchend touchcancel", this._onUp, this), sr(), Cr();
          var A = this._moved && this._moving;
          this._moving = !1, Wo._dragging = !1, A && this.fire("dragend", {
            noInertia: p,
            distance: this._newPos.distanceTo(this._startPos)
          });
        }
      });
      function so(p, A, B) {
        var X, ne = [1, 4, 2, 8], ye, We, at, ft, Rt, ii, Ci, Wi;
        for (ye = 0, ii = p.length; ye < ii; ye++)
          p[ye]._code = Ds(p[ye], A);
        for (at = 0; at < 4; at++) {
          for (Ci = ne[at], X = [], ye = 0, ii = p.length, We = ii - 1; ye < ii; We = ye++)
            ft = p[ye], Rt = p[We], ft._code & Ci ? Rt._code & Ci || (Wi = _l(Rt, ft, Ci, A, B), Wi._code = Ds(Wi, A), X.push(Wi)) : (Rt._code & Ci && (Wi = _l(Rt, ft, Ci, A, B), Wi._code = Ds(Wi, A), X.push(Wi)), X.push(ft));
          p = X;
        }
        return p;
      }
      function Nc(p, A) {
        var B, X, ne, ye, We, at, ft, Rt, ii;
        if (!p || p.length === 0)
          throw new Error("latlngs not passed");
        rs(p) || (console.warn("latlngs are not flat! Only the first ring will be used"), p = p[0]);
        var Ci = xi([0, 0]), Wi = ln(p), Hs = Wi.getNorthWest().distanceTo(Wi.getSouthWest()) * Wi.getNorthEast().distanceTo(Wi.getNorthWest());
        Hs < 1700 && (Ci = Fa(p));
        var ws = p.length, Rs = [];
        for (B = 0; B < ws; B++) {
          var ur = xi(p[B]);
          Rs.push(A.project(xi([ur.lat - Ci.lat, ur.lng - Ci.lng])));
        }
        for (at = ft = Rt = 0, B = 0, X = ws - 1; B < ws; X = B++)
          ne = Rs[B], ye = Rs[X], We = ne.y * ye.x - ye.y * ne.x, ft += (ne.x + ye.x) * We, Rt += (ne.y + ye.y) * We, at += We * 3;
        at === 0 ? ii = Rs[0] : ii = [ft / at, Rt / at];
        var Za = A.unproject(ni(ii));
        return xi([Za.lat + Ci.lat, Za.lng + Ci.lng]);
      }
      function Fa(p) {
        for (var A = 0, B = 0, X = 0, ne = 0; ne < p.length; ne++) {
          var ye = xi(p[ne]);
          A += ye.lat, B += ye.lng, X++;
        }
        return xi([A / X, B / X]);
      }
      var or = {
        __proto__: null,
        clipPolygon: so,
        polygonCenter: Nc,
        centroid: Fa
      };
      function fl(p, A) {
        if (!A || !p.length)
          return p.slice();
        var B = A * A;
        return p = Qu(p, B), p = ml(p, B), p;
      }
      function pl(p, A, B) {
        return Math.sqrt($o(p, A, B, !0));
      }
      function Nh(p, A, B) {
        return $o(p, A, B);
      }
      function ml(p, A) {
        var B = p.length, X = typeof Uint8Array != void 0 + "" ? Uint8Array : Array, ne = new X(B);
        ne[0] = ne[B - 1] = 1, Vc(p, ne, A, 0, B - 1);
        var ye, We = [];
        for (ye = 0; ye < B; ye++)
          ne[ye] && We.push(p[ye]);
        return We;
      }
      function Vc(p, A, B, X, ne) {
        var ye = 0, We, at, ft;
        for (at = X + 1; at <= ne - 1; at++)
          ft = $o(p[at], p[X], p[ne], !0), ft > ye && (We = at, ye = ft);
        ye > B && (A[We] = 1, Vc(p, A, B, X, We), Vc(p, A, B, We, ne));
      }
      function Qu(p, A) {
        for (var B = [p[0]], X = 1, ne = 0, ye = p.length; X < ye; X++)
          Vh(p[X], p[ne]) > A && (B.push(p[X]), ne = X);
        return ne < ye - 1 && B.push(p[ye - 1]), B;
      }
      var Ba;
      function Na(p, A, B, X, ne) {
        var ye = X ? Ba : Ds(p, B), We = Ds(A, B), at, ft, Rt;
        for (Ba = We; ; ) {
          if (!(ye | We))
            return [p, A];
          if (ye & We)
            return !1;
          at = ye || We, ft = _l(p, A, at, B, ne), Rt = Ds(ft, B), at === ye ? (p = ft, ye = Rt) : (A = ft, We = Rt);
        }
      }
      function _l(p, A, B, X, ne) {
        var ye = A.x - p.x, We = A.y - p.y, at = X.min, ft = X.max, Rt, ii;
        return B & 8 ? (Rt = p.x + ye * (ft.y - p.y) / We, ii = ft.y) : B & 4 ? (Rt = p.x + ye * (at.y - p.y) / We, ii = at.y) : B & 2 ? (Rt = ft.x, ii = p.y + We * (ft.x - p.x) / ye) : B & 1 && (Rt = at.x, ii = p.y + We * (at.x - p.x) / ye), new fi(Rt, ii, ne);
      }
      function Ds(p, A) {
        var B = 0;
        return p.x < A.min.x ? B |= 1 : p.x > A.max.x && (B |= 2), p.y < A.min.y ? B |= 4 : p.y > A.max.y && (B |= 8), B;
      }
      function Vh(p, A) {
        var B = A.x - p.x, X = A.y - p.y;
        return B * B + X * X;
      }
      function $o(p, A, B, X) {
        var ne = A.x, ye = A.y, We = B.x - ne, at = B.y - ye, ft = We * We + at * at, Rt;
        return ft > 0 && (Rt = ((p.x - ne) * We + (p.y - ye) * at) / ft, Rt > 1 ? (ne = B.x, ye = B.y) : Rt > 0 && (ne += We * Rt, ye += at * Rt)), We = p.x - ne, at = p.y - ye, X ? We * We + at * at : new fi(ne, ye);
      }
      function rs(p) {
        return !vt(p[0]) || typeof p[0][0] != "object" && typeof p[0][0] < "u";
      }
      function Uh(p) {
        return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."), rs(p);
      }
      function jh(p, A) {
        var B, X, ne, ye, We, at, ft, Rt;
        if (!p || p.length === 0)
          throw new Error("latlngs not passed");
        rs(p) || (console.warn("latlngs are not flat! Only the first ring will be used"), p = p[0]);
        var ii = xi([0, 0]), Ci = ln(p), Wi = Ci.getNorthWest().distanceTo(Ci.getSouthWest()) * Ci.getNorthEast().distanceTo(Ci.getNorthWest());
        Wi < 1700 && (ii = Fa(p));
        var Hs = p.length, ws = [];
        for (B = 0; B < Hs; B++) {
          var Rs = xi(p[B]);
          ws.push(A.project(xi([Rs.lat - ii.lat, Rs.lng - ii.lng])));
        }
        for (B = 0, X = 0; B < Hs - 1; B++)
          X += ws[B].distanceTo(ws[B + 1]) / 2;
        if (X === 0)
          Rt = ws[0];
        else
          for (B = 0, ye = 0; B < Hs - 1; B++)
            if (We = ws[B], at = ws[B + 1], ne = We.distanceTo(at), ye += ne, ye > X) {
              ft = (ye - X) / ne, Rt = [
                at.x - ft * (at.x - We.x),
                at.y - ft * (at.y - We.y)
              ];
              break;
            }
        var ur = A.unproject(ni(Rt));
        return xi([ur.lat + ii.lat, ur.lng + ii.lng]);
      }
      var ed = {
        __proto__: null,
        simplify: fl,
        pointToSegmentDistance: pl,
        closestPointOnSegment: Nh,
        clipSegment: Na,
        _getEdgeIntersection: _l,
        _getBitCode: Ds,
        _sqClosestPointOnSegment: $o,
        isFlat: rs,
        _flat: Uh,
        polylineCenter: jh
      }, Hl = {
        project: function(p) {
          return new fi(p.lng, p.lat);
        },
        unproject: function(p) {
          return new Di(p.y, p.x);
        },
        bounds: new Gi([-180, -90], [180, 90])
      }, Xo = {
        R: 6378137,
        R_MINOR: 6356752314245179e-9,
        bounds: new Gi([-2003750834279e-5, -1549657073972e-5], [2003750834279e-5, 1876465623138e-5]),
        project: function(p) {
          var A = Math.PI / 180, B = this.R, X = p.lat * A, ne = this.R_MINOR / B, ye = Math.sqrt(1 - ne * ne), We = ye * Math.sin(X), at = Math.tan(Math.PI / 4 - X / 2) / Math.pow((1 - We) / (1 + We), ye / 2);
          return X = -B * Math.log(Math.max(at, 1e-10)), new fi(p.lng * A * B, X);
        },
        unproject: function(p) {
          for (var A = 180 / Math.PI, B = this.R, X = this.R_MINOR / B, ne = Math.sqrt(1 - X * X), ye = Math.exp(-p.y / B), We = Math.PI / 2 - 2 * Math.atan(ye), at = 0, ft = 0.1, Rt; at < 15 && Math.abs(ft) > 1e-7; at++)
            Rt = ne * Math.sin(We), Rt = Math.pow((1 - Rt) / (1 + Rt), ne / 2), ft = Math.PI / 2 - 2 * Math.atan(ye * Rt) - We, We += ft;
          return new Di(We * A, p.x * A / B);
        }
      }, bi = {
        __proto__: null,
        LonLat: Hl,
        Mercator: Xo,
        SphericalMercator: De
      }, Wt = w({}, xs, {
        code: "EPSG:3395",
        projection: Xo,
        transformation: function() {
          var p = 0.5 / (Math.PI * Xo.R);
          return Us(p, 0.5, -p, 0.5);
        }()
      }), gl = w({}, xs, {
        code: "EPSG:4326",
        projection: Hl,
        transformation: Us(1 / 180, 1, -1 / 180, 0.5)
      }), ci = w({}, Cs, {
        projection: Hl,
        transformation: Us(1, 0, -1, 0),
        scale: function(p) {
          return Math.pow(2, p);
        },
        zoom: function(p) {
          return Math.log(p) / Math.LN2;
        },
        distance: function(p, A) {
          var B = A.lng - p.lng, X = A.lat - p.lat;
          return Math.sqrt(B * B + X * X);
        },
        infinite: !0
      });
      Cs.Earth = xs, Cs.EPSG3395 = Wt, Cs.EPSG3857 = Zr, Cs.EPSG900913 = Et, Cs.EPSG4326 = gl, Cs.Simple = ci;
      var ar = Ji.extend({
        // Classes extending `L.Layer` will inherit the following options:
        options: {
          // @option pane: String = 'overlayPane'
          // By default the layer will be added to the map's [overlay pane](#map-overlaypane). Overriding this option will cause the layer to be placed on another pane by default.
          pane: "overlayPane",
          // @option attribution: String = null
          // String to be shown in the attribution control, e.g. "© OpenStreetMap contributors". It describes the layer data and is often a legal obligation towards copyright holders and tile providers.
          attribution: null,
          bubblingMouseEvents: !0
        },
        /* @section
         * Classes extending `L.Layer` will inherit the following methods:
         *
         * @method addTo(map: Map|LayerGroup): this
         * Adds the layer to the given map or layer group.
         */
        addTo: function(p) {
          return p.addLayer(this), this;
        },
        // @method remove: this
        // Removes the layer from the map it is currently active on.
        remove: function() {
          return this.removeFrom(this._map || this._mapToAdd);
        },
        // @method removeFrom(map: Map): this
        // Removes the layer from the given map
        //
        // @alternative
        // @method removeFrom(group: LayerGroup): this
        // Removes the layer from the given `LayerGroup`
        removeFrom: function(p) {
          return p && p.removeLayer(this), this;
        },
        // @method getPane(name? : String): HTMLElement
        // Returns the `HTMLElement` representing the named pane on the map. If `name` is omitted, returns the pane for this layer.
        getPane: function(p) {
          return this._map.getPane(p ? this.options[p] || p : this.options.pane);
        },
        addInteractiveTarget: function(p) {
          return this._map._targets[O(p)] = this, this;
        },
        removeInteractiveTarget: function(p) {
          return delete this._map._targets[O(p)], this;
        },
        // @method getAttribution: String
        // Used by the `attribution control`, returns the [attribution option](#gridlayer-attribution).
        getAttribution: function() {
          return this.options.attribution;
        },
        _layerAdd: function(p) {
          var A = p.target;
          if (A.hasLayer(this)) {
            if (this._map = A, this._zoomAnimated = A._zoomAnimated, this.getEvents) {
              var B = this.getEvents();
              A.on(B, this), this.once("remove", function() {
                A.off(B, this);
              }, this);
            }
            this.onAdd(A), this.fire("add"), A.fire("layeradd", { layer: this });
          }
        }
      });
      nn.include({
        // @method addLayer(layer: Layer): this
        // Adds the given layer to the map
        addLayer: function(p) {
          if (!p._layerAdd)
            throw new Error("The provided object is not a Layer.");
          var A = O(p);
          return this._layers[A] ? this : (this._layers[A] = p, p._mapToAdd = this, p.beforeAdd && p.beforeAdd(this), this.whenReady(p._layerAdd, p), this);
        },
        // @method removeLayer(layer: Layer): this
        // Removes the given layer from the map.
        removeLayer: function(p) {
          var A = O(p);
          return this._layers[A] ? (this._loaded && p.onRemove(this), delete this._layers[A], this._loaded && (this.fire("layerremove", { layer: p }), p.fire("remove")), p._map = p._mapToAdd = null, this) : this;
        },
        // @method hasLayer(layer: Layer): Boolean
        // Returns `true` if the given layer is currently added to the map
        hasLayer: function(p) {
          return O(p) in this._layers;
        },
        /* @method eachLayer(fn: Function, context?: Object): this
         * Iterates over the layers of the map, optionally specifying context of the iterator function.
         * ```
         * map.eachLayer(function(layer){
         *     layer.bindPopup('Hello');
         * });
         * ```
         */
        eachLayer: function(p, A) {
          for (var B in this._layers)
            p.call(A, this._layers[B]);
          return this;
        },
        _addLayers: function(p) {
          p = p ? vt(p) ? p : [p] : [];
          for (var A = 0, B = p.length; A < B; A++)
            this.addLayer(p[A]);
        },
        _addZoomLimit: function(p) {
          (!isNaN(p.options.maxZoom) || !isNaN(p.options.minZoom)) && (this._zoomBoundLayers[O(p)] = p, this._updateZoomLevels());
        },
        _removeZoomLimit: function(p) {
          var A = O(p);
          this._zoomBoundLayers[A] && (delete this._zoomBoundLayers[A], this._updateZoomLevels());
        },
        _updateZoomLevels: function() {
          var p = 1 / 0, A = -1 / 0, B = this._getZoomSpan();
          for (var X in this._zoomBoundLayers) {
            var ne = this._zoomBoundLayers[X].options;
            p = ne.minZoom === void 0 ? p : Math.min(p, ne.minZoom), A = ne.maxZoom === void 0 ? A : Math.max(A, ne.maxZoom);
          }
          this._layersMaxZoom = A === -1 / 0 ? void 0 : A, this._layersMinZoom = p === 1 / 0 ? void 0 : p, B !== this._getZoomSpan() && this.fire("zoomlevelschange"), this.options.maxZoom === void 0 && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom && this.setZoom(this._layersMaxZoom), this.options.minZoom === void 0 && this._layersMinZoom && this.getZoom() < this._layersMinZoom && this.setZoom(this._layersMinZoom);
        }
      });
      var lr = ar.extend({
        initialize: function(p, A) {
          be(this, A), this._layers = {};
          var B, X;
          if (p)
            for (B = 0, X = p.length; B < X; B++)
              this.addLayer(p[B]);
        },
        // @method addLayer(layer: Layer): this
        // Adds the given layer to the group.
        addLayer: function(p) {
          var A = this.getLayerId(p);
          return this._layers[A] = p, this._map && this._map.addLayer(p), this;
        },
        // @method removeLayer(layer: Layer): this
        // Removes the given layer from the group.
        // @alternative
        // @method removeLayer(id: Number): this
        // Removes the layer with the given internal ID from the group.
        removeLayer: function(p) {
          var A = p in this._layers ? p : this.getLayerId(p);
          return this._map && this._layers[A] && this._map.removeLayer(this._layers[A]), delete this._layers[A], this;
        },
        // @method hasLayer(layer: Layer): Boolean
        // Returns `true` if the given layer is currently added to the group.
        // @alternative
        // @method hasLayer(id: Number): Boolean
        // Returns `true` if the given internal ID is currently added to the group.
        hasLayer: function(p) {
          var A = typeof p == "number" ? p : this.getLayerId(p);
          return A in this._layers;
        },
        // @method clearLayers(): this
        // Removes all the layers from the group.
        clearLayers: function() {
          return this.eachLayer(this.removeLayer, this);
        },
        // @method invoke(methodName: String, …): this
        // Calls `methodName` on every layer contained in this group, passing any
        // additional parameters. Has no effect if the layers contained do not
        // implement `methodName`.
        invoke: function(p) {
          var A = Array.prototype.slice.call(arguments, 1), B, X;
          for (B in this._layers)
            X = this._layers[B], X[p] && X[p].apply(X, A);
          return this;
        },
        onAdd: function(p) {
          this.eachLayer(p.addLayer, p);
        },
        onRemove: function(p) {
          this.eachLayer(p.removeLayer, p);
        },
        // @method eachLayer(fn: Function, context?: Object): this
        // Iterates over the layers of the group, optionally specifying context of the iterator function.
        // ```js
        // group.eachLayer(function (layer) {
        // 	layer.bindPopup('Hello');
        // });
        // ```
        eachLayer: function(p, A) {
          for (var B in this._layers)
            p.call(A, this._layers[B]);
          return this;
        },
        // @method getLayer(id: Number): Layer
        // Returns the layer with the given internal ID.
        getLayer: function(p) {
          return this._layers[p];
        },
        // @method getLayers(): Layer[]
        // Returns an array of all the layers added to the group.
        getLayers: function() {
          var p = [];
          return this.eachLayer(p.push, p), p;
        },
        // @method setZIndex(zIndex: Number): this
        // Calls `setZIndex` on every layer contained in this group, passing the z-index.
        setZIndex: function(p) {
          return this.invoke("setZIndex", p);
        },
        // @method getLayerId(layer: Layer): Number
        // Returns the internal ID for a layer
        getLayerId: function(p) {
          return O(p);
        }
      }), ti = function(p, A) {
        return new lr(p, A);
      }, Xr = lr.extend({
        addLayer: function(p) {
          return this.hasLayer(p) ? this : (p.addEventParent(this), lr.prototype.addLayer.call(this, p), this.fire("layeradd", { layer: p }));
        },
        removeLayer: function(p) {
          return this.hasLayer(p) ? (p in this._layers && (p = this._layers[p]), p.removeEventParent(this), lr.prototype.removeLayer.call(this, p), this.fire("layerremove", { layer: p })) : this;
        },
        // @method setStyle(style: Path options): this
        // Sets the given path options to each layer of the group that has a `setStyle` method.
        setStyle: function(p) {
          return this.invoke("setStyle", p);
        },
        // @method bringToFront(): this
        // Brings the layer group to the top of all other layers
        bringToFront: function() {
          return this.invoke("bringToFront");
        },
        // @method bringToBack(): this
        // Brings the layer group to the back of all other layers
        bringToBack: function() {
          return this.invoke("bringToBack");
        },
        // @method getBounds(): LatLngBounds
        // Returns the LatLngBounds of the Feature Group (created from bounds and coordinates of its children).
        getBounds: function() {
          var p = new qt();
          for (var A in this._layers) {
            var B = this._layers[A];
            p.extend(B.getBounds ? B.getBounds() : B.getLatLng());
          }
          return p;
        }
      }), ql = function(p, A) {
        return new Xr(p, A);
      }, Yr = hn.extend({
        /* @section
         * @aka Icon options
         *
         * @option iconUrl: String = null
         * **(required)** The URL to the icon image (absolute or relative to your script path).
         *
         * @option iconRetinaUrl: String = null
         * The URL to a retina sized version of the icon image (absolute or relative to your
         * script path). Used for Retina screen devices.
         *
         * @option iconSize: Point = null
         * Size of the icon image in pixels.
         *
         * @option iconAnchor: Point = null
         * The coordinates of the "tip" of the icon (relative to its top left corner). The icon
         * will be aligned so that this point is at the marker's geographical location. Centered
         * by default if size is specified, also can be set in CSS with negative margins.
         *
         * @option popupAnchor: Point = [0, 0]
         * The coordinates of the point from which popups will "open", relative to the icon anchor.
         *
         * @option tooltipAnchor: Point = [0, 0]
         * The coordinates of the point from which tooltips will "open", relative to the icon anchor.
         *
         * @option shadowUrl: String = null
         * The URL to the icon shadow image. If not specified, no shadow image will be created.
         *
         * @option shadowRetinaUrl: String = null
         *
         * @option shadowSize: Point = null
         * Size of the shadow image in pixels.
         *
         * @option shadowAnchor: Point = null
         * The coordinates of the "tip" of the shadow (relative to its top left corner) (the same
         * as iconAnchor if not specified).
         *
         * @option className: String = ''
         * A custom class name to assign to both icon and shadow images. Empty by default.
         */
        options: {
          popupAnchor: [0, 0],
          tooltipAnchor: [0, 0],
          // @option crossOrigin: Boolean|String = false
          // Whether the crossOrigin attribute will be added to the tiles.
          // If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
          // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
          crossOrigin: !1
        },
        initialize: function(p) {
          be(this, p);
        },
        // @method createIcon(oldIcon?: HTMLElement): HTMLElement
        // Called internally when the icon has to be shown, returns a `<img>` HTML element
        // styled according to the options.
        createIcon: function(p) {
          return this._createIcon("icon", p);
        },
        // @method createShadow(oldIcon?: HTMLElement): HTMLElement
        // As `createIcon`, but for the shadow beneath it.
        createShadow: function(p) {
          return this._createIcon("shadow", p);
        },
        _createIcon: function(p, A) {
          var B = this._getIconUrl(p);
          if (!B) {
            if (p === "icon")
              throw new Error("iconUrl not set in Icon options (see the docs).");
            return null;
          }
          var X = this._createImg(B, A && A.tagName === "IMG" ? A : null);
          return this._setIconStyles(X, p), (this.options.crossOrigin || this.options.crossOrigin === "") && (X.crossOrigin = this.options.crossOrigin === !0 ? "" : this.options.crossOrigin), X;
        },
        _setIconStyles: function(p, A) {
          var B = this.options, X = B[A + "Size"];
          typeof X == "number" && (X = [X, X]);
          var ne = ni(X), ye = ni(A === "shadow" && B.shadowAnchor || B.iconAnchor || ne && ne.divideBy(2, !0));
          p.className = "leaflet-marker-" + A + " " + (B.className || ""), ye && (p.style.marginLeft = -ye.x + "px", p.style.marginTop = -ye.y + "px"), ne && (p.style.width = ne.x + "px", p.style.height = ne.y + "px");
        },
        _createImg: function(p, A) {
          return A = A || document.createElement("img"), A.src = p, A;
        },
        _getIconUrl: function(p) {
          return Pe.retina && this.options[p + "RetinaUrl"] || this.options[p + "Url"];
        }
      });
      function Va(p) {
        return new Yr(p);
      }
      var To = Yr.extend({
        options: {
          iconUrl: "marker-icon.png",
          iconRetinaUrl: "marker-icon-2x.png",
          shadowUrl: "marker-shadow.png",
          iconSize: [25, 41],
          iconAnchor: [12, 41],
          popupAnchor: [1, -34],
          tooltipAnchor: [16, -28],
          shadowSize: [41, 41]
        },
        _getIconUrl: function(p) {
          return typeof To.imagePath != "string" && (To.imagePath = this._detectIconPath()), (this.options.imagePath || To.imagePath) + Yr.prototype._getIconUrl.call(this, p);
        },
        _stripUrl: function(p) {
          var A = function(B, X, ne) {
            var ye = X.exec(B);
            return ye && ye[ne];
          };
          return p = A(p, /^url\((['"])?(.+)\1\)$/, 2), p && A(p, /^(.*)marker-icon\.png$/, 1);
        },
        _detectIconPath: function() {
          var p = tn("div", "leaflet-default-icon-path", document.body), A = jo(p, "background-image") || jo(p, "backgroundImage");
          if (document.body.removeChild(p), A = this._stripUrl(A), A)
            return A;
          var B = document.querySelector('link[href$="leaflet.css"]');
          return B ? B.href.substring(0, B.href.length - 11 - 1) : "";
        }
      }), bs = Es.extend({
        initialize: function(p) {
          this._marker = p;
        },
        addHooks: function() {
          var p = this._marker._icon;
          this._draggable || (this._draggable = new Wo(p, p, !0)), this._draggable.on({
            dragstart: this._onDragStart,
            predrag: this._onPreDrag,
            drag: this._onDrag,
            dragend: this._onDragEnd
          }, this).enable(), Vi(p, "leaflet-marker-draggable");
        },
        removeHooks: function() {
          this._draggable.off({
            dragstart: this._onDragStart,
            predrag: this._onPreDrag,
            drag: this._onDrag,
            dragend: this._onDragEnd
          }, this).disable(), this._marker._icon && Hn(this._marker._icon, "leaflet-marker-draggable");
        },
        moved: function() {
          return this._draggable && this._draggable._moved;
        },
        _adjustPan: function(p) {
          var A = this._marker, B = A._map, X = this._marker.options.autoPanSpeed, ne = this._marker.options.autoPanPadding, ye = $r(A._icon), We = B.getPixelBounds(), at = B.getPixelOrigin(), ft = an(
            We.min._subtract(at).add(ne),
            We.max._subtract(at).subtract(ne)
          );
          if (!ft.contains(ye)) {
            var Rt = ni(
              (Math.max(ft.max.x, ye.x) - ft.max.x) / (We.max.x - ft.max.x) - (Math.min(ft.min.x, ye.x) - ft.min.x) / (We.min.x - ft.min.x),
              (Math.max(ft.max.y, ye.y) - ft.max.y) / (We.max.y - ft.max.y) - (Math.min(ft.min.y, ye.y) - ft.min.y) / (We.min.y - ft.min.y)
            ).multiplyBy(X);
            B.panBy(Rt, { animate: !1 }), this._draggable._newPos._add(Rt), this._draggable._startPos._add(Rt), Yn(A._icon, this._draggable._newPos), this._onDrag(p), this._panRequest = Pt(this._adjustPan.bind(this, p));
          }
        },
        _onDragStart: function() {
          this._oldLatLng = this._marker.getLatLng(), this._marker.closePopup && this._marker.closePopup(), this._marker.fire("movestart").fire("dragstart");
        },
        _onPreDrag: function(p) {
          this._marker.options.autoPan && (Mi(this._panRequest), this._panRequest = Pt(this._adjustPan.bind(this, p)));
        },
        _onDrag: function(p) {
          var A = this._marker, B = A._shadow, X = $r(A._icon), ne = A._map.layerPointToLatLng(X);
          B && Yn(B, X), A._latlng = ne, p.latlng = ne, p.oldLatLng = this._oldLatLng, A.fire("move", p).fire("drag", p);
        },
        _onDragEnd: function(p) {
          Mi(this._panRequest), delete this._oldLatLng, this._marker.fire("moveend").fire("dragend", p);
        }
      }), ks = ar.extend({
        // @section
        // @aka Marker options
        options: {
          // @option icon: Icon = *
          // Icon instance to use for rendering the marker.
          // See [Icon documentation](#L.Icon) for details on how to customize the marker icon.
          // If not specified, a common instance of `L.Icon.Default` is used.
          icon: new To(),
          // Option inherited from "Interactive layer" abstract class
          interactive: !0,
          // @option keyboard: Boolean = true
          // Whether the marker can be tabbed to with a keyboard and clicked by pressing enter.
          keyboard: !0,
          // @option title: String = ''
          // Text for the browser tooltip that appear on marker hover (no tooltip by default).
          // [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
          title: "",
          // @option alt: String = 'Marker'
          // Text for the `alt` attribute of the icon image.
          // [Useful for accessibility](https://leafletjs.com/examples/accessibility/#markers-must-be-labelled).
          alt: "Marker",
          // @option zIndexOffset: Number = 0
          // By default, marker images zIndex is set automatically based on its latitude. Use this option if you want to put the marker on top of all others (or below), specifying a high value like `1000` (or high negative value, respectively).
          zIndexOffset: 0,
          // @option opacity: Number = 1.0
          // The opacity of the marker.
          opacity: 1,
          // @option riseOnHover: Boolean = false
          // If `true`, the marker will get on top of others when you hover the mouse over it.
          riseOnHover: !1,
          // @option riseOffset: Number = 250
          // The z-index offset used for the `riseOnHover` feature.
          riseOffset: 250,
          // @option pane: String = 'markerPane'
          // `Map pane` where the markers icon will be added.
          pane: "markerPane",
          // @option shadowPane: String = 'shadowPane'
          // `Map pane` where the markers shadow will be added.
          shadowPane: "shadowPane",
          // @option bubblingMouseEvents: Boolean = false
          // When `true`, a mouse event on this marker will trigger the same event on the map
          // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
          bubblingMouseEvents: !1,
          // @option autoPanOnFocus: Boolean = true
          // When `true`, the map will pan whenever the marker is focused (via
          // e.g. pressing `tab` on the keyboard) to ensure the marker is
          // visible within the map's bounds
          autoPanOnFocus: !0,
          // @section Draggable marker options
          // @option draggable: Boolean = false
          // Whether the marker is draggable with mouse/touch or not.
          draggable: !1,
          // @option autoPan: Boolean = false
          // Whether to pan the map when dragging this marker near its edge or not.
          autoPan: !1,
          // @option autoPanPadding: Point = Point(50, 50)
          // Distance (in pixels to the left/right and to the top/bottom) of the
          // map edge to start panning the map.
          autoPanPadding: [50, 50],
          // @option autoPanSpeed: Number = 10
          // Number of pixels the map should pan by.
          autoPanSpeed: 10
        },
        /* @section
         *
         * In addition to [shared layer methods](#Layer) like `addTo()` and `remove()` and [popup methods](#Popup) like bindPopup() you can also use the following methods:
         */
        initialize: function(p, A) {
          be(this, A), this._latlng = xi(p);
        },
        onAdd: function(p) {
          this._zoomAnimated = this._zoomAnimated && p.options.markerZoomAnimation, this._zoomAnimated && p.on("zoomanim", this._animateZoom, this), this._initIcon(), this.update();
        },
        onRemove: function(p) {
          this.dragging && this.dragging.enabled() && (this.options.draggable = !0, this.dragging.removeHooks()), delete this.dragging, this._zoomAnimated && p.off("zoomanim", this._animateZoom, this), this._removeIcon(), this._removeShadow();
        },
        getEvents: function() {
          return {
            zoom: this.update,
            viewreset: this.update
          };
        },
        // @method getLatLng: LatLng
        // Returns the current geographical position of the marker.
        getLatLng: function() {
          return this._latlng;
        },
        // @method setLatLng(latlng: LatLng): this
        // Changes the marker position to the given point.
        setLatLng: function(p) {
          var A = this._latlng;
          return this._latlng = xi(p), this.update(), this.fire("move", { oldLatLng: A, latlng: this._latlng });
        },
        // @method setZIndexOffset(offset: Number): this
        // Changes the [zIndex offset](#marker-zindexoffset) of the marker.
        setZIndexOffset: function(p) {
          return this.options.zIndexOffset = p, this.update();
        },
        // @method getIcon: Icon
        // Returns the current icon used by the marker
        getIcon: function() {
          return this.options.icon;
        },
        // @method setIcon(icon: Icon): this
        // Changes the marker icon.
        setIcon: function(p) {
          return this.options.icon = p, this._map && (this._initIcon(), this.update()), this._popup && this.bindPopup(this._popup, this._popup.options), this;
        },
        getElement: function() {
          return this._icon;
        },
        update: function() {
          if (this._icon && this._map) {
            var p = this._map.latLngToLayerPoint(this._latlng).round();
            this._setPos(p);
          }
          return this;
        },
        _initIcon: function() {
          var p = this.options, A = "leaflet-zoom-" + (this._zoomAnimated ? "animated" : "hide"), B = p.icon.createIcon(this._icon), X = !1;
          B !== this._icon && (this._icon && this._removeIcon(), X = !0, p.title && (B.title = p.title), B.tagName === "IMG" && (B.alt = p.alt || "")), Vi(B, A), p.keyboard && (B.tabIndex = "0", B.setAttribute("role", "button")), this._icon = B, p.riseOnHover && this.on({
            mouseover: this._bringToFront,
            mouseout: this._resetZIndex
          }), this.options.autoPanOnFocus && Bi(B, "focus", this._panOnFocus, this);
          var ne = p.icon.createShadow(this._shadow), ye = !1;
          ne !== this._shadow && (this._removeShadow(), ye = !0), ne && (Vi(ne, A), ne.alt = ""), this._shadow = ne, p.opacity < 1 && this._updateOpacity(), X && this.getPane().appendChild(this._icon), this._initInteraction(), ne && ye && this.getPane(p.shadowPane).appendChild(this._shadow);
        },
        _removeIcon: function() {
          this.options.riseOnHover && this.off({
            mouseover: this._bringToFront,
            mouseout: this._resetZIndex
          }), this.options.autoPanOnFocus && Cn(this._icon, "focus", this._panOnFocus, this), xn(this._icon), this.removeInteractiveTarget(this._icon), this._icon = null;
        },
        _removeShadow: function() {
          this._shadow && xn(this._shadow), this._shadow = null;
        },
        _setPos: function(p) {
          this._icon && Yn(this._icon, p), this._shadow && Yn(this._shadow, p), this._zIndex = p.y + this.options.zIndexOffset, this._resetZIndex();
        },
        _updateZIndex: function(p) {
          this._icon && (this._icon.style.zIndex = this._zIndex + p);
        },
        _animateZoom: function(p) {
          var A = this._map._latLngToNewLayerPoint(this._latlng, p.zoom, p.center).round();
          this._setPos(A);
        },
        _initInteraction: function() {
          if (this.options.interactive && (Vi(this._icon, "leaflet-interactive"), this.addInteractiveTarget(this._icon), bs)) {
            var p = this.options.draggable;
            this.dragging && (p = this.dragging.enabled(), this.dragging.disable()), this.dragging = new bs(this), p && this.dragging.enable();
          }
        },
        // @method setOpacity(opacity: Number): this
        // Changes the opacity of the marker.
        setOpacity: function(p) {
          return this.options.opacity = p, this._map && this._updateOpacity(), this;
        },
        _updateOpacity: function() {
          var p = this.options.opacity;
          this._icon && Qn(this._icon, p), this._shadow && Qn(this._shadow, p);
        },
        _bringToFront: function() {
          this._updateZIndex(this.options.riseOffset);
        },
        _resetZIndex: function() {
          this._updateZIndex(0);
        },
        _panOnFocus: function() {
          var p = this._map;
          if (p) {
            var A = this.options.icon.options, B = A.iconSize ? ni(A.iconSize) : ni(0, 0), X = A.iconAnchor ? ni(A.iconAnchor) : ni(0, 0);
            p.panInside(this._latlng, {
              paddingTopLeft: X,
              paddingBottomRight: B.subtract(X)
            });
          }
        },
        _getPopupAnchor: function() {
          return this.options.icon.options.popupAnchor;
        },
        _getTooltipAnchor: function() {
          return this.options.icon.options.tooltipAnchor;
        }
      });
      function Wl(p, A) {
        return new ks(p, A);
      }
      var Tt = ar.extend({
        // @section
        // @aka Path options
        options: {
          // @option stroke: Boolean = true
          // Whether to draw stroke along the path. Set it to `false` to disable borders on polygons or circles.
          stroke: !0,
          // @option color: String = '#3388ff'
          // Stroke color
          color: "#3388ff",
          // @option weight: Number = 3
          // Stroke width in pixels
          weight: 3,
          // @option opacity: Number = 1.0
          // Stroke opacity
          opacity: 1,
          // @option lineCap: String= 'round'
          // A string that defines [shape to be used at the end](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linecap) of the stroke.
          lineCap: "round",
          // @option lineJoin: String = 'round'
          // A string that defines [shape to be used at the corners](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-linejoin) of the stroke.
          lineJoin: "round",
          // @option dashArray: String = null
          // A string that defines the stroke [dash pattern](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dasharray). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
          dashArray: null,
          // @option dashOffset: String = null
          // A string that defines the [distance into the dash pattern to start the dash](https://developer.mozilla.org/docs/Web/SVG/Attribute/stroke-dashoffset). Doesn't work on `Canvas`-powered layers in [some old browsers](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility).
          dashOffset: null,
          // @option fill: Boolean = depends
          // Whether to fill the path with color. Set it to `false` to disable filling on polygons or circles.
          fill: !1,
          // @option fillColor: String = *
          // Fill color. Defaults to the value of the [`color`](#path-color) option
          fillColor: null,
          // @option fillOpacity: Number = 0.2
          // Fill opacity.
          fillOpacity: 0.2,
          // @option fillRule: String = 'evenodd'
          // A string that defines [how the inside of a shape](https://developer.mozilla.org/docs/Web/SVG/Attribute/fill-rule) is determined.
          fillRule: "evenodd",
          // className: '',
          // Option inherited from "Interactive layer" abstract class
          interactive: !0,
          // @option bubblingMouseEvents: Boolean = true
          // When `true`, a mouse event on this path will trigger the same event on the map
          // (unless [`L.DomEvent.stopPropagation`](#domevent-stoppropagation) is used).
          bubblingMouseEvents: !0
        },
        beforeAdd: function(p) {
          this._renderer = p.getRenderer(this);
        },
        onAdd: function() {
          this._renderer._initPath(this), this._reset(), this._renderer._addPath(this);
        },
        onRemove: function() {
          this._renderer._removePath(this);
        },
        // @method redraw(): this
        // Redraws the layer. Sometimes useful after you changed the coordinates that the path uses.
        redraw: function() {
          return this._map && this._renderer._updatePath(this), this;
        },
        // @method setStyle(style: Path options): this
        // Changes the appearance of a Path based on the options in the `Path options` object.
        setStyle: function(p) {
          return be(this, p), this._renderer && (this._renderer._updateStyle(this), this.options.stroke && p && Object.prototype.hasOwnProperty.call(p, "weight") && this._updateBounds()), this;
        },
        // @method bringToFront(): this
        // Brings the layer to the top of all path layers.
        bringToFront: function() {
          return this._renderer && this._renderer._bringToFront(this), this;
        },
        // @method bringToBack(): this
        // Brings the layer to the bottom of all path layers.
        bringToBack: function() {
          return this._renderer && this._renderer._bringToBack(this), this;
        },
        getElement: function() {
          return this._path;
        },
        _reset: function() {
          this._project(), this._update();
        },
        _clickTolerance: function() {
          return (this.options.stroke ? this.options.weight / 2 : 0) + (this._renderer.options.tolerance || 0);
        }
      }), ma = Tt.extend({
        // @section
        // @aka CircleMarker options
        options: {
          fill: !0,
          // @option radius: Number = 10
          // Radius of the circle marker, in pixels
          radius: 10
        },
        initialize: function(p, A) {
          be(this, A), this._latlng = xi(p), this._radius = this.options.radius;
        },
        // @method setLatLng(latLng: LatLng): this
        // Sets the position of a circle marker to a new location.
        setLatLng: function(p) {
          var A = this._latlng;
          return this._latlng = xi(p), this.redraw(), this.fire("move", { oldLatLng: A, latlng: this._latlng });
        },
        // @method getLatLng(): LatLng
        // Returns the current geographical position of the circle marker
        getLatLng: function() {
          return this._latlng;
        },
        // @method setRadius(radius: Number): this
        // Sets the radius of a circle marker. Units are in pixels.
        setRadius: function(p) {
          return this.options.radius = this._radius = p, this.redraw();
        },
        // @method getRadius(): Number
        // Returns the current radius of the circle
        getRadius: function() {
          return this._radius;
        },
        setStyle: function(p) {
          var A = p && p.radius || this._radius;
          return Tt.prototype.setStyle.call(this, p), this.setRadius(A), this;
        },
        _project: function() {
          this._point = this._map.latLngToLayerPoint(this._latlng), this._updateBounds();
        },
        _updateBounds: function() {
          var p = this._radius, A = this._radiusY || p, B = this._clickTolerance(), X = [p + B, A + B];
          this._pxBounds = new Gi(this._point.subtract(X), this._point.add(X));
        },
        _update: function() {
          this._map && this._updatePath();
        },
        _updatePath: function() {
          this._renderer._updateCircle(this);
        },
        _empty: function() {
          return this._radius && !this._renderer._bounds.intersects(this._pxBounds);
        },
        // Needed by the `Canvas` renderer for interactivity
        _containsPoint: function(p) {
          return p.distanceTo(this._point) <= this._radius + this._clickTolerance();
        }
      });
      function Mo(p, A) {
        return new ma(p, A);
      }
      var gs = ma.extend({
        initialize: function(p, A, B) {
          if (typeof A == "number" && (A = w({}, B, { radius: A })), be(this, A), this._latlng = xi(p), isNaN(this.options.radius))
            throw new Error("Circle radius cannot be NaN");
          this._mRadius = this.options.radius;
        },
        // @method setRadius(radius: Number): this
        // Sets the radius of a circle. Units are in meters.
        setRadius: function(p) {
          return this._mRadius = p, this.redraw();
        },
        // @method getRadius(): Number
        // Returns the current radius of a circle. Units are in meters.
        getRadius: function() {
          return this._mRadius;
        },
        // @method getBounds(): LatLngBounds
        // Returns the `LatLngBounds` of the path.
        getBounds: function() {
          var p = [this._radius, this._radiusY || this._radius];
          return new qt(
            this._map.layerPointToLatLng(this._point.subtract(p)),
            this._map.layerPointToLatLng(this._point.add(p))
          );
        },
        setStyle: Tt.prototype.setStyle,
        _project: function() {
          var p = this._latlng.lng, A = this._latlng.lat, B = this._map, X = B.options.crs;
          if (X.distance === xs.distance) {
            var ne = Math.PI / 180, ye = this._mRadius / xs.R / ne, We = B.project([A + ye, p]), at = B.project([A - ye, p]), ft = We.add(at).divideBy(2), Rt = B.unproject(ft).lat, ii = Math.acos((Math.cos(ye * ne) - Math.sin(A * ne) * Math.sin(Rt * ne)) / (Math.cos(A * ne) * Math.cos(Rt * ne))) / ne;
            (isNaN(ii) || ii === 0) && (ii = ye / Math.cos(Math.PI / 180 * A)), this._point = ft.subtract(B.getPixelOrigin()), this._radius = isNaN(ii) ? 0 : ft.x - B.project([Rt, p - ii]).x, this._radiusY = ft.y - We.y;
          } else {
            var Ci = X.unproject(X.project(this._latlng).subtract([this._mRadius, 0]));
            this._point = B.latLngToLayerPoint(this._latlng), this._radius = this._point.x - B.latLngToLayerPoint(Ci).x;
          }
          this._updateBounds();
        }
      });
      function Gh(p, A, B) {
        return new gs(p, A, B);
      }
      var Dr = Tt.extend({
        // @section
        // @aka Polyline options
        options: {
          // @option smoothFactor: Number = 1.0
          // How much to simplify the polyline on each zoom level. More means
          // better performance and smoother look, and less means more accurate representation.
          smoothFactor: 1,
          // @option noClip: Boolean = false
          // Disable polyline clipping.
          noClip: !1
        },
        initialize: function(p, A) {
          be(this, A), this._setLatLngs(p);
        },
        // @method getLatLngs(): LatLng[]
        // Returns an array of the points in the path, or nested arrays of points in case of multi-polyline.
        getLatLngs: function() {
          return this._latlngs;
        },
        // @method setLatLngs(latlngs: LatLng[]): this
        // Replaces all the points in the polyline with the given array of geographical points.
        setLatLngs: function(p) {
          return this._setLatLngs(p), this.redraw();
        },
        // @method isEmpty(): Boolean
        // Returns `true` if the Polyline has no LatLngs.
        isEmpty: function() {
          return !this._latlngs.length;
        },
        // @method closestLayerPoint(p: Point): Point
        // Returns the point closest to `p` on the Polyline.
        closestLayerPoint: function(p) {
          for (var A = 1 / 0, B = null, X = $o, ne, ye, We = 0, at = this._parts.length; We < at; We++)
            for (var ft = this._parts[We], Rt = 1, ii = ft.length; Rt < ii; Rt++) {
              ne = ft[Rt - 1], ye = ft[Rt];
              var Ci = X(p, ne, ye, !0);
              Ci < A && (A = Ci, B = X(p, ne, ye));
            }
          return B && (B.distance = Math.sqrt(A)), B;
        },
        // @method getCenter(): LatLng
        // Returns the center ([centroid](https://en.wikipedia.org/wiki/Centroid)) of the polyline.
        getCenter: function() {
          if (!this._map)
            throw new Error("Must add layer to map before using getCenter()");
          return jh(this._defaultShape(), this._map.options.crs);
        },
        // @method getBounds(): LatLngBounds
        // Returns the `LatLngBounds` of the path.
        getBounds: function() {
          return this._bounds;
        },
        // @method addLatLng(latlng: LatLng, latlngs?: LatLng[]): this
        // Adds a given point to the polyline. By default, adds to the first ring of
        // the polyline in case of a multi-polyline, but can be overridden by passing
        // a specific ring as a LatLng array (that you can earlier access with [`getLatLngs`](#polyline-getlatlngs)).
        addLatLng: function(p, A) {
          return A = A || this._defaultShape(), p = xi(p), A.push(p), this._bounds.extend(p), this.redraw();
        },
        _setLatLngs: function(p) {
          this._bounds = new qt(), this._latlngs = this._convertLatLngs(p);
        },
        _defaultShape: function() {
          return rs(this._latlngs) ? this._latlngs : this._latlngs[0];
        },
        // recursively convert latlngs input into actual LatLng instances; calculate bounds along the way
        _convertLatLngs: function(p) {
          for (var A = [], B = rs(p), X = 0, ne = p.length; X < ne; X++)
            B ? (A[X] = xi(p[X]), this._bounds.extend(A[X])) : A[X] = this._convertLatLngs(p[X]);
          return A;
        },
        _project: function() {
          var p = new Gi();
          this._rings = [], this._projectLatlngs(this._latlngs, this._rings, p), this._bounds.isValid() && p.isValid() && (this._rawPxBounds = p, this._updateBounds());
        },
        _updateBounds: function() {
          var p = this._clickTolerance(), A = new fi(p, p);
          this._rawPxBounds && (this._pxBounds = new Gi([
            this._rawPxBounds.min.subtract(A),
            this._rawPxBounds.max.add(A)
          ]));
        },
        // recursively turns latlngs into a set of rings with projected coordinates
        _projectLatlngs: function(p, A, B) {
          var X = p[0] instanceof Di, ne = p.length, ye, We;
          if (X) {
            for (We = [], ye = 0; ye < ne; ye++)
              We[ye] = this._map.latLngToLayerPoint(p[ye]), B.extend(We[ye]);
            A.push(We);
          } else
            for (ye = 0; ye < ne; ye++)
              this._projectLatlngs(p[ye], A, B);
        },
        // clip polyline by renderer bounds so that we have less to render for performance
        _clipPoints: function() {
          var p = this._renderer._bounds;
          if (this._parts = [], !(!this._pxBounds || !this._pxBounds.intersects(p))) {
            if (this.options.noClip) {
              this._parts = this._rings;
              return;
            }
            var A = this._parts, B, X, ne, ye, We, at, ft;
            for (B = 0, ne = 0, ye = this._rings.length; B < ye; B++)
              for (ft = this._rings[B], X = 0, We = ft.length; X < We - 1; X++)
                at = Na(ft[X], ft[X + 1], p, X, !0), at && (A[ne] = A[ne] || [], A[ne].push(at[0]), (at[1] !== ft[X + 1] || X === We - 2) && (A[ne].push(at[1]), ne++));
          }
        },
        // simplify each clipped part of the polyline for performance
        _simplifyPoints: function() {
          for (var p = this._parts, A = this.options.smoothFactor, B = 0, X = p.length; B < X; B++)
            p[B] = fl(p[B], A);
        },
        _update: function() {
          this._map && (this._clipPoints(), this._simplifyPoints(), this._updatePath());
        },
        _updatePath: function() {
          this._renderer._updatePoly(this);
        },
        // Needed by the `Canvas` renderer for interactivity
        _containsPoint: function(p, A) {
          var B, X, ne, ye, We, at, ft = this._clickTolerance();
          if (!this._pxBounds || !this._pxBounds.contains(p))
            return !1;
          for (B = 0, ye = this._parts.length; B < ye; B++)
            for (at = this._parts[B], X = 0, We = at.length, ne = We - 1; X < We; ne = X++)
              if (!(!A && X === 0) && pl(p, at[ne], at[X]) <= ft)
                return !0;
          return !1;
        }
      });
      function So(p, A) {
        return new Dr(p, A);
      }
      Dr._flat = Uh;
      var Kr = Dr.extend({
        options: {
          fill: !0
        },
        isEmpty: function() {
          return !this._latlngs.length || !this._latlngs[0].length;
        },
        // @method getCenter(): LatLng
        // Returns the center ([centroid](http://en.wikipedia.org/wiki/Centroid)) of the Polygon.
        getCenter: function() {
          if (!this._map)
            throw new Error("Must add layer to map before using getCenter()");
          return Nc(this._defaultShape(), this._map.options.crs);
        },
        _convertLatLngs: function(p) {
          var A = Dr.prototype._convertLatLngs.call(this, p), B = A.length;
          return B >= 2 && A[0] instanceof Di && A[0].equals(A[B - 1]) && A.pop(), A;
        },
        _setLatLngs: function(p) {
          Dr.prototype._setLatLngs.call(this, p), rs(this._latlngs) && (this._latlngs = [this._latlngs]);
        },
        _defaultShape: function() {
          return rs(this._latlngs[0]) ? this._latlngs[0] : this._latlngs[0][0];
        },
        _clipPoints: function() {
          var p = this._renderer._bounds, A = this.options.weight, B = new fi(A, A);
          if (p = new Gi(p.min.subtract(B), p.max.add(B)), this._parts = [], !(!this._pxBounds || !this._pxBounds.intersects(p))) {
            if (this.options.noClip) {
              this._parts = this._rings;
              return;
            }
            for (var X = 0, ne = this._rings.length, ye; X < ne; X++)
              ye = so(this._rings[X], p, !0), ye.length && this._parts.push(ye);
          }
        },
        _updatePath: function() {
          this._renderer._updatePoly(this, !0);
        },
        // Needed by the `Canvas` renderer for interactivity
        _containsPoint: function(p) {
          var A = !1, B, X, ne, ye, We, at, ft, Rt;
          if (!this._pxBounds || !this._pxBounds.contains(p))
            return !1;
          for (ye = 0, ft = this._parts.length; ye < ft; ye++)
            for (B = this._parts[ye], We = 0, Rt = B.length, at = Rt - 1; We < Rt; at = We++)
              X = B[We], ne = B[at], X.y > p.y != ne.y > p.y && p.x < (ne.x - X.x) * (p.y - X.y) / (ne.y - X.y) + X.x && (A = !A);
          return A || Dr.prototype._containsPoint.call(this, p, !0);
        }
      });
      function Yo(p, A) {
        return new Kr(p, A);
      }
      var cr = Xr.extend({
        /* @section
         * @aka GeoJSON options
         *
         * @option pointToLayer: Function = *
         * A `Function` defining how GeoJSON points spawn Leaflet layers. It is internally
         * called when data is added, passing the GeoJSON point feature and its `LatLng`.
         * The default is to spawn a default `Marker`:
         * ```js
         * function(geoJsonPoint, latlng) {
         * 	return L.marker(latlng);
         * }
         * ```
         *
         * @option style: Function = *
         * A `Function` defining the `Path options` for styling GeoJSON lines and polygons,
         * called internally when data is added.
         * The default value is to not override any defaults:
         * ```js
         * function (geoJsonFeature) {
         * 	return {}
         * }
         * ```
         *
         * @option onEachFeature: Function = *
         * A `Function` that will be called once for each created `Feature`, after it has
         * been created and styled. Useful for attaching events and popups to features.
         * The default is to do nothing with the newly created layers:
         * ```js
         * function (feature, layer) {}
         * ```
         *
         * @option filter: Function = *
         * A `Function` that will be used to decide whether to include a feature or not.
         * The default is to include all features:
         * ```js
         * function (geoJsonFeature) {
         * 	return true;
         * }
         * ```
         * Note: dynamically changing the `filter` option will have effect only on newly
         * added data. It will _not_ re-evaluate already included features.
         *
         * @option coordsToLatLng: Function = *
         * A `Function` that will be used for converting GeoJSON coordinates to `LatLng`s.
         * The default is the `coordsToLatLng` static method.
         *
         * @option markersInheritOptions: Boolean = false
         * Whether default Markers for "Point" type Features inherit from group options.
         */
        initialize: function(p, A) {
          be(this, A), this._layers = {}, p && this.addData(p);
        },
        // @method addData( <GeoJSON> data ): this
        // Adds a GeoJSON object to the layer.
        addData: function(p) {
          var A = vt(p) ? p : p.features, B, X, ne;
          if (A) {
            for (B = 0, X = A.length; B < X; B++)
              ne = A[B], (ne.geometries || ne.geometry || ne.features || ne.coordinates) && this.addData(ne);
            return this;
          }
          var ye = this.options;
          if (ye.filter && !ye.filter(p))
            return this;
          var We = Eo(p, ye);
          return We ? (We.feature = ga(p), We.defaultOptions = We.options, this.resetStyle(We), ye.onEachFeature && ye.onEachFeature(p, We), this.addLayer(We)) : this;
        },
        // @method resetStyle( <Path> layer? ): this
        // Resets the given vector layer's style to the original GeoJSON style, useful for resetting style after hover events.
        // If `layer` is omitted, the style of all features in the current layer is reset.
        resetStyle: function(p) {
          return p === void 0 ? this.eachLayer(this.resetStyle, this) : (p.options = w({}, p.defaultOptions), this._setLayerStyle(p, this.options.style), this);
        },
        // @method setStyle( <Function> style ): this
        // Changes styles of GeoJSON vector layers with the given style function.
        setStyle: function(p) {
          return this.eachLayer(function(A) {
            this._setLayerStyle(A, p);
          }, this);
        },
        _setLayerStyle: function(p, A) {
          p.setStyle && (typeof A == "function" && (A = A(p.feature)), p.setStyle(A));
        }
      });
      function Eo(p, A) {
        var B = p.type === "Feature" ? p.geometry : p, X = B ? B.coordinates : null, ne = [], ye = A && A.pointToLayer, We = A && A.coordsToLatLng || Uc, at, ft, Rt, ii;
        if (!X && !B)
          return null;
        switch (B.type) {
          case "Point":
            return at = We(X), Zh(ye, p, at, A);
          case "MultiPoint":
            for (Rt = 0, ii = X.length; Rt < ii; Rt++)
              at = We(X[Rt]), ne.push(Zh(ye, p, at, A));
            return new Xr(ne);
          case "LineString":
          case "MultiLineString":
            return ft = Ua(X, B.type === "LineString" ? 0 : 1, We), new Dr(ft, A);
          case "Polygon":
          case "MultiPolygon":
            return ft = Ua(X, B.type === "Polygon" ? 1 : 2, We), new Kr(ft, A);
          case "GeometryCollection":
            for (Rt = 0, ii = B.geometries.length; Rt < ii; Rt++) {
              var Ci = Eo({
                geometry: B.geometries[Rt],
                type: "Feature",
                properties: p.properties
              }, A);
              Ci && ne.push(Ci);
            }
            return new Xr(ne);
          case "FeatureCollection":
            for (Rt = 0, ii = B.features.length; Rt < ii; Rt++) {
              var Wi = Eo(B.features[Rt], A);
              Wi && ne.push(Wi);
            }
            return new Xr(ne);
          default:
            throw new Error("Invalid GeoJSON object.");
        }
      }
      function Zh(p, A, B, X) {
        return p ? p(A, B) : new ks(B, X && X.markersInheritOptions && X);
      }
      function Uc(p) {
        return new Di(p[1], p[0], p[2]);
      }
      function Ua(p, A, B) {
        for (var X = [], ne = 0, ye = p.length, We; ne < ye; ne++)
          We = A ? Ua(p[ne], A - 1, B) : (B || Uc)(p[ne]), X.push(We);
        return X;
      }
      function $l(p, A) {
        return p = xi(p), p.alt !== void 0 ? [ae(p.lng, A), ae(p.lat, A), ae(p.alt, A)] : [ae(p.lng, A), ae(p.lat, A)];
      }
      function yl(p, A, B, X) {
        for (var ne = [], ye = 0, We = p.length; ye < We; ye++)
          ne.push(A ? yl(p[ye], rs(p[ye]) ? 0 : A - 1, B, X) : $l(p[ye], X));
        return !A && B && ne.length > 0 && ne.push(ne[0].slice()), ne;
      }
      function _a(p, A) {
        return p.feature ? w({}, p.feature, { geometry: A }) : ga(A);
      }
      function ga(p) {
        return p.type === "Feature" || p.type === "FeatureCollection" ? p : {
          type: "Feature",
          properties: {},
          geometry: p
        };
      }
      var Po = {
        toGeoJSON: function(p) {
          return _a(this, {
            type: "Point",
            coordinates: $l(this.getLatLng(), p)
          });
        }
      };
      ks.include(Po), gs.include(Po), ma.include(Po), Dr.include({
        toGeoJSON: function(p) {
          var A = !rs(this._latlngs), B = yl(this._latlngs, A ? 1 : 0, !1, p);
          return _a(this, {
            type: (A ? "Multi" : "") + "LineString",
            coordinates: B
          });
        }
      }), Kr.include({
        toGeoJSON: function(p) {
          var A = !rs(this._latlngs), B = A && !rs(this._latlngs[0]), X = yl(this._latlngs, B ? 2 : A ? 1 : 0, !0, p);
          return A || (X = [X]), _a(this, {
            type: (B ? "Multi" : "") + "Polygon",
            coordinates: X
          });
        }
      }), lr.include({
        toMultiPoint: function(p) {
          var A = [];
          return this.eachLayer(function(B) {
            A.push(B.toGeoJSON(p).geometry.coordinates);
          }), _a(this, {
            type: "MultiPoint",
            coordinates: A
          });
        },
        // @method toGeoJSON(precision?: Number|false): Object
        // Coordinates values are rounded with [`formatNum`](#util-formatnum) function with given `precision`.
        // Returns a [`GeoJSON`](https://en.wikipedia.org/wiki/GeoJSON) representation of the layer group (as a GeoJSON `FeatureCollection`, `GeometryCollection`, or `MultiPoint`).
        toGeoJSON: function(p) {
          var A = this.feature && this.feature.geometry && this.feature.geometry.type;
          if (A === "MultiPoint")
            return this.toMultiPoint(p);
          var B = A === "GeometryCollection", X = [];
          return this.eachLayer(function(ne) {
            if (ne.toGeoJSON) {
              var ye = ne.toGeoJSON(p);
              if (B)
                X.push(ye.geometry);
              else {
                var We = ga(ye);
                We.type === "FeatureCollection" ? X.push.apply(X, We.features) : X.push(We);
              }
            }
          }), B ? _a(this, {
            geometries: X,
            type: "GeometryCollection"
          }) : {
            type: "FeatureCollection",
            features: X
          };
        }
      });
      function Hh(p, A) {
        return new cr(p, A);
      }
      var td = Hh, ja = ar.extend({
        // @section
        // @aka ImageOverlay options
        options: {
          // @option opacity: Number = 1.0
          // The opacity of the image overlay.
          opacity: 1,
          // @option alt: String = ''
          // Text for the `alt` attribute of the image (useful for accessibility).
          alt: "",
          // @option interactive: Boolean = false
          // If `true`, the image overlay will emit [mouse events](#interactive-layer) when clicked or hovered.
          interactive: !1,
          // @option crossOrigin: Boolean|String = false
          // Whether the crossOrigin attribute will be added to the image.
          // If a String is provided, the image will have its crossOrigin attribute set to the String provided. This is needed if you want to access image pixel data.
          // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
          crossOrigin: !1,
          // @option errorOverlayUrl: String = ''
          // URL to the overlay image to show in place of the overlay that failed to load.
          errorOverlayUrl: "",
          // @option zIndex: Number = 1
          // The explicit [zIndex](https://developer.mozilla.org/docs/Web/CSS/CSS_Positioning/Understanding_z_index) of the overlay layer.
          zIndex: 1,
          // @option className: String = ''
          // A custom class name to assign to the image. Empty by default.
          className: ""
        },
        initialize: function(p, A, B) {
          this._url = p, this._bounds = ln(A), be(this, B);
        },
        onAdd: function() {
          this._image || (this._initImage(), this.options.opacity < 1 && this._updateOpacity()), this.options.interactive && (Vi(this._image, "leaflet-interactive"), this.addInteractiveTarget(this._image)), this.getPane().appendChild(this._image), this._reset();
        },
        onRemove: function() {
          xn(this._image), this.options.interactive && this.removeInteractiveTarget(this._image);
        },
        // @method setOpacity(opacity: Number): this
        // Sets the opacity of the overlay.
        setOpacity: function(p) {
          return this.options.opacity = p, this._image && this._updateOpacity(), this;
        },
        setStyle: function(p) {
          return p.opacity && this.setOpacity(p.opacity), this;
        },
        // @method bringToFront(): this
        // Brings the layer to the top of all overlays.
        bringToFront: function() {
          return this._map && Go(this._image), this;
        },
        // @method bringToBack(): this
        // Brings the layer to the bottom of all overlays.
        bringToBack: function() {
          return this._map && aa(this._image), this;
        },
        // @method setUrl(url: String): this
        // Changes the URL of the image.
        setUrl: function(p) {
          return this._url = p, this._image && (this._image.src = p), this;
        },
        // @method setBounds(bounds: LatLngBounds): this
        // Update the bounds that this ImageOverlay covers
        setBounds: function(p) {
          return this._bounds = ln(p), this._map && this._reset(), this;
        },
        getEvents: function() {
          var p = {
            zoom: this._reset,
            viewreset: this._reset
          };
          return this._zoomAnimated && (p.zoomanim = this._animateZoom), p;
        },
        // @method setZIndex(value: Number): this
        // Changes the [zIndex](#imageoverlay-zindex) of the image overlay.
        setZIndex: function(p) {
          return this.options.zIndex = p, this._updateZIndex(), this;
        },
        // @method getBounds(): LatLngBounds
        // Get the bounds that this ImageOverlay covers
        getBounds: function() {
          return this._bounds;
        },
        // @method getElement(): HTMLElement
        // Returns the instance of [`HTMLImageElement`](https://developer.mozilla.org/docs/Web/API/HTMLImageElement)
        // used by this overlay.
        getElement: function() {
          return this._image;
        },
        _initImage: function() {
          var p = this._url.tagName === "IMG", A = this._image = p ? this._url : tn("img");
          if (Vi(A, "leaflet-image-layer"), this._zoomAnimated && Vi(A, "leaflet-zoom-animated"), this.options.className && Vi(A, this.options.className), A.onselectstart = J, A.onmousemove = J, A.onload = E(this.fire, this, "load"), A.onerror = E(this._overlayOnError, this, "error"), (this.options.crossOrigin || this.options.crossOrigin === "") && (A.crossOrigin = this.options.crossOrigin === !0 ? "" : this.options.crossOrigin), this.options.zIndex && this._updateZIndex(), p) {
            this._url = A.src;
            return;
          }
          A.src = this._url, A.alt = this.options.alt;
        },
        _animateZoom: function(p) {
          var A = this._map.getZoomScale(p.zoom), B = this._map._latLngBoundsToNewLayerBounds(this._bounds, p.zoom, p.center).min;
          Ks(this._image, B, A);
        },
        _reset: function() {
          var p = this._image, A = new Gi(
            this._map.latLngToLayerPoint(this._bounds.getNorthWest()),
            this._map.latLngToLayerPoint(this._bounds.getSouthEast())
          ), B = A.getSize();
          Yn(p, A.min), p.style.width = B.x + "px", p.style.height = B.y + "px";
        },
        _updateOpacity: function() {
          Qn(this._image, this.options.opacity);
        },
        _updateZIndex: function() {
          this._image && this.options.zIndex !== void 0 && this.options.zIndex !== null && (this._image.style.zIndex = this.options.zIndex);
        },
        _overlayOnError: function() {
          this.fire("error");
          var p = this.options.errorOverlayUrl;
          p && this._url !== p && (this._url = p, this._image.src = p);
        },
        // @method getCenter(): LatLng
        // Returns the center of the ImageOverlay.
        getCenter: function() {
          return this._bounds.getCenter();
        }
      }), jc = function(p, A, B) {
        return new ja(p, A, B);
      }, Gc = ja.extend({
        // @section
        // @aka VideoOverlay options
        options: {
          // @option autoplay: Boolean = true
          // Whether the video starts playing automatically when loaded.
          // On some browsers autoplay will only work with `muted: true`
          autoplay: !0,
          // @option loop: Boolean = true
          // Whether the video will loop back to the beginning when played.
          loop: !0,
          // @option keepAspectRatio: Boolean = true
          // Whether the video will save aspect ratio after the projection.
          // Relevant for supported browsers. See [browser compatibility](https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit)
          keepAspectRatio: !0,
          // @option muted: Boolean = false
          // Whether the video starts on mute when loaded.
          muted: !1,
          // @option playsInline: Boolean = true
          // Mobile browsers will play the video right where it is instead of open it up in fullscreen mode.
          playsInline: !0
        },
        _initImage: function() {
          var p = this._url.tagName === "VIDEO", A = this._image = p ? this._url : tn("video");
          if (Vi(A, "leaflet-image-layer"), this._zoomAnimated && Vi(A, "leaflet-zoom-animated"), this.options.className && Vi(A, this.options.className), A.onselectstart = J, A.onmousemove = J, A.onloadeddata = E(this.fire, this, "load"), p) {
            for (var B = A.getElementsByTagName("source"), X = [], ne = 0; ne < B.length; ne++)
              X.push(B[ne].src);
            this._url = B.length > 0 ? X : [A.src];
            return;
          }
          vt(this._url) || (this._url = [this._url]), !this.options.keepAspectRatio && Object.prototype.hasOwnProperty.call(A.style, "objectFit") && (A.style.objectFit = "fill"), A.autoplay = !!this.options.autoplay, A.loop = !!this.options.loop, A.muted = !!this.options.muted, A.playsInline = !!this.options.playsInline;
          for (var ye = 0; ye < this._url.length; ye++) {
            var We = tn("source");
            We.src = this._url[ye], A.appendChild(We);
          }
        }
        // @method getElement(): HTMLVideoElement
        // Returns the instance of [`HTMLVideoElement`](https://developer.mozilla.org/docs/Web/API/HTMLVideoElement)
        // used by this overlay.
      });
      function hr(p, A, B) {
        return new Gc(p, A, B);
      }
      var Zc = ja.extend({
        _initImage: function() {
          var p = this._image = this._url;
          Vi(p, "leaflet-image-layer"), this._zoomAnimated && Vi(p, "leaflet-zoom-animated"), this.options.className && Vi(p, this.options.className), p.onselectstart = J, p.onmousemove = J;
        }
        // @method getElement(): SVGElement
        // Returns the instance of [`SVGElement`](https://developer.mozilla.org/docs/Web/API/SVGElement)
        // used by this overlay.
      });
      function Hc(p, A, B) {
        return new Zc(p, A, B);
      }
      var xr = ar.extend({
        // @section
        // @aka DivOverlay options
        options: {
          // @option interactive: Boolean = false
          // If true, the popup/tooltip will listen to the mouse events.
          interactive: !1,
          // @option offset: Point = Point(0, 0)
          // The offset of the overlay position.
          offset: [0, 0],
          // @option className: String = ''
          // A custom CSS class name to assign to the overlay.
          className: "",
          // @option pane: String = undefined
          // `Map pane` where the overlay will be added.
          pane: void 0,
          // @option content: String|HTMLElement|Function = ''
          // Sets the HTML content of the overlay while initializing. If a function is passed the source layer will be
          // passed to the function. The function should return a `String` or `HTMLElement` to be used in the overlay.
          content: ""
        },
        initialize: function(p, A) {
          p && (p instanceof Di || vt(p)) ? (this._latlng = xi(p), be(this, A)) : (be(this, p), this._source = A), this.options.content && (this._content = this.options.content);
        },
        // @method openOn(map: Map): this
        // Adds the overlay to the map.
        // Alternative to `map.openPopup(popup)`/`.openTooltip(tooltip)`.
        openOn: function(p) {
          return p = arguments.length ? p : this._source._map, p.hasLayer(this) || p.addLayer(this), this;
        },
        // @method close(): this
        // Closes the overlay.
        // Alternative to `map.closePopup(popup)`/`.closeTooltip(tooltip)`
        // and `layer.closePopup()`/`.closeTooltip()`.
        close: function() {
          return this._map && this._map.removeLayer(this), this;
        },
        // @method toggle(layer?: Layer): this
        // Opens or closes the overlay bound to layer depending on its current state.
        // Argument may be omitted only for overlay bound to layer.
        // Alternative to `layer.togglePopup()`/`.toggleTooltip()`.
        toggle: function(p) {
          return this._map ? this.close() : (arguments.length ? this._source = p : p = this._source, this._prepareOpen(), this.openOn(p._map)), this;
        },
        onAdd: function(p) {
          this._zoomAnimated = p._zoomAnimated, this._container || this._initLayout(), p._fadeAnimated && Qn(this._container, 0), clearTimeout(this._removeTimeout), this.getPane().appendChild(this._container), this.update(), p._fadeAnimated && Qn(this._container, 1), this.bringToFront(), this.options.interactive && (Vi(this._container, "leaflet-interactive"), this.addInteractiveTarget(this._container));
        },
        onRemove: function(p) {
          p._fadeAnimated ? (Qn(this._container, 0), this._removeTimeout = setTimeout(E(xn, void 0, this._container), 200)) : xn(this._container), this.options.interactive && (Hn(this._container, "leaflet-interactive"), this.removeInteractiveTarget(this._container));
        },
        // @namespace DivOverlay
        // @method getLatLng: LatLng
        // Returns the geographical point of the overlay.
        getLatLng: function() {
          return this._latlng;
        },
        // @method setLatLng(latlng: LatLng): this
        // Sets the geographical point where the overlay will open.
        setLatLng: function(p) {
          return this._latlng = xi(p), this._map && (this._updatePosition(), this._adjustPan()), this;
        },
        // @method getContent: String|HTMLElement
        // Returns the content of the overlay.
        getContent: function() {
          return this._content;
        },
        // @method setContent(htmlContent: String|HTMLElement|Function): this
        // Sets the HTML content of the overlay. If a function is passed the source layer will be passed to the function.
        // The function should return a `String` or `HTMLElement` to be used in the overlay.
        setContent: function(p) {
          return this._content = p, this.update(), this;
        },
        // @method getElement: String|HTMLElement
        // Returns the HTML container of the overlay.
        getElement: function() {
          return this._container;
        },
        // @method update: null
        // Updates the overlay content, layout and position. Useful for updating the overlay after something inside changed, e.g. image loaded.
        update: function() {
          this._map && (this._container.style.visibility = "hidden", this._updateContent(), this._updateLayout(), this._updatePosition(), this._container.style.visibility = "", this._adjustPan());
        },
        getEvents: function() {
          var p = {
            zoom: this._updatePosition,
            viewreset: this._updatePosition
          };
          return this._zoomAnimated && (p.zoomanim = this._animateZoom), p;
        },
        // @method isOpen: Boolean
        // Returns `true` when the overlay is visible on the map.
        isOpen: function() {
          return !!this._map && this._map.hasLayer(this);
        },
        // @method bringToFront: this
        // Brings this overlay in front of other overlays (in the same map pane).
        bringToFront: function() {
          return this._map && Go(this._container), this;
        },
        // @method bringToBack: this
        // Brings this overlay to the back of other overlays (in the same map pane).
        bringToBack: function() {
          return this._map && aa(this._container), this;
        },
        // prepare bound overlay to open: update latlng pos / content source (for FeatureGroup)
        _prepareOpen: function(p) {
          var A = this._source;
          if (!A._map)
            return !1;
          if (A instanceof Xr) {
            A = null;
            var B = this._source._layers;
            for (var X in B)
              if (B[X]._map) {
                A = B[X];
                break;
              }
            if (!A)
              return !1;
            this._source = A;
          }
          if (!p)
            if (A.getCenter)
              p = A.getCenter();
            else if (A.getLatLng)
              p = A.getLatLng();
            else if (A.getBounds)
              p = A.getBounds().getCenter();
            else
              throw new Error("Unable to get source layer LatLng.");
          return this.setLatLng(p), this._map && this.update(), !0;
        },
        _updateContent: function() {
          if (this._content) {
            var p = this._contentNode, A = typeof this._content == "function" ? this._content(this._source || this) : this._content;
            if (typeof A == "string")
              p.innerHTML = A;
            else {
              for (; p.hasChildNodes(); )
                p.removeChild(p.firstChild);
              p.appendChild(A);
            }
            this.fire("contentupdate");
          }
        },
        _updatePosition: function() {
          if (this._map) {
            var p = this._map.latLngToLayerPoint(this._latlng), A = ni(this.options.offset), B = this._getAnchor();
            this._zoomAnimated ? Yn(this._container, p.add(B)) : A = A.add(p).add(B);
            var X = this._containerBottom = -A.y, ne = this._containerLeft = -Math.round(this._containerWidth / 2) + A.x;
            this._container.style.bottom = X + "px", this._container.style.left = ne + "px";
          }
        },
        _getAnchor: function() {
          return [0, 0];
        }
      });
      nn.include({
        _initOverlay: function(p, A, B, X) {
          var ne = A;
          return ne instanceof p || (ne = new p(X).setContent(A)), B && ne.setLatLng(B), ne;
        }
      }), ar.include({
        _initOverlay: function(p, A, B, X) {
          var ne = B;
          return ne instanceof p ? (be(ne, X), ne._source = this) : (ne = A && !X ? A : new p(X, this), ne.setContent(B)), ne;
        }
      });
      var Ko = xr.extend({
        // @section
        // @aka Popup options
        options: {
          // @option pane: String = 'popupPane'
          // `Map pane` where the popup will be added.
          pane: "popupPane",
          // @option offset: Point = Point(0, 7)
          // The offset of the popup position.
          offset: [0, 7],
          // @option maxWidth: Number = 300
          // Max width of the popup, in pixels.
          maxWidth: 300,
          // @option minWidth: Number = 50
          // Min width of the popup, in pixels.
          minWidth: 50,
          // @option maxHeight: Number = null
          // If set, creates a scrollable container of the given height
          // inside a popup if its content exceeds it.
          // The scrollable container can be styled using the
          // `leaflet-popup-scrolled` CSS class selector.
          maxHeight: null,
          // @option autoPan: Boolean = true
          // Set it to `false` if you don't want the map to do panning animation
          // to fit the opened popup.
          autoPan: !0,
          // @option autoPanPaddingTopLeft: Point = null
          // The margin between the popup and the top left corner of the map
          // view after autopanning was performed.
          autoPanPaddingTopLeft: null,
          // @option autoPanPaddingBottomRight: Point = null
          // The margin between the popup and the bottom right corner of the map
          // view after autopanning was performed.
          autoPanPaddingBottomRight: null,
          // @option autoPanPadding: Point = Point(5, 5)
          // Equivalent of setting both top left and bottom right autopan padding to the same value.
          autoPanPadding: [5, 5],
          // @option keepInView: Boolean = false
          // Set it to `true` if you want to prevent users from panning the popup
          // off of the screen while it is open.
          keepInView: !1,
          // @option closeButton: Boolean = true
          // Controls the presence of a close button in the popup.
          closeButton: !0,
          // @option autoClose: Boolean = true
          // Set it to `false` if you want to override the default behavior of
          // the popup closing when another popup is opened.
          autoClose: !0,
          // @option closeOnEscapeKey: Boolean = true
          // Set it to `false` if you want to override the default behavior of
          // the ESC key for closing of the popup.
          closeOnEscapeKey: !0,
          // @option closeOnClick: Boolean = *
          // Set it if you want to override the default behavior of the popup closing when user clicks
          // on the map. Defaults to the map's [`closePopupOnClick`](#map-closepopuponclick) option.
          // @option className: String = ''
          // A custom CSS class name to assign to the popup.
          className: ""
        },
        // @namespace Popup
        // @method openOn(map: Map): this
        // Alternative to `map.openPopup(popup)`.
        // Adds the popup to the map and closes the previous one.
        openOn: function(p) {
          return p = arguments.length ? p : this._source._map, !p.hasLayer(this) && p._popup && p._popup.options.autoClose && p.removeLayer(p._popup), p._popup = this, xr.prototype.openOn.call(this, p);
        },
        onAdd: function(p) {
          xr.prototype.onAdd.call(this, p), p.fire("popupopen", { popup: this }), this._source && (this._source.fire("popupopen", { popup: this }, !0), this._source instanceof Tt || this._source.on("preclick", ms));
        },
        onRemove: function(p) {
          xr.prototype.onRemove.call(this, p), p.fire("popupclose", { popup: this }), this._source && (this._source.fire("popupclose", { popup: this }, !0), this._source instanceof Tt || this._source.off("preclick", ms));
        },
        getEvents: function() {
          var p = xr.prototype.getEvents.call(this);
          return (this.options.closeOnClick !== void 0 ? this.options.closeOnClick : this._map.options.closePopupOnClick) && (p.preclick = this.close), this.options.keepInView && (p.moveend = this._adjustPan), p;
        },
        _initLayout: function() {
          var p = "leaflet-popup", A = this._container = tn(
            "div",
            p + " " + (this.options.className || "") + " leaflet-zoom-animated"
          ), B = this._wrapper = tn("div", p + "-content-wrapper", A);
          if (this._contentNode = tn("div", p + "-content", B), Pi(A), bo(this._contentNode), Bi(A, "contextmenu", ms), this._tipContainer = tn("div", p + "-tip-container", A), this._tip = tn("div", p + "-tip", this._tipContainer), this.options.closeButton) {
            var X = this._closeButton = tn("a", p + "-close-button", A);
            X.setAttribute("role", "button"), X.setAttribute("aria-label", "Close popup"), X.href = "#close", X.innerHTML = '<span aria-hidden="true">&#215;</span>', Bi(X, "click", function(ne) {
              _s(ne), this.close();
            }, this);
          }
        },
        _updateLayout: function() {
          var p = this._contentNode, A = p.style;
          A.width = "", A.whiteSpace = "nowrap";
          var B = p.offsetWidth;
          B = Math.min(B, this.options.maxWidth), B = Math.max(B, this.options.minWidth), A.width = B + 1 + "px", A.whiteSpace = "", A.height = "";
          var X = p.offsetHeight, ne = this.options.maxHeight, ye = "leaflet-popup-scrolled";
          ne && X > ne ? (A.height = ne + "px", Vi(p, ye)) : Hn(p, ye), this._containerWidth = this._container.offsetWidth;
        },
        _animateZoom: function(p) {
          var A = this._map._latLngToNewLayerPoint(this._latlng, p.zoom, p.center), B = this._getAnchor();
          Yn(this._container, A.add(B));
        },
        _adjustPan: function() {
          if (this.options.autoPan) {
            if (this._map._panAnim && this._map._panAnim.stop(), this._autopanning) {
              this._autopanning = !1;
              return;
            }
            var p = this._map, A = parseInt(jo(this._container, "marginBottom"), 10) || 0, B = this._container.offsetHeight + A, X = this._containerWidth, ne = new fi(this._containerLeft, -B - this._containerBottom);
            ne._add($r(this._container));
            var ye = p.layerPointToContainerPoint(ne), We = ni(this.options.autoPanPadding), at = ni(this.options.autoPanPaddingTopLeft || We), ft = ni(this.options.autoPanPaddingBottomRight || We), Rt = p.getSize(), ii = 0, Ci = 0;
            ye.x + X + ft.x > Rt.x && (ii = ye.x + X - Rt.x + ft.x), ye.x - ii - at.x < 0 && (ii = ye.x - at.x), ye.y + B + ft.y > Rt.y && (Ci = ye.y + B - Rt.y + ft.y), ye.y - Ci - at.y < 0 && (Ci = ye.y - at.y), (ii || Ci) && (this.options.keepInView && (this._autopanning = !0), p.fire("autopanstart").panBy([ii, Ci]));
          }
        },
        _getAnchor: function() {
          return ni(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() : [0, 0]);
        }
      }), Xl = function(p, A) {
        return new Ko(p, A);
      };
      nn.mergeOptions({
        closePopupOnClick: !0
      }), nn.include({
        // @method openPopup(popup: Popup): this
        // Opens the specified popup while closing the previously opened (to make sure only one is opened at one time for usability).
        // @alternative
        // @method openPopup(content: String|HTMLElement, latlng: LatLng, options?: Popup options): this
        // Creates a popup with the specified content and options and opens it in the given point on a map.
        openPopup: function(p, A, B) {
          return this._initOverlay(Ko, p, A, B).openOn(this), this;
        },
        // @method closePopup(popup?: Popup): this
        // Closes the popup previously opened with [openPopup](#map-openpopup) (or the given one).
        closePopup: function(p) {
          return p = arguments.length ? p : this._popup, p && p.close(), this;
        }
      }), ar.include({
        // @method bindPopup(content: String|HTMLElement|Function|Popup, options?: Popup options): this
        // Binds a popup to the layer with the passed `content` and sets up the
        // necessary event listeners. If a `Function` is passed it will receive
        // the layer as the first argument and should return a `String` or `HTMLElement`.
        bindPopup: function(p, A) {
          return this._popup = this._initOverlay(Ko, this._popup, p, A), this._popupHandlersAdded || (this.on({
            click: this._openPopup,
            keypress: this._onKeyPress,
            remove: this.closePopup,
            move: this._movePopup
          }), this._popupHandlersAdded = !0), this;
        },
        // @method unbindPopup(): this
        // Removes the popup previously bound with `bindPopup`.
        unbindPopup: function() {
          return this._popup && (this.off({
            click: this._openPopup,
            keypress: this._onKeyPress,
            remove: this.closePopup,
            move: this._movePopup
          }), this._popupHandlersAdded = !1, this._popup = null), this;
        },
        // @method openPopup(latlng?: LatLng): this
        // Opens the bound popup at the specified `latlng` or at the default popup anchor if no `latlng` is passed.
        openPopup: function(p) {
          return this._popup && (this instanceof Xr || (this._popup._source = this), this._popup._prepareOpen(p || this._latlng) && this._popup.openOn(this._map)), this;
        },
        // @method closePopup(): this
        // Closes the popup bound to this layer if it is open.
        closePopup: function() {
          return this._popup && this._popup.close(), this;
        },
        // @method togglePopup(): this
        // Opens or closes the popup bound to this layer depending on its current state.
        togglePopup: function() {
          return this._popup && this._popup.toggle(this), this;
        },
        // @method isPopupOpen(): boolean
        // Returns `true` if the popup bound to this layer is currently open.
        isPopupOpen: function() {
          return this._popup ? this._popup.isOpen() : !1;
        },
        // @method setPopupContent(content: String|HTMLElement|Popup): this
        // Sets the content of the popup bound to this layer.
        setPopupContent: function(p) {
          return this._popup && this._popup.setContent(p), this;
        },
        // @method getPopup(): Popup
        // Returns the popup bound to this layer.
        getPopup: function() {
          return this._popup;
        },
        _openPopup: function(p) {
          if (!(!this._popup || !this._map)) {
            Js(p);
            var A = p.layer || p.target;
            if (this._popup._source === A && !(A instanceof Tt)) {
              this._map.hasLayer(this._popup) ? this.closePopup() : this.openPopup(p.latlng);
              return;
            }
            this._popup._source = A, this.openPopup(p.latlng);
          }
        },
        _movePopup: function(p) {
          this._popup.setLatLng(p.latlng);
        },
        _onKeyPress: function(p) {
          p.originalEvent.keyCode === 13 && this._openPopup(p);
        }
      });
      var Jr = xr.extend({
        // @section
        // @aka Tooltip options
        options: {
          // @option pane: String = 'tooltipPane'
          // `Map pane` where the tooltip will be added.
          pane: "tooltipPane",
          // @option offset: Point = Point(0, 0)
          // Optional offset of the tooltip position.
          offset: [0, 0],
          // @option direction: String = 'auto'
          // Direction where to open the tooltip. Possible values are: `right`, `left`,
          // `top`, `bottom`, `center`, `auto`.
          // `auto` will dynamically switch between `right` and `left` according to the tooltip
          // position on the map.
          direction: "auto",
          // @option permanent: Boolean = false
          // Whether to open the tooltip permanently or only on mouseover.
          permanent: !1,
          // @option sticky: Boolean = false
          // If true, the tooltip will follow the mouse instead of being fixed at the feature center.
          sticky: !1,
          // @option opacity: Number = 0.9
          // Tooltip container opacity.
          opacity: 0.9
        },
        onAdd: function(p) {
          xr.prototype.onAdd.call(this, p), this.setOpacity(this.options.opacity), p.fire("tooltipopen", { tooltip: this }), this._source && (this.addEventParent(this._source), this._source.fire("tooltipopen", { tooltip: this }, !0));
        },
        onRemove: function(p) {
          xr.prototype.onRemove.call(this, p), p.fire("tooltipclose", { tooltip: this }), this._source && (this.removeEventParent(this._source), this._source.fire("tooltipclose", { tooltip: this }, !0));
        },
        getEvents: function() {
          var p = xr.prototype.getEvents.call(this);
          return this.options.permanent || (p.preclick = this.close), p;
        },
        _initLayout: function() {
          var p = "leaflet-tooltip", A = p + " " + (this.options.className || "") + " leaflet-zoom-" + (this._zoomAnimated ? "animated" : "hide");
          this._contentNode = this._container = tn("div", A), this._container.setAttribute("role", "tooltip"), this._container.setAttribute("id", "leaflet-tooltip-" + O(this));
        },
        _updateLayout: function() {
        },
        _adjustPan: function() {
        },
        _setPosition: function(p) {
          var A, B, X = this._map, ne = this._container, ye = X.latLngToContainerPoint(X.getCenter()), We = X.layerPointToContainerPoint(p), at = this.options.direction, ft = ne.offsetWidth, Rt = ne.offsetHeight, ii = ni(this.options.offset), Ci = this._getAnchor();
          at === "top" ? (A = ft / 2, B = Rt) : at === "bottom" ? (A = ft / 2, B = 0) : at === "center" ? (A = ft / 2, B = Rt / 2) : at === "right" ? (A = 0, B = Rt / 2) : at === "left" ? (A = ft, B = Rt / 2) : We.x < ye.x ? (at = "right", A = 0, B = Rt / 2) : (at = "left", A = ft + (ii.x + Ci.x) * 2, B = Rt / 2), p = p.subtract(ni(A, B, !0)).add(ii).add(Ci), Hn(ne, "leaflet-tooltip-right"), Hn(ne, "leaflet-tooltip-left"), Hn(ne, "leaflet-tooltip-top"), Hn(ne, "leaflet-tooltip-bottom"), Vi(ne, "leaflet-tooltip-" + at), Yn(ne, p);
        },
        _updatePosition: function() {
          var p = this._map.latLngToLayerPoint(this._latlng);
          this._setPosition(p);
        },
        setOpacity: function(p) {
          this.options.opacity = p, this._container && Qn(this._container, p);
        },
        _animateZoom: function(p) {
          var A = this._map._latLngToNewLayerPoint(this._latlng, p.zoom, p.center);
          this._setPosition(A);
        },
        _getAnchor: function() {
          return ni(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() : [0, 0]);
        }
      }), Yl = function(p, A) {
        return new Jr(p, A);
      };
      nn.include({
        // @method openTooltip(tooltip: Tooltip): this
        // Opens the specified tooltip.
        // @alternative
        // @method openTooltip(content: String|HTMLElement, latlng: LatLng, options?: Tooltip options): this
        // Creates a tooltip with the specified content and options and open it.
        openTooltip: function(p, A, B) {
          return this._initOverlay(Jr, p, A, B).openOn(this), this;
        },
        // @method closeTooltip(tooltip: Tooltip): this
        // Closes the tooltip given as parameter.
        closeTooltip: function(p) {
          return p.close(), this;
        }
      }), ar.include({
        // @method bindTooltip(content: String|HTMLElement|Function|Tooltip, options?: Tooltip options): this
        // Binds a tooltip to the layer with the passed `content` and sets up the
        // necessary event listeners. If a `Function` is passed it will receive
        // the layer as the first argument and should return a `String` or `HTMLElement`.
        bindTooltip: function(p, A) {
          return this._tooltip && this.isTooltipOpen() && this.unbindTooltip(), this._tooltip = this._initOverlay(Jr, this._tooltip, p, A), this._initTooltipInteractions(), this._tooltip.options.permanent && this._map && this._map.hasLayer(this) && this.openTooltip(), this;
        },
        // @method unbindTooltip(): this
        // Removes the tooltip previously bound with `bindTooltip`.
        unbindTooltip: function() {
          return this._tooltip && (this._initTooltipInteractions(!0), this.closeTooltip(), this._tooltip = null), this;
        },
        _initTooltipInteractions: function(p) {
          if (!(!p && this._tooltipHandlersAdded)) {
            var A = p ? "off" : "on", B = {
              remove: this.closeTooltip,
              move: this._moveTooltip
            };
            this._tooltip.options.permanent ? B.add = this._openTooltip : (B.mouseover = this._openTooltip, B.mouseout = this.closeTooltip, B.click = this._openTooltip, this._map ? this._addFocusListeners() : B.add = this._addFocusListeners), this._tooltip.options.sticky && (B.mousemove = this._moveTooltip), this[A](B), this._tooltipHandlersAdded = !p;
          }
        },
        // @method openTooltip(latlng?: LatLng): this
        // Opens the bound tooltip at the specified `latlng` or at the default tooltip anchor if no `latlng` is passed.
        openTooltip: function(p) {
          return this._tooltip && (this instanceof Xr || (this._tooltip._source = this), this._tooltip._prepareOpen(p) && (this._tooltip.openOn(this._map), this.getElement ? this._setAriaDescribedByOnLayer(this) : this.eachLayer && this.eachLayer(this._setAriaDescribedByOnLayer, this))), this;
        },
        // @method closeTooltip(): this
        // Closes the tooltip bound to this layer if it is open.
        closeTooltip: function() {
          if (this._tooltip)
            return this._tooltip.close();
        },
        // @method toggleTooltip(): this
        // Opens or closes the tooltip bound to this layer depending on its current state.
        toggleTooltip: function() {
          return this._tooltip && this._tooltip.toggle(this), this;
        },
        // @method isTooltipOpen(): boolean
        // Returns `true` if the tooltip bound to this layer is currently open.
        isTooltipOpen: function() {
          return this._tooltip.isOpen();
        },
        // @method setTooltipContent(content: String|HTMLElement|Tooltip): this
        // Sets the content of the tooltip bound to this layer.
        setTooltipContent: function(p) {
          return this._tooltip && this._tooltip.setContent(p), this;
        },
        // @method getTooltip(): Tooltip
        // Returns the tooltip bound to this layer.
        getTooltip: function() {
          return this._tooltip;
        },
        _addFocusListeners: function() {
          this.getElement ? this._addFocusListenersOnLayer(this) : this.eachLayer && this.eachLayer(this._addFocusListenersOnLayer, this);
        },
        _addFocusListenersOnLayer: function(p) {
          var A = typeof p.getElement == "function" && p.getElement();
          A && (Bi(A, "focus", function() {
            this._tooltip._source = p, this.openTooltip();
          }, this), Bi(A, "blur", this.closeTooltip, this));
        },
        _setAriaDescribedByOnLayer: function(p) {
          var A = typeof p.getElement == "function" && p.getElement();
          A && A.setAttribute("aria-describedby", this._tooltip._container.id);
        },
        _openTooltip: function(p) {
          if (!(!this._tooltip || !this._map)) {
            if (this._map.dragging && this._map.dragging.moving() && !this._openOnceFlag) {
              this._openOnceFlag = !0;
              var A = this;
              this._map.once("moveend", function() {
                A._openOnceFlag = !1, A._openTooltip(p);
              });
              return;
            }
            this._tooltip._source = p.layer || p.target, this.openTooltip(this._tooltip.options.sticky ? p.latlng : void 0);
          }
        },
        _moveTooltip: function(p) {
          var A = p.latlng, B, X;
          this._tooltip.options.sticky && p.originalEvent && (B = this._map.mouseEventToContainerPoint(p.originalEvent), X = this._map.containerPointToLayerPoint(B), A = this._map.layerPointToLatLng(X)), this._tooltip.setLatLng(A);
        }
      });
      var Kl = Yr.extend({
        options: {
          // @section
          // @aka DivIcon options
          iconSize: [12, 12],
          // also can be set through CSS
          // iconAnchor: (Point),
          // popupAnchor: (Point),
          // @option html: String|HTMLElement = ''
          // Custom HTML code to put inside the div element, empty by default. Alternatively,
          // an instance of `HTMLElement`.
          html: !1,
          // @option bgPos: Point = [0, 0]
          // Optional relative position of the background, in pixels
          bgPos: null,
          className: "leaflet-div-icon"
        },
        createIcon: function(p) {
          var A = p && p.tagName === "DIV" ? p : document.createElement("div"), B = this.options;
          if (B.html instanceof Element ? (no(A), A.appendChild(B.html)) : A.innerHTML = B.html !== !1 ? B.html : "", B.bgPos) {
            var X = ni(B.bgPos);
            A.style.backgroundPosition = -X.x + "px " + -X.y + "px";
          }
          return this._setIconStyles(A, "icon"), A;
        },
        createShadow: function() {
          return null;
        }
      });
      function ya(p) {
        return new Kl(p);
      }
      Yr.Default = To;
      var ro = ar.extend({
        // @section
        // @aka GridLayer options
        options: {
          // @option tileSize: Number|Point = 256
          // Width and height of tiles in the grid. Use a number if width and height are equal, or `L.point(width, height)` otherwise.
          tileSize: 256,
          // @option opacity: Number = 1.0
          // Opacity of the tiles. Can be used in the `createTile()` function.
          opacity: 1,
          // @option updateWhenIdle: Boolean = (depends)
          // Load new tiles only when panning ends.
          // `true` by default on mobile browsers, in order to avoid too many requests and keep smooth navigation.
          // `false` otherwise in order to display new tiles _during_ panning, since it is easy to pan outside the
          // [`keepBuffer`](#gridlayer-keepbuffer) option in desktop browsers.
          updateWhenIdle: Pe.mobile,
          // @option updateWhenZooming: Boolean = true
          // By default, a smooth zoom animation (during a [touch zoom](#map-touchzoom) or a [`flyTo()`](#map-flyto)) will update grid layers every integer zoom level. Setting this option to `false` will update the grid layer only when the smooth animation ends.
          updateWhenZooming: !0,
          // @option updateInterval: Number = 200
          // Tiles will not update more than once every `updateInterval` milliseconds when panning.
          updateInterval: 200,
          // @option zIndex: Number = 1
          // The explicit zIndex of the tile layer.
          zIndex: 1,
          // @option bounds: LatLngBounds = undefined
          // If set, tiles will only be loaded inside the set `LatLngBounds`.
          bounds: null,
          // @option minZoom: Number = 0
          // The minimum zoom level down to which this layer will be displayed (inclusive).
          minZoom: 0,
          // @option maxZoom: Number = undefined
          // The maximum zoom level up to which this layer will be displayed (inclusive).
          maxZoom: void 0,
          // @option maxNativeZoom: Number = undefined
          // Maximum zoom number the tile source has available. If it is specified,
          // the tiles on all zoom levels higher than `maxNativeZoom` will be loaded
          // from `maxNativeZoom` level and auto-scaled.
          maxNativeZoom: void 0,
          // @option minNativeZoom: Number = undefined
          // Minimum zoom number the tile source has available. If it is specified,
          // the tiles on all zoom levels lower than `minNativeZoom` will be loaded
          // from `minNativeZoom` level and auto-scaled.
          minNativeZoom: void 0,
          // @option noWrap: Boolean = false
          // Whether the layer is wrapped around the antimeridian. If `true`, the
          // GridLayer will only be displayed once at low zoom levels. Has no
          // effect when the [map CRS](#map-crs) doesn't wrap around. Can be used
          // in combination with [`bounds`](#gridlayer-bounds) to prevent requesting
          // tiles outside the CRS limits.
          noWrap: !1,
          // @option pane: String = 'tilePane'
          // `Map pane` where the grid layer will be added.
          pane: "tilePane",
          // @option className: String = ''
          // A custom class name to assign to the tile layer. Empty by default.
          className: "",
          // @option keepBuffer: Number = 2
          // When panning the map, keep this many rows and columns of tiles before unloading them.
          keepBuffer: 2
        },
        initialize: function(p) {
          be(this, p);
        },
        onAdd: function() {
          this._initContainer(), this._levels = {}, this._tiles = {}, this._resetView();
        },
        beforeAdd: function(p) {
          p._addZoomLimit(this);
        },
        onRemove: function(p) {
          this._removeAllTiles(), xn(this._container), p._removeZoomLimit(this), this._container = null, this._tileZoom = void 0;
        },
        // @method bringToFront: this
        // Brings the tile layer to the top of all tile layers.
        bringToFront: function() {
          return this._map && (Go(this._container), this._setAutoZIndex(Math.max)), this;
        },
        // @method bringToBack: this
        // Brings the tile layer to the bottom of all tile layers.
        bringToBack: function() {
          return this._map && (aa(this._container), this._setAutoZIndex(Math.min)), this;
        },
        // @method getContainer: HTMLElement
        // Returns the HTML element that contains the tiles for this layer.
        getContainer: function() {
          return this._container;
        },
        // @method setOpacity(opacity: Number): this
        // Changes the [opacity](#gridlayer-opacity) of the grid layer.
        setOpacity: function(p) {
          return this.options.opacity = p, this._updateOpacity(), this;
        },
        // @method setZIndex(zIndex: Number): this
        // Changes the [zIndex](#gridlayer-zindex) of the grid layer.
        setZIndex: function(p) {
          return this.options.zIndex = p, this._updateZIndex(), this;
        },
        // @method isLoading: Boolean
        // Returns `true` if any tile in the grid layer has not finished loading.
        isLoading: function() {
          return this._loading;
        },
        // @method redraw: this
        // Causes the layer to clear all the tiles and request them again.
        redraw: function() {
          if (this._map) {
            this._removeAllTiles();
            var p = this._clampZoom(this._map.getZoom());
            p !== this._tileZoom && (this._tileZoom = p, this._updateLevels()), this._update();
          }
          return this;
        },
        getEvents: function() {
          var p = {
            viewprereset: this._invalidateAll,
            viewreset: this._resetView,
            zoom: this._resetView,
            moveend: this._onMoveEnd
          };
          return this.options.updateWhenIdle || (this._onMove || (this._onMove = j(this._onMoveEnd, this.options.updateInterval, this)), p.move = this._onMove), this._zoomAnimated && (p.zoomanim = this._animateZoom), p;
        },
        // @section Extension methods
        // Layers extending `GridLayer` shall reimplement the following method.
        // @method createTile(coords: Object, done?: Function): HTMLElement
        // Called only internally, must be overridden by classes extending `GridLayer`.
        // Returns the `HTMLElement` corresponding to the given `coords`. If the `done` callback
        // is specified, it must be called when the tile has finished loading and drawing.
        createTile: function() {
          return document.createElement("div");
        },
        // @section
        // @method getTileSize: Point
        // Normalizes the [tileSize option](#gridlayer-tilesize) into a point. Used by the `createTile()` method.
        getTileSize: function() {
          var p = this.options.tileSize;
          return p instanceof fi ? p : new fi(p, p);
        },
        _updateZIndex: function() {
          this._container && this.options.zIndex !== void 0 && this.options.zIndex !== null && (this._container.style.zIndex = this.options.zIndex);
        },
        _setAutoZIndex: function(p) {
          for (var A = this.getPane().children, B = -p(-1 / 0, 1 / 0), X = 0, ne = A.length, ye; X < ne; X++)
            ye = A[X].style.zIndex, A[X] !== this._container && ye && (B = p(B, +ye));
          isFinite(B) && (this.options.zIndex = B + p(-1, 1), this._updateZIndex());
        },
        _updateOpacity: function() {
          if (this._map && !Pe.ielt9) {
            Qn(this._container, this.options.opacity);
            var p = +/* @__PURE__ */ new Date(), A = !1, B = !1;
            for (var X in this._tiles) {
              var ne = this._tiles[X];
              if (!(!ne.current || !ne.loaded)) {
                var ye = Math.min(1, (p - ne.loaded) / 200);
                Qn(ne.el, ye), ye < 1 ? A = !0 : (ne.active ? B = !0 : this._onOpaqueTile(ne), ne.active = !0);
              }
            }
            B && !this._noPrune && this._pruneTiles(), A && (Mi(this._fadeFrame), this._fadeFrame = Pt(this._updateOpacity, this));
          }
        },
        _onOpaqueTile: J,
        _initContainer: function() {
          this._container || (this._container = tn("div", "leaflet-layer " + (this.options.className || "")), this._updateZIndex(), this.options.opacity < 1 && this._updateOpacity(), this.getPane().appendChild(this._container));
        },
        _updateLevels: function() {
          var p = this._tileZoom, A = this.options.maxZoom;
          if (p !== void 0) {
            for (var B in this._levels)
              B = Number(B), this._levels[B].el.children.length || B === p ? (this._levels[B].el.style.zIndex = A - Math.abs(p - B), this._onUpdateLevel(B)) : (xn(this._levels[B].el), this._removeTilesAtZoom(B), this._onRemoveLevel(B), delete this._levels[B]);
            var X = this._levels[p], ne = this._map;
            return X || (X = this._levels[p] = {}, X.el = tn("div", "leaflet-tile-container leaflet-zoom-animated", this._container), X.el.style.zIndex = A, X.origin = ne.project(ne.unproject(ne.getPixelOrigin()), p).round(), X.zoom = p, this._setZoomTransform(X, ne.getCenter(), ne.getZoom()), J(X.el.offsetWidth), this._onCreateLevel(X)), this._level = X, X;
          }
        },
        _onUpdateLevel: J,
        _onRemoveLevel: J,
        _onCreateLevel: J,
        _pruneTiles: function() {
          if (this._map) {
            var p, A, B = this._map.getZoom();
            if (B > this.options.maxZoom || B < this.options.minZoom) {
              this._removeAllTiles();
              return;
            }
            for (p in this._tiles)
              A = this._tiles[p], A.retain = A.current;
            for (p in this._tiles)
              if (A = this._tiles[p], A.current && !A.active) {
                var X = A.coords;
                this._retainParent(X.x, X.y, X.z, X.z - 5) || this._retainChildren(X.x, X.y, X.z, X.z + 2);
              }
            for (p in this._tiles)
              this._tiles[p].retain || this._removeTile(p);
          }
        },
        _removeTilesAtZoom: function(p) {
          for (var A in this._tiles)
            this._tiles[A].coords.z === p && this._removeTile(A);
        },
        _removeAllTiles: function() {
          for (var p in this._tiles)
            this._removeTile(p);
        },
        _invalidateAll: function() {
          for (var p in this._levels)
            xn(this._levels[p].el), this._onRemoveLevel(Number(p)), delete this._levels[p];
          this._removeAllTiles(), this._tileZoom = void 0;
        },
        _retainParent: function(p, A, B, X) {
          var ne = Math.floor(p / 2), ye = Math.floor(A / 2), We = B - 1, at = new fi(+ne, +ye);
          at.z = +We;
          var ft = this._tileCoordsToKey(at), Rt = this._tiles[ft];
          return Rt && Rt.active ? (Rt.retain = !0, !0) : (Rt && Rt.loaded && (Rt.retain = !0), We > X ? this._retainParent(ne, ye, We, X) : !1);
        },
        _retainChildren: function(p, A, B, X) {
          for (var ne = 2 * p; ne < 2 * p + 2; ne++)
            for (var ye = 2 * A; ye < 2 * A + 2; ye++) {
              var We = new fi(ne, ye);
              We.z = B + 1;
              var at = this._tileCoordsToKey(We), ft = this._tiles[at];
              if (ft && ft.active) {
                ft.retain = !0;
                continue;
              } else
                ft && ft.loaded && (ft.retain = !0);
              B + 1 < X && this._retainChildren(ne, ye, B + 1, X);
            }
        },
        _resetView: function(p) {
          var A = p && (p.pinch || p.flyTo);
          this._setView(this._map.getCenter(), this._map.getZoom(), A, A);
        },
        _animateZoom: function(p) {
          this._setView(p.center, p.zoom, !0, p.noUpdate);
        },
        _clampZoom: function(p) {
          var A = this.options;
          return A.minNativeZoom !== void 0 && p < A.minNativeZoom ? A.minNativeZoom : A.maxNativeZoom !== void 0 && A.maxNativeZoom < p ? A.maxNativeZoom : p;
        },
        _setView: function(p, A, B, X) {
          var ne = Math.round(A);
          this.options.maxZoom !== void 0 && ne > this.options.maxZoom || this.options.minZoom !== void 0 && ne < this.options.minZoom ? ne = void 0 : ne = this._clampZoom(ne);
          var ye = this.options.updateWhenZooming && ne !== this._tileZoom;
          (!X || ye) && (this._tileZoom = ne, this._abortLoading && this._abortLoading(), this._updateLevels(), this._resetGrid(), ne !== void 0 && this._update(p), B || this._pruneTiles(), this._noPrune = !!B), this._setZoomTransforms(p, A);
        },
        _setZoomTransforms: function(p, A) {
          for (var B in this._levels)
            this._setZoomTransform(this._levels[B], p, A);
        },
        _setZoomTransform: function(p, A, B) {
          var X = this._map.getZoomScale(B, p.zoom), ne = p.origin.multiplyBy(X).subtract(this._map._getNewPixelOrigin(A, B)).round();
          Pe.any3d ? Ks(p.el, ne, X) : Yn(p.el, ne);
        },
        _resetGrid: function() {
          var p = this._map, A = p.options.crs, B = this._tileSize = this.getTileSize(), X = this._tileZoom, ne = this._map.getPixelWorldBounds(this._tileZoom);
          ne && (this._globalTileRange = this._pxBoundsToTileRange(ne)), this._wrapX = A.wrapLng && !this.options.noWrap && [
            Math.floor(p.project([0, A.wrapLng[0]], X).x / B.x),
            Math.ceil(p.project([0, A.wrapLng[1]], X).x / B.y)
          ], this._wrapY = A.wrapLat && !this.options.noWrap && [
            Math.floor(p.project([A.wrapLat[0], 0], X).y / B.x),
            Math.ceil(p.project([A.wrapLat[1], 0], X).y / B.y)
          ];
        },
        _onMoveEnd: function() {
          !this._map || this._map._animatingZoom || this._update();
        },
        _getTiledPixelBounds: function(p) {
          var A = this._map, B = A._animatingZoom ? Math.max(A._animateToZoom, A.getZoom()) : A.getZoom(), X = A.getZoomScale(B, this._tileZoom), ne = A.project(p, this._tileZoom).floor(), ye = A.getSize().divideBy(X * 2);
          return new Gi(ne.subtract(ye), ne.add(ye));
        },
        // Private method to load tiles in the grid's active zoom level according to map bounds
        _update: function(p) {
          var A = this._map;
          if (A) {
            var B = this._clampZoom(A.getZoom());
            if (p === void 0 && (p = A.getCenter()), this._tileZoom !== void 0) {
              var X = this._getTiledPixelBounds(p), ne = this._pxBoundsToTileRange(X), ye = ne.getCenter(), We = [], at = this.options.keepBuffer, ft = new Gi(
                ne.getBottomLeft().subtract([at, -at]),
                ne.getTopRight().add([at, -at])
              );
              if (!(isFinite(ne.min.x) && isFinite(ne.min.y) && isFinite(ne.max.x) && isFinite(ne.max.y)))
                throw new Error("Attempted to load an infinite number of tiles");
              for (var Rt in this._tiles) {
                var ii = this._tiles[Rt].coords;
                (ii.z !== this._tileZoom || !ft.contains(new fi(ii.x, ii.y))) && (this._tiles[Rt].current = !1);
              }
              if (Math.abs(B - this._tileZoom) > 1) {
                this._setView(p, B);
                return;
              }
              for (var Ci = ne.min.y; Ci <= ne.max.y; Ci++)
                for (var Wi = ne.min.x; Wi <= ne.max.x; Wi++) {
                  var Hs = new fi(Wi, Ci);
                  if (Hs.z = this._tileZoom, !!this._isValidTile(Hs)) {
                    var ws = this._tiles[this._tileCoordsToKey(Hs)];
                    ws ? ws.current = !0 : We.push(Hs);
                  }
                }
              if (We.sort(function(ur, Za) {
                return ur.distanceTo(ye) - Za.distanceTo(ye);
              }), We.length !== 0) {
                this._loading || (this._loading = !0, this.fire("loading"));
                var Rs = document.createDocumentFragment();
                for (Wi = 0; Wi < We.length; Wi++)
                  this._addTile(We[Wi], Rs);
                this._level.el.appendChild(Rs);
              }
            }
          }
        },
        _isValidTile: function(p) {
          var A = this._map.options.crs;
          if (!A.infinite) {
            var B = this._globalTileRange;
            if (!A.wrapLng && (p.x < B.min.x || p.x > B.max.x) || !A.wrapLat && (p.y < B.min.y || p.y > B.max.y))
              return !1;
          }
          if (!this.options.bounds)
            return !0;
          var X = this._tileCoordsToBounds(p);
          return ln(this.options.bounds).overlaps(X);
        },
        _keyToBounds: function(p) {
          return this._tileCoordsToBounds(this._keyToTileCoords(p));
        },
        _tileCoordsToNwSe: function(p) {
          var A = this._map, B = this.getTileSize(), X = p.scaleBy(B), ne = X.add(B), ye = A.unproject(X, p.z), We = A.unproject(ne, p.z);
          return [ye, We];
        },
        // converts tile coordinates to its geographical bounds
        _tileCoordsToBounds: function(p) {
          var A = this._tileCoordsToNwSe(p), B = new qt(A[0], A[1]);
          return this.options.noWrap || (B = this._map.wrapLatLngBounds(B)), B;
        },
        // converts tile coordinates to key for the tile cache
        _tileCoordsToKey: function(p) {
          return p.x + ":" + p.y + ":" + p.z;
        },
        // converts tile cache key to coordinates
        _keyToTileCoords: function(p) {
          var A = p.split(":"), B = new fi(+A[0], +A[1]);
          return B.z = +A[2], B;
        },
        _removeTile: function(p) {
          var A = this._tiles[p];
          A && (xn(A.el), delete this._tiles[p], this.fire("tileunload", {
            tile: A.el,
            coords: this._keyToTileCoords(p)
          }));
        },
        _initTile: function(p) {
          Vi(p, "leaflet-tile");
          var A = this.getTileSize();
          p.style.width = A.x + "px", p.style.height = A.y + "px", p.onselectstart = J, p.onmousemove = J, Pe.ielt9 && this.options.opacity < 1 && Qn(p, this.options.opacity);
        },
        _addTile: function(p, A) {
          var B = this._getTilePos(p), X = this._tileCoordsToKey(p), ne = this.createTile(this._wrapCoords(p), E(this._tileReady, this, p));
          this._initTile(ne), this.createTile.length < 2 && Pt(E(this._tileReady, this, p, null, ne)), Yn(ne, B), this._tiles[X] = {
            el: ne,
            coords: p,
            current: !0
          }, A.appendChild(ne), this.fire("tileloadstart", {
            tile: ne,
            coords: p
          });
        },
        _tileReady: function(p, A, B) {
          A && this.fire("tileerror", {
            error: A,
            tile: B,
            coords: p
          });
          var X = this._tileCoordsToKey(p);
          B = this._tiles[X], B && (B.loaded = +/* @__PURE__ */ new Date(), this._map._fadeAnimated ? (Qn(B.el, 0), Mi(this._fadeFrame), this._fadeFrame = Pt(this._updateOpacity, this)) : (B.active = !0, this._pruneTiles()), A || (Vi(B.el, "leaflet-tile-loaded"), this.fire("tileload", {
            tile: B.el,
            coords: p
          })), this._noTilesToLoad() && (this._loading = !1, this.fire("load"), Pe.ielt9 || !this._map._fadeAnimated ? Pt(this._pruneTiles, this) : setTimeout(E(this._pruneTiles, this), 250)));
        },
        _getTilePos: function(p) {
          return p.scaleBy(this.getTileSize()).subtract(this._level.origin);
        },
        _wrapCoords: function(p) {
          var A = new fi(
            this._wrapX ? Y(p.x, this._wrapX) : p.x,
            this._wrapY ? Y(p.y, this._wrapY) : p.y
          );
          return A.z = p.z, A;
        },
        _pxBoundsToTileRange: function(p) {
          var A = this.getTileSize();
          return new Gi(
            p.min.unscaleBy(A).floor(),
            p.max.unscaleBy(A).ceil().subtract([1, 1])
          );
        },
        _noTilesToLoad: function() {
          for (var p in this._tiles)
            if (!this._tiles[p].loaded)
              return !1;
          return !0;
        }
      });
      function xl(p) {
        return new ro(p);
      }
      var kr = ro.extend({
        // @section
        // @aka TileLayer options
        options: {
          // @option minZoom: Number = 0
          // The minimum zoom level down to which this layer will be displayed (inclusive).
          minZoom: 0,
          // @option maxZoom: Number = 18
          // The maximum zoom level up to which this layer will be displayed (inclusive).
          maxZoom: 18,
          // @option subdomains: String|String[] = 'abc'
          // Subdomains of the tile service. Can be passed in the form of one string (where each letter is a subdomain name) or an array of strings.
          subdomains: "abc",
          // @option errorTileUrl: String = ''
          // URL to the tile image to show in place of the tile that failed to load.
          errorTileUrl: "",
          // @option zoomOffset: Number = 0
          // The zoom number used in tile URLs will be offset with this value.
          zoomOffset: 0,
          // @option tms: Boolean = false
          // If `true`, inverses Y axis numbering for tiles (turn this on for [TMS](https://en.wikipedia.org/wiki/Tile_Map_Service) services).
          tms: !1,
          // @option zoomReverse: Boolean = false
          // If set to true, the zoom number used in tile URLs will be reversed (`maxZoom - zoom` instead of `zoom`)
          zoomReverse: !1,
          // @option detectRetina: Boolean = false
          // If `true` and user is on a retina display, it will request four tiles of half the specified size and a bigger zoom level in place of one to utilize the high resolution.
          detectRetina: !1,
          // @option crossOrigin: Boolean|String = false
          // Whether the crossOrigin attribute will be added to the tiles.
          // If a String is provided, all tiles will have their crossOrigin attribute set to the String provided. This is needed if you want to access tile pixel data.
          // Refer to [CORS Settings](https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_settings_attributes) for valid String values.
          crossOrigin: !1,
          // @option referrerPolicy: Boolean|String = false
          // Whether the referrerPolicy attribute will be added to the tiles.
          // If a String is provided, all tiles will have their referrerPolicy attribute set to the String provided.
          // This may be needed if your map's rendering context has a strict default but your tile provider expects a valid referrer
          // (e.g. to validate an API token).
          // Refer to [HTMLImageElement.referrerPolicy](https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/referrerPolicy) for valid String values.
          referrerPolicy: !1
        },
        initialize: function(p, A) {
          this._url = p, A = be(this, A), A.detectRetina && Pe.retina && A.maxZoom > 0 ? (A.tileSize = Math.floor(A.tileSize / 2), A.zoomReverse ? (A.zoomOffset--, A.minZoom = Math.min(A.maxZoom, A.minZoom + 1)) : (A.zoomOffset++, A.maxZoom = Math.max(A.minZoom, A.maxZoom - 1)), A.minZoom = Math.max(0, A.minZoom)) : A.zoomReverse ? A.minZoom = Math.min(A.maxZoom, A.minZoom) : A.maxZoom = Math.max(A.minZoom, A.maxZoom), typeof A.subdomains == "string" && (A.subdomains = A.subdomains.split("")), this.on("tileunload", this._onTileRemove);
        },
        // @method setUrl(url: String, noRedraw?: Boolean): this
        // Updates the layer's URL template and redraws it (unless `noRedraw` is set to `true`).
        // If the URL does not change, the layer will not be redrawn unless
        // the noRedraw parameter is set to false.
        setUrl: function(p, A) {
          return this._url === p && A === void 0 && (A = !0), this._url = p, A || this.redraw(), this;
        },
        // @method createTile(coords: Object, done?: Function): HTMLElement
        // Called only internally, overrides GridLayer's [`createTile()`](#gridlayer-createtile)
        // to return an `<img>` HTML element with the appropriate image URL given `coords`. The `done`
        // callback is called when the tile has been loaded.
        createTile: function(p, A) {
          var B = document.createElement("img");
          return Bi(B, "load", E(this._tileOnLoad, this, A, B)), Bi(B, "error", E(this._tileOnError, this, A, B)), (this.options.crossOrigin || this.options.crossOrigin === "") && (B.crossOrigin = this.options.crossOrigin === !0 ? "" : this.options.crossOrigin), typeof this.options.referrerPolicy == "string" && (B.referrerPolicy = this.options.referrerPolicy), B.alt = "", B.src = this.getTileUrl(p), B;
        },
        // @section Extension methods
        // @uninheritable
        // Layers extending `TileLayer` might reimplement the following method.
        // @method getTileUrl(coords: Object): String
        // Called only internally, returns the URL for a tile given its coordinates.
        // Classes extending `TileLayer` can override this function to provide custom tile URL naming schemes.
        getTileUrl: function(p) {
          var A = {
            r: Pe.retina ? "@2x" : "",
            s: this._getSubdomain(p),
            x: p.x,
            y: p.y,
            z: this._getZoomForUrl()
          };
          if (this._map && !this._map.options.crs.infinite) {
            var B = this._globalTileRange.max.y - p.y;
            this.options.tms && (A.y = B), A["-y"] = B;
          }
          return ot(this._url, w(A, this.options));
        },
        _tileOnLoad: function(p, A) {
          Pe.ielt9 ? setTimeout(E(p, this, null, A), 0) : p(null, A);
        },
        _tileOnError: function(p, A, B) {
          var X = this.options.errorTileUrl;
          X && A.getAttribute("src") !== X && (A.src = X), p(B, A);
        },
        _onTileRemove: function(p) {
          p.tile.onload = null;
        },
        _getZoomForUrl: function() {
          var p = this._tileZoom, A = this.options.maxZoom, B = this.options.zoomReverse, X = this.options.zoomOffset;
          return B && (p = A - p), p + X;
        },
        _getSubdomain: function(p) {
          var A = Math.abs(p.x + p.y) % this.options.subdomains.length;
          return this.options.subdomains[A];
        },
        // stops loading all tiles in the background layer
        _abortLoading: function() {
          var p, A;
          for (p in this._tiles)
            if (this._tiles[p].coords.z !== this._tileZoom && (A = this._tiles[p].el, A.onload = J, A.onerror = J, !A.complete)) {
              A.src = gt;
              var B = this._tiles[p].coords;
              xn(A), delete this._tiles[p], this.fire("tileabort", {
                tile: A,
                coords: B
              });
            }
        },
        _removeTile: function(p) {
          var A = this._tiles[p];
          if (A)
            return A.el.setAttribute("src", gt), ro.prototype._removeTile.call(this, p);
        },
        _tileReady: function(p, A, B) {
          if (!(!this._map || B && B.getAttribute("src") === gt))
            return ro.prototype._tileReady.call(this, p, A, B);
        }
      });
      function oo(p, A) {
        return new kr(p, A);
      }
      var Jo = kr.extend({
        // @section
        // @aka TileLayer.WMS options
        // If any custom options not documented here are used, they will be sent to the
        // WMS server as extra parameters in each request URL. This can be useful for
        // [non-standard vendor WMS parameters](https://docs.geoserver.org/stable/en/user/services/wms/vendor.html).
        defaultWmsParams: {
          service: "WMS",
          request: "GetMap",
          // @option layers: String = ''
          // **(required)** Comma-separated list of WMS layers to show.
          layers: "",
          // @option styles: String = ''
          // Comma-separated list of WMS styles.
          styles: "",
          // @option format: String = 'image/jpeg'
          // WMS image format (use `'image/png'` for layers with transparency).
          format: "image/jpeg",
          // @option transparent: Boolean = false
          // If `true`, the WMS service will return images with transparency.
          transparent: !1,
          // @option version: String = '1.1.1'
          // Version of the WMS service to use
          version: "1.1.1"
        },
        options: {
          // @option crs: CRS = null
          // Coordinate Reference System to use for the WMS requests, defaults to
          // map CRS. Don't change this if you're not sure what it means.
          crs: null,
          // @option uppercase: Boolean = false
          // If `true`, WMS request parameter keys will be uppercase.
          uppercase: !1
        },
        initialize: function(p, A) {
          this._url = p;
          var B = w({}, this.defaultWmsParams);
          for (var X in A)
            X in this.options || (B[X] = A[X]);
          A = be(this, A);
          var ne = A.detectRetina && Pe.retina ? 2 : 1, ye = this.getTileSize();
          B.width = ye.x * ne, B.height = ye.y * ne, this.wmsParams = B;
        },
        onAdd: function(p) {
          this._crs = this.options.crs || p.options.crs, this._wmsVersion = parseFloat(this.wmsParams.version);
          var A = this._wmsVersion >= 1.3 ? "crs" : "srs";
          this.wmsParams[A] = this._crs.code, kr.prototype.onAdd.call(this, p);
        },
        getTileUrl: function(p) {
          var A = this._tileCoordsToNwSe(p), B = this._crs, X = an(B.project(A[0]), B.project(A[1])), ne = X.min, ye = X.max, We = (this._wmsVersion >= 1.3 && this._crs === gl ? [ne.y, ne.x, ye.y, ye.x] : [ne.x, ne.y, ye.x, ye.y]).join(","), at = kr.prototype.getTileUrl.call(this, p);
          return at + Ze(this.wmsParams, at, this.options.uppercase) + (this.options.uppercase ? "&BBOX=" : "&bbox=") + We;
        },
        // @method setParams(params: Object, noRedraw?: Boolean): this
        // Merges an object with the new parameters and re-requests tiles on the current screen (unless `noRedraw` was set to true).
        setParams: function(p, A) {
          return w(this.wmsParams, p), A || this.redraw(), this;
        }
      });
      function Jl(p, A) {
        return new Jo(p, A);
      }
      kr.WMS = Jo, oo.wms = Jl;
      var Qr = ar.extend({
        // @section
        // @aka Renderer options
        options: {
          // @option padding: Number = 0.1
          // How much to extend the clip area around the map view (relative to its size)
          // e.g. 0.1 would be 10% of map view in each direction
          padding: 0.1
        },
        initialize: function(p) {
          be(this, p), O(this), this._layers = this._layers || {};
        },
        onAdd: function() {
          this._container || (this._initContainer(), Vi(this._container, "leaflet-zoom-animated")), this.getPane().appendChild(this._container), this._update(), this.on("update", this._updatePaths, this);
        },
        onRemove: function() {
          this.off("update", this._updatePaths, this), this._destroyContainer();
        },
        getEvents: function() {
          var p = {
            viewreset: this._reset,
            zoom: this._onZoom,
            moveend: this._update,
            zoomend: this._onZoomEnd
          };
          return this._zoomAnimated && (p.zoomanim = this._onAnimZoom), p;
        },
        _onAnimZoom: function(p) {
          this._updateTransform(p.center, p.zoom);
        },
        _onZoom: function() {
          this._updateTransform(this._map.getCenter(), this._map.getZoom());
        },
        _updateTransform: function(p, A) {
          var B = this._map.getZoomScale(A, this._zoom), X = this._map.getSize().multiplyBy(0.5 + this.options.padding), ne = this._map.project(this._center, A), ye = X.multiplyBy(-B).add(ne).subtract(this._map._getNewPixelOrigin(p, A));
          Pe.any3d ? Ks(this._container, ye, B) : Yn(this._container, ye);
        },
        _reset: function() {
          this._update(), this._updateTransform(this._center, this._zoom);
          for (var p in this._layers)
            this._layers[p]._reset();
        },
        _onZoomEnd: function() {
          for (var p in this._layers)
            this._layers[p]._project();
        },
        _updatePaths: function() {
          for (var p in this._layers)
            this._layers[p]._update();
        },
        _update: function() {
          var p = this.options.padding, A = this._map.getSize(), B = this._map.containerPointToLayerPoint(A.multiplyBy(-p)).round();
          this._bounds = new Gi(B, B.add(A.multiplyBy(1 + p * 2)).round()), this._center = this._map.getCenter(), this._zoom = this._map.getZoom();
        }
      }), vl = Qr.extend({
        // @section
        // @aka Canvas options
        options: {
          // @option tolerance: Number = 0
          // How much to extend the click tolerance around a path/object on the map.
          tolerance: 0
        },
        getEvents: function() {
          var p = Qr.prototype.getEvents.call(this);
          return p.viewprereset = this._onViewPreReset, p;
        },
        _onViewPreReset: function() {
          this._postponeUpdatePaths = !0;
        },
        onAdd: function() {
          Qr.prototype.onAdd.call(this), this._draw();
        },
        _initContainer: function() {
          var p = this._container = document.createElement("canvas");
          Bi(p, "mousemove", this._onMouseMove, this), Bi(p, "click dblclick mousedown mouseup contextmenu", this._onClick, this), Bi(p, "mouseout", this._handleMouseOut, this), p._leaflet_disable_events = !0, this._ctx = p.getContext("2d");
        },
        _destroyContainer: function() {
          Mi(this._redrawRequest), delete this._ctx, xn(this._container), Cn(this._container), delete this._container;
        },
        _updatePaths: function() {
          if (!this._postponeUpdatePaths) {
            var p;
            this._redrawBounds = null;
            for (var A in this._layers)
              p = this._layers[A], p._update();
            this._redraw();
          }
        },
        _update: function() {
          if (!(this._map._animatingZoom && this._bounds)) {
            Qr.prototype._update.call(this);
            var p = this._bounds, A = this._container, B = p.getSize(), X = Pe.retina ? 2 : 1;
            Yn(A, p.min), A.width = X * B.x, A.height = X * B.y, A.style.width = B.x + "px", A.style.height = B.y + "px", Pe.retina && this._ctx.scale(2, 2), this._ctx.translate(-p.min.x, -p.min.y), this.fire("update");
          }
        },
        _reset: function() {
          Qr.prototype._reset.call(this), this._postponeUpdatePaths && (this._postponeUpdatePaths = !1, this._updatePaths());
        },
        _initPath: function(p) {
          this._updateDashArray(p), this._layers[O(p)] = p;
          var A = p._order = {
            layer: p,
            prev: this._drawLast,
            next: null
          };
          this._drawLast && (this._drawLast.next = A), this._drawLast = A, this._drawFirst = this._drawFirst || this._drawLast;
        },
        _addPath: function(p) {
          this._requestRedraw(p);
        },
        _removePath: function(p) {
          var A = p._order, B = A.next, X = A.prev;
          B ? B.prev = X : this._drawLast = X, X ? X.next = B : this._drawFirst = B, delete p._order, delete this._layers[O(p)], this._requestRedraw(p);
        },
        _updatePath: function(p) {
          this._extendRedrawBounds(p), p._project(), p._update(), this._requestRedraw(p);
        },
        _updateStyle: function(p) {
          this._updateDashArray(p), this._requestRedraw(p);
        },
        _updateDashArray: function(p) {
          if (typeof p.options.dashArray == "string") {
            var A = p.options.dashArray.split(/[, ]+/), B = [], X, ne;
            for (ne = 0; ne < A.length; ne++) {
              if (X = Number(A[ne]), isNaN(X))
                return;
              B.push(X);
            }
            p.options._dashArray = B;
          } else
            p.options._dashArray = p.options.dashArray;
        },
        _requestRedraw: function(p) {
          this._map && (this._extendRedrawBounds(p), this._redrawRequest = this._redrawRequest || Pt(this._redraw, this));
        },
        _extendRedrawBounds: function(p) {
          if (p._pxBounds) {
            var A = (p.options.weight || 0) + 1;
            this._redrawBounds = this._redrawBounds || new Gi(), this._redrawBounds.extend(p._pxBounds.min.subtract([A, A])), this._redrawBounds.extend(p._pxBounds.max.add([A, A]));
          }
        },
        _redraw: function() {
          this._redrawRequest = null, this._redrawBounds && (this._redrawBounds.min._floor(), this._redrawBounds.max._ceil()), this._clear(), this._draw(), this._redrawBounds = null;
        },
        _clear: function() {
          var p = this._redrawBounds;
          if (p) {
            var A = p.getSize();
            this._ctx.clearRect(p.min.x, p.min.y, A.x, A.y);
          } else
            this._ctx.save(), this._ctx.setTransform(1, 0, 0, 1, 0, 0), this._ctx.clearRect(0, 0, this._container.width, this._container.height), this._ctx.restore();
        },
        _draw: function() {
          var p, A = this._redrawBounds;
          if (this._ctx.save(), A) {
            var B = A.getSize();
            this._ctx.beginPath(), this._ctx.rect(A.min.x, A.min.y, B.x, B.y), this._ctx.clip();
          }
          this._drawing = !0;
          for (var X = this._drawFirst; X; X = X.next)
            p = X.layer, (!A || p._pxBounds && p._pxBounds.intersects(A)) && p._updatePath();
          this._drawing = !1, this._ctx.restore();
        },
        _updatePoly: function(p, A) {
          if (this._drawing) {
            var B, X, ne, ye, We = p._parts, at = We.length, ft = this._ctx;
            if (at) {
              for (ft.beginPath(), B = 0; B < at; B++) {
                for (X = 0, ne = We[B].length; X < ne; X++)
                  ye = We[B][X], ft[X ? "lineTo" : "moveTo"](ye.x, ye.y);
                A && ft.closePath();
              }
              this._fillStroke(ft, p);
            }
          }
        },
        _updateCircle: function(p) {
          if (!(!this._drawing || p._empty())) {
            var A = p._point, B = this._ctx, X = Math.max(Math.round(p._radius), 1), ne = (Math.max(Math.round(p._radiusY), 1) || X) / X;
            ne !== 1 && (B.save(), B.scale(1, ne)), B.beginPath(), B.arc(A.x, A.y / ne, X, 0, Math.PI * 2, !1), ne !== 1 && B.restore(), this._fillStroke(B, p);
          }
        },
        _fillStroke: function(p, A) {
          var B = A.options;
          B.fill && (p.globalAlpha = B.fillOpacity, p.fillStyle = B.fillColor || B.color, p.fill(B.fillRule || "evenodd")), B.stroke && B.weight !== 0 && (p.setLineDash && p.setLineDash(A.options && A.options._dashArray || []), p.globalAlpha = B.opacity, p.lineWidth = B.weight, p.strokeStyle = B.color, p.lineCap = B.lineCap, p.lineJoin = B.lineJoin, p.stroke());
        },
        // Canvas obviously doesn't have mouse events for individual drawn objects,
        // so we emulate that by calculating what's under the mouse on mousemove/click manually
        _onClick: function(p) {
          for (var A = this._map.mouseEventToLayerPoint(p), B, X, ne = this._drawFirst; ne; ne = ne.next)
            B = ne.layer, B.options.interactive && B._containsPoint(A) && (!(p.type === "click" || p.type === "preclick") || !this._map._draggableMoved(B)) && (X = B);
          this._fireEvent(X ? [X] : !1, p);
        },
        _onMouseMove: function(p) {
          if (!(!this._map || this._map.dragging.moving() || this._map._animatingZoom)) {
            var A = this._map.mouseEventToLayerPoint(p);
            this._handleMouseHover(p, A);
          }
        },
        _handleMouseOut: function(p) {
          var A = this._hoveredLayer;
          A && (Hn(this._container, "leaflet-interactive"), this._fireEvent([A], p, "mouseout"), this._hoveredLayer = null, this._mouseHoverThrottled = !1);
        },
        _handleMouseHover: function(p, A) {
          if (!this._mouseHoverThrottled) {
            for (var B, X, ne = this._drawFirst; ne; ne = ne.next)
              B = ne.layer, B.options.interactive && B._containsPoint(A) && (X = B);
            X !== this._hoveredLayer && (this._handleMouseOut(p), X && (Vi(this._container, "leaflet-interactive"), this._fireEvent([X], p, "mouseover"), this._hoveredLayer = X)), this._fireEvent(this._hoveredLayer ? [this._hoveredLayer] : !1, p), this._mouseHoverThrottled = !0, setTimeout(E(function() {
              this._mouseHoverThrottled = !1;
            }, this), 32);
          }
        },
        _fireEvent: function(p, A, B) {
          this._map._fireDOMEvent(A, B || A.type, p);
        },
        _bringToFront: function(p) {
          var A = p._order;
          if (A) {
            var B = A.next, X = A.prev;
            if (B)
              B.prev = X;
            else
              return;
            X ? X.next = B : B && (this._drawFirst = B), A.prev = this._drawLast, this._drawLast.next = A, A.next = null, this._drawLast = A, this._requestRedraw(p);
          }
        },
        _bringToBack: function(p) {
          var A = p._order;
          if (A) {
            var B = A.next, X = A.prev;
            if (X)
              X.next = B;
            else
              return;
            B ? B.prev = X : X && (this._drawLast = X), A.prev = null, A.next = this._drawFirst, this._drawFirst.prev = A, this._drawFirst = A, this._requestRedraw(p);
          }
        }
      });
      function ao(p) {
        return Pe.canvas ? new vl(p) : null;
      }
      var Ti = function() {
        try {
          return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function(p) {
            return document.createElement("<lvml:" + p + ' class="lvml">');
          };
        } catch {
        }
        return function(p) {
          return document.createElement("<" + p + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">');
        };
      }(), qh = {
        _initContainer: function() {
          this._container = tn("div", "leaflet-vml-container");
        },
        _update: function() {
          this._map._animatingZoom || (Qr.prototype._update.call(this), this.fire("update"));
        },
        _initPath: function(p) {
          var A = p._container = Ti("shape");
          Vi(A, "leaflet-vml-shape " + (this.options.className || "")), A.coordsize = "1 1", p._path = Ti("path"), A.appendChild(p._path), this._updateStyle(p), this._layers[O(p)] = p;
        },
        _addPath: function(p) {
          var A = p._container;
          this._container.appendChild(A), p.options.interactive && p.addInteractiveTarget(A);
        },
        _removePath: function(p) {
          var A = p._container;
          xn(A), p.removeInteractiveTarget(A), delete this._layers[O(p)];
        },
        _updateStyle: function(p) {
          var A = p._stroke, B = p._fill, X = p.options, ne = p._container;
          ne.stroked = !!X.stroke, ne.filled = !!X.fill, X.stroke ? (A || (A = p._stroke = Ti("stroke")), ne.appendChild(A), A.weight = X.weight + "px", A.color = X.color, A.opacity = X.opacity, X.dashArray ? A.dashStyle = vt(X.dashArray) ? X.dashArray.join(" ") : X.dashArray.replace(/( *, *)/g, " ") : A.dashStyle = "", A.endcap = X.lineCap.replace("butt", "flat"), A.joinstyle = X.lineJoin) : A && (ne.removeChild(A), p._stroke = null), X.fill ? (B || (B = p._fill = Ti("fill")), ne.appendChild(B), B.color = X.fillColor || X.color, B.opacity = X.fillOpacity) : B && (ne.removeChild(B), p._fill = null);
        },
        _updateCircle: function(p) {
          var A = p._point.round(), B = Math.round(p._radius), X = Math.round(p._radiusY || B);
          this._setPath(p, p._empty() ? "M0 0" : "AL " + A.x + "," + A.y + " " + B + "," + X + " 0," + 65535 * 360);
        },
        _setPath: function(p, A) {
          p._path.v = A;
        },
        _bringToFront: function(p) {
          Go(p._container);
        },
        _bringToBack: function(p) {
          aa(p._container);
        }
      }, bl = Pe.vml ? Ti : Ws, Ga = Qr.extend({
        _initContainer: function() {
          this._container = bl("svg"), this._container.setAttribute("pointer-events", "none"), this._rootGroup = bl("g"), this._container.appendChild(this._rootGroup);
        },
        _destroyContainer: function() {
          xn(this._container), Cn(this._container), delete this._container, delete this._rootGroup, delete this._svgSize;
        },
        _update: function() {
          if (!(this._map._animatingZoom && this._bounds)) {
            Qr.prototype._update.call(this);
            var p = this._bounds, A = p.getSize(), B = this._container;
            (!this._svgSize || !this._svgSize.equals(A)) && (this._svgSize = A, B.setAttribute("width", A.x), B.setAttribute("height", A.y)), Yn(B, p.min), B.setAttribute("viewBox", [p.min.x, p.min.y, A.x, A.y].join(" ")), this.fire("update");
          }
        },
        // methods below are called by vector layers implementations
        _initPath: function(p) {
          var A = p._path = bl("path");
          p.options.className && Vi(A, p.options.className), p.options.interactive && Vi(A, "leaflet-interactive"), this._updateStyle(p), this._layers[O(p)] = p;
        },
        _addPath: function(p) {
          this._rootGroup || this._initContainer(), this._rootGroup.appendChild(p._path), p.addInteractiveTarget(p._path);
        },
        _removePath: function(p) {
          xn(p._path), p.removeInteractiveTarget(p._path), delete this._layers[O(p)];
        },
        _updatePath: function(p) {
          p._project(), p._update();
        },
        _updateStyle: function(p) {
          var A = p._path, B = p.options;
          A && (B.stroke ? (A.setAttribute("stroke", B.color), A.setAttribute("stroke-opacity", B.opacity), A.setAttribute("stroke-width", B.weight), A.setAttribute("stroke-linecap", B.lineCap), A.setAttribute("stroke-linejoin", B.lineJoin), B.dashArray ? A.setAttribute("stroke-dasharray", B.dashArray) : A.removeAttribute("stroke-dasharray"), B.dashOffset ? A.setAttribute("stroke-dashoffset", B.dashOffset) : A.removeAttribute("stroke-dashoffset")) : A.setAttribute("stroke", "none"), B.fill ? (A.setAttribute("fill", B.fillColor || B.color), A.setAttribute("fill-opacity", B.fillOpacity), A.setAttribute("fill-rule", B.fillRule || "evenodd")) : A.setAttribute("fill", "none"));
        },
        _updatePoly: function(p, A) {
          this._setPath(p, $n(p._parts, A));
        },
        _updateCircle: function(p) {
          var A = p._point, B = Math.max(Math.round(p._radius), 1), X = Math.max(Math.round(p._radiusY), 1) || B, ne = "a" + B + "," + X + " 0 1,0 ", ye = p._empty() ? "M0 0" : "M" + (A.x - B) + "," + A.y + ne + B * 2 + ",0 " + ne + -B * 2 + ",0 ";
          this._setPath(p, ye);
        },
        _setPath: function(p, A) {
          p._path.setAttribute("d", A);
        },
        // SVG does not have the concept of zIndex so we resort to changing the DOM order of elements
        _bringToFront: function(p) {
          Go(p._path);
        },
        _bringToBack: function(p) {
          aa(p._path);
        }
      });
      Pe.vml && Ga.include(qh);
      function Qo(p) {
        return Pe.svg || Pe.vml ? new Ga(p) : null;
      }
      nn.include({
        // @namespace Map; @method getRenderer(layer: Path): Renderer
        // Returns the instance of `Renderer` that should be used to render the given
        // `Path`. It will ensure that the `renderer` options of the map and paths
        // are respected, and that the renderers do exist on the map.
        getRenderer: function(p) {
          var A = p.options.renderer || this._getPaneRenderer(p.options.pane) || this.options.renderer || this._renderer;
          return A || (A = this._renderer = this._createRenderer()), this.hasLayer(A) || this.addLayer(A), A;
        },
        _getPaneRenderer: function(p) {
          if (p === "overlayPane" || p === void 0)
            return !1;
          var A = this._paneRenderers[p];
          return A === void 0 && (A = this._createRenderer({ pane: p }), this._paneRenderers[p] = A), A;
        },
        _createRenderer: function(p) {
          return this.options.preferCanvas && ao(p) || Qo(p);
        }
      });
      var qc = Kr.extend({
        initialize: function(p, A) {
          Kr.prototype.initialize.call(this, this._boundsToLatLngs(p), A);
        },
        // @method setBounds(latLngBounds: LatLngBounds): this
        // Redraws the rectangle with the passed bounds.
        setBounds: function(p) {
          return this.setLatLngs(this._boundsToLatLngs(p));
        },
        _boundsToLatLngs: function(p) {
          return p = ln(p), [
            p.getSouthWest(),
            p.getNorthWest(),
            p.getNorthEast(),
            p.getSouthEast()
          ];
        }
      });
      function gn(p, A) {
        return new qc(p, A);
      }
      Ga.create = bl, Ga.pointsToPath = $n, cr.geometryToLayer = Eo, cr.coordsToLatLng = Uc, cr.coordsToLatLngs = Ua, cr.latLngToCoords = $l, cr.latLngsToCoords = yl, cr.getFeature = _a, cr.asFeature = ga, nn.mergeOptions({
        // @option boxZoom: Boolean = true
        // Whether the map can be zoomed to a rectangular area specified by
        // dragging the mouse while pressing the shift key.
        boxZoom: !0
      });
      var Wh = Es.extend({
        initialize: function(p) {
          this._map = p, this._container = p._container, this._pane = p._panes.overlayPane, this._resetStateTimeout = 0, p.on("unload", this._destroy, this);
        },
        addHooks: function() {
          Bi(this._container, "mousedown", this._onMouseDown, this);
        },
        removeHooks: function() {
          Cn(this._container, "mousedown", this._onMouseDown, this);
        },
        moved: function() {
          return this._moved;
        },
        _destroy: function() {
          xn(this._pane), delete this._pane;
        },
        _resetState: function() {
          this._resetStateTimeout = 0, this._moved = !1;
        },
        _clearDeferredResetState: function() {
          this._resetStateTimeout !== 0 && (clearTimeout(this._resetStateTimeout), this._resetStateTimeout = 0);
        },
        _onMouseDown: function(p) {
          if (!p.shiftKey || p.which !== 1 && p.button !== 1)
            return !1;
          this._clearDeferredResetState(), this._resetState(), Ar(), Zo(), this._startPoint = this._map.mouseEventToContainerPoint(p), Bi(document, {
            contextmenu: Js,
            mousemove: this._onMouseMove,
            mouseup: this._onMouseUp,
            keydown: this._onKeyDown
          }, this);
        },
        _onMouseMove: function(p) {
          this._moved || (this._moved = !0, this._box = tn("div", "leaflet-zoom-box", this._container), Vi(this._container, "leaflet-crosshair"), this._map.fire("boxzoomstart")), this._point = this._map.mouseEventToContainerPoint(p);
          var A = new Gi(this._point, this._startPoint), B = A.getSize();
          Yn(this._box, A.min), this._box.style.width = B.x + "px", this._box.style.height = B.y + "px";
        },
        _finish: function() {
          this._moved && (xn(this._box), Hn(this._container, "leaflet-crosshair")), Cr(), sr(), Cn(document, {
            contextmenu: Js,
            mousemove: this._onMouseMove,
            mouseup: this._onMouseUp,
            keydown: this._onKeyDown
          }, this);
        },
        _onMouseUp: function(p) {
          if (!(p.which !== 1 && p.button !== 1) && (this._finish(), !!this._moved)) {
            this._clearDeferredResetState(), this._resetStateTimeout = setTimeout(E(this._resetState, this), 0);
            var A = new qt(
              this._map.containerPointToLatLng(this._startPoint),
              this._map.containerPointToLatLng(this._point)
            );
            this._map.fitBounds(A).fire("boxzoomend", { boxZoomBounds: A });
          }
        },
        _onKeyDown: function(p) {
          p.keyCode === 27 && (this._finish(), this._clearDeferredResetState(), this._resetState());
        }
      });
      nn.addInitHook("addHandler", "boxZoom", Wh), nn.mergeOptions({
        // @option doubleClickZoom: Boolean|String = true
        // Whether the map can be zoomed in by double clicking on it and
        // zoomed out by double clicking while holding shift. If passed
        // `'center'`, double-click zoom will zoom to the center of the
        //  view regardless of where the mouse was.
        doubleClickZoom: !0
      });
      var $h = Es.extend({
        addHooks: function() {
          this._map.on("dblclick", this._onDoubleClick, this);
        },
        removeHooks: function() {
          this._map.off("dblclick", this._onDoubleClick, this);
        },
        _onDoubleClick: function(p) {
          var A = this._map, B = A.getZoom(), X = A.options.zoomDelta, ne = p.originalEvent.shiftKey ? B - X : B + X;
          A.options.doubleClickZoom === "center" ? A.setZoom(ne) : A.setZoomAround(p.containerPoint, ne);
        }
      });
      nn.addInitHook("addHandler", "doubleClickZoom", $h), nn.mergeOptions({
        // @option dragging: Boolean = true
        // Whether the map is draggable with mouse/touch or not.
        dragging: !0,
        // @section Panning Inertia Options
        // @option inertia: Boolean = *
        // If enabled, panning of the map will have an inertia effect where
        // the map builds momentum while dragging and continues moving in
        // the same direction for some time. Feels especially nice on touch
        // devices. Enabled by default.
        inertia: !0,
        // @option inertiaDeceleration: Number = 3000
        // The rate with which the inertial movement slows down, in pixels/second².
        inertiaDeceleration: 3400,
        // px/s^2
        // @option inertiaMaxSpeed: Number = Infinity
        // Max speed of the inertial movement, in pixels/second.
        inertiaMaxSpeed: 1 / 0,
        // px/s
        // @option easeLinearity: Number = 0.2
        easeLinearity: 0.2,
        // TODO refactor, move to CRS
        // @option worldCopyJump: Boolean = false
        // With this option enabled, the map tracks when you pan to another "copy"
        // of the world and seamlessly jumps to the original one so that all overlays
        // like markers and vector layers are still visible.
        worldCopyJump: !1,
        // @option maxBoundsViscosity: Number = 0.0
        // If `maxBounds` is set, this option will control how solid the bounds
        // are when dragging the map around. The default value of `0.0` allows the
        // user to drag outside the bounds at normal speed, higher values will
        // slow down map dragging outside bounds, and `1.0` makes the bounds fully
        // solid, preventing the user from dragging outside the bounds.
        maxBoundsViscosity: 0
      });
      var Ql = Es.extend({
        addHooks: function() {
          if (!this._draggable) {
            var p = this._map;
            this._draggable = new Wo(p._mapPane, p._container), this._draggable.on({
              dragstart: this._onDragStart,
              drag: this._onDrag,
              dragend: this._onDragEnd
            }, this), this._draggable.on("predrag", this._onPreDragLimit, this), p.options.worldCopyJump && (this._draggable.on("predrag", this._onPreDragWrap, this), p.on("zoomend", this._onZoomEnd, this), p.whenReady(this._onZoomEnd, this));
          }
          Vi(this._map._container, "leaflet-grab leaflet-touch-drag"), this._draggable.enable(), this._positions = [], this._times = [];
        },
        removeHooks: function() {
          Hn(this._map._container, "leaflet-grab"), Hn(this._map._container, "leaflet-touch-drag"), this._draggable.disable();
        },
        moved: function() {
          return this._draggable && this._draggable._moved;
        },
        moving: function() {
          return this._draggable && this._draggable._moving;
        },
        _onDragStart: function() {
          var p = this._map;
          if (p._stop(), this._map.options.maxBounds && this._map.options.maxBoundsViscosity) {
            var A = ln(this._map.options.maxBounds);
            this._offsetLimit = an(
              this._map.latLngToContainerPoint(A.getNorthWest()).multiplyBy(-1),
              this._map.latLngToContainerPoint(A.getSouthEast()).multiplyBy(-1).add(this._map.getSize())
            ), this._viscosity = Math.min(1, Math.max(0, this._map.options.maxBoundsViscosity));
          } else
            this._offsetLimit = null;
          p.fire("movestart").fire("dragstart"), p.options.inertia && (this._positions = [], this._times = []);
        },
        _onDrag: function(p) {
          if (this._map.options.inertia) {
            var A = this._lastTime = +/* @__PURE__ */ new Date(), B = this._lastPos = this._draggable._absPos || this._draggable._newPos;
            this._positions.push(B), this._times.push(A), this._prunePositions(A);
          }
          this._map.fire("move", p).fire("drag", p);
        },
        _prunePositions: function(p) {
          for (; this._positions.length > 1 && p - this._times[0] > 50; )
            this._positions.shift(), this._times.shift();
        },
        _onZoomEnd: function() {
          var p = this._map.getSize().divideBy(2), A = this._map.latLngToLayerPoint([0, 0]);
          this._initialWorldOffset = A.subtract(p).x, this._worldWidth = this._map.getPixelWorldBounds().getSize().x;
        },
        _viscousLimit: function(p, A) {
          return p - (p - A) * this._viscosity;
        },
        _onPreDragLimit: function() {
          if (!(!this._viscosity || !this._offsetLimit)) {
            var p = this._draggable._newPos.subtract(this._draggable._startPos), A = this._offsetLimit;
            p.x < A.min.x && (p.x = this._viscousLimit(p.x, A.min.x)), p.y < A.min.y && (p.y = this._viscousLimit(p.y, A.min.y)), p.x > A.max.x && (p.x = this._viscousLimit(p.x, A.max.x)), p.y > A.max.y && (p.y = this._viscousLimit(p.y, A.max.y)), this._draggable._newPos = this._draggable._startPos.add(p);
          }
        },
        _onPreDragWrap: function() {
          var p = this._worldWidth, A = Math.round(p / 2), B = this._initialWorldOffset, X = this._draggable._newPos.x, ne = (X - A + B) % p + A - B, ye = (X + A + B) % p - A - B, We = Math.abs(ne + B) < Math.abs(ye + B) ? ne : ye;
          this._draggable._absPos = this._draggable._newPos.clone(), this._draggable._newPos.x = We;
        },
        _onDragEnd: function(p) {
          var A = this._map, B = A.options, X = !B.inertia || p.noInertia || this._times.length < 2;
          if (A.fire("dragend", p), X)
            A.fire("moveend");
          else {
            this._prunePositions(+/* @__PURE__ */ new Date());
            var ne = this._lastPos.subtract(this._positions[0]), ye = (this._lastTime - this._times[0]) / 1e3, We = B.easeLinearity, at = ne.multiplyBy(We / ye), ft = at.distanceTo([0, 0]), Rt = Math.min(B.inertiaMaxSpeed, ft), ii = at.multiplyBy(Rt / ft), Ci = Rt / (B.inertiaDeceleration * We), Wi = ii.multiplyBy(-Ci / 2).round();
            !Wi.x && !Wi.y ? A.fire("moveend") : (Wi = A._limitOffset(Wi, A.options.maxBounds), Pt(function() {
              A.panBy(Wi, {
                duration: Ci,
                easeLinearity: We,
                noMoveStart: !0,
                animate: !0
              });
            }));
          }
        }
      });
      nn.addInitHook("addHandler", "dragging", Ql), nn.mergeOptions({
        // @option keyboard: Boolean = true
        // Makes the map focusable and allows users to navigate the map with keyboard
        // arrows and `+`/`-` keys.
        keyboard: !0,
        // @option keyboardPanDelta: Number = 80
        // Amount of pixels to pan when pressing an arrow key.
        keyboardPanDelta: 80
      });
      var ec = Es.extend({
        keyCodes: {
          left: [37],
          right: [39],
          down: [40],
          up: [38],
          zoomIn: [187, 107, 61, 171],
          zoomOut: [189, 109, 54, 173]
        },
        initialize: function(p) {
          this._map = p, this._setPanDelta(p.options.keyboardPanDelta), this._setZoomDelta(p.options.zoomDelta);
        },
        addHooks: function() {
          var p = this._map._container;
          p.tabIndex <= 0 && (p.tabIndex = "0"), Bi(p, {
            focus: this._onFocus,
            blur: this._onBlur,
            mousedown: this._onMouseDown
          }, this), this._map.on({
            focus: this._addHooks,
            blur: this._removeHooks
          }, this);
        },
        removeHooks: function() {
          this._removeHooks(), Cn(this._map._container, {
            focus: this._onFocus,
            blur: this._onBlur,
            mousedown: this._onMouseDown
          }, this), this._map.off({
            focus: this._addHooks,
            blur: this._removeHooks
          }, this);
        },
        _onMouseDown: function() {
          if (!this._focused) {
            var p = document.body, A = document.documentElement, B = p.scrollTop || A.scrollTop, X = p.scrollLeft || A.scrollLeft;
            this._map._container.focus(), window.scrollTo(X, B);
          }
        },
        _onFocus: function() {
          this._focused = !0, this._map.fire("focus");
        },
        _onBlur: function() {
          this._focused = !1, this._map.fire("blur");
        },
        _setPanDelta: function(p) {
          var A = this._panKeys = {}, B = this.keyCodes, X, ne;
          for (X = 0, ne = B.left.length; X < ne; X++)
            A[B.left[X]] = [-1 * p, 0];
          for (X = 0, ne = B.right.length; X < ne; X++)
            A[B.right[X]] = [p, 0];
          for (X = 0, ne = B.down.length; X < ne; X++)
            A[B.down[X]] = [0, p];
          for (X = 0, ne = B.up.length; X < ne; X++)
            A[B.up[X]] = [0, -1 * p];
        },
        _setZoomDelta: function(p) {
          var A = this._zoomKeys = {}, B = this.keyCodes, X, ne;
          for (X = 0, ne = B.zoomIn.length; X < ne; X++)
            A[B.zoomIn[X]] = p;
          for (X = 0, ne = B.zoomOut.length; X < ne; X++)
            A[B.zoomOut[X]] = -p;
        },
        _addHooks: function() {
          Bi(document, "keydown", this._onKeyDown, this);
        },
        _removeHooks: function() {
          Cn(document, "keydown", this._onKeyDown, this);
        },
        _onKeyDown: function(p) {
          if (!(p.altKey || p.ctrlKey || p.metaKey)) {
            var A = p.keyCode, B = this._map, X;
            if (A in this._panKeys) {
              if (!B._panAnim || !B._panAnim._inProgress)
                if (X = this._panKeys[A], p.shiftKey && (X = ni(X).multiplyBy(3)), B.options.maxBounds && (X = B._limitOffset(ni(X), B.options.maxBounds)), B.options.worldCopyJump) {
                  var ne = B.wrapLatLng(B.unproject(B.project(B.getCenter()).add(X)));
                  B.panTo(ne);
                } else
                  B.panBy(X);
            } else if (A in this._zoomKeys)
              B.setZoom(B.getZoom() + (p.shiftKey ? 3 : 1) * this._zoomKeys[A]);
            else if (A === 27 && B._popup && B._popup.options.closeOnEscapeKey)
              B.closePopup();
            else
              return;
            Js(p);
          }
        }
      });
      nn.addInitHook("addHandler", "keyboard", ec), nn.mergeOptions({
        // @section Mouse wheel options
        // @option scrollWheelZoom: Boolean|String = true
        // Whether the map can be zoomed by using the mouse wheel. If passed `'center'`,
        // it will zoom to the center of the view regardless of where the mouse was.
        scrollWheelZoom: !0,
        // @option wheelDebounceTime: Number = 40
        // Limits the rate at which a wheel can fire (in milliseconds). By default
        // user can't zoom via wheel more often than once per 40 ms.
        wheelDebounceTime: 40,
        // @option wheelPxPerZoomLevel: Number = 60
        // How many scroll pixels (as reported by [L.DomEvent.getWheelDelta](#domevent-getwheeldelta))
        // mean a change of one full zoom level. Smaller values will make wheel-zooming
        // faster (and vice versa).
        wheelPxPerZoomLevel: 60
      });
      var tc = Es.extend({
        addHooks: function() {
          Bi(this._map._container, "wheel", this._onWheelScroll, this), this._delta = 0;
        },
        removeHooks: function() {
          Cn(this._map._container, "wheel", this._onWheelScroll, this);
        },
        _onWheelScroll: function(p) {
          var A = Bc(p), B = this._map.options.wheelDebounceTime;
          this._delta += A, this._lastMousePos = this._map.mouseEventToContainerPoint(p), this._startTime || (this._startTime = +/* @__PURE__ */ new Date());
          var X = Math.max(B - (+/* @__PURE__ */ new Date() - this._startTime), 0);
          clearTimeout(this._timer), this._timer = setTimeout(E(this._performZoom, this), X), Js(p);
        },
        _performZoom: function() {
          var p = this._map, A = p.getZoom(), B = this._map.options.zoomSnap || 0;
          p._stop();
          var X = this._delta / (this._map.options.wheelPxPerZoomLevel * 4), ne = 4 * Math.log(2 / (1 + Math.exp(-Math.abs(X)))) / Math.LN2, ye = B ? Math.ceil(ne / B) * B : ne, We = p._limitZoom(A + (this._delta > 0 ? ye : -ye)) - A;
          this._delta = 0, this._startTime = null, We && (p.options.scrollWheelZoom === "center" ? p.setZoom(A + We) : p.setZoomAround(this._lastMousePos, A + We));
        }
      });
      nn.addInitHook("addHandler", "scrollWheelZoom", tc);
      var Wc = 600;
      nn.mergeOptions({
        // @section Touch interaction options
        // @option tapHold: Boolean
        // Enables simulation of `contextmenu` event, default is `true` for mobile Safari.
        tapHold: Pe.touchNative && Pe.safari && Pe.mobile,
        // @option tapTolerance: Number = 15
        // The max number of pixels a user can shift his finger during touch
        // for it to be considered a valid tap.
        tapTolerance: 15
      });
      var $c = Es.extend({
        addHooks: function() {
          Bi(this._map._container, "touchstart", this._onDown, this);
        },
        removeHooks: function() {
          Cn(this._map._container, "touchstart", this._onDown, this);
        },
        _onDown: function(p) {
          if (clearTimeout(this._holdTimeout), p.touches.length === 1) {
            var A = p.touches[0];
            this._startPos = this._newPos = new fi(A.clientX, A.clientY), this._holdTimeout = setTimeout(E(function() {
              this._cancel(), this._isTapValid() && (Bi(document, "touchend", _s), Bi(document, "touchend touchcancel", this._cancelClickPrevent), this._simulateEvent("contextmenu", A));
            }, this), Wc), Bi(document, "touchend touchcancel contextmenu", this._cancel, this), Bi(document, "touchmove", this._onMove, this);
          }
        },
        _cancelClickPrevent: function p() {
          Cn(document, "touchend", _s), Cn(document, "touchend touchcancel", p);
        },
        _cancel: function() {
          clearTimeout(this._holdTimeout), Cn(document, "touchend touchcancel contextmenu", this._cancel, this), Cn(document, "touchmove", this._onMove, this);
        },
        _onMove: function(p) {
          var A = p.touches[0];
          this._newPos = new fi(A.clientX, A.clientY);
        },
        _isTapValid: function() {
          return this._newPos.distanceTo(this._startPos) <= this._map.options.tapTolerance;
        },
        _simulateEvent: function(p, A) {
          var B = new MouseEvent(p, {
            bubbles: !0,
            cancelable: !0,
            view: window,
            // detail: 1,
            screenX: A.screenX,
            screenY: A.screenY,
            clientX: A.clientX,
            clientY: A.clientY
            // button: 2,
            // buttons: 2
          });
          B._simulated = !0, A.target.dispatchEvent(B);
        }
      });
      nn.addInitHook("addHandler", "tapHold", $c), nn.mergeOptions({
        // @section Touch interaction options
        // @option touchZoom: Boolean|String = *
        // Whether the map can be zoomed by touch-dragging with two fingers. If
        // passed `'center'`, it will zoom to the center of the view regardless of
        // where the touch events (fingers) were. Enabled for touch-capable web
        // browsers.
        touchZoom: Pe.touch,
        // @option bounceAtZoomLimits: Boolean = true
        // Set it to false if you don't want the map to zoom beyond min/max zoom
        // and then bounce back when pinch-zooming.
        bounceAtZoomLimits: !0
      });
      var Xc = Es.extend({
        addHooks: function() {
          Vi(this._map._container, "leaflet-touch-zoom"), Bi(this._map._container, "touchstart", this._onTouchStart, this);
        },
        removeHooks: function() {
          Hn(this._map._container, "leaflet-touch-zoom"), Cn(this._map._container, "touchstart", this._onTouchStart, this);
        },
        _onTouchStart: function(p) {
          var A = this._map;
          if (!(!p.touches || p.touches.length !== 2 || A._animatingZoom || this._zooming)) {
            var B = A.mouseEventToContainerPoint(p.touches[0]), X = A.mouseEventToContainerPoint(p.touches[1]);
            this._centerPoint = A.getSize()._divideBy(2), this._startLatLng = A.containerPointToLatLng(this._centerPoint), A.options.touchZoom !== "center" && (this._pinchStartLatLng = A.containerPointToLatLng(B.add(X)._divideBy(2))), this._startDist = B.distanceTo(X), this._startZoom = A.getZoom(), this._moved = !1, this._zooming = !0, A._stop(), Bi(document, "touchmove", this._onTouchMove, this), Bi(document, "touchend touchcancel", this._onTouchEnd, this), _s(p);
          }
        },
        _onTouchMove: function(p) {
          if (!(!p.touches || p.touches.length !== 2 || !this._zooming)) {
            var A = this._map, B = A.mouseEventToContainerPoint(p.touches[0]), X = A.mouseEventToContainerPoint(p.touches[1]), ne = B.distanceTo(X) / this._startDist;
            if (this._zoom = A.getScaleZoom(ne, this._startZoom), !A.options.bounceAtZoomLimits && (this._zoom < A.getMinZoom() && ne < 1 || this._zoom > A.getMaxZoom() && ne > 1) && (this._zoom = A._limitZoom(this._zoom)), A.options.touchZoom === "center") {
              if (this._center = this._startLatLng, ne === 1)
                return;
            } else {
              var ye = B._add(X)._divideBy(2)._subtract(this._centerPoint);
              if (ne === 1 && ye.x === 0 && ye.y === 0)
                return;
              this._center = A.unproject(A.project(this._pinchStartLatLng, this._zoom).subtract(ye), this._zoom);
            }
            this._moved || (A._moveStart(!0, !1), this._moved = !0), Mi(this._animRequest);
            var We = E(A._move, A, this._center, this._zoom, { pinch: !0, round: !1 }, void 0);
            this._animRequest = Pt(We, this, !0), _s(p);
          }
        },
        _onTouchEnd: function() {
          if (!this._moved || !this._zooming) {
            this._zooming = !1;
            return;
          }
          this._zooming = !1, Mi(this._animRequest), Cn(document, "touchmove", this._onTouchMove, this), Cn(document, "touchend touchcancel", this._onTouchEnd, this), this._map.options.zoomAnimation ? this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), !0, this._map.options.zoomSnap) : this._map._resetView(this._center, this._map._limitZoom(this._zoom));
        }
      });
      nn.addInitHook("addHandler", "touchZoom", Xc), nn.BoxZoom = Wh, nn.DoubleClickZoom = $h, nn.Drag = Ql, nn.Keyboard = ec, nn.ScrollWheelZoom = tc, nn.TapHold = $c, nn.TouchZoom = Xc, d.Bounds = Gi, d.Browser = Pe, d.CRS = Cs, d.Canvas = vl, d.Circle = gs, d.CircleMarker = ma, d.Class = hn, d.Control = Dn, d.DivIcon = Kl, d.DivOverlay = xr, d.DomEvent = Zl, d.DomUtil = Oi, d.Draggable = Wo, d.Evented = Ji, d.FeatureGroup = Xr, d.GeoJSON = cr, d.GridLayer = ro, d.Handler = Es, d.Icon = Yr, d.ImageOverlay = ja, d.LatLng = Di, d.LatLngBounds = qt, d.Layer = ar, d.LayerGroup = lr, d.LineUtil = ed, d.Map = nn, d.Marker = ks, d.Mixin = Oa, d.Path = Tt, d.Point = fi, d.PolyUtil = or, d.Polygon = Kr, d.Polyline = Dr, d.Popup = Ko, d.PosAnimation = da, d.Projection = bi, d.Rectangle = qc, d.Renderer = Qr, d.SVG = Ga, d.SVGOverlay = Zc, d.TileLayer = kr, d.Tooltip = Jr, d.Transformation = Vs, d.Util = Pn, d.VideoOverlay = Gc, d.bind = E, d.bounds = an, d.canvas = ao, d.circle = Gh, d.circleMarker = Mo, d.control = rr, d.divIcon = ya, d.extend = w, d.featureGroup = ql, d.geoJSON = Hh, d.geoJson = td, d.gridLayer = xl, d.icon = Va, d.imageOverlay = jc, d.latLng = xi, d.latLngBounds = ln, d.layerGroup = ti, d.map = dl, d.marker = Wl, d.point = ni, d.polygon = Yo, d.polyline = So, d.popup = Xl, d.rectangle = gn, d.setOptions = be, d.stamp = O, d.svg = Qo, d.svgOverlay = Hc, d.tileLayer = oo, d.tooltip = Yl, d.transformation = Us, d.version = g, d.videoOverlay = hr;
      var id = window.L;
      d.noConflict = function() {
        return window.L = id, this;
      }, window.L = d;
    });
  }(Sm, Sm.exports)), Sm.exports;
}
var PC = yw();
const wn = /* @__PURE__ */ gw(PC);
var AC = { exports: {} };
(function(m) {
  (function(a, d) {
    m.exports ? m.exports = d(yw()) : d(a.L);
  })(typeof self < "u" ? self : Km, (a) => {
    if (typeof document > "u")
      return console.warn('"window.document" is undefined; leaflet.fullscreen requires this object to access the DOM'), !1;
    const d = (() => {
      const b = [
        // Standard
        [
          "requestFullscreen",
          "exitFullscreen",
          "fullscreenElement",
          "fullscreenEnabled",
          "fullscreenchange",
          "fullscreenerror"
        ],
        // New WebKit
        [
          "webkitRequestFullscreen",
          "webkitExitFullscreen",
          "webkitFullscreenElement",
          "webkitFullscreenEnabled",
          "webkitfullscreenchange",
          "webkitfullscreenerror"
        ]
      ], E = b[0], i = {};
      for (const O of b)
        if (O[1] in document) {
          for (let j = 0; j < O.length; j++)
            i[E[j]] = O[j];
          return i;
        }
      return !1;
    })(), g = {
      change: d.fullscreenchange,
      error: d.fullscreenerror
    }, w = {
      request(b, E) {
        return new Promise((i, O) => {
          const j = (function() {
            this.off("change", j), i();
          }).bind(this);
          this.on("change", j), b = b || document.documentElement;
          const Y = b[d.requestFullscreen](E);
          Y instanceof Promise && Y.then(j).catch(O);
        });
      },
      exit() {
        return new Promise((b, E) => {
          if (!this.isFullscreen) {
            b();
            return;
          }
          const i = (function() {
            this.off("change", i), b();
          }).bind(this);
          this.on("change", i);
          const O = document[d.exitFullscreen]();
          O instanceof Promise && O.then(i).catch(E);
        });
      },
      on(b, E) {
        const i = g[b];
        i && document.addEventListener(i, E, !1);
      },
      off(b, E) {
        const i = g[b];
        i && document.removeEventListener(i, E, !1);
      },
      nativeAPI: d
    };
    return Object.defineProperties(w, {
      isFullscreen: {
        get() {
          return !!document[d.fullscreenElement];
        }
      },
      isEnabled: {
        enumerable: !0,
        get() {
          return !!document[d.fullscreenEnabled];
        }
      }
    }), a.Control.FullScreen = a.Control.extend({
      options: {
        position: "topleft",
        title: "Full Screen",
        titleCancel: "Exit Full Screen",
        forceSeparateButton: !1,
        forcePseudoFullscreen: !1,
        fullscreenElement: !1
      },
      _screenfull: w,
      onAdd(b) {
        let E = "leaflet-control-zoom-fullscreen", i, O = "";
        return b.zoomControl && !this.options.forceSeparateButton ? i = b.zoomControl._container : i = a.DomUtil.create("div", "leaflet-bar"), this.options.content ? O = this.options.content : E += " fullscreen-icon", this._createButton(this.options.title, E, O, i, this.toggleFullScreen, this), this._map.fullscreenControl = this, this._map.on("enterFullscreen exitFullscreen", this._toggleState, this), i;
      },
      onRemove() {
        a.DomEvent.off(this.link, "click", a.DomEvent.stop).off(this.link, "click", this.toggleFullScreen, this), this._screenfull.isEnabled && (a.DomEvent.off(this._container, this._screenfull.nativeAPI.fullscreenchange, a.DomEvent.stop).off(this._container, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, this), a.DomEvent.off(document, this._screenfull.nativeAPI.fullscreenchange, a.DomEvent.stop).off(document, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, this));
      },
      _createButton(b, E, i, O, j, Y) {
        return this.link = a.DomUtil.create("a", E, O), this.link.href = "#", this.link.title = b, this.link.innerHTML = i, this.link.setAttribute("role", "button"), this.link.setAttribute("aria-label", b), L.DomEvent.disableClickPropagation(O), a.DomEvent.on(this.link, "click", a.DomEvent.stop).on(this.link, "click", j, Y), this._screenfull.isEnabled && (a.DomEvent.on(O, this._screenfull.nativeAPI.fullscreenchange, a.DomEvent.stop).on(O, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, Y), a.DomEvent.on(document, this._screenfull.nativeAPI.fullscreenchange, a.DomEvent.stop).on(document, this._screenfull.nativeAPI.fullscreenchange, this._handleFullscreenChange, Y)), this.link;
      },
      toggleFullScreen() {
        const b = this._map;
        b._exitFired = !1, b._isFullscreen ? (this._screenfull.isEnabled && !this.options.forcePseudoFullscreen ? this._screenfull.exit().then(() => b.invalidateSize()) : (a.DomUtil.removeClass(this.options.fullscreenElement ? this.options.fullscreenElement : b._container, "leaflet-pseudo-fullscreen"), b.invalidateSize()), b.fire("exitFullscreen"), b._exitFired = !0, b._isFullscreen = !1) : (this._screenfull.isEnabled && !this.options.forcePseudoFullscreen ? this._screenfull.request(this.options.fullscreenElement ? this.options.fullscreenElement : b._container).then(() => b.invalidateSize()) : (a.DomUtil.addClass(this.options.fullscreenElement ? this.options.fullscreenElement : b._container, "leaflet-pseudo-fullscreen"), b.invalidateSize()), b.fire("enterFullscreen"), b._isFullscreen = !0);
      },
      _toggleState() {
        this.link.title = this._map._isFullscreen ? this.options.title : this.options.titleCancel, this._map._isFullscreen ? L.DomUtil.removeClass(this.link, "leaflet-fullscreen-on") : L.DomUtil.addClass(this.link, "leaflet-fullscreen-on");
      },
      _handleFullscreenChange(b) {
        const E = this._map;
        b.target === E.getContainer() && !this._screenfull.isFullscreen && !E._exitFired && (this._screenfull.exit().then(() => E.invalidateSize()), E.fire("exitFullscreen"), E._exitFired = !0, E._isFullscreen = !1);
      }
    }), a.Map.include({
      toggleFullscreen() {
        this.fullscreenControl.toggleFullScreen();
      }
    }), a.Map.addInitHook(function() {
      this.options.fullscreenControl && this.addControl(a.control.fullscreen(this.options.fullscreenControlOptions));
    }), a.control.fullscreen = function(b) {
      return new a.Control.FullScreen(b);
    }, { leaflet: a };
  });
})(AC);
var gb = { exports: {} };
(function(m, a) {
  (function(d, g) {
    g(a);
  })(Km, function(d) {
    var g = L.MarkerClusterGroup = L.FeatureGroup.extend({
      options: {
        maxClusterRadius: 80,
        //A cluster will cover at most this many pixels from its center
        iconCreateFunction: null,
        clusterPane: L.Marker.prototype.options.pane,
        spiderfyOnEveryZoom: !1,
        spiderfyOnMaxZoom: !0,
        showCoverageOnHover: !0,
        zoomToBoundsOnClick: !0,
        singleMarkerMode: !1,
        disableClusteringAtZoom: null,
        // Setting this to false prevents the removal of any clusters outside of the viewpoint, which
        // is the default behaviour for performance reasons.
        removeOutsideVisibleBounds: !0,
        // Set to false to disable all animations (zoom and spiderfy).
        // If false, option animateAddingMarkers below has no effect.
        // If L.DomUtil.TRANSITION is falsy, this option has no effect.
        animate: !0,
        //Whether to animate adding markers after adding the MarkerClusterGroup to the map
        // If you are adding individual markers set to true, if adding bulk markers leave false for massive performance gains.
        animateAddingMarkers: !1,
        // Make it possible to provide custom function to calculate spiderfy shape positions
        spiderfyShapePositions: null,
        //Increase to increase the distance away that spiderfied markers appear from the center
        spiderfyDistanceMultiplier: 1,
        // Make it possible to specify a polyline options on a spider leg
        spiderLegPolylineOptions: { weight: 1.5, color: "#222", opacity: 0.5 },
        // When bulk adding layers, adds markers in chunks. Means addLayers may not add all the layers in the call, others will be loaded during setTimeouts
        chunkedLoading: !1,
        chunkInterval: 200,
        // process markers for a maximum of ~ n milliseconds (then trigger the chunkProgress callback)
        chunkDelay: 50,
        // at the end of each interval, give n milliseconds back to system/browser
        chunkProgress: null,
        // progress callback: function(processed, total, elapsed) (e.g. for a progress indicator)
        //Options to pass to the L.Polygon constructor
        polygonOptions: {}
      },
      initialize: function(b) {
        L.Util.setOptions(this, b), this.options.iconCreateFunction || (this.options.iconCreateFunction = this._defaultIconCreateFunction), this._featureGroup = L.featureGroup(), this._featureGroup.addEventParent(this), this._nonPointGroup = L.featureGroup(), this._nonPointGroup.addEventParent(this), this._inZoomAnimation = 0, this._needsClustering = [], this._needsRemoving = [], this._currentShownBounds = null, this._queue = [], this._childMarkerEventHandlers = {
          dragstart: this._childMarkerDragStart,
          move: this._childMarkerMoved,
          dragend: this._childMarkerDragEnd
        };
        var E = L.DomUtil.TRANSITION && this.options.animate;
        L.extend(this, E ? this._withAnimation : this._noAnimation), this._markerCluster = E ? L.MarkerCluster : L.MarkerClusterNonAnimated;
      },
      addLayer: function(b) {
        if (b instanceof L.LayerGroup)
          return this.addLayers([b]);
        if (!b.getLatLng)
          return this._nonPointGroup.addLayer(b), this.fire("layeradd", { layer: b }), this;
        if (!this._map)
          return this._needsClustering.push(b), this.fire("layeradd", { layer: b }), this;
        if (this.hasLayer(b))
          return this;
        this._unspiderfy && this._unspiderfy(), this._addLayer(b, this._maxZoom), this.fire("layeradd", { layer: b }), this._topClusterLevel._recalculateBounds(), this._refreshClustersIcons();
        var E = b, i = this._zoom;
        if (b.__parent)
          for (; E.__parent._zoom >= i; )
            E = E.__parent;
        return this._currentShownBounds.contains(E.getLatLng()) && (this.options.animateAddingMarkers ? this._animationAddLayer(b, E) : this._animationAddLayerNonAnimated(b, E)), this;
      },
      removeLayer: function(b) {
        return b instanceof L.LayerGroup ? this.removeLayers([b]) : b.getLatLng ? this._map ? b.__parent ? (this._unspiderfy && (this._unspiderfy(), this._unspiderfyLayer(b)), this._removeLayer(b, !0), this.fire("layerremove", { layer: b }), this._topClusterLevel._recalculateBounds(), this._refreshClustersIcons(), b.off(this._childMarkerEventHandlers, this), this._featureGroup.hasLayer(b) && (this._featureGroup.removeLayer(b), b.clusterShow && b.clusterShow()), this) : this : (!this._arraySplice(this._needsClustering, b) && this.hasLayer(b) && this._needsRemoving.push({ layer: b, latlng: b._latlng }), this.fire("layerremove", { layer: b }), this) : (this._nonPointGroup.removeLayer(b), this.fire("layerremove", { layer: b }), this);
      },
      //Takes an array of markers and adds them in bulk
      addLayers: function(b, E) {
        if (!L.Util.isArray(b))
          return this.addLayer(b);
        var i = this._featureGroup, O = this._nonPointGroup, j = this.options.chunkedLoading, Y = this.options.chunkInterval, J = this.options.chunkProgress, ae = b.length, ce = 0, Te = !0, be;
        if (this._map) {
          var Ze = (/* @__PURE__ */ new Date()).getTime(), je = L.bind(function() {
            var vt = (/* @__PURE__ */ new Date()).getTime();
            for (this._map && this._unspiderfy && this._unspiderfy(); ce < ae; ce++) {
              if (j && ce % 200 === 0) {
                var ht = (/* @__PURE__ */ new Date()).getTime() - vt;
                if (ht > Y)
                  break;
              }
              if (be = b[ce], be instanceof L.LayerGroup) {
                Te && (b = b.slice(), Te = !1), this._extractNonGroupLayers(be, b), ae = b.length;
                continue;
              }
              if (!be.getLatLng) {
                O.addLayer(be), E || this.fire("layeradd", { layer: be });
                continue;
              }
              if (!this.hasLayer(be) && (this._addLayer(be, this._maxZoom), E || this.fire("layeradd", { layer: be }), be.__parent && be.__parent.getChildCount() === 2)) {
                var gt = be.__parent.getAllChildMarkers(), Vt = gt[0] === be ? gt[1] : gt[0];
                i.removeLayer(Vt);
              }
            }
            J && J(ce, ae, (/* @__PURE__ */ new Date()).getTime() - Ze), ce === ae ? (this._topClusterLevel._recalculateBounds(), this._refreshClustersIcons(), this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds)) : setTimeout(je, this.options.chunkDelay);
          }, this);
          je();
        } else
          for (var ot = this._needsClustering; ce < ae; ce++) {
            if (be = b[ce], be instanceof L.LayerGroup) {
              Te && (b = b.slice(), Te = !1), this._extractNonGroupLayers(be, b), ae = b.length;
              continue;
            }
            if (!be.getLatLng) {
              O.addLayer(be);
              continue;
            }
            this.hasLayer(be) || ot.push(be);
          }
        return this;
      },
      //Takes an array of markers and removes them in bulk
      removeLayers: function(b) {
        var E, i, O = b.length, j = this._featureGroup, Y = this._nonPointGroup, J = !0;
        if (!this._map) {
          for (E = 0; E < O; E++) {
            if (i = b[E], i instanceof L.LayerGroup) {
              J && (b = b.slice(), J = !1), this._extractNonGroupLayers(i, b), O = b.length;
              continue;
            }
            this._arraySplice(this._needsClustering, i), Y.removeLayer(i), this.hasLayer(i) && this._needsRemoving.push({ layer: i, latlng: i._latlng }), this.fire("layerremove", { layer: i });
          }
          return this;
        }
        if (this._unspiderfy) {
          this._unspiderfy();
          var ae = b.slice(), ce = O;
          for (E = 0; E < ce; E++) {
            if (i = ae[E], i instanceof L.LayerGroup) {
              this._extractNonGroupLayers(i, ae), ce = ae.length;
              continue;
            }
            this._unspiderfyLayer(i);
          }
        }
        for (E = 0; E < O; E++) {
          if (i = b[E], i instanceof L.LayerGroup) {
            J && (b = b.slice(), J = !1), this._extractNonGroupLayers(i, b), O = b.length;
            continue;
          }
          if (!i.__parent) {
            Y.removeLayer(i), this.fire("layerremove", { layer: i });
            continue;
          }
          this._removeLayer(i, !0, !0), this.fire("layerremove", { layer: i }), j.hasLayer(i) && (j.removeLayer(i), i.clusterShow && i.clusterShow());
        }
        return this._topClusterLevel._recalculateBounds(), this._refreshClustersIcons(), this._topClusterLevel._recursivelyAddChildrenToMap(null, this._zoom, this._currentShownBounds), this;
      },
      //Removes all layers from the MarkerClusterGroup
      clearLayers: function() {
        return this._map || (this._needsClustering = [], this._needsRemoving = [], delete this._gridClusters, delete this._gridUnclustered), this._noanimationUnspiderfy && this._noanimationUnspiderfy(), this._featureGroup.clearLayers(), this._nonPointGroup.clearLayers(), this.eachLayer(function(b) {
          b.off(this._childMarkerEventHandlers, this), delete b.__parent;
        }, this), this._map && this._generateInitialClusters(), this;
      },
      //Override FeatureGroup.getBounds as it doesn't work
      getBounds: function() {
        var b = new L.LatLngBounds();
        this._topClusterLevel && b.extend(this._topClusterLevel._bounds);
        for (var E = this._needsClustering.length - 1; E >= 0; E--)
          b.extend(this._needsClustering[E].getLatLng());
        return b.extend(this._nonPointGroup.getBounds()), b;
      },
      //Overrides LayerGroup.eachLayer
      eachLayer: function(b, E) {
        var i = this._needsClustering.slice(), O = this._needsRemoving, j, Y, J;
        for (this._topClusterLevel && this._topClusterLevel.getAllChildMarkers(i), Y = i.length - 1; Y >= 0; Y--) {
          for (j = !0, J = O.length - 1; J >= 0; J--)
            if (O[J].layer === i[Y]) {
              j = !1;
              break;
            }
          j && b.call(E, i[Y]);
        }
        this._nonPointGroup.eachLayer(b, E);
      },
      //Overrides LayerGroup.getLayers
      getLayers: function() {
        var b = [];
        return this.eachLayer(function(E) {
          b.push(E);
        }), b;
      },
      //Overrides LayerGroup.getLayer, WARNING: Really bad performance
      getLayer: function(b) {
        var E = null;
        return b = parseInt(b, 10), this.eachLayer(function(i) {
          L.stamp(i) === b && (E = i);
        }), E;
      },
      //Returns true if the given layer is in this MarkerClusterGroup
      hasLayer: function(b) {
        if (!b)
          return !1;
        var E, i = this._needsClustering;
        for (E = i.length - 1; E >= 0; E--)
          if (i[E] === b)
            return !0;
        for (i = this._needsRemoving, E = i.length - 1; E >= 0; E--)
          if (i[E].layer === b)
            return !1;
        return !!(b.__parent && b.__parent._group === this) || this._nonPointGroup.hasLayer(b);
      },
      //Zoom down to show the given layer (spiderfying if necessary) then calls the callback
      zoomToShowLayer: function(b, E) {
        var i = this._map;
        typeof E != "function" && (E = function() {
        });
        var O = function() {
          (i.hasLayer(b) || i.hasLayer(b.__parent)) && !this._inZoomAnimation && (this._map.off("moveend", O, this), this.off("animationend", O, this), i.hasLayer(b) ? E() : b.__parent._icon && (this.once("spiderfied", E, this), b.__parent.spiderfy()));
        };
        b._icon && this._map.getBounds().contains(b.getLatLng()) ? E() : b.__parent._zoom < Math.round(this._map._zoom) ? (this._map.on("moveend", O, this), this._map.panTo(b.getLatLng())) : (this._map.on("moveend", O, this), this.on("animationend", O, this), b.__parent.zoomToBounds());
      },
      //Overrides FeatureGroup.onAdd
      onAdd: function(b) {
        this._map = b;
        var E, i, O;
        if (!isFinite(this._map.getMaxZoom()))
          throw "Map has no maxZoom specified";
        for (this._featureGroup.addTo(b), this._nonPointGroup.addTo(b), this._gridClusters || this._generateInitialClusters(), this._maxLat = b.options.crs.projection.MAX_LATITUDE, E = 0, i = this._needsRemoving.length; E < i; E++)
          O = this._needsRemoving[E], O.newlatlng = O.layer._latlng, O.layer._latlng = O.latlng;
        for (E = 0, i = this._needsRemoving.length; E < i; E++)
          O = this._needsRemoving[E], this._removeLayer(O.layer, !0), O.layer._latlng = O.newlatlng;
        this._needsRemoving = [], this._zoom = Math.round(this._map._zoom), this._currentShownBounds = this._getExpandedVisibleBounds(), this._map.on("zoomend", this._zoomEnd, this), this._map.on("moveend", this._moveEnd, this), this._spiderfierOnAdd && this._spiderfierOnAdd(), this._bindEvents(), i = this._needsClustering, this._needsClustering = [], this.addLayers(i, !0);
      },
      //Overrides FeatureGroup.onRemove
      onRemove: function(b) {
        b.off("zoomend", this._zoomEnd, this), b.off("moveend", this._moveEnd, this), this._unbindEvents(), this._map._mapPane.className = this._map._mapPane.className.replace(" leaflet-cluster-anim", ""), this._spiderfierOnRemove && this._spiderfierOnRemove(), delete this._maxLat, this._hideCoverage(), this._featureGroup.remove(), this._nonPointGroup.remove(), this._featureGroup.clearLayers(), this._map = null;
      },
      getVisibleParent: function(b) {
        for (var E = b; E && !E._icon; )
          E = E.__parent;
        return E || null;
      },
      //Remove the given object from the given array
      _arraySplice: function(b, E) {
        for (var i = b.length - 1; i >= 0; i--)
          if (b[i] === E)
            return b.splice(i, 1), !0;
      },
      /**
       * Removes a marker from all _gridUnclustered zoom levels, starting at the supplied zoom.
       * @param marker to be removed from _gridUnclustered.
       * @param z integer bottom start zoom level (included)
       * @private
       */
      _removeFromGridUnclustered: function(b, E) {
        for (var i = this._map, O = this._gridUnclustered, j = Math.floor(this._map.getMinZoom()); E >= j && O[E].removeObject(b, i.project(b.getLatLng(), E)); E--)
          ;
      },
      _childMarkerDragStart: function(b) {
        b.target.__dragStart = b.target._latlng;
      },
      _childMarkerMoved: function(b) {
        if (!this._ignoreMove && !b.target.__dragStart) {
          var E = b.target._popup && b.target._popup.isOpen();
          this._moveChild(b.target, b.oldLatLng, b.latlng), E && b.target.openPopup();
        }
      },
      _moveChild: function(b, E, i) {
        b._latlng = E, this.removeLayer(b), b._latlng = i, this.addLayer(b);
      },
      _childMarkerDragEnd: function(b) {
        var E = b.target.__dragStart;
        delete b.target.__dragStart, E && this._moveChild(b.target, E, b.target._latlng);
      },
      //Internal function for removing a marker from everything.
      //dontUpdateMap: set to true if you will handle updating the map manually (for bulk functions)
      _removeLayer: function(b, E, i) {
        var O = this._gridClusters, j = this._gridUnclustered, Y = this._featureGroup, J = this._map, ae = Math.floor(this._map.getMinZoom());
        E && this._removeFromGridUnclustered(b, this._maxZoom);
        var ce = b.__parent, Te = ce._markers, be;
        for (this._arraySplice(Te, b); ce && (ce._childCount--, ce._boundsNeedUpdate = !0, !(ce._zoom < ae)); )
          E && ce._childCount <= 1 ? (be = ce._markers[0] === b ? ce._markers[1] : ce._markers[0], O[ce._zoom].removeObject(ce, J.project(ce._cLatLng, ce._zoom)), j[ce._zoom].addObject(be, J.project(be.getLatLng(), ce._zoom)), this._arraySplice(ce.__parent._childClusters, ce), ce.__parent._markers.push(be), be.__parent = ce.__parent, ce._icon && (Y.removeLayer(ce), i || Y.addLayer(be))) : ce._iconNeedsUpdate = !0, ce = ce.__parent;
        delete b.__parent;
      },
      _isOrIsParent: function(b, E) {
        for (; E; ) {
          if (b === E)
            return !0;
          E = E.parentNode;
        }
        return !1;
      },
      //Override L.Evented.fire
      fire: function(b, E, i) {
        if (E && E.layer instanceof L.MarkerCluster) {
          if (E.originalEvent && this._isOrIsParent(E.layer._icon, E.originalEvent.relatedTarget))
            return;
          b = "cluster" + b;
        }
        L.FeatureGroup.prototype.fire.call(this, b, E, i);
      },
      //Override L.Evented.listens
      listens: function(b, E) {
        return L.FeatureGroup.prototype.listens.call(this, b, E) || L.FeatureGroup.prototype.listens.call(this, "cluster" + b, E);
      },
      //Default functionality
      _defaultIconCreateFunction: function(b) {
        var E = b.getChildCount(), i = " marker-cluster-";
        return E < 10 ? i += "small" : E < 100 ? i += "medium" : i += "large", new L.DivIcon({ html: "<div><span>" + E + "</span></div>", className: "marker-cluster" + i, iconSize: new L.Point(40, 40) });
      },
      _bindEvents: function() {
        var b = this._map, E = this.options.spiderfyOnMaxZoom, i = this.options.showCoverageOnHover, O = this.options.zoomToBoundsOnClick, j = this.options.spiderfyOnEveryZoom;
        (E || O || j) && this.on("clusterclick clusterkeypress", this._zoomOrSpiderfy, this), i && (this.on("clustermouseover", this._showCoverage, this), this.on("clustermouseout", this._hideCoverage, this), b.on("zoomend", this._hideCoverage, this));
      },
      _zoomOrSpiderfy: function(b) {
        var E = b.layer, i = E;
        if (!(b.type === "clusterkeypress" && b.originalEvent && b.originalEvent.keyCode !== 13)) {
          for (; i._childClusters.length === 1; )
            i = i._childClusters[0];
          i._zoom === this._maxZoom && i._childCount === E._childCount && this.options.spiderfyOnMaxZoom ? E.spiderfy() : this.options.zoomToBoundsOnClick && E.zoomToBounds(), this.options.spiderfyOnEveryZoom && E.spiderfy(), b.originalEvent && b.originalEvent.keyCode === 13 && this._map._container.focus();
        }
      },
      _showCoverage: function(b) {
        var E = this._map;
        this._inZoomAnimation || (this._shownPolygon && E.removeLayer(this._shownPolygon), b.layer.getChildCount() > 2 && b.layer !== this._spiderfied && (this._shownPolygon = new L.Polygon(b.layer.getConvexHull(), this.options.polygonOptions), E.addLayer(this._shownPolygon)));
      },
      _hideCoverage: function() {
        this._shownPolygon && (this._map.removeLayer(this._shownPolygon), this._shownPolygon = null);
      },
      _unbindEvents: function() {
        var b = this.options.spiderfyOnMaxZoom, E = this.options.showCoverageOnHover, i = this.options.zoomToBoundsOnClick, O = this.options.spiderfyOnEveryZoom, j = this._map;
        (b || i || O) && this.off("clusterclick clusterkeypress", this._zoomOrSpiderfy, this), E && (this.off("clustermouseover", this._showCoverage, this), this.off("clustermouseout", this._hideCoverage, this), j.off("zoomend", this._hideCoverage, this));
      },
      _zoomEnd: function() {
        this._map && (this._mergeSplitClusters(), this._zoom = Math.round(this._map._zoom), this._currentShownBounds = this._getExpandedVisibleBounds());
      },
      _moveEnd: function() {
        if (!this._inZoomAnimation) {
          var b = this._getExpandedVisibleBounds();
          this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, b), this._topClusterLevel._recursivelyAddChildrenToMap(null, Math.round(this._map._zoom), b), this._currentShownBounds = b;
        }
      },
      _generateInitialClusters: function() {
        var b = Math.ceil(this._map.getMaxZoom()), E = Math.floor(this._map.getMinZoom()), i = this.options.maxClusterRadius, O = i;
        typeof i != "function" && (O = function() {
          return i;
        }), this.options.disableClusteringAtZoom !== null && (b = this.options.disableClusteringAtZoom - 1), this._maxZoom = b, this._gridClusters = {}, this._gridUnclustered = {};
        for (var j = b; j >= E; j--)
          this._gridClusters[j] = new L.DistanceGrid(O(j)), this._gridUnclustered[j] = new L.DistanceGrid(O(j));
        this._topClusterLevel = new this._markerCluster(this, E - 1);
      },
      //Zoom: Zoom to start adding at (Pass this._maxZoom to start at the bottom)
      _addLayer: function(b, E) {
        var i = this._gridClusters, O = this._gridUnclustered, j = Math.floor(this._map.getMinZoom()), Y, J;
        for (this.options.singleMarkerMode && this._overrideMarkerIcon(b), b.on(this._childMarkerEventHandlers, this); E >= j; E--) {
          Y = this._map.project(b.getLatLng(), E);
          var ae = i[E].getNearObject(Y);
          if (ae) {
            ae._addChild(b), b.__parent = ae;
            return;
          }
          if (ae = O[E].getNearObject(Y), ae) {
            var ce = ae.__parent;
            ce && this._removeLayer(ae, !1);
            var Te = new this._markerCluster(this, E, ae, b);
            i[E].addObject(Te, this._map.project(Te._cLatLng, E)), ae.__parent = Te, b.__parent = Te;
            var be = Te;
            for (J = E - 1; J > ce._zoom; J--)
              be = new this._markerCluster(this, J, be), i[J].addObject(be, this._map.project(ae.getLatLng(), J));
            ce._addChild(be), this._removeFromGridUnclustered(ae, E);
            return;
          }
          O[E].addObject(b, Y);
        }
        this._topClusterLevel._addChild(b), b.__parent = this._topClusterLevel;
      },
      /**
       * Refreshes the icon of all "dirty" visible clusters.
       * Non-visible "dirty" clusters will be updated when they are added to the map.
       * @private
       */
      _refreshClustersIcons: function() {
        this._featureGroup.eachLayer(function(b) {
          b instanceof L.MarkerCluster && b._iconNeedsUpdate && b._updateIcon();
        });
      },
      //Enqueue code to fire after the marker expand/contract has happened
      _enqueue: function(b) {
        this._queue.push(b), this._queueTimeout || (this._queueTimeout = setTimeout(L.bind(this._processQueue, this), 300));
      },
      _processQueue: function() {
        for (var b = 0; b < this._queue.length; b++)
          this._queue[b].call(this);
        this._queue.length = 0, clearTimeout(this._queueTimeout), this._queueTimeout = null;
      },
      //Merge and split any existing clusters that are too big or small
      _mergeSplitClusters: function() {
        var b = Math.round(this._map._zoom);
        this._processQueue(), this._zoom < b && this._currentShownBounds.intersects(this._getExpandedVisibleBounds()) ? (this._animationStart(), this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), this._zoom, this._getExpandedVisibleBounds()), this._animationZoomIn(this._zoom, b)) : this._zoom > b ? (this._animationStart(), this._animationZoomOut(this._zoom, b)) : this._moveEnd();
      },
      //Gets the maps visible bounds expanded in each direction by the size of the screen (so the user cannot see an area we do not cover in one pan)
      _getExpandedVisibleBounds: function() {
        if (this.options.removeOutsideVisibleBounds) {
          if (L.Browser.mobile)
            return this._checkBoundsMaxLat(this._map.getBounds());
        } else
          return this._mapBoundsInfinite;
        return this._checkBoundsMaxLat(this._map.getBounds().pad(1));
      },
      /**
       * Expands the latitude to Infinity (or -Infinity) if the input bounds reach the map projection maximum defined latitude
       * (in the case of Web/Spherical Mercator, it is 85.0511287798 / see https://en.wikipedia.org/wiki/Web_Mercator#Formulas).
       * Otherwise, the removeOutsideVisibleBounds option will remove markers beyond that limit, whereas the same markers without
       * this option (or outside MCG) will have their position floored (ceiled) by the projection and rendered at that limit,
       * making the user think that MCG "eats" them and never displays them again.
       * @param bounds L.LatLngBounds
       * @returns {L.LatLngBounds}
       * @private
       */
      _checkBoundsMaxLat: function(b) {
        var E = this._maxLat;
        return E !== void 0 && (b.getNorth() >= E && (b._northEast.lat = 1 / 0), b.getSouth() <= -E && (b._southWest.lat = -1 / 0)), b;
      },
      //Shared animation code
      _animationAddLayerNonAnimated: function(b, E) {
        if (E === b)
          this._featureGroup.addLayer(b);
        else if (E._childCount === 2) {
          E._addToMap();
          var i = E.getAllChildMarkers();
          this._featureGroup.removeLayer(i[0]), this._featureGroup.removeLayer(i[1]);
        } else
          E._updateIcon();
      },
      /**
       * Extracts individual (i.e. non-group) layers from a Layer Group.
       * @param group to extract layers from.
       * @param output {Array} in which to store the extracted layers.
       * @returns {*|Array}
       * @private
       */
      _extractNonGroupLayers: function(b, E) {
        var i = b.getLayers(), O = 0, j;
        for (E = E || []; O < i.length; O++) {
          if (j = i[O], j instanceof L.LayerGroup) {
            this._extractNonGroupLayers(j, E);
            continue;
          }
          E.push(j);
        }
        return E;
      },
      /**
       * Implements the singleMarkerMode option.
       * @param layer Marker to re-style using the Clusters iconCreateFunction.
       * @returns {L.Icon} The newly created icon.
       * @private
       */
      _overrideMarkerIcon: function(b) {
        var E = b.options.icon = this.options.iconCreateFunction({
          getChildCount: function() {
            return 1;
          },
          getAllChildMarkers: function() {
            return [b];
          }
        });
        return E;
      }
    });
    L.MarkerClusterGroup.include({
      _mapBoundsInfinite: new L.LatLngBounds(new L.LatLng(-1 / 0, -1 / 0), new L.LatLng(1 / 0, 1 / 0))
    }), L.MarkerClusterGroup.include({
      _noAnimation: {
        //Non Animated versions of everything
        _animationStart: function() {
        },
        _animationZoomIn: function(b, E) {
          this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), b), this._topClusterLevel._recursivelyAddChildrenToMap(null, E, this._getExpandedVisibleBounds()), this.fire("animationend");
        },
        _animationZoomOut: function(b, E) {
          this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), b), this._topClusterLevel._recursivelyAddChildrenToMap(null, E, this._getExpandedVisibleBounds()), this.fire("animationend");
        },
        _animationAddLayer: function(b, E) {
          this._animationAddLayerNonAnimated(b, E);
        }
      },
      _withAnimation: {
        //Animated versions here
        _animationStart: function() {
          this._map._mapPane.className += " leaflet-cluster-anim", this._inZoomAnimation++;
        },
        _animationZoomIn: function(b, E) {
          var i = this._getExpandedVisibleBounds(), O = this._featureGroup, j = Math.floor(this._map.getMinZoom()), Y;
          this._ignoreMove = !0, this._topClusterLevel._recursively(i, b, j, function(J) {
            var ae = J._latlng, ce = J._markers, Te;
            for (i.contains(ae) || (ae = null), J._isSingleParent() && b + 1 === E ? (O.removeLayer(J), J._recursivelyAddChildrenToMap(null, E, i)) : (J.clusterHide(), J._recursivelyAddChildrenToMap(ae, E, i)), Y = ce.length - 1; Y >= 0; Y--)
              Te = ce[Y], i.contains(Te._latlng) || O.removeLayer(Te);
          }), this._forceLayout(), this._topClusterLevel._recursivelyBecomeVisible(i, E), O.eachLayer(function(J) {
            !(J instanceof L.MarkerCluster) && J._icon && J.clusterShow();
          }), this._topClusterLevel._recursively(i, b, E, function(J) {
            J._recursivelyRestoreChildPositions(E);
          }), this._ignoreMove = !1, this._enqueue(function() {
            this._topClusterLevel._recursively(i, b, j, function(J) {
              O.removeLayer(J), J.clusterShow();
            }), this._animationEnd();
          });
        },
        _animationZoomOut: function(b, E) {
          this._animationZoomOutSingle(this._topClusterLevel, b - 1, E), this._topClusterLevel._recursivelyAddChildrenToMap(null, E, this._getExpandedVisibleBounds()), this._topClusterLevel._recursivelyRemoveChildrenFromMap(this._currentShownBounds, Math.floor(this._map.getMinZoom()), b, this._getExpandedVisibleBounds());
        },
        _animationAddLayer: function(b, E) {
          var i = this, O = this._featureGroup;
          O.addLayer(b), E !== b && (E._childCount > 2 ? (E._updateIcon(), this._forceLayout(), this._animationStart(), b._setPos(this._map.latLngToLayerPoint(E.getLatLng())), b.clusterHide(), this._enqueue(function() {
            O.removeLayer(b), b.clusterShow(), i._animationEnd();
          })) : (this._forceLayout(), i._animationStart(), i._animationZoomOutSingle(E, this._map.getMaxZoom(), this._zoom)));
        }
      },
      // Private methods for animated versions.
      _animationZoomOutSingle: function(b, E, i) {
        var O = this._getExpandedVisibleBounds(), j = Math.floor(this._map.getMinZoom());
        b._recursivelyAnimateChildrenInAndAddSelfToMap(O, j, E + 1, i);
        var Y = this;
        this._forceLayout(), b._recursivelyBecomeVisible(O, i), this._enqueue(function() {
          if (b._childCount === 1) {
            var J = b._markers[0];
            this._ignoreMove = !0, J.setLatLng(J.getLatLng()), this._ignoreMove = !1, J.clusterShow && J.clusterShow();
          } else
            b._recursively(O, i, j, function(ae) {
              ae._recursivelyRemoveChildrenFromMap(O, j, E + 1);
            });
          Y._animationEnd();
        });
      },
      _animationEnd: function() {
        this._map && (this._map._mapPane.className = this._map._mapPane.className.replace(" leaflet-cluster-anim", "")), this._inZoomAnimation--, this.fire("animationend");
      },
      //Force a browser layout of stuff in the map
      // Should apply the current opacity and location to all elements so we can update them again for an animation
      _forceLayout: function() {
        L.Util.falseFn(document.body.offsetWidth);
      }
    }), L.markerClusterGroup = function(b) {
      return new L.MarkerClusterGroup(b);
    };
    var w = L.MarkerCluster = L.Marker.extend({
      options: L.Icon.prototype.options,
      initialize: function(b, E, i, O) {
        L.Marker.prototype.initialize.call(
          this,
          i ? i._cLatLng || i.getLatLng() : new L.LatLng(0, 0),
          { icon: this, pane: b.options.clusterPane }
        ), this._group = b, this._zoom = E, this._markers = [], this._childClusters = [], this._childCount = 0, this._iconNeedsUpdate = !0, this._boundsNeedUpdate = !0, this._bounds = new L.LatLngBounds(), i && this._addChild(i), O && this._addChild(O);
      },
      //Recursively retrieve all child markers of this cluster
      getAllChildMarkers: function(b, E) {
        b = b || [];
        for (var i = this._childClusters.length - 1; i >= 0; i--)
          this._childClusters[i].getAllChildMarkers(b, E);
        for (var O = this._markers.length - 1; O >= 0; O--)
          E && this._markers[O].__dragStart || b.push(this._markers[O]);
        return b;
      },
      //Returns the count of how many child markers we have
      getChildCount: function() {
        return this._childCount;
      },
      //Zoom to the minimum of showing all of the child markers, or the extents of this cluster
      zoomToBounds: function(b) {
        for (var E = this._childClusters.slice(), i = this._group._map, O = i.getBoundsZoom(this._bounds), j = this._zoom + 1, Y = i.getZoom(), J; E.length > 0 && O > j; ) {
          j++;
          var ae = [];
          for (J = 0; J < E.length; J++)
            ae = ae.concat(E[J]._childClusters);
          E = ae;
        }
        O > j ? this._group._map.setView(this._latlng, j) : O <= Y ? this._group._map.setView(this._latlng, Y + 1) : this._group._map.fitBounds(this._bounds, b);
      },
      getBounds: function() {
        var b = new L.LatLngBounds();
        return b.extend(this._bounds), b;
      },
      _updateIcon: function() {
        this._iconNeedsUpdate = !0, this._icon && this.setIcon(this);
      },
      //Cludge for Icon, we pretend to be an icon for performance
      createIcon: function() {
        return this._iconNeedsUpdate && (this._iconObj = this._group.options.iconCreateFunction(this), this._iconNeedsUpdate = !1), this._iconObj.createIcon();
      },
      createShadow: function() {
        return this._iconObj.createShadow();
      },
      _addChild: function(b, E) {
        this._iconNeedsUpdate = !0, this._boundsNeedUpdate = !0, this._setClusterCenter(b), b instanceof L.MarkerCluster ? (E || (this._childClusters.push(b), b.__parent = this), this._childCount += b._childCount) : (E || this._markers.push(b), this._childCount++), this.__parent && this.__parent._addChild(b, !0);
      },
      /**
       * Makes sure the cluster center is set. If not, uses the child center if it is a cluster, or the marker position.
       * @param child L.MarkerCluster|L.Marker that will be used as cluster center if not defined yet.
       * @private
       */
      _setClusterCenter: function(b) {
        this._cLatLng || (this._cLatLng = b._cLatLng || b._latlng);
      },
      /**
       * Assigns impossible bounding values so that the next extend entirely determines the new bounds.
       * This method avoids having to trash the previous L.LatLngBounds object and to create a new one, which is much slower for this class.
       * As long as the bounds are not extended, most other methods would probably fail, as they would with bounds initialized but not extended.
       * @private
       */
      _resetBounds: function() {
        var b = this._bounds;
        b._southWest && (b._southWest.lat = 1 / 0, b._southWest.lng = 1 / 0), b._northEast && (b._northEast.lat = -1 / 0, b._northEast.lng = -1 / 0);
      },
      _recalculateBounds: function() {
        var b = this._markers, E = this._childClusters, i = 0, O = 0, j = this._childCount, Y, J, ae, ce;
        if (j !== 0) {
          for (this._resetBounds(), Y = 0; Y < b.length; Y++)
            ae = b[Y]._latlng, this._bounds.extend(ae), i += ae.lat, O += ae.lng;
          for (Y = 0; Y < E.length; Y++)
            J = E[Y], J._boundsNeedUpdate && J._recalculateBounds(), this._bounds.extend(J._bounds), ae = J._wLatLng, ce = J._childCount, i += ae.lat * ce, O += ae.lng * ce;
          this._latlng = this._wLatLng = new L.LatLng(i / j, O / j), this._boundsNeedUpdate = !1;
        }
      },
      //Set our markers position as given and add it to the map
      _addToMap: function(b) {
        b && (this._backupLatlng = this._latlng, this.setLatLng(b)), this._group._featureGroup.addLayer(this);
      },
      _recursivelyAnimateChildrenIn: function(b, E, i) {
        this._recursively(
          b,
          this._group._map.getMinZoom(),
          i - 1,
          function(O) {
            var j = O._markers, Y, J;
            for (Y = j.length - 1; Y >= 0; Y--)
              J = j[Y], J._icon && (J._setPos(E), J.clusterHide());
          },
          function(O) {
            var j = O._childClusters, Y, J;
            for (Y = j.length - 1; Y >= 0; Y--)
              J = j[Y], J._icon && (J._setPos(E), J.clusterHide());
          }
        );
      },
      _recursivelyAnimateChildrenInAndAddSelfToMap: function(b, E, i, O) {
        this._recursively(
          b,
          O,
          E,
          function(j) {
            j._recursivelyAnimateChildrenIn(b, j._group._map.latLngToLayerPoint(j.getLatLng()).round(), i), j._isSingleParent() && i - 1 === O ? (j.clusterShow(), j._recursivelyRemoveChildrenFromMap(b, E, i)) : j.clusterHide(), j._addToMap();
          }
        );
      },
      _recursivelyBecomeVisible: function(b, E) {
        this._recursively(b, this._group._map.getMinZoom(), E, null, function(i) {
          i.clusterShow();
        });
      },
      _recursivelyAddChildrenToMap: function(b, E, i) {
        this._recursively(
          i,
          this._group._map.getMinZoom() - 1,
          E,
          function(O) {
            if (E !== O._zoom)
              for (var j = O._markers.length - 1; j >= 0; j--) {
                var Y = O._markers[j];
                i.contains(Y._latlng) && (b && (Y._backupLatlng = Y.getLatLng(), Y.setLatLng(b), Y.clusterHide && Y.clusterHide()), O._group._featureGroup.addLayer(Y));
              }
          },
          function(O) {
            O._addToMap(b);
          }
        );
      },
      _recursivelyRestoreChildPositions: function(b) {
        for (var E = this._markers.length - 1; E >= 0; E--) {
          var i = this._markers[E];
          i._backupLatlng && (i.setLatLng(i._backupLatlng), delete i._backupLatlng);
        }
        if (b - 1 === this._zoom)
          for (var O = this._childClusters.length - 1; O >= 0; O--)
            this._childClusters[O]._restorePosition();
        else
          for (var j = this._childClusters.length - 1; j >= 0; j--)
            this._childClusters[j]._recursivelyRestoreChildPositions(b);
      },
      _restorePosition: function() {
        this._backupLatlng && (this.setLatLng(this._backupLatlng), delete this._backupLatlng);
      },
      //exceptBounds: If set, don't remove any markers/clusters in it
      _recursivelyRemoveChildrenFromMap: function(b, E, i, O) {
        var j, Y;
        this._recursively(
          b,
          E - 1,
          i - 1,
          function(J) {
            for (Y = J._markers.length - 1; Y >= 0; Y--)
              j = J._markers[Y], (!O || !O.contains(j._latlng)) && (J._group._featureGroup.removeLayer(j), j.clusterShow && j.clusterShow());
          },
          function(J) {
            for (Y = J._childClusters.length - 1; Y >= 0; Y--)
              j = J._childClusters[Y], (!O || !O.contains(j._latlng)) && (J._group._featureGroup.removeLayer(j), j.clusterShow && j.clusterShow());
          }
        );
      },
      //Run the given functions recursively to this and child clusters
      // boundsToApplyTo: a L.LatLngBounds representing the bounds of what clusters to recurse in to
      // zoomLevelToStart: zoom level to start running functions (inclusive)
      // zoomLevelToStop: zoom level to stop running functions (inclusive)
      // runAtEveryLevel: function that takes an L.MarkerCluster as an argument that should be applied on every level
      // runAtBottomLevel: function that takes an L.MarkerCluster as an argument that should be applied at only the bottom level
      _recursively: function(b, E, i, O, j) {
        var Y = this._childClusters, J = this._zoom, ae, ce;
        if (E <= J && (O && O(this), j && J === i && j(this)), J < E || J < i)
          for (ae = Y.length - 1; ae >= 0; ae--)
            ce = Y[ae], ce._boundsNeedUpdate && ce._recalculateBounds(), b.intersects(ce._bounds) && ce._recursively(b, E, i, O, j);
      },
      //Returns true if we are the parent of only one cluster and that cluster is the same as us
      _isSingleParent: function() {
        return this._childClusters.length > 0 && this._childClusters[0]._childCount === this._childCount;
      }
    });
    L.Marker.include({
      clusterHide: function() {
        var b = this.options.opacity;
        return this.setOpacity(0), this.options.opacity = b, this;
      },
      clusterShow: function() {
        return this.setOpacity(this.options.opacity);
      }
    }), L.DistanceGrid = function(b) {
      this._cellSize = b, this._sqCellSize = b * b, this._grid = {}, this._objectPoint = {};
    }, L.DistanceGrid.prototype = {
      addObject: function(b, E) {
        var i = this._getCoord(E.x), O = this._getCoord(E.y), j = this._grid, Y = j[O] = j[O] || {}, J = Y[i] = Y[i] || [], ae = L.Util.stamp(b);
        this._objectPoint[ae] = E, J.push(b);
      },
      updateObject: function(b, E) {
        this.removeObject(b), this.addObject(b, E);
      },
      //Returns true if the object was found
      removeObject: function(b, E) {
        var i = this._getCoord(E.x), O = this._getCoord(E.y), j = this._grid, Y = j[O] = j[O] || {}, J = Y[i] = Y[i] || [], ae, ce;
        for (delete this._objectPoint[L.Util.stamp(b)], ae = 0, ce = J.length; ae < ce; ae++)
          if (J[ae] === b)
            return J.splice(ae, 1), ce === 1 && delete Y[i], !0;
      },
      eachObject: function(b, E) {
        var i, O, j, Y, J, ae, ce, Te = this._grid;
        for (i in Te) {
          J = Te[i];
          for (O in J)
            for (ae = J[O], j = 0, Y = ae.length; j < Y; j++)
              ce = b.call(E, ae[j]), ce && (j--, Y--);
        }
      },
      getNearObject: function(b) {
        var E = this._getCoord(b.x), i = this._getCoord(b.y), O, j, Y, J, ae, ce, Te, be, Ze = this._objectPoint, je = this._sqCellSize, ot = null;
        for (O = i - 1; O <= i + 1; O++)
          if (J = this._grid[O], J) {
            for (j = E - 1; j <= E + 1; j++)
              if (ae = J[j], ae)
                for (Y = 0, ce = ae.length; Y < ce; Y++)
                  Te = ae[Y], be = this._sqDist(Ze[L.Util.stamp(Te)], b), (be < je || be <= je && ot === null) && (je = be, ot = Te);
          }
        return ot;
      },
      _getCoord: function(b) {
        var E = Math.floor(b / this._cellSize);
        return isFinite(E) ? E : b;
      },
      _sqDist: function(b, E) {
        var i = E.x - b.x, O = E.y - b.y;
        return i * i + O * O;
      }
    }, function() {
      L.QuickHull = {
        /*
         * @param {Object} cpt a point to be measured from the baseline
         * @param {Array} bl the baseline, as represented by a two-element
         *   array of latlng objects.
         * @returns {Number} an approximate distance measure
         */
        getDistant: function(b, E) {
          var i = E[1].lat - E[0].lat, O = E[0].lng - E[1].lng;
          return O * (b.lat - E[0].lat) + i * (b.lng - E[0].lng);
        },
        /*
         * @param {Array} baseLine a two-element array of latlng objects
         *   representing the baseline to project from
         * @param {Array} latLngs an array of latlng objects
         * @returns {Object} the maximum point and all new points to stay
         *   in consideration for the hull.
         */
        findMostDistantPointFromBaseLine: function(b, E) {
          var i = 0, O = null, j = [], Y, J, ae;
          for (Y = E.length - 1; Y >= 0; Y--) {
            if (J = E[Y], ae = this.getDistant(J, b), ae > 0)
              j.push(J);
            else
              continue;
            ae > i && (i = ae, O = J);
          }
          return { maxPoint: O, newPoints: j };
        },
        /*
         * Given a baseline, compute the convex hull of latLngs as an array
         * of latLngs.
         *
         * @param {Array} latLngs
         * @returns {Array}
         */
        buildConvexHull: function(b, E) {
          var i = [], O = this.findMostDistantPointFromBaseLine(b, E);
          return O.maxPoint ? (i = i.concat(
            this.buildConvexHull([b[0], O.maxPoint], O.newPoints)
          ), i = i.concat(
            this.buildConvexHull([O.maxPoint, b[1]], O.newPoints)
          ), i) : [b[0]];
        },
        /*
         * Given an array of latlngs, compute a convex hull as an array
         * of latlngs
         *
         * @param {Array} latLngs
         * @returns {Array}
         */
        getConvexHull: function(b) {
          var E = !1, i = !1, O = !1, j = !1, Y = null, J = null, ae = null, ce = null, Te = null, be = null, Ze;
          for (Ze = b.length - 1; Ze >= 0; Ze--) {
            var je = b[Ze];
            (E === !1 || je.lat > E) && (Y = je, E = je.lat), (i === !1 || je.lat < i) && (J = je, i = je.lat), (O === !1 || je.lng > O) && (ae = je, O = je.lng), (j === !1 || je.lng < j) && (ce = je, j = je.lng);
          }
          i !== E ? (be = J, Te = Y) : (be = ce, Te = ae);
          var ot = [].concat(
            this.buildConvexHull([be, Te], b),
            this.buildConvexHull([Te, be], b)
          );
          return ot;
        }
      };
    }(), L.MarkerCluster.include({
      getConvexHull: function() {
        var b = this.getAllChildMarkers(), E = [], i, O;
        for (O = b.length - 1; O >= 0; O--)
          i = b[O].getLatLng(), E.push(i);
        return L.QuickHull.getConvexHull(E);
      }
    }), L.MarkerCluster.include({
      _2PI: Math.PI * 2,
      _circleFootSeparation: 25,
      //related to circumference of circle
      _circleStartAngle: 0,
      _spiralFootSeparation: 28,
      //related to size of spiral (experiment!)
      _spiralLengthStart: 11,
      _spiralLengthFactor: 5,
      _circleSpiralSwitchover: 9,
      //show spiral instead of circle from this marker count upwards.
      // 0 -> always spiral; Infinity -> always circle
      spiderfy: function() {
        if (!(this._group._spiderfied === this || this._group._inZoomAnimation)) {
          var b = this.getAllChildMarkers(null, !0), E = this._group, i = E._map, O = i.latLngToLayerPoint(this._latlng), j;
          this._group._unspiderfy(), this._group._spiderfied = this, this._group.options.spiderfyShapePositions ? j = this._group.options.spiderfyShapePositions(b.length, O) : b.length >= this._circleSpiralSwitchover ? j = this._generatePointsSpiral(b.length, O) : (O.y += 10, j = this._generatePointsCircle(b.length, O)), this._animationSpiderfy(b, j);
        }
      },
      unspiderfy: function(b) {
        this._group._inZoomAnimation || (this._animationUnspiderfy(b), this._group._spiderfied = null);
      },
      _generatePointsCircle: function(b, E) {
        var i = this._group.options.spiderfyDistanceMultiplier * this._circleFootSeparation * (2 + b), O = i / this._2PI, j = this._2PI / b, Y = [], J, ae;
        for (O = Math.max(O, 35), Y.length = b, J = 0; J < b; J++)
          ae = this._circleStartAngle + J * j, Y[J] = new L.Point(E.x + O * Math.cos(ae), E.y + O * Math.sin(ae))._round();
        return Y;
      },
      _generatePointsSpiral: function(b, E) {
        var i = this._group.options.spiderfyDistanceMultiplier, O = i * this._spiralLengthStart, j = i * this._spiralFootSeparation, Y = i * this._spiralLengthFactor * this._2PI, J = 0, ae = [], ce;
        for (ae.length = b, ce = b; ce >= 0; ce--)
          ce < b && (ae[ce] = new L.Point(E.x + O * Math.cos(J), E.y + O * Math.sin(J))._round()), J += j / O + ce * 5e-4, O += Y / J;
        return ae;
      },
      _noanimationUnspiderfy: function() {
        var b = this._group, E = b._map, i = b._featureGroup, O = this.getAllChildMarkers(null, !0), j, Y;
        for (b._ignoreMove = !0, this.setOpacity(1), Y = O.length - 1; Y >= 0; Y--)
          j = O[Y], i.removeLayer(j), j._preSpiderfyLatlng && (j.setLatLng(j._preSpiderfyLatlng), delete j._preSpiderfyLatlng), j.setZIndexOffset && j.setZIndexOffset(0), j._spiderLeg && (E.removeLayer(j._spiderLeg), delete j._spiderLeg);
        b.fire("unspiderfied", {
          cluster: this,
          markers: O
        }), b._ignoreMove = !1, b._spiderfied = null;
      }
    }), L.MarkerClusterNonAnimated = L.MarkerCluster.extend({
      _animationSpiderfy: function(b, E) {
        var i = this._group, O = i._map, j = i._featureGroup, Y = this._group.options.spiderLegPolylineOptions, J, ae, ce, Te;
        for (i._ignoreMove = !0, J = 0; J < b.length; J++)
          Te = O.layerPointToLatLng(E[J]), ae = b[J], ce = new L.Polyline([this._latlng, Te], Y), O.addLayer(ce), ae._spiderLeg = ce, ae._preSpiderfyLatlng = ae._latlng, ae.setLatLng(Te), ae.setZIndexOffset && ae.setZIndexOffset(1e6), j.addLayer(ae);
        this.setOpacity(0.3), i._ignoreMove = !1, i.fire("spiderfied", {
          cluster: this,
          markers: b
        });
      },
      _animationUnspiderfy: function() {
        this._noanimationUnspiderfy();
      }
    }), L.MarkerCluster.include({
      _animationSpiderfy: function(b, E) {
        var i = this, O = this._group, j = O._map, Y = O._featureGroup, J = this._latlng, ae = j.latLngToLayerPoint(J), ce = L.Path.SVG, Te = L.extend({}, this._group.options.spiderLegPolylineOptions), be = Te.opacity, Ze, je, ot, vt, ht, gt;
        for (be === void 0 && (be = L.MarkerClusterGroup.prototype.options.spiderLegPolylineOptions.opacity), ce ? (Te.opacity = 0, Te.className = (Te.className || "") + " leaflet-cluster-spider-leg") : Te.opacity = be, O._ignoreMove = !0, Ze = 0; Ze < b.length; Ze++)
          je = b[Ze], gt = j.layerPointToLatLng(E[Ze]), ot = new L.Polyline([J, gt], Te), j.addLayer(ot), je._spiderLeg = ot, ce && (vt = ot._path, ht = vt.getTotalLength() + 0.1, vt.style.strokeDasharray = ht, vt.style.strokeDashoffset = ht), je.setZIndexOffset && je.setZIndexOffset(1e6), je.clusterHide && je.clusterHide(), Y.addLayer(je), je._setPos && je._setPos(ae);
        for (O._forceLayout(), O._animationStart(), Ze = b.length - 1; Ze >= 0; Ze--)
          gt = j.layerPointToLatLng(E[Ze]), je = b[Ze], je._preSpiderfyLatlng = je._latlng, je.setLatLng(gt), je.clusterShow && je.clusterShow(), ce && (ot = je._spiderLeg, vt = ot._path, vt.style.strokeDashoffset = 0, ot.setStyle({ opacity: be }));
        this.setOpacity(0.3), O._ignoreMove = !1, setTimeout(function() {
          O._animationEnd(), O.fire("spiderfied", {
            cluster: i,
            markers: b
          });
        }, 200);
      },
      _animationUnspiderfy: function(b) {
        var E = this, i = this._group, O = i._map, j = i._featureGroup, Y = b ? O._latLngToNewLayerPoint(this._latlng, b.zoom, b.center) : O.latLngToLayerPoint(this._latlng), J = this.getAllChildMarkers(null, !0), ae = L.Path.SVG, ce, Te, be, Ze, je, ot;
        for (i._ignoreMove = !0, i._animationStart(), this.setOpacity(1), Te = J.length - 1; Te >= 0; Te--)
          ce = J[Te], ce._preSpiderfyLatlng && (ce.closePopup(), ce.setLatLng(ce._preSpiderfyLatlng), delete ce._preSpiderfyLatlng, ot = !0, ce._setPos && (ce._setPos(Y), ot = !1), ce.clusterHide && (ce.clusterHide(), ot = !1), ot && j.removeLayer(ce), ae && (be = ce._spiderLeg, Ze = be._path, je = Ze.getTotalLength() + 0.1, Ze.style.strokeDashoffset = je, be.setStyle({ opacity: 0 })));
        i._ignoreMove = !1, setTimeout(function() {
          var vt = 0;
          for (Te = J.length - 1; Te >= 0; Te--)
            ce = J[Te], ce._spiderLeg && vt++;
          for (Te = J.length - 1; Te >= 0; Te--)
            ce = J[Te], ce._spiderLeg && (ce.clusterShow && ce.clusterShow(), ce.setZIndexOffset && ce.setZIndexOffset(0), vt > 1 && j.removeLayer(ce), O.removeLayer(ce._spiderLeg), delete ce._spiderLeg);
          i._animationEnd(), i.fire("unspiderfied", {
            cluster: E,
            markers: J
          });
        }, 200);
      }
    }), L.MarkerClusterGroup.include({
      //The MarkerCluster currently spiderfied (if any)
      _spiderfied: null,
      unspiderfy: function() {
        this._unspiderfy.apply(this, arguments);
      },
      _spiderfierOnAdd: function() {
        this._map.on("click", this._unspiderfyWrapper, this), this._map.options.zoomAnimation && this._map.on("zoomstart", this._unspiderfyZoomStart, this), this._map.on("zoomend", this._noanimationUnspiderfy, this), L.Browser.touch || this._map.getRenderer(this);
      },
      _spiderfierOnRemove: function() {
        this._map.off("click", this._unspiderfyWrapper, this), this._map.off("zoomstart", this._unspiderfyZoomStart, this), this._map.off("zoomanim", this._unspiderfyZoomAnim, this), this._map.off("zoomend", this._noanimationUnspiderfy, this), this._noanimationUnspiderfy();
      },
      //On zoom start we add a zoomanim handler so that we are guaranteed to be last (after markers are animated)
      //This means we can define the animation they do rather than Markers doing an animation to their actual location
      _unspiderfyZoomStart: function() {
        this._map && this._map.on("zoomanim", this._unspiderfyZoomAnim, this);
      },
      _unspiderfyZoomAnim: function(b) {
        L.DomUtil.hasClass(this._map._mapPane, "leaflet-touching") || (this._map.off("zoomanim", this._unspiderfyZoomAnim, this), this._unspiderfy(b));
      },
      _unspiderfyWrapper: function() {
        this._unspiderfy();
      },
      _unspiderfy: function(b) {
        this._spiderfied && this._spiderfied.unspiderfy(b);
      },
      _noanimationUnspiderfy: function() {
        this._spiderfied && this._spiderfied._noanimationUnspiderfy();
      },
      //If the given layer is currently being spiderfied then we unspiderfy it so it isn't on the map anymore etc
      _unspiderfyLayer: function(b) {
        b._spiderLeg && (this._featureGroup.removeLayer(b), b.clusterShow && b.clusterShow(), b.setZIndexOffset && b.setZIndexOffset(0), this._map.removeLayer(b._spiderLeg), delete b._spiderLeg);
      }
    }), L.MarkerClusterGroup.include({
      /**
       * Updates the icon of all clusters which are parents of the given marker(s).
       * In singleMarkerMode, also updates the given marker(s) icon.
       * @param layers L.MarkerClusterGroup|L.LayerGroup|Array(L.Marker)|Map(L.Marker)|
       * L.MarkerCluster|L.Marker (optional) list of markers (or single marker) whose parent
       * clusters need to be updated. If not provided, retrieves all child markers of this.
       * @returns {L.MarkerClusterGroup}
       */
      refreshClusters: function(b) {
        return b ? b instanceof L.MarkerClusterGroup ? b = b._topClusterLevel.getAllChildMarkers() : b instanceof L.LayerGroup ? b = b._layers : b instanceof L.MarkerCluster ? b = b.getAllChildMarkers() : b instanceof L.Marker && (b = [b]) : b = this._topClusterLevel.getAllChildMarkers(), this._flagParentsIconsNeedUpdate(b), this._refreshClustersIcons(), this.options.singleMarkerMode && this._refreshSingleMarkerModeMarkers(b), this;
      },
      /**
       * Simply flags all parent clusters of the given markers as having a "dirty" icon.
       * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
       * @private
       */
      _flagParentsIconsNeedUpdate: function(b) {
        var E, i;
        for (E in b)
          for (i = b[E].__parent; i; )
            i._iconNeedsUpdate = !0, i = i.__parent;
      },
      /**
       * Re-draws the icon of the supplied markers.
       * To be used in singleMarkerMode only.
       * @param layers Array(L.Marker)|Map(L.Marker) list of markers.
       * @private
       */
      _refreshSingleMarkerModeMarkers: function(b) {
        var E, i;
        for (E in b)
          i = b[E], this.hasLayer(i) && i.setIcon(this._overrideMarkerIcon(i));
      }
    }), L.Marker.include({
      /**
       * Updates the given options in the marker's icon and refreshes the marker.
       * @param options map object of icon options.
       * @param directlyRefreshClusters boolean (optional) true to trigger
       * MCG.refreshClustersOf() right away with this single marker.
       * @returns {L.Marker}
       */
      refreshIconOptions: function(b, E) {
        var i = this.options.icon;
        return L.setOptions(i, b), this.setIcon(i), E && this.__parent && this.__parent._group.refreshClusters(this), this;
      }
    }), d.MarkerClusterGroup = g, d.MarkerCluster = w, Object.defineProperty(d, "__esModule", { value: !0 });
  });
})(gb, gb.exports);
class CC {
  constructor() {
    this.Bounds = [], this.lng = null, this.map = null, this.EventSelectChart = null, this.Polylines = [], this.CurrentPositionMarker = null, this.CurrentGPSPositionMarker = null;
  }
  init(a, d, g, w, b) {
    this.map = wn.map(
      a,
      {
        scrollWheelZoom: g
      }
    );
    var E = new wn.Control.FullScreen();
    this.map.addControl(E), wn.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", {
      attribution: 'Data &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(this.map);
    var i = (w + "").length > 0, O = {}, j = {};
    switch (i ? O["Thunderforest - Cycle"] = wn.tileLayer("https://a.tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=" + w, {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.thunderforest.com/">Thunderforest</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }) : O["Open Cycle Map"] = wn.tileLayer("http://a.tile.opencyclemap.org/cycle/{z}/{x}/{y}.png", {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.thunderforest.com/">Thunderforest</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Thunderforest - Outdoors"] = wn.tileLayer("https://a.tile.thunderforest.com/outddors/{z}/{x}/{y}.png?apikey=" + w, {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.thunderforest.com/">Thunderforest</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Thunderforest - Transport"] = wn.tileLayer("https://a.tile.thunderforest.com/transport/{z}/{x}/{y}.png?apikey=" + w, {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.thunderforest.com/">Thunderforest</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Thunderforest - Landscape"] = wn.tileLayer("https://a.tile.thunderforest.com/landscape/{z}/{x}/{y}.png?apikey=" + w, {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.thunderforest.com/">Thunderforest</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Open Street Map"] = wn.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Humanitarian Map Style"] = wn.tileLayer("https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png", {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Hike & Bike"] = wn.tileLayer("http://toolserver.org/tiles/hikebike/{z}/{x}/{y}.png", {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://hikebikemap.org/">Hike & Bike Map</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["Open Sea Map"] = wn.tileLayer("http://tiles.openseamap.org/seamark/{z}/{x}/{y}.png", {
      maxZoom: 18,
      attribution: 'Maps &copy; <a href="https://www.openseamap.org/">OpenSeaMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), O["GSI Map (Japan)"] = wn.tileLayer("https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png", {
      maxZoom: 18,
      attribution: '&copy; <a href="https://maps.gsi.go.jp/development/ichiran.html" target="_blank">国土地理院</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>'
    }), d) {
      case "OSM1": {
        O["Open Street Map"].addTo(this.map);
        break;
      }
      case "OSM2": {
        O["Thunderforest - Cycle"].addTo(this.map);
        break;
      }
      case "OSM3": {
        O["Thunderforest - Outdoors"].addTo(this.map);
        break;
      }
      case "OSM4": {
        O["Thunderforest - Transport"].addTo(this.map);
        break;
      }
      case "OSM5": {
        O["Thunderforest - Landscape"].addTo(this.map);
        break;
      }
      case "OSM7": {
        O["Humanitarian Map Style"].addTo(this.map);
        break;
      }
      case "OSM9": {
        O["Hike & Bike"].addTo(this.map);
        break;
      }
      case "OSM10": {
        O["Open Sea Map"].addTo(this.map);
        break;
      }
      case "OSM11": {
        O["GSI Map (Japan)"].addTo(this.map);
        break;
      }
      default:
        O["Open Street Map"].addTo(this.map);
    }
    wn.control.layers(O, j).addTo(this.map);
  }
  AppPolylines(a, d, g, w, b) {
    var Y;
    if (this.map != null) {
      var E = Zm.Utils.GetItemFromArray(a, 0);
      if (E != null) {
        (g == "" || g == null) && (g = "https://maps.google.com/mapfiles/kml/pal4/icon25.png");
        var i = wn.marker(wn.latLng(E), {
          icon: wn.icon({
            iconUrl: g,
            iconSize: [32, 32],
            // Size of the icon.
            iconAnchor: [16, 16]
            // Point of the icon which will correspond to marker's location.
          }),
          title: (Y = this.lng) == null ? void 0 : Y.currentPosition
        });
        i.addTo(this.map), this.CurrentPositionMarker = i;
        var O = Zm.Utils.DividePolylinesPoints(a);
        this.lng, this.EventSelectChart, this.Bounds = a.filter((J) => J != null), this.CenterMap();
        for (let J = 0; J < O.length; J++) {
          let ae = "";
          J < d.length ? ae = d[J] : ae = d[d.length - 1];
          try {
            let ce = wn.polyline(O[J], { color: ae }).addTo(this.map);
            this.Polylines.push(ce);
            let Te = this;
            this.Polylines[J].on("mousemove", function(be) {
              Te.MoveMarkerToPosition([be.latlng.lat, be.latlng.lng], !0);
            });
          } catch {
          }
        }
        if (w != "") {
          let J = a[0];
          J != null && wn.marker(wn.latLng(J), {
            icon: wn.icon({
              iconUrl: w + "",
              iconSize: [32, 32],
              // Size of the icon.
              iconAnchor: [16, 16]
              // Point of the icon which will correspond to marker's location.
            }),
            title: "Start"
          }).addTo(this.map);
        }
        if (b != "" && a[a.length - 1] != null) {
          let J = a[a.length - 1];
          if (J != null) {
            var j = wn.marker(wn.latLng(J), {
              icon: wn.icon({
                iconUrl: b + "",
                iconSize: [32, 32],
                // size of the icon
                iconAnchor: [16, 16]
                // point of the icon which will correspond to marker's location
              }),
              title: "End"
            });
            j.addTo(this.map);
          }
        }
      }
    }
  }
  SetCurrentGPSPosition(a, d, g) {
    this.CurrentGPSPositionMarker == null ? (d == "" && (d = "https://maps.google.com/mapfiles/kml/pal4/icon25.png"), this.map != null && (this.CurrentGPSPositionMarker = wn.marker(a, {
      icon: wn.icon({
        iconUrl: d,
        iconSize: [32, 32],
        // Size of the icon.
        iconAnchor: [16, 16]
        // Point of the icon which will correspond to marker's location.
      })
    }).addTo(this.map).bindPopup(g.currentPosition).openPopup())) : this.CurrentGPSPositionMarker.setLatLng(a), this.Bounds.push(a), this.CenterMap();
  }
  AddWaypoints(a, d) {
    var g = wn.icon({
      iconUrl: "https://maps.google.com/mapfiles/ms/micons/flag.png",
      iconSize: [32, 32],
      // Size of the icon.
      iconAnchor: [16, 16]
      // Point of the icon which will correspond to marker's location.
    });
    d != "" && (g = wn.icon({
      iconUrl: "waypointIcon",
      iconSize: [32, 32],
      // Size of the icon.
      iconAnchor: [16, 16]
      // Point of the icon which will correspond to marker's location.
    }));
    for (let j = 0; j < a.length; j++) {
      var w = a[j];
      this.Bounds.push([w.lat, w.lon]);
      var b = w.lat, E = w.lon;
      w.sym, w.type, w.img && (g.iconUrl = w.img + "");
      var i = wn.marker([b, E], { icon: g }), O = "";
      w.name == "" ? O = "<div>" + unescape(w.desc) + "</div>" : O = "<div><b>" + w.name + "</b><br />" + unescape(w.desc) + "</div>", O += "<br /><p><a href='https://maps.google.com?daddr=" + b + "," + E + "' target='_blank'>Itin&eacute;raire</a></p>", this.map != null && i.addTo(this.map).bindPopup(O);
    }
    this.CenterMap();
  }
  MoveMarkerToPosition(a, d) {
    this.CurrentPositionMarker != null && (this.CurrentPositionMarker.setLatLng(a), this.lng && this.CurrentPositionMarker.setTooltipContent(this.lng.currentPosition), d == !0 && this.EventSelectChart && this.EventSelectChart(a));
  }
  CenterMap() {
    var g;
    try {
      if (this.Bounds && this.Bounds.length > 0) {
        let w = {
          minLat: Number.POSITIVE_INFINITY,
          maxLat: Number.NEGATIVE_INFINITY,
          minLng: Number.POSITIVE_INFINITY,
          maxLng: Number.NEGATIVE_INFINITY
        };
        this.Bounds.forEach((b) => {
          if (!Array.isArray(b) || b.length !== 2)
            throw new Error("Each coordinate must be an array with [latitude, longitude].");
          const [E, i] = b;
          w.minLat = Math.min(w.minLat, E), w.maxLat = Math.max(w.maxLat, E), w.minLng = Math.min(w.minLng, i), w.maxLng = Math.max(w.maxLng, i);
        });
        var a = new wn.LatLng(w.minLat, w.minLng), d = new wn.LatLng(w.maxLat, w.maxLng);
        (g = this.map) == null || g.fitBounds(new wn.LatLngBounds(a, d));
      }
    } catch (w) {
      console.log(w);
    }
  }
  AddPhotos(a) {
    for (const d of a) {
      let g = wn.marker(d, {
        icon: wn.divIcon(
          wn.extend(
            {
              html: '<div style="background-image: url(' + d.thumbnail + ');"></div>',
              className: "leaflet-marker-photo"
            },
            d,
            {
              iconSize: [40, 40]
            }
          )
        ),
        title: d.caption || ""
      });
      g.bindPopup('<img src="' + d.url + '" /></a><p>' + d.name + "</p>", { minWidth: 500 }), g.addTo(this.map);
    }
  }
}
var xw = {};
Object.defineProperty(xw, "__esModule", { value: !0 });
class Ju {
  constructor(a, d) {
    this.styles = a || Ju.DEFAULT_STYLES;
    const g = typeof d == "string" ? d : d ? d.defaultStyle : void 0;
    this.defaultStyle = g || Ju.DEFAULT_STYLE, this.onDocumentClick = this.onDocumentClick.bind(this), this.events = typeof d != "string" && d ? d.eventListeners : void 0;
  }
  getDefaultPosition() {
    return "top-right";
  }
  onAdd(a) {
    this.map = a, this.controlContainer = document.createElement("div"), this.controlContainer.classList.add("mapboxgl-ctrl"), this.controlContainer.classList.add("mapboxgl-ctrl-group"), this.mapStyleContainer = document.createElement("div"), this.styleButton = document.createElement("button"), this.styleButton.type = "button", this.mapStyleContainer.classList.add("mapboxgl-style-list");
    for (const d of this.styles) {
      const g = document.createElement("button");
      g.type = "button", g.innerText = d.title, g.classList.add(d.title.replace(/[^a-z0-9-]/gi, "_")), g.dataset.uri = JSON.stringify(d.uri), g.addEventListener("click", (w) => {
        const b = w.srcElement;
        if (this.closeModal(), b.classList.contains("active") || this.events && this.events.onOpen && this.events.onOpen(w))
          return;
        const E = JSON.parse(b.dataset.uri);
        this.map.setStyle(E);
        const i = this.mapStyleContainer.getElementsByClassName("active");
        for (; i[0]; )
          i[0].classList.remove("active");
        b.classList.add("active"), this.events && this.events.onChange && this.events.onChange(w, E);
      }), d.title === this.defaultStyle && g.classList.add("active"), this.mapStyleContainer.appendChild(g);
    }
    return this.styleButton.classList.add("mapboxgl-ctrl-icon"), this.styleButton.classList.add("mapboxgl-style-switcher"), this.styleButton.addEventListener("click", (d) => {
      this.events && this.events.onSelect && this.events.onSelect(d) || this.openModal();
    }), document.addEventListener("click", this.onDocumentClick), this.controlContainer.appendChild(this.styleButton), this.controlContainer.appendChild(this.mapStyleContainer), this.controlContainer;
  }
  onRemove() {
    !this.controlContainer || !this.controlContainer.parentNode || !this.map || !this.styleButton || (this.styleButton.removeEventListener("click", this.onDocumentClick), this.controlContainer.parentNode.removeChild(this.controlContainer), document.removeEventListener("click", this.onDocumentClick), this.map = void 0);
  }
  closeModal() {
    this.mapStyleContainer && this.styleButton && (this.mapStyleContainer.style.display = "none", this.styleButton.style.display = "block");
  }
  openModal() {
    this.mapStyleContainer && this.styleButton && (this.mapStyleContainer.style.display = "block", this.styleButton.style.display = "none");
  }
  onDocumentClick(a) {
    this.controlContainer && !this.controlContainer.contains(a.target) && this.closeModal();
  }
}
Ju.DEFAULT_STYLE = "Streets";
Ju.DEFAULT_STYLES = [
  { title: "Dark", uri: "mapbox://styles/mapbox/dark-v10" },
  { title: "Light", uri: "mapbox://styles/mapbox/light-v10" },
  { title: "Outdoors", uri: "mapbox://styles/mapbox/outdoors-v11" },
  { title: "Satellite", uri: "mapbox://styles/mapbox/satellite-streets-v11" },
  { title: "Streets", uri: "mapbox://styles/mapbox/streets-v11" }
];
var IC = xw.MapboxStyleSwitcherControl = Ju, vw = { exports: {} };
(function(m, a) {
  (function(d, g) {
    m.exports = g();
  })(Km, function() {
    var d, g, w;
    function b(i, O) {
      if (!d)
        d = O;
      else if (!g)
        g = O;
      else {
        var j = "self.onerror = function() { console.error('An error occurred while parsing the WebWorker bundle. This is most likely due to improper transpilation by Babel; please see https://docs.mapbox.com/mapbox-gl-js/guides/install/#transpiling'); }; var sharedChunk = {}; (" + d + ")(sharedChunk); (" + g + ")(sharedChunk); self.onerror = null;", Y = {};
        d(Y), w = O(Y), typeof window < "u" && window && window.URL && window.URL.createObjectURL && (w.workerUrl = window.URL.createObjectURL(new Blob([j], { type: "text/javascript" })));
      }
    }
    b(["exports"], function(i) {
      function O(r) {
        return r && r.__esModule && Object.prototype.hasOwnProperty.call(r, "default") ? r.default : r;
      }
      var j, Y = {}, J = {};
      function ae() {
        if (j)
          return J;
        j = 1, Object.defineProperty(J, "__esModule", { value: !0 }), J.setMatrixArrayType = function(u) {
          J.ARRAY_TYPE = e = u;
        }, J.toRadian = function(u) {
          return u * o;
        }, J.equals = function(u, l) {
          return Math.abs(u - l) <= r * Math.max(1, Math.abs(u), Math.abs(l));
        }, J.RANDOM = J.ARRAY_TYPE = J.EPSILON = void 0;
        var r = 1e-6;
        J.EPSILON = r;
        var e = typeof Float32Array < "u" ? Float32Array : Array;
        J.ARRAY_TYPE = e;
        var n = Math.random;
        J.RANDOM = n;
        var o = Math.PI / 180;
        return Math.hypot || (Math.hypot = function() {
          for (var u = 0, l = arguments.length; l--; )
            u += arguments[l] * arguments[l];
          return Math.sqrt(u);
        }), J;
      }
      var ce, Te = {};
      function be() {
        if (ce)
          return Te;
        function r(l) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(f) {
            return typeof f;
          } : function(f) {
            return f && typeof Symbol == "function" && f.constructor === Symbol && f !== Symbol.prototype ? "symbol" : typeof f;
          }, r(l);
        }
        ce = 1, Object.defineProperty(Te, "__esModule", { value: !0 }), Te.create = function() {
          var l = new e.ARRAY_TYPE(4);
          return e.ARRAY_TYPE != Float32Array && (l[1] = 0, l[2] = 0), l[0] = 1, l[3] = 1, l;
        }, Te.clone = function(l) {
          var f = new e.ARRAY_TYPE(4);
          return f[0] = l[0], f[1] = l[1], f[2] = l[2], f[3] = l[3], f;
        }, Te.copy = function(l, f) {
          return l[0] = f[0], l[1] = f[1], l[2] = f[2], l[3] = f[3], l;
        }, Te.identity = function(l) {
          return l[0] = 1, l[1] = 0, l[2] = 0, l[3] = 1, l;
        }, Te.fromValues = function(l, f, v, S) {
          var D = new e.ARRAY_TYPE(4);
          return D[0] = l, D[1] = f, D[2] = v, D[3] = S, D;
        }, Te.set = function(l, f, v, S, D) {
          return l[0] = f, l[1] = v, l[2] = S, l[3] = D, l;
        }, Te.transpose = function(l, f) {
          if (l === f) {
            var v = f[1];
            l[1] = f[2], l[2] = v;
          } else
            l[0] = f[0], l[1] = f[2], l[2] = f[1], l[3] = f[3];
          return l;
        }, Te.invert = function(l, f) {
          var v = f[0], S = f[1], D = f[2], x = f[3], P = v * x - D * S;
          return P ? (l[0] = x * (P = 1 / P), l[1] = -S * P, l[2] = -D * P, l[3] = v * P, l) : null;
        }, Te.adjoint = function(l, f) {
          var v = f[0];
          return l[0] = f[3], l[1] = -f[1], l[2] = -f[2], l[3] = v, l;
        }, Te.determinant = function(l) {
          return l[0] * l[3] - l[2] * l[1];
        }, Te.multiply = o, Te.rotate = function(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = Math.sin(v), M = Math.cos(v);
          return l[0] = S * M + x * I, l[1] = D * M + P * I, l[2] = S * -I + x * M, l[3] = D * -I + P * M, l;
        }, Te.scale = function(l, f, v) {
          var S = f[1], D = f[2], x = f[3], P = v[0], I = v[1];
          return l[0] = f[0] * P, l[1] = S * P, l[2] = D * I, l[3] = x * I, l;
        }, Te.fromRotation = function(l, f) {
          var v = Math.sin(f), S = Math.cos(f);
          return l[0] = S, l[1] = v, l[2] = -v, l[3] = S, l;
        }, Te.fromScaling = function(l, f) {
          return l[0] = f[0], l[1] = 0, l[2] = 0, l[3] = f[1], l;
        }, Te.str = function(l) {
          return "mat2(" + l[0] + ", " + l[1] + ", " + l[2] + ", " + l[3] + ")";
        }, Te.frob = function(l) {
          return Math.hypot(l[0], l[1], l[2], l[3]);
        }, Te.LDU = function(l, f, v, S) {
          return l[2] = S[2] / S[0], v[0] = S[0], v[1] = S[1], v[3] = S[3] - l[2] * v[1], [l, f, v];
        }, Te.add = function(l, f, v) {
          return l[0] = f[0] + v[0], l[1] = f[1] + v[1], l[2] = f[2] + v[2], l[3] = f[3] + v[3], l;
        }, Te.subtract = u, Te.exactEquals = function(l, f) {
          return l[0] === f[0] && l[1] === f[1] && l[2] === f[2] && l[3] === f[3];
        }, Te.equals = function(l, f) {
          var v = l[0], S = l[1], D = l[2], x = l[3], P = f[0], I = f[1], M = f[2], C = f[3];
          return Math.abs(v - P) <= e.EPSILON * Math.max(1, Math.abs(v), Math.abs(P)) && Math.abs(S - I) <= e.EPSILON * Math.max(1, Math.abs(S), Math.abs(I)) && Math.abs(D - M) <= e.EPSILON * Math.max(1, Math.abs(D), Math.abs(M)) && Math.abs(x - C) <= e.EPSILON * Math.max(1, Math.abs(x), Math.abs(C));
        }, Te.multiplyScalar = function(l, f, v) {
          return l[0] = f[0] * v, l[1] = f[1] * v, l[2] = f[2] * v, l[3] = f[3] * v, l;
        }, Te.multiplyScalarAndAdd = function(l, f, v, S) {
          return l[0] = f[0] + v[0] * S, l[1] = f[1] + v[1] * S, l[2] = f[2] + v[2] * S, l[3] = f[3] + v[3] * S, l;
        }, Te.sub = Te.mul = void 0;
        var e = function(l, f) {
          if (l && l.__esModule)
            return l;
          if (l === null || r(l) !== "object" && typeof l != "function")
            return { default: l };
          var v = n(void 0);
          if (v && v.has(l))
            return v.get(l);
          var S = {}, D = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var x in l)
            if (x !== "default" && Object.prototype.hasOwnProperty.call(l, x)) {
              var P = D ? Object.getOwnPropertyDescriptor(l, x) : null;
              P && (P.get || P.set) ? Object.defineProperty(S, x, P) : S[x] = l[x];
            }
          return S.default = l, v && v.set(l, S), S;
        }(ae());
        function n(l) {
          if (typeof WeakMap != "function")
            return null;
          var f = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap();
          return (n = function(S) {
            return S ? v : f;
          })(l);
        }
        function o(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = v[0], M = v[1], C = v[2], k = v[3];
          return l[0] = S * I + x * M, l[1] = D * I + P * M, l[2] = S * C + x * k, l[3] = D * C + P * k, l;
        }
        function u(l, f, v) {
          return l[0] = f[0] - v[0], l[1] = f[1] - v[1], l[2] = f[2] - v[2], l[3] = f[3] - v[3], l;
        }
        return Te.mul = o, Te.sub = u, Te;
      }
      var Ze, je = {};
      function ot() {
        if (Ze)
          return je;
        function r(l) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(f) {
            return typeof f;
          } : function(f) {
            return f && typeof Symbol == "function" && f.constructor === Symbol && f !== Symbol.prototype ? "symbol" : typeof f;
          }, r(l);
        }
        Ze = 1, Object.defineProperty(je, "__esModule", { value: !0 }), je.create = function() {
          var l = new e.ARRAY_TYPE(6);
          return e.ARRAY_TYPE != Float32Array && (l[1] = 0, l[2] = 0, l[4] = 0, l[5] = 0), l[0] = 1, l[3] = 1, l;
        }, je.clone = function(l) {
          var f = new e.ARRAY_TYPE(6);
          return f[0] = l[0], f[1] = l[1], f[2] = l[2], f[3] = l[3], f[4] = l[4], f[5] = l[5], f;
        }, je.copy = function(l, f) {
          return l[0] = f[0], l[1] = f[1], l[2] = f[2], l[3] = f[3], l[4] = f[4], l[5] = f[5], l;
        }, je.identity = function(l) {
          return l[0] = 1, l[1] = 0, l[2] = 0, l[3] = 1, l[4] = 0, l[5] = 0, l;
        }, je.fromValues = function(l, f, v, S, D, x) {
          var P = new e.ARRAY_TYPE(6);
          return P[0] = l, P[1] = f, P[2] = v, P[3] = S, P[4] = D, P[5] = x, P;
        }, je.set = function(l, f, v, S, D, x, P) {
          return l[0] = f, l[1] = v, l[2] = S, l[3] = D, l[4] = x, l[5] = P, l;
        }, je.invert = function(l, f) {
          var v = f[0], S = f[1], D = f[2], x = f[3], P = f[4], I = f[5], M = v * x - S * D;
          return M ? (l[0] = x * (M = 1 / M), l[1] = -S * M, l[2] = -D * M, l[3] = v * M, l[4] = (D * I - x * P) * M, l[5] = (S * P - v * I) * M, l) : null;
        }, je.determinant = function(l) {
          return l[0] * l[3] - l[1] * l[2];
        }, je.multiply = o, je.rotate = function(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = f[4], M = f[5], C = Math.sin(v), k = Math.cos(v);
          return l[0] = S * k + x * C, l[1] = D * k + P * C, l[2] = S * -C + x * k, l[3] = D * -C + P * k, l[4] = I, l[5] = M, l;
        }, je.scale = function(l, f, v) {
          var S = f[1], D = f[2], x = f[3], P = f[4], I = f[5], M = v[0], C = v[1];
          return l[0] = f[0] * M, l[1] = S * M, l[2] = D * C, l[3] = x * C, l[4] = P, l[5] = I, l;
        }, je.translate = function(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = f[4], M = f[5], C = v[0], k = v[1];
          return l[0] = S, l[1] = D, l[2] = x, l[3] = P, l[4] = S * C + x * k + I, l[5] = D * C + P * k + M, l;
        }, je.fromRotation = function(l, f) {
          var v = Math.sin(f), S = Math.cos(f);
          return l[0] = S, l[1] = v, l[2] = -v, l[3] = S, l[4] = 0, l[5] = 0, l;
        }, je.fromScaling = function(l, f) {
          return l[0] = f[0], l[1] = 0, l[2] = 0, l[3] = f[1], l[4] = 0, l[5] = 0, l;
        }, je.fromTranslation = function(l, f) {
          return l[0] = 1, l[1] = 0, l[2] = 0, l[3] = 1, l[4] = f[0], l[5] = f[1], l;
        }, je.str = function(l) {
          return "mat2d(" + l[0] + ", " + l[1] + ", " + l[2] + ", " + l[3] + ", " + l[4] + ", " + l[5] + ")";
        }, je.frob = function(l) {
          return Math.hypot(l[0], l[1], l[2], l[3], l[4], l[5], 1);
        }, je.add = function(l, f, v) {
          return l[0] = f[0] + v[0], l[1] = f[1] + v[1], l[2] = f[2] + v[2], l[3] = f[3] + v[3], l[4] = f[4] + v[4], l[5] = f[5] + v[5], l;
        }, je.subtract = u, je.multiplyScalar = function(l, f, v) {
          return l[0] = f[0] * v, l[1] = f[1] * v, l[2] = f[2] * v, l[3] = f[3] * v, l[4] = f[4] * v, l[5] = f[5] * v, l;
        }, je.multiplyScalarAndAdd = function(l, f, v, S) {
          return l[0] = f[0] + v[0] * S, l[1] = f[1] + v[1] * S, l[2] = f[2] + v[2] * S, l[3] = f[3] + v[3] * S, l[4] = f[4] + v[4] * S, l[5] = f[5] + v[5] * S, l;
        }, je.exactEquals = function(l, f) {
          return l[0] === f[0] && l[1] === f[1] && l[2] === f[2] && l[3] === f[3] && l[4] === f[4] && l[5] === f[5];
        }, je.equals = function(l, f) {
          var v = l[0], S = l[1], D = l[2], x = l[3], P = l[4], I = l[5], M = f[0], C = f[1], k = f[2], V = f[3], U = f[4], q = f[5];
          return Math.abs(v - M) <= e.EPSILON * Math.max(1, Math.abs(v), Math.abs(M)) && Math.abs(S - C) <= e.EPSILON * Math.max(1, Math.abs(S), Math.abs(C)) && Math.abs(D - k) <= e.EPSILON * Math.max(1, Math.abs(D), Math.abs(k)) && Math.abs(x - V) <= e.EPSILON * Math.max(1, Math.abs(x), Math.abs(V)) && Math.abs(P - U) <= e.EPSILON * Math.max(1, Math.abs(P), Math.abs(U)) && Math.abs(I - q) <= e.EPSILON * Math.max(1, Math.abs(I), Math.abs(q));
        }, je.sub = je.mul = void 0;
        var e = function(l, f) {
          if (l && l.__esModule)
            return l;
          if (l === null || r(l) !== "object" && typeof l != "function")
            return { default: l };
          var v = n(void 0);
          if (v && v.has(l))
            return v.get(l);
          var S = {}, D = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var x in l)
            if (x !== "default" && Object.prototype.hasOwnProperty.call(l, x)) {
              var P = D ? Object.getOwnPropertyDescriptor(l, x) : null;
              P && (P.get || P.set) ? Object.defineProperty(S, x, P) : S[x] = l[x];
            }
          return S.default = l, v && v.set(l, S), S;
        }(ae());
        function n(l) {
          if (typeof WeakMap != "function")
            return null;
          var f = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap();
          return (n = function(S) {
            return S ? v : f;
          })(l);
        }
        function o(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = f[4], M = f[5], C = v[0], k = v[1], V = v[2], U = v[3], q = v[4], $ = v[5];
          return l[0] = S * C + x * k, l[1] = D * C + P * k, l[2] = S * V + x * U, l[3] = D * V + P * U, l[4] = S * q + x * $ + I, l[5] = D * q + P * $ + M, l;
        }
        function u(l, f, v) {
          return l[0] = f[0] - v[0], l[1] = f[1] - v[1], l[2] = f[2] - v[2], l[3] = f[3] - v[3], l[4] = f[4] - v[4], l[5] = f[5] - v[5], l;
        }
        return je.mul = o, je.sub = u, je;
      }
      var vt, ht = {};
      function gt() {
        if (vt)
          return ht;
        function r(l) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(f) {
            return typeof f;
          } : function(f) {
            return f && typeof Symbol == "function" && f.constructor === Symbol && f !== Symbol.prototype ? "symbol" : typeof f;
          }, r(l);
        }
        vt = 1, Object.defineProperty(ht, "__esModule", { value: !0 }), ht.create = function() {
          var l = new e.ARRAY_TYPE(9);
          return e.ARRAY_TYPE != Float32Array && (l[1] = 0, l[2] = 0, l[3] = 0, l[5] = 0, l[6] = 0, l[7] = 0), l[0] = 1, l[4] = 1, l[8] = 1, l;
        }, ht.fromMat4 = function(l, f) {
          return l[0] = f[0], l[1] = f[1], l[2] = f[2], l[3] = f[4], l[4] = f[5], l[5] = f[6], l[6] = f[8], l[7] = f[9], l[8] = f[10], l;
        }, ht.clone = function(l) {
          var f = new e.ARRAY_TYPE(9);
          return f[0] = l[0], f[1] = l[1], f[2] = l[2], f[3] = l[3], f[4] = l[4], f[5] = l[5], f[6] = l[6], f[7] = l[7], f[8] = l[8], f;
        }, ht.copy = function(l, f) {
          return l[0] = f[0], l[1] = f[1], l[2] = f[2], l[3] = f[3], l[4] = f[4], l[5] = f[5], l[6] = f[6], l[7] = f[7], l[8] = f[8], l;
        }, ht.fromValues = function(l, f, v, S, D, x, P, I, M) {
          var C = new e.ARRAY_TYPE(9);
          return C[0] = l, C[1] = f, C[2] = v, C[3] = S, C[4] = D, C[5] = x, C[6] = P, C[7] = I, C[8] = M, C;
        }, ht.set = function(l, f, v, S, D, x, P, I, M, C) {
          return l[0] = f, l[1] = v, l[2] = S, l[3] = D, l[4] = x, l[5] = P, l[6] = I, l[7] = M, l[8] = C, l;
        }, ht.identity = function(l) {
          return l[0] = 1, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 1, l[5] = 0, l[6] = 0, l[7] = 0, l[8] = 1, l;
        }, ht.transpose = function(l, f) {
          if (l === f) {
            var v = f[1], S = f[2], D = f[5];
            l[1] = f[3], l[2] = f[6], l[3] = v, l[5] = f[7], l[6] = S, l[7] = D;
          } else
            l[0] = f[0], l[1] = f[3], l[2] = f[6], l[3] = f[1], l[4] = f[4], l[5] = f[7], l[6] = f[2], l[7] = f[5], l[8] = f[8];
          return l;
        }, ht.invert = function(l, f) {
          var v = f[0], S = f[1], D = f[2], x = f[3], P = f[4], I = f[5], M = f[6], C = f[7], k = f[8], V = k * P - I * C, U = -k * x + I * M, q = C * x - P * M, $ = v * V + S * U + D * q;
          return $ ? (l[0] = V * ($ = 1 / $), l[1] = (-k * S + D * C) * $, l[2] = (I * S - D * P) * $, l[3] = U * $, l[4] = (k * v - D * M) * $, l[5] = (-I * v + D * x) * $, l[6] = q * $, l[7] = (-C * v + S * M) * $, l[8] = (P * v - S * x) * $, l) : null;
        }, ht.adjoint = function(l, f) {
          var v = f[0], S = f[1], D = f[2], x = f[3], P = f[4], I = f[5], M = f[6], C = f[7], k = f[8];
          return l[0] = P * k - I * C, l[1] = D * C - S * k, l[2] = S * I - D * P, l[3] = I * M - x * k, l[4] = v * k - D * M, l[5] = D * x - v * I, l[6] = x * C - P * M, l[7] = S * M - v * C, l[8] = v * P - S * x, l;
        }, ht.determinant = function(l) {
          var f = l[3], v = l[4], S = l[5], D = l[6], x = l[7], P = l[8];
          return l[0] * (P * v - S * x) + l[1] * (-P * f + S * D) + l[2] * (x * f - v * D);
        }, ht.multiply = o, ht.translate = function(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = f[4], M = f[5], C = f[6], k = f[7], V = f[8], U = v[0], q = v[1];
          return l[0] = S, l[1] = D, l[2] = x, l[3] = P, l[4] = I, l[5] = M, l[6] = U * S + q * P + C, l[7] = U * D + q * I + k, l[8] = U * x + q * M + V, l;
        }, ht.rotate = function(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = f[4], M = f[5], C = f[6], k = f[7], V = f[8], U = Math.sin(v), q = Math.cos(v);
          return l[0] = q * S + U * P, l[1] = q * D + U * I, l[2] = q * x + U * M, l[3] = q * P - U * S, l[4] = q * I - U * D, l[5] = q * M - U * x, l[6] = C, l[7] = k, l[8] = V, l;
        }, ht.scale = function(l, f, v) {
          var S = v[0], D = v[1];
          return l[0] = S * f[0], l[1] = S * f[1], l[2] = S * f[2], l[3] = D * f[3], l[4] = D * f[4], l[5] = D * f[5], l[6] = f[6], l[7] = f[7], l[8] = f[8], l;
        }, ht.fromTranslation = function(l, f) {
          return l[0] = 1, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = 1, l[5] = 0, l[6] = f[0], l[7] = f[1], l[8] = 1, l;
        }, ht.fromRotation = function(l, f) {
          var v = Math.sin(f), S = Math.cos(f);
          return l[0] = S, l[1] = v, l[2] = 0, l[3] = -v, l[4] = S, l[5] = 0, l[6] = 0, l[7] = 0, l[8] = 1, l;
        }, ht.fromScaling = function(l, f) {
          return l[0] = f[0], l[1] = 0, l[2] = 0, l[3] = 0, l[4] = f[1], l[5] = 0, l[6] = 0, l[7] = 0, l[8] = 1, l;
        }, ht.fromMat2d = function(l, f) {
          return l[0] = f[0], l[1] = f[1], l[2] = 0, l[3] = f[2], l[4] = f[3], l[5] = 0, l[6] = f[4], l[7] = f[5], l[8] = 1, l;
        }, ht.fromQuat = function(l, f) {
          var v = f[0], S = f[1], D = f[2], x = f[3], P = v + v, I = S + S, M = D + D, C = v * P, k = S * P, V = S * I, U = D * P, q = D * I, $ = D * M, H = x * P, K = x * I, Q = x * M;
          return l[0] = 1 - V - $, l[3] = k - Q, l[6] = U + K, l[1] = k + Q, l[4] = 1 - C - $, l[7] = q - H, l[2] = U - K, l[5] = q + H, l[8] = 1 - C - V, l;
        }, ht.normalFromMat4 = function(l, f) {
          var v = f[0], S = f[1], D = f[2], x = f[3], P = f[4], I = f[5], M = f[6], C = f[7], k = f[8], V = f[9], U = f[10], q = f[11], $ = f[12], H = f[13], K = f[14], Q = f[15], ie = v * I - S * P, fe = v * M - D * P, de = v * C - x * P, ue = S * M - D * I, Se = S * C - x * I, me = D * C - x * M, Ee = k * H - V * $, ze = k * K - U * $, Ie = k * Q - q * $, Re = V * K - U * H, Ve = V * Q - q * H, Ue = U * Q - q * K, Fe = ie * Ue - fe * Ve + de * Re + ue * Ie - Se * ze + me * Ee;
          return Fe ? (l[0] = (I * Ue - M * Ve + C * Re) * (Fe = 1 / Fe), l[1] = (M * Ie - P * Ue - C * ze) * Fe, l[2] = (P * Ve - I * Ie + C * Ee) * Fe, l[3] = (D * Ve - S * Ue - x * Re) * Fe, l[4] = (v * Ue - D * Ie + x * ze) * Fe, l[5] = (S * Ie - v * Ve - x * Ee) * Fe, l[6] = (H * me - K * Se + Q * ue) * Fe, l[7] = (K * de - $ * me - Q * fe) * Fe, l[8] = ($ * Se - H * de + Q * ie) * Fe, l) : null;
        }, ht.projection = function(l, f, v) {
          return l[0] = 2 / f, l[1] = 0, l[2] = 0, l[3] = 0, l[4] = -2 / v, l[5] = 0, l[6] = -1, l[7] = 1, l[8] = 1, l;
        }, ht.str = function(l) {
          return "mat3(" + l[0] + ", " + l[1] + ", " + l[2] + ", " + l[3] + ", " + l[4] + ", " + l[5] + ", " + l[6] + ", " + l[7] + ", " + l[8] + ")";
        }, ht.frob = function(l) {
          return Math.hypot(l[0], l[1], l[2], l[3], l[4], l[5], l[6], l[7], l[8]);
        }, ht.add = function(l, f, v) {
          return l[0] = f[0] + v[0], l[1] = f[1] + v[1], l[2] = f[2] + v[2], l[3] = f[3] + v[3], l[4] = f[4] + v[4], l[5] = f[5] + v[5], l[6] = f[6] + v[6], l[7] = f[7] + v[7], l[8] = f[8] + v[8], l;
        }, ht.subtract = u, ht.multiplyScalar = function(l, f, v) {
          return l[0] = f[0] * v, l[1] = f[1] * v, l[2] = f[2] * v, l[3] = f[3] * v, l[4] = f[4] * v, l[5] = f[5] * v, l[6] = f[6] * v, l[7] = f[7] * v, l[8] = f[8] * v, l;
        }, ht.multiplyScalarAndAdd = function(l, f, v, S) {
          return l[0] = f[0] + v[0] * S, l[1] = f[1] + v[1] * S, l[2] = f[2] + v[2] * S, l[3] = f[3] + v[3] * S, l[4] = f[4] + v[4] * S, l[5] = f[5] + v[5] * S, l[6] = f[6] + v[6] * S, l[7] = f[7] + v[7] * S, l[8] = f[8] + v[8] * S, l;
        }, ht.exactEquals = function(l, f) {
          return l[0] === f[0] && l[1] === f[1] && l[2] === f[2] && l[3] === f[3] && l[4] === f[4] && l[5] === f[5] && l[6] === f[6] && l[7] === f[7] && l[8] === f[8];
        }, ht.equals = function(l, f) {
          var v = l[0], S = l[1], D = l[2], x = l[3], P = l[4], I = l[5], M = l[6], C = l[7], k = l[8], V = f[0], U = f[1], q = f[2], $ = f[3], H = f[4], K = f[5], Q = f[6], ie = f[7], fe = f[8];
          return Math.abs(v - V) <= e.EPSILON * Math.max(1, Math.abs(v), Math.abs(V)) && Math.abs(S - U) <= e.EPSILON * Math.max(1, Math.abs(S), Math.abs(U)) && Math.abs(D - q) <= e.EPSILON * Math.max(1, Math.abs(D), Math.abs(q)) && Math.abs(x - $) <= e.EPSILON * Math.max(1, Math.abs(x), Math.abs($)) && Math.abs(P - H) <= e.EPSILON * Math.max(1, Math.abs(P), Math.abs(H)) && Math.abs(I - K) <= e.EPSILON * Math.max(1, Math.abs(I), Math.abs(K)) && Math.abs(M - Q) <= e.EPSILON * Math.max(1, Math.abs(M), Math.abs(Q)) && Math.abs(C - ie) <= e.EPSILON * Math.max(1, Math.abs(C), Math.abs(ie)) && Math.abs(k - fe) <= e.EPSILON * Math.max(1, Math.abs(k), Math.abs(fe));
        }, ht.sub = ht.mul = void 0;
        var e = function(l, f) {
          if (l && l.__esModule)
            return l;
          if (l === null || r(l) !== "object" && typeof l != "function")
            return { default: l };
          var v = n(void 0);
          if (v && v.has(l))
            return v.get(l);
          var S = {}, D = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var x in l)
            if (x !== "default" && Object.prototype.hasOwnProperty.call(l, x)) {
              var P = D ? Object.getOwnPropertyDescriptor(l, x) : null;
              P && (P.get || P.set) ? Object.defineProperty(S, x, P) : S[x] = l[x];
            }
          return S.default = l, v && v.set(l, S), S;
        }(ae());
        function n(l) {
          if (typeof WeakMap != "function")
            return null;
          var f = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap();
          return (n = function(S) {
            return S ? v : f;
          })(l);
        }
        function o(l, f, v) {
          var S = f[0], D = f[1], x = f[2], P = f[3], I = f[4], M = f[5], C = f[6], k = f[7], V = f[8], U = v[0], q = v[1], $ = v[2], H = v[3], K = v[4], Q = v[5], ie = v[6], fe = v[7], de = v[8];
          return l[0] = U * S + q * P + $ * C, l[1] = U * D + q * I + $ * k, l[2] = U * x + q * M + $ * V, l[3] = H * S + K * P + Q * C, l[4] = H * D + K * I + Q * k, l[5] = H * x + K * M + Q * V, l[6] = ie * S + fe * P + de * C, l[7] = ie * D + fe * I + de * k, l[8] = ie * x + fe * M + de * V, l;
        }
        function u(l, f, v) {
          return l[0] = f[0] - v[0], l[1] = f[1] - v[1], l[2] = f[2] - v[2], l[3] = f[3] - v[3], l[4] = f[4] - v[4], l[5] = f[5] - v[5], l[6] = f[6] - v[6], l[7] = f[7] - v[7], l[8] = f[8] - v[8], l;
        }
        return ht.mul = o, ht.sub = u, ht;
      }
      var Vt, pt = {};
      function Gt() {
        if (Vt)
          return pt;
        function r(x) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(P) {
            return typeof P;
          } : function(P) {
            return P && typeof Symbol == "function" && P.constructor === Symbol && P !== Symbol.prototype ? "symbol" : typeof P;
          }, r(x);
        }
        Vt = 1, Object.defineProperty(pt, "__esModule", { value: !0 }), pt.create = function() {
          var x = new e.ARRAY_TYPE(16);
          return e.ARRAY_TYPE != Float32Array && (x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0), x[0] = 1, x[5] = 1, x[10] = 1, x[15] = 1, x;
        }, pt.clone = function(x) {
          var P = new e.ARRAY_TYPE(16);
          return P[0] = x[0], P[1] = x[1], P[2] = x[2], P[3] = x[3], P[4] = x[4], P[5] = x[5], P[6] = x[6], P[7] = x[7], P[8] = x[8], P[9] = x[9], P[10] = x[10], P[11] = x[11], P[12] = x[12], P[13] = x[13], P[14] = x[14], P[15] = x[15], P;
        }, pt.copy = function(x, P) {
          return x[0] = P[0], x[1] = P[1], x[2] = P[2], x[3] = P[3], x[4] = P[4], x[5] = P[5], x[6] = P[6], x[7] = P[7], x[8] = P[8], x[9] = P[9], x[10] = P[10], x[11] = P[11], x[12] = P[12], x[13] = P[13], x[14] = P[14], x[15] = P[15], x;
        }, pt.fromValues = function(x, P, I, M, C, k, V, U, q, $, H, K, Q, ie, fe, de) {
          var ue = new e.ARRAY_TYPE(16);
          return ue[0] = x, ue[1] = P, ue[2] = I, ue[3] = M, ue[4] = C, ue[5] = k, ue[6] = V, ue[7] = U, ue[8] = q, ue[9] = $, ue[10] = H, ue[11] = K, ue[12] = Q, ue[13] = ie, ue[14] = fe, ue[15] = de, ue;
        }, pt.set = function(x, P, I, M, C, k, V, U, q, $, H, K, Q, ie, fe, de, ue) {
          return x[0] = P, x[1] = I, x[2] = M, x[3] = C, x[4] = k, x[5] = V, x[6] = U, x[7] = q, x[8] = $, x[9] = H, x[10] = K, x[11] = Q, x[12] = ie, x[13] = fe, x[14] = de, x[15] = ue, x;
        }, pt.identity = o, pt.transpose = function(x, P) {
          if (x === P) {
            var I = P[1], M = P[2], C = P[3], k = P[6], V = P[7], U = P[11];
            x[1] = P[4], x[2] = P[8], x[3] = P[12], x[4] = I, x[6] = P[9], x[7] = P[13], x[8] = M, x[9] = k, x[11] = P[14], x[12] = C, x[13] = V, x[14] = U;
          } else
            x[0] = P[0], x[1] = P[4], x[2] = P[8], x[3] = P[12], x[4] = P[1], x[5] = P[5], x[6] = P[9], x[7] = P[13], x[8] = P[2], x[9] = P[6], x[10] = P[10], x[11] = P[14], x[12] = P[3], x[13] = P[7], x[14] = P[11], x[15] = P[15];
          return x;
        }, pt.invert = function(x, P) {
          var I = P[0], M = P[1], C = P[2], k = P[3], V = P[4], U = P[5], q = P[6], $ = P[7], H = P[8], K = P[9], Q = P[10], ie = P[11], fe = P[12], de = P[13], ue = P[14], Se = P[15], me = I * U - M * V, Ee = I * q - C * V, ze = I * $ - k * V, Ie = M * q - C * U, Re = M * $ - k * U, Ve = C * $ - k * q, Ue = H * de - K * fe, Fe = H * ue - Q * fe, et = H * Se - ie * fe, dt = K * ue - Q * de, tt = K * Se - ie * de, Mt = Q * Se - ie * ue, wt = me * Mt - Ee * tt + ze * dt + Ie * et - Re * Fe + Ve * Ue;
          return wt ? (x[0] = (U * Mt - q * tt + $ * dt) * (wt = 1 / wt), x[1] = (C * tt - M * Mt - k * dt) * wt, x[2] = (de * Ve - ue * Re + Se * Ie) * wt, x[3] = (Q * Re - K * Ve - ie * Ie) * wt, x[4] = (q * et - V * Mt - $ * Fe) * wt, x[5] = (I * Mt - C * et + k * Fe) * wt, x[6] = (ue * ze - fe * Ve - Se * Ee) * wt, x[7] = (H * Ve - Q * ze + ie * Ee) * wt, x[8] = (V * tt - U * et + $ * Ue) * wt, x[9] = (M * et - I * tt - k * Ue) * wt, x[10] = (fe * Re - de * ze + Se * me) * wt, x[11] = (K * ze - H * Re - ie * me) * wt, x[12] = (U * Fe - V * dt - q * Ue) * wt, x[13] = (I * dt - M * Fe + C * Ue) * wt, x[14] = (de * Ee - fe * Ie - ue * me) * wt, x[15] = (H * Ie - K * Ee + Q * me) * wt, x) : null;
        }, pt.adjoint = function(x, P) {
          var I = P[0], M = P[1], C = P[2], k = P[3], V = P[4], U = P[5], q = P[6], $ = P[7], H = P[8], K = P[9], Q = P[10], ie = P[11], fe = P[12], de = P[13], ue = P[14], Se = P[15];
          return x[0] = U * (Q * Se - ie * ue) - K * (q * Se - $ * ue) + de * (q * ie - $ * Q), x[1] = -(M * (Q * Se - ie * ue) - K * (C * Se - k * ue) + de * (C * ie - k * Q)), x[2] = M * (q * Se - $ * ue) - U * (C * Se - k * ue) + de * (C * $ - k * q), x[3] = -(M * (q * ie - $ * Q) - U * (C * ie - k * Q) + K * (C * $ - k * q)), x[4] = -(V * (Q * Se - ie * ue) - H * (q * Se - $ * ue) + fe * (q * ie - $ * Q)), x[5] = I * (Q * Se - ie * ue) - H * (C * Se - k * ue) + fe * (C * ie - k * Q), x[6] = -(I * (q * Se - $ * ue) - V * (C * Se - k * ue) + fe * (C * $ - k * q)), x[7] = I * (q * ie - $ * Q) - V * (C * ie - k * Q) + H * (C * $ - k * q), x[8] = V * (K * Se - ie * de) - H * (U * Se - $ * de) + fe * (U * ie - $ * K), x[9] = -(I * (K * Se - ie * de) - H * (M * Se - k * de) + fe * (M * ie - k * K)), x[10] = I * (U * Se - $ * de) - V * (M * Se - k * de) + fe * (M * $ - k * U), x[11] = -(I * (U * ie - $ * K) - V * (M * ie - k * K) + H * (M * $ - k * U)), x[12] = -(V * (K * ue - Q * de) - H * (U * ue - q * de) + fe * (U * Q - q * K)), x[13] = I * (K * ue - Q * de) - H * (M * ue - C * de) + fe * (M * Q - C * K), x[14] = -(I * (U * ue - q * de) - V * (M * ue - C * de) + fe * (M * q - C * U)), x[15] = I * (U * Q - q * K) - V * (M * Q - C * K) + H * (M * q - C * U), x;
        }, pt.determinant = function(x) {
          var P = x[0], I = x[1], M = x[2], C = x[3], k = x[4], V = x[5], U = x[6], q = x[7], $ = x[8], H = x[9], K = x[10], Q = x[11], ie = x[12], fe = x[13], de = x[14], ue = x[15];
          return (P * V - I * k) * (K * ue - Q * de) - (P * U - M * k) * (H * ue - Q * fe) + (P * q - C * k) * (H * de - K * fe) + (I * U - M * V) * ($ * ue - Q * ie) - (I * q - C * V) * ($ * de - K * ie) + (M * q - C * U) * ($ * fe - H * ie);
        }, pt.multiply = u, pt.translate = function(x, P, I) {
          var M, C, k, V, U, q, $, H, K, Q, ie, fe, de = I[0], ue = I[1], Se = I[2];
          return P === x ? (x[12] = P[0] * de + P[4] * ue + P[8] * Se + P[12], x[13] = P[1] * de + P[5] * ue + P[9] * Se + P[13], x[14] = P[2] * de + P[6] * ue + P[10] * Se + P[14], x[15] = P[3] * de + P[7] * ue + P[11] * Se + P[15]) : (C = P[1], k = P[2], V = P[3], U = P[4], q = P[5], $ = P[6], H = P[7], K = P[8], Q = P[9], ie = P[10], fe = P[11], x[0] = M = P[0], x[1] = C, x[2] = k, x[3] = V, x[4] = U, x[5] = q, x[6] = $, x[7] = H, x[8] = K, x[9] = Q, x[10] = ie, x[11] = fe, x[12] = M * de + U * ue + K * Se + P[12], x[13] = C * de + q * ue + Q * Se + P[13], x[14] = k * de + $ * ue + ie * Se + P[14], x[15] = V * de + H * ue + fe * Se + P[15]), x;
        }, pt.scale = function(x, P, I) {
          var M = I[0], C = I[1], k = I[2];
          return x[0] = P[0] * M, x[1] = P[1] * M, x[2] = P[2] * M, x[3] = P[3] * M, x[4] = P[4] * C, x[5] = P[5] * C, x[6] = P[6] * C, x[7] = P[7] * C, x[8] = P[8] * k, x[9] = P[9] * k, x[10] = P[10] * k, x[11] = P[11] * k, x[12] = P[12], x[13] = P[13], x[14] = P[14], x[15] = P[15], x;
        }, pt.rotate = function(x, P, I, M) {
          var C, k, V, U, q, $, H, K, Q, ie, fe, de, ue, Se, me, Ee, ze, Ie, Re, Ve, Ue, Fe, et, dt, tt = M[0], Mt = M[1], wt = M[2], At = Math.hypot(tt, Mt, wt);
          return At < e.EPSILON ? null : (tt *= At = 1 / At, Mt *= At, wt *= At, C = Math.sin(I), k = Math.cos(I), q = P[1], $ = P[2], H = P[3], Q = P[5], ie = P[6], fe = P[7], ue = P[9], Se = P[10], me = P[11], Ee = tt * tt * (V = 1 - k) + k, Re = tt * Mt * V - wt * C, Ve = Mt * Mt * V + k, Ue = wt * Mt * V + tt * C, Fe = tt * wt * V + Mt * C, et = Mt * wt * V - tt * C, dt = wt * wt * V + k, x[0] = (U = P[0]) * Ee + (K = P[4]) * (ze = Mt * tt * V + wt * C) + (de = P[8]) * (Ie = wt * tt * V - Mt * C), x[1] = q * Ee + Q * ze + ue * Ie, x[2] = $ * Ee + ie * ze + Se * Ie, x[3] = H * Ee + fe * ze + me * Ie, x[4] = U * Re + K * Ve + de * Ue, x[5] = q * Re + Q * Ve + ue * Ue, x[6] = $ * Re + ie * Ve + Se * Ue, x[7] = H * Re + fe * Ve + me * Ue, x[8] = U * Fe + K * et + de * dt, x[9] = q * Fe + Q * et + ue * dt, x[10] = $ * Fe + ie * et + Se * dt, x[11] = H * Fe + fe * et + me * dt, P !== x && (x[12] = P[12], x[13] = P[13], x[14] = P[14], x[15] = P[15]), x);
        }, pt.rotateX = function(x, P, I) {
          var M = Math.sin(I), C = Math.cos(I), k = P[4], V = P[5], U = P[6], q = P[7], $ = P[8], H = P[9], K = P[10], Q = P[11];
          return P !== x && (x[0] = P[0], x[1] = P[1], x[2] = P[2], x[3] = P[3], x[12] = P[12], x[13] = P[13], x[14] = P[14], x[15] = P[15]), x[4] = k * C + $ * M, x[5] = V * C + H * M, x[6] = U * C + K * M, x[7] = q * C + Q * M, x[8] = $ * C - k * M, x[9] = H * C - V * M, x[10] = K * C - U * M, x[11] = Q * C - q * M, x;
        }, pt.rotateY = function(x, P, I) {
          var M = Math.sin(I), C = Math.cos(I), k = P[0], V = P[1], U = P[2], q = P[3], $ = P[8], H = P[9], K = P[10], Q = P[11];
          return P !== x && (x[4] = P[4], x[5] = P[5], x[6] = P[6], x[7] = P[7], x[12] = P[12], x[13] = P[13], x[14] = P[14], x[15] = P[15]), x[0] = k * C - $ * M, x[1] = V * C - H * M, x[2] = U * C - K * M, x[3] = q * C - Q * M, x[8] = k * M + $ * C, x[9] = V * M + H * C, x[10] = U * M + K * C, x[11] = q * M + Q * C, x;
        }, pt.rotateZ = function(x, P, I) {
          var M = Math.sin(I), C = Math.cos(I), k = P[0], V = P[1], U = P[2], q = P[3], $ = P[4], H = P[5], K = P[6], Q = P[7];
          return P !== x && (x[8] = P[8], x[9] = P[9], x[10] = P[10], x[11] = P[11], x[12] = P[12], x[13] = P[13], x[14] = P[14], x[15] = P[15]), x[0] = k * C + $ * M, x[1] = V * C + H * M, x[2] = U * C + K * M, x[3] = q * C + Q * M, x[4] = $ * C - k * M, x[5] = H * C - V * M, x[6] = K * C - U * M, x[7] = Q * C - q * M, x;
        }, pt.fromTranslation = function(x, P) {
          return x[0] = 1, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = 1, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[10] = 1, x[11] = 0, x[12] = P[0], x[13] = P[1], x[14] = P[2], x[15] = 1, x;
        }, pt.fromScaling = function(x, P) {
          return x[0] = P[0], x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = P[1], x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[10] = P[2], x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x;
        }, pt.fromRotation = function(x, P, I) {
          var M, C, k, V = I[0], U = I[1], q = I[2], $ = Math.hypot(V, U, q);
          return $ < e.EPSILON ? null : (V *= $ = 1 / $, U *= $, q *= $, M = Math.sin(P), C = Math.cos(P), x[0] = V * V * (k = 1 - C) + C, x[1] = U * V * k + q * M, x[2] = q * V * k - U * M, x[3] = 0, x[4] = V * U * k - q * M, x[5] = U * U * k + C, x[6] = q * U * k + V * M, x[7] = 0, x[8] = V * q * k + U * M, x[9] = U * q * k - V * M, x[10] = q * q * k + C, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x);
        }, pt.fromXRotation = function(x, P) {
          var I = Math.sin(P), M = Math.cos(P);
          return x[0] = 1, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = M, x[6] = I, x[7] = 0, x[8] = 0, x[9] = -I, x[10] = M, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x;
        }, pt.fromYRotation = function(x, P) {
          var I = Math.sin(P), M = Math.cos(P);
          return x[0] = M, x[1] = 0, x[2] = -I, x[3] = 0, x[4] = 0, x[5] = 1, x[6] = 0, x[7] = 0, x[8] = I, x[9] = 0, x[10] = M, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x;
        }, pt.fromZRotation = function(x, P) {
          var I = Math.sin(P), M = Math.cos(P);
          return x[0] = M, x[1] = I, x[2] = 0, x[3] = 0, x[4] = -I, x[5] = M, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[10] = 1, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x;
        }, pt.fromRotationTranslation = l, pt.fromQuat2 = function(x, P) {
          var I = new e.ARRAY_TYPE(3), M = -P[0], C = -P[1], k = -P[2], V = P[3], U = P[4], q = P[5], $ = P[6], H = P[7], K = M * M + C * C + k * k + V * V;
          return K > 0 ? (I[0] = 2 * (U * V + H * M + q * k - $ * C) / K, I[1] = 2 * (q * V + H * C + $ * M - U * k) / K, I[2] = 2 * ($ * V + H * k + U * C - q * M) / K) : (I[0] = 2 * (U * V + H * M + q * k - $ * C), I[1] = 2 * (q * V + H * C + $ * M - U * k), I[2] = 2 * ($ * V + H * k + U * C - q * M)), l(x, P, I), x;
        }, pt.getTranslation = function(x, P) {
          return x[0] = P[12], x[1] = P[13], x[2] = P[14], x;
        }, pt.getScaling = f, pt.getRotation = function(x, P) {
          var I = new e.ARRAY_TYPE(3);
          f(I, P);
          var M = 1 / I[0], C = 1 / I[1], k = 1 / I[2], V = P[0] * M, U = P[1] * C, q = P[2] * k, $ = P[4] * M, H = P[5] * C, K = P[6] * k, Q = P[8] * M, ie = P[9] * C, fe = P[10] * k, de = V + H + fe, ue = 0;
          return de > 0 ? (ue = 2 * Math.sqrt(de + 1), x[3] = 0.25 * ue, x[0] = (K - ie) / ue, x[1] = (Q - q) / ue, x[2] = (U - $) / ue) : V > H && V > fe ? (ue = 2 * Math.sqrt(1 + V - H - fe), x[3] = (K - ie) / ue, x[0] = 0.25 * ue, x[1] = (U + $) / ue, x[2] = (Q + q) / ue) : H > fe ? (ue = 2 * Math.sqrt(1 + H - V - fe), x[3] = (Q - q) / ue, x[0] = (U + $) / ue, x[1] = 0.25 * ue, x[2] = (K + ie) / ue) : (ue = 2 * Math.sqrt(1 + fe - V - H), x[3] = (U - $) / ue, x[0] = (Q + q) / ue, x[1] = (K + ie) / ue, x[2] = 0.25 * ue), x;
        }, pt.fromRotationTranslationScale = function(x, P, I, M) {
          var C = P[0], k = P[1], V = P[2], U = P[3], q = C + C, $ = k + k, H = V + V, K = C * q, Q = C * $, ie = C * H, fe = k * $, de = k * H, ue = V * H, Se = U * q, me = U * $, Ee = U * H, ze = M[0], Ie = M[1], Re = M[2];
          return x[0] = (1 - (fe + ue)) * ze, x[1] = (Q + Ee) * ze, x[2] = (ie - me) * ze, x[3] = 0, x[4] = (Q - Ee) * Ie, x[5] = (1 - (K + ue)) * Ie, x[6] = (de + Se) * Ie, x[7] = 0, x[8] = (ie + me) * Re, x[9] = (de - Se) * Re, x[10] = (1 - (K + fe)) * Re, x[11] = 0, x[12] = I[0], x[13] = I[1], x[14] = I[2], x[15] = 1, x;
        }, pt.fromRotationTranslationScaleOrigin = function(x, P, I, M, C) {
          var k = P[0], V = P[1], U = P[2], q = P[3], $ = k + k, H = V + V, K = U + U, Q = k * $, ie = k * H, fe = k * K, de = V * H, ue = V * K, Se = U * K, me = q * $, Ee = q * H, ze = q * K, Ie = M[0], Re = M[1], Ve = M[2], Ue = C[0], Fe = C[1], et = C[2], dt = (1 - (de + Se)) * Ie, tt = (ie + ze) * Ie, Mt = (fe - Ee) * Ie, wt = (ie - ze) * Re, At = (1 - (Q + Se)) * Re, rt = (ue + me) * Re, Ut = (fe + Ee) * Ve, St = (ue - me) * Ve, Nt = (1 - (Q + de)) * Ve;
          return x[0] = dt, x[1] = tt, x[2] = Mt, x[3] = 0, x[4] = wt, x[5] = At, x[6] = rt, x[7] = 0, x[8] = Ut, x[9] = St, x[10] = Nt, x[11] = 0, x[12] = I[0] + Ue - (dt * Ue + wt * Fe + Ut * et), x[13] = I[1] + Fe - (tt * Ue + At * Fe + St * et), x[14] = I[2] + et - (Mt * Ue + rt * Fe + Nt * et), x[15] = 1, x;
        }, pt.fromQuat = function(x, P) {
          var I = P[0], M = P[1], C = P[2], k = P[3], V = I + I, U = M + M, q = C + C, $ = I * V, H = M * V, K = M * U, Q = C * V, ie = C * U, fe = C * q, de = k * V, ue = k * U, Se = k * q;
          return x[0] = 1 - K - fe, x[1] = H + Se, x[2] = Q - ue, x[3] = 0, x[4] = H - Se, x[5] = 1 - $ - fe, x[6] = ie + de, x[7] = 0, x[8] = Q + ue, x[9] = ie - de, x[10] = 1 - $ - K, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x;
        }, pt.frustum = function(x, P, I, M, C, k, V) {
          var U = 1 / (I - P), q = 1 / (C - M), $ = 1 / (k - V);
          return x[0] = 2 * k * U, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = 2 * k * q, x[6] = 0, x[7] = 0, x[8] = (I + P) * U, x[9] = (C + M) * q, x[10] = (V + k) * $, x[11] = -1, x[12] = 0, x[13] = 0, x[14] = V * k * 2 * $, x[15] = 0, x;
        }, pt.perspectiveNO = v, pt.perspectiveZO = function(x, P, I, M, C) {
          var k, V = 1 / Math.tan(P / 2);
          return x[0] = V / I, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = V, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[11] = -1, x[12] = 0, x[13] = 0, x[15] = 0, C != null && C !== 1 / 0 ? (x[10] = C * (k = 1 / (M - C)), x[14] = C * M * k) : (x[10] = -1, x[14] = -M), x;
        }, pt.perspectiveFromFieldOfView = function(x, P, I, M) {
          var C = Math.tan(P.upDegrees * Math.PI / 180), k = Math.tan(P.downDegrees * Math.PI / 180), V = Math.tan(P.leftDegrees * Math.PI / 180), U = Math.tan(P.rightDegrees * Math.PI / 180), q = 2 / (V + U), $ = 2 / (C + k);
          return x[0] = q, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = $, x[6] = 0, x[7] = 0, x[8] = -(V - U) * q * 0.5, x[9] = (C - k) * $ * 0.5, x[10] = M / (I - M), x[11] = -1, x[12] = 0, x[13] = 0, x[14] = M * I / (I - M), x[15] = 0, x;
        }, pt.orthoNO = S, pt.orthoZO = function(x, P, I, M, C, k, V) {
          var U = 1 / (P - I), q = 1 / (M - C), $ = 1 / (k - V);
          return x[0] = -2 * U, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = -2 * q, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[10] = $, x[11] = 0, x[12] = (P + I) * U, x[13] = (C + M) * q, x[14] = k * $, x[15] = 1, x;
        }, pt.lookAt = function(x, P, I, M) {
          var C, k, V, U, q, $, H, K, Q, ie, fe = P[0], de = P[1], ue = P[2], Se = M[0], me = M[1], Ee = M[2], ze = I[0], Ie = I[1], Re = I[2];
          return Math.abs(fe - ze) < e.EPSILON && Math.abs(de - Ie) < e.EPSILON && Math.abs(ue - Re) < e.EPSILON ? o(x) : (H = fe - ze, K = de - Ie, Q = ue - Re, C = me * (Q *= ie = 1 / Math.hypot(H, K, Q)) - Ee * (K *= ie), k = Ee * (H *= ie) - Se * Q, V = Se * K - me * H, (ie = Math.hypot(C, k, V)) ? (C *= ie = 1 / ie, k *= ie, V *= ie) : (C = 0, k = 0, V = 0), U = K * V - Q * k, q = Q * C - H * V, $ = H * k - K * C, (ie = Math.hypot(U, q, $)) ? (U *= ie = 1 / ie, q *= ie, $ *= ie) : (U = 0, q = 0, $ = 0), x[0] = C, x[1] = U, x[2] = H, x[3] = 0, x[4] = k, x[5] = q, x[6] = K, x[7] = 0, x[8] = V, x[9] = $, x[10] = Q, x[11] = 0, x[12] = -(C * fe + k * de + V * ue), x[13] = -(U * fe + q * de + $ * ue), x[14] = -(H * fe + K * de + Q * ue), x[15] = 1, x);
        }, pt.targetTo = function(x, P, I, M) {
          var C = P[0], k = P[1], V = P[2], U = M[0], q = M[1], $ = M[2], H = C - I[0], K = k - I[1], Q = V - I[2], ie = H * H + K * K + Q * Q;
          ie > 0 && (H *= ie = 1 / Math.sqrt(ie), K *= ie, Q *= ie);
          var fe = q * Q - $ * K, de = $ * H - U * Q, ue = U * K - q * H;
          return (ie = fe * fe + de * de + ue * ue) > 0 && (fe *= ie = 1 / Math.sqrt(ie), de *= ie, ue *= ie), x[0] = fe, x[1] = de, x[2] = ue, x[3] = 0, x[4] = K * ue - Q * de, x[5] = Q * fe - H * ue, x[6] = H * de - K * fe, x[7] = 0, x[8] = H, x[9] = K, x[10] = Q, x[11] = 0, x[12] = C, x[13] = k, x[14] = V, x[15] = 1, x;
        }, pt.str = function(x) {
          return "mat4(" + x[0] + ", " + x[1] + ", " + x[2] + ", " + x[3] + ", " + x[4] + ", " + x[5] + ", " + x[6] + ", " + x[7] + ", " + x[8] + ", " + x[9] + ", " + x[10] + ", " + x[11] + ", " + x[12] + ", " + x[13] + ", " + x[14] + ", " + x[15] + ")";
        }, pt.frob = function(x) {
          return Math.hypot(x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15]);
        }, pt.add = function(x, P, I) {
          return x[0] = P[0] + I[0], x[1] = P[1] + I[1], x[2] = P[2] + I[2], x[3] = P[3] + I[3], x[4] = P[4] + I[4], x[5] = P[5] + I[5], x[6] = P[6] + I[6], x[7] = P[7] + I[7], x[8] = P[8] + I[8], x[9] = P[9] + I[9], x[10] = P[10] + I[10], x[11] = P[11] + I[11], x[12] = P[12] + I[12], x[13] = P[13] + I[13], x[14] = P[14] + I[14], x[15] = P[15] + I[15], x;
        }, pt.subtract = D, pt.multiplyScalar = function(x, P, I) {
          return x[0] = P[0] * I, x[1] = P[1] * I, x[2] = P[2] * I, x[3] = P[3] * I, x[4] = P[4] * I, x[5] = P[5] * I, x[6] = P[6] * I, x[7] = P[7] * I, x[8] = P[8] * I, x[9] = P[9] * I, x[10] = P[10] * I, x[11] = P[11] * I, x[12] = P[12] * I, x[13] = P[13] * I, x[14] = P[14] * I, x[15] = P[15] * I, x;
        }, pt.multiplyScalarAndAdd = function(x, P, I, M) {
          return x[0] = P[0] + I[0] * M, x[1] = P[1] + I[1] * M, x[2] = P[2] + I[2] * M, x[3] = P[3] + I[3] * M, x[4] = P[4] + I[4] * M, x[5] = P[5] + I[5] * M, x[6] = P[6] + I[6] * M, x[7] = P[7] + I[7] * M, x[8] = P[8] + I[8] * M, x[9] = P[9] + I[9] * M, x[10] = P[10] + I[10] * M, x[11] = P[11] + I[11] * M, x[12] = P[12] + I[12] * M, x[13] = P[13] + I[13] * M, x[14] = P[14] + I[14] * M, x[15] = P[15] + I[15] * M, x;
        }, pt.exactEquals = function(x, P) {
          return x[0] === P[0] && x[1] === P[1] && x[2] === P[2] && x[3] === P[3] && x[4] === P[4] && x[5] === P[5] && x[6] === P[6] && x[7] === P[7] && x[8] === P[8] && x[9] === P[9] && x[10] === P[10] && x[11] === P[11] && x[12] === P[12] && x[13] === P[13] && x[14] === P[14] && x[15] === P[15];
        }, pt.equals = function(x, P) {
          var I = x[0], M = x[1], C = x[2], k = x[3], V = x[4], U = x[5], q = x[6], $ = x[7], H = x[8], K = x[9], Q = x[10], ie = x[11], fe = x[12], de = x[13], ue = x[14], Se = x[15], me = P[0], Ee = P[1], ze = P[2], Ie = P[3], Re = P[4], Ve = P[5], Ue = P[6], Fe = P[7], et = P[8], dt = P[9], tt = P[10], Mt = P[11], wt = P[12], At = P[13], rt = P[14], Ut = P[15];
          return Math.abs(I - me) <= e.EPSILON * Math.max(1, Math.abs(I), Math.abs(me)) && Math.abs(M - Ee) <= e.EPSILON * Math.max(1, Math.abs(M), Math.abs(Ee)) && Math.abs(C - ze) <= e.EPSILON * Math.max(1, Math.abs(C), Math.abs(ze)) && Math.abs(k - Ie) <= e.EPSILON * Math.max(1, Math.abs(k), Math.abs(Ie)) && Math.abs(V - Re) <= e.EPSILON * Math.max(1, Math.abs(V), Math.abs(Re)) && Math.abs(U - Ve) <= e.EPSILON * Math.max(1, Math.abs(U), Math.abs(Ve)) && Math.abs(q - Ue) <= e.EPSILON * Math.max(1, Math.abs(q), Math.abs(Ue)) && Math.abs($ - Fe) <= e.EPSILON * Math.max(1, Math.abs($), Math.abs(Fe)) && Math.abs(H - et) <= e.EPSILON * Math.max(1, Math.abs(H), Math.abs(et)) && Math.abs(K - dt) <= e.EPSILON * Math.max(1, Math.abs(K), Math.abs(dt)) && Math.abs(Q - tt) <= e.EPSILON * Math.max(1, Math.abs(Q), Math.abs(tt)) && Math.abs(ie - Mt) <= e.EPSILON * Math.max(1, Math.abs(ie), Math.abs(Mt)) && Math.abs(fe - wt) <= e.EPSILON * Math.max(1, Math.abs(fe), Math.abs(wt)) && Math.abs(de - At) <= e.EPSILON * Math.max(1, Math.abs(de), Math.abs(At)) && Math.abs(ue - rt) <= e.EPSILON * Math.max(1, Math.abs(ue), Math.abs(rt)) && Math.abs(Se - Ut) <= e.EPSILON * Math.max(1, Math.abs(Se), Math.abs(Ut));
        }, pt.sub = pt.mul = pt.ortho = pt.perspective = void 0;
        var e = function(x, P) {
          if (x && x.__esModule)
            return x;
          if (x === null || r(x) !== "object" && typeof x != "function")
            return { default: x };
          var I = n(void 0);
          if (I && I.has(x))
            return I.get(x);
          var M = {}, C = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var k in x)
            if (k !== "default" && Object.prototype.hasOwnProperty.call(x, k)) {
              var V = C ? Object.getOwnPropertyDescriptor(x, k) : null;
              V && (V.get || V.set) ? Object.defineProperty(M, k, V) : M[k] = x[k];
            }
          return M.default = x, I && I.set(x, M), M;
        }(ae());
        function n(x) {
          if (typeof WeakMap != "function")
            return null;
          var P = /* @__PURE__ */ new WeakMap(), I = /* @__PURE__ */ new WeakMap();
          return (n = function(M) {
            return M ? I : P;
          })(x);
        }
        function o(x) {
          return x[0] = 1, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = 1, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[10] = 1, x[11] = 0, x[12] = 0, x[13] = 0, x[14] = 0, x[15] = 1, x;
        }
        function u(x, P, I) {
          var M = P[0], C = P[1], k = P[2], V = P[3], U = P[4], q = P[5], $ = P[6], H = P[7], K = P[8], Q = P[9], ie = P[10], fe = P[11], de = P[12], ue = P[13], Se = P[14], me = P[15], Ee = I[0], ze = I[1], Ie = I[2], Re = I[3];
          return x[0] = Ee * M + ze * U + Ie * K + Re * de, x[1] = Ee * C + ze * q + Ie * Q + Re * ue, x[2] = Ee * k + ze * $ + Ie * ie + Re * Se, x[3] = Ee * V + ze * H + Ie * fe + Re * me, x[4] = (Ee = I[4]) * M + (ze = I[5]) * U + (Ie = I[6]) * K + (Re = I[7]) * de, x[5] = Ee * C + ze * q + Ie * Q + Re * ue, x[6] = Ee * k + ze * $ + Ie * ie + Re * Se, x[7] = Ee * V + ze * H + Ie * fe + Re * me, x[8] = (Ee = I[8]) * M + (ze = I[9]) * U + (Ie = I[10]) * K + (Re = I[11]) * de, x[9] = Ee * C + ze * q + Ie * Q + Re * ue, x[10] = Ee * k + ze * $ + Ie * ie + Re * Se, x[11] = Ee * V + ze * H + Ie * fe + Re * me, x[12] = (Ee = I[12]) * M + (ze = I[13]) * U + (Ie = I[14]) * K + (Re = I[15]) * de, x[13] = Ee * C + ze * q + Ie * Q + Re * ue, x[14] = Ee * k + ze * $ + Ie * ie + Re * Se, x[15] = Ee * V + ze * H + Ie * fe + Re * me, x;
        }
        function l(x, P, I) {
          var M = P[0], C = P[1], k = P[2], V = P[3], U = M + M, q = C + C, $ = k + k, H = M * U, K = M * q, Q = M * $, ie = C * q, fe = C * $, de = k * $, ue = V * U, Se = V * q, me = V * $;
          return x[0] = 1 - (ie + de), x[1] = K + me, x[2] = Q - Se, x[3] = 0, x[4] = K - me, x[5] = 1 - (H + de), x[6] = fe + ue, x[7] = 0, x[8] = Q + Se, x[9] = fe - ue, x[10] = 1 - (H + ie), x[11] = 0, x[12] = I[0], x[13] = I[1], x[14] = I[2], x[15] = 1, x;
        }
        function f(x, P) {
          var I = P[4], M = P[5], C = P[6], k = P[8], V = P[9], U = P[10];
          return x[0] = Math.hypot(P[0], P[1], P[2]), x[1] = Math.hypot(I, M, C), x[2] = Math.hypot(k, V, U), x;
        }
        function v(x, P, I, M, C) {
          var k, V = 1 / Math.tan(P / 2);
          return x[0] = V / I, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = V, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[11] = -1, x[12] = 0, x[13] = 0, x[15] = 0, C != null && C !== 1 / 0 ? (x[10] = (C + M) * (k = 1 / (M - C)), x[14] = 2 * C * M * k) : (x[10] = -1, x[14] = -2 * M), x;
        }
        function S(x, P, I, M, C, k, V) {
          var U = 1 / (P - I), q = 1 / (M - C), $ = 1 / (k - V);
          return x[0] = -2 * U, x[1] = 0, x[2] = 0, x[3] = 0, x[4] = 0, x[5] = -2 * q, x[6] = 0, x[7] = 0, x[8] = 0, x[9] = 0, x[10] = 2 * $, x[11] = 0, x[12] = (P + I) * U, x[13] = (C + M) * q, x[14] = (V + k) * $, x[15] = 1, x;
        }
        function D(x, P, I) {
          return x[0] = P[0] - I[0], x[1] = P[1] - I[1], x[2] = P[2] - I[2], x[3] = P[3] - I[3], x[4] = P[4] - I[4], x[5] = P[5] - I[5], x[6] = P[6] - I[6], x[7] = P[7] - I[7], x[8] = P[8] - I[8], x[9] = P[9] - I[9], x[10] = P[10] - I[10], x[11] = P[11] - I[11], x[12] = P[12] - I[12], x[13] = P[13] - I[13], x[14] = P[14] - I[14], x[15] = P[15] - I[15], x;
        }
        return pt.perspective = v, pt.ortho = S, pt.mul = u, pt.sub = D, pt;
      }
      var ui, kt = {}, Pt = {};
      function Mi() {
        if (ui)
          return Pt;
        function r(C) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(k) {
            return typeof k;
          } : function(k) {
            return k && typeof Symbol == "function" && k.constructor === Symbol && k !== Symbol.prototype ? "symbol" : typeof k;
          }, r(C);
        }
        ui = 1, Object.defineProperty(Pt, "__esModule", { value: !0 }), Pt.create = o, Pt.clone = function(C) {
          var k = new e.ARRAY_TYPE(3);
          return k[0] = C[0], k[1] = C[1], k[2] = C[2], k;
        }, Pt.length = u, Pt.fromValues = function(C, k, V) {
          var U = new e.ARRAY_TYPE(3);
          return U[0] = C, U[1] = k, U[2] = V, U;
        }, Pt.copy = function(C, k) {
          return C[0] = k[0], C[1] = k[1], C[2] = k[2], C;
        }, Pt.set = function(C, k, V, U) {
          return C[0] = k, C[1] = V, C[2] = U, C;
        }, Pt.add = function(C, k, V) {
          return C[0] = k[0] + V[0], C[1] = k[1] + V[1], C[2] = k[2] + V[2], C;
        }, Pt.subtract = l, Pt.multiply = f, Pt.divide = v, Pt.ceil = function(C, k) {
          return C[0] = Math.ceil(k[0]), C[1] = Math.ceil(k[1]), C[2] = Math.ceil(k[2]), C;
        }, Pt.floor = function(C, k) {
          return C[0] = Math.floor(k[0]), C[1] = Math.floor(k[1]), C[2] = Math.floor(k[2]), C;
        }, Pt.min = function(C, k, V) {
          return C[0] = Math.min(k[0], V[0]), C[1] = Math.min(k[1], V[1]), C[2] = Math.min(k[2], V[2]), C;
        }, Pt.max = function(C, k, V) {
          return C[0] = Math.max(k[0], V[0]), C[1] = Math.max(k[1], V[1]), C[2] = Math.max(k[2], V[2]), C;
        }, Pt.round = function(C, k) {
          return C[0] = Math.round(k[0]), C[1] = Math.round(k[1]), C[2] = Math.round(k[2]), C;
        }, Pt.scale = function(C, k, V) {
          return C[0] = k[0] * V, C[1] = k[1] * V, C[2] = k[2] * V, C;
        }, Pt.scaleAndAdd = function(C, k, V, U) {
          return C[0] = k[0] + V[0] * U, C[1] = k[1] + V[1] * U, C[2] = k[2] + V[2] * U, C;
        }, Pt.distance = S, Pt.squaredDistance = D, Pt.squaredLength = x, Pt.negate = function(C, k) {
          return C[0] = -k[0], C[1] = -k[1], C[2] = -k[2], C;
        }, Pt.inverse = function(C, k) {
          return C[0] = 1 / k[0], C[1] = 1 / k[1], C[2] = 1 / k[2], C;
        }, Pt.normalize = function(C, k) {
          var V = k[0], U = k[1], q = k[2], $ = V * V + U * U + q * q;
          return $ > 0 && ($ = 1 / Math.sqrt($)), C[0] = k[0] * $, C[1] = k[1] * $, C[2] = k[2] * $, C;
        }, Pt.dot = P, Pt.cross = function(C, k, V) {
          var U = k[0], q = k[1], $ = k[2], H = V[0], K = V[1], Q = V[2];
          return C[0] = q * Q - $ * K, C[1] = $ * H - U * Q, C[2] = U * K - q * H, C;
        }, Pt.lerp = function(C, k, V, U) {
          var q = k[0], $ = k[1], H = k[2];
          return C[0] = q + U * (V[0] - q), C[1] = $ + U * (V[1] - $), C[2] = H + U * (V[2] - H), C;
        }, Pt.hermite = function(C, k, V, U, q, $) {
          var H = $ * $, K = H * (2 * $ - 3) + 1, Q = H * ($ - 2) + $, ie = H * ($ - 1), fe = H * (3 - 2 * $);
          return C[0] = k[0] * K + V[0] * Q + U[0] * ie + q[0] * fe, C[1] = k[1] * K + V[1] * Q + U[1] * ie + q[1] * fe, C[2] = k[2] * K + V[2] * Q + U[2] * ie + q[2] * fe, C;
        }, Pt.bezier = function(C, k, V, U, q, $) {
          var H = 1 - $, K = H * H, Q = $ * $, ie = K * H, fe = 3 * $ * K, de = 3 * Q * H, ue = Q * $;
          return C[0] = k[0] * ie + V[0] * fe + U[0] * de + q[0] * ue, C[1] = k[1] * ie + V[1] * fe + U[1] * de + q[1] * ue, C[2] = k[2] * ie + V[2] * fe + U[2] * de + q[2] * ue, C;
        }, Pt.random = function(C, k) {
          k = k || 1;
          var V = 2 * e.RANDOM() * Math.PI, U = 2 * e.RANDOM() - 1, q = Math.sqrt(1 - U * U) * k;
          return C[0] = Math.cos(V) * q, C[1] = Math.sin(V) * q, C[2] = U * k, C;
        }, Pt.transformMat4 = function(C, k, V) {
          var U = k[0], q = k[1], $ = k[2], H = V[3] * U + V[7] * q + V[11] * $ + V[15];
          return C[0] = (V[0] * U + V[4] * q + V[8] * $ + V[12]) / (H = H || 1), C[1] = (V[1] * U + V[5] * q + V[9] * $ + V[13]) / H, C[2] = (V[2] * U + V[6] * q + V[10] * $ + V[14]) / H, C;
        }, Pt.transformMat3 = function(C, k, V) {
          var U = k[0], q = k[1], $ = k[2];
          return C[0] = U * V[0] + q * V[3] + $ * V[6], C[1] = U * V[1] + q * V[4] + $ * V[7], C[2] = U * V[2] + q * V[5] + $ * V[8], C;
        }, Pt.transformQuat = function(C, k, V) {
          var U = V[0], q = V[1], $ = V[2], H = k[0], K = k[1], Q = k[2], ie = q * Q - $ * K, fe = $ * H - U * Q, de = U * K - q * H, ue = q * de - $ * fe, Se = $ * ie - U * de, me = U * fe - q * ie, Ee = 2 * V[3];
          return fe *= Ee, de *= Ee, Se *= 2, me *= 2, C[0] = H + (ie *= Ee) + (ue *= 2), C[1] = K + fe + Se, C[2] = Q + de + me, C;
        }, Pt.rotateX = function(C, k, V, U) {
          var q = [], $ = [];
          return q[0] = k[0] - V[0], q[1] = k[1] - V[1], q[2] = k[2] - V[2], $[0] = q[0], $[1] = q[1] * Math.cos(U) - q[2] * Math.sin(U), $[2] = q[1] * Math.sin(U) + q[2] * Math.cos(U), C[0] = $[0] + V[0], C[1] = $[1] + V[1], C[2] = $[2] + V[2], C;
        }, Pt.rotateY = function(C, k, V, U) {
          var q = [], $ = [];
          return q[0] = k[0] - V[0], q[1] = k[1] - V[1], q[2] = k[2] - V[2], $[0] = q[2] * Math.sin(U) + q[0] * Math.cos(U), $[1] = q[1], $[2] = q[2] * Math.cos(U) - q[0] * Math.sin(U), C[0] = $[0] + V[0], C[1] = $[1] + V[1], C[2] = $[2] + V[2], C;
        }, Pt.rotateZ = function(C, k, V, U) {
          var q = [], $ = [];
          return q[0] = k[0] - V[0], q[1] = k[1] - V[1], q[2] = k[2] - V[2], $[0] = q[0] * Math.cos(U) - q[1] * Math.sin(U), $[1] = q[0] * Math.sin(U) + q[1] * Math.cos(U), $[2] = q[2], C[0] = $[0] + V[0], C[1] = $[1] + V[1], C[2] = $[2] + V[2], C;
        }, Pt.angle = function(C, k) {
          var V = C[0], U = C[1], q = C[2], $ = k[0], H = k[1], K = k[2], Q = Math.sqrt(V * V + U * U + q * q) * Math.sqrt($ * $ + H * H + K * K), ie = Q && P(C, k) / Q;
          return Math.acos(Math.min(Math.max(ie, -1), 1));
        }, Pt.zero = function(C) {
          return C[0] = 0, C[1] = 0, C[2] = 0, C;
        }, Pt.str = function(C) {
          return "vec3(" + C[0] + ", " + C[1] + ", " + C[2] + ")";
        }, Pt.exactEquals = function(C, k) {
          return C[0] === k[0] && C[1] === k[1] && C[2] === k[2];
        }, Pt.equals = function(C, k) {
          var V = C[0], U = C[1], q = C[2], $ = k[0], H = k[1], K = k[2];
          return Math.abs(V - $) <= e.EPSILON * Math.max(1, Math.abs(V), Math.abs($)) && Math.abs(U - H) <= e.EPSILON * Math.max(1, Math.abs(U), Math.abs(H)) && Math.abs(q - K) <= e.EPSILON * Math.max(1, Math.abs(q), Math.abs(K));
        }, Pt.forEach = Pt.sqrLen = Pt.len = Pt.sqrDist = Pt.dist = Pt.div = Pt.mul = Pt.sub = void 0;
        var e = function(C, k) {
          if (C && C.__esModule)
            return C;
          if (C === null || r(C) !== "object" && typeof C != "function")
            return { default: C };
          var V = n(void 0);
          if (V && V.has(C))
            return V.get(C);
          var U = {}, q = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var $ in C)
            if ($ !== "default" && Object.prototype.hasOwnProperty.call(C, $)) {
              var H = q ? Object.getOwnPropertyDescriptor(C, $) : null;
              H && (H.get || H.set) ? Object.defineProperty(U, $, H) : U[$] = C[$];
            }
          return U.default = C, V && V.set(C, U), U;
        }(ae());
        function n(C) {
          if (typeof WeakMap != "function")
            return null;
          var k = /* @__PURE__ */ new WeakMap(), V = /* @__PURE__ */ new WeakMap();
          return (n = function(U) {
            return U ? V : k;
          })(C);
        }
        function o() {
          var C = new e.ARRAY_TYPE(3);
          return e.ARRAY_TYPE != Float32Array && (C[0] = 0, C[1] = 0, C[2] = 0), C;
        }
        function u(C) {
          return Math.hypot(C[0], C[1], C[2]);
        }
        function l(C, k, V) {
          return C[0] = k[0] - V[0], C[1] = k[1] - V[1], C[2] = k[2] - V[2], C;
        }
        function f(C, k, V) {
          return C[0] = k[0] * V[0], C[1] = k[1] * V[1], C[2] = k[2] * V[2], C;
        }
        function v(C, k, V) {
          return C[0] = k[0] / V[0], C[1] = k[1] / V[1], C[2] = k[2] / V[2], C;
        }
        function S(C, k) {
          return Math.hypot(k[0] - C[0], k[1] - C[1], k[2] - C[2]);
        }
        function D(C, k) {
          var V = k[0] - C[0], U = k[1] - C[1], q = k[2] - C[2];
          return V * V + U * U + q * q;
        }
        function x(C) {
          var k = C[0], V = C[1], U = C[2];
          return k * k + V * V + U * U;
        }
        function P(C, k) {
          return C[0] * k[0] + C[1] * k[1] + C[2] * k[2];
        }
        Pt.sub = l, Pt.mul = f, Pt.div = v, Pt.dist = S, Pt.sqrDist = D, Pt.len = u, Pt.sqrLen = x;
        var I, M = (I = o(), function(C, k, V, U, q, $) {
          var H, K;
          for (k || (k = 3), V || (V = 0), K = U ? Math.min(U * k + V, C.length) : C.length, H = V; H < K; H += k)
            I[0] = C[H], I[1] = C[H + 1], I[2] = C[H + 2], q(I, I, $), C[H] = I[0], C[H + 1] = I[1], C[H + 2] = I[2];
          return C;
        });
        return Pt.forEach = M, Pt;
      }
      var Pn, hn, Ht = {};
      function Si() {
        if (Pn)
          return Ht;
        function r(M) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(C) {
            return typeof C;
          } : function(C) {
            return C && typeof Symbol == "function" && C.constructor === Symbol && C !== Symbol.prototype ? "symbol" : typeof C;
          }, r(M);
        }
        Pn = 1, Object.defineProperty(Ht, "__esModule", { value: !0 }), Ht.create = o, Ht.clone = function(M) {
          var C = new e.ARRAY_TYPE(4);
          return C[0] = M[0], C[1] = M[1], C[2] = M[2], C[3] = M[3], C;
        }, Ht.fromValues = function(M, C, k, V) {
          var U = new e.ARRAY_TYPE(4);
          return U[0] = M, U[1] = C, U[2] = k, U[3] = V, U;
        }, Ht.copy = function(M, C) {
          return M[0] = C[0], M[1] = C[1], M[2] = C[2], M[3] = C[3], M;
        }, Ht.set = function(M, C, k, V, U) {
          return M[0] = C, M[1] = k, M[2] = V, M[3] = U, M;
        }, Ht.add = function(M, C, k) {
          return M[0] = C[0] + k[0], M[1] = C[1] + k[1], M[2] = C[2] + k[2], M[3] = C[3] + k[3], M;
        }, Ht.subtract = u, Ht.multiply = l, Ht.divide = f, Ht.ceil = function(M, C) {
          return M[0] = Math.ceil(C[0]), M[1] = Math.ceil(C[1]), M[2] = Math.ceil(C[2]), M[3] = Math.ceil(C[3]), M;
        }, Ht.floor = function(M, C) {
          return M[0] = Math.floor(C[0]), M[1] = Math.floor(C[1]), M[2] = Math.floor(C[2]), M[3] = Math.floor(C[3]), M;
        }, Ht.min = function(M, C, k) {
          return M[0] = Math.min(C[0], k[0]), M[1] = Math.min(C[1], k[1]), M[2] = Math.min(C[2], k[2]), M[3] = Math.min(C[3], k[3]), M;
        }, Ht.max = function(M, C, k) {
          return M[0] = Math.max(C[0], k[0]), M[1] = Math.max(C[1], k[1]), M[2] = Math.max(C[2], k[2]), M[3] = Math.max(C[3], k[3]), M;
        }, Ht.round = function(M, C) {
          return M[0] = Math.round(C[0]), M[1] = Math.round(C[1]), M[2] = Math.round(C[2]), M[3] = Math.round(C[3]), M;
        }, Ht.scale = function(M, C, k) {
          return M[0] = C[0] * k, M[1] = C[1] * k, M[2] = C[2] * k, M[3] = C[3] * k, M;
        }, Ht.scaleAndAdd = function(M, C, k, V) {
          return M[0] = C[0] + k[0] * V, M[1] = C[1] + k[1] * V, M[2] = C[2] + k[2] * V, M[3] = C[3] + k[3] * V, M;
        }, Ht.distance = v, Ht.squaredDistance = S, Ht.length = D, Ht.squaredLength = x, Ht.negate = function(M, C) {
          return M[0] = -C[0], M[1] = -C[1], M[2] = -C[2], M[3] = -C[3], M;
        }, Ht.inverse = function(M, C) {
          return M[0] = 1 / C[0], M[1] = 1 / C[1], M[2] = 1 / C[2], M[3] = 1 / C[3], M;
        }, Ht.normalize = function(M, C) {
          var k = C[0], V = C[1], U = C[2], q = C[3], $ = k * k + V * V + U * U + q * q;
          return $ > 0 && ($ = 1 / Math.sqrt($)), M[0] = k * $, M[1] = V * $, M[2] = U * $, M[3] = q * $, M;
        }, Ht.dot = function(M, C) {
          return M[0] * C[0] + M[1] * C[1] + M[2] * C[2] + M[3] * C[3];
        }, Ht.cross = function(M, C, k, V) {
          var U = k[0] * V[1] - k[1] * V[0], q = k[0] * V[2] - k[2] * V[0], $ = k[0] * V[3] - k[3] * V[0], H = k[1] * V[2] - k[2] * V[1], K = k[1] * V[3] - k[3] * V[1], Q = k[2] * V[3] - k[3] * V[2], ie = C[0], fe = C[1], de = C[2], ue = C[3];
          return M[0] = fe * Q - de * K + ue * H, M[1] = -ie * Q + de * $ - ue * q, M[2] = ie * K - fe * $ + ue * U, M[3] = -ie * H + fe * q - de * U, M;
        }, Ht.lerp = function(M, C, k, V) {
          var U = C[0], q = C[1], $ = C[2], H = C[3];
          return M[0] = U + V * (k[0] - U), M[1] = q + V * (k[1] - q), M[2] = $ + V * (k[2] - $), M[3] = H + V * (k[3] - H), M;
        }, Ht.random = function(M, C) {
          var k, V, U, q, $, H;
          C = C || 1;
          do
            $ = (k = 2 * e.RANDOM() - 1) * k + (V = 2 * e.RANDOM() - 1) * V;
          while ($ >= 1);
          do
            H = (U = 2 * e.RANDOM() - 1) * U + (q = 2 * e.RANDOM() - 1) * q;
          while (H >= 1);
          var K = Math.sqrt((1 - $) / H);
          return M[0] = C * k, M[1] = C * V, M[2] = C * U * K, M[3] = C * q * K, M;
        }, Ht.transformMat4 = function(M, C, k) {
          var V = C[0], U = C[1], q = C[2], $ = C[3];
          return M[0] = k[0] * V + k[4] * U + k[8] * q + k[12] * $, M[1] = k[1] * V + k[5] * U + k[9] * q + k[13] * $, M[2] = k[2] * V + k[6] * U + k[10] * q + k[14] * $, M[3] = k[3] * V + k[7] * U + k[11] * q + k[15] * $, M;
        }, Ht.transformQuat = function(M, C, k) {
          var V = C[0], U = C[1], q = C[2], $ = k[0], H = k[1], K = k[2], Q = k[3], ie = Q * V + H * q - K * U, fe = Q * U + K * V - $ * q, de = Q * q + $ * U - H * V, ue = -$ * V - H * U - K * q;
          return M[0] = ie * Q + ue * -$ + fe * -K - de * -H, M[1] = fe * Q + ue * -H + de * -$ - ie * -K, M[2] = de * Q + ue * -K + ie * -H - fe * -$, M[3] = C[3], M;
        }, Ht.zero = function(M) {
          return M[0] = 0, M[1] = 0, M[2] = 0, M[3] = 0, M;
        }, Ht.str = function(M) {
          return "vec4(" + M[0] + ", " + M[1] + ", " + M[2] + ", " + M[3] + ")";
        }, Ht.exactEquals = function(M, C) {
          return M[0] === C[0] && M[1] === C[1] && M[2] === C[2] && M[3] === C[3];
        }, Ht.equals = function(M, C) {
          var k = M[0], V = M[1], U = M[2], q = M[3], $ = C[0], H = C[1], K = C[2], Q = C[3];
          return Math.abs(k - $) <= e.EPSILON * Math.max(1, Math.abs(k), Math.abs($)) && Math.abs(V - H) <= e.EPSILON * Math.max(1, Math.abs(V), Math.abs(H)) && Math.abs(U - K) <= e.EPSILON * Math.max(1, Math.abs(U), Math.abs(K)) && Math.abs(q - Q) <= e.EPSILON * Math.max(1, Math.abs(q), Math.abs(Q));
        }, Ht.forEach = Ht.sqrLen = Ht.len = Ht.sqrDist = Ht.dist = Ht.div = Ht.mul = Ht.sub = void 0;
        var e = function(M, C) {
          if (M && M.__esModule)
            return M;
          if (M === null || r(M) !== "object" && typeof M != "function")
            return { default: M };
          var k = n(void 0);
          if (k && k.has(M))
            return k.get(M);
          var V = {}, U = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var q in M)
            if (q !== "default" && Object.prototype.hasOwnProperty.call(M, q)) {
              var $ = U ? Object.getOwnPropertyDescriptor(M, q) : null;
              $ && ($.get || $.set) ? Object.defineProperty(V, q, $) : V[q] = M[q];
            }
          return V.default = M, k && k.set(M, V), V;
        }(ae());
        function n(M) {
          if (typeof WeakMap != "function")
            return null;
          var C = /* @__PURE__ */ new WeakMap(), k = /* @__PURE__ */ new WeakMap();
          return (n = function(V) {
            return V ? k : C;
          })(M);
        }
        function o() {
          var M = new e.ARRAY_TYPE(4);
          return e.ARRAY_TYPE != Float32Array && (M[0] = 0, M[1] = 0, M[2] = 0, M[3] = 0), M;
        }
        function u(M, C, k) {
          return M[0] = C[0] - k[0], M[1] = C[1] - k[1], M[2] = C[2] - k[2], M[3] = C[3] - k[3], M;
        }
        function l(M, C, k) {
          return M[0] = C[0] * k[0], M[1] = C[1] * k[1], M[2] = C[2] * k[2], M[3] = C[3] * k[3], M;
        }
        function f(M, C, k) {
          return M[0] = C[0] / k[0], M[1] = C[1] / k[1], M[2] = C[2] / k[2], M[3] = C[3] / k[3], M;
        }
        function v(M, C) {
          return Math.hypot(C[0] - M[0], C[1] - M[1], C[2] - M[2], C[3] - M[3]);
        }
        function S(M, C) {
          var k = C[0] - M[0], V = C[1] - M[1], U = C[2] - M[2], q = C[3] - M[3];
          return k * k + V * V + U * U + q * q;
        }
        function D(M) {
          return Math.hypot(M[0], M[1], M[2], M[3]);
        }
        function x(M) {
          var C = M[0], k = M[1], V = M[2], U = M[3];
          return C * C + k * k + V * V + U * U;
        }
        Ht.sub = u, Ht.mul = l, Ht.div = f, Ht.dist = v, Ht.sqrDist = S, Ht.len = D, Ht.sqrLen = x;
        var P, I = (P = o(), function(M, C, k, V, U, q) {
          var $, H;
          for (C || (C = 4), k || (k = 0), H = V ? Math.min(V * C + k, M.length) : M.length, $ = k; $ < H; $ += C)
            P[0] = M[$], P[1] = M[$ + 1], P[2] = M[$ + 2], P[3] = M[$ + 3], U(P, P, q), M[$] = P[0], M[$ + 1] = P[1], M[$ + 2] = P[2], M[$ + 3] = P[3];
          return M;
        });
        return Ht.forEach = I, Ht;
      }
      function Ji() {
        if (hn)
          return kt;
        function r(me) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(Ee) {
            return typeof Ee;
          } : function(Ee) {
            return Ee && typeof Symbol == "function" && Ee.constructor === Symbol && Ee !== Symbol.prototype ? "symbol" : typeof Ee;
          }, r(me);
        }
        hn = 1, Object.defineProperty(kt, "__esModule", { value: !0 }), kt.create = v, kt.identity = function(me) {
          return me[0] = 0, me[1] = 0, me[2] = 0, me[3] = 1, me;
        }, kt.setAxisAngle = S, kt.getAxisAngle = function(me, Ee) {
          var ze = 2 * Math.acos(Ee[3]), Ie = Math.sin(ze / 2);
          return Ie > e.EPSILON ? (me[0] = Ee[0] / Ie, me[1] = Ee[1] / Ie, me[2] = Ee[2] / Ie) : (me[0] = 1, me[1] = 0, me[2] = 0), ze;
        }, kt.getAngle = function(me, Ee) {
          var ze = k(me, Ee);
          return Math.acos(2 * ze * ze - 1);
        }, kt.multiply = D, kt.rotateX = function(me, Ee, ze) {
          ze *= 0.5;
          var Ie = Ee[0], Re = Ee[1], Ve = Ee[2], Ue = Ee[3], Fe = Math.sin(ze), et = Math.cos(ze);
          return me[0] = Ie * et + Ue * Fe, me[1] = Re * et + Ve * Fe, me[2] = Ve * et - Re * Fe, me[3] = Ue * et - Ie * Fe, me;
        }, kt.rotateY = function(me, Ee, ze) {
          ze *= 0.5;
          var Ie = Ee[0], Re = Ee[1], Ve = Ee[2], Ue = Ee[3], Fe = Math.sin(ze), et = Math.cos(ze);
          return me[0] = Ie * et - Ve * Fe, me[1] = Re * et + Ue * Fe, me[2] = Ve * et + Ie * Fe, me[3] = Ue * et - Re * Fe, me;
        }, kt.rotateZ = function(me, Ee, ze) {
          ze *= 0.5;
          var Ie = Ee[0], Re = Ee[1], Ve = Ee[2], Ue = Ee[3], Fe = Math.sin(ze), et = Math.cos(ze);
          return me[0] = Ie * et + Re * Fe, me[1] = Re * et - Ie * Fe, me[2] = Ve * et + Ue * Fe, me[3] = Ue * et - Ve * Fe, me;
        }, kt.calculateW = function(me, Ee) {
          var ze = Ee[0], Ie = Ee[1], Re = Ee[2];
          return me[0] = ze, me[1] = Ie, me[2] = Re, me[3] = Math.sqrt(Math.abs(1 - ze * ze - Ie * Ie - Re * Re)), me;
        }, kt.exp = x, kt.ln = P, kt.pow = function(me, Ee, ze) {
          return P(me, Ee), C(me, me, ze), x(me, me), me;
        }, kt.slerp = I, kt.random = function(me) {
          var Ee = e.RANDOM(), ze = e.RANDOM(), Ie = e.RANDOM(), Re = Math.sqrt(1 - Ee), Ve = Math.sqrt(Ee);
          return me[0] = Re * Math.sin(2 * Math.PI * ze), me[1] = Re * Math.cos(2 * Math.PI * ze), me[2] = Ve * Math.sin(2 * Math.PI * Ie), me[3] = Ve * Math.cos(2 * Math.PI * Ie), me;
        }, kt.invert = function(me, Ee) {
          var ze = Ee[0], Ie = Ee[1], Re = Ee[2], Ve = Ee[3], Ue = ze * ze + Ie * Ie + Re * Re + Ve * Ve, Fe = Ue ? 1 / Ue : 0;
          return me[0] = -ze * Fe, me[1] = -Ie * Fe, me[2] = -Re * Fe, me[3] = Ve * Fe, me;
        }, kt.conjugate = function(me, Ee) {
          return me[0] = -Ee[0], me[1] = -Ee[1], me[2] = -Ee[2], me[3] = Ee[3], me;
        }, kt.fromMat3 = M, kt.fromEuler = function(me, Ee, ze, Ie) {
          var Re = 0.5 * Math.PI / 180;
          Ee *= Re, ze *= Re, Ie *= Re;
          var Ve = Math.sin(Ee), Ue = Math.cos(Ee), Fe = Math.sin(ze), et = Math.cos(ze), dt = Math.sin(Ie), tt = Math.cos(Ie);
          return me[0] = Ve * et * tt - Ue * Fe * dt, me[1] = Ue * Fe * tt + Ve * et * dt, me[2] = Ue * et * dt - Ve * Fe * tt, me[3] = Ue * et * tt + Ve * Fe * dt, me;
        }, kt.str = function(me) {
          return "quat(" + me[0] + ", " + me[1] + ", " + me[2] + ", " + me[3] + ")";
        }, kt.setAxes = kt.sqlerp = kt.rotationTo = kt.equals = kt.exactEquals = kt.normalize = kt.sqrLen = kt.squaredLength = kt.len = kt.length = kt.lerp = kt.dot = kt.scale = kt.mul = kt.add = kt.set = kt.copy = kt.fromValues = kt.clone = void 0;
        var e = f(ae()), n = f(gt()), o = f(Mi()), u = f(Si());
        function l(me) {
          if (typeof WeakMap != "function")
            return null;
          var Ee = /* @__PURE__ */ new WeakMap(), ze = /* @__PURE__ */ new WeakMap();
          return (l = function(Ie) {
            return Ie ? ze : Ee;
          })(me);
        }
        function f(me, Ee) {
          if (me && me.__esModule)
            return me;
          if (me === null || r(me) !== "object" && typeof me != "function")
            return { default: me };
          var ze = l(Ee);
          if (ze && ze.has(me))
            return ze.get(me);
          var Ie = {}, Re = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var Ve in me)
            if (Ve !== "default" && Object.prototype.hasOwnProperty.call(me, Ve)) {
              var Ue = Re ? Object.getOwnPropertyDescriptor(me, Ve) : null;
              Ue && (Ue.get || Ue.set) ? Object.defineProperty(Ie, Ve, Ue) : Ie[Ve] = me[Ve];
            }
          return Ie.default = me, ze && ze.set(me, Ie), Ie;
        }
        function v() {
          var me = new e.ARRAY_TYPE(4);
          return e.ARRAY_TYPE != Float32Array && (me[0] = 0, me[1] = 0, me[2] = 0), me[3] = 1, me;
        }
        function S(me, Ee, ze) {
          ze *= 0.5;
          var Ie = Math.sin(ze);
          return me[0] = Ie * Ee[0], me[1] = Ie * Ee[1], me[2] = Ie * Ee[2], me[3] = Math.cos(ze), me;
        }
        function D(me, Ee, ze) {
          var Ie = Ee[0], Re = Ee[1], Ve = Ee[2], Ue = Ee[3], Fe = ze[0], et = ze[1], dt = ze[2], tt = ze[3];
          return me[0] = Ie * tt + Ue * Fe + Re * dt - Ve * et, me[1] = Re * tt + Ue * et + Ve * Fe - Ie * dt, me[2] = Ve * tt + Ue * dt + Ie * et - Re * Fe, me[3] = Ue * tt - Ie * Fe - Re * et - Ve * dt, me;
        }
        function x(me, Ee) {
          var ze = Ee[0], Ie = Ee[1], Re = Ee[2], Ve = Ee[3], Ue = Math.sqrt(ze * ze + Ie * Ie + Re * Re), Fe = Math.exp(Ve), et = Ue > 0 ? Fe * Math.sin(Ue) / Ue : 0;
          return me[0] = ze * et, me[1] = Ie * et, me[2] = Re * et, me[3] = Fe * Math.cos(Ue), me;
        }
        function P(me, Ee) {
          var ze = Ee[0], Ie = Ee[1], Re = Ee[2], Ve = Ee[3], Ue = Math.sqrt(ze * ze + Ie * Ie + Re * Re), Fe = Ue > 0 ? Math.atan2(Ue, Ve) / Ue : 0;
          return me[0] = ze * Fe, me[1] = Ie * Fe, me[2] = Re * Fe, me[3] = 0.5 * Math.log(ze * ze + Ie * Ie + Re * Re + Ve * Ve), me;
        }
        function I(me, Ee, ze, Ie) {
          var Re, Ve, Ue, Fe, et, dt = Ee[0], tt = Ee[1], Mt = Ee[2], wt = Ee[3], At = ze[0], rt = ze[1], Ut = ze[2], St = ze[3];
          return (Ve = dt * At + tt * rt + Mt * Ut + wt * St) < 0 && (Ve = -Ve, At = -At, rt = -rt, Ut = -Ut, St = -St), 1 - Ve > e.EPSILON ? (Re = Math.acos(Ve), Ue = Math.sin(Re), Fe = Math.sin((1 - Ie) * Re) / Ue, et = Math.sin(Ie * Re) / Ue) : (Fe = 1 - Ie, et = Ie), me[0] = Fe * dt + et * At, me[1] = Fe * tt + et * rt, me[2] = Fe * Mt + et * Ut, me[3] = Fe * wt + et * St, me;
        }
        function M(me, Ee) {
          var ze, Ie = Ee[0] + Ee[4] + Ee[8];
          if (Ie > 0)
            ze = Math.sqrt(Ie + 1), me[3] = 0.5 * ze, me[0] = (Ee[5] - Ee[7]) * (ze = 0.5 / ze), me[1] = (Ee[6] - Ee[2]) * ze, me[2] = (Ee[1] - Ee[3]) * ze;
          else {
            var Re = 0;
            Ee[4] > Ee[0] && (Re = 1), Ee[8] > Ee[3 * Re + Re] && (Re = 2);
            var Ve = (Re + 1) % 3, Ue = (Re + 2) % 3;
            ze = Math.sqrt(Ee[3 * Re + Re] - Ee[3 * Ve + Ve] - Ee[3 * Ue + Ue] + 1), me[Re] = 0.5 * ze, me[3] = (Ee[3 * Ve + Ue] - Ee[3 * Ue + Ve]) * (ze = 0.5 / ze), me[Ve] = (Ee[3 * Ve + Re] + Ee[3 * Re + Ve]) * ze, me[Ue] = (Ee[3 * Ue + Re] + Ee[3 * Re + Ue]) * ze;
          }
          return me;
        }
        kt.clone = u.clone, kt.fromValues = u.fromValues, kt.copy = u.copy, kt.set = u.set, kt.add = u.add, kt.mul = D;
        var C = u.scale;
        kt.scale = C;
        var k = u.dot;
        kt.dot = k, kt.lerp = u.lerp;
        var V = u.length;
        kt.length = V, kt.len = V;
        var U = u.squaredLength;
        kt.squaredLength = U, kt.sqrLen = U;
        var q = u.normalize;
        kt.normalize = q, kt.exactEquals = u.exactEquals, kt.equals = u.equals;
        var $, H, K, Q = ($ = o.create(), H = o.fromValues(1, 0, 0), K = o.fromValues(0, 1, 0), function(me, Ee, ze) {
          var Ie = o.dot(Ee, ze);
          return Ie < -0.999999 ? (o.cross($, H, Ee), o.len($) < 1e-6 && o.cross($, K, Ee), o.normalize($, $), S(me, $, Math.PI), me) : Ie > 0.999999 ? (me[0] = 0, me[1] = 0, me[2] = 0, me[3] = 1, me) : (o.cross($, Ee, ze), me[0] = $[0], me[1] = $[1], me[2] = $[2], me[3] = 1 + Ie, q(me, me));
        });
        kt.rotationTo = Q;
        var ie, fe, de = (ie = v(), fe = v(), function(me, Ee, ze, Ie, Re, Ve) {
          return I(ie, Ee, Re, Ve), I(fe, ze, Ie, Ve), I(me, ie, fe, 2 * Ve * (1 - Ve)), me;
        });
        kt.sqlerp = de;
        var ue, Se = (ue = n.create(), function(me, Ee, ze, Ie) {
          return ue[0] = ze[0], ue[3] = ze[1], ue[6] = ze[2], ue[1] = Ie[0], ue[4] = Ie[1], ue[7] = Ie[2], ue[2] = -Ee[0], ue[5] = -Ee[1], ue[8] = -Ee[2], q(me, M(me, ue));
        });
        return kt.setAxes = Se, kt;
      }
      var fi, jt = {};
      function ni() {
        if (fi)
          return jt;
        function r(I) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(M) {
            return typeof M;
          } : function(M) {
            return M && typeof Symbol == "function" && M.constructor === Symbol && M !== Symbol.prototype ? "symbol" : typeof M;
          }, r(I);
        }
        fi = 1, Object.defineProperty(jt, "__esModule", { value: !0 }), jt.create = function() {
          var I = new e.ARRAY_TYPE(8);
          return e.ARRAY_TYPE != Float32Array && (I[0] = 0, I[1] = 0, I[2] = 0, I[4] = 0, I[5] = 0, I[6] = 0, I[7] = 0), I[3] = 1, I;
        }, jt.clone = function(I) {
          var M = new e.ARRAY_TYPE(8);
          return M[0] = I[0], M[1] = I[1], M[2] = I[2], M[3] = I[3], M[4] = I[4], M[5] = I[5], M[6] = I[6], M[7] = I[7], M;
        }, jt.fromValues = function(I, M, C, k, V, U, q, $) {
          var H = new e.ARRAY_TYPE(8);
          return H[0] = I, H[1] = M, H[2] = C, H[3] = k, H[4] = V, H[5] = U, H[6] = q, H[7] = $, H;
        }, jt.fromRotationTranslationValues = function(I, M, C, k, V, U, q) {
          var $ = new e.ARRAY_TYPE(8);
          $[0] = I, $[1] = M, $[2] = C, $[3] = k;
          var H = 0.5 * V, K = 0.5 * U, Q = 0.5 * q;
          return $[4] = H * k + K * C - Q * M, $[5] = K * k + Q * I - H * C, $[6] = Q * k + H * M - K * I, $[7] = -H * I - K * M - Q * C, $;
        }, jt.fromRotationTranslation = f, jt.fromTranslation = function(I, M) {
          return I[0] = 0, I[1] = 0, I[2] = 0, I[3] = 1, I[4] = 0.5 * M[0], I[5] = 0.5 * M[1], I[6] = 0.5 * M[2], I[7] = 0, I;
        }, jt.fromRotation = function(I, M) {
          return I[0] = M[0], I[1] = M[1], I[2] = M[2], I[3] = M[3], I[4] = 0, I[5] = 0, I[6] = 0, I[7] = 0, I;
        }, jt.fromMat4 = function(I, M) {
          var C = n.create();
          o.getRotation(C, M);
          var k = new e.ARRAY_TYPE(3);
          return o.getTranslation(k, M), f(I, C, k), I;
        }, jt.copy = v, jt.identity = function(I) {
          return I[0] = 0, I[1] = 0, I[2] = 0, I[3] = 1, I[4] = 0, I[5] = 0, I[6] = 0, I[7] = 0, I;
        }, jt.set = function(I, M, C, k, V, U, q, $, H) {
          return I[0] = M, I[1] = C, I[2] = k, I[3] = V, I[4] = U, I[5] = q, I[6] = $, I[7] = H, I;
        }, jt.getDual = function(I, M) {
          return I[0] = M[4], I[1] = M[5], I[2] = M[6], I[3] = M[7], I;
        }, jt.setDual = function(I, M) {
          return I[4] = M[0], I[5] = M[1], I[6] = M[2], I[7] = M[3], I;
        }, jt.getTranslation = function(I, M) {
          var C = M[4], k = M[5], V = M[6], U = M[7], q = -M[0], $ = -M[1], H = -M[2], K = M[3];
          return I[0] = 2 * (C * K + U * q + k * H - V * $), I[1] = 2 * (k * K + U * $ + V * q - C * H), I[2] = 2 * (V * K + U * H + C * $ - k * q), I;
        }, jt.translate = function(I, M, C) {
          var k = M[0], V = M[1], U = M[2], q = M[3], $ = 0.5 * C[0], H = 0.5 * C[1], K = 0.5 * C[2], Q = M[4], ie = M[5], fe = M[6], de = M[7];
          return I[0] = k, I[1] = V, I[2] = U, I[3] = q, I[4] = q * $ + V * K - U * H + Q, I[5] = q * H + U * $ - k * K + ie, I[6] = q * K + k * H - V * $ + fe, I[7] = -k * $ - V * H - U * K + de, I;
        }, jt.rotateX = function(I, M, C) {
          var k = -M[0], V = -M[1], U = -M[2], q = M[3], $ = M[4], H = M[5], K = M[6], Q = M[7], ie = $ * q + Q * k + H * U - K * V, fe = H * q + Q * V + K * k - $ * U, de = K * q + Q * U + $ * V - H * k, ue = Q * q - $ * k - H * V - K * U;
          return n.rotateX(I, M, C), I[4] = ie * (q = I[3]) + ue * (k = I[0]) + fe * (U = I[2]) - de * (V = I[1]), I[5] = fe * q + ue * V + de * k - ie * U, I[6] = de * q + ue * U + ie * V - fe * k, I[7] = ue * q - ie * k - fe * V - de * U, I;
        }, jt.rotateY = function(I, M, C) {
          var k = -M[0], V = -M[1], U = -M[2], q = M[3], $ = M[4], H = M[5], K = M[6], Q = M[7], ie = $ * q + Q * k + H * U - K * V, fe = H * q + Q * V + K * k - $ * U, de = K * q + Q * U + $ * V - H * k, ue = Q * q - $ * k - H * V - K * U;
          return n.rotateY(I, M, C), I[4] = ie * (q = I[3]) + ue * (k = I[0]) + fe * (U = I[2]) - de * (V = I[1]), I[5] = fe * q + ue * V + de * k - ie * U, I[6] = de * q + ue * U + ie * V - fe * k, I[7] = ue * q - ie * k - fe * V - de * U, I;
        }, jt.rotateZ = function(I, M, C) {
          var k = -M[0], V = -M[1], U = -M[2], q = M[3], $ = M[4], H = M[5], K = M[6], Q = M[7], ie = $ * q + Q * k + H * U - K * V, fe = H * q + Q * V + K * k - $ * U, de = K * q + Q * U + $ * V - H * k, ue = Q * q - $ * k - H * V - K * U;
          return n.rotateZ(I, M, C), I[4] = ie * (q = I[3]) + ue * (k = I[0]) + fe * (U = I[2]) - de * (V = I[1]), I[5] = fe * q + ue * V + de * k - ie * U, I[6] = de * q + ue * U + ie * V - fe * k, I[7] = ue * q - ie * k - fe * V - de * U, I;
        }, jt.rotateByQuatAppend = function(I, M, C) {
          var k = C[0], V = C[1], U = C[2], q = C[3], $ = M[0], H = M[1], K = M[2], Q = M[3];
          return I[0] = $ * q + Q * k + H * U - K * V, I[1] = H * q + Q * V + K * k - $ * U, I[2] = K * q + Q * U + $ * V - H * k, I[3] = Q * q - $ * k - H * V - K * U, I[4] = ($ = M[4]) * q + (Q = M[7]) * k + (H = M[5]) * U - (K = M[6]) * V, I[5] = H * q + Q * V + K * k - $ * U, I[6] = K * q + Q * U + $ * V - H * k, I[7] = Q * q - $ * k - H * V - K * U, I;
        }, jt.rotateByQuatPrepend = function(I, M, C) {
          var k = M[0], V = M[1], U = M[2], q = M[3], $ = C[0], H = C[1], K = C[2], Q = C[3];
          return I[0] = k * Q + q * $ + V * K - U * H, I[1] = V * Q + q * H + U * $ - k * K, I[2] = U * Q + q * K + k * H - V * $, I[3] = q * Q - k * $ - V * H - U * K, I[4] = k * (Q = C[7]) + q * ($ = C[4]) + V * (K = C[6]) - U * (H = C[5]), I[5] = V * Q + q * H + U * $ - k * K, I[6] = U * Q + q * K + k * H - V * $, I[7] = q * Q - k * $ - V * H - U * K, I;
        }, jt.rotateAroundAxis = function(I, M, C, k) {
          if (Math.abs(k) < e.EPSILON)
            return v(I, M);
          var V = Math.hypot(C[0], C[1], C[2]);
          k *= 0.5;
          var U = Math.sin(k), q = U * C[0] / V, $ = U * C[1] / V, H = U * C[2] / V, K = Math.cos(k), Q = M[0], ie = M[1], fe = M[2], de = M[3];
          I[0] = Q * K + de * q + ie * H - fe * $, I[1] = ie * K + de * $ + fe * q - Q * H, I[2] = fe * K + de * H + Q * $ - ie * q, I[3] = de * K - Q * q - ie * $ - fe * H;
          var ue = M[4], Se = M[5], me = M[6], Ee = M[7];
          return I[4] = ue * K + Ee * q + Se * H - me * $, I[5] = Se * K + Ee * $ + me * q - ue * H, I[6] = me * K + Ee * H + ue * $ - Se * q, I[7] = Ee * K - ue * q - Se * $ - me * H, I;
        }, jt.add = function(I, M, C) {
          return I[0] = M[0] + C[0], I[1] = M[1] + C[1], I[2] = M[2] + C[2], I[3] = M[3] + C[3], I[4] = M[4] + C[4], I[5] = M[5] + C[5], I[6] = M[6] + C[6], I[7] = M[7] + C[7], I;
        }, jt.multiply = S, jt.scale = function(I, M, C) {
          return I[0] = M[0] * C, I[1] = M[1] * C, I[2] = M[2] * C, I[3] = M[3] * C, I[4] = M[4] * C, I[5] = M[5] * C, I[6] = M[6] * C, I[7] = M[7] * C, I;
        }, jt.lerp = function(I, M, C, k) {
          var V = 1 - k;
          return D(M, C) < 0 && (k = -k), I[0] = M[0] * V + C[0] * k, I[1] = M[1] * V + C[1] * k, I[2] = M[2] * V + C[2] * k, I[3] = M[3] * V + C[3] * k, I[4] = M[4] * V + C[4] * k, I[5] = M[5] * V + C[5] * k, I[6] = M[6] * V + C[6] * k, I[7] = M[7] * V + C[7] * k, I;
        }, jt.invert = function(I, M) {
          var C = P(M);
          return I[0] = -M[0] / C, I[1] = -M[1] / C, I[2] = -M[2] / C, I[3] = M[3] / C, I[4] = -M[4] / C, I[5] = -M[5] / C, I[6] = -M[6] / C, I[7] = M[7] / C, I;
        }, jt.conjugate = function(I, M) {
          return I[0] = -M[0], I[1] = -M[1], I[2] = -M[2], I[3] = M[3], I[4] = -M[4], I[5] = -M[5], I[6] = -M[6], I[7] = M[7], I;
        }, jt.normalize = function(I, M) {
          var C = P(M);
          if (C > 0) {
            C = Math.sqrt(C);
            var k = M[0] / C, V = M[1] / C, U = M[2] / C, q = M[3] / C, $ = M[4], H = M[5], K = M[6], Q = M[7], ie = k * $ + V * H + U * K + q * Q;
            I[0] = k, I[1] = V, I[2] = U, I[3] = q, I[4] = ($ - k * ie) / C, I[5] = (H - V * ie) / C, I[6] = (K - U * ie) / C, I[7] = (Q - q * ie) / C;
          }
          return I;
        }, jt.str = function(I) {
          return "quat2(" + I[0] + ", " + I[1] + ", " + I[2] + ", " + I[3] + ", " + I[4] + ", " + I[5] + ", " + I[6] + ", " + I[7] + ")";
        }, jt.exactEquals = function(I, M) {
          return I[0] === M[0] && I[1] === M[1] && I[2] === M[2] && I[3] === M[3] && I[4] === M[4] && I[5] === M[5] && I[6] === M[6] && I[7] === M[7];
        }, jt.equals = function(I, M) {
          var C = I[0], k = I[1], V = I[2], U = I[3], q = I[4], $ = I[5], H = I[6], K = I[7], Q = M[0], ie = M[1], fe = M[2], de = M[3], ue = M[4], Se = M[5], me = M[6], Ee = M[7];
          return Math.abs(C - Q) <= e.EPSILON * Math.max(1, Math.abs(C), Math.abs(Q)) && Math.abs(k - ie) <= e.EPSILON * Math.max(1, Math.abs(k), Math.abs(ie)) && Math.abs(V - fe) <= e.EPSILON * Math.max(1, Math.abs(V), Math.abs(fe)) && Math.abs(U - de) <= e.EPSILON * Math.max(1, Math.abs(U), Math.abs(de)) && Math.abs(q - ue) <= e.EPSILON * Math.max(1, Math.abs(q), Math.abs(ue)) && Math.abs($ - Se) <= e.EPSILON * Math.max(1, Math.abs($), Math.abs(Se)) && Math.abs(H - me) <= e.EPSILON * Math.max(1, Math.abs(H), Math.abs(me)) && Math.abs(K - Ee) <= e.EPSILON * Math.max(1, Math.abs(K), Math.abs(Ee));
        }, jt.sqrLen = jt.squaredLength = jt.len = jt.length = jt.dot = jt.mul = jt.setReal = jt.getReal = void 0;
        var e = l(ae()), n = l(Ji()), o = l(Gt());
        function u(I) {
          if (typeof WeakMap != "function")
            return null;
          var M = /* @__PURE__ */ new WeakMap(), C = /* @__PURE__ */ new WeakMap();
          return (u = function(k) {
            return k ? C : M;
          })(I);
        }
        function l(I, M) {
          if (I && I.__esModule)
            return I;
          if (I === null || r(I) !== "object" && typeof I != "function")
            return { default: I };
          var C = u(M);
          if (C && C.has(I))
            return C.get(I);
          var k = {}, V = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var U in I)
            if (U !== "default" && Object.prototype.hasOwnProperty.call(I, U)) {
              var q = V ? Object.getOwnPropertyDescriptor(I, U) : null;
              q && (q.get || q.set) ? Object.defineProperty(k, U, q) : k[U] = I[U];
            }
          return k.default = I, C && C.set(I, k), k;
        }
        function f(I, M, C) {
          var k = 0.5 * C[0], V = 0.5 * C[1], U = 0.5 * C[2], q = M[0], $ = M[1], H = M[2], K = M[3];
          return I[0] = q, I[1] = $, I[2] = H, I[3] = K, I[4] = k * K + V * H - U * $, I[5] = V * K + U * q - k * H, I[6] = U * K + k * $ - V * q, I[7] = -k * q - V * $ - U * H, I;
        }
        function v(I, M) {
          return I[0] = M[0], I[1] = M[1], I[2] = M[2], I[3] = M[3], I[4] = M[4], I[5] = M[5], I[6] = M[6], I[7] = M[7], I;
        }
        function S(I, M, C) {
          var k = M[0], V = M[1], U = M[2], q = M[3], $ = C[4], H = C[5], K = C[6], Q = C[7], ie = M[4], fe = M[5], de = M[6], ue = M[7], Se = C[0], me = C[1], Ee = C[2], ze = C[3];
          return I[0] = k * ze + q * Se + V * Ee - U * me, I[1] = V * ze + q * me + U * Se - k * Ee, I[2] = U * ze + q * Ee + k * me - V * Se, I[3] = q * ze - k * Se - V * me - U * Ee, I[4] = k * Q + q * $ + V * K - U * H + ie * ze + ue * Se + fe * Ee - de * me, I[5] = V * Q + q * H + U * $ - k * K + fe * ze + ue * me + de * Se - ie * Ee, I[6] = U * Q + q * K + k * H - V * $ + de * ze + ue * Ee + ie * me - fe * Se, I[7] = q * Q - k * $ - V * H - U * K + ue * ze - ie * Se - fe * me - de * Ee, I;
        }
        jt.getReal = n.copy, jt.setReal = n.copy, jt.mul = S;
        var D = n.dot;
        jt.dot = D;
        var x = n.length;
        jt.length = x, jt.len = x;
        var P = n.squaredLength;
        return jt.squaredLength = P, jt.sqrLen = P, jt;
      }
      var Gi, an, qt = {};
      function ln() {
        if (Gi)
          return qt;
        function r(M) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(C) {
            return typeof C;
          } : function(C) {
            return C && typeof Symbol == "function" && C.constructor === Symbol && C !== Symbol.prototype ? "symbol" : typeof C;
          }, r(M);
        }
        Gi = 1, Object.defineProperty(qt, "__esModule", { value: !0 }), qt.create = o, qt.clone = function(M) {
          var C = new e.ARRAY_TYPE(2);
          return C[0] = M[0], C[1] = M[1], C;
        }, qt.fromValues = function(M, C) {
          var k = new e.ARRAY_TYPE(2);
          return k[0] = M, k[1] = C, k;
        }, qt.copy = function(M, C) {
          return M[0] = C[0], M[1] = C[1], M;
        }, qt.set = function(M, C, k) {
          return M[0] = C, M[1] = k, M;
        }, qt.add = function(M, C, k) {
          return M[0] = C[0] + k[0], M[1] = C[1] + k[1], M;
        }, qt.subtract = u, qt.multiply = l, qt.divide = f, qt.ceil = function(M, C) {
          return M[0] = Math.ceil(C[0]), M[1] = Math.ceil(C[1]), M;
        }, qt.floor = function(M, C) {
          return M[0] = Math.floor(C[0]), M[1] = Math.floor(C[1]), M;
        }, qt.min = function(M, C, k) {
          return M[0] = Math.min(C[0], k[0]), M[1] = Math.min(C[1], k[1]), M;
        }, qt.max = function(M, C, k) {
          return M[0] = Math.max(C[0], k[0]), M[1] = Math.max(C[1], k[1]), M;
        }, qt.round = function(M, C) {
          return M[0] = Math.round(C[0]), M[1] = Math.round(C[1]), M;
        }, qt.scale = function(M, C, k) {
          return M[0] = C[0] * k, M[1] = C[1] * k, M;
        }, qt.scaleAndAdd = function(M, C, k, V) {
          return M[0] = C[0] + k[0] * V, M[1] = C[1] + k[1] * V, M;
        }, qt.distance = v, qt.squaredDistance = S, qt.length = D, qt.squaredLength = x, qt.negate = function(M, C) {
          return M[0] = -C[0], M[1] = -C[1], M;
        }, qt.inverse = function(M, C) {
          return M[0] = 1 / C[0], M[1] = 1 / C[1], M;
        }, qt.normalize = function(M, C) {
          var k = C[0], V = C[1], U = k * k + V * V;
          return U > 0 && (U = 1 / Math.sqrt(U)), M[0] = C[0] * U, M[1] = C[1] * U, M;
        }, qt.dot = function(M, C) {
          return M[0] * C[0] + M[1] * C[1];
        }, qt.cross = function(M, C, k) {
          var V = C[0] * k[1] - C[1] * k[0];
          return M[0] = M[1] = 0, M[2] = V, M;
        }, qt.lerp = function(M, C, k, V) {
          var U = C[0], q = C[1];
          return M[0] = U + V * (k[0] - U), M[1] = q + V * (k[1] - q), M;
        }, qt.random = function(M, C) {
          C = C || 1;
          var k = 2 * e.RANDOM() * Math.PI;
          return M[0] = Math.cos(k) * C, M[1] = Math.sin(k) * C, M;
        }, qt.transformMat2 = function(M, C, k) {
          var V = C[0], U = C[1];
          return M[0] = k[0] * V + k[2] * U, M[1] = k[1] * V + k[3] * U, M;
        }, qt.transformMat2d = function(M, C, k) {
          var V = C[0], U = C[1];
          return M[0] = k[0] * V + k[2] * U + k[4], M[1] = k[1] * V + k[3] * U + k[5], M;
        }, qt.transformMat3 = function(M, C, k) {
          var V = C[0], U = C[1];
          return M[0] = k[0] * V + k[3] * U + k[6], M[1] = k[1] * V + k[4] * U + k[7], M;
        }, qt.transformMat4 = function(M, C, k) {
          var V = C[0], U = C[1];
          return M[0] = k[0] * V + k[4] * U + k[12], M[1] = k[1] * V + k[5] * U + k[13], M;
        }, qt.rotate = function(M, C, k, V) {
          var U = C[0] - k[0], q = C[1] - k[1], $ = Math.sin(V), H = Math.cos(V);
          return M[0] = U * H - q * $ + k[0], M[1] = U * $ + q * H + k[1], M;
        }, qt.angle = function(M, C) {
          var k = M[0], V = M[1], U = C[0], q = C[1], $ = Math.sqrt(k * k + V * V) * Math.sqrt(U * U + q * q);
          return Math.acos(Math.min(Math.max($ && (k * U + V * q) / $, -1), 1));
        }, qt.zero = function(M) {
          return M[0] = 0, M[1] = 0, M;
        }, qt.str = function(M) {
          return "vec2(" + M[0] + ", " + M[1] + ")";
        }, qt.exactEquals = function(M, C) {
          return M[0] === C[0] && M[1] === C[1];
        }, qt.equals = function(M, C) {
          var k = M[0], V = M[1], U = C[0], q = C[1];
          return Math.abs(k - U) <= e.EPSILON * Math.max(1, Math.abs(k), Math.abs(U)) && Math.abs(V - q) <= e.EPSILON * Math.max(1, Math.abs(V), Math.abs(q));
        }, qt.forEach = qt.sqrLen = qt.sqrDist = qt.dist = qt.div = qt.mul = qt.sub = qt.len = void 0;
        var e = function(M, C) {
          if (M && M.__esModule)
            return M;
          if (M === null || r(M) !== "object" && typeof M != "function")
            return { default: M };
          var k = n(void 0);
          if (k && k.has(M))
            return k.get(M);
          var V = {}, U = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var q in M)
            if (q !== "default" && Object.prototype.hasOwnProperty.call(M, q)) {
              var $ = U ? Object.getOwnPropertyDescriptor(M, q) : null;
              $ && ($.get || $.set) ? Object.defineProperty(V, q, $) : V[q] = M[q];
            }
          return V.default = M, k && k.set(M, V), V;
        }(ae());
        function n(M) {
          if (typeof WeakMap != "function")
            return null;
          var C = /* @__PURE__ */ new WeakMap(), k = /* @__PURE__ */ new WeakMap();
          return (n = function(V) {
            return V ? k : C;
          })(M);
        }
        function o() {
          var M = new e.ARRAY_TYPE(2);
          return e.ARRAY_TYPE != Float32Array && (M[0] = 0, M[1] = 0), M;
        }
        function u(M, C, k) {
          return M[0] = C[0] - k[0], M[1] = C[1] - k[1], M;
        }
        function l(M, C, k) {
          return M[0] = C[0] * k[0], M[1] = C[1] * k[1], M;
        }
        function f(M, C, k) {
          return M[0] = C[0] / k[0], M[1] = C[1] / k[1], M;
        }
        function v(M, C) {
          return Math.hypot(C[0] - M[0], C[1] - M[1]);
        }
        function S(M, C) {
          var k = C[0] - M[0], V = C[1] - M[1];
          return k * k + V * V;
        }
        function D(M) {
          return Math.hypot(M[0], M[1]);
        }
        function x(M) {
          var C = M[0], k = M[1];
          return C * C + k * k;
        }
        qt.len = D, qt.sub = u, qt.mul = l, qt.div = f, qt.dist = v, qt.sqrDist = S, qt.sqrLen = x;
        var P, I = (P = o(), function(M, C, k, V, U, q) {
          var $, H;
          for (C || (C = 2), k || (k = 0), H = V ? Math.min(V * C + k, M.length) : M.length, $ = k; $ < H; $ += C)
            P[0] = M[$], P[1] = M[$ + 1], U(P, P, q), M[$] = P[0], M[$ + 1] = P[1];
          return M;
        });
        return qt.forEach = I, qt;
      }
      function Di() {
        if (an)
          return Y;
        function r(M) {
          return r = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(C) {
            return typeof C;
          } : function(C) {
            return C && typeof Symbol == "function" && C.constructor === Symbol && C !== Symbol.prototype ? "symbol" : typeof C;
          }, r(M);
        }
        an = 1, Object.defineProperty(Y, "__esModule", { value: !0 }), Y.vec4 = Y.vec3 = Y.vec2 = Y.quat2 = Y.quat = Y.mat4 = Y.mat3 = Y.mat2d = Y.mat2 = Y.glMatrix = void 0;
        var e = I(ae());
        Y.glMatrix = e;
        var n = I(be());
        Y.mat2 = n;
        var o = I(ot());
        Y.mat2d = o;
        var u = I(gt());
        Y.mat3 = u;
        var l = I(Gt());
        Y.mat4 = l;
        var f = I(Ji());
        Y.quat = f;
        var v = I(ni());
        Y.quat2 = v;
        var S = I(ln());
        Y.vec2 = S;
        var D = I(Mi());
        Y.vec3 = D;
        var x = I(Si());
        function P(M) {
          if (typeof WeakMap != "function")
            return null;
          var C = /* @__PURE__ */ new WeakMap(), k = /* @__PURE__ */ new WeakMap();
          return (P = function(V) {
            return V ? k : C;
          })(M);
        }
        function I(M, C) {
          if (M && M.__esModule)
            return M;
          if (M === null || r(M) !== "object" && typeof M != "function")
            return { default: M };
          var k = P(C);
          if (k && k.has(M))
            return k.get(M);
          var V = {}, U = Object.defineProperty && Object.getOwnPropertyDescriptor;
          for (var q in M)
            if (q !== "default" && Object.prototype.hasOwnProperty.call(M, q)) {
              var $ = U ? Object.getOwnPropertyDescriptor(M, q) : null;
              $ && ($.get || $.set) ? Object.defineProperty(V, q, $) : V[q] = M[q];
            }
          return V.default = M, k && k.set(M, V), V;
        }
        return Y.vec4 = x, Y;
      }
      var xi, Cs, xs, Is, De = Di(), Vs = function() {
        if (Cs)
          return xi;
        function r(e, n, o, u) {
          this.cx = 3 * e, this.bx = 3 * (o - e) - this.cx, this.ax = 1 - this.cx - this.bx, this.cy = 3 * n, this.by = 3 * (u - n) - this.cy, this.ay = 1 - this.cy - this.by, this.p1x = e, this.p1y = n, this.p2x = o, this.p2y = u;
        }
        return Cs = 1, xi = r, r.prototype = { sampleCurveX: function(e) {
          return ((this.ax * e + this.bx) * e + this.cx) * e;
        }, sampleCurveY: function(e) {
          return ((this.ay * e + this.by) * e + this.cy) * e;
        }, sampleCurveDerivativeX: function(e) {
          return (3 * this.ax * e + 2 * this.bx) * e + this.cx;
        }, solveCurveX: function(e, n) {
          if (n === void 0 && (n = 1e-6), e < 0)
            return 0;
          if (e > 1)
            return 1;
          for (var o = e, u = 0; u < 8; u++) {
            var l = this.sampleCurveX(o) - e;
            if (Math.abs(l) < n)
              return o;
            var f = this.sampleCurveDerivativeX(o);
            if (Math.abs(f) < 1e-6)
              break;
            o -= l / f;
          }
          var v = 0, S = 1;
          for (o = e, u = 0; u < 20 && (l = this.sampleCurveX(o), !(Math.abs(l - e) < n)); u++)
            e > l ? v = o : S = o, o = 0.5 * (S - v) + v;
          return o;
        }, solve: function(e, n) {
          return this.sampleCurveY(this.solveCurveX(e, n));
        } }, xi;
      }(), Us = O(Vs);
      function Zr() {
        if (Is)
          return xs;
        function r(e, n) {
          this.x = e, this.y = n;
        }
        return Is = 1, xs = r, r.prototype = { clone: function() {
          return new r(this.x, this.y);
        }, add: function(e) {
          return this.clone()._add(e);
        }, sub: function(e) {
          return this.clone()._sub(e);
        }, multByPoint: function(e) {
          return this.clone()._multByPoint(e);
        }, divByPoint: function(e) {
          return this.clone()._divByPoint(e);
        }, mult: function(e) {
          return this.clone()._mult(e);
        }, div: function(e) {
          return this.clone()._div(e);
        }, rotate: function(e) {
          return this.clone()._rotate(e);
        }, rotateAround: function(e, n) {
          return this.clone()._rotateAround(e, n);
        }, matMult: function(e) {
          return this.clone()._matMult(e);
        }, unit: function() {
          return this.clone()._unit();
        }, perp: function() {
          return this.clone()._perp();
        }, round: function() {
          return this.clone()._round();
        }, mag: function() {
          return Math.sqrt(this.x * this.x + this.y * this.y);
        }, equals: function(e) {
          return this.x === e.x && this.y === e.y;
        }, dist: function(e) {
          return Math.sqrt(this.distSqr(e));
        }, distSqr: function(e) {
          var n = e.x - this.x, o = e.y - this.y;
          return n * n + o * o;
        }, angle: function() {
          return Math.atan2(this.y, this.x);
        }, angleTo: function(e) {
          return Math.atan2(this.y - e.y, this.x - e.x);
        }, angleWith: function(e) {
          return this.angleWithSep(e.x, e.y);
        }, angleWithSep: function(e, n) {
          return Math.atan2(this.x * n - this.y * e, this.x * e + this.y * n);
        }, _matMult: function(e) {
          var n = e[2] * this.x + e[3] * this.y;
          return this.x = e[0] * this.x + e[1] * this.y, this.y = n, this;
        }, _add: function(e) {
          return this.x += e.x, this.y += e.y, this;
        }, _sub: function(e) {
          return this.x -= e.x, this.y -= e.y, this;
        }, _mult: function(e) {
          return this.x *= e, this.y *= e, this;
        }, _div: function(e) {
          return this.x /= e, this.y /= e, this;
        }, _multByPoint: function(e) {
          return this.x *= e.x, this.y *= e.y, this;
        }, _divByPoint: function(e) {
          return this.x /= e.x, this.y /= e.y, this;
        }, _unit: function() {
          return this._div(this.mag()), this;
        }, _perp: function() {
          var e = this.y;
          return this.y = this.x, this.x = -e, this;
        }, _rotate: function(e) {
          var n = Math.cos(e), o = Math.sin(e), u = o * this.x + n * this.y;
          return this.x = n * this.x - o * this.y, this.y = u, this;
        }, _rotateAround: function(e, n) {
          var o = Math.cos(e), u = Math.sin(e), l = n.y + u * (this.x - n.x) + o * (this.y - n.y);
          return this.x = n.x + o * (this.x - n.x) - u * (this.y - n.y), this.y = l, this;
        }, _round: function() {
          return this.x = Math.round(this.x), this.y = Math.round(this.y), this;
        } }, r.convert = function(e) {
          return e instanceof r ? e : Array.isArray(e) ? new r(e[0], e[1]) : e;
        }, xs;
      }
      var Et = O(Zr());
      function Ws(r, e) {
        if (Array.isArray(r)) {
          if (!Array.isArray(e) || r.length !== e.length)
            return !1;
          for (let n = 0; n < r.length; n++)
            if (!Ws(r[n], e[n]))
              return !1;
          return !0;
        }
        if (typeof r == "object" && r !== null && e !== null) {
          if (typeof e != "object" || Object.keys(r).length !== Object.keys(e).length)
            return !1;
          for (const n in r)
            if (!Ws(r[n], e[n]))
              return !1;
          return !0;
        }
        return r === e;
      }
      const $n = Math.PI / 180, $s = 180 / Math.PI;
      function vi(r) {
        return r * $n;
      }
      function kn(r) {
        return r * $s;
      }
      const Xs = [[0, 0], [1, 0], [1, 1], [0, 1]];
      function Hr(r) {
        if (r <= 0)
          return 0;
        if (r >= 1)
          return 1;
        const e = r * r, n = e * r;
        return 4 * (r < 0.5 ? n : 3 * (r - e) + n - 0.75);
      }
      function qr(r, e, n, o) {
        const u = new Us(r, e, n, o);
        return function(l) {
          return u.solve(l);
        };
      }
      const Wr = qr(0.25, 0.1, 0.25, 1);
      function si(r, e, n) {
        return Math.min(n, Math.max(e, r));
      }
      function fs(r, e, n) {
        return (n = si((n - r) / (e - r), 0, 1)) * n * (3 - 2 * n);
      }
      function zn(r, e, n) {
        const o = n - e, u = ((r - e) % o + o) % o + e;
        return u === e ? n : u;
      }
      function Rn(r, e, n) {
        if (!r.length)
          return n(null, []);
        let o = r.length;
        const u = new Array(r.length);
        let l = null;
        r.forEach((f, v) => {
          e(f, (S, D) => {
            S && (l = S), u[v] = D, --o == 0 && n(l, u);
          });
        });
      }
      function An(r, ...e) {
        for (const n of e)
          for (const o in n)
            r[o] = n[o];
        return r;
      }
      let js = 1;
      function yo() {
        return js++;
      }
      function xo(r) {
        return r <= 1 ? 1 : Math.pow(2, Math.ceil(Math.log(r) / Math.LN2));
      }
      function vo(r, e) {
        r.forEach((n) => {
          e[n] && (e[n] = e[n].bind(e));
        });
      }
      function yr(r, e) {
        return r.indexOf(e, r.length - e.length) !== -1;
      }
      function Mr(r, e, n) {
        const o = {};
        for (const u in r)
          o[u] = e.call(this, r[u], u, r);
        return o;
      }
      function io(r, e, n) {
        const o = {};
        for (const u in r)
          e.call(this, r[u], u, r) && (o[u] = r[u]);
        return o;
      }
      function Ys(r) {
        return Array.isArray(r) ? r.map(Ys) : typeof r == "object" && r ? Mr(r, Ys) : r;
      }
      const Sr = {};
      function mi(r) {
        Sr[r] || (typeof console < "u" && console.warn(r), Sr[r] = !0);
      }
      function On(r, e, n) {
        return (n.y - r.y) * (e.x - r.x) > (e.y - r.y) * (n.x - r.x);
      }
      function Vn(r) {
        let e = 0;
        for (let n, o, u = 0, l = r.length, f = l - 1; u < l; f = u++)
          n = r[u], o = r[f], e += (o.x - n.x) * (n.y + o.y);
        return e;
      }
      function Zi([r, e, n]) {
        const o = vi(e + 90), u = vi(n);
        return { x: r * Math.cos(o) * Math.sin(u), y: r * Math.sin(o) * Math.sin(u), z: r * Math.cos(u), azimuthal: e, polar: n };
      }
      function Jn() {
        return typeof WorkerGlobalScope < "u" && typeof self < "u" && self instanceof WorkerGlobalScope;
      }
      function Fn(r) {
        const e = {};
        if (r.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g, (n, o, u, l) => {
          const f = u || l;
          return e[o] = !f || f.toLowerCase(), "";
        }), e["max-age"]) {
          const n = parseInt(e["max-age"], 10);
          isNaN(n) ? delete e["max-age"] : e["max-age"] = n;
        }
        return e;
      }
      let Ls = null;
      function zs(r, e) {
        return [r[4 * e], r[4 * e + 1], r[4 * e + 2], r[4 * e + 3]];
      }
      function Vo(r, e, n, o) {
        for (; e < n; ) {
          const u = e + n >> 1;
          r[u] < o ? e = u + 1 : n = u;
        }
        return e;
      }
      function Ke(r, e, n, o) {
        for (; e < n; ) {
          const u = e + n >> 1;
          r[u] <= o ? e = u + 1 : n = u;
        }
        return e;
      }
      function re(r) {
        return r > 0 ? 1 / (1.001 - r) : 1 + r;
      }
      function le(r) {
        return r > 0 ? 1 - 1 / (1.001 - r) : -r;
      }
      const ge = { API_URL: "https://api.mapbox.com", get API_URL_REGEX() {
        return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i;
      }, get API_TILEJSON_REGEX() {
        return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/v[0-9]*\/.*\.json.*$)/i;
      }, get API_SPRITE_REGEX() {
        return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/styles\/v[0-9]*\/)(.*\/sprite.*\..*$)/i;
      }, get API_FONTS_REGEX() {
        return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/fonts\/v[0-9]*\/)(.*\.pbf.*$)/i;
      }, get API_STYLE_REGEX() {
        return /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/styles\/v[0-9]*\/)(.*$)/i;
      }, get API_CDN_URL_REGEX() {
        return /^((https?:)?\/\/)?api\.mapbox\.c(n|om)(\/mapbox-gl-js\/)(.*$)/i;
      }, get EVENTS_URL() {
        if (!ge.API_URL)
          return null;
        try {
          const r = new URL(ge.API_URL);
          return r.hostname === "api.mapbox.cn" ? "https://events.mapbox.cn/events/v2" : r.hostname === "api.mapbox.com" ? "https://events.mapbox.com/events/v2" : null;
        } catch {
          return null;
        }
      }, SESSION_PATH: "/map-sessions/v1", FEEDBACK_URL: "https://apps.mapbox.com/feedback", TILE_URL_VERSION: "v4", RASTER_URL_PREFIX: "raster/v1", RASTERARRAYS_URL_PREFIX: "rasterarrays/v1", REQUIRE_ACCESS_TOKEN: !0, ACCESS_TOKEN: null, DEFAULT_STYLE: "mapbox://styles/mapbox/standard", MAX_PARALLEL_IMAGE_REQUESTS: 16, DRACO_URL: "https://api.mapbox.com/mapbox-gl-js/draco_decoder_gltf_v1.5.6.wasm", MESHOPT_URL: "https://api.mapbox.com/mapbox-gl-js/meshopt_base_v0.20.wasm", MESHOPT_SIMD_URL: "https://api.mapbox.com/mapbox-gl-js/meshopt_simd_v0.20.wasm", GLYPHS_URL: "mapbox://fonts/mapbox/{fontstack}/{range}.pbf", TILES3D_URL_PREFIX: "3dtiles/v1" };
      function Le(r) {
        return ge.API_URL_REGEX.test(r);
      }
      function Ce(r) {
        return ge.API_SPRITE_REGEX.test(r);
      }
      let Be, qe, Pe, Ye, Qe, it;
      function mt() {
        return Be == null && (Be = self.OffscreenCanvas && new OffscreenCanvas(1, 1).getContext("2d") && typeof self.createImageBitmap == "function"), Be;
      }
      const Ct = { now: () => Ye !== void 0 ? Ye : performance.now(), setNow(r) {
        Ye = r;
      }, restoreNow() {
        Ye = void 0;
      }, frame(r) {
        const e = requestAnimationFrame(r);
        return { cancel: () => cancelAnimationFrame(e) };
      }, getImageData(r, e = 0) {
        const { width: n, height: o } = r;
        Qe || (Qe = document.createElement("canvas"));
        const u = Qe.getContext("2d", { willReadFrequently: !0 });
        if (!u)
          throw new Error("failed to create canvas 2d context");
        return (n > Qe.width || o > Qe.height) && (Qe.width = n, Qe.height = o), u.clearRect(-e, -e, n + 2 * e, o + 2 * e), u.drawImage(r, 0, 0, n, o), u.getImageData(-e, -e, n + 2 * e, o + 2 * e);
      }, resolveURL: (r) => (qe || (qe = document.createElement("a")), qe.href = r, qe.href), get devicePixelRatio() {
        return window.devicePixelRatio;
      }, get prefersReducedMotion() {
        return !!window.matchMedia && (Pe == null && (Pe = window.matchMedia("(prefers-reduced-motion: reduce)")), Pe.matches);
      }, hasCanvasFingerprintNoise() {
        if (it !== void 0)
          return it;
        if (!mt())
          return it = !1, !1;
        const r = new OffscreenCanvas(85, 1), e = r.getContext("2d", { willReadFrequently: !0 });
        let n = 0;
        for (let u = 0; u < r.width; ++u)
          e.fillStyle = `rgba(${n++},${n++},${n++}, 255)`, e.fillRect(u, 0, 1, 1);
        const o = e.getImageData(0, 0, r.width, r.height);
        n = 0;
        for (let u = 0; u < o.data.length; ++u)
          if (u % 4 != 3 && n++ !== o.data[u])
            return it = !0, !0;
        return it = !1, !1;
      } };
      function It(r, e) {
        const n = r.indexOf("?");
        if (n < 0)
          return `${r}?${new URLSearchParams(e).toString()}`;
        const o = new URLSearchParams(r.slice(n));
        for (const u in e)
          o.set(u, e[u]);
        return `${r.slice(0, n)}?${o.toString()}`;
      }
      function Kt(r, e = { persistentParams: [] }) {
        const n = r.indexOf("?");
        if (n < 0)
          return r;
        const o = new URLSearchParams(), u = new URLSearchParams(r.slice(n));
        for (const f of e.persistentParams) {
          const v = u.get(f);
          v && o.set(f, v);
        }
        const l = o.toString();
        return `${r.slice(0, n)}${l.length > 0 ? `?${l}` : ""}`;
      }
      const di = "mapbox-tiles";
      let li = 500, ri = 50;
      const Ki = ["language", "worldview", "jobid"];
      let Ni, Ei;
      function $i() {
        try {
          return caches;
        } catch {
        }
      }
      function Hi() {
        const r = $i();
        r && Ni == null && (Ni = r.open(di));
      }
      let Xn = 1 / 0;
      const Gs = { supported: !1, testSupport: function(r) {
        !ra && vs && (Er ? cl(r) : ps = r);
      } };
      let ps, vs, ra = !1, Er = !1;
      const oa = typeof self < "u" ? self : {};
      function cl(r) {
        const e = r.createTexture();
        r.bindTexture(r.TEXTURE_2D, e);
        try {
          if (r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, r.RGBA, r.UNSIGNED_BYTE, vs), r.isContextLost())
            return;
          Gs.supported = !0;
        } catch {
        }
        r.deleteTexture(e), ra = !0;
      }
      oa.document && (vs = oa.document.createElement("img"), vs.onload = function() {
        ps && cl(ps), ps = null, Er = !0;
      }, vs.onerror = function() {
        ra = !0, ps = null;
      }, vs.src = "data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=");
      const Uo = { Unknown: "Unknown", Style: "Style", Source: "Source", Tile: "Tile", Glyphs: "Glyphs", SpriteImage: "SpriteImage", SpriteJSON: "SpriteJSON", Iconset: "Iconset", Image: "Image", Model: "Model" };
      typeof Object.freeze == "function" && Object.freeze(Uo);
      class jo extends Error {
        constructor(e, n, o) {
          n === 401 && Le(o) && (e += ": you may have provided an invalid Mapbox access token. See https://docs.mapbox.com/api/overview/#access-tokens-and-token-scopes"), super(e), this.status = n, this.url = o;
        }
        toString() {
          return `${this.name}: ${this.message} (${this.status}): ${this.url}`;
        }
      }
      const tn = Jn() ? () => self.worker && self.worker.referrer : () => (location.protocol === "blob:" ? parent : self).location.href, xn = function(r, e) {
        if (!(/^file:/.test(n = r.url) || /^file:/.test(tn()) && !/^\w+:/.test(n))) {
          if (self.fetch && self.Request && self.AbortController && Request.prototype.hasOwnProperty("signal"))
            return function(o, u) {
              const l = new AbortController(), f = new Request(o.url, { method: o.method || "GET", body: o.body, credentials: o.credentials, headers: o.headers, referrer: tn(), referrerPolicy: o.referrerPolicy, signal: l.signal });
              let v = !1, S = !1;
              const D = (x = f.url).indexOf("sku=") > 0 && Le(x);
              var x;
              o.type === "json" && f.headers.set("Accept", "application/json");
              const P = (M, C, k) => {
                if (S)
                  return;
                if (M && M.message !== "SecurityError" && mi(M.toString()), C && k)
                  return I(C);
                const V = Date.now();
                fetch(f).then((U) => {
                  if (U.ok) {
                    const q = D ? U.clone() : null;
                    return I(U, q, V);
                  }
                  return u(new jo(U.statusText, U.status, o.url));
                }).catch((U) => {
                  U.name !== "AbortError" && u(new Error(`${U.message} ${o.url}`));
                });
              }, I = (M, C, k) => {
                (o.type === "arrayBuffer" ? M.arrayBuffer() : o.type === "json" ? M.json() : M.text()).then((V) => {
                  S || (C && k && function(U, q, $) {
                    if (Hi(), Ni == null)
                      return;
                    const H = Fn(q.headers.get("Cache-Control") || "");
                    if (H["no-store"])
                      return;
                    const K = { status: q.status, statusText: q.statusText, headers: new Headers() };
                    q.headers.forEach((fe, de) => K.headers.set(de, fe)), H["max-age"] && K.headers.set("Expires", new Date($ + 1e3 * H["max-age"]).toUTCString());
                    const Q = K.headers.get("Expires");
                    if (!Q || new Date(Q).getTime() - $ < 42e4)
                      return;
                    let ie = Kt(U.url, { persistentParams: Ki });
                    if (q.status === 206) {
                      const fe = U.headers.get("Range");
                      if (!fe)
                        return;
                      K.status = 200, ie = It(ie, { range: fe });
                    }
                    (function(fe, de) {
                      if (Ei === void 0)
                        try {
                          new Response(new ReadableStream()), Ei = !0;
                        } catch {
                          Ei = !1;
                        }
                      Ei ? de(fe.body) : fe.blob().then(de);
                    })(q, (fe) => {
                      const de = new Response((ue = q.status) !== 200 && ue !== 404 && [101, 103, 204, 205, 304].includes(ue) ? null : fe, K);
                      var ue;
                      Hi(), Ni != null && Ni.then((Se) => Se.put(ie, de)).catch((Se) => mi(Se.message));
                    });
                  }(f, C, k), v = !0, u(null, V, M.headers.get("Cache-Control"), M.headers.get("Expires")));
                }).catch((V) => {
                  S || u(new Error(V.message));
                });
              };
              return D ? function(M, C) {
                if (Hi(), Ni == null)
                  return C(null);
                Ni.then((k) => {
                  let V = Kt(M.url, { persistentParams: Ki });
                  const U = M.headers.get("Range");
                  U && (V = It(V, { range: U })), k.match(V).then((q) => {
                    const $ = function(H) {
                      if (!H)
                        return !1;
                      const K = new Date(H.headers.get("Expires") || 0), Q = Fn(H.headers.get("Cache-Control") || "");
                      return K > Date.now() && !Q["no-cache"];
                    }(q);
                    k.delete(V), $ && k.put(V, q.clone()), C(null, q, $);
                  }).catch(C);
                }).catch(C);
              }(f, P) : P(null, null), { cancel: () => {
                S = !0, v || l.abort();
              } };
            }(r, e);
          if (Jn() && self.worker && self.worker.actor)
            return self.worker.actor.send("getResource", r, e, void 0, !0);
        }
        var n;
        return function(o, u) {
          const l = new XMLHttpRequest();
          l.open(o.method || "GET", o.url, !0), o.type === "arrayBuffer" && (l.responseType = "arraybuffer");
          for (const f in o.headers)
            l.setRequestHeader(f, o.headers[f]);
          return o.type === "json" && (l.responseType = "text", l.setRequestHeader("Accept", "application/json")), l.withCredentials = o.credentials === "include", l.onerror = () => {
            u(new Error(l.statusText));
          }, l.onload = () => {
            if ((l.status >= 200 && l.status < 300 || l.status === 0) && l.response !== null) {
              let f = l.response;
              if (o.type === "json")
                try {
                  f = JSON.parse(l.response);
                } catch (v) {
                  return u(v);
                }
              u(null, f, l.getResponseHeader("Cache-Control"), l.getResponseHeader("Expires"));
            } else
              u(new jo(l.statusText, l.status, o.url));
          }, l.send(o.body), { cancel: () => l.abort() };
        }(r, e);
      }, no = function(r, e) {
        return xn(An(r, { type: "arrayBuffer" }), e);
      };
      function Go(r) {
        const e = document.createElement("a");
        return e.href = r, e.protocol === location.protocol && e.host === location.host;
      }
      const aa = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=";
      let Da, Vi;
      Da = [], Vi = 0;
      const Hn = function(r, e) {
        if (Gs.supported && (r.headers || (r.headers = {}), r.headers.accept = "image/webp,*/*"), Vi >= ge.MAX_PARALLEL_IMAGE_REQUESTS) {
          const l = { requestParameters: r, callback: e, cancelled: !1, cancel() {
            this.cancelled = !0;
          } };
          return Da.push(l), l;
        }
        Vi++;
        let n = !1;
        const o = () => {
          if (!n)
            for (n = !0, Vi--; Da.length && Vi < ge.MAX_PARALLEL_IMAGE_REQUESTS; ) {
              const l = Da.shift(), { requestParameters: f, callback: v, cancelled: S } = l;
              S || (l.cancel = Hn(f, v).cancel);
            }
        }, u = no(r, (l, f, v, S) => {
          o(), l ? e(l) : f && (self.createImageBitmap ? function(D, x) {
            const P = new Blob([new Uint8Array(D)], { type: "image/png" });
            createImageBitmap(P).then((I) => {
              x(null, I);
            }).catch((I) => {
              x(new Error(`Could not load image because of ${I.message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`));
            });
          }(f, (D, x) => e(D, x, v, S)) : function(D, x) {
            const P = new Image();
            P.onload = () => {
              x(null, P), URL.revokeObjectURL(P.src), P.onload = null, requestAnimationFrame(() => {
                P.src = aa;
              });
            }, P.onerror = () => x(new Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."));
            const I = new Blob([new Uint8Array(D)], { type: "image/png" });
            P.src = D.byteLength ? URL.createObjectURL(I) : aa;
          }(f, (D, x) => e(D, x, v, S)));
        });
        return { cancel: () => {
          u.cancel(), o();
        } };
      };
      var hl, Zs, Qn, Pr = { exports: {} }, nr = { exports: {} }, Ks = { exports: {} }, Yn = function() {
        if (Qn)
          return Pr.exports;
        Qn = 1;
        var r = (hl || (hl = 1, nr.exports = function(n, o) {
          var u, l, f, v, S, D, x, P;
          for (l = n.length - (u = 3 & n.length), f = o, S = 3432918353, D = 461845907, P = 0; P < l; )
            x = 255 & n.charCodeAt(P) | (255 & n.charCodeAt(++P)) << 8 | (255 & n.charCodeAt(++P)) << 16 | (255 & n.charCodeAt(++P)) << 24, ++P, f = 27492 + (65535 & (v = 5 * (65535 & (f = (f ^= x = (65535 & (x = (x = (65535 & x) * S + (((x >>> 16) * S & 65535) << 16) & 4294967295) << 15 | x >>> 17)) * D + (((x >>> 16) * D & 65535) << 16) & 4294967295) << 13 | f >>> 19)) + ((5 * (f >>> 16) & 65535) << 16) & 4294967295)) + ((58964 + (v >>> 16) & 65535) << 16);
          switch (x = 0, u) {
            case 3:
              x ^= (255 & n.charCodeAt(P + 2)) << 16;
            case 2:
              x ^= (255 & n.charCodeAt(P + 1)) << 8;
            case 1:
              f ^= x = (65535 & (x = (x = (65535 & (x ^= 255 & n.charCodeAt(P))) * S + (((x >>> 16) * S & 65535) << 16) & 4294967295) << 15 | x >>> 17)) * D + (((x >>> 16) * D & 65535) << 16) & 4294967295;
          }
          return f ^= n.length, f = 2246822507 * (65535 & (f ^= f >>> 16)) + ((2246822507 * (f >>> 16) & 65535) << 16) & 4294967295, f = 3266489909 * (65535 & (f ^= f >>> 13)) + ((3266489909 * (f >>> 16) & 65535) << 16) & 4294967295, (f ^= f >>> 16) >>> 0;
        }), nr.exports), e = (Zs || (Zs = 1, Ks.exports = function(n, o) {
          for (var u, l = n.length, f = o ^ l, v = 0; l >= 4; )
            u = 1540483477 * (65535 & (u = 255 & n.charCodeAt(v) | (255 & n.charCodeAt(++v)) << 8 | (255 & n.charCodeAt(++v)) << 16 | (255 & n.charCodeAt(++v)) << 24)) + ((1540483477 * (u >>> 16) & 65535) << 16), f = 1540483477 * (65535 & f) + ((1540483477 * (f >>> 16) & 65535) << 16) ^ (u = 1540483477 * (65535 & (u ^= u >>> 24)) + ((1540483477 * (u >>> 16) & 65535) << 16)), l -= 4, ++v;
          switch (l) {
            case 3:
              f ^= (255 & n.charCodeAt(v + 2)) << 16;
            case 2:
              f ^= (255 & n.charCodeAt(v + 1)) << 8;
            case 1:
              f = 1540483477 * (65535 & (f ^= 255 & n.charCodeAt(v))) + ((1540483477 * (f >>> 16) & 65535) << 16);
          }
          return f = 1540483477 * (65535 & (f ^= f >>> 13)) + ((1540483477 * (f >>> 16) & 65535) << 16), (f ^= f >>> 15) >>> 0;
        }), Ks.exports);
        return Pr.exports = r, Pr.exports.murmur3 = r, Pr.exports.murmur2 = e, Pr.exports;
      }(), $r = O(Yn);
      class Ar {
        constructor(e, ...n) {
          An(this, n[0] || {}), this.type = e;
        }
      }
      class Cr extends Ar {
        constructor(e, n = {}) {
          super("error", An({ error: e }, n));
        }
      }
      function ka(r, e, n) {
        n[r] && n[r].indexOf(e) !== -1 || (n[r] = n[r] || [], n[r].push(e));
      }
      function la(r, e, n) {
        if (n && n[r]) {
          const o = n[r].indexOf(e);
          o !== -1 && n[r].splice(o, 1);
        }
      }
      class Zo {
        on(e, n) {
          return this._listeners = this._listeners || {}, ka(e, n, this._listeners), this;
        }
        off(e, n) {
          return la(e, n, this._listeners), la(e, n, this._oneTimeListeners), this;
        }
        once(e, n) {
          return n ? (this._oneTimeListeners = this._oneTimeListeners || {}, ka(e, n, this._oneTimeListeners), this) : new Promise((o) => this.once(e, o));
        }
        fire(e, n) {
          const o = typeof e == "string" ? new Ar(e, n) : e, u = o.type;
          if (this.listens(u)) {
            o.target = this;
            const l = this._listeners && this._listeners[u] ? this._listeners[u].slice() : [];
            for (const S of l)
              S.call(this, o);
            const f = this._oneTimeListeners && this._oneTimeListeners[u] ? this._oneTimeListeners[u].slice() : [];
            for (const S of f)
              la(u, S, this._oneTimeListeners), S.call(this, o);
            const v = this._eventedParent;
            v && (An(o, typeof this._eventedParentData == "function" ? this._eventedParentData() : this._eventedParentData), v.fire(o));
          } else
            o instanceof Cr && console.error(o.error);
          return this;
        }
        listens(e) {
          return !!(this._listeners && this._listeners[e] && this._listeners[e].length > 0 || this._oneTimeListeners && this._oneTimeListeners[e] && this._oneTimeListeners[e].length > 0 || this._eventedParent && this._eventedParent.listens(e));
        }
        setEventedParent(e, n) {
          return this._eventedParent = e, this._eventedParentData = n, this;
        }
      }
      var sr, ca = {}, Ra = function() {
        if (sr)
          return ca;
        sr = 1;
        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 e(l) {
          return (l = Math.round(l)) < 0 ? 0 : l > 255 ? 255 : l;
        }
        function n(l) {
          return e(l[l.length - 1] === "%" ? parseFloat(l) / 100 * 255 : parseInt(l));
        }
        function o(l) {
          return (f = l[l.length - 1] === "%" ? parseFloat(l) / 100 : parseFloat(l)) < 0 ? 0 : f > 1 ? 1 : f;
          var f;
        }
        function u(l, f, v) {
          return v < 0 ? v += 1 : v > 1 && (v -= 1), 6 * v < 1 ? l + (f - l) * v * 6 : 2 * v < 1 ? f : 3 * v < 2 ? l + (f - l) * (2 / 3 - v) * 6 : l;
        }
        try {
          ca.parseCSSColor = function(l) {
            var f, v = l.replace(/ /g, "").toLowerCase();
            if (v in r)
              return r[v].slice();
            if (v[0] === "#")
              return v.length === 4 ? (f = parseInt(v.substr(1), 16)) >= 0 && f <= 4095 ? [(3840 & f) >> 4 | (3840 & f) >> 8, 240 & f | (240 & f) >> 4, 15 & f | (15 & f) << 4, 1] : null : v.length === 7 && (f = parseInt(v.substr(1), 16)) >= 0 && f <= 16777215 ? [(16711680 & f) >> 16, (65280 & f) >> 8, 255 & f, 1] : null;
            var S = v.indexOf("("), D = v.indexOf(")");
            if (S !== -1 && D + 1 === v.length) {
              var x = v.substr(0, S), P = v.substr(S + 1, D - (S + 1)).split(","), I = 1;
              switch (x) {
                case "rgba":
                  if (P.length !== 4)
                    return null;
                  I = o(P.pop());
                case "rgb":
                  return P.length !== 3 ? null : [n(P[0]), n(P[1]), n(P[2]), I];
                case "hsla":
                  if (P.length !== 4)
                    return null;
                  I = o(P.pop());
                case "hsl":
                  if (P.length !== 3)
                    return null;
                  var M = (parseFloat(P[0]) % 360 + 360) % 360 / 360, C = o(P[1]), k = o(P[2]), V = k <= 0.5 ? k * (C + 1) : k + C - k * C, U = 2 * k - V;
                  return [e(255 * u(U, V, M + 1 / 3)), e(255 * u(U, V, M)), e(255 * u(U, V, M - 1 / 3)), I];
                default:
                  return null;
              }
            }
            return null;
          };
        } catch {
        }
        return ca;
      }();
      class ki {
        constructor(e, n, o, u = 1) {
          this.r = e, this.g = n, this.b = o, this.a = u;
        }
        static parse(e) {
          if (!e)
            return;
          if (e instanceof ki)
            return e;
          if (typeof e != "string")
            return;
          const n = Ra.parseCSSColor(e);
          return n ? new ki(n[0] / 255 * n[3], n[1] / 255 * n[3], n[2] / 255 * n[3], n[3]) : void 0;
        }
        toStringPremultipliedAlpha() {
          const [e, n, o, u] = this.a === 0 ? [0, 0, 0, 0] : [255 * this.r / this.a, 255 * this.g / this.a, 255 * this.b / this.a, this.a];
          return `rgba(${Math.round(e)},${Math.round(n)},${Math.round(o)},${u})`;
        }
        toString() {
          const [e, n, o, u] = [this.r, this.g, this.b, this.a];
          return `rgba(${Math.round(255 * e)},${Math.round(255 * n)},${Math.round(255 * o)},${u})`;
        }
        toRenderColor(e) {
          const { r: n, g: o, b: u, a: l } = this;
          return new Gl(e, n, o, u, l);
        }
        clone() {
          return new ki(this.r, this.g, this.b, this.a);
        }
      }
      class Gl {
        constructor(e, n, o, u, l) {
          if (e) {
            const f = e.image.height, v = f * f;
            n = l === 0 ? 0 : n / l * (f - 1), o = l === 0 ? 0 : o / l * (f - 1), u = l === 0 ? 0 : u / l * (f - 1);
            const S = Math.floor(n), D = Math.floor(o), x = Math.floor(u), P = Math.ceil(n), I = Math.ceil(o), M = Math.ceil(u), C = n - S, k = o - D, V = u - x, U = e.image.data, q = 4 * (S + D * v + x * f), $ = 4 * (S + D * v + M * f), H = 4 * (S + I * v + x * f), K = 4 * (S + I * v + M * f), Q = 4 * (P + D * v + x * f), ie = 4 * (P + D * v + M * f), fe = 4 * (P + I * v + x * f), de = 4 * (P + I * v + M * f);
            if (q < 0 || de >= U.length)
              throw new Error("out of range");
            this.r = ei(ei(ei(U[q], U[$], V), ei(U[H], U[K], V), k), ei(ei(U[Q], U[ie], V), ei(U[fe], U[de], V), k), C) / 255 * l, this.g = ei(ei(ei(U[q + 1], U[$ + 1], V), ei(U[H + 1], U[K + 1], V), k), ei(ei(U[Q + 1], U[ie + 1], V), ei(U[fe + 1], U[de + 1], V), k), C) / 255 * l, this.b = ei(ei(ei(U[q + 2], U[$ + 2], V), ei(U[H + 2], U[K + 2], V), k), ei(ei(U[Q + 2], U[ie + 2], V), ei(U[fe + 2], U[de + 2], V), k), C) / 255 * l, this.a = l;
          } else
            this.r = n, this.g = o, this.b = u, this.a = l;
        }
        toArray() {
          const { r: e, g: n, b: o, a: u } = this;
          return u === 0 ? [0, 0, 0, 0] : [255 * e / u, 255 * n / u, 255 * o / u, u];
        }
        toHslaArray() {
          if (this.a === 0)
            return [0, 0, 0, 0];
          const { r: e, g: n, b: o, a: u } = this, l = Math.min(Math.max(e / u, 0), 1), f = Math.min(Math.max(n / u, 0), 1), v = Math.min(Math.max(o / u, 0), 1), S = Math.min(l, f, v), D = Math.max(l, f, v), x = (S + D) / 2;
          if (S === D)
            return [0, 0, 100 * x, u];
          const P = D - S, I = x > 0.5 ? P / (2 - D - S) : P / (D + S);
          let M = 0;
          return D === l ? M = (f - v) / P + (f < v ? 6 : 0) : D === f ? M = (v - l) / P + 2 : D === v && (M = (l - f) / P + 4), M *= 60, [Math.min(Math.max(M, 0), 360), Math.min(Math.max(100 * I, 0), 100), Math.min(Math.max(100 * x, 0), 100), u];
        }
        toArray01() {
          const { r: e, g: n, b: o, a: u } = this;
          return u === 0 ? [0, 0, 0, 0] : [e / u, n / u, o / u, u];
        }
        toArray01Scaled(e) {
          const { r: n, g: o, b: u, a: l } = this;
          return l === 0 ? [0, 0, 0] : [n / l * e, o / l * e, u / l * e];
        }
        toArray01PremultipliedAlpha() {
          const { r: e, g: n, b: o, a: u } = this;
          return [e, n, o, u];
        }
        toArray01Linear() {
          const { r: e, g: n, b: o, a: u } = this;
          return u === 0 ? [0, 0, 0, 0] : [Math.pow(e / u, 2.2), Math.pow(n / u, 2.2), Math.pow(o / u, 2.2), u];
        }
      }
      function ei(r, e, n) {
        return r * (1 - n) + e * n;
      }
      function ul(r, e, n) {
        return r.map((o, u) => ei(o, e[u], n));
      }
      ki.black = new ki(0, 0, 0, 1), ki.white = new ki(1, 1, 1, 1), ki.transparent = new ki(0, 0, 0, 0), ki.red = new ki(1, 0, 0, 1), ki.blue = new ki(0, 0, 1, 1);
      var Oi = Object.freeze({ __proto__: null, array: ul, color: function(r, e, n) {
        return new ki(ei(r.r, e.r, n), ei(r.g, e.g, n), ei(r.b, e.b, n), ei(r.a, e.a, n));
      }, number: ei });
      function Bi(r, ...e) {
        for (const n of e)
          for (const o in n)
            r[o] = n[o];
        return r;
      }
      class ns extends Error {
        constructor(e, n) {
          super(n), this.message = n, this.key = e;
        }
      }
      class Cn {
        constructor(e, n = []) {
          this.parent = e, this.bindings = {};
          for (const [o, u] of n)
            this.bindings[o] = u;
        }
        concat(e) {
          return new Cn(this, e);
        }
        get(e) {
          if (this.bindings[e])
            return this.bindings[e];
          if (this.parent)
            return this.parent.get(e);
          throw new Error(`${e} not found in scope.`);
        }
        has(e) {
          return !!this.bindings[e] || !!this.parent && this.parent.has(e);
        }
      }
      const ha = { kind: "null" }, Ot = { kind: "number" }, Fi = { kind: "string" }, Li = { kind: "boolean" }, ms = { kind: "color" }, bo = { kind: "object" }, Pi = { kind: "value" }, _s = { kind: "collator" }, Js = { kind: "formatted" }, Ho = { kind: "resolvedImage" };
      function Ss(r, e) {
        return { kind: "array", itemType: r, N: e };
      }
      function un(r) {
        if (r.kind === "array") {
          const e = un(r.itemType);
          return typeof r.N == "number" ? `array<${e}, ${r.N}>` : r.itemType.kind === "value" ? "array" : `array<${e}>`;
        }
        return r.kind;
      }
      const Bc = [ha, Ot, Fi, Li, ms, Js, bo, Ss(Pi), Ho];
      function ua(r, e) {
        if (e.kind === "error")
          return null;
        if (r.kind === "array") {
          if (e.kind === "array" && (e.N === 0 && e.itemType.kind === "value" || !ua(r.itemType, e.itemType)) && (typeof r.N != "number" || r.N === e.N))
            return null;
        } else {
          if (r.kind === e.kind)
            return null;
          if (r.kind === "value") {
            for (const n of Bc)
              if (!ua(n, e))
                return null;
          }
        }
        return `Expected ${un(r)} but found ${un(e)} instead.`;
      }
      function Zl(r, e) {
        return e.some((n) => n.kind === r.kind);
      }
      function da(r, e) {
        return e.some((n) => n === "null" ? r === null : n === "array" ? Array.isArray(r) : n === "object" ? r && !Array.isArray(r) && typeof r == "object" : n === typeof r);
      }
      class nn {
        constructor(e, n, o) {
          this.sensitivity = e ? n ? "variant" : "case" : n ? "accent" : "base", this.locale = o, this.collator = new Intl.Collator(this.locale ? this.locale : [], { sensitivity: this.sensitivity, usage: "search" });
        }
        compare(e, n) {
          return this.collator.compare(e, n);
        }
        resolvedLocale() {
          return new Intl.Collator(this.locale ? this.locale : []).resolvedOptions().locale;
        }
      }
      class dl {
        constructor(e, n, o, u, l) {
          this.text = e.normalize ? e.normalize() : e, this.image = n, this.scale = o, this.fontStack = u, this.textColor = l;
        }
      }
      class Dn {
        constructor(e) {
          this.sections = e;
        }
        static fromString(e) {
          return new Dn([new dl(e, null, null, null, null)]);
        }
        isEmpty() {
          return this.sections.length === 0 || !this.sections.some((e) => e.text.length !== 0 || e.image && e.image.namePrimary);
        }
        static factory(e) {
          return e instanceof Dn ? e : Dn.fromString(e);
        }
        toString() {
          return this.sections.length === 0 ? "" : this.sections.map((e) => e.text).join("");
        }
        serialize() {
          const e = ["format"];
          for (const n of this.sections) {
            if (n.image) {
              e.push(["image", n.image.namePrimary]);
              continue;
            }
            e.push(n.text);
            const o = {};
            n.fontStack && (o["text-font"] = ["literal", n.fontStack.split(",")]), n.scale && (o["font-scale"] = n.scale), n.textColor && (o["text-color"] = ["rgba"].concat(n.textColor.toRenderColor(null).toArray())), e.push(o);
          }
          return e;
        }
      }
      class rr {
        constructor(e, n) {
          if (this.id = e, this.options = n || { params: {} }, this.options.transform) {
            const { a: o, b: u, c: l, d: f, e: v, f: S } = this.options.transform;
            this.options.transform = new DOMMatrix([o, u, l, f, v, S]);
          } else
            this.options.transform = new DOMMatrix([1, 0, 0, 1, 0, 0]);
        }
        static deserializeId(e) {
          return JSON.parse(e).id;
        }
        static deserializeFromString(e) {
          const n = JSON.parse(e), { a: o, b: u, c: l, d: f, e: v, f: S } = n.options.transform;
          return new DOMMatrix([o, u, l, f, v, S]), new rr(n.id, n.options);
        }
        scaleSelf(e) {
          return this.options.transform = this.options.transform.scale(e), this;
        }
        serialize() {
          const e = { id: this.id };
          this.options && (e.options = this.options);
          const { a: n, b: o, c: u, d: l, e: f, f: v } = this.options.transform;
          return e.options.transform = { a: n, b: o, c: u, d: l, e: f, f: v }, JSON.stringify(e);
        }
      }
      class ss {
        constructor(e) {
          this.namePrimary = e.namePrimary, e.nameSecondary && (this.nameSecondary = e.nameSecondary), e.optionsPrimary && (this.optionsPrimary = e.optionsPrimary), e.optionsSecondary && (this.optionsSecondary = e.optionsSecondary), this.available = e.available;
        }
        toString() {
          return this.namePrimary && this.nameSecondary ? `[${this.namePrimary},${this.nameSecondary}]` : this.namePrimary;
        }
        getPrimary() {
          return new rr(this.namePrimary, { params: this.optionsPrimary && this.optionsPrimary.params || {} });
        }
        getSerializedPrimary() {
          return this.getPrimary().serialize();
        }
        getSecondary() {
          return this.nameSecondary ? new rr(this.nameSecondary, { params: this.optionsSecondary && this.optionsSecondary.params || {} }) : null;
        }
        static from(e) {
          return typeof e == "string" ? ss.build(e) : e;
        }
        static build(e, n, o, u) {
          return e ? new ss({ namePrimary: e, nameSecondary: n, optionsPrimary: o, optionsSecondary: u, available: !1 }) : null;
        }
      }
      function fa(r, e, n, o) {
        return typeof r == "number" && r >= 0 && r <= 255 && typeof e == "number" && e >= 0 && e <= 255 && typeof n == "number" && n >= 0 && n <= 255 ? o === void 0 || typeof o == "number" && o >= 0 && o <= 1 ? null : `Invalid rgba value [${[r, e, n, o].join(", ")}]: 'a' must be between 0 and 1.` : `Invalid rgba value [${(typeof o == "number" ? [r, e, n, o] : [r, e, n]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`;
      }
      function wo(r) {
        if (r === null || typeof r == "string" || typeof r == "boolean" || typeof r == "number" || r instanceof ki || r instanceof nn || r instanceof Dn || r instanceof ss)
          return !0;
        if (Array.isArray(r)) {
          for (const e of r)
            if (!wo(e))
              return !1;
          return !0;
        }
        if (typeof r == "object") {
          for (const e in r)
            if (!wo(r[e]))
              return !1;
          return !0;
        }
        return !1;
      }
      function vn(r) {
        if (r === null)
          return ha;
        if (typeof r == "string")
          return Fi;
        if (typeof r == "boolean")
          return Li;
        if (typeof r == "number")
          return Ot;
        if (r instanceof ki)
          return ms;
        if (r instanceof nn)
          return _s;
        if (r instanceof Dn)
          return Js;
        if (r instanceof ss)
          return Ho;
        if (Array.isArray(r)) {
          const e = r.length;
          let n;
          for (const o of r) {
            const u = vn(o);
            if (n) {
              if (n === u)
                continue;
              n = Pi;
              break;
            }
            n = u;
          }
          return Ss(n || Pi, e);
        }
        return bo;
      }
      function Ir(r) {
        const e = typeof r;
        return r === null ? "" : e === "string" || e === "number" || e === "boolean" ? String(r) : r instanceof ki ? r.toStringPremultipliedAlpha() : r instanceof Dn || r instanceof ss ? r.toString() : JSON.stringify(r);
      }
      class Lr {
        constructor(e, n) {
          this.type = e, this.value = n;
        }
        static parse(e, n) {
          if (e.length !== 2)
            return n.error(`'literal' expression requires exactly one argument, but found ${e.length - 1} instead.`);
          if (!wo(e[1]))
            return n.error("invalid value");
          const o = e[1];
          let u = vn(o);
          const l = n.expectedType;
          return u.kind !== "array" || u.N !== 0 || !l || l.kind !== "array" || typeof l.N == "number" && l.N !== 0 || (u = l), new Lr(u, o);
        }
        evaluate() {
          return this.value;
        }
        eachChild() {
        }
        outputDefined() {
          return !0;
        }
        serialize() {
          return this.type.kind === "array" || this.type.kind === "object" ? ["literal", this.value] : this.value instanceof ki ? ["rgba"].concat(this.value.toRenderColor(null).toArray()) : this.value instanceof Dn ? this.value.serialize() : this.value;
        }
      }
      class qn {
        constructor(e) {
          this.name = "ExpressionEvaluationError", this.message = e;
        }
        toJSON() {
          return this.message;
        }
      }
      const pa = { string: Fi, number: Ot, boolean: Li, object: bo };
      class zr {
        constructor(e, n) {
          this.type = e, this.args = n;
        }
        static parse(e, n) {
          if (e.length < 2)
            return n.error("Expected at least one argument.");
          let o, u = 1;
          const l = e[0];
          if (l === "array") {
            let v, S;
            if (e.length > 2) {
              const D = e[1];
              if (typeof D != "string" || !(D in pa) || D === "object")
                return n.error('The item type argument of "array" must be one of string, number, boolean', 1);
              v = pa[D], u++;
            } else
              v = Pi;
            if (e.length > 3) {
              if (e[2] !== null && (typeof e[2] != "number" || e[2] < 0 || e[2] !== Math.floor(e[2])))
                return n.error('The length argument to "array" must be a positive integer literal', 2);
              S = e[2], u++;
            }
            o = Ss(v, S);
          } else
            o = pa[l];
          const f = [];
          for (; u < e.length; u++) {
            const v = n.parse(e[u], u, Pi);
            if (!v)
              return null;
            f.push(v);
          }
          return new zr(o, f);
        }
        evaluate(e) {
          for (let n = 0; n < this.args.length; n++) {
            const o = this.args[n].evaluate(e);
            if (!ua(this.type, vn(o)))
              return o;
            if (n === this.args.length - 1)
              throw new qn(`The expression ${JSON.stringify(this.args[n].serialize())} evaluated to ${un(vn(o))} but was expected to be of type ${un(this.type)}.`);
          }
          return null;
        }
        eachChild(e) {
          this.args.forEach(e);
        }
        outputDefined() {
          return this.args.every((e) => e.outputDefined());
        }
        serialize() {
          const e = this.type, n = [e.kind];
          if (e.kind === "array") {
            const o = e.itemType;
            if (o.kind === "string" || o.kind === "number" || o.kind === "boolean") {
              n.push(o.kind);
              const u = e.N;
              (typeof u == "number" || this.args.length > 1) && n.push(u);
            }
          }
          return n.concat(this.args.map((o) => o.serialize()));
        }
      }
      class Es {
        constructor(e) {
          this.type = Js, this.sections = e;
        }
        static parse(e, n) {
          if (e.length < 2)
            return n.error("Expected at least one argument.");
          const o = e[1];
          if (!Array.isArray(o) && typeof o == "object")
            return n.error("First argument must be an image or text section.");
          const u = [];
          let l = !1;
          for (let f = 1; f <= e.length - 1; ++f) {
            const v = e[f];
            if (l && typeof v == "object" && !Array.isArray(v)) {
              l = !1;
              let S = null;
              if (v["font-scale"] && (S = n.parseObjectValue(v["font-scale"], f, "font-scale", Ot), !S))
                return null;
              let D = null;
              if (v["text-font"] && (D = n.parseObjectValue(v["text-font"], f, "text-font", Ss(Fi)), !D))
                return null;
              let x = null;
              if (v["text-color"] && (x = n.parseObjectValue(v["text-color"], f, "text-color", ms), !x))
                return null;
              const P = u[u.length - 1];
              P.scale = S, P.font = D, P.textColor = x;
            } else {
              const S = n.parse(e[f], f, Pi);
              if (!S)
                return null;
              const D = S.type.kind;
              if (D !== "string" && D !== "value" && D !== "null" && D !== "resolvedImage")
                return n.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");
              l = !0, u.push({ content: S, scale: null, font: null, textColor: null });
            }
          }
          return new Es(u);
        }
        evaluate(e) {
          return new Dn(this.sections.map((n) => {
            const o = n.content.evaluate(e);
            return vn(o) === Ho ? new dl("", o, null, null, null) : new dl(Ir(o), null, n.scale ? n.scale.evaluate(e) : null, n.font ? n.font.evaluate(e).join(",") : null, n.textColor ? n.textColor.evaluate(e) : null);
          }));
        }
        eachChild(e) {
          for (const n of this.sections)
            e(n.content), n.scale && e(n.scale), n.font && e(n.font), n.textColor && e(n.textColor);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          const e = ["format"];
          for (const n of this.sections) {
            e.push(n.content.serialize());
            const o = {};
            n.scale && (o["font-scale"] = n.scale.serialize()), n.font && (o["text-font"] = n.font.serialize()), n.textColor && (o["text-color"] = n.textColor.serialize()), e.push(o);
          }
          return e;
        }
      }
      class Oa {
        constructor(e, n, o, u) {
          this._imageWarnHistory = {}, this.type = Ho, this.inputPrimary = e, this.inputSecondary = n, this.inputPrimaryParams = o, this.inputSecondaryParams = u;
        }
        static parse(e, n) {
          if (e.length < 2)
            return n.error("Expected two or more arguments.");
          let o = 1;
          const u = [];
          function l() {
            if (o < e.length) {
              const v = n.parse(e[o], o++, Fi);
              return v ? (u.push({ image: v, options: void 0 }), !0) : (n.error(u.length ? "Secondary image variant is not a string." : "No image name provided."), !1);
            }
            return !0;
          }
          function f() {
            if (o < e.length) {
              if ((v = e[o]) === null || typeof v != "object" || Array.isArray(v))
                return !0;
              const S = e[o].params, D = n.concat(o);
              if (!S)
                return o++, !0;
              if (typeof S != "object" || S.constructor !== Object)
                return D.error('Image options "params" should be an object'), !1;
              const x = {}, P = D.concat(void 0, "params");
              for (const I in S) {
                if (!I)
                  return P.error("Image parameter name should be non-empty"), !1;
                const M = P.concat(void 0, I).parse(S[I], void 0, ms, void 0, { typeAnnotation: "coerce" });
                if (!M)
                  return !1;
                x[I] = M;
              }
              return u[u.length - 1].options = x, o++, !0;
            }
            var v;
            return !0;
          }
          for (let v = 0; v < 2; v++)
            if (!l() || !f())
              return;
          return new Oa(u[0].image, u[1] ? u[1].image : void 0, u[0].options, u[1] ? u[1].options : void 0);
        }
        evaluateParams(e, n) {
          const o = {};
          if (n) {
            for (const u in n)
              if (n[u])
                try {
                  const l = n[u].evaluate(e), f = `Ignoring image parameter "${u}" with semi-transparent color ${l.toString()}`;
                  if (l.a !== 1) {
                    this._imageWarnHistory[f] || (console.warn(f), this._imageWarnHistory[f] = !0);
                    continue;
                  }
                  o[u] = l;
                } catch {
                  continue;
                }
            if (Object.keys(o).length !== 0)
              return { params: o };
          }
        }
        evaluate(e) {
          const n = ss.build(this.inputPrimary.evaluate(e), this.inputSecondary ? this.inputSecondary.evaluate(e) : void 0, this.inputPrimaryParams ? this.evaluateParams(e, this.inputPrimaryParams) : void 0, this.inputSecondaryParams ? this.evaluateParams(e, this.inputSecondaryParams) : void 0);
          return n && e.availableImages && (n.available = e.availableImages.indexOf(n.namePrimary) > -1, n.nameSecondary && n.available && e.availableImages && (n.available = e.availableImages.indexOf(n.nameSecondary) > -1)), n;
        }
        eachChild(e) {
          if (e(this.inputPrimary), this.inputPrimaryParams)
            for (const n in this.inputPrimaryParams)
              this.inputPrimaryParams[n] && e(this.inputPrimaryParams[n]);
          if (this.inputSecondary && (e(this.inputSecondary), this.inputSecondaryParams))
            for (const n in this.inputSecondaryParams)
              this.inputSecondaryParams[n] && e(this.inputSecondaryParams[n]);
        }
        outputDefined() {
          return !1;
        }
        serializeParams(e) {
          const n = {};
          if (e) {
            for (const o in e)
              e[o] && (n[o] = e[o].serialize());
            return { params: n };
          }
        }
        serialize() {
          const e = ["image", this.inputPrimary.serialize()];
          return this.inputPrimaryParams && e.push(this.serializeParams(this.inputPrimaryParams)), this.inputSecondary && (e.push(this.inputSecondary.serialize()), this.inputSecondaryParams && e.push(this.serializeParams(this.inputSecondaryParams))), e;
        }
      }
      function qo(r) {
        return r instanceof Number ? "number" : r instanceof String ? "string" : r instanceof Boolean ? "boolean" : Array.isArray(r) ? "array" : r === null ? "null" : typeof r;
      }
      const Wo = { "to-boolean": Li, "to-color": ms, "to-number": Ot, "to-string": Fi };
      class so {
        constructor(e, n) {
          this.type = e, this.args = n;
        }
        static parse(e, n) {
          if (e.length < 2)
            return n.error("Expected at least one argument.");
          const o = e[0], u = [];
          let l = ha;
          if (o === "to-array") {
            if (!Array.isArray(e[1]))
              return null;
            const f = e[1].length;
            if (n.expectedType) {
              if (n.expectedType.kind !== "array")
                return n.error(`Expected ${n.expectedType.kind} but found array.`);
              l = Ss(n.expectedType.itemType, f);
            } else {
              if (!(f > 0 && wo(e[1][0])))
                return null;
              l = Ss(vn(e[1][0]), f);
            }
            for (let v = 0; v < f; v++) {
              const S = e[1][v];
              let D;
              if (qo(S) === "array")
                D = n.parse(S, void 0, l.itemType);
              else {
                const x = qo(S);
                if (x !== l.itemType.kind)
                  return n.error(`Expected ${l.itemType.kind} but found ${x}.`);
                D = n.registry.literal.parse(["literal", S === void 0 ? null : S], n);
              }
              if (!D)
                return null;
              u.push(D);
            }
          } else {
            if ((o === "to-boolean" || o === "to-string") && e.length !== 2)
              return n.error("Expected one argument.");
            l = Wo[o];
            for (let f = 1; f < e.length; f++) {
              const v = n.parse(e[f], f, Pi);
              if (!v)
                return null;
              u.push(v);
            }
          }
          return new so(l, u);
        }
        evaluate(e) {
          if (this.type.kind === "boolean")
            return !!this.args[0].evaluate(e);
          if (this.type.kind === "color") {
            let n, o;
            for (const u of this.args) {
              if (n = u.evaluate(e), o = null, n instanceof ki)
                return n;
              if (typeof n == "string") {
                const l = e.parseColor(n);
                if (l)
                  return l;
              } else if (Array.isArray(n) && (o = n.length < 3 || n.length > 4 ? `Invalid rbga value ${JSON.stringify(n)}: expected an array containing either three or four numeric values.` : fa(n[0], n[1], n[2], n[3]), !o))
                return new ki(n[0] / 255, n[1] / 255, n[2] / 255, n[3]);
            }
            throw new qn(o || `Could not parse color from value '${typeof n == "string" ? n : String(JSON.stringify(n))}'`);
          }
          if (this.type.kind === "number") {
            let n = null;
            for (const o of this.args) {
              if (n = o.evaluate(e), n === null)
                return 0;
              const u = Number(n);
              if (!isNaN(u))
                return u;
            }
            throw new qn(`Could not convert ${JSON.stringify(n)} to number.`);
          }
          return this.type.kind === "formatted" ? Dn.fromString(Ir(this.args[0].evaluate(e))) : this.type.kind === "resolvedImage" ? ss.build(Ir(this.args[0].evaluate(e))) : this.type.kind === "array" ? this.args.map((n) => n.evaluate(e)) : Ir(this.args[0].evaluate(e));
        }
        eachChild(e) {
          this.args.forEach(e);
        }
        outputDefined() {
          return this.args.every((e) => e.outputDefined());
        }
        serialize() {
          if (this.type.kind === "formatted")
            return new Es([{ content: this.args[0], scale: null, font: null, textColor: null }]).serialize();
          if (this.type.kind === "resolvedImage")
            return new Oa(this.args[0]).serialize();
          const e = this.type.kind === "array" ? [] : [`to-${this.type.kind}`];
          return this.eachChild((n) => {
            e.push(n.serialize());
          }), e;
        }
      }
      const Nc = ["Unknown", "Point", "LineString", "Polygon"];
      class Fa {
        constructor(e, n) {
          this.globals = null, this.feature = null, this.featureState = null, this.formattedSection = null, this._parseColorCache = {}, this.availableImages = null, this.canonical = null, this.featureTileCoord = null, this.featureDistanceData = null, this.scope = e, this.options = n;
        }
        id() {
          return this.feature && this.feature.id !== void 0 ? this.feature.id : null;
        }
        geometryType() {
          return this.feature ? typeof this.feature.type == "number" ? Nc[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 || {};
        }
        measureLight(e) {
          return this.globals.brightness || 0;
        }
        distanceFromCenter() {
          if (this.featureTileCoord && this.featureDistanceData) {
            const e = this.featureDistanceData.center, n = this.featureDistanceData.scale, { x: o, y: u } = this.featureTileCoord;
            return this.featureDistanceData.bearing[0] * (o * n - e[0]) + this.featureDistanceData.bearing[1] * (u * n - e[1]);
          }
          return 0;
        }
        parseColor(e) {
          let n = this._parseColorCache[e];
          return n || (n = this._parseColorCache[e] = ki.parse(e)), n;
        }
        getConfig(e) {
          return this.options ? this.options.get(e) : null;
        }
      }
      class or {
        constructor(e, n, o, u, l) {
          this.name = e, this.type = n, this._evaluate = o, this.args = u, this._overloadIndex = l;
        }
        evaluate(e) {
          if (!this._evaluate) {
            const n = or.definitions[this.name];
            this._evaluate = Array.isArray(n) ? n[2] : n.overloads[this._overloadIndex][1];
          }
          return this._evaluate(e, this.args);
        }
        eachChild(e) {
          this.args.forEach(e);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          return [this.name].concat(this.args.map((e) => e.serialize()));
        }
        static parse(e, n) {
          const o = e[0], u = or.definitions[o];
          if (!u)
            return n.error(`Unknown expression "${o}". If you wanted a literal array, use ["literal", [...]].`, 0);
          const l = Array.isArray(u) ? u[0] : u.type, f = Array.isArray(u) ? [[u[1], u[2]]] : u.overloads, v = [];
          let S = null, D = -1;
          for (const [x, P] of f) {
            if (Array.isArray(x) && x.length !== e.length - 1)
              continue;
            v.push(x), D++, S = new Qr(n.registry, n.path, null, n.scope, void 0, n._scope, n.options);
            const I = [];
            let M = !1;
            for (let C = 1; C < e.length; C++) {
              const k = e[C], V = Array.isArray(x) ? x[C - 1] : x.type, U = S.parse(k, 1 + I.length, V);
              if (!U) {
                M = !0;
                break;
              }
              I.push(U);
            }
            if (!M)
              if (Array.isArray(x) && x.length !== I.length)
                S.error(`Expected ${x.length} arguments, but found ${I.length} instead.`);
              else {
                for (let C = 0; C < I.length; C++) {
                  const k = Array.isArray(x) ? x[C] : x.type, V = I[C];
                  S.concat(C + 1).checkSubtype(k, V.type);
                }
                if (S.errors.length === 0)
                  return new or(o, l, P, I, D);
              }
          }
          if (v.length === 1)
            n.errors.push(...S.errors);
          else {
            const x = (v.length ? v : f.map(([I]) => I)).map(fl).join(" | "), P = [];
            for (let I = 1; I < e.length; I++) {
              const M = n.parse(e[I], 1 + P.length);
              if (!M)
                return null;
              P.push(un(M.type));
            }
            n.error(`Expected arguments of type ${x}, but found (${P.join(", ")}) instead.`);
          }
          return null;
        }
        static register(e, n) {
          or.definitions = n;
          for (const o in n)
            e[o] = or;
        }
      }
      function fl(r) {
        return Array.isArray(r) ? `(${r.map(un).join(", ")})` : `(${un(r.type)}...)`;
      }
      class pl {
        constructor(e, n, o) {
          this.type = _s, this.locale = o, this.caseSensitive = e, this.diacriticSensitive = n;
        }
        static parse(e, n) {
          if (e.length !== 2)
            return n.error("Expected one argument.");
          const o = e[1];
          if (typeof o != "object" || Array.isArray(o))
            return n.error("Collator options argument must be an object.");
          const u = o["case-sensitive"] === void 0 ? n.parse(!1, 1, Li) : n.parseObjectValue(o["case-sensitive"], 1, "case-sensitive", Li);
          if (!u)
            return null;
          const l = o["diacritic-sensitive"] === void 0 ? n.parse(!1, 1, Li) : n.parseObjectValue(o["diacritic-sensitive"], 1, "diacritic-sensitive", Li);
          if (!l)
            return null;
          let f = null;
          return o.locale && (f = n.parseObjectValue(o.locale, 1, "locale", Fi), !f) ? null : new pl(u, l, f);
        }
        evaluate(e) {
          return new nn(this.caseSensitive.evaluate(e), this.diacriticSensitive.evaluate(e), this.locale ? this.locale.evaluate(e) : null);
        }
        eachChild(e) {
          e(this.caseSensitive), e(this.diacriticSensitive), this.locale && e(this.locale);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          const e = {};
          return e["case-sensitive"] = this.caseSensitive.serialize(), e["diacritic-sensitive"] = this.diacriticSensitive.serialize(), this.locale && (e.locale = this.locale.serialize()), ["collator", e];
        }
      }
      function Nh(r, e, n = 0, o = r.length - 1, u = Vc) {
        for (; o > n; ) {
          if (o - n > 600) {
            const S = o - n + 1, D = e - n + 1, x = Math.log(S), P = 0.5 * Math.exp(2 * x / 3), I = 0.5 * Math.sqrt(x * P * (S - P) / S) * (D - S / 2 < 0 ? -1 : 1);
            Nh(r, e, Math.max(n, Math.floor(e - D * P / S + I)), Math.min(o, Math.floor(e + (S - D) * P / S + I)), u);
          }
          const l = r[e];
          let f = n, v = o;
          for (ml(r, n, e), u(r[o], l) > 0 && ml(r, n, o); f < v; ) {
            for (ml(r, f, v), f++, v--; u(r[f], l) < 0; )
              f++;
            for (; u(r[v], l) > 0; )
              v--;
          }
          u(r[n], l) === 0 ? ml(r, n, v) : (v++, ml(r, v, o)), v <= e && (n = v + 1), e <= v && (o = v - 1);
        }
      }
      function ml(r, e, n) {
        const o = r[e];
        r[e] = r[n], r[n] = o;
      }
      function Vc(r, e) {
        return r < e ? -1 : r > e ? 1 : 0;
      }
      function Qu(r) {
        let e = 0;
        for (let n, o, u = 0, l = r.length, f = l - 1; u < l; f = u++)
          n = r[u], o = r[f], e += (o.x - n.x) * (n.y + o.y);
        return e;
      }
      function Ba(r, e) {
        r[0] = Math.min(r[0], e[0]), r[1] = Math.min(r[1], e[1]), r[2] = Math.max(r[2], e[0]), r[3] = Math.max(r[3], e[1]);
      }
      function Na(r, e) {
        return !(r[0] <= e[0] || r[2] >= e[2] || r[1] <= e[1] || r[3] >= e[3]);
      }
      function _l(r, e, n) {
        const o = r[0] - e[0], u = r[1] - e[1], l = r[0] - n[0], f = r[1] - n[1];
        return o * f - l * u == 0 && o * l <= 0 && u * f <= 0;
      }
      function Ds(r, e, n = !1) {
        let o = !1;
        for (let v = 0, S = e.length; v < S; v++) {
          const D = e[v];
          for (let x = 0, P = D.length, I = P - 1; x < P; I = x++) {
            const M = D[I], C = D[x];
            if (_l(r, M, C))
              return n;
            (l = M)[1] > (u = r)[1] != (f = C)[1] > u[1] && u[0] < (f[0] - l[0]) * (u[1] - l[1]) / (f[1] - l[1]) + l[0] && (o = !o);
          }
        }
        var u, l, f;
        return o;
      }
      function Vh(r, e, n, o) {
        const u = o[0] - n[0], l = o[1] - n[1], f = (r[0] - n[0]) * l - u * (r[1] - n[1]), v = (e[0] - n[0]) * l - u * (e[1] - n[1]);
        return f > 0 && v < 0 || f < 0 && v > 0;
      }
      function $o(r, e, n, o) {
        return (u = [o[0] - n[0], o[1] - n[1]])[0] * (l = [e[0] - r[0], e[1] - r[1]])[1] - u[1] * l[0] != 0 && !(!Vh(r, e, n, o) || !Vh(n, o, r, e));
        var u, l;
      }
      const rs = 8192;
      function Uh(r, e) {
        const n = (180 + r[0]) / 360, o = (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + r[1] * Math.PI / 360))) / 360, u = Math.pow(2, e.z);
        return [Math.round(n * u * rs), Math.round(o * u * rs)];
      }
      function jh(r, e) {
        for (let n = 0; n < e.length; n++)
          if (Ds(r, e[n]))
            return !0;
        return !1;
      }
      function ed(r, e, n) {
        for (const o of n)
          for (let u = 0, l = o.length, f = l - 1; u < l; f = u++)
            if ($o(r, e, o[f], o[u]))
              return !0;
        return !1;
      }
      function Hl(r, e) {
        for (let n = 0; n < r.length; ++n)
          if (!Ds(r[n], e))
            return !1;
        for (let n = 0; n < r.length - 1; ++n)
          if (ed(r[n], r[n + 1], e))
            return !1;
        return !0;
      }
      function Xo(r, e) {
        for (let n = 0; n < e.length; n++)
          if (Hl(r, e[n]))
            return !0;
        return !1;
      }
      function bi(r, e, n) {
        const o = [];
        for (let u = 0; u < r.length; u++) {
          const l = [];
          for (let f = 0; f < r[u].length; f++) {
            const v = Uh(r[u][f], n);
            Ba(e, v), l.push(v);
          }
          o.push(l);
        }
        return o;
      }
      function Wt(r, e, n) {
        const o = [];
        for (let u = 0; u < r.length; u++) {
          const l = bi(r[u], e, n);
          o.push(l);
        }
        return o;
      }
      function gl(r, e, n, o) {
        if (r[0] < n[0] || r[0] > n[2]) {
          const u = 0.5 * o;
          let l = r[0] - n[0] > u ? -o : n[0] - r[0] > u ? o : 0;
          l === 0 && (l = r[0] - n[2] > u ? -o : n[2] - r[0] > u ? o : 0), r[0] += l;
        }
        Ba(e, r);
      }
      function ci(r, e, n, o) {
        const u = Math.pow(2, o.z) * rs, l = [o.x * rs, o.y * rs], f = [];
        if (!r)
          return f;
        for (const v of r)
          for (const S of v) {
            const D = [S.x + l[0], S.y + l[1]];
            gl(D, e, n, u), f.push(D);
          }
        return f;
      }
      function ar(r, e, n, o) {
        const u = Math.pow(2, o.z) * rs, l = [o.x * rs, o.y * rs], f = [];
        if (!r)
          return f;
        for (const S of r) {
          const D = [];
          for (const x of S) {
            const P = [x.x + l[0], x.y + l[1]];
            Ba(e, P), D.push(P);
          }
          f.push(D);
        }
        if (e[2] - e[0] <= u / 2) {
          (v = e)[0] = v[1] = 1 / 0, v[2] = v[3] = -1 / 0;
          for (const S of f)
            for (const D of S)
              gl(D, e, n, u);
        }
        var v;
        return f;
      }
      class lr {
        constructor(e, n) {
          this.type = Li, this.geojson = e, this.geometries = n;
        }
        static parse(e, n) {
          if (e.length !== 2)
            return n.error(`'within' expression requires exactly one argument, but found ${e.length - 1} instead.`);
          if (wo(e[1])) {
            const o = e[1];
            if (o.type === "FeatureCollection")
              for (let u = 0; u < o.features.length; ++u) {
                const l = o.features[u].geometry.type;
                if (l === "Polygon" || l === "MultiPolygon")
                  return new lr(o, o.features[u].geometry);
              }
            else if (o.type === "Feature") {
              const u = o.geometry.type;
              if (u === "Polygon" || u === "MultiPolygon")
                return new lr(o, o.geometry);
            } else if (o.type === "Polygon" || o.type === "MultiPolygon")
              return new lr(o, o);
          }
          return n.error("'within' expression requires valid geojson object that contains polygon geometry type.");
        }
        evaluate(e) {
          if (e.geometry() != null && e.canonicalID() != null) {
            if (e.geometryType() === "Point")
              return function(n, o) {
                const u = [1 / 0, 1 / 0, -1 / 0, -1 / 0], l = [1 / 0, 1 / 0, -1 / 0, -1 / 0], f = n.canonicalID();
                if (!f)
                  return !1;
                if (o.type === "Polygon") {
                  const v = bi(o.coordinates, l, f), S = ci(n.geometry(), u, l, f);
                  if (!Na(u, l))
                    return !1;
                  for (const D of S)
                    if (!Ds(D, v))
                      return !1;
                }
                if (o.type === "MultiPolygon") {
                  const v = Wt(o.coordinates, l, f), S = ci(n.geometry(), u, l, f);
                  if (!Na(u, l))
                    return !1;
                  for (const D of S)
                    if (!jh(D, v))
                      return !1;
                }
                return !0;
              }(e, this.geometries);
            if (e.geometryType() === "LineString")
              return function(n, o) {
                const u = [1 / 0, 1 / 0, -1 / 0, -1 / 0], l = [1 / 0, 1 / 0, -1 / 0, -1 / 0], f = n.canonicalID();
                if (!f)
                  return !1;
                if (o.type === "Polygon") {
                  const v = bi(o.coordinates, l, f), S = ar(n.geometry(), u, l, f);
                  if (!Na(u, l))
                    return !1;
                  for (const D of S)
                    if (!Hl(D, v))
                      return !1;
                }
                if (o.type === "MultiPolygon") {
                  const v = Wt(o.coordinates, l, f), S = ar(n.geometry(), u, l, f);
                  if (!Na(u, l))
                    return !1;
                  for (const D of S)
                    if (!Xo(D, v))
                      return !1;
                }
                return !0;
              }(e, this.geometries);
          }
          return !1;
        }
        eachChild() {
        }
        outputDefined() {
          return !0;
        }
        serialize() {
          return ["within", this.geojson];
        }
      }
      const ti = { kilometers: 1, miles: 1e3 / 1609.344, nauticalmiles: 1e3 / 1852, meters: 1e3, metres: 1e3, yards: 1e3 / 0.9144, feet: 1e3 / 0.3048, inches: 1e3 / 0.0254 }, Xr = 1 / 298.257223563, ql = Xr * (2 - Xr), Yr = Math.PI / 180;
      class Va {
        static fromTile(e, n, o) {
          const u = Math.PI * (1 - 2 * (e + 0.5) / Math.pow(2, n)), l = Math.atan(0.5 * (Math.exp(u) - Math.exp(-u))) / Yr;
          return new Va(l, o);
        }
        static get units() {
          return ti;
        }
        constructor(e, n) {
          if (e === void 0)
            throw new Error("No latitude given.");
          if (n && !ti[n])
            throw new Error(`Unknown unit ${n}. Use one of: ${Object.keys(ti).join(", ")}`);
          const o = 6378.137 * Yr * (n ? ti[n] : 1), u = Math.cos(e * Yr), l = 1 / (1 - ql * (1 - u * u)), f = Math.sqrt(l);
          this.kx = o * f * u, this.ky = o * f * l * (1 - ql);
        }
        distance(e, n) {
          const o = ks(e[0] - n[0]) * this.kx, u = (e[1] - n[1]) * this.ky;
          return Math.sqrt(o * o + u * u);
        }
        bearing(e, n) {
          const o = ks(n[0] - e[0]) * this.kx;
          return Math.atan2(o, (n[1] - e[1]) * this.ky) / Yr;
        }
        destination(e, n, o) {
          const u = o * Yr;
          return this.offset(e, Math.sin(u) * n, Math.cos(u) * n);
        }
        offset(e, n, o) {
          return [e[0] + n / this.kx, e[1] + o / this.ky];
        }
        lineDistance(e) {
          let n = 0;
          for (let o = 0; o < e.length - 1; o++)
            n += this.distance(e[o], e[o + 1]);
          return n;
        }
        area(e) {
          let n = 0;
          for (let o = 0; o < e.length; o++) {
            const u = e[o];
            for (let l = 0, f = u.length, v = f - 1; l < f; v = l++)
              n += ks(u[l][0] - u[v][0]) * (u[l][1] + u[v][1]) * (o ? -1 : 1);
          }
          return Math.abs(n) / 2 * this.kx * this.ky;
        }
        along(e, n) {
          let o = 0;
          if (n <= 0)
            return e[0];
          for (let u = 0; u < e.length - 1; u++) {
            const l = e[u], f = e[u + 1], v = this.distance(l, f);
            if (o += v, o > n)
              return bs(l, f, (n - (o - v)) / v);
          }
          return e[e.length - 1];
        }
        pointToSegmentDistance(e, n, o) {
          let [u, l] = n, f = ks(o[0] - u) * this.kx, v = (o[1] - l) * this.ky;
          if (f !== 0 || v !== 0) {
            const S = (ks(e[0] - u) * this.kx * f + (e[1] - l) * this.ky * v) / (f * f + v * v);
            S > 1 ? (u = o[0], l = o[1]) : S > 0 && (u += f / this.kx * S, l += v / this.ky * S);
          }
          return f = ks(e[0] - u) * this.kx, v = (e[1] - l) * this.ky, Math.sqrt(f * f + v * v);
        }
        pointOnLine(e, n) {
          let o = 1 / 0, u = e[0][0], l = e[0][1], f = 0, v = 0;
          for (let S = 0; S < e.length - 1; S++) {
            let D = e[S][0], x = e[S][1], P = ks(e[S + 1][0] - D) * this.kx, I = (e[S + 1][1] - x) * this.ky, M = 0;
            P === 0 && I === 0 || (M = (ks(n[0] - D) * this.kx * P + (n[1] - x) * this.ky * I) / (P * P + I * I), M > 1 ? (D = e[S + 1][0], x = e[S + 1][1]) : M > 0 && (D += P / this.kx * M, x += I / this.ky * M)), P = ks(n[0] - D) * this.kx, I = (n[1] - x) * this.ky;
            const C = P * P + I * I;
            C < o && (o = C, u = D, l = x, f = S, v = M);
          }
          return { point: [u, l], index: f, t: Math.max(0, Math.min(1, v)) };
        }
        lineSlice(e, n, o) {
          let u = this.pointOnLine(o, e), l = this.pointOnLine(o, n);
          if (u.index > l.index || u.index === l.index && u.t > l.t) {
            const D = u;
            u = l, l = D;
          }
          const f = [u.point], v = u.index + 1, S = l.index;
          !To(o[v], f[0]) && v <= S && f.push(o[v]);
          for (let D = v + 1; D <= S; D++)
            f.push(o[D]);
          return To(o[S], l.point) || f.push(l.point), f;
        }
        lineSliceAlong(e, n, o) {
          let u = 0;
          const l = [];
          for (let f = 0; f < o.length - 1; f++) {
            const v = o[f], S = o[f + 1], D = this.distance(v, S);
            if (u += D, u > e && l.length === 0 && l.push(bs(v, S, (e - (u - D)) / D)), u >= n)
              return l.push(bs(v, S, (n - (u - D)) / D)), l;
            u > e && l.push(S);
          }
          return l;
        }
        bufferPoint(e, n) {
          const o = n / this.ky, u = n / this.kx;
          return [e[0] - u, e[1] - o, e[0] + u, e[1] + o];
        }
        bufferBBox(e, n) {
          const o = n / this.ky, u = n / this.kx;
          return [e[0] - u, e[1] - o, e[2] + u, e[3] + o];
        }
        insideBBox(e, n) {
          return ks(e[0] - n[0]) >= 0 && ks(e[0] - n[2]) <= 0 && e[1] >= n[1] && e[1] <= n[3];
        }
      }
      function To(r, e) {
        return r[0] === e[0] && r[1] === e[1];
      }
      function bs(r, e, n) {
        const o = ks(e[0] - r[0]);
        return [r[0] + o * n, r[1] + (e[1] - r[1]) * n];
      }
      function ks(r) {
        for (; r < -180; )
          r += 360;
        for (; r > 180; )
          r -= 360;
        return r;
      }
      class Wl {
        constructor(e = [], n = (o, u) => o < u ? -1 : o > u ? 1 : 0) {
          if (this.data = e, this.length = this.data.length, this.compare = n, this.length > 0)
            for (let o = (this.length >> 1) - 1; o >= 0; o--)
              this._down(o);
        }
        push(e) {
          this.data.push(e), this._up(this.length++);
        }
        pop() {
          if (this.length === 0)
            return;
          const e = this.data[0], n = this.data.pop();
          return --this.length > 0 && (this.data[0] = n, this._down(0)), e;
        }
        peek() {
          return this.data[0];
        }
        _up(e) {
          const { data: n, compare: o } = this, u = n[e];
          for (; e > 0; ) {
            const l = e - 1 >> 1, f = n[l];
            if (o(u, f) >= 0)
              break;
            n[e] = f, e = l;
          }
          n[e] = u;
        }
        _down(e) {
          const { data: n, compare: o } = this, u = this.length >> 1, l = n[e];
          for (; e < u; ) {
            let f = 1 + (e << 1);
            const v = f + 1;
            if (v < this.length && o(n[v], n[f]) < 0 && (f = v), o(n[f], l) >= 0)
              break;
            n[e] = n[f], e = f;
          }
          n[e] = l;
        }
      }
      var Tt = 8192;
      function ma(r, e) {
        return e.dist - r.dist;
      }
      const Mo = 100, gs = 50;
      function Gh(r) {
        const e = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
        if (e.length !== r.length)
          return !1;
        for (let n = 0; n < e.length; n++)
          if (e[n] !== r[n])
            return !1;
        return !0;
      }
      function Dr(r) {
        return r[1] - r[0] + 1;
      }
      function So(r, e) {
        const n = r[1] >= r[0] && r[1] < e;
        return n || console.warn("Distance Expression: Index is out of range"), n;
      }
      function Kr(r, e) {
        if (r[0] > r[1])
          return [null, null];
        const n = Dr(r);
        if (e) {
          if (n === 2)
            return [r, null];
          const o = Math.floor(n / 2);
          return [[r[0], r[0] + o], [r[0] + o, r[1]]];
        }
        {
          if (n === 1)
            return [r, null];
          const o = Math.floor(n / 2) - 1;
          return [[r[0], r[0] + o], [r[0] + o + 1, r[1]]];
        }
      }
      function Yo(r, e) {
        const n = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
        if (!So(e, r.length))
          return n;
        for (let o = e[0]; o <= e[1]; ++o)
          Ba(n, r[o]);
        return n;
      }
      function cr(r) {
        const e = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
        for (let n = 0; n < r.length; ++n)
          for (let o = 0; o < r[n].length; ++o)
            Ba(e, r[n][o]);
        return e;
      }
      function Eo(r, e, n) {
        if (Gh(r) || Gh(e))
          return NaN;
        let o = 0, u = 0;
        return r[2] < e[0] && (o = e[0] - r[2]), r[0] > e[2] && (o = r[0] - e[2]), r[1] > e[3] && (u = r[1] - e[3]), r[3] < e[1] && (u = e[1] - r[3]), n.distance([0, 0], [o, u]);
      }
      function Zh(r) {
        return 360 * r - 180;
      }
      function Uc(r) {
        return 360 / Math.PI * Math.atan(Math.exp((180 - 360 * r) * Math.PI / 180)) - 90;
      }
      function Ua(r, e) {
        const n = Math.pow(2, e.z), o = (r.y / Tt + e.y) / n;
        return [Zh((r.x / Tt + e.x) / n), Uc(o)];
      }
      function $l(r, e) {
        const n = [];
        for (let o = 0; o < r.length; ++o)
          n.push(Ua(r[o], e));
        return n;
      }
      function yl(r, e, n) {
        const o = n.pointOnLine(e, r).point;
        return n.distance(r, o);
      }
      function _a(r, e, n, o, u) {
        const l = n.slice(o[0], o[1] + 1);
        let f = 1 / 0;
        for (let v = e[0]; v <= e[1]; ++v)
          if ((f = Math.min(f, yl(r[v], l, u))) === 0)
            return 0;
        return f;
      }
      function ga(r, e, n, o, u) {
        const l = Math.min(u.pointToSegmentDistance(r, n, o), u.pointToSegmentDistance(e, n, o)), f = Math.min(u.pointToSegmentDistance(n, r, e), u.pointToSegmentDistance(o, r, e));
        return Math.min(l, f);
      }
      function Po(r, e, n, o, u) {
        if (!So(e, r.length) || !So(o, n.length))
          return NaN;
        let l = 1 / 0;
        for (let f = e[0]; f < e[1]; ++f)
          for (let v = o[0]; v < o[1]; ++v) {
            if ($o(r[f], r[f + 1], n[v], n[v + 1]))
              return 0;
            l = Math.min(l, ga(r[f], r[f + 1], n[v], n[v + 1], u));
          }
        return l;
      }
      function Hh(r, e, n, o, u) {
        if (!So(e, r.length) || !So(o, n.length))
          return NaN;
        let l = 1 / 0;
        for (let f = e[0]; f <= e[1]; ++f)
          for (let v = o[0]; v <= o[1]; ++v)
            if ((l = Math.min(l, u.distance(r[f], n[v]))) === 0)
              return l;
        return l;
      }
      function td(r, e, n) {
        if (Ds(r, e, !0))
          return 0;
        let o = 1 / 0;
        for (const u of e) {
          const l = u.length;
          if (l < 2)
            return console.warn("Distance Expression: Invalid polygon!"), NaN;
          if (u[0] !== u[l - 1] && (o = Math.min(o, n.pointToSegmentDistance(r, u[l - 1], u[0]))) === 0 || (o = Math.min(o, yl(r, u, n))) === 0)
            return o;
        }
        return o;
      }
      function ja(r, e, n, o) {
        if (!So(e, r.length))
          return NaN;
        for (let l = e[0]; l <= e[1]; ++l)
          if (Ds(r[l], n, !0))
            return 0;
        let u = 1 / 0;
        for (let l = e[0]; l < e[1]; ++l)
          for (const f of n)
            for (let v = 0, S = f.length, D = S - 1; v < S; D = v++) {
              if ($o(r[l], r[l + 1], f[D], f[v]))
                return 0;
              u = Math.min(u, ga(r[l], r[l + 1], f[D], f[v], o));
            }
        return u;
      }
      function jc(r, e) {
        for (const n of r)
          for (let o = 0; o <= n.length - 1; ++o)
            if (Ds(n[o], e, !0))
              return !0;
        return !1;
      }
      function Gc(r, e, n, o = 1 / 0) {
        const u = cr(r), l = cr(e);
        if (o !== 1 / 0 && Eo(u, l, n) >= o)
          return o;
        if (Na(u, l)) {
          if (jc(r, e))
            return 0;
        } else if (jc(e, r))
          return 0;
        let f = o;
        for (const v of r)
          for (let S = 0, D = v.length, x = D - 1; S < D; x = S++)
            for (const P of e)
              for (let I = 0, M = P.length, C = M - 1; I < M; C = I++) {
                if ($o(v[x], v[S], P[C], P[I]))
                  return 0;
                f = Math.min(f, ga(v[x], v[S], P[C], P[I], n));
              }
        return f;
      }
      function hr(r, e, n, o, u, l, f) {
        if (l === null || f === null)
          return;
        const v = Eo(Yo(o, l), Yo(u, f), n);
        v < e && r.push({ dist: v, range1: l, range2: f });
      }
      function Zc(r, e, n, o, u = 1 / 0) {
        let l = Math.min(o.distance(r[0], n[0][0]), u);
        if (l === 0)
          return l;
        const f = new Wl([{ dist: 0, range1: [0, r.length - 1], range2: [0, 0] }], ma), v = e ? gs : Mo, S = cr(n);
        for (; f.length; ) {
          const D = f.pop();
          if (D.dist >= l)
            continue;
          const x = D.range1;
          if (Dr(x) <= v) {
            if (!So(x, r.length))
              return NaN;
            if (e) {
              const P = ja(r, x, n, o);
              if ((l = Math.min(l, P)) === 0)
                return l;
            } else
              for (let P = x[0]; P <= x[1]; ++P) {
                const I = td(r[P], n, o);
                if ((l = Math.min(l, I)) === 0)
                  return l;
              }
          } else {
            const P = Kr(x, e);
            if (P[0] !== null) {
              const I = Eo(Yo(r, P[0]), S, o);
              I < l && f.push({ dist: I, range1: P[0], range2: [0, 0] });
            }
            if (P[1] !== null) {
              const I = Eo(Yo(r, P[1]), S, o);
              I < l && f.push({ dist: I, range1: P[1], range2: [0, 0] });
            }
          }
        }
        return l;
      }
      function Hc(r, e, n, o, u, l = 1 / 0) {
        let f = Math.min(l, u.distance(r[0], n[0]));
        if (f === 0)
          return f;
        const v = new Wl([{ dist: 0, range1: [0, r.length - 1], range2: [0, n.length - 1] }], ma), S = e ? gs : Mo, D = o ? gs : Mo;
        for (; v.length; ) {
          const x = v.pop();
          if (x.dist >= f)
            continue;
          const P = x.range1, I = x.range2;
          if (Dr(P) <= S && Dr(I) <= D) {
            if (!So(P, r.length) || !So(I, n.length))
              return NaN;
            if (e && o ? f = Math.min(f, Po(r, P, n, I, u)) : e || o ? e && !o ? f = Math.min(f, _a(n, I, r, P, u)) : !e && o && (f = Math.min(f, _a(r, P, n, I, u))) : f = Math.min(f, Hh(r, P, n, I, u)), f === 0)
              return f;
          } else {
            const M = Kr(P, e), C = Kr(I, o);
            hr(v, f, u, r, n, M[0], C[0]), hr(v, f, u, r, n, M[0], C[1]), hr(v, f, u, r, n, M[1], C[0]), hr(v, f, u, r, n, M[1], C[1]);
          }
        }
        return f;
      }
      function xr(r, e, n, o, u = 1 / 0) {
        let l = u;
        const f = Yo(r, [0, r.length - 1]);
        for (const v of n)
          if (!(l !== 1 / 0 && Eo(f, Yo(v, [0, v.length - 1]), o) >= l) && (l = Math.min(l, Hc(r, e, v, !0, o, l)), l === 0))
            return l;
        return l;
      }
      function Ko(r, e, n, o, u = 1 / 0) {
        let l = u;
        const f = Yo(r, [0, r.length - 1]);
        for (const v of n) {
          if (l !== 1 / 0 && Eo(f, cr(v), o) >= l)
            continue;
          const S = Zc(r, e, v, o, l);
          if (isNaN(S))
            return S;
          if ((l = Math.min(l, S)) === 0)
            return l;
        }
        return l;
      }
      function Xl(r) {
        return r === "Point" || r === "MultiPoint" || r === "LineString" || r === "MultiLineString" || r === "Polygon" || r === "MultiPolygon";
      }
      class Jr {
        constructor(e, n) {
          this.type = Ot, this.geojson = e, this.geometries = n;
        }
        static parse(e, n) {
          if (e.length !== 2)
            return n.error(`'distance' expression requires either one argument, but found ' ${e.length - 1} instead.`);
          if (wo(e[1])) {
            const o = e[1];
            if (o.type === "FeatureCollection") {
              for (let u = 0; u < o.features.length; ++u)
                if (Xl(o.features[u].geometry.type))
                  return new Jr(o, o.features[u].geometry);
            } else if (o.type === "Feature") {
              if (Xl(o.geometry.type))
                return new Jr(o, o.geometry);
            } else if (Xl(o.type))
              return new Jr(o, o);
          }
          return n.error("'distance' expression needs to be an array with format ['Distance', GeoJSONObj].");
        }
        evaluate(e) {
          const n = e.geometry(), o = e.canonicalID();
          if (n != null && o != null) {
            if (e.geometryType() === "Point")
              return function(u, l, f) {
                const v = [];
                for (const D of u)
                  for (const x of D)
                    v.push(Ua(x, l));
                const S = new Va(v[0][1], "meters");
                return f.type === "Point" || f.type === "MultiPoint" || f.type === "LineString" ? Hc(v, !1, f.type === "Point" ? [f.coordinates] : f.coordinates, f.type === "LineString", S) : f.type === "MultiLineString" ? xr(v, !1, f.coordinates, S) : f.type === "Polygon" || f.type === "MultiPolygon" ? Ko(v, !1, f.type === "Polygon" ? [f.coordinates] : f.coordinates, S) : null;
              }(n, o, this.geometries);
            if (e.geometryType() === "LineString")
              return function(u, l, f) {
                const v = [];
                for (const D of u) {
                  const x = [];
                  for (const P of D)
                    x.push(Ua(P, l));
                  v.push(x);
                }
                const S = new Va(v[0][0][1], "meters");
                if (f.type === "Point" || f.type === "MultiPoint" || f.type === "LineString")
                  return xr(f.type === "Point" ? [f.coordinates] : f.coordinates, f.type === "LineString", v, S);
                if (f.type === "MultiLineString") {
                  let D = 1 / 0;
                  for (let x = 0; x < f.coordinates.length; x++) {
                    const P = xr(f.coordinates[x], !0, v, S, D);
                    if (isNaN(P))
                      return P;
                    if ((D = Math.min(D, P)) === 0)
                      return D;
                  }
                  return D;
                }
                if (f.type === "Polygon" || f.type === "MultiPolygon") {
                  let D = 1 / 0;
                  for (let x = 0; x < v.length; x++) {
                    const P = Ko(v[x], !0, f.type === "Polygon" ? [f.coordinates] : f.coordinates, S, D);
                    if (isNaN(P))
                      return P;
                    if ((D = Math.min(D, P)) === 0)
                      return D;
                  }
                  return D;
                }
                return null;
              }(n, o, this.geometries);
            if (e.geometryType() === "Polygon")
              return function(u, l, f) {
                const v = [];
                for (const D of function(x, P) {
                  const I = x.length;
                  if (I <= 1)
                    return [x];
                  const M = [];
                  let C, k;
                  for (let V = 0; V < I; V++) {
                    const U = Qu(x[V]);
                    U !== 0 && (x[V].area = Math.abs(U), k === void 0 && (k = U < 0), k === U < 0 ? (C && M.push(C), C = [x[V]]) : C.push(x[V]));
                  }
                  return C && M.push(C), M;
                }(u)) {
                  const x = [];
                  for (let P = 0; P < D.length; ++P)
                    x.push($l(D[P], l));
                  v.push(x);
                }
                const S = new Va(v[0][0][0][1], "meters");
                if (f.type === "Point" || f.type === "MultiPoint" || f.type === "LineString")
                  return Ko(f.type === "Point" ? [f.coordinates] : f.coordinates, f.type === "LineString", v, S);
                if (f.type === "MultiLineString") {
                  let D = 1 / 0;
                  for (let x = 0; x < f.coordinates.length; x++) {
                    const P = Ko(f.coordinates[x], !0, v, S, D);
                    if (isNaN(P))
                      return P;
                    if ((D = Math.min(D, P)) === 0)
                      return D;
                  }
                  return D;
                }
                return f.type === "Polygon" || f.type === "MultiPolygon" ? function(D, x, P) {
                  let I = 1 / 0;
                  for (const M of D)
                    for (const C of x) {
                      const k = Gc(M, C, P, I);
                      if (isNaN(k))
                        return k;
                      if ((I = Math.min(I, k)) === 0)
                        return I;
                    }
                  return I;
                }(f.type === "Polygon" ? [f.coordinates] : f.coordinates, v, S) : null;
              }(n, o, this.geometries);
            console.warn("Distance Expression: currently only evaluates valid Point/LineString/Polygon geometries.");
          } else
            console.warn("Distance Expression: requirs valid feature and canonical information.");
          return null;
        }
        eachChild() {
        }
        outputDefined() {
          return !0;
        }
        serialize() {
          return ["distance", this.geojson];
        }
      }
      function Yl(r, e) {
        switch (r) {
          case "string":
            return Ir(e);
          case "number":
            return +e;
          case "boolean":
            return !!e;
          case "color":
            return ki.parse(e);
          case "formatted":
            return Dn.fromString(Ir(e));
          case "resolvedImage":
            return ss.build(Ir(e));
        }
        return e;
      }
      function Kl(r, e, n, o) {
        return o !== void 0 && (r = o * Math.round(r / o)), e !== void 0 && r < e && (r = e), n !== void 0 && r > n && (r = n), r;
      }
      class ya {
        constructor(e, n, o) {
          this.type = e, this.key = n, this.scope = o;
        }
        static parse(e, n) {
          let o = n.expectedType;
          if (o == null && (o = Pi), e.length < 2 || e.length > 3)
            return n.error("Invalid number of arguments for 'config' expression.");
          const u = n.parse(e[1], 1);
          if (!(u instanceof Lr))
            return n.error("Key name of 'config' expression must be a string literal.");
          if (e.length >= 3) {
            const l = n.parse(e[2], 2);
            return l instanceof Lr ? new ya(o, Ir(u.value), Ir(l.value)) : n.error("Scope of 'config' expression must be a string literal.");
          }
          return new ya(o, Ir(u.value));
        }
        evaluate(e) {
          const n = [this.key, this.scope, e.scope].filter(Boolean).join(""), o = e.getConfig(n);
          if (!o)
            return null;
          const { type: u, value: l, values: f, minValue: v, maxValue: S, stepValue: D } = o, x = o.default.evaluate(e);
          let P = x;
          if (l) {
            const I = e.scope;
            e.scope = (I || "").split("").slice(1).join(""), P = l.evaluate(e), e.scope = I;
          }
          return u && (P = Yl(u, P)), P === void 0 || v === void 0 && S === void 0 && D === void 0 || (typeof P == "number" ? P = Kl(P, v, S, D) : Array.isArray(P) && (P = P.map((I) => typeof I == "number" ? Kl(I, v, S, D) : I))), l !== void 0 && P !== void 0 && f && !f.includes(P) && (P = x, u && (P = Yl(u, P))), (u && u !== this.type || P !== void 0 && vn(P) !== this.type) && (P = Yl(this.type.kind, P)), P;
        }
        eachChild() {
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          const e = ["config", this.key];
          return this.scope && e.concat(this.key), e;
        }
      }
      function ro(r) {
        if (r instanceof or && (r.name === "get" && r.args.length === 1 || r.name === "feature-state" || r.name === "has" && r.args.length === 1 || r.name === "properties" || r.name === "geometry-type" || r.name === "id" || /^filter-/.test(r.name)) || r instanceof lr || r instanceof Jr)
          return !1;
        let e = !0;
        return r.eachChild((n) => {
          e && !ro(n) && (e = !1);
        }), e;
      }
      function xl(r) {
        if (r instanceof or && r.name === "feature-state")
          return !1;
        let e = !0;
        return r.eachChild((n) => {
          e && !xl(n) && (e = !1);
        }), e;
      }
      function kr(r) {
        if (r instanceof ya)
          return /* @__PURE__ */ new Set([r.key]);
        let e = /* @__PURE__ */ new Set();
        return r.eachChild((n) => {
          e = /* @__PURE__ */ new Set([...e, ...kr(n)]);
        }), e;
      }
      function oo(r, e) {
        if (r instanceof or && e.indexOf(r.name) >= 0)
          return !1;
        let n = !0;
        return r.eachChild((o) => {
          n && !oo(o, e) && (n = !1);
        }), n;
      }
      class Jo {
        constructor(e, n) {
          this.type = n.type, this.name = e, this.boundExpression = n;
        }
        static parse(e, n) {
          if (e.length !== 2 || typeof e[1] != "string")
            return n.error("'var' expression requires exactly one string literal argument.");
          const o = e[1];
          return n.scope.has(o) ? new Jo(o, n.scope.get(o)) : n.error(`Unknown variable "${o}". Make sure "${o}" has been bound in an enclosing "let" expression before using it.`, 1);
        }
        evaluate(e) {
          return this.boundExpression.evaluate(e);
        }
        eachChild() {
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          return ["var", this.name];
        }
      }
      class Jl {
        constructor(e, n = [], o, u = new Cn(), l = [], f, v) {
          this.registry = e, this.path = n, this.key = n.map((S) => typeof S == "string" ? `['${S}']` : `[${S}]`).join(""), this.scope = u, this.errors = l, this.expectedType = o, this._scope = f, this.options = v;
        }
        parse(e, n, o, u, l = {}) {
          return n || o ? this.concat(n, null, o, u)._parse(e, l) : this._parse(e, l);
        }
        parseObjectValue(e, n, o, u, l, f = {}) {
          return this.concat(n, o, u, l)._parse(e, f);
        }
        _parse(e, n) {
          function o(u, l, f) {
            return f === "assert" ? new zr(l, [u]) : f === "coerce" ? new so(l, [u]) : u;
          }
          if (e !== null && typeof e != "string" && typeof e != "boolean" && typeof e != "number" || (e = ["literal", e]), Array.isArray(e)) {
            if (e.length === 0)
              return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');
            const u = typeof e[0] == "string" ? this.registry[e[0]] : void 0;
            if (u) {
              let l = u.parse(e, this);
              if (!l)
                return null;
              if (this.expectedType) {
                const f = this.expectedType, v = l.type;
                if (f.kind !== "string" && f.kind !== "number" && f.kind !== "boolean" && f.kind !== "object" && f.kind !== "array" || v.kind !== "value")
                  if (f.kind !== "color" && f.kind !== "formatted" && f.kind !== "resolvedImage" || v.kind !== "value" && v.kind !== "string") {
                    if (this.checkSubtype(f, v))
                      return null;
                  } else
                    l = o(l, f, n.typeAnnotation || "coerce");
                else
                  l = o(l, f, n.typeAnnotation || "assert");
              }
              if (!(l instanceof Lr) && l.type.kind !== "resolvedImage" && vl(l)) {
                const f = new Fa(this._scope, this.options);
                try {
                  l = new Lr(l.type, l.evaluate(f));
                } catch (v) {
                  return this.error(v.message), null;
                }
              }
              return l;
            }
            return so.parse(["to-array", e], this);
          }
          return this.error(e === void 0 ? "'undefined' value invalid. Use null instead." : typeof e == "object" ? 'Bare objects invalid. Use ["literal", {...}] instead.' : `Expected an array, but found ${typeof e} instead.`);
        }
        concat(e, n, o, u) {
          let l = typeof e == "number" ? this.path.concat(e) : this.path;
          l = typeof n == "string" ? l.concat(n) : l;
          const f = u ? this.scope.concat(u) : this.scope;
          return new Jl(this.registry, l, o || null, f, this.errors, this._scope, this.options);
        }
        error(e, ...n) {
          const o = `${this.key}${n.map((u) => `[${u}]`).join("")}`;
          this.errors.push(new ns(o, e));
        }
        checkSubtype(e, n) {
          const o = ua(e, n);
          return o && this.error(o), o;
        }
      }
      var Qr = Jl;
      function vl(r) {
        if (r instanceof Jo)
          return vl(r.boundExpression);
        if (r instanceof or && r.name === "error" || r instanceof pl || r instanceof lr || r instanceof Jr || r instanceof ya)
          return !1;
        const e = r instanceof so || r instanceof zr;
        let n = !0;
        return r.eachChild((o) => {
          n = e ? n && vl(o) : n && o instanceof Lr;
        }), !!n && ro(r) && oo(r, ["zoom", "heatmap-density", "line-progress", "raster-value", "sky-radial-progress", "accumulated", "is-supported-script", "pitch", "distance-from-center", "measure-light", "raster-particle-speed"]);
      }
      function ao(r, e) {
        const n = r.length - 1;
        let o, u, l = 0, f = n, v = 0;
        for (; l <= f; )
          if (v = Math.floor((l + f) / 2), o = r[v], u = r[v + 1], o <= e) {
            if (v === n || e < u)
              return v;
            l = v + 1;
          } else {
            if (!(o > e))
              throw new qn("Input is not a number.");
            f = v - 1;
          }
        return 0;
      }
      class Ti {
        constructor(e, n, o) {
          this.type = e, this.input = n, this.labels = [], this.outputs = [];
          for (const [u, l] of o)
            this.labels.push(u), this.outputs.push(l);
        }
        static parse(e, n) {
          if (e.length - 1 < 4)
            return n.error(`Expected at least 4 arguments, but found only ${e.length - 1}.`);
          if ((e.length - 1) % 2 != 0)
            return n.error("Expected an even number of arguments.");
          const o = n.parse(e[1], 1, Ot);
          if (!o)
            return null;
          const u = [];
          let l = null;
          n.expectedType && n.expectedType.kind !== "value" && (l = n.expectedType);
          for (let f = 1; f < e.length; f += 2) {
            const v = f === 1 ? -1 / 0 : e[f], S = e[f + 1], D = f, x = f + 1;
            if (typeof v != "number")
              return n.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', D);
            if (u.length && u[u.length - 1][0] >= v)
              return n.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', D);
            const P = n.parse(S, x, l);
            if (!P)
              return null;
            l = l || P.type, u.push([v, P]);
          }
          return new Ti(l, o, u);
        }
        evaluate(e) {
          const n = this.labels, o = this.outputs;
          if (n.length === 1)
            return o[0].evaluate(e);
          const u = this.input.evaluate(e);
          if (u <= n[0])
            return o[0].evaluate(e);
          const l = n.length;
          return u >= n[l - 1] ? o[l - 1].evaluate(e) : o[ao(n, u)].evaluate(e);
        }
        eachChild(e) {
          e(this.input);
          for (const n of this.outputs)
            e(n);
        }
        outputDefined() {
          return this.outputs.every((e) => e.outputDefined());
        }
        serialize() {
          const e = ["step", this.input.serialize()];
          for (let n = 0; n < this.labels.length; n++)
            n > 0 && e.push(this.labels[n]), e.push(this.outputs[n].serialize());
          return e;
        }
      }
      const qh = 0.95047, bl = 1.08883, Ga = 4 / 29, Qo = 6 / 29, qc = 3 * Qo * Qo, gn = Qo * Qo * Qo, Wh = Math.PI / 180, $h = 180 / Math.PI;
      function Ql(r) {
        return r > gn ? Math.pow(r, 1 / 3) : r / qc + Ga;
      }
      function ec(r) {
        return r > Qo ? r * r * r : qc * (r - Ga);
      }
      function tc(r) {
        return 255 * (r <= 31308e-7 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - 0.055);
      }
      function Wc(r) {
        return (r /= 255) <= 0.04045 ? r / 12.92 : Math.pow((r + 0.055) / 1.055, 2.4);
      }
      function $c(r) {
        const e = Wc(r.r), n = Wc(r.g), o = Wc(r.b), u = Ql((0.4124564 * e + 0.3575761 * n + 0.1804375 * o) / qh), l = Ql((0.2126729 * e + 0.7151522 * n + 0.072175 * o) / 1);
        return { l: 116 * l - 16, a: 500 * (u - l), b: 200 * (l - Ql((0.0193339 * e + 0.119192 * n + 0.9503041 * o) / bl)), alpha: r.a };
      }
      function Xc(r) {
        let e = (r.l + 16) / 116, n = isNaN(r.a) ? e : e + r.a / 500, o = isNaN(r.b) ? e : e - r.b / 200;
        return e = 1 * ec(e), n = qh * ec(n), o = bl * ec(o), new ki(tc(3.2404542 * n - 1.5371385 * e - 0.4985314 * o), tc(-0.969266 * n + 1.8760108 * e + 0.041556 * o), tc(0.0556434 * n - 0.2040259 * e + 1.0572252 * o), r.alpha);
      }
      function id(r, e, n) {
        const o = e - r;
        return r + n * (o > 180 || o < -180 ? o - 360 * Math.round(o / 360) : o);
      }
      const p = { forward: $c, reverse: Xc, interpolate: function(r, e, n) {
        return { l: ei(r.l, e.l, n), a: ei(r.a, e.a, n), b: ei(r.b, e.b, n), alpha: ei(r.alpha, e.alpha, n) };
      } }, A = { forward: function(r) {
        const { l: e, a: n, b: o } = $c(r), u = Math.atan2(o, n) * $h;
        return { h: u < 0 ? u + 360 : u, c: Math.sqrt(n * n + o * o), l: e, alpha: r.a };
      }, reverse: function(r) {
        const e = r.h * Wh, n = r.c;
        return Xc({ l: r.l, a: Math.cos(e) * n, b: Math.sin(e) * n, alpha: r.alpha });
      }, interpolate: function(r, e, n) {
        return { h: id(r.h, e.h, n), c: ei(r.c, e.c, n), l: ei(r.l, e.l, n), alpha: ei(r.alpha, e.alpha, n) };
      } };
      var B = Object.freeze({ __proto__: null, hcl: A, lab: p });
      class X {
        constructor(e, n, o, u, l, f) {
          this.type = e, this.operator = n, this.interpolation = o, this.input = u, this.dynamicStops = l, this.labels = [], this.outputs = [];
          for (const [v, S] of f)
            this.labels.push(v), this.outputs.push(S);
        }
        static interpolationFactor(e, n, o, u) {
          let l = 0;
          if (e.name === "exponential")
            l = ne(n, e.base, o, u);
          else if (e.name === "linear")
            l = ne(n, 1, o, u);
          else if (e.name === "cubic-bezier") {
            const f = e.controlPoints;
            l = new Us(f[0], f[1], f[2], f[3]).solve(ne(n, 1, o, u));
          }
          return l;
        }
        static parse(e, n) {
          let [o, u, l, ...f] = e;
          if (!Array.isArray(u) || u.length === 0)
            return n.error("Expected an interpolation type expression.", 1);
          if (u[0] === "linear")
            u = { name: "linear" };
          else if (u[0] === "exponential") {
            const D = u[1];
            if (typeof D != "number")
              return n.error("Exponential interpolation requires a numeric base.", 1, 1);
            u = { name: "exponential", base: D };
          } else {
            if (u[0] !== "cubic-bezier")
              return n.error(`Unknown interpolation type ${String(u[0])}`, 1, 0);
            {
              const D = u.slice(1);
              if (D.length !== 4 || D.some((x) => typeof x != "number" || x < 0 || x > 1))
                return n.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.", 1);
              u = { name: "cubic-bezier", controlPoints: D };
            }
          }
          if (e.length - 1 < 3)
            return n.error(`Expected at least 3 arguments, but found only ${e.length - 1}.`);
          if (e.length - 1 > 3 && (e.length - 1) % 2 != 0)
            return n.error("Expected an even number of arguments.");
          if (l = n.parse(l, 2, Ot), !l)
            return null;
          const v = [];
          let S = null;
          if (o === "interpolate-hcl" || o === "interpolate-lab" ? S = ms : n.expectedType && n.expectedType.kind !== "value" && (S = n.expectedType), e.length - 1 == 3) {
            const D = n.parse(f[0], 3, Pi);
            return D ? new X(S, o, u, l, D, v) : null;
          }
          for (let D = 0; D < f.length; D += 2) {
            const x = f[D], P = f[D + 1], I = D + 3, M = D + 4;
            if (typeof x != "number")
              return n.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.', I);
            if (v.length && v[v.length - 1][0] >= x)
              return n.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.', I);
            const C = n.parse(P, M, S);
            if (!C)
              return null;
            S = S || C.type, v.push([x, C]);
          }
          return S.kind === "number" || S.kind === "color" || S.kind === "array" && S.itemType.kind === "number" && typeof S.N == "number" ? new X(S, o, u, l, null, v) : n.error(`Type ${un(S)} is not interpolatable.`);
        }
        evaluate(e) {
          let n = this.labels, o = this.outputs;
          if (this.dynamicStops) {
            const x = this.dynamicStops.evaluate(e);
            if (x.length % 2 != 0)
              throw new qn("Expected an even number of arguments.");
            n = [], o = [];
            for (let P = 0; P < x.length; P += 2) {
              const I = x[P], M = new Lr(Ot, x[P + 1]);
              if (typeof I != "number")
                throw new qn('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.');
              if (n.length && n[n.length - 1] >= I)
                throw new qn('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.');
              n.push(I), o.push(M);
            }
            if (n.length === 0)
              throw new qn("Expected at least one input/output pair.");
          }
          if (n.length === 1)
            return o[0].evaluate(e);
          const u = this.input.evaluate(e);
          if (u <= n[0])
            return o[0].evaluate(e);
          const l = n.length;
          if (u >= n[l - 1])
            return o[l - 1].evaluate(e);
          const f = ao(n, u), v = X.interpolationFactor(this.interpolation, u, n[f], n[f + 1]), S = o[f].evaluate(e), D = o[f + 1].evaluate(e);
          return this.operator === "interpolate" ? Oi[this.type.kind.toLowerCase()](S, D, v) : this.operator === "interpolate-hcl" ? A.reverse(A.interpolate(A.forward(S), A.forward(D), v)) : p.reverse(p.interpolate(p.forward(S), p.forward(D), v));
        }
        eachChild(e) {
          e(this.input);
          for (const n of this.outputs)
            e(n);
        }
        outputDefined() {
          return this.outputs.every((e) => e.outputDefined());
        }
        serialize() {
          let e;
          e = this.interpolation.name === "linear" ? ["linear"] : this.interpolation.name === "exponential" ? this.interpolation.base === 1 ? ["linear"] : ["exponential", this.interpolation.base] : ["cubic-bezier"].concat(this.interpolation.controlPoints);
          const n = [this.operator, e, this.input.serialize()];
          if (this.dynamicStops)
            n.push(this.dynamicStops.serialize());
          else
            for (let o = 0; o < this.labels.length; o++)
              n.push(this.labels[o], this.outputs[o].serialize());
          return n;
        }
      }
      function ne(r, e, n, o) {
        const u = o - n, l = r - n;
        return u === 0 ? 0 : e === 1 ? l / u : (Math.pow(e, l) - 1) / (Math.pow(e, u) - 1);
      }
      class ye {
        constructor(e, n) {
          this.type = e, this.args = n;
        }
        static parse(e, n) {
          if (e.length < 2)
            return n.error("Expectected at least one argument.");
          let o = null;
          const u = n.expectedType;
          u && u.kind !== "value" && (o = u);
          const l = [];
          for (const v of e.slice(1)) {
            const S = n.parse(v, 1 + l.length, o, void 0, { typeAnnotation: "omit" });
            if (!S)
              return null;
            o = o || S.type, l.push(S);
          }
          const f = u && l.some((v) => ua(u, v.type));
          return new ye(f ? Pi : o, l);
        }
        evaluate(e) {
          let n, o = null, u = 0;
          for (const l of this.args) {
            if (u++, o = l.evaluate(e), o && o instanceof ss && !o.available && (n || (n = o), o = null, u === this.args.length))
              return n;
            if (o !== null)
              break;
          }
          return o;
        }
        eachChild(e) {
          this.args.forEach(e);
        }
        outputDefined() {
          return this.args.every((e) => e.outputDefined());
        }
        serialize() {
          const e = ["coalesce"];
          return this.eachChild((n) => {
            e.push(n.serialize());
          }), e;
        }
      }
      class We {
        constructor(e, n) {
          this.type = n.type, this.bindings = [].concat(e), this.result = n;
        }
        evaluate(e) {
          return this.result.evaluate(e);
        }
        eachChild(e) {
          for (const n of this.bindings)
            e(n[1]);
          e(this.result);
        }
        static parse(e, n) {
          if (e.length < 4)
            return n.error(`Expected at least 3 arguments, but found ${e.length - 1} instead.`);
          const o = [];
          for (let l = 1; l < e.length - 1; l += 2) {
            const f = e[l];
            if (typeof f != "string")
              return n.error(`Expected string, but found ${typeof f} instead.`, l);
            if (/[^a-zA-Z0-9_]/.test(f))
              return n.error("Variable names must contain only alphanumeric characters or '_'.", l);
            const v = n.parse(e[l + 1], l + 1);
            if (!v)
              return null;
            o.push([f, v]);
          }
          const u = n.parse(e[e.length - 1], e.length - 1, n.expectedType, o);
          return u ? new We(o, u) : null;
        }
        outputDefined() {
          return this.result.outputDefined();
        }
        serialize() {
          const e = ["let"];
          for (const [n, o] of this.bindings)
            e.push(n, o.serialize());
          return e.push(this.result.serialize()), e;
        }
      }
      class at {
        constructor(e, n, o) {
          this.type = e, this.index = n, this.input = o;
        }
        static parse(e, n) {
          if (e.length !== 3)
            return n.error(`Expected 2 arguments, but found ${e.length - 1} instead.`);
          const o = n.parse(e[1], 1, Ot), u = n.parse(e[2], 2, Ss(n.expectedType || Pi));
          return o && u ? new at(u.type.itemType, o, u) : null;
        }
        evaluate(e) {
          const n = this.index.evaluate(e), o = this.input.evaluate(e);
          if (n < 0)
            throw new qn(`Array index out of bounds: ${n} < 0.`);
          if (n > o.length - 1)
            throw new qn(`Array index out of bounds: ${n} > ${o.length - 1}.`);
          if (n === Math.floor(n))
            return o[n];
          const u = Math.floor(n), l = Math.ceil(n), f = o[u], v = o[l];
          if (typeof f != "number" || typeof v != "number")
            throw new qn(`Cannot interpolate between non-number values at index ${n}.`);
          const S = n - u;
          return f * (1 - S) + v * S;
        }
        eachChild(e) {
          e(this.index), e(this.input);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          return ["at", this.index.serialize(), this.input.serialize()];
        }
      }
      class ft {
        constructor(e, n) {
          this.type = Li, this.needle = e, this.haystack = n;
        }
        static parse(e, n) {
          if (e.length !== 3)
            return n.error(`Expected 2 arguments, but found ${e.length - 1} instead.`);
          const o = n.parse(e[1], 1, Pi), u = n.parse(e[2], 2, Pi);
          return o && u ? Zl(o.type, [Li, Fi, Ot, ha, Pi]) ? new ft(o, u) : n.error(`Expected first argument to be of type boolean, string, number or null, but found ${un(o.type)} instead`) : null;
        }
        evaluate(e) {
          const n = this.needle.evaluate(e), o = this.haystack.evaluate(e);
          if (o == null)
            return !1;
          if (!da(n, ["boolean", "string", "number", "null"]))
            throw new qn(`Expected first argument to be of type boolean, string, number or null, but found ${un(vn(n))} instead.`);
          if (!da(o, ["string", "array"]))
            throw new qn(`Expected second argument to be of type array or string, but found ${un(vn(o))} instead.`);
          return o.indexOf(n) >= 0;
        }
        eachChild(e) {
          e(this.needle), e(this.haystack);
        }
        outputDefined() {
          return !0;
        }
        serialize() {
          return ["in", this.needle.serialize(), this.haystack.serialize()];
        }
      }
      class Rt {
        constructor(e, n, o) {
          this.type = Ot, this.needle = e, this.haystack = n, this.fromIndex = o;
        }
        static parse(e, n) {
          if (e.length <= 2 || e.length >= 5)
            return n.error(`Expected 3 or 4 arguments, but found ${e.length - 1} instead.`);
          const o = n.parse(e[1], 1, Pi), u = n.parse(e[2], 2, Pi);
          if (!o || !u)
            return null;
          if (!Zl(o.type, [Li, Fi, Ot, ha, Pi]))
            return n.error(`Expected first argument to be of type boolean, string, number or null, but found ${un(o.type)} instead`);
          if (e.length === 4) {
            const l = n.parse(e[3], 3, Ot);
            return l ? new Rt(o, u, l) : null;
          }
          return new Rt(o, u);
        }
        evaluate(e) {
          const n = this.needle.evaluate(e), o = this.haystack.evaluate(e);
          if (!da(n, ["boolean", "string", "number", "null"]))
            throw new qn(`Expected first argument to be of type boolean, string, number or null, but found ${un(vn(n))} instead.`);
          if (!da(o, ["string", "array"]))
            throw new qn(`Expected second argument to be of type array or string, but found ${un(vn(o))} instead.`);
          if (this.fromIndex) {
            const u = this.fromIndex.evaluate(e);
            return o.indexOf(n, u);
          }
          return o.indexOf(n);
        }
        eachChild(e) {
          e(this.needle), e(this.haystack), this.fromIndex && e(this.fromIndex);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          if (this.fromIndex != null && this.fromIndex !== void 0) {
            const e = this.fromIndex.serialize();
            return ["index-of", this.needle.serialize(), this.haystack.serialize(), e];
          }
          return ["index-of", this.needle.serialize(), this.haystack.serialize()];
        }
      }
      class ii {
        constructor(e, n, o, u, l, f) {
          this.inputType = e, this.type = n, this.input = o, this.cases = u, this.outputs = l, this.otherwise = f;
        }
        static parse(e, n) {
          if (e.length < 5)
            return n.error(`Expected at least 4 arguments, but found only ${e.length - 1}.`);
          if (e.length % 2 != 1)
            return n.error("Expected an even number of arguments.");
          let o, u;
          n.expectedType && n.expectedType.kind !== "value" && (u = n.expectedType);
          const l = {}, f = [];
          for (let D = 2; D < e.length - 1; D += 2) {
            let x = e[D];
            const P = e[D + 1];
            Array.isArray(x) || (x = [x]);
            const I = n.concat(D);
            if (x.length === 0)
              return I.error("Expected at least one branch label.");
            for (const C of x) {
              if (typeof C != "number" && typeof C != "string")
                return I.error("Branch labels must be numbers or strings.");
              if (typeof C == "number" && Math.abs(C) > Number.MAX_SAFE_INTEGER)
                return I.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);
              if (typeof C == "number" && Math.floor(C) !== C)
                return I.error("Numeric branch labels must be integer values.");
              if (o) {
                if (I.checkSubtype(o, vn(C)))
                  return null;
              } else
                o = vn(C);
              if (l[String(C)] !== void 0)
                return I.error("Branch labels must be unique.");
              l[String(C)] = f.length;
            }
            const M = n.parse(P, D, u);
            if (!M)
              return null;
            u = u || M.type, f.push(M);
          }
          const v = n.parse(e[1], 1, Pi);
          if (!v)
            return null;
          const S = n.parse(e[e.length - 1], e.length - 1, u);
          return S ? v.type.kind !== "value" && n.concat(1).checkSubtype(o, v.type) ? null : new ii(o, u, v, l, f, S) : null;
        }
        evaluate(e) {
          const n = this.input.evaluate(e);
          return (vn(n) === this.inputType && this.outputs[this.cases[n]] || this.otherwise).evaluate(e);
        }
        eachChild(e) {
          e(this.input), this.outputs.forEach(e), e(this.otherwise);
        }
        outputDefined() {
          return this.outputs.every((e) => e.outputDefined()) && this.otherwise.outputDefined();
        }
        serialize() {
          const e = ["match", this.input.serialize()], n = Object.keys(this.cases).sort(), o = [], u = {};
          for (const f of n) {
            const v = u[this.cases[f]];
            v === void 0 ? (u[this.cases[f]] = o.length, o.push([this.cases[f], [f]])) : o[v][1].push(f);
          }
          const l = (f) => this.inputType.kind === "number" ? Number(f) : f;
          for (const [f, v] of o)
            e.push(v.length === 1 ? l(v[0]) : v.map(l)), e.push(this.outputs[f].serialize());
          return e.push(this.otherwise.serialize()), e;
        }
      }
      class Ci {
        constructor(e, n, o) {
          this.type = e, this.branches = n, this.otherwise = o;
        }
        static parse(e, n) {
          if (e.length < 4)
            return n.error(`Expected at least 3 arguments, but found only ${e.length - 1}.`);
          if (e.length % 2 != 0)
            return n.error("Expected an odd number of arguments.");
          let o;
          n.expectedType && n.expectedType.kind !== "value" && (o = n.expectedType);
          const u = [];
          for (let f = 1; f < e.length - 1; f += 2) {
            const v = n.parse(e[f], f, Li);
            if (!v)
              return null;
            const S = n.parse(e[f + 1], f + 1, o);
            if (!S)
              return null;
            u.push([v, S]), o = o || S.type;
          }
          const l = n.parse(e[e.length - 1], e.length - 1, o);
          return l ? new Ci(o, u, l) : null;
        }
        evaluate(e) {
          for (const [n, o] of this.branches)
            if (n.evaluate(e))
              return o.evaluate(e);
          return this.otherwise.evaluate(e);
        }
        eachChild(e) {
          for (const [n, o] of this.branches)
            e(n), e(o);
          e(this.otherwise);
        }
        outputDefined() {
          return this.branches.every(([e, n]) => n.outputDefined()) && this.otherwise.outputDefined();
        }
        serialize() {
          const e = ["case"];
          return this.eachChild((n) => {
            e.push(n.serialize());
          }), e;
        }
      }
      class Wi {
        constructor(e, n, o, u) {
          this.type = e, this.input = n, this.beginIndex = o, this.endIndex = u;
        }
        static parse(e, n) {
          if (e.length <= 2 || e.length >= 5)
            return n.error(`Expected 3 or 4 arguments, but found ${e.length - 1} instead.`);
          const o = n.parse(e[1], 1, Pi), u = n.parse(e[2], 2, Ot);
          if (!o || !u)
            return null;
          if (!Zl(o.type, [Ss(Pi), Fi, Pi]))
            return n.error(`Expected first argument to be of type array or string, but found ${un(o.type)} instead`);
          if (e.length === 4) {
            const l = n.parse(e[3], 3, Ot);
            return l ? new Wi(o.type, o, u, l) : null;
          }
          return new Wi(o.type, o, u);
        }
        evaluate(e) {
          const n = this.input.evaluate(e), o = this.beginIndex.evaluate(e);
          if (!da(n, ["string", "array"]))
            throw new qn(`Expected first argument to be of type array or string, but found ${un(vn(n))} instead.`);
          if (this.endIndex) {
            const u = this.endIndex.evaluate(e);
            return n.slice(o, u);
          }
          return n.slice(o);
        }
        eachChild(e) {
          e(this.input), e(this.beginIndex), this.endIndex && e(this.endIndex);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          if (this.endIndex != null && this.endIndex !== void 0) {
            const e = this.endIndex.serialize();
            return ["slice", this.input.serialize(), this.beginIndex.serialize(), e];
          }
          return ["slice", this.input.serialize(), this.beginIndex.serialize()];
        }
      }
      function Hs(r, e) {
        return r === "==" || r === "!=" ? e.kind === "boolean" || e.kind === "string" || e.kind === "number" || e.kind === "null" || e.kind === "value" : e.kind === "string" || e.kind === "number" || e.kind === "value";
      }
      function ws(r, e, n, o) {
        return o.compare(e, n) === 0;
      }
      function Rs(r, e, n) {
        const o = r !== "==" && r !== "!=";
        return class bw {
          constructor(l, f, v) {
            this.type = Li, this.lhs = l, this.rhs = f, this.collator = v, this.hasUntypedArgument = l.type.kind === "value" || f.type.kind === "value";
          }
          static parse(l, f) {
            if (l.length !== 3 && l.length !== 4)
              return f.error("Expected two or three arguments.");
            const v = l[0];
            let S = f.parse(l[1], 1, Pi);
            if (!S)
              return null;
            if (!Hs(v, S.type))
              return f.concat(1).error(`"${v}" comparisons are not supported for type '${un(S.type)}'.`);
            let D = f.parse(l[2], 2, Pi);
            if (!D)
              return null;
            if (!Hs(v, D.type))
              return f.concat(2).error(`"${v}" comparisons are not supported for type '${un(D.type)}'.`);
            if (S.type.kind !== D.type.kind && S.type.kind !== "value" && D.type.kind !== "value")
              return f.error(`Cannot compare types '${un(S.type)}' and '${un(D.type)}'.`);
            o && (S.type.kind === "value" && D.type.kind !== "value" ? S = new zr(D.type, [S]) : S.type.kind !== "value" && D.type.kind === "value" && (D = new zr(S.type, [D])));
            let x = null;
            if (l.length === 4) {
              if (S.type.kind !== "string" && D.type.kind !== "string" && S.type.kind !== "value" && D.type.kind !== "value")
                return f.error("Cannot use collator to compare non-string types.");
              if (x = f.parse(l[3], 3, _s), !x)
                return null;
            }
            return new bw(S, D, x);
          }
          evaluate(l) {
            const f = this.lhs.evaluate(l), v = this.rhs.evaluate(l);
            if (o && this.hasUntypedArgument) {
              const S = vn(f), D = vn(v);
              if (S.kind !== D.kind || S.kind !== "string" && S.kind !== "number")
                throw new qn(`Expected arguments for "${r}" to be (string, string) or (number, number), but found (${S.kind}, ${D.kind}) instead.`);
            }
            if (this.collator && !o && this.hasUntypedArgument) {
              const S = vn(f), D = vn(v);
              if (S.kind !== "string" || D.kind !== "string")
                return e(l, f, v);
            }
            return this.collator ? n(l, f, v, this.collator.evaluate(l)) : e(l, f, v);
          }
          eachChild(l) {
            l(this.lhs), l(this.rhs), this.collator && l(this.collator);
          }
          outputDefined() {
            return !0;
          }
          serialize() {
            const l = [r];
            return this.eachChild((f) => {
              l.push(f.serialize());
            }), l;
          }
        };
      }
      const ur = Rs("==", function(r, e, n) {
        return e === n;
      }, ws), Za = Rs("!=", function(r, e, n) {
        return e !== n;
      }, function(r, e, n, o) {
        return !ws(0, e, n, o);
      }), nd = Rs("<", function(r, e, n) {
        return e < n;
      }, function(r, e, n, o) {
        return o.compare(e, n) < 0;
      }), sd = Rs(">", function(r, e, n) {
        return e > n;
      }, function(r, e, n, o) {
        return o.compare(e, n) > 0;
      }), rd = Rs("<=", function(r, e, n) {
        return e <= n;
      }, function(r, e, n, o) {
        return o.compare(e, n) <= 0;
      }), Xh = Rs(">=", function(r, e, n) {
        return e >= n;
      }, function(r, e, n, o) {
        return o.compare(e, n) >= 0;
      });
      class wl {
        constructor(e, n, o, u, l, f) {
          this.type = Fi, this.number = e, this.locale = n, this.currency = o, this.unit = u, this.minFractionDigits = l, this.maxFractionDigits = f;
        }
        static parse(e, n) {
          if (e.length !== 3)
            return n.error("Expected two arguments.");
          const o = n.parse(e[1], 1, Ot);
          if (!o)
            return null;
          const u = e[2];
          if (typeof u != "object" || Array.isArray(u))
            return n.error("NumberFormat options argument must be an object.");
          let l = null;
          if (u.locale && (l = n.parseObjectValue(u.locale, 2, "locale", Fi), !l))
            return null;
          let f = null;
          if (u.currency && (f = n.parseObjectValue(u.currency, 2, "currency", Fi), !f))
            return null;
          let v = null;
          if (u.unit && (v = n.parseObjectValue(u.unit, 2, "unit", Fi), !v))
            return null;
          let S = null;
          if (u["min-fraction-digits"] && (S = n.parseObjectValue(u["min-fraction-digits"], 2, "min-fraction-digits", Ot), !S))
            return null;
          let D = null;
          return u["max-fraction-digits"] && (D = n.parseObjectValue(u["max-fraction-digits"], 2, "max-fraction-digits", Ot), !D) ? null : new wl(o, l, f, v, S, D);
        }
        evaluate(e) {
          return new Intl.NumberFormat(this.locale ? this.locale.evaluate(e) : [], { style: (this.currency ? "currency" : this.unit && "unit") || "decimal", currency: this.currency ? this.currency.evaluate(e) : void 0, unit: this.unit ? this.unit.evaluate(e) : void 0, minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(e) : void 0, maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(e) : void 0 }).format(this.number.evaluate(e));
        }
        eachChild(e) {
          e(this.number), this.locale && e(this.locale), this.currency && e(this.currency), this.unit && e(this.unit), this.minFractionDigits && e(this.minFractionDigits), this.maxFractionDigits && e(this.maxFractionDigits);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          const e = {};
          return this.locale && (e.locale = this.locale.serialize()), this.currency && (e.currency = this.currency.serialize()), this.unit && (e.unit = this.unit.serialize()), this.minFractionDigits && (e["min-fraction-digits"] = this.minFractionDigits.serialize()), this.maxFractionDigits && (e["max-fraction-digits"] = this.maxFractionDigits.serialize()), ["number-format", this.number.serialize(), e];
        }
      }
      class ic {
        constructor(e) {
          this.type = Ot, this.input = e;
        }
        static parse(e, n) {
          if (e.length !== 2)
            return n.error(`Expected 1 argument, but found ${e.length - 1} instead.`);
          const o = n.parse(e[1], 1);
          return o ? o.type.kind !== "array" && o.type.kind !== "string" && o.type.kind !== "value" ? n.error(`Expected argument of type string or array, but found ${un(o.type)} instead.`) : new ic(o) : null;
        }
        evaluate(e) {
          const n = this.input.evaluate(e);
          if (typeof n == "string" || Array.isArray(n))
            return n.length;
          throw new qn(`Expected value to be of type string or array, but found ${un(vn(n))} instead.`);
        }
        eachChild(e) {
          e(this.input);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          const e = ["length"];
          return this.eachChild((n) => {
            e.push(n.serialize());
          }), e;
        }
      }
      function es(r) {
        return function() {
          r = 1831565813 + (r |= 0) | 0;
          let e = Math.imul(r ^ r >>> 15, 1 | r);
          return e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e, ((e ^ e >>> 14) >>> 0) / 4294967296;
        };
      }
      const Ao = { "==": ur, "!=": Za, ">": sd, "<": nd, ">=": Xh, "<=": rd, array: zr, at, boolean: zr, case: Ci, coalesce: ye, collator: pl, format: Es, image: Oa, in: ft, "index-of": Rt, interpolate: X, "interpolate-hcl": X, "interpolate-lab": X, length: ic, let: We, literal: Lr, match: ii, number: zr, "number-format": wl, object: zr, slice: Wi, step: Ti, string: zr, "to-boolean": so, "to-color": so, "to-number": so, "to-string": so, var: Jo, within: lr, distance: Jr, config: ya };
      function Yh(r, [e, n, o, u]) {
        e = e.evaluate(r), n = n.evaluate(r), o = o.evaluate(r);
        const l = u ? u.evaluate(r) : 1, f = fa(e, n, o, l);
        if (f)
          throw new qn(f);
        return new ki(e / 255 * l, n / 255 * l, o / 255 * l, l);
      }
      function Kh(r, [e, n, o, u]) {
        e = e.evaluate(r), n = n.evaluate(r), o = o.evaluate(r);
        const l = u ? u.evaluate(r) : 1, f = function(D, x, P, I) {
          return typeof D == "number" && D >= 0 && D <= 360 ? typeof x == "number" && x >= 0 && x <= 100 && typeof P == "number" && P >= 0 && P <= 100 ? I === void 0 || typeof I == "number" && I >= 0 && I <= 1 ? null : `Invalid hsla value [${[D, x, P, I].join(", ")}]: 'a' must be between 0 and 1.` : `Invalid hsla value [${(typeof I == "number" ? [D, x, P, I] : [D, x, P]).join(", ")}]: 's', and 'l' must be between 0 and 100.` : `Invalid hsla value [${(typeof I == "number" ? [D, x, P, I] : [D, x, P]).join(", ")}]: 'h' must be between 0 and 360.`;
        }(e, n, o, l);
        if (f)
          throw new qn(f);
        const v = `hsla(${e}, ${n}%, ${o}%, ${l})`, S = ki.parse(v);
        if (!S)
          throw new qn(`Failed to parse HSLA color: ${v}`);
        return S;
      }
      function Yc(r, e) {
        return r in e;
      }
      function Ha(r, e) {
        const n = e[r];
        return n === void 0 ? null : n;
      }
      function vr(r) {
        return { type: r };
      }
      function Kc(r) {
        return { result: "success", value: r };
      }
      function xa(r) {
        return { result: "error", value: r };
      }
      function od(r, e) {
        return !!r && !!r.parameters && r.parameters.indexOf(e) > -1;
      }
      function nc(r) {
        return r["property-type"] === "data-driven";
      }
      function Jh(r) {
        return od(r.expression, "measure-light");
      }
      function qf(r) {
        return od(r.expression, "zoom");
      }
      function ad(r) {
        return !!r.expression && r.expression.interpolated;
      }
      function Qh(r) {
        return typeof r == "object" && r !== null && !Array.isArray(r);
      }
      function Wf(r) {
        return r;
      }
      function $f(r, e) {
        const n = e.type === "color", o = r.stops && typeof r.stops[0][0] == "object", u = o || !(o || r.property !== void 0), l = r.type || (ad(e) ? "exponential" : "interval");
        if (n && ((r = Bi({}, r)).stops && (r.stops = r.stops.map((D) => [D[0], ki.parse(D[1])])), r.default = ki.parse(r.default ? r.default : e.default)), r.colorSpace && r.colorSpace !== "rgb" && !B[r.colorSpace])
          throw new Error(`Unknown color space: ${r.colorSpace}`);
        let f, v, S;
        if (l === "exponential")
          f = ld;
        else if (l === "interval")
          f = Xf;
        else if (l === "categorical") {
          f = Jm, v = /* @__PURE__ */ Object.create(null);
          for (const D of r.stops)
            v[D[0]] = D[1];
          S = typeof r.stops[0][0];
        } else {
          if (l !== "identity")
            throw new Error(`Unknown function type "${l}"`);
          f = eu;
        }
        if (o) {
          const D = {}, x = [];
          for (let M = 0; M < r.stops.length; M++) {
            const C = r.stops[M], k = C[0].zoom;
            D[k] === void 0 && (D[k] = { zoom: k, type: r.type, property: r.property, default: r.default, stops: [] }, x.push(k)), D[k].stops.push([C[0].value, C[1]]);
          }
          const P = [];
          for (const M of x)
            P.push([D[M].zoom, $f(D[M], e)]);
          const I = { name: "linear" };
          return { kind: "composite", interpolationType: I, interpolationFactor: X.interpolationFactor.bind(void 0, I), zoomStops: P.map((M) => M[0]), evaluate: ({ zoom: M }, C) => ld({ stops: P, base: r.base }, e, M).evaluate(M, C) };
        }
        if (u) {
          const D = l === "exponential" ? { name: "exponential", base: r.base !== void 0 ? r.base : 1 } : null;
          return { kind: "camera", interpolationType: D, interpolationFactor: X.interpolationFactor.bind(void 0, D), zoomStops: r.stops.map((x) => x[0]), evaluate: ({ zoom: x }) => f(r, e, x, v, S) };
        }
        return { kind: "source", evaluate(D, x) {
          const P = x && x.properties ? x.properties[r.property] : void 0;
          return P === void 0 ? Jc(r.default, e.default) : f(r, e, P, v, S);
        } };
      }
      function Jc(r, e, n) {
        return r !== void 0 ? r : e !== void 0 ? e : n !== void 0 ? n : void 0;
      }
      function Jm(r, e, n, o, u) {
        return Jc(typeof n === u ? o[n] : void 0, r.default, e.default);
      }
      function Xf(r, e, n) {
        if (qo(n) !== "number")
          return Jc(r.default, e.default);
        const o = r.stops.length;
        if (o === 1 || n <= r.stops[0][0])
          return r.stops[0][1];
        if (n >= r.stops[o - 1][0])
          return r.stops[o - 1][1];
        const u = ao(r.stops.map((l) => l[0]), n);
        return r.stops[u][1];
      }
      function ld(r, e, n) {
        const o = r.base !== void 0 ? r.base : 1;
        if (qo(n) !== "number")
          return Jc(r.default, e.default);
        const u = r.stops.length;
        if (u === 1 || n <= r.stops[0][0])
          return r.stops[0][1];
        if (n >= r.stops[u - 1][0])
          return r.stops[u - 1][1];
        const l = ao(r.stops.map((x) => x[0]), n), f = function(x, P, I, M) {
          const C = M - I, k = x - I;
          return C === 0 ? 0 : P === 1 ? k / C : (Math.pow(P, k) - 1) / (Math.pow(P, C) - 1);
        }(n, o, r.stops[l][0], r.stops[l + 1][0]), v = r.stops[l][1], S = r.stops[l + 1][1];
        let D = Oi[e.type] || Wf;
        if (r.colorSpace && r.colorSpace !== "rgb") {
          const x = B[r.colorSpace];
          D = (P, I) => x.reverse(x.interpolate(x.forward(P), x.forward(I), f));
        }
        return typeof v.evaluate == "function" ? { evaluate(...x) {
          const P = v.evaluate.apply(void 0, x), I = S.evaluate.apply(void 0, x);
          if (P !== void 0 && I !== void 0)
            return D(P, I, f);
        } } : D(v, S, f);
      }
      function eu(r, e, n) {
        return e.type === "color" ? n = ki.parse(n) : e.type === "formatted" ? n = Dn.fromString(n.toString()) : e.type === "resolvedImage" ? n = ss.build(n.toString()) : qo(n) === e.type || e.type === "enum" && e.values[n] || (n = void 0), Jc(n, r.default, e.default);
      }
      or.register(Ao, { error: [{ kind: "error" }, [Fi], (r, [e]) => {
        throw new qn(e.evaluate(r));
      }], typeof: [Fi, [Pi], (r, [e]) => un(vn(e.evaluate(r)))], "to-rgba": [Ss(Ot, 4), [ms], (r, [e]) => e.evaluate(r).toRenderColor(null).toArray()], "to-hsla": [Ss(Ot, 4), [ms], (r, [e]) => e.evaluate(r).toRenderColor(null).toHslaArray()], rgb: [ms, [Ot, Ot, Ot], Yh], rgba: [ms, [Ot, Ot, Ot, Ot], Yh], hsl: [ms, [Ot, Ot, Ot], Kh], hsla: [ms, [Ot, Ot, Ot, Ot], Kh], has: { type: Li, overloads: [[[Fi], (r, [e]) => Yc(e.evaluate(r), r.properties())], [[Fi, bo], (r, [e, n]) => Yc(e.evaluate(r), n.evaluate(r))]] }, get: { type: Pi, overloads: [[[Fi], (r, [e]) => Ha(e.evaluate(r), r.properties())], [[Fi, bo], (r, [e, n]) => Ha(e.evaluate(r), n.evaluate(r))]] }, "feature-state": [Pi, [Fi], (r, [e]) => Ha(e.evaluate(r), r.featureState || {})], properties: [bo, [], (r) => r.properties()], "geometry-type": [Fi, [], (r) => r.geometryType()], id: [Pi, [], (r) => r.id()], zoom: [Ot, [], (r) => r.globals.zoom], pitch: [Ot, [], (r) => r.globals.pitch || 0], "distance-from-center": [Ot, [], (r) => r.distanceFromCenter()], "measure-light": [Ot, [Fi], (r, [e]) => r.measureLight(e.evaluate(r))], "heatmap-density": [Ot, [], (r) => r.globals.heatmapDensity || 0], "line-progress": [Ot, [], (r) => r.globals.lineProgress || 0], "raster-value": [Ot, [], (r) => r.globals.rasterValue || 0], "raster-particle-speed": [Ot, [], (r) => r.globals.rasterParticleSpeed || 0], "sky-radial-progress": [Ot, [], (r) => r.globals.skyRadialProgress || 0], accumulated: [Pi, [], (r) => r.globals.accumulated === void 0 ? null : r.globals.accumulated], "+": [Ot, vr(Ot), (r, e) => {
        let n = 0;
        for (const o of e)
          n += o.evaluate(r);
        return n;
      }], "*": [Ot, vr(Ot), (r, e) => {
        let n = 1;
        for (const o of e)
          n *= o.evaluate(r);
        return n;
      }], "-": { type: Ot, overloads: [[[Ot, Ot], (r, [e, n]) => e.evaluate(r) - n.evaluate(r)], [[Ot], (r, [e]) => -e.evaluate(r)]] }, "/": [Ot, [Ot, Ot], (r, [e, n]) => e.evaluate(r) / n.evaluate(r)], "%": [Ot, [Ot, Ot], (r, [e, n]) => e.evaluate(r) % n.evaluate(r)], ln2: [Ot, [], () => Math.LN2], pi: [Ot, [], () => Math.PI], e: [Ot, [], () => Math.E], "^": [Ot, [Ot, Ot], (r, [e, n]) => Math.pow(e.evaluate(r), n.evaluate(r))], sqrt: [Ot, [Ot], (r, [e]) => Math.sqrt(e.evaluate(r))], log10: [Ot, [Ot], (r, [e]) => Math.log(e.evaluate(r)) / Math.LN10], ln: [Ot, [Ot], (r, [e]) => Math.log(e.evaluate(r))], log2: [Ot, [Ot], (r, [e]) => Math.log(e.evaluate(r)) / Math.LN2], sin: [Ot, [Ot], (r, [e]) => Math.sin(e.evaluate(r))], cos: [Ot, [Ot], (r, [e]) => Math.cos(e.evaluate(r))], tan: [Ot, [Ot], (r, [e]) => Math.tan(e.evaluate(r))], asin: [Ot, [Ot], (r, [e]) => Math.asin(e.evaluate(r))], acos: [Ot, [Ot], (r, [e]) => Math.acos(e.evaluate(r))], atan: [Ot, [Ot], (r, [e]) => Math.atan(e.evaluate(r))], min: [Ot, vr(Ot), (r, e) => Math.min(...e.map((n) => n.evaluate(r)))], max: [Ot, vr(Ot), (r, e) => Math.max(...e.map((n) => n.evaluate(r)))], abs: [Ot, [Ot], (r, [e]) => Math.abs(e.evaluate(r))], round: [Ot, [Ot], (r, [e]) => {
        const n = e.evaluate(r);
        return n < 0 ? -Math.round(-n) : Math.round(n);
      }], floor: [Ot, [Ot], (r, [e]) => Math.floor(e.evaluate(r))], ceil: [Ot, [Ot], (r, [e]) => Math.ceil(e.evaluate(r))], "filter-==": [Li, [Fi, Pi], (r, [e, n]) => r.properties()[e.value] === n.value], "filter-id-==": [Li, [Pi], (r, [e]) => r.id() === e.value], "filter-type-==": [Li, [Fi], (r, [e]) => r.geometryType() === e.value], "filter-<": [Li, [Fi, Pi], (r, [e, n]) => {
        const o = r.properties()[e.value], u = n.value;
        return typeof o == typeof u && o < u;
      }], "filter-id-<": [Li, [Pi], (r, [e]) => {
        const n = r.id(), o = e.value;
        return typeof n == typeof o && n < o;
      }], "filter->": [Li, [Fi, Pi], (r, [e, n]) => {
        const o = r.properties()[e.value], u = n.value;
        return typeof o == typeof u && o > u;
      }], "filter-id->": [Li, [Pi], (r, [e]) => {
        const n = r.id(), o = e.value;
        return typeof n == typeof o && n > o;
      }], "filter-<=": [Li, [Fi, Pi], (r, [e, n]) => {
        const o = r.properties()[e.value], u = n.value;
        return typeof o == typeof u && o <= u;
      }], "filter-id-<=": [Li, [Pi], (r, [e]) => {
        const n = r.id(), o = e.value;
        return typeof n == typeof o && n <= o;
      }], "filter->=": [Li, [Fi, Pi], (r, [e, n]) => {
        const o = r.properties()[e.value], u = n.value;
        return typeof o == typeof u && o >= u;
      }], "filter-id->=": [Li, [Pi], (r, [e]) => {
        const n = r.id(), o = e.value;
        return typeof n == typeof o && n >= o;
      }], "filter-has": [Li, [Pi], (r, [e]) => e.value in r.properties()], "filter-has-id": [Li, [], (r) => r.id() !== null && r.id() !== void 0], "filter-type-in": [Li, [Ss(Fi)], (r, [e]) => e.value.indexOf(r.geometryType()) >= 0], "filter-id-in": [Li, [Ss(Pi)], (r, [e]) => e.value.indexOf(r.id()) >= 0], "filter-in-small": [Li, [Fi, Ss(Pi)], (r, [e, n]) => n.value.indexOf(r.properties()[e.value]) >= 0], "filter-in-large": [Li, [Fi, Ss(Pi)], (r, [e, n]) => function(o, u, l, f) {
        for (; l <= f; ) {
          const v = l + f >> 1;
          if (u[v] === o)
            return !0;
          u[v] > o ? f = v - 1 : l = v + 1;
        }
        return !1;
      }(r.properties()[e.value], n.value, 0, n.value.length - 1)], all: { type: Li, overloads: [[[Li, Li], (r, [e, n]) => e.evaluate(r) && n.evaluate(r)], [vr(Li), (r, e) => {
        for (const n of e)
          if (!n.evaluate(r))
            return !1;
        return !0;
      }]] }, any: { type: Li, overloads: [[[Li, Li], (r, [e, n]) => e.evaluate(r) || n.evaluate(r)], [vr(Li), (r, e) => {
        for (const n of e)
          if (n.evaluate(r))
            return !0;
        return !1;
      }]] }, "!": [Li, [Li], (r, [e]) => !e.evaluate(r)], "is-supported-script": [Li, [Fi], (r, [e]) => {
        const n = r.globals && r.globals.isSupportedScript;
        return !n || n(e.evaluate(r));
      }], upcase: [Fi, [Fi], (r, [e]) => e.evaluate(r).toUpperCase()], downcase: [Fi, [Fi], (r, [e]) => e.evaluate(r).toLowerCase()], concat: [Fi, vr(Pi), (r, e) => e.map((n) => Ir(n.evaluate(r))).join("")], "resolved-locale": [Fi, [_s], (r, [e]) => e.evaluate(r).resolvedLocale()], random: [Ot, [Ot, Ot, Pi], (r, e) => {
        const [n, o, u] = e.map((f) => f.evaluate(r));
        if (n > o || n === o)
          return n;
        let l;
        if (typeof u == "string")
          l = function(f) {
            let v = 0;
            if (f.length === 0)
              return v;
            for (let S = 0; S < f.length; S++)
              v = (v << 5) - v + f.charCodeAt(S), v |= 0;
            return v;
          }(u);
        else {
          if (typeof u != "number")
            throw new qn(`Invalid seed input: ${u}`);
          l = u;
        }
        return n + es(l)() * (o - n);
      }] });
      class cd {
        constructor(e, n, o, u) {
          this.expression = e, this._warningHistory = {}, this._evaluator = new Fa(o, u), this._defaultValue = n ? function(l) {
            return l.type === "color" && (Qh(l.default) || Array.isArray(l.default)) ? new ki(0, 0, 0, 0) : l.type === "color" ? ki.parse(l.default) || null : l.default === void 0 ? null : l.default;
          }(n) : null, this._enumValues = n && n.type === "enum" ? n.values : null, this.configDependencies = kr(e);
        }
        evaluateWithoutErrorHandling(e, n, o, u, l, f, v, S) {
          return this._evaluator.globals = e, this._evaluator.feature = n, this._evaluator.featureState = o, this._evaluator.canonical = u || null, this._evaluator.availableImages = l || null, this._evaluator.formattedSection = f, this._evaluator.featureTileCoord = v || null, this._evaluator.featureDistanceData = S || null, this.expression.evaluate(this._evaluator);
        }
        evaluate(e, n, o, u, l, f, v, S) {
          this._evaluator.globals = e, this._evaluator.feature = n || null, this._evaluator.featureState = o || null, this._evaluator.canonical = u || null, this._evaluator.availableImages = l || null, this._evaluator.formattedSection = f || null, this._evaluator.featureTileCoord = v || null, this._evaluator.featureDistanceData = S || null;
          try {
            const D = this.expression.evaluate(this._evaluator);
            if (D == null || typeof D == "number" && D != D)
              return this._defaultValue;
            if (this._enumValues && !(D in this._enumValues))
              throw new qn(`Expected value to be one of ${Object.keys(this._enumValues).map((x) => JSON.stringify(x)).join(", ")}, but found ${JSON.stringify(D)} instead.`);
            return D;
          } catch (D) {
            return this._warningHistory[D.message] || (this._warningHistory[D.message] = !0, typeof console < "u" && console.warn(`Failed to evaluate expression "${JSON.stringify(this.expression.serialize())}". ${D.message}`)), this._defaultValue;
          }
        }
      }
      function tu(r) {
        return Array.isArray(r) && r.length > 0 && typeof r[0] == "string" && r[0] in Ao;
      }
      function Qc(r, e, n, o) {
        const u = new Qr(Ao, [], e ? function(f) {
          const v = { color: ms, string: Fi, number: Ot, enum: Fi, boolean: Li, formatted: Js, resolvedImage: Ho };
          return f.type === "array" ? Ss(v[f.value] || Pi, f.length) : v[f.type];
        }(e) : void 0, void 0, void 0, n, o), l = u.parse(r, void 0, void 0, void 0, e && e.type === "string" ? { typeAnnotation: "coerce" } : void 0);
        return l ? Kc(new cd(l, e, n, o)) : xa(u.errors);
      }
      class hd {
        constructor(e, n, o, u) {
          this.kind = e, this._styleExpression = n, this.isLightConstant = o, this.isLineProgressConstant = u, this.isStateDependent = e !== "constant" && !xl(n.expression), this.configDependencies = kr(n.expression);
        }
        evaluateWithoutErrorHandling(e, n, o, u, l, f) {
          return this._styleExpression.evaluateWithoutErrorHandling(e, n, o, u, l, f);
        }
        evaluate(e, n, o, u, l, f) {
          return this._styleExpression.evaluate(e, n, o, u, l, f);
        }
      }
      class sc {
        constructor(e, n, o, u, l, f) {
          this.kind = e, this.zoomStops = o, this._styleExpression = n, this.isStateDependent = e !== "camera" && !xl(n.expression), this.isLightConstant = l, this.isLineProgressConstant = f, this.configDependencies = kr(n.expression), this.interpolationType = u;
        }
        evaluateWithoutErrorHandling(e, n, o, u, l, f) {
          return this._styleExpression.evaluateWithoutErrorHandling(e, n, o, u, l, f);
        }
        evaluate(e, n, o, u, l, f) {
          return this._styleExpression.evaluate(e, n, o, u, l, f);
        }
        interpolationFactor(e, n, o) {
          return this.interpolationType ? X.interpolationFactor(this.interpolationType, e, n, o) : 0;
        }
      }
      function ud(r, e, n, o) {
        if ((r = Qc(r, e, n, o)).result === "error")
          return r;
        const u = r.value.expression, l = ro(u);
        if (!l && !nc(e))
          return xa([new ns("", "data expressions not supported")]);
        const f = oo(u, ["zoom", "pitch", "distance-from-center"]);
        if (!f && !qf(e))
          return xa([new ns("", "zoom expressions not supported")]);
        const v = oo(u, ["measure-light"]);
        if (!v && !Jh(e))
          return xa([new ns("", "measure-light expression not supported")]);
        const S = oo(u, ["line-progress"]);
        if (!S && !function(P) {
          return od(P.expression, "line-progress");
        }(e))
          return xa([new ns("", "line-progress expression not supported")]);
        const D = e.expression && e.expression.relaxZoomRestriction, x = nu(u);
        return x || f || D ? x instanceof ns ? xa([x]) : x instanceof X && !ad(e) ? xa([new ns("", '"interpolate" expressions cannot be used with this property')]) : Kc(x ? new sc(l && S ? "camera" : "composite", r.value, x.labels, x instanceof X ? x.interpolation : void 0, v, S) : new hd(l && S ? "constant" : "source", r.value, v, S)) : xa([new ns("", '"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression, or in the properties of atmosphere.')]);
      }
      class iu {
        constructor(e, n) {
          this._parameters = e, this._specification = n, Bi(this, $f(this._parameters, this._specification));
        }
        static deserialize(e) {
          return new iu(e._parameters, e._specification);
        }
        static serialize(e) {
          return { _parameters: e._parameters, _specification: e._specification };
        }
      }
      function nu(r) {
        let e = null;
        if (r instanceof We)
          e = nu(r.result);
        else if (r instanceof ye) {
          for (const n of r.args)
            if (e = nu(n), e)
              break;
        } else
          (r instanceof Ti || r instanceof X) && r.input instanceof or && r.input.name === "zoom" && (e = r);
        return e instanceof ns || r.eachChild((n) => {
          const o = nu(n);
          o instanceof ns ? e = o : e && o && e !== o && (e = new ns("", 'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'));
        }), e;
      }
      var dd, fd, Qm = function() {
        if (fd)
          return dd;
        fd = 1, dd = e;
        var r = 3;
        function e(n, o, u) {
          var l = this.cells = [];
          if (n instanceof ArrayBuffer) {
            this.arrayBuffer = n;
            var f = new Int32Array(this.arrayBuffer);
            n = f[0], this.d = (o = f[1]) + 2 * (u = f[2]);
            for (var v = 0; v < this.d * this.d; v++) {
              var S = f[r + v], D = f[r + v + 1];
              l.push(S === D ? null : f.subarray(S, D));
            }
            var x = f[r + l.length + 1];
            this.keys = f.subarray(f[r + l.length], x), this.bboxes = f.subarray(x), this.insert = this._insertReadonly;
          } else {
            this.d = o + 2 * u;
            for (var P = 0; P < this.d * this.d; P++)
              l.push([]);
            this.keys = [], this.bboxes = [];
          }
          this.n = o, this.extent = n, this.padding = u, this.scale = o / n, this.uid = 0;
          var I = u / o * n;
          this.min = -I, this.max = n + I;
        }
        return e.prototype.insert = function(n, o, u, l, f) {
          this._forEachCell(o, u, l, f, this._insertCell, this.uid++), this.keys.push(n), this.bboxes.push(o), this.bboxes.push(u), this.bboxes.push(l), this.bboxes.push(f);
        }, e.prototype._insertReadonly = function() {
          throw "Cannot insert into a GridIndex created from an ArrayBuffer.";
        }, e.prototype._insertCell = function(n, o, u, l, f, v) {
          this.cells[f].push(v);
        }, e.prototype.query = function(n, o, u, l, f) {
          var v = this.min, S = this.max;
          if (n <= v && o <= v && S <= u && S <= l && !f)
            return Array.prototype.slice.call(this.keys);
          var D = [];
          return this._forEachCell(n, o, u, l, this._queryCell, D, {}, f), D;
        }, e.prototype._queryCell = function(n, o, u, l, f, v, S, D) {
          var x = this.cells[f];
          if (x !== null)
            for (var P = this.keys, I = this.bboxes, M = 0; M < x.length; M++) {
              var C = x[M];
              if (S[C] === void 0) {
                var k = 4 * C;
                (D ? D(I[k + 0], I[k + 1], I[k + 2], I[k + 3]) : n <= I[k + 2] && o <= I[k + 3] && u >= I[k + 0] && l >= I[k + 1]) ? (S[C] = !0, v.push(P[C])) : S[C] = !1;
              }
            }
        }, e.prototype._forEachCell = function(n, o, u, l, f, v, S, D) {
          for (var x = this._convertToCellCoord(n), P = this._convertToCellCoord(o), I = this._convertToCellCoord(u), M = this._convertToCellCoord(l), C = x; C <= I; C++)
            for (var k = P; k <= M; k++) {
              var V = this.d * k + C;
              if ((!D || D(this._convertFromCellCoord(C), this._convertFromCellCoord(k), this._convertFromCellCoord(C + 1), this._convertFromCellCoord(k + 1))) && f.call(this, n, o, u, l, V, v, S, D))
                return;
            }
        }, e.prototype._convertFromCellCoord = function(n) {
          return (n - this.padding) / this.scale;
        }, e.prototype._convertToCellCoord = function(n) {
          return Math.max(0, Math.min(this.d - 1, Math.floor(n * this.scale) + this.padding));
        }, e.prototype.toArrayBuffer = function() {
          if (this.arrayBuffer)
            return this.arrayBuffer;
          for (var n = this.cells, o = r + this.cells.length + 1 + 1, u = 0, l = 0; l < this.cells.length; l++)
            u += this.cells[l].length;
          var f = new Int32Array(o + u + this.keys.length + this.bboxes.length);
          f[0] = this.extent, f[1] = this.n, f[2] = this.padding;
          for (var v = o, S = 0; S < n.length; S++) {
            var D = n[S];
            f[r + S] = v, f.set(D, v), v += D.length;
          }
          return f[r + n.length] = v, f.set(this.keys, v), f[r + n.length + 1] = v += this.keys.length, f.set(this.bboxes, v), v += this.bboxes.length, f.buffer;
        }, dd;
      }(), rc = O(Qm);
      const eh = {};
      function Ft(r, e, n = {}) {
        Object.defineProperty(r, "_classRegistryKey", { value: e, writable: !1 }), eh[e] = { klass: r, omit: n.omit || [] };
      }
      Ft(Object, "Object"), rc.serialize = function(r, e) {
        const n = r.toArrayBuffer();
        return e && e.add(n), { buffer: n };
      }, rc.deserialize = function(r) {
        return new rc(r.buffer);
      }, Object.defineProperty(rc, "name", { value: "Grid" }), Ft(rc, "Grid"), typeof DOMMatrix < "u" && Ft(DOMMatrix, "DOMMatrix"), Ft(ki, "Color"), Ft(Error, "Error"), Ft(Dn, "Formatted"), Ft(dl, "FormattedSection"), Ft(jo, "AJAXError"), Ft(ss, "ResolvedImage"), Ft(iu, "StylePropertyFunction"), Ft(cd, "StyleExpression", { omit: ["_evaluator"] }), Ft(rr, "ImageIdWithOptions"), Ft(sc, "ZoomDependentExpression"), Ft(hd, "ZoomConstantExpression"), Ft(or, "CompoundExpression", { omit: ["_evaluate"] });
      for (const r in Ao)
        eh[Ao[r]._classRegistryKey] || Ft(Ao[r], `Expression${r}`);
      function pd(r) {
        return r && typeof ArrayBuffer < "u" && (r instanceof ArrayBuffer || r.constructor && r.constructor.name === "ArrayBuffer");
      }
      function Yf(r) {
        return self.ImageBitmap && r instanceof ImageBitmap;
      }
      function lo(r, e) {
        if (r == null || typeof r == "boolean" || typeof r == "number" || typeof r == "string" || r instanceof Boolean || r instanceof Number || r instanceof String || r instanceof Date || r instanceof RegExp)
          return r;
        if (pd(r) || Yf(r))
          return e && e.add(r), r;
        if (ArrayBuffer.isView(r))
          return e && e.add(r.buffer), r;
        if (r instanceof ImageData)
          return e && e.add(r.data.buffer), r;
        if (Array.isArray(r)) {
          const n = [];
          for (const o of r)
            n.push(lo(o, e));
          return n;
        }
        if (r instanceof Map) {
          const n = { $name: "Map" };
          for (const [o, u] of r.entries())
            n[o] = lo(u);
          return n;
        }
        if (r instanceof Set) {
          const n = { $name: "Set" };
          let o = 0;
          for (const u of r.values())
            n[++o] = lo(u);
          return n;
        }
        if (typeof r == "object") {
          const n = r.constructor, o = n._classRegistryKey;
          if (!o)
            throw new Error(`Can't serialize object of unregistered class "${o}".`);
          const u = n.serialize ? n.serialize(r, e) : {};
          if (!n.serialize) {
            for (const l in r)
              r.hasOwnProperty(l) && (eh[o].omit.indexOf(l) >= 0 || (u[l] = lo(r[l], e)));
            r instanceof Error && (u.message = r.message);
          }
          if (u.$name)
            throw new Error("$name property is reserved for worker serialization logic.");
          return o !== "Object" && (u.$name = o), u;
        }
        throw new Error("can't serialize object of type " + typeof r);
      }
      function Tl(r) {
        if (r == null || typeof r == "boolean" || typeof r == "number" || typeof r == "string" || r instanceof Boolean || r instanceof Number || r instanceof String || r instanceof Date || r instanceof RegExp || pd(r) || Yf(r) || ArrayBuffer.isView(r) || r instanceof ImageData)
          return r;
        if (Array.isArray(r))
          return r.map(Tl);
        if (typeof r == "object") {
          const e = r.$name || "Object";
          if (e === "Map") {
            const u = /* @__PURE__ */ new Map();
            for (const l of Object.keys(r))
              l !== "$name" && u.set(l, Tl(r[l]));
            return u;
          }
          if (e === "Set") {
            const u = /* @__PURE__ */ new Set();
            for (const l of Object.keys(r))
              l !== "$name" && u.add(Tl(r[l]));
            return u;
          }
          const { klass: n } = eh[e];
          if (!n)
            throw new Error(`Can't deserialize unregistered class "${e}".`);
          if (n.deserialize)
            return n.deserialize(r);
          const o = Object.create(n.prototype);
          for (const u of Object.keys(r))
            u !== "$name" && (o[u] = Tl(r[u]));
          return o;
        }
        throw new Error("can't deserialize object of type " + typeof r);
      }
      const Zt = { "Latin-1 Supplement": (r) => r >= 128 && r <= 255, Arabic: (r) => r >= 1536 && r <= 1791, "Arabic Supplement": (r) => r >= 1872 && r <= 1919, "Arabic Extended-A": (r) => r >= 2208 && r <= 2303, "Hangul Jamo": (r) => r >= 4352 && r <= 4607, "Unified Canadian Aboriginal Syllabics": (r) => r >= 5120 && r <= 5759, Khmer: (r) => r >= 6016 && r <= 6143, "Unified Canadian Aboriginal Syllabics Extended": (r) => r >= 6320 && r <= 6399, "General Punctuation": (r) => r >= 8192 && r <= 8303, "Letterlike Symbols": (r) => r >= 8448 && r <= 8527, "Number Forms": (r) => r >= 8528 && r <= 8591, "Miscellaneous Technical": (r) => r >= 8960 && r <= 9215, "Control Pictures": (r) => r >= 9216 && r <= 9279, "Optical Character Recognition": (r) => r >= 9280 && r <= 9311, "Enclosed Alphanumerics": (r) => r >= 9312 && r <= 9471, "Geometric Shapes": (r) => r >= 9632 && r <= 9727, "Miscellaneous Symbols": (r) => r >= 9728 && r <= 9983, "Miscellaneous Symbols and Arrows": (r) => r >= 11008 && r <= 11263, "CJK Radicals Supplement": (r) => r >= 11904 && r <= 12031, "Kangxi Radicals": (r) => r >= 12032 && r <= 12255, "Ideographic Description Characters": (r) => r >= 12272 && r <= 12287, "CJK Symbols and Punctuation": (r) => r >= 12288 && r <= 12351, Hiragana: (r) => r >= 12352 && r <= 12447, Katakana: (r) => r >= 12448 && r <= 12543, Bopomofo: (r) => r >= 12544 && r <= 12591, "Hangul Compatibility Jamo": (r) => r >= 12592 && r <= 12687, Kanbun: (r) => r >= 12688 && r <= 12703, "Bopomofo Extended": (r) => r >= 12704 && r <= 12735, "CJK Strokes": (r) => r >= 12736 && r <= 12783, "Katakana Phonetic Extensions": (r) => r >= 12784 && r <= 12799, "Enclosed CJK Letters and Months": (r) => r >= 12800 && r <= 13055, "CJK Compatibility": (r) => r >= 13056 && r <= 13311, "CJK Unified Ideographs Extension A": (r) => r >= 13312 && r <= 19903, "Yijing Hexagram Symbols": (r) => r >= 19904 && r <= 19967, "CJK Unified Ideographs": (r) => r >= 19968 && r <= 40959, "Yi Syllables": (r) => r >= 40960 && r <= 42127, "Yi Radicals": (r) => r >= 42128 && r <= 42191, "Hangul Jamo Extended-A": (r) => r >= 43360 && r <= 43391, "Hangul Syllables": (r) => r >= 44032 && r <= 55215, "Hangul Jamo Extended-B": (r) => r >= 55216 && r <= 55295, "Private Use Area": (r) => r >= 57344 && r <= 63743, "CJK Compatibility Ideographs": (r) => r >= 63744 && r <= 64255, "Arabic Presentation Forms-A": (r) => r >= 64336 && r <= 65023, "Vertical Forms": (r) => r >= 65040 && r <= 65055, "CJK Compatibility Forms": (r) => r >= 65072 && r <= 65103, "Small Form Variants": (r) => r >= 65104 && r <= 65135, "Arabic Presentation Forms-B": (r) => r >= 65136 && r <= 65279, "Halfwidth and Fullwidth Forms": (r) => r >= 65280 && r <= 65519, Osage: (r) => r >= 66736 && r <= 66815, "CJK Unified Ideographs Extension B": (r) => r >= 131072 && r <= 173791 };
      function md(r) {
        for (const e of r)
          if (su(e.charCodeAt(0)))
            return !0;
        return !1;
      }
      function Kf(r) {
        for (const e of r)
          if (!Jf(e.charCodeAt(0)))
            return !1;
        return !0;
      }
      function Jf(r) {
        return !(Zt.Arabic(r) || Zt["Arabic Supplement"](r) || Zt["Arabic Extended-A"](r) || Zt["Arabic Presentation Forms-A"](r) || Zt["Arabic Presentation Forms-B"](r));
      }
      function su(r) {
        return !(r !== 746 && r !== 747 && (r < 4352 || !(Zt["Bopomofo Extended"](r) || Zt.Bopomofo(r) || Zt["CJK Compatibility Forms"](r) && !(r >= 65097 && r <= 65103) || Zt["CJK Compatibility Ideographs"](r) || Zt["CJK Compatibility"](r) || Zt["CJK Radicals Supplement"](r) || Zt["CJK Strokes"](r) || !(!Zt["CJK Symbols and Punctuation"](r) || r >= 12296 && r <= 12305 || r >= 12308 && r <= 12319 || r === 12336) || Zt["CJK Unified Ideographs Extension A"](r) || Zt["CJK Unified Ideographs"](r) || Zt["Enclosed CJK Letters and Months"](r) || Zt["Hangul Compatibility Jamo"](r) || Zt["Hangul Jamo Extended-A"](r) || Zt["Hangul Jamo Extended-B"](r) || Zt["Hangul Jamo"](r) || Zt["Hangul Syllables"](r) || Zt.Hiragana(r) || Zt["Ideographic Description Characters"](r) || Zt.Kanbun(r) || Zt["Kangxi Radicals"](r) || Zt["Katakana Phonetic Extensions"](r) || Zt.Katakana(r) && r !== 12540 || !(!Zt["Halfwidth and Fullwidth Forms"](r) || r === 65288 || r === 65289 || r === 65293 || r >= 65306 && r <= 65310 || r === 65339 || r === 65341 || r === 65343 || r >= 65371 && r <= 65503 || r === 65507 || r >= 65512 && r <= 65519) || !(!Zt["Small Form Variants"](r) || r >= 65112 && r <= 65118 || r >= 65123 && r <= 65126) || Zt["Unified Canadian Aboriginal Syllabics"](r) || Zt["Unified Canadian Aboriginal Syllabics Extended"](r) || Zt["Vertical Forms"](r) || Zt["Yijing Hexagram Symbols"](r) || Zt["Yi Syllables"](r) || Zt["Yi Radicals"](r))));
      }
      function _d(r) {
        return !(su(r) || function(e) {
          return !!(Zt["Latin-1 Supplement"](e) && (e === 167 || e === 169 || e === 174 || e === 177 || e === 188 || e === 189 || e === 190 || e === 215 || e === 247) || Zt["General Punctuation"](e) && (e === 8214 || e === 8224 || e === 8225 || e === 8240 || e === 8241 || e === 8251 || e === 8252 || e === 8258 || e === 8263 || e === 8264 || e === 8265 || e === 8273) || Zt["Letterlike Symbols"](e) || Zt["Number Forms"](e) || Zt["Miscellaneous Technical"](e) && (e >= 8960 && e <= 8967 || e >= 8972 && e <= 8991 || e >= 8996 && e <= 9e3 || e === 9003 || e >= 9085 && e <= 9114 || e >= 9150 && e <= 9165 || e === 9167 || e >= 9169 && e <= 9179 || e >= 9186 && e <= 9215) || Zt["Control Pictures"](e) && e !== 9251 || Zt["Optical Character Recognition"](e) || Zt["Enclosed Alphanumerics"](e) || Zt["Geometric Shapes"](e) || Zt["Miscellaneous Symbols"](e) && !(e >= 9754 && e <= 9759) || Zt["Miscellaneous Symbols and Arrows"](e) && (e >= 11026 && e <= 11055 || e >= 11088 && e <= 11097 || e >= 11192 && e <= 11243) || Zt["CJK Symbols and Punctuation"](e) || Zt.Katakana(e) || Zt["Private Use Area"](e) || Zt["CJK Compatibility Forms"](e) || Zt["Small Form Variants"](e) || Zt["Halfwidth and Fullwidth Forms"](e) || e === 8734 || e === 8756 || e === 8757 || e >= 9984 && e <= 10087 || e >= 10102 && e <= 10131 || e === 65532 || e === 65533);
        }(r));
      }
      function ru(r) {
        return r >= 1424 && r <= 2303 || Zt["Arabic Presentation Forms-A"](r) || Zt["Arabic Presentation Forms-B"](r);
      }
      function gd(r, e) {
        return !(!e && ru(r) || r >= 2304 && r <= 3583 || r >= 3840 && r <= 4255 || Zt.Khmer(r));
      }
      function Qf(r) {
        for (const e of r)
          if (ru(e.charCodeAt(0)))
            return !0;
        return !1;
      }
      const yd = "deferred", ea = "loading", xd = "loaded";
      let vd = null, br = "unavailable", qa = null;
      const th = function(r) {
        r && typeof r == "string" && r.indexOf("NetworkError") > -1 && (br = "error"), vd && vd(r);
      };
      function ou() {
        oc.fire(new Ar("pluginStateChange", { pluginStatus: br, pluginURL: qa }));
      }
      const oc = new Zo(), au = function() {
        return br;
      }, ep = function() {
        if (br !== yd || !qa)
          throw new Error("rtl-text-plugin cannot be downloaded unless a pluginURL is specified");
        br = ea, ou(), qa && no({ url: qa }, (r) => {
          r ? th(r) : (br = xd, ou());
        });
      }, co = { applyArabicShaping: null, processBidirectionalText: null, processStyledBidirectionalText: null, isLoaded: () => br === xd || co.applyArabicShaping != null, isLoading: () => br === ea, setState(r) {
        br = r.pluginStatus, qa = r.pluginURL;
      }, isParsed: () => co.applyArabicShaping != null && co.processBidirectionalText != null && co.processStyledBidirectionalText != null, getPluginURL: () => qa };
      class Tn {
        constructor(e, n) {
          this.zoom = e, n ? (this.now = n.now, this.fadeDuration = n.fadeDuration, this.transition = n.transition, this.pitch = n.pitch, this.brightness = n.brightness) : (this.now = 0, this.fadeDuration = 0, this.transition = {}, this.pitch = 0, this.brightness = 0);
        }
        isSupportedScript(e) {
          return function(n, o) {
            for (const u of n)
              if (!gd(u.charCodeAt(0), o))
                return !1;
            return !0;
          }(e, co.isLoaded());
        }
      }
      class ac {
        constructor(e, n, o, u) {
          this.property = e, this.value = n, this.expression = function(l, f, v, S) {
            if (Qh(l))
              return new iu(l, f);
            if (tu(l) || Array.isArray(l) && l.length > 0) {
              const D = ud(l, f, v, S);
              if (D.result === "error")
                throw new Error(D.value.map((x) => `${x.key}: ${x.message}`).join(", "));
              return D.value;
            }
            {
              let D = l;
              return typeof l == "string" && f.type === "color" && (D = ki.parse(l)), { kind: "constant", configDependencies: /* @__PURE__ */ new Set(), evaluate: () => D };
            }
          }(n === void 0 ? e.specification.default : n, e.specification, o, u);
        }
        isDataDriven() {
          return this.expression.kind === "source" || this.expression.kind === "composite";
        }
        possiblyEvaluate(e, n, o) {
          return this.property.possiblyEvaluate(this, e, n, o);
        }
      }
      class lu {
        constructor(e, n, o) {
          this.property = e, this.value = new ac(e, void 0, n, o);
        }
        transitioned(e, n) {
          return new Ml(this.property, this.value, n, An({}, e.transition, this.transition), e.now);
        }
        untransitioned() {
          return new Ml(this.property, this.value, null, {}, 0);
        }
      }
      class ih {
        constructor(e, n, o) {
          this._properties = e, this._values = Object.create(e.defaultTransitionablePropertyValues), this._scope = n, this._options = o, this.configDependencies = /* @__PURE__ */ new Set();
        }
        getValue(e) {
          return Ys(this._values[e].value.value);
        }
        setValue(e, n) {
          this._values.hasOwnProperty(e) || (this._values[e] = new lu(this._values[e].property, this._scope, this._options)), this._values[e].value = new ac(this._values[e].property, n === null ? void 0 : Ys(n), this._scope, this._options), this._values[e].value.expression.configDependencies && (this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...this._values[e].value.expression.configDependencies]));
        }
        setTransitionOrValue(e, n) {
          n && (this._options = n);
          const o = this._properties.properties;
          if (e)
            for (const u in e) {
              const l = e[u];
              if (yr(u, "-transition")) {
                const f = u.slice(0, -11);
                o[f] && this.setTransition(f, l);
              } else
                o.hasOwnProperty(u) && this.setValue(u, l);
            }
        }
        getTransition(e) {
          return Ys(this._values[e].transition);
        }
        setTransition(e, n) {
          this._values.hasOwnProperty(e) || (this._values[e] = new lu(this._values[e].property)), this._values[e].transition = Ys(n) || void 0;
        }
        serialize() {
          const e = {};
          for (const n of Object.keys(this._values)) {
            const o = this.getValue(n);
            o !== void 0 && (e[n] = o);
            const u = this.getTransition(n);
            u !== void 0 && (e[`${n}-transition`] = u);
          }
          return e;
        }
        transitioned(e, n) {
          const o = new tp(this._properties);
          for (const u of Object.keys(this._values))
            o._values[u] = this._values[u].transitioned(e, n._values[u]);
          return o;
        }
        untransitioned() {
          const e = new tp(this._properties);
          for (const n of Object.keys(this._values))
            e._values[n] = this._values[n].untransitioned();
          return e;
        }
      }
      class Ml {
        constructor(e, n, o, u, l) {
          const f = u.delay || 0, v = u.duration || 0;
          l = l || 0, this.property = e, this.value = n, this.begin = l + f, this.end = this.begin + v, e.specification.transition && (u.delay || u.duration) && (this.prior = o);
        }
        possiblyEvaluate(e, n, o) {
          const u = e.now || 0, l = this.value.possiblyEvaluate(e, n, o), f = this.prior;
          if (f) {
            if (u > this.end)
              return this.prior = null, l;
            if (this.value.isDataDriven())
              return this.prior = null, l;
            if (u < this.begin)
              return f.possiblyEvaluate(e, n, o);
            {
              const v = (u - this.begin) / (this.end - this.begin);
              return this.property.interpolate(f.possiblyEvaluate(e, n, o), l, Hr(v));
            }
          }
          return l;
        }
      }
      class tp {
        constructor(e) {
          this._properties = e, this._values = Object.create(e.defaultTransitioningPropertyValues);
        }
        possiblyEvaluate(e, n, o) {
          const u = new cc(this._properties);
          for (const l of Object.keys(this._values))
            u._values[l] = this._values[l].possiblyEvaluate(e, n, o);
          return u;
        }
        hasTransition() {
          for (const e of Object.keys(this._values))
            if (this._values[e].prior)
              return !0;
          return !1;
        }
      }
      class e_ {
        constructor(e, n, o) {
          this._properties = e, this._values = Object.create(e.defaultPropertyValues), this._scope = n, this._options = o, this.configDependencies = /* @__PURE__ */ new Set();
        }
        getValue(e) {
          return Ys(this._values[e].value);
        }
        setValue(e, n) {
          this._values[e] = new ac(this._values[e].property, n === null ? void 0 : Ys(n), this._scope, this._options), this._values[e].expression.configDependencies && (this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...this._values[e].expression.configDependencies]));
        }
        serialize() {
          const e = {};
          for (const n of Object.keys(this._values)) {
            const o = this.getValue(n);
            o !== void 0 && (e[n] = o);
          }
          return e;
        }
        possiblyEvaluate(e, n, o) {
          const u = new cc(this._properties);
          for (const l of Object.keys(this._values))
            u._values[l] = this._values[l].possiblyEvaluate(e, n, o);
          return u;
        }
      }
      class lc {
        constructor(e, n, o) {
          this.property = e, this.value = n, this.parameters = o;
        }
        isConstant() {
          return this.value.kind === "constant";
        }
        constantOr(e) {
          return this.value.kind === "constant" ? this.value.value : e;
        }
        evaluate(e, n, o, u) {
          return this.property.evaluate(this.value, this.parameters, e, n, o, u);
        }
      }
      class cc {
        constructor(e) {
          this._properties = e, this._values = Object.create(e.defaultPossiblyEvaluatedValues);
        }
        get(e) {
          return this._values[e];
        }
      }
      class yt {
        constructor(e) {
          this.specification = e;
        }
        possiblyEvaluate(e, n) {
          return e.expression.evaluate(n);
        }
        interpolate(e, n, o) {
          const u = Oi[this.specification.type];
          return u ? u(e, n, o) : e;
        }
      }
      class Dt {
        constructor(e, n) {
          this.specification = e, this.overrides = n;
        }
        possiblyEvaluate(e, n, o, u) {
          return new lc(this, e.expression.kind === "constant" || e.expression.kind === "camera" ? { kind: "constant", value: e.expression.evaluate(n, null, {}, o, u) } : e.expression, n);
        }
        interpolate(e, n, o) {
          if (e.value.kind !== "constant" || n.value.kind !== "constant")
            return e;
          if (e.value.value === void 0 || n.value.value === void 0)
            return new lc(this, { kind: "constant", value: void 0 }, e.parameters);
          const u = Oi[this.specification.type];
          return u ? new lc(this, { kind: "constant", value: u(e.value.value, n.value.value, o) }, e.parameters) : e;
        }
        evaluate(e, n, o, u, l, f) {
          return e.kind === "constant" ? e.value : e.evaluate(n, o, u, l, f);
        }
      }
      class Wa {
        constructor(e) {
          this.specification = e;
        }
        possiblyEvaluate(e, n, o, u) {
          return !!e.expression.evaluate(n, null, {}, o, u);
        }
        interpolate() {
          return !1;
        }
      }
      class Bn {
        constructor(e) {
          this.properties = e, this.defaultPropertyValues = {}, this.defaultTransitionablePropertyValues = {}, this.defaultTransitioningPropertyValues = {}, this.defaultPossiblyEvaluatedValues = {}, this.overridableProperties = [];
          const n = new Tn(0, {});
          for (const o in e) {
            const u = e[o];
            u.specification.overridable && this.overridableProperties.push(o);
            const l = this.defaultPropertyValues[o] = new ac(u, void 0), f = this.defaultTransitionablePropertyValues[o] = new lu(u);
            this.defaultTransitioningPropertyValues[o] = f.untransitioned(), this.defaultPossiblyEvaluatedValues[o] = l.possiblyEvaluate(n);
          }
        }
      }
      Ft(Dt, "DataDrivenProperty"), Ft(yt, "DataConstantProperty"), Ft(Wa, "ColorRampProperty");
      var $e = JSON.parse('{"$version":8,"$root":{"version":{"required":true,"type":"enum","values":[8]},"fragment":{"type":"boolean"},"name":{"type":"string"},"metadata":{"type":"*"},"center":{"type":"array","value":"number"},"zoom":{"type":"number"},"bearing":{"type":"number","default":0,"period":360},"pitch":{"type":"number","default":0},"light":{"type":"light"},"lights":{"required":false,"type":"array","value":"light-3d"},"terrain":{"type":"terrain","optional":true},"fog":{"type":"fog"},"snow":{"type":"snow","experimental":true},"rain":{"type":"rain","experimental":true},"camera":{"type":"camera"},"color-theme":{"type":"colorTheme"},"indoor":{"type":"indoor","experimental":true},"imports":{"type":"array","value":"import"},"schema":{"type":"schema"},"sources":{"required":true,"type":"sources"},"sprite":{"type":"string"},"glyphs":{"type":"string","default":"mapbox://fonts/mapbox/{fontstack}/{range}.pbf"},"transition":{"type":"transition"},"projection":{"type":"projection"},"layers":{"required":true,"type":"array","value":"layer"},"models":{"type":"models"},"featuresets":{"experimental":true,"type":"featuresets"}},"featuresets":{"experimental":true,"*":{"type":"featureset"}},"featureset":{"experimental":true,"metadata":{"type":"*"},"selectors":{"type":"array","value":"selector"}},"selector":{"experimental":true,"layer":{"type":"string","required":true},"properties":{"type":"selectorProperty","required":false},"featureNamespace":{"type":"string","required":false}},"selectorProperty":{"experimental":true,"*":{"type":"*"}},"model":{"type":"string","required":true},"import":{"id":{"type":"string","required":true},"url":{"type":"string","required":true},"config":{"type":"config"},"data":{"type":"$root"},"color-theme":{"type":"colorTheme","optional":true}},"config":{"*":{"type":"*"}},"schema":{"*":{"type":"option"}},"option":{"default":{"type":"*","property-type":"data-constant","expression":{},"required":true},"type":{"type":"enum","values":{"string":1,"number":1,"boolean":1,"color":1}},"array":{"type":"boolean"},"minValue":{"type":"number"},"maxValue":{"type":"number"},"stepValue":{"type":"number"},"values":{"type":"array","value":"*"},"metadata":{"type":"*"}},"models":{"*":{"type":"model"}},"light-3d":{"id":{"type":"string","required":true},"properties":{"type":"properties"},"type":{"type":"enum","values":{"ambient":{},"directional":{},"flat":{}}}},"properties":["properties_light_directional","properties_light_ambient","properties_light_flat"],"properties_light_directional":{"direction":{"type":"array","default":[210,30],"minimum":[0,0],"maximum":[360,90],"length":2,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":0.5,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"cast-shadows":{"type":"boolean","default":false,"property-type":"data-constant"},"shadow-quality":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1,"expression":{"parameters":["zoom"]},"experimental":true},"shadow-intensity":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"properties_light_ambient":{"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":0.5,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"properties_light_flat":{"anchor":{"type":"enum","default":"viewport","values":{"map":1,"viewport":1},"property-type":"data-constant","expression":{"parameters":["zoom"]}},"position":{"type":"array","default":[1.15,210,30],"length":3,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":0.5,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"sources":{"*":{"type":"source"}},"source":["source_vector","source_raster","source_raster_dem","source_raster_array","source_geojson","source_video","source_image","source_model"],"source_vector":{"type":{"required":true,"type":"enum","values":{"vector":1}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"scheme":{"type":"enum","values":{"xyz":1,"tms":1},"default":"xyz"},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"attribution":{"type":"string"},"promoteId":{"type":"promoteId"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_raster":{"type":{"required":true,"type":"enum","values":{"raster":1}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"tileSize":{"type":"number","default":512},"scheme":{"type":"enum","values":{"xyz":1,"tms":1},"default":"xyz"},"attribution":{"type":"string"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_raster_dem":{"type":{"required":true,"type":"enum","values":{"raster-dem":1}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"tileSize":{"type":"number","default":512},"attribution":{"type":"string"},"encoding":{"type":"enum","values":{"terrarium":1,"mapbox":1},"default":"mapbox"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_raster_array":{"experimental":true,"type":{"required":true,"type":"enum","values":{"raster-array":1}},"url":{"type":"string"},"tiles":{"type":"array","value":"string"},"bounds":{"type":"array","value":"number","length":4,"default":[-180,-85.051129,180,85.051129]},"minzoom":{"type":"number","default":0},"maxzoom":{"type":"number","default":22},"tileSize":{"type":"number","default":512},"attribution":{"type":"string"},"rasterLayers":{"type":"*"},"volatile":{"type":"boolean","default":false},"*":{"type":"*"}},"source_geojson":{"type":{"required":true,"type":"enum","values":{"geojson":1}},"data":{"type":"*"},"maxzoom":{"type":"number","default":18},"minzoom":{"type":"number","default":0},"attribution":{"type":"string"},"buffer":{"type":"number","default":128,"maximum":512,"minimum":0},"filter":{"type":"*"},"tolerance":{"type":"number","default":0.375},"cluster":{"type":"boolean","default":false},"clusterRadius":{"type":"number","default":50,"minimum":0},"clusterMaxZoom":{"type":"number"},"clusterMinPoints":{"type":"number"},"clusterProperties":{"type":"*"},"lineMetrics":{"type":"boolean","default":false},"generateId":{"type":"boolean","default":false},"promoteId":{"type":"promoteId"},"dynamic":{"type":"boolean","default":false}},"source_video":{"type":{"required":true,"type":"enum","values":{"video":1}},"urls":{"required":true,"type":"array","value":"string"},"coordinates":{"required":true,"type":"array","length":4,"value":{"type":"array","length":2,"value":"number"}}},"source_image":{"type":{"required":true,"type":"enum","values":{"image":1}},"url":{"required":false,"type":"string"},"coordinates":{"required":true,"type":"array","length":4,"value":{"type":"array","length":2,"value":"number"}}},"source_model":{"type":{"required":true,"type":"enum","values":{"model":1,"batched-model":1}},"maxzoom":{"type":"number","default":18},"minzoom":{"type":"number","default":0},"tiles":{"type":"array","value":"string"}},"layer":{"id":{"type":"string","required":true},"type":{"type":"enum","values":{"fill":{},"line":{},"symbol":{},"circle":{},"heatmap":{},"fill-extrusion":{},"raster":{},"raster-particle":{"experimental":true},"hillshade":{},"model":{"experimental":true},"background":{},"sky":{},"slot":{},"clip":{}},"required":true},"metadata":{"type":"*"},"source":{"type":"string"},"source-layer":{"type":"string"},"slot":{"type":"string"},"minzoom":{"type":"number","minimum":0,"maximum":24},"maxzoom":{"type":"number","minimum":0,"maximum":24},"filter":{"type":"filter"},"layout":{"type":"layout"},"paint":{"type":"paint"}},"layout":["layout_clip","layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_raster-particle","layout_hillshade","layout_background","layout_sky","layout_model"],"layout_background":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_sky":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_model":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"},"model-id":{"type":"string","default":"","property-type":"data-driven","expression":{"parameters":["zoom","feature"]}}},"layout_clip":{"clip-layer-types":{"type":"array","value":"enum","values":{"model":1,"symbol":1},"default":[],"expression":{},"property-type":"data-constant"},"clip-layer-scope":{"type":"array","value":"string","default":[],"expression":{},"property-type":"data-constant"}},"layout_fill":{"fill-sort-key":{"type":"number","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"},"fill-elevation-reference":{"type":"enum","values":{"none":1,"hd-road-base":1,"hd-road-markup":1},"default":"none","experimental":true,"private":true,"expression":{},"property-type":"data-constant"}},"layout_circle":{"circle-sort-key":{"type":"number","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_heatmap":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_fill-extrusion":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"},"fill-extrusion-edge-radius":{"type":"number","experimental":true,"default":0,"minimum":0,"maximum":1,"expression":{},"property-type":"constant"}},"layout_line":{"line-cap":{"type":"enum","values":{"butt":1,"round":1,"square":1},"default":"butt","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-join":{"type":"enum","values":{"bevel":1,"round":1,"miter":1,"none":1},"default":"miter","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{"type":"number","default":2,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"line-round-limit":{"type":"number","default":1.05,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"line-sort-key":{"type":"number","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-z-offset":{"type":"number","experimental":true,"default":0,"expression":{"parameters":["zoom","feature","line-progress"]},"property-type":"data-driven"},"line-elevation-reference":{"type":"enum","values":{"none":1,"sea":1,"ground":1,"hd-road-markup":1},"default":"none","experimental":true,"expression":{},"property-type":"data-constant"},"line-cross-slope":{"type":"number","experimental":true,"expression":{},"property-type":"constant"},"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"},"line-width-unit":{"type":"enum","values":{"pixels":1,"meters":1},"default":"pixels","experimental":true,"private":true,"expression":{"parameters":["zoom"]},"property-type":"data-constant"}},"layout_symbol":{"symbol-placement":{"type":"enum","values":{"point":1,"line":1,"line-center":1},"default":"point","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"symbol-spacing":{"type":"number","default":250,"minimum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{"type":"number","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{"type":"enum","values":{"auto":1,"viewport-y":1,"source":1},"default":"auto","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"symbol-z-elevate":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"symbol-elevation-reference":{"type":"enum","values":{"sea":1,"ground":1,"hd-road-markup":1},"default":"ground","experimental":true,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-optional":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{"type":"enum","values":{"map":1,"viewport":1,"auto":1},"default":"auto","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-size":{"type":"number","default":1,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-size-scale-range":{"type":"array","value":"number","length":2,"default":[0.8,2],"minimum":0.1,"maximum":10,"experimental":true,"private":true,"expression":{},"property-type":"data-constant"},"icon-text-fit":{"type":"enum","values":{"none":1,"width":1,"height":1,"both":1},"default":"none","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit-padding":{"type":"array","value":"number","length":4,"default":[0,0,0,0],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-image":{"type":"resolvedImage","tokens":true,"expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{"type":"number","default":0,"period":360,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{"type":"number","default":2,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-offset":{"type":"array","value":"number","length":2,"default":[0,0],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{"type":"enum","values":{"center":1,"left":1,"right":1,"top":1,"bottom":1,"top-left":1,"top-right":1,"bottom-left":1,"bottom-right":1},"default":"center","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{"type":"enum","values":{"map":1,"viewport":1,"auto":1},"default":"auto","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{"type":"enum","values":{"map":1,"viewport":1,"auto":1},"default":"auto","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{"type":"enum","values":{"map":1,"viewport":1,"auto":1},"default":"auto","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-field":{"type":"formatted","default":"","tokens":true,"expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-font":{"type":"array","value":"string","default":["Open Sans Regular","Arial Unicode MS Regular"],"expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-size":{"type":"number","default":16,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-size-scale-range":{"type":"array","value":"number","length":2,"default":[0.8,2],"minimum":0.1,"maximum":10,"experimental":true,"private":true,"expression":{},"property-type":"data-constant"},"text-max-width":{"type":"number","default":10,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{"type":"number","default":1.2,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{"type":"number","default":0,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-justify":{"type":"enum","values":{"auto":1,"left":1,"center":1,"right":1},"default":"center","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{"type":"number","default":0,"property-type":"data-driven","expression":{"interpolated":true,"parameters":["zoom","feature"]}},"text-variable-anchor":{"type":"array","value":"enum","values":{"center":1,"left":1,"right":1,"top":1,"bottom":1,"top-left":1,"top-right":1,"bottom-left":1,"bottom-right":1},"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-anchor":{"type":"enum","values":{"center":1,"left":1,"right":1,"top":1,"bottom":1,"top-left":1,"top-right":1,"bottom-left":1,"bottom-right":1},"default":"center","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{"type":"number","default":45,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"text-writing-mode":{"type":"array","value":"enum","values":{"horizontal":1,"vertical":1},"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-rotate":{"type":"number","default":0,"period":360,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-padding":{"type":"number","default":2,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"text-keep-upright":{"type":"boolean","default":true,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-transform":{"type":"enum","values":{"none":1,"uppercase":1,"lowercase":1},"default":"none","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-offset":{"type":"array","value":"number","length":2,"default":[0,0],"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"text-optional":{"type":"boolean","default":false,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_raster":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_raster-particle":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"layout_hillshade":{"visibility":{"type":"enum","values":{"visible":1,"none":1},"default":"visible","expression":{},"property-type":"constant"}},"filter":{"type":"array","value":"*"},"filter_symbol":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature","pitch","distance-from-center"]}},"filter_fill":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_hillshade":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_raster":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_raster-particle":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_clip":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_model":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_line":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_circle":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_fill-extrusion":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_heatmap":{"type":"boolean","default":false,"property-type":"data-driven","expression":{"parameters":["zoom","feature"]}},"filter_operator":{"type":"enum","values":{"==":1,"!=":1,">":1,">=":1,"<":1,"<=":1,"in":1,"!in":1,"all":1,"any":1,"none":1,"has":1,"!has":1}},"geometry_type":{"type":"enum","values":{"Point":1,"LineString":1,"Polygon":1}},"function":{"expression":{"type":"expression"},"stops":{"type":"array","value":"function_stop"},"base":{"type":"number","default":1,"minimum":0},"property":{"type":"string","default":"$zoom"},"type":{"type":"enum","values":{"identity":1,"exponential":1,"interval":1,"categorical":1},"default":"exponential"},"colorSpace":{"type":"enum","values":{"rgb":1,"lab":1,"hcl":1},"default":"rgb"},"default":{"type":"*","required":false}},"function_stop":{"type":"array","minimum":0,"maximum":24,"value":["number","color"],"length":2},"expression":{"type":"array","value":"*","minimum":1},"fog":{"range":{"type":"array","default":[0.5,10],"minimum":-20,"maximum":20,"length":2,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true}},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"high-color":{"type":"color","property-type":"data-constant","default":"#245cdf","expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"space-color":{"type":"color","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"horizon-blend":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],4,0.2,7,0.1],"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"star-intensity":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],5,0.35,6,0],"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"vertical-range":{"type":"array","default":[0,0],"minimum":0,"length":2,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true}}},"snow":{"density":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],11,0,13,0.85],"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"opacity":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"vignette":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],11,0,13,0.3],"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"vignette-color":{"type":"color","property-type":"data-constant","default":"#ffffff","experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"center-thinning":{"type":"number","property-type":"data-constant","default":0.4,"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"direction":{"type":"array","default":[0,50],"minimum":0,"maximum":360,"length":2,"value":"number","property-type":"data-constant","transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true}},"flake-size":{"type":"number","property-type":"data-constant","default":0.71,"minimum":0,"maximum":5,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true}},"rain":{"density":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],11,0,13,0.5],"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"color":{"type":"color","property-type":"data-constant","default":["interpolate",["linear"],["measure-light","brightness"],0,"#03113d",0.3,"#a8adbc"],"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"opacity":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["measure-light","brightness"],0,0.88,1,0.7],"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"vignette":{"type":"number","property-type":"data-constant","default":["interpolate",["linear"],["zoom"],11,0,13,1],"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"vignette-color":{"type":"color","property-type":"data-constant","default":["interpolate",["linear"],["measure-light","brightness"],0,"#001736",0.3,"#464646"],"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"center-thinning":{"type":"number","property-type":"data-constant","default":0.57,"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true},"direction":{"type":"array","default":[0,80],"minimum":0,"maximum":360,"length":2,"value":"number","property-type":"data-constant","transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true}},"droplet-size":{"type":"array","default":[2.6,18.2],"minimum":0,"maximum":50,"length":2,"value":"number","property-type":"data-constant","transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true}},"distortion-strength":{"type":"number","property-type":"data-constant","default":0.7,"minimum":0,"maximum":1,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"],"relaxZoomRestriction":true},"transition":true}},"camera":{"camera-projection":{"type":"enum","values":{"perspective":1,"orthographic":1},"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"default":"perspective","property-type":"data-constant"}},"colorTheme":{"data":{"type":"string","property-type":"data-constant","expression":{}}},"indoor":{"floorplanFeaturesetId":{"type":"string","experimental":true,"property-type":"data-constant","expression":{}},"buildingFeaturesetId":{"type":"string","experimental":true,"property-type":"data-constant","expression":{}}},"light":{"anchor":{"type":"enum","default":"viewport","values":{"map":1,"viewport":1},"property-type":"data-constant","expression":{"parameters":["zoom"]}},"position":{"type":"array","default":[1.15,210,30],"length":3,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"color":{"type":"color","property-type":"data-constant","default":"#ffffff","expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"intensity":{"type":"number","property-type":"data-constant","default":0.5,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"projection":{"name":{"type":"enum","values":{"albers":1,"equalEarth":1,"equirectangular":1,"lambertConformalConic":1,"mercator":1,"naturalEarth":1,"winkelTripel":1,"globe":1},"default":"mercator","required":true},"center":{"type":"array","length":2,"value":"number","property-type":"data-constant","minimum":[-180,-90],"maximum":[180,90]},"parallels":{"type":"array","length":2,"value":"number","property-type":"data-constant","minimum":[-90,-90],"maximum":[90,90]}},"terrain":{"source":{"type":"string","required":true},"exaggeration":{"type":"number","property-type":"data-constant","default":1,"minimum":0,"maximum":1000,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true}},"paint":["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_raster-particle","paint_hillshade","paint_background","paint_sky","paint_model"],"paint_fill":{"fill-antialias":{"type":"boolean","default":true,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"fill-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"fill-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"fill-outline-color":{"type":"color","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"fill-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"fill-pattern":{"type":"resolvedImage","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"fill-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"fill-z-offset":{"type":"number","default":0,"minimum":0,"transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"fill-extrusion-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{"type":"resolvedImage","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-height-alignment":{"type":"enum","experimental":true,"values":{"terrain":1,"flat":1},"default":"flat","property-type":"data-constant"},"fill-extrusion-base-alignment":{"type":"enum","experimental":true,"values":{"terrain":1,"flat":1},"default":"terrain","property-type":"data-constant"},"fill-extrusion-vertical-gradient":{"type":"boolean","default":true,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant","type":"number","default":0,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant","type":"number","default":3,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"fill-extrusion-ambient-occlusion-wall-radius":{"property-type":"data-constant","type":"number","experimental":true,"default":3,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"fill-extrusion-ambient-occlusion-ground-radius":{"property-type":"data-constant","type":"number","experimental":true,"default":3,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true},"fill-extrusion-ambient-occlusion-ground-attenuation":{"property-type":"data-constant","type":"number","experimental":true,"default":0.69,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"fill-extrusion-flood-light-color":{"property-type":"data-constant","type":"color","experimental":true,"default":"#ffffff","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]}},"fill-extrusion-flood-light-intensity":{"property-type":"data-constant","type":"number","experimental":true,"default":0,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]}},"fill-extrusion-flood-light-wall-radius":{"property-type":"data-driven","type":"number","experimental":true,"default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["feature","feature-state"]}},"fill-extrusion-flood-light-ground-radius":{"property-type":"data-driven","type":"number","experimental":true,"default":0,"transition":true,"expression":{"interpolated":true,"parameters":["feature","feature-state"]}},"fill-extrusion-flood-light-ground-attenuation":{"property-type":"data-constant","type":"number","experimental":true,"default":0.69,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"fill-extrusion-vertical-scale":{"property-type":"data-constant","type":"number","experimental":true,"default":1,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"fill-extrusion-rounded-roof":{"property-type":"data-constant","type":"boolean","default":true,"experimental":true,"expression":{"parameters":["zoom"]}},"fill-extrusion-cutoff-fade-range":{"type":"number","default":0,"minimum":0,"maximum":1,"expression":{},"property-type":"data-constant"},"fill-extrusion-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light","feature-state"]},"property-type":"data-driven"},"fill-extrusion-line-width":{"type":"number","default":0,"minimum":0,"transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"fill-extrusion-cast-shadows":{"type":"boolean","default":true,"property-type":"data-constant"}},"paint_line":{"line-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"line-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"line-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"line-width":{"type":"number","default":1,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light","line-progress"]},"property-type":"data-driven"},"line-gap-width":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"line-offset":{"type":"number","default":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"line-blur":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"line-dasharray":{"type":"array","value":"number","minimum":0,"expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{"type":"resolvedImage","expression":{"parameters":["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{"type":"color","expression":{"interpolated":true,"parameters":["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{"type":"array","value":"number","length":2,"default":[0,0],"minimum":[0,0],"maximum":[1,1],"property-type":"constant"},"line-trim-fade-range":{"type":"array","value":"number","experimental":true,"length":2,"default":[0,0],"minimum":[0,0],"maximum":[1,1],"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"line-trim-color":{"type":"color","experimental":true,"default":"transparent","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"line-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"line-border-width":{"type":"number","private":true,"default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-border-color":{"type":"color","private":true,"default":"rgba(0, 0, 0, 0)","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-occlusion-opacity":{"type":"number","default":0,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"transition":true,"property-type":"data-constant"}},"paint_circle":{"circle-radius":{"type":"number","default":5,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-blur":{"type":"number","default":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{"type":"enum","values":{"map":1,"viewport":1},"default":"viewport","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-stroke-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-stroke-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"circle-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"}},"paint_heatmap":{"heatmap-radius":{"type":"number","default":30,"minimum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"heatmap-weight":{"type":"number","default":1,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"heatmap-intensity":{"type":"number","default":1,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"heatmap-color":{"type":"color","default":["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",0.1,"royalblue",0.3,"cyan",0.5,"lime",0.7,"yellow",1,"red"],"expression":{"interpolated":true,"parameters":["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_symbol":{"icon-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"icon-occlusion-opacity":{"type":"number","minimum":0,"maximum":1,"default":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"icon-emissive-strength":{"type":"number","default":1,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light","feature-state"]},"property-type":"data-driven"},"text-emissive-strength":{"type":"number","default":1,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light","feature-state"]},"property-type":"data-driven"},"icon-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"icon-halo-color":{"type":"color","default":"rgba(0, 0, 0, 0)","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"icon-halo-width":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"icon-halo-blur":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"icon-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-image-cross-fade":{"type":"number","property-type":"data-driven","default":0,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"transition":true},"text-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"text-occlusion-opacity":{"type":"number","minimum":0,"maximum":1,"default":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"text-color":{"type":"color","default":"#000000","transition":true,"overridable":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"text-halo-color":{"type":"color","default":"rgba(0, 0, 0, 0)","transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"text-halo-width":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"text-halo-blur":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","feature","feature-state","measure-light"]},"property-type":"data-driven"},"text-translate":{"type":"array","value":"number","length":2,"default":[0,0],"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"icon-color-saturation":{"type":"number","default":0,"minimum":-1,"maximum":1,"expression":{},"property-type":"data-constant"},"icon-color-contrast":{"type":"number","default":0,"minimum":-1,"maximum":1,"expression":{},"property-type":"data-constant"},"icon-color-brightness-min":{"type":"number","default":0,"minimum":0,"maximum":1,"expression":{},"property-type":"data-constant"},"icon-color-brightness-max":{"type":"number","default":1,"minimum":0,"maximum":1,"expression":{},"property-type":"data-constant"},"symbol-z-offset":{"type":"number","default":0,"minimum":0,"transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom","feature"]},"property-type":"data-driven"}},"paint_raster":{"raster-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-color":{"type":"color","expression":{"interpolated":true,"parameters":["raster-value"]},"property-type":"color-ramp"},"raster-color-mix":{"type":"array","default":[0.2126,0.7152,0.0722,0],"length":4,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"raster-color-range":{"type":"array","length":2,"value":"number","property-type":"data-constant","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]}},"raster-hue-rotate":{"type":"number","default":0,"period":360,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{"type":"number","default":0,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-saturation":{"type":"number","default":0,"minimum":-1,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-contrast":{"type":"number","default":0,"minimum":-1,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-resampling":{"type":"enum","values":{"linear":1,"nearest":1},"default":"linear","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{"type":"number","default":300,"minimum":0,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"raster-array-band":{"type":"string","required":false,"experimental":true,"property-type":"data-constant"},"raster-elevation":{"type":"number","default":0,"minimum":0,"transition":true,"experimental":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_raster-particle":{"raster-particle-array-band":{"type":"string","required":false,"property-type":"data-constant"},"raster-particle-count":{"type":"number","default":512,"minimum":1,"property-type":"data-constant"},"raster-particle-color":{"type":"color","expression":{"interpolated":true,"parameters":["raster-particle-speed"]},"property-type":"color-ramp"},"raster-particle-max-speed":{"type":"number","default":1,"minimum":1,"property-type":"data-constant"},"raster-particle-speed-factor":{"type":"number","default":0.2,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-particle-fade-opacity-factor":{"type":"number","default":0.98,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"raster-particle-reset-rate-factor":{"type":"number","default":0.8,"minimum":0,"maximum":1,"property-type":"data-constant"},"raster-particle-elevation":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_hillshade":{"hillshade-illumination-direction":{"type":"number","default":335,"minimum":0,"maximum":359,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{"type":"enum","values":{"map":1,"viewport":1},"default":"viewport","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{"type":"number","default":0.5,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"hillshade-highlight-color":{"type":"color","default":"#FFFFFF","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"hillshade-accent-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"},"hillshade-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"}},"paint_background":{"background-pitch-alignment":{"type":"enum","values":{"map":1,"viewport":1},"default":"map","expression":{"parameters":[]},"experimental":true,"property-type":"data-constant"},"background-color":{"type":"color","default":"#000000","transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"background-pattern":{"type":"resolvedImage","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"background-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"},"background-emissive-strength":{"type":"number","default":0,"minimum":0,"transition":true,"expression":{"interpolated":true,"parameters":["zoom","measure-light"]},"property-type":"data-constant"}},"paint_sky":{"sky-type":{"type":"enum","values":{"gradient":1,"atmosphere":1},"default":"atmosphere","expression":{"parameters":["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{"type":"array","value":"number","length":2,"minimum":[0,0],"maximum":[360,180],"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{"type":"number","default":10,"minimum":0,"maximum":100,"property-type":"data-constant"},"sky-gradient-center":{"type":"array","value":"number","default":[0,0],"length":2,"minimum":[0,0],"maximum":[360,180],"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{"type":"number","default":90,"minimum":0,"maximum":180,"expression":{"parameters":["zoom"]},"property-type":"data-constant"},"sky-gradient":{"type":"color","default":["interpolate",["linear"],["sky-radial-progress"],0.8,"#87ceeb",1,"white"],"expression":{"interpolated":true,"parameters":["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{"type":"color","default":"white","property-type":"data-constant"},"sky-atmosphere-color":{"type":"color","default":"white","property-type":"data-constant"},"sky-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant"}},"paint_model":{"model-opacity":{"type":"number","default":1,"minimum":0,"maximum":1,"transition":true,"expression":{"interpolated":true,"parameters":["feature","feature-state","zoom"]},"property-type":"data-driven"},"model-rotation":{"type":"array","value":"number","length":3,"default":[0,0,0],"period":360,"property-type":"data-driven","expression":{"interpolated":true,"parameters":["feature","feature-state","zoom"]},"transition":true},"model-scale":{"type":"array","value":"number","length":3,"default":[1,1,1],"property-type":"data-driven","expression":{"interpolated":true,"parameters":["feature","feature-state","zoom"]},"transition":true},"model-translation":{"type":"array","value":"number","length":3,"default":[0,0,0],"property-type":"data-driven","expression":{"interpolated":true,"parameters":["feature","feature-state","zoom"]},"transition":true},"model-color":{"type":"color","default":"#ffffff","property-type":"data-driven","expression":{"interpolated":true,"parameters":["feature","feature-state","measure-light","zoom"]},"transition":true},"model-color-mix-intensity":{"type":"number","property-type":"data-driven","default":0,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["feature","feature-state","measure-light"]},"transition":true},"model-type":{"type":"enum","values":{"common-3d":1,"location-indicator":1},"default":"common-3d","property-type":"data-constant"},"model-cast-shadows":{"type":"boolean","default":true,"property-type":"data-constant"},"model-receive-shadows":{"type":"boolean","default":true,"property-type":"data-constant"},"model-ambient-occlusion-intensity":{"type":"number","default":1,"minimum":0,"maximum":1,"expression":{"interpolated":true,"parameters":["zoom"]},"property-type":"data-constant","transition":true},"model-emissive-strength":{"type":"number","property-type":"data-driven","default":0,"minimum":0,"maximum":5,"expression":{"interpolated":true,"parameters":["feature","feature-state","measure-light"]},"transition":true},"model-roughness":{"type":"number","default":1,"minimum":0,"maximum":1,"property-type":"data-driven","expression":{"interpolated":true,"parameters":["feature","feature-state"]},"transition":true},"model-height-based-emissive-strength-multiplier":{"type":"array","default":[1,1,1,1,0],"length":5,"value":"number","property-type":"data-driven","expression":{"interpolated":true,"parameters":["feature","feature-state","measure-light"]},"transition":true},"model-cutoff-fade-range":{"type":"number","default":0,"minimum":0,"maximum":1,"expression":{},"property-type":"data-constant"},"model-front-cutoff":{"type":"array","private":true,"value":"number","property-type":"data-constant","expression":{"interpolated":true,"parameters":["zoom"]},"length":3,"default":[0,0,1],"minimum":[0,0,0],"maximum":[1,1,1]}},"transition":{"duration":{"type":"number","default":300,"minimum":0},"delay":{"type":"number","default":0,"minimum":0}},"property-type":{"data-driven":{"type":"property-type"},"color-ramp":{"type":"property-type"},"data-constant":{"type":"property-type"},"constant":{"type":"property-type"}},"promoteId":{"*":{"type":"string"}}}');
      function ip(r) {
        return r instanceof Number || r instanceof String || r instanceof Boolean ? r.valueOf() : r;
      }
      function cu(r) {
        if (Array.isArray(r))
          return r.map(cu);
        if (r instanceof Object && !(r instanceof Number || r instanceof String || r instanceof Boolean)) {
          const e = {};
          for (const n in r)
            e[n] = cu(r[n]);
          return e;
        }
        return ip(r);
      }
      function bd(r) {
        if (r === !0 || r === !1)
          return !0;
        if (!Array.isArray(r) || r.length === 0)
          return !1;
        switch (r[0]) {
          case "has":
            return r.length >= 2 && r[1] !== "$id" && r[1] !== "$type";
          case "in":
            return r.length >= 3 && (typeof r[1] != "string" || Array.isArray(r[2]));
          case "!in":
          case "!has":
          case "none":
            return !1;
          case "==":
          case "!=":
          case ">":
          case ">=":
          case "<":
          case "<=":
            return r.length !== 3 || Array.isArray(r[1]) || Array.isArray(r[2]);
          case "any":
          case "all":
            for (const e of r.slice(1))
              if (!bd(e) && typeof e != "boolean")
                return !1;
            return !0;
          default:
            return !0;
        }
      }
      function np(r, e = "", n = null, o = "fill") {
        if (r == null)
          return { filter: () => !0, needGeometry: !1, needFeature: !1 };
        bd(r) || (r = nh(r));
        const u = r;
        let l = !0;
        try {
          l = function(x) {
            if (!hc(x))
              return x;
            let P = cu(x);
            return rp(P), P = sp(P), P;
          }(u);
        } catch {
          console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.
This is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md
and paste the contents of this message in the report.
Thank you!
Filter Expression:
${JSON.stringify(u, null, 2)}
        `);
        }
        let f = null, v = null;
        if (o !== "background" && o !== "sky" && o !== "slot") {
          v = $e[`filter_${o}`];
          const x = Qc(l, v, e, n);
          if (x.result === "error")
            throw new Error(x.value.map((P) => `${P.key}: ${P.message}`).join(", "));
          f = (P, I, M) => x.value.evaluate(P, I, {}, M);
        }
        let S = null, D = null;
        if (l !== u) {
          const x = Qc(u, v, e, n);
          if (x.result === "error")
            throw new Error(x.value.map((P) => `${P.key}: ${P.message}`).join(", "));
          S = (P, I, M, C, k) => x.value.evaluate(P, I, {}, M, void 0, void 0, C, k), D = !ro(x.value.expression);
        }
        return { filter: f, dynamicFilter: S || void 0, needGeometry: Sl(l), needFeature: !!D };
      }
      function sp(r) {
        if (!Array.isArray(r))
          return r;
        const e = function(n) {
          if (t_.has(n[0])) {
            for (let o = 1; o < n.length; o++)
              if (hc(n[o]))
                return !0;
          }
          return n;
        }(r);
        return e === !0 ? e : e.map((n) => sp(n));
      }
      function rp(r) {
        let e = !1;
        const n = [];
        if (r[0] === "case") {
          for (let o = 1; o < r.length - 1; o += 2)
            e = e || hc(r[o]), n.push(r[o + 1]);
          n.push(r[r.length - 1]);
        } else if (r[0] === "match") {
          e = e || hc(r[1]);
          for (let o = 2; o < r.length - 1; o += 2)
            n.push(r[o + 1]);
          n.push(r[r.length - 1]);
        } else if (r[0] === "step") {
          e = e || hc(r[1]);
          for (let o = 1; o < r.length - 1; o += 2)
            n.push(r[o + 1]);
        }
        e && (r.length = 0, r.push("any", ...n));
        for (let o = 1; o < r.length; o++)
          rp(r[o]);
      }
      function hc(r) {
        if (!Array.isArray(r))
          return !1;
        if ((e = r[0]) === "pitch" || e === "distance-from-center")
          return !0;
        var e;
        for (let n = 1; n < r.length; n++)
          if (hc(r[n]))
            return !0;
        return !1;
      }
      const t_ = /* @__PURE__ */ new Set(["in", "==", "!=", ">", ">=", "<", "<=", "to-boolean"]);
      function i_(r, e) {
        return r < e ? -1 : r > e ? 1 : 0;
      }
      function Sl(r) {
        if (!Array.isArray(r))
          return !1;
        if (r[0] === "within" || r[0] === "distance")
          return !0;
        for (let e = 1; e < r.length; e++)
          if (Sl(r[e]))
            return !0;
        return !1;
      }
      function nh(r) {
        if (!r)
          return !0;
        const e = r[0];
        return r.length <= 1 ? e !== "any" : e === "==" ? hu(r[1], r[2], "==") : e === "!=" ? uu(hu(r[1], r[2], "==")) : e === "<" || e === ">" || e === "<=" || e === ">=" ? hu(r[1], r[2], e) : e === "any" ? (n = r.slice(1), ["any"].concat(n.map(nh))) : e === "all" ? ["all"].concat(r.slice(1).map(nh)) : e === "none" ? ["all"].concat(r.slice(1).map(nh).map(uu)) : e === "in" ? sh(r[1], r.slice(2)) : e === "!in" ? uu(sh(r[1], r.slice(2))) : e === "has" ? op(r[1]) : e !== "!has" || uu(op(r[1]));
        var n;
      }
      function hu(r, e, n) {
        switch (r) {
          case "$type":
            return [`filter-type-${n}`, e];
          case "$id":
            return [`filter-id-${n}`, e];
          default:
            return [`filter-${n}`, r, e];
        }
      }
      function sh(r, e) {
        if (e.length === 0)
          return !1;
        switch (r) {
          case "$type":
            return ["filter-type-in", ["literal", e]];
          case "$id":
            return ["filter-id-in", ["literal", e]];
          default:
            return e.length > 200 && !e.some((n) => typeof n != typeof e[0]) ? ["filter-in-large", r, ["literal", e.sort(i_)]] : ["filter-in-small", r, ["literal", e]];
        }
      }
      function op(r) {
        switch (r) {
          case "$type":
            return !0;
          case "$id":
            return ["filter-has-id"];
          default:
            return ["filter-has", r];
        }
      }
      function uu(r) {
        return ["!", r];
      }
      const Co = "";
      function Io(r, e) {
        return e ? `${r}${Co}${e}` : r;
      }
      const El = "-transition", n_ = /* @__PURE__ */ new Set(["fill", "line", "background", "hillshade", "raster"]);
      class wr extends Zo {
        constructor(e, n, o, u, l) {
          if (super(), this.id = e.id, this.fqid = Io(this.id, o), this.type = e.type, this.scope = o, this.lut = u, this.options = l, this._featureFilter = { filter: () => !0, needGeometry: !1, needFeature: !1 }, this._filterCompiled = !1, this.configDependencies = /* @__PURE__ */ new Set(), e.type !== "custom") {
            if (this.metadata = e.metadata, this.minzoom = e.minzoom, this.maxzoom = e.maxzoom, e.type && e.type !== "background" && e.type !== "sky" && e.type !== "slot") {
              this.source = e.source, this.sourceLayer = e["source-layer"], this.filter = e.filter;
              const f = Qc(this.filter, $e[`filter_${e.type}`]);
              f.result !== "error" && (this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...f.value.configDependencies]));
            }
            if (e.slot && (this.slot = e.slot), n.layout && (this._unevaluatedLayout = new e_(n.layout, this.scope, l), this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...this._unevaluatedLayout.configDependencies])), n.paint) {
              this._transitionablePaint = new ih(n.paint, this.scope, l);
              for (const f in e.paint)
                this.setPaintProperty(f, e.paint[f]);
              for (const f in e.layout)
                this.setLayoutProperty(f, e.layout[f]);
              this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...this._transitionablePaint.configDependencies]), this._transitioningPaint = this._transitionablePaint.untransitioned(), this.paint = new cc(n.paint);
            }
          }
        }
        onAdd(e) {
        }
        onRemove(e) {
        }
        isDraped(e) {
          return !this.is3D() && n_.has(this.type);
        }
        getLayoutProperty(e) {
          return e === "visibility" ? this.visibility : this._unevaluatedLayout.getValue(e);
        }
        setLayoutProperty(e, n) {
          if (this.type === "custom" && e === "visibility")
            return void (this.visibility = n);
          const o = this._unevaluatedLayout;
          o._properties.properties[e] && (o.setValue(e, n), this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...o.configDependencies]), e === "visibility" && this.possiblyEvaluateVisibility());
        }
        possiblyEvaluateVisibility() {
          this._unevaluatedLayout._values.visibility && (this.visibility = this._unevaluatedLayout._values.visibility.possiblyEvaluate({ zoom: 0 }));
        }
        getPaintProperty(e) {
          return yr(e, El) ? this._transitionablePaint.getTransition(e.slice(0, -11)) : this._transitionablePaint.getValue(e);
        }
        setPaintProperty(e, n) {
          const o = this._transitionablePaint, u = o._properties.properties;
          if (yr(e, El)) {
            const P = e.slice(0, -11);
            return u[P] && o.setTransition(P, n || void 0), !1;
          }
          if (!u[e])
            return !1;
          const l = o._values[e], f = l.value.isDataDriven(), v = l.value;
          o.setValue(e, n), this.configDependencies = /* @__PURE__ */ new Set([...this.configDependencies, ...o.configDependencies]), this._handleSpecialPaintPropertyUpdate(e);
          const S = o._values[e].value, D = S.isDataDriven(), x = yr(e, "pattern") || e === "line-dasharray";
          return D || f || x || this._handleOverridablePaintPropertyUpdate(e, v, S);
        }
        _handleSpecialPaintPropertyUpdate(e) {
        }
        getProgramIds() {
          return null;
        }
        getDefaultProgramParams(e, n, o) {
          return null;
        }
        _handleOverridablePaintPropertyUpdate(e, n, o) {
          return !1;
        }
        isHidden(e) {
          return !!(this.minzoom && e < this.minzoom) || !!(this.maxzoom && e >= this.maxzoom) || this.visibility === "none";
        }
        updateTransitions(e) {
          this._transitioningPaint = this._transitionablePaint.transitioned(e, this._transitioningPaint);
        }
        hasTransition() {
          return this._transitioningPaint.hasTransition();
        }
        recalculate(e, n) {
          this._unevaluatedLayout && (this.layout = this._unevaluatedLayout.possiblyEvaluate(e, void 0, n)), this.paint = this._transitioningPaint.possiblyEvaluate(e, void 0, n);
        }
        serialize() {
          return io({ id: this.id, type: this.type, slot: this.slot, source: this.source, "source-layer": this.sourceLayer, metadata: this.metadata, minzoom: this.minzoom, maxzoom: this.maxzoom, filter: this.filter, layout: this._unevaluatedLayout && this._unevaluatedLayout.serialize(), paint: this._transitionablePaint && this._transitionablePaint.serialize() }, (e, n) => !(e === void 0 || n === "layout" && !Object.keys(e).length || n === "paint" && !Object.keys(e).length));
        }
        is3D() {
          return !1;
        }
        isSky() {
          return !1;
        }
        isTileClipped() {
          return !1;
        }
        hasOffscreenPass() {
          return !1;
        }
        hasShadowPass() {
          return !1;
        }
        canCastShadows() {
          return !1;
        }
        hasLightBeamPass() {
          return !1;
        }
        cutoffRange() {
          return 0;
        }
        tileCoverLift() {
          return 0;
        }
        resize() {
        }
        isStateDependent() {
          for (const e in this.paint._values) {
            const n = this.paint.get(e);
            if (n instanceof lc && nc(n.property.specification) && (n.value.kind === "source" || n.value.kind === "composite") && n.value.isStateDependent)
              return !0;
          }
          return !1;
        }
        compileFilter(e) {
          this._filterCompiled || (this._featureFilter = np(this.filter, this.scope, e), this._filterCompiled = !0);
        }
        invalidateCompiledFilter() {
          this._filterCompiled = !1;
        }
        dynamicFilter() {
          return this._featureFilter.dynamicFilter;
        }
        dynamicFilterNeedsFeature() {
          return this._featureFilter.needFeature;
        }
        getLayerRenderingStats() {
          return this._stats;
        }
        resetLayerRenderingStats(e) {
          this._stats && (e.renderPass === "shadow" ? this._stats.numRenderedVerticesInShadowPass = 0 : this._stats.numRenderedVerticesInTransparentPass = 0);
        }
        queryRadius(e) {
        }
        queryIntersectsFeature(e, n, o, u, l, f, v, S, D) {
        }
      }
      const s_ = { Int8: Int8Array, Uint8: Uint8Array, Int16: Int16Array, Uint16: Uint16Array, Int32: Int32Array, Uint32: Uint32Array, Float32: Float32Array };
      class rh {
        constructor(e, n) {
          this._structArray = e, this._pos1 = n * this.size, this._pos2 = this._pos1 / 2, this._pos4 = this._pos1 / 4, this._pos8 = this._pos1 / 8;
        }
      }
      class bn {
        constructor() {
          this.isTransferred = !1, this.capacity = -1, this.resize(0);
        }
        static serialize(e, n) {
          return e._trim(), n && (e.isTransferred = !0, n.add(e.arrayBuffer)), { length: e.length, arrayBuffer: e.arrayBuffer };
        }
        static deserialize(e) {
          const n = Object.create(this.prototype);
          return n.arrayBuffer = e.arrayBuffer, n.length = e.length, n.capacity = e.arrayBuffer.byteLength / n.bytesPerElement, n._refreshViews(), n;
        }
        _trim() {
          this.length !== this.capacity && (this.capacity = this.length, this.arrayBuffer = this.arrayBuffer.slice(0, this.length * this.bytesPerElement), this._refreshViews());
        }
        clear() {
          this.length = 0;
        }
        resize(e) {
          this.reserve(e), this.length = e;
        }
        reserve(e) {
          if (e > this.capacity) {
            this.capacity = Math.max(e, Math.floor(5 * this.capacity), 128), this.arrayBuffer = new ArrayBuffer(this.capacity * this.bytesPerElement);
            const n = this.uint8;
            this._refreshViews(), n && this.uint8.set(n);
          }
        }
        _refreshViews() {
          throw new Error("StructArray#_refreshViews() must be implemented by each concrete StructArray layout");
        }
        emplace(...e) {
          throw new Error("StructArray#emplace() must be implemented by each concrete StructArray layout");
        }
        emplaceBack(...e) {
          throw new Error("StructArray#emplaceBack() must be implemented by each concrete StructArray layout");
        }
        destroy() {
          this.int8 = this.uint8 = this.int16 = this.uint16 = this.int32 = this.uint32 = this.float32 = null, this.arrayBuffer = null;
        }
      }
      function qi(r, e = 1) {
        let n = 0, o = 0;
        return { members: r.map((u) => {
          const l = s_[u.type].BYTES_PER_ELEMENT, f = n = du(n, Math.max(e, l)), v = u.components || 1;
          return o = Math.max(o, l), n += l * v, { name: u.name, type: u.type, components: v, offset: f };
        }), size: du(n, Math.max(o, e)), alignment: e };
      }
      function du(r, e) {
        return Math.ceil(r / e) * e;
      }
      class Lo extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n) {
          const o = this.length;
          return this.resize(o + 1), this.emplace(o, e, n);
        }
        emplace(e, n, o) {
          const u = 2 * e;
          return this.int16[u + 0] = n, this.int16[u + 1] = o, e;
        }
      }
      Lo.prototype.bytesPerElement = 4, Ft(Lo, "StructArrayLayout2i4");
      class oh extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o) {
          const u = this.length;
          return this.resize(u + 1), this.emplace(u, e, n, o);
        }
        emplace(e, n, o, u) {
          const l = 3 * e;
          return this.int16[l + 0] = n, this.int16[l + 1] = o, this.int16[l + 2] = u, e;
        }
      }
      oh.prototype.bytesPerElement = 6, Ft(oh, "StructArrayLayout3i6");
      class $a extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u) {
          const l = this.length;
          return this.resize(l + 1), this.emplace(l, e, n, o, u);
        }
        emplace(e, n, o, u, l) {
          const f = 4 * e;
          return this.int16[f + 0] = n, this.int16[f + 1] = o, this.int16[f + 2] = u, this.int16[f + 3] = l, e;
        }
      }
      $a.prototype.bytesPerElement = 8, Ft($a, "StructArrayLayout4i8");
      class wd extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l) {
          const f = this.length;
          return this.resize(f + 1), this.emplace(f, e, n, o, u, l);
        }
        emplace(e, n, o, u, l, f) {
          const v = 5 * e;
          return this.int16[v + 0] = n, this.int16[v + 1] = o, this.int16[v + 2] = u, this.int16[v + 3] = l, this.int16[v + 4] = f, e;
        }
      }
      wd.prototype.bytesPerElement = 10, Ft(wd, "StructArrayLayout5i10");
      class ho extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v) {
          const S = this.length;
          return this.resize(S + 1), this.emplace(S, e, n, o, u, l, f, v);
        }
        emplace(e, n, o, u, l, f, v, S) {
          const D = 6 * e, x = 12 * e, P = 3 * e;
          return this.int16[D + 0] = n, this.int16[D + 1] = o, this.uint8[x + 4] = u, this.uint8[x + 5] = l, this.uint8[x + 6] = f, this.uint8[x + 7] = v, this.float32[P + 2] = S, e;
        }
      }
      ho.prototype.bytesPerElement = 12, Ft(ho, "StructArrayLayout2i4ub1f12");
      class Xa extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u) {
          const l = this.length;
          return this.resize(l + 1), this.emplace(l, e, n, o, u);
        }
        emplace(e, n, o, u, l) {
          const f = 4 * e;
          return this.float32[f + 0] = n, this.float32[f + 1] = o, this.float32[f + 2] = u, this.float32[f + 3] = l, e;
        }
      }
      Xa.prototype.bytesPerElement = 16, Ft(Xa, "StructArrayLayout4f16");
      class va extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o) {
          const u = this.length;
          return this.resize(u + 1), this.emplace(u, e, n, o);
        }
        emplace(e, n, o, u) {
          const l = 3 * e;
          return this.float32[l + 0] = n, this.float32[l + 1] = o, this.float32[l + 2] = u, e;
        }
      }
      va.prototype.bytesPerElement = 12, Ft(va, "StructArrayLayout3f12");
      class Ya extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l) {
          const f = this.length;
          return this.resize(f + 1), this.emplace(f, e, n, o, u, l);
        }
        emplace(e, n, o, u, l, f) {
          const v = 6 * e, S = 3 * e;
          return this.uint16[v + 0] = n, this.uint16[v + 1] = o, this.uint16[v + 2] = u, this.uint16[v + 3] = l, this.float32[S + 2] = f, e;
        }
      }
      Ya.prototype.bytesPerElement = 12, Ft(Ya, "StructArrayLayout4ui1f12");
      class fu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u) {
          const l = this.length;
          return this.resize(l + 1), this.emplace(l, e, n, o, u);
        }
        emplace(e, n, o, u, l) {
          const f = 4 * e;
          return this.uint16[f + 0] = n, this.uint16[f + 1] = o, this.uint16[f + 2] = u, this.uint16[f + 3] = l, e;
        }
      }
      fu.prototype.bytesPerElement = 8, Ft(fu, "StructArrayLayout4ui8");
      class pu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f) {
          const v = this.length;
          return this.resize(v + 1), this.emplace(v, e, n, o, u, l, f);
        }
        emplace(e, n, o, u, l, f, v) {
          const S = 6 * e;
          return this.int16[S + 0] = n, this.int16[S + 1] = o, this.int16[S + 2] = u, this.int16[S + 3] = l, this.int16[S + 4] = f, this.int16[S + 5] = v, e;
        }
      }
      pu.prototype.bytesPerElement = 12, Ft(pu, "StructArrayLayout6i12");
      class Td extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D, x, P, I) {
          const M = this.length;
          return this.resize(M + 1), this.emplace(M, e, n, o, u, l, f, v, S, D, x, P, I);
        }
        emplace(e, n, o, u, l, f, v, S, D, x, P, I, M) {
          const C = 12 * e;
          return this.int16[C + 0] = n, this.int16[C + 1] = o, this.int16[C + 2] = u, this.int16[C + 3] = l, this.uint16[C + 4] = f, this.uint16[C + 5] = v, this.uint16[C + 6] = S, this.uint16[C + 7] = D, this.int16[C + 8] = x, this.int16[C + 9] = P, this.int16[C + 10] = I, this.int16[C + 11] = M, e;
        }
      }
      Td.prototype.bytesPerElement = 24, Ft(Td, "StructArrayLayout4i4ui4i24");
      class Md extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f) {
          const v = this.length;
          return this.resize(v + 1), this.emplace(v, e, n, o, u, l, f);
        }
        emplace(e, n, o, u, l, f, v) {
          const S = 10 * e, D = 5 * e;
          return this.int16[S + 0] = n, this.int16[S + 1] = o, this.int16[S + 2] = u, this.float32[D + 2] = l, this.float32[D + 3] = f, this.float32[D + 4] = v, e;
        }
      }
      Md.prototype.bytesPerElement = 20, Ft(Md, "StructArrayLayout3i3f20");
      class Sd extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer);
        }
        emplaceBack(e) {
          const n = this.length;
          return this.resize(n + 1), this.emplace(n, e);
        }
        emplace(e, n) {
          return this.uint32[1 * e + 0] = n, e;
        }
      }
      Sd.prototype.bytesPerElement = 4, Ft(Sd, "StructArrayLayout1ul4");
      class Ka extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e, n) {
          const o = this.length;
          return this.resize(o + 1), this.emplace(o, e, n);
        }
        emplace(e, n, o) {
          const u = 2 * e;
          return this.uint16[u + 0] = n, this.uint16[u + 1] = o, e;
        }
      }
      Ka.prototype.bytesPerElement = 4, Ft(Ka, "StructArrayLayout2ui4");
      class Ed extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D, x, P, I, M) {
          const C = this.length;
          return this.resize(C + 1), this.emplace(C, e, n, o, u, l, f, v, S, D, x, P, I, M);
        }
        emplace(e, n, o, u, l, f, v, S, D, x, P, I, M, C) {
          const k = 20 * e, V = 10 * e;
          return this.int16[k + 0] = n, this.int16[k + 1] = o, this.int16[k + 2] = u, this.int16[k + 3] = l, this.int16[k + 4] = f, this.float32[V + 3] = v, this.float32[V + 4] = S, this.float32[V + 5] = D, this.float32[V + 6] = x, this.int16[k + 14] = P, this.uint32[V + 8] = I, this.uint16[k + 18] = M, this.uint16[k + 19] = C, e;
        }
      }
      Ed.prototype.bytesPerElement = 40, Ft(Ed, "StructArrayLayout5i4f1i1ul2ui40");
      class mu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v) {
          const S = this.length;
          return this.resize(S + 1), this.emplace(S, e, n, o, u, l, f, v);
        }
        emplace(e, n, o, u, l, f, v, S) {
          const D = 8 * e;
          return this.int16[D + 0] = n, this.int16[D + 1] = o, this.int16[D + 2] = u, this.int16[D + 4] = l, this.int16[D + 5] = f, this.int16[D + 6] = v, this.int16[D + 7] = S, e;
        }
      }
      mu.prototype.bytesPerElement = 16, Ft(mu, "StructArrayLayout3i2i2i16");
      class _u extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l) {
          const f = this.length;
          return this.resize(f + 1), this.emplace(f, e, n, o, u, l);
        }
        emplace(e, n, o, u, l, f) {
          const v = 4 * e, S = 8 * e;
          return this.float32[v + 0] = n, this.float32[v + 1] = o, this.float32[v + 2] = u, this.int16[S + 6] = l, this.int16[S + 7] = f, e;
        }
      }
      _u.prototype.bytesPerElement = 16, Ft(_u, "StructArrayLayout2f1f2i16");
      class Pd extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f) {
          const v = this.length;
          return this.resize(v + 1), this.emplace(v, e, n, o, u, l, f);
        }
        emplace(e, n, o, u, l, f, v) {
          const S = 20 * e, D = 5 * e;
          return this.uint8[S + 0] = n, this.uint8[S + 1] = o, this.float32[D + 1] = u, this.float32[D + 2] = l, this.float32[D + 3] = f, this.float32[D + 4] = v, e;
        }
      }
      Pd.prototype.bytesPerElement = 20, Ft(Pd, "StructArrayLayout2ub4f20");
      class qs extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o) {
          const u = this.length;
          return this.resize(u + 1), this.emplace(u, e, n, o);
        }
        emplace(e, n, o, u) {
          const l = 3 * e;
          return this.uint16[l + 0] = n, this.uint16[l + 1] = o, this.uint16[l + 2] = u, e;
        }
      }
      qs.prototype.bytesPerElement = 6, Ft(qs, "StructArrayLayout3ui6");
      class Ad extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U, q, $, H, K) {
          const Q = this.length;
          return this.resize(Q + 1), this.emplace(Q, e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U, q, $, H, K);
        }
        emplace(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U, q, $, H, K, Q) {
          const ie = 30 * e, fe = 15 * e, de = 60 * e;
          return this.int16[ie + 0] = n, this.int16[ie + 1] = o, this.int16[ie + 2] = u, this.float32[fe + 2] = l, this.float32[fe + 3] = f, this.uint16[ie + 8] = v, this.uint16[ie + 9] = S, this.uint32[fe + 5] = D, this.uint32[fe + 6] = x, this.uint32[fe + 7] = P, this.uint16[ie + 16] = I, this.uint16[ie + 17] = M, this.uint16[ie + 18] = C, this.float32[fe + 10] = k, this.float32[fe + 11] = V, this.uint8[de + 48] = U, this.uint8[de + 49] = q, this.uint8[de + 50] = $, this.uint32[fe + 13] = H, this.int16[ie + 28] = K, this.uint8[de + 58] = Q, e;
        }
      }
      Ad.prototype.bytesPerElement = 60, Ft(Ad, "StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60");
      class gu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U, q, $, H, K, Q, ie, fe, de, ue, Se, me, Ee, ze, Ie, Re) {
          const Ve = this.length;
          return this.resize(Ve + 1), this.emplace(Ve, e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U, q, $, H, K, Q, ie, fe, de, ue, Se, me, Ee, ze, Ie, Re);
        }
        emplace(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U, q, $, H, K, Q, ie, fe, de, ue, Se, me, Ee, ze, Ie, Re, Ve) {
          const Ue = 20 * e, Fe = 40 * e, et = 80 * e;
          return this.float32[Ue + 0] = n, this.float32[Ue + 1] = o, this.int16[Fe + 4] = u, this.int16[Fe + 5] = l, this.int16[Fe + 6] = f, this.int16[Fe + 7] = v, this.int16[Fe + 8] = S, this.int16[Fe + 9] = D, this.int16[Fe + 10] = x, this.int16[Fe + 11] = P, this.int16[Fe + 12] = I, this.uint16[Fe + 13] = M, this.uint16[Fe + 14] = C, this.uint16[Fe + 15] = k, this.uint16[Fe + 16] = V, this.uint16[Fe + 17] = U, this.uint16[Fe + 18] = q, this.uint16[Fe + 19] = $, this.uint16[Fe + 20] = H, this.uint16[Fe + 21] = K, this.uint16[Fe + 22] = Q, this.uint16[Fe + 23] = ie, this.uint16[Fe + 24] = fe, this.uint16[Fe + 25] = de, this.uint16[Fe + 26] = ue, this.uint16[Fe + 27] = Se, this.uint32[Ue + 14] = me, this.float32[Ue + 15] = Ee, this.float32[Ue + 16] = ze, this.float32[Ue + 17] = Ie, this.float32[Ue + 18] = Re, this.uint8[et + 76] = Ve, e;
        }
      }
      gu.prototype.bytesPerElement = 80, Ft(gu, "StructArrayLayout2f9i15ui1ul4f1ub80");
      class uc extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e) {
          const n = this.length;
          return this.resize(n + 1), this.emplace(n, e);
        }
        emplace(e, n) {
          return this.float32[1 * e + 0] = n, e;
        }
      }
      uc.prototype.bytesPerElement = 4, Ft(uc, "StructArrayLayout1f4");
      class Rr extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l) {
          const f = this.length;
          return this.resize(f + 1), this.emplace(f, e, n, o, u, l);
        }
        emplace(e, n, o, u, l, f) {
          const v = 5 * e;
          return this.float32[v + 0] = n, this.float32[v + 1] = o, this.float32[v + 2] = u, this.float32[v + 3] = l, this.float32[v + 4] = f, e;
        }
      }
      Rr.prototype.bytesPerElement = 20, Ft(Rr, "StructArrayLayout5f20");
      class yu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v) {
          const S = this.length;
          return this.resize(S + 1), this.emplace(S, e, n, o, u, l, f, v);
        }
        emplace(e, n, o, u, l, f, v, S) {
          const D = 7 * e;
          return this.float32[D + 0] = n, this.float32[D + 1] = o, this.float32[D + 2] = u, this.float32[D + 3] = l, this.float32[D + 4] = f, this.float32[D + 5] = v, this.float32[D + 6] = S, e;
        }
      }
      yu.prototype.bytesPerElement = 28, Ft(yu, "StructArrayLayout7f28");
      class Cd extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D, x, P) {
          const I = this.length;
          return this.resize(I + 1), this.emplace(I, e, n, o, u, l, f, v, S, D, x, P);
        }
        emplace(e, n, o, u, l, f, v, S, D, x, P, I) {
          const M = 11 * e;
          return this.float32[M + 0] = n, this.float32[M + 1] = o, this.float32[M + 2] = u, this.float32[M + 3] = l, this.float32[M + 4] = f, this.float32[M + 5] = v, this.float32[M + 6] = S, this.float32[M + 7] = D, this.float32[M + 8] = x, this.float32[M + 9] = P, this.float32[M + 10] = I, e;
        }
      }
      Cd.prototype.bytesPerElement = 44, Ft(Cd, "StructArrayLayout11f44");
      class Id extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D) {
          const x = this.length;
          return this.resize(x + 1), this.emplace(x, e, n, o, u, l, f, v, S, D);
        }
        emplace(e, n, o, u, l, f, v, S, D, x) {
          const P = 9 * e;
          return this.float32[P + 0] = n, this.float32[P + 1] = o, this.float32[P + 2] = u, this.float32[P + 3] = l, this.float32[P + 4] = f, this.float32[P + 5] = v, this.float32[P + 6] = S, this.float32[P + 7] = D, this.float32[P + 8] = x, e;
        }
      }
      Id.prototype.bytesPerElement = 36, Ft(Id, "StructArrayLayout9f36");
      class Pl extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n) {
          const o = this.length;
          return this.resize(o + 1), this.emplace(o, e, n);
        }
        emplace(e, n, o) {
          const u = 2 * e;
          return this.float32[u + 0] = n, this.float32[u + 1] = o, e;
        }
      }
      Pl.prototype.bytesPerElement = 8, Ft(Pl, "StructArrayLayout2f8");
      class ah extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint32 = new Uint32Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u) {
          const l = this.length;
          return this.resize(l + 1), this.emplace(l, e, n, o, u);
        }
        emplace(e, n, o, u, l) {
          const f = 6 * e;
          return this.uint32[3 * e + 0] = n, this.uint16[f + 2] = o, this.uint16[f + 3] = u, this.uint16[f + 4] = l, e;
        }
      }
      ah.prototype.bytesPerElement = 12, Ft(ah, "StructArrayLayout1ul3ui12");
      class xu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer);
        }
        emplaceBack(e) {
          const n = this.length;
          return this.resize(n + 1), this.emplace(n, e);
        }
        emplace(e, n) {
          return this.uint16[1 * e + 0] = n, e;
        }
      }
      xu.prototype.bytesPerElement = 2, Ft(xu, "StructArrayLayout1ui2");
      class Ld extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V) {
          const U = this.length;
          return this.resize(U + 1), this.emplace(U, e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V);
        }
        emplace(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U) {
          const q = 16 * e;
          return this.float32[q + 0] = n, this.float32[q + 1] = o, this.float32[q + 2] = u, this.float32[q + 3] = l, this.float32[q + 4] = f, this.float32[q + 5] = v, this.float32[q + 6] = S, this.float32[q + 7] = D, this.float32[q + 8] = x, this.float32[q + 9] = P, this.float32[q + 10] = I, this.float32[q + 11] = M, this.float32[q + 12] = C, this.float32[q + 13] = k, this.float32[q + 14] = V, this.float32[q + 15] = U, e;
        }
      }
      Ld.prototype.bytesPerElement = 64, Ft(Ld, "StructArrayLayout16f64");
      class lh extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.uint16 = new Uint16Array(this.arrayBuffer), this.float32 = new Float32Array(this.arrayBuffer);
        }
        emplaceBack(e, n, o, u, l, f, v) {
          const S = this.length;
          return this.resize(S + 1), this.emplace(S, e, n, o, u, l, f, v);
        }
        emplace(e, n, o, u, l, f, v, S) {
          const D = 10 * e, x = 5 * e;
          return this.uint16[D + 0] = n, this.uint16[D + 1] = o, this.uint16[D + 2] = u, this.uint16[D + 3] = l, this.float32[x + 2] = f, this.float32[x + 3] = v, this.float32[x + 4] = S, e;
        }
      }
      lh.prototype.bytesPerElement = 20, Ft(lh, "StructArrayLayout4ui3f20");
      class zd extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer), this.int16 = new Int16Array(this.arrayBuffer);
        }
        emplaceBack(e) {
          const n = this.length;
          return this.resize(n + 1), this.emplace(n, e);
        }
        emplace(e, n) {
          return this.int16[1 * e + 0] = n, e;
        }
      }
      zd.prototype.bytesPerElement = 2, Ft(zd, "StructArrayLayout1i2");
      class vu extends bn {
        _refreshViews() {
          this.uint8 = new Uint8Array(this.arrayBuffer);
        }
        emplaceBack(e) {
          const n = this.length;
          return this.resize(n + 1), this.emplace(n, e);
        }
        emplace(e, n) {
          return this.uint8[1 * e + 0] = n, e;
        }
      }
      vu.prototype.bytesPerElement = 1, Ft(vu, "StructArrayLayout1ub1");
      class ch extends rh {
        get projectedAnchorX() {
          return this._structArray.int16[this._pos2 + 0];
        }
        get projectedAnchorY() {
          return this._structArray.int16[this._pos2 + 1];
        }
        get projectedAnchorZ() {
          return this._structArray.int16[this._pos2 + 2];
        }
        get tileAnchorX() {
          return this._structArray.int16[this._pos2 + 3];
        }
        get tileAnchorY() {
          return this._structArray.int16[this._pos2 + 4];
        }
        get x1() {
          return this._structArray.float32[this._pos4 + 3];
        }
        get y1() {
          return this._structArray.float32[this._pos4 + 4];
        }
        get x2() {
          return this._structArray.float32[this._pos4 + 5];
        }
        get y2() {
          return this._structArray.float32[this._pos4 + 6];
        }
        get padding() {
          return this._structArray.int16[this._pos2 + 14];
        }
        get featureIndex() {
          return this._structArray.uint32[this._pos4 + 8];
        }
        get sourceLayerIndex() {
          return this._structArray.uint16[this._pos2 + 18];
        }
        get bucketIndex() {
          return this._structArray.uint16[this._pos2 + 19];
        }
      }
      ch.prototype.size = 40;
      class ap extends Ed {
        get(e) {
          return new ch(this, e);
        }
      }
      Ft(ap, "CollisionBoxArray");
      class lp extends rh {
        get projectedAnchorX() {
          return this._structArray.int16[this._pos2 + 0];
        }
        get projectedAnchorY() {
          return this._structArray.int16[this._pos2 + 1];
        }
        get projectedAnchorZ() {
          return this._structArray.int16[this._pos2 + 2];
        }
        get tileAnchorX() {
          return this._structArray.float32[this._pos4 + 2];
        }
        get tileAnchorY() {
          return this._structArray.float32[this._pos4 + 3];
        }
        get glyphStartIndex() {
          return this._structArray.uint16[this._pos2 + 8];
        }
        get numGlyphs() {
          return this._structArray.uint16[this._pos2 + 9];
        }
        get vertexStartIndex() {
          return this._structArray.uint32[this._pos4 + 5];
        }
        get lineStartIndex() {
          return this._structArray.uint32[this._pos4 + 6];
        }
        get lineLength() {
          return this._structArray.uint32[this._pos4 + 7];
        }
        get segment() {
          return this._structArray.uint16[this._pos2 + 16];
        }
        get lowerSize() {
          return this._structArray.uint16[this._pos2 + 17];
        }
        get upperSize() {
          return this._structArray.uint16[this._pos2 + 18];
        }
        get lineOffsetX() {
          return this._structArray.float32[this._pos4 + 10];
        }
        get lineOffsetY() {
          return this._structArray.float32[this._pos4 + 11];
        }
        get writingMode() {
          return this._structArray.uint8[this._pos1 + 48];
        }
        get placedOrientation() {
          return this._structArray.uint8[this._pos1 + 49];
        }
        set placedOrientation(e) {
          this._structArray.uint8[this._pos1 + 49] = e;
        }
        get hidden() {
          return this._structArray.uint8[this._pos1 + 50];
        }
        set hidden(e) {
          this._structArray.uint8[this._pos1 + 50] = e;
        }
        get crossTileID() {
          return this._structArray.uint32[this._pos4 + 13];
        }
        set crossTileID(e) {
          this._structArray.uint32[this._pos4 + 13] = e;
        }
        get associatedIconIndex() {
          return this._structArray.int16[this._pos2 + 28];
        }
        get flipState() {
          return this._structArray.uint8[this._pos1 + 58];
        }
        set flipState(e) {
          this._structArray.uint8[this._pos1 + 58] = e;
        }
      }
      lp.prototype.size = 60;
      class cp extends Ad {
        get(e) {
          return new lp(this, e);
        }
      }
      Ft(cp, "PlacedSymbolArray");
      class hp extends rh {
        get tileAnchorX() {
          return this._structArray.float32[this._pos4 + 0];
        }
        get tileAnchorY() {
          return this._structArray.float32[this._pos4 + 1];
        }
        get projectedAnchorX() {
          return this._structArray.int16[this._pos2 + 4];
        }
        get projectedAnchorY() {
          return this._structArray.int16[this._pos2 + 5];
        }
        get projectedAnchorZ() {
          return this._structArray.int16[this._pos2 + 6];
        }
        get rightJustifiedTextSymbolIndex() {
          return this._structArray.int16[this._pos2 + 7];
        }
        get centerJustifiedTextSymbolIndex() {
          return this._structArray.int16[this._pos2 + 8];
        }
        get leftJustifiedTextSymbolIndex() {
          return this._structArray.int16[this._pos2 + 9];
        }
        get verticalPlacedTextSymbolIndex() {
          return this._structArray.int16[this._pos2 + 10];
        }
        get placedIconSymbolIndex() {
          return this._structArray.int16[this._pos2 + 11];
        }
        get verticalPlacedIconSymbolIndex() {
          return this._structArray.int16[this._pos2 + 12];
        }
        get key() {
          return this._structArray.uint16[this._pos2 + 13];
        }
        get textBoxStartIndex() {
          return this._structArray.uint16[this._pos2 + 14];
        }
        get textBoxEndIndex() {
          return this._structArray.uint16[this._pos2 + 15];
        }
        get verticalTextBoxStartIndex() {
          return this._structArray.uint16[this._pos2 + 16];
        }
        get verticalTextBoxEndIndex() {
          return this._structArray.uint16[this._pos2 + 17];
        }
        get iconBoxStartIndex() {
          return this._structArray.uint16[this._pos2 + 18];
        }
        get iconBoxEndIndex() {
          return this._structArray.uint16[this._pos2 + 19];
        }
        get verticalIconBoxStartIndex() {
          return this._structArray.uint16[this._pos2 + 20];
        }
        get verticalIconBoxEndIndex() {
          return this._structArray.uint16[this._pos2 + 21];
        }
        get featureIndex() {
          return this._structArray.uint16[this._pos2 + 22];
        }
        get numHorizontalGlyphVertices() {
          return this._structArray.uint16[this._pos2 + 23];
        }
        get numVerticalGlyphVertices() {
          return this._structArray.uint16[this._pos2 + 24];
        }
        get numIconVertices() {
          return this._structArray.uint16[this._pos2 + 25];
        }
        get numVerticalIconVertices() {
          return this._structArray.uint16[this._pos2 + 26];
        }
        get useRuntimeCollisionCircles() {
          return this._structArray.uint16[this._pos2 + 27];
        }
        get crossTileID() {
          return this._structArray.uint32[this._pos4 + 14];
        }
        set crossTileID(e) {
          this._structArray.uint32[this._pos4 + 14] = e;
        }
        get textOffset0() {
          return this._structArray.float32[this._pos4 + 15];
        }
        get textOffset1() {
          return this._structArray.float32[this._pos4 + 16];
        }
        get collisionCircleDiameter() {
          return this._structArray.float32[this._pos4 + 17];
        }
        get zOffset() {
          return this._structArray.float32[this._pos4 + 18];
        }
        set zOffset(e) {
          this._structArray.float32[this._pos4 + 18] = e;
        }
        get hasIconTextFit() {
          return this._structArray.uint8[this._pos1 + 76];
        }
      }
      hp.prototype.size = 80;
      class up extends gu {
        get(e) {
          return new hp(this, e);
        }
      }
      Ft(up, "SymbolInstanceArray");
      class hh extends uc {
        getoffsetX(e) {
          return this.float32[1 * e + 0];
        }
      }
      Ft(hh, "GlyphOffsetArray");
      class uh extends Lo {
        getx(e) {
          return this.int16[2 * e + 0];
        }
        gety(e) {
          return this.int16[2 * e + 1];
        }
      }
      Ft(uh, "SymbolLineVertexArray");
      class Or extends rh {
        get featureIndex() {
          return this._structArray.uint32[this._pos4 + 0];
        }
        get sourceLayerIndex() {
          return this._structArray.uint16[this._pos2 + 2];
        }
        get bucketIndex() {
          return this._structArray.uint16[this._pos2 + 3];
        }
        get layoutVertexArrayOffset() {
          return this._structArray.uint16[this._pos2 + 4];
        }
      }
      Or.prototype.size = 12;
      class dh extends ah {
        get(e) {
          return new Or(this, e);
        }
      }
      Ft(dh, "FeatureIndexArray");
      class dp extends Ka {
        geta_centroid_pos0(e) {
          return this.uint16[2 * e + 0];
        }
        geta_centroid_pos1(e) {
          return this.uint16[2 * e + 1];
        }
      }
      Ft(dp, "FillExtrusionCentroidArray");
      class fp extends rh {
        get a_join_normal_inside0() {
          return this._structArray.int16[this._pos2 + 0];
        }
        get a_join_normal_inside1() {
          return this._structArray.int16[this._pos2 + 1];
        }
        get a_join_normal_inside2() {
          return this._structArray.int16[this._pos2 + 2];
        }
      }
      fp.prototype.size = 6;
      class pp extends oh {
        get(e) {
          return new fp(this, e);
        }
      }
      Ft(pp, "FillExtrusionWallArray");
      const r_ = qi([{ name: "a_pos", components: 2, type: "Int16" }], 4), Dd = qi([{ name: "a_pos_3", components: 3, type: "Int16" }, { name: "a_pos_normal_3", components: 3, type: "Int16" }]);
      class Wn {
        constructor(e = []) {
          this.segments = e;
        }
        _prepareSegment(e, n, o, u) {
          let l = this.segments[this.segments.length - 1];
          return e > Wn.MAX_VERTEX_ARRAY_LENGTH && mi(`Max vertices per segment is ${Wn.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${e}`), (!l || l.vertexLength + e > Wn.MAX_VERTEX_ARRAY_LENGTH || l.sortKey !== u) && (l = { vertexOffset: n, primitiveOffset: o, vertexLength: 0, primitiveLength: 0 }, u !== void 0 && (l.sortKey = u), this.segments.push(l)), l;
        }
        prepareSegment(e, n, o, u) {
          return this._prepareSegment(e, n.length, o.length, u);
        }
        get() {
          return this.segments;
        }
        destroy() {
          for (const e of this.segments)
            for (const n in e.vaos)
              e.vaos[n].destroy();
        }
        static simpleSegment(e, n, o, u) {
          return new Wn([{ vertexOffset: e, primitiveOffset: n, vertexLength: o, primitiveLength: u, vaos: {}, sortKey: 0 }]);
        }
      }
      function bu(r, e) {
        return 256 * (r = si(Math.floor(r), 0, 255)) + si(Math.floor(e), 0, 255);
      }
      Wn.MAX_VERTEX_ARRAY_LENGTH = Math.pow(2, 16) - 1, Ft(Wn, "SegmentVector");
      const o_ = qi([{ name: "a_pattern", components: 4, type: "Uint16" }, { name: "a_pixel_ratio", components: 1, type: "Float32" }]), a_ = qi([{ name: "a_dash", components: 4, type: "Uint16" }]);
      class Al {
        constructor() {
          this.ids = [], this.uniqueIds = [], this.positions = [], this.indexed = !1;
        }
        add(e, n, o, u) {
          this.ids.push(mp(e)), this.positions.push(n, o, u);
        }
        eachPosition(e, n) {
          const o = mp(e);
          let u = 0, l = this.ids.length - 1;
          for (; u < l; ) {
            const f = u + l >> 1;
            this.ids[f] >= o ? l = f : u = f + 1;
          }
          for (; this.ids[u] === o; )
            n(this.positions[3 * u], this.positions[3 * u + 1], this.positions[3 * u + 2]), u++;
        }
        static serialize(e, n) {
          const o = new Float64Array(e.ids), u = new Uint32Array(e.positions);
          return wu(o, u, 0, o.length - 1), n && (n.add(o.buffer), n.add(u.buffer)), { ids: o, positions: u };
        }
        static deserialize(e) {
          const n = new Al();
          let o;
          n.ids = e.ids, n.positions = e.positions;
          for (const u of n.ids)
            u !== o && n.uniqueIds.push(u), o = u;
          return n.indexed = !0, n;
        }
      }
      function mp(r) {
        const e = +r;
        return !isNaN(e) && Number.MIN_SAFE_INTEGER <= e && e <= Number.MAX_SAFE_INTEGER ? e : $r(String(r));
      }
      function wu(r, e, n, o) {
        for (; n < o; ) {
          const u = r[n + o >> 1];
          let l = n - 1, f = o + 1;
          for (; ; ) {
            do
              l++;
            while (r[l] < u);
            do
              f--;
            while (r[f] > u);
            if (l >= f)
              break;
            fh(r, l, f), fh(e, 3 * l, 3 * f), fh(e, 3 * l + 1, 3 * f + 1), fh(e, 3 * l + 2, 3 * f + 2);
          }
          f - n < o - f ? (wu(r, e, n, f), n = f + 1) : (wu(r, e, f + 1, o), o = f);
        }
      }
      function fh(r, e, n) {
        const o = r[e];
        r[e] = r[n], r[n] = o;
      }
      Ft(Al, "FeaturePositionMap");
      class ba {
        constructor(e) {
          this.gl = e.gl, this.initialized = !1;
        }
        fetchUniformLocation(e, n) {
          return this.location || this.initialized || (this.location = this.gl.getUniformLocation(e, n), this.initialized = !0), !!this.location;
        }
        set(e, n, o) {
          throw new Error("Uniform#set() must be implemented by each concrete Uniform");
        }
      }
      class dc extends ba {
        constructor(e) {
          super(e), this.current = 0;
        }
        set(e, n, o) {
          this.fetchUniformLocation(e, n) && this.current !== o && (this.current = o, this.gl.uniform1i(this.location, o));
        }
      }
      class Nn extends ba {
        constructor(e) {
          super(e), this.current = 0;
        }
        set(e, n, o) {
          this.fetchUniformLocation(e, n) && this.current !== o && (this.current = o, this.gl.uniform1f(this.location, o));
        }
      }
      class zo extends ba {
        constructor(e) {
          super(e), this.current = [0, 0];
        }
        set(e, n, o) {
          this.fetchUniformLocation(e, n) && (o[0] === this.current[0] && o[1] === this.current[1] || (this.current = o, this.gl.uniform2f(this.location, o[0], o[1])));
        }
      }
      class kd extends ba {
        constructor(e) {
          super(e), this.current = [0, 0, 0];
        }
        set(e, n, o) {
          this.fetchUniformLocation(e, n) && (o[0] === this.current[0] && o[1] === this.current[1] && o[2] === this.current[2] || (this.current = o, this.gl.uniform3f(this.location, o[0], o[1], o[2])));
        }
      }
      class ph extends ba {
        constructor(e) {
          super(e), this.current = [0, 0, 0, 0];
        }
        set(e, n, o) {
          this.fetchUniformLocation(e, n) && (o[0] === this.current[0] && o[1] === this.current[1] && o[2] === this.current[2] && o[3] === this.current[3] || (this.current = o, this.gl.uniform4f(this.location, o[0], o[1], o[2], o[3])));
        }
      }
      class _p extends ba {
        constructor(e) {
          super(e), this.current = ki.transparent.toRenderColor(null);
        }
        set(e, n, o) {
          this.fetchUniformLocation(e, n) && (o.r === this.current.r && o.g === this.current.g && o.b === this.current.b && o.a === this.current.a || (this.current = o, this.gl.uniform4f(this.location, o.r, o.g, o.b, o.a)));
        }
      }
      const Rd = new Float32Array(16);
      class mh extends ba {
        constructor(e) {
          super(e), this.current = Rd;
        }
        set(e, n, o) {
          if (this.fetchUniformLocation(e, n)) {
            if (o[12] !== this.current[12] || o[0] !== this.current[0])
              return this.current = o, void this.gl.uniformMatrix4fv(this.location, !1, o);
            for (let u = 1; u < 16; u++)
              if (o[u] !== this.current[u]) {
                this.current = o, this.gl.uniformMatrix4fv(this.location, !1, o);
                break;
              }
          }
        }
      }
      const l_ = new Float32Array(9), c_ = new Float32Array(4);
      class Od extends ba {
        constructor(e) {
          super(e), this.current = c_;
        }
        set(e, n, o) {
          if (this.fetchUniformLocation(e, n)) {
            for (let u = 0; u < 4; u++)
              if (o[u] !== this.current[u]) {
                this.current = o, this.gl.uniformMatrix2fv(this.location, !1, o);
                break;
              }
          }
        }
      }
      function Tu(r) {
        return [bu(255 * r.r, 255 * r.g), bu(255 * r.b, 255 * r.a)];
      }
      class fc {
        constructor(e, n, o, u) {
          this.value = e, this.uniformNames = n.map((l) => `u_${l}`), this.type = o, this.context = u;
        }
        setUniform(e, n, o, u, l) {
          const f = u.constantOr(this.value);
          n.set(e, l, f instanceof ki ? f.toRenderColor(this.ignoreLut ? null : this.context.lut) : f);
        }
        getBinding(e, n) {
          return this.type === "color" ? new _p(e) : new Nn(e);
        }
      }
      class pc {
        constructor(e, n) {
          this.uniformNames = n.map((o) => `u_${o}`), this.pattern = null, this.pixelRatio = 1;
        }
        setConstantPatternPositions(e) {
          this.pixelRatio = e.pixelRatio || 1, this.pattern = e.tl.concat(e.br);
        }
        setUniform(e, n, o, u, l) {
          const f = l === "u_pattern" || l === "u_dash" ? this.pattern : l === "u_pixel_ratio" ? this.pixelRatio : null;
          f && n.set(e, l, f);
        }
        getBinding(e, n) {
          return n === "u_pattern" || n === "u_dash" ? new ph(e) : new Nn(e);
        }
      }
      class wa {
        constructor(e, n, o, u) {
          this.expression = e, this.type = o, this.maxValue = 0, this.paintVertexAttributes = n.map((l) => ({ name: `a_${l}`, type: "Float32", components: o === "color" ? 2 : 1, offset: 0 })), this.paintVertexArray = new u();
        }
        populatePaintArray(e, n, o, u, l, f, v) {
          const S = this.paintVertexArray.length, D = this.expression.evaluate(new Tn(0, { brightness: f }), n, {}, l, u, v);
          this.paintVertexArray.resize(e), this._setPaintValue(S, e, D, this.context);
        }
        updatePaintArray(e, n, o, u, l, f, v) {
          const S = this.expression.evaluate({ zoom: 0, brightness: v }, o, u, void 0, l);
          this._setPaintValue(e, n, S, this.context);
        }
        _setPaintValue(e, n, o, u) {
          if (this.type === "color") {
            const l = Tu(o.toRenderColor(this.ignoreLut ? null : u.lut));
            for (let f = e; f < n; f++)
              this.paintVertexArray.emplace(f, l[0], l[1]);
          } else {
            for (let l = e; l < n; l++)
              this.paintVertexArray.emplace(l, o);
            this.maxValue = Math.max(this.maxValue, Math.abs(o));
          }
        }
        upload(e) {
          this.paintVertexArray && this.paintVertexArray.arrayBuffer && (this.paintVertexBuffer && this.paintVertexBuffer.buffer ? this.paintVertexBuffer.updateData(this.paintVertexArray) : this.paintVertexBuffer = e.createVertexBuffer(this.paintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent || !this.expression.isLightConstant));
        }
        destroy() {
          this.paintVertexBuffer && this.paintVertexBuffer.destroy();
        }
      }
      class Do {
        constructor(e, n, o, u, l, f) {
          this.expression = e, this.uniformNames = n.map((v) => `u_${v}_t`), this.type = o, this.useIntegerZoom = u, this.context = l, this.maxValue = 0, this.paintVertexAttributes = n.map((v) => ({ name: `a_${v}`, type: "Float32", components: o === "color" ? 4 : 2, offset: 0 })), this.paintVertexArray = new f();
        }
        populatePaintArray(e, n, o, u, l, f, v) {
          const S = this.expression.evaluate(new Tn(this.context.zoom, { brightness: f }), n, {}, l, u, v), D = this.expression.evaluate(new Tn(this.context.zoom + 1, { brightness: f }), n, {}, l, u, v), x = this.paintVertexArray.length;
          this.paintVertexArray.resize(e), this._setPaintValue(x, e, S, D, this.context);
        }
        updatePaintArray(e, n, o, u, l, f, v) {
          const S = this.expression.evaluate({ zoom: this.context.zoom, brightness: v }, o, u, void 0, l), D = this.expression.evaluate({ zoom: this.context.zoom + 1, brightness: v }, o, u, void 0, l);
          this._setPaintValue(e, n, S, D, this.context);
        }
        _setPaintValue(e, n, o, u, l) {
          if (this.type === "color") {
            const f = Tu(o.toRenderColor(this.ignoreLut ? null : l.lut)), v = Tu(o.toRenderColor(this.ignoreLut ? null : l.lut));
            for (let S = e; S < n; S++)
              this.paintVertexArray.emplace(S, f[0], f[1], v[0], v[1]);
          } else {
            for (let f = e; f < n; f++)
              this.paintVertexArray.emplace(f, o, u);
            this.maxValue = Math.max(this.maxValue, Math.abs(o), Math.abs(u));
          }
        }
        upload(e) {
          this.paintVertexArray && this.paintVertexArray.arrayBuffer && (this.paintVertexBuffer && this.paintVertexBuffer.buffer ? this.paintVertexBuffer.updateData(this.paintVertexArray) : this.paintVertexBuffer = e.createVertexBuffer(this.paintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent || !this.expression.isLightConstant));
        }
        destroy() {
          this.paintVertexBuffer && this.paintVertexBuffer.destroy();
        }
        setUniform(e, n, o, u, l) {
          const f = this.useIntegerZoom ? Math.floor(o.zoom) : o.zoom, v = si(this.expression.interpolationFactor(f, this.context.zoom, this.context.zoom + 1), 0, 1);
          n.set(e, l, v);
        }
        getBinding(e, n) {
          return new Nn(e);
        }
      }
      class Ja {
        constructor(e, n, o, u, l) {
          this.expression = e, this.layerId = l, this.paintVertexAttributes = (o === "array" ? a_ : o_).members;
          for (let f = 0; f < n.length; ++f)
            ;
          this.paintVertexArray = new u();
        }
        populatePaintArray(e, n, o, u) {
          const l = this.paintVertexArray.length;
          this.paintVertexArray.resize(e), this._setPaintValues(l, e, n.patterns && n.patterns[this.layerId], o);
        }
        updatePaintArray(e, n, o, u, l, f, v) {
          this._setPaintValues(e, n, o.patterns && o.patterns[this.layerId], f);
        }
        _setPaintValues(e, n, o, u) {
          if (!u || !o)
            return;
          const l = u[o];
          if (!l)
            return;
          const { tl: f, br: v, pixelRatio: S } = l;
          for (let D = e; D < n; D++)
            this.paintVertexArray.emplace(D, f[0], f[1], v[0], v[1], S);
        }
        upload(e) {
          this.paintVertexArray && this.paintVertexArray.arrayBuffer && (this.paintVertexBuffer = e.createVertexBuffer(this.paintVertexArray, this.paintVertexAttributes, this.expression.isStateDependent || !this.expression.isLightConstant));
        }
        destroy() {
          this.paintVertexBuffer && this.paintVertexBuffer.destroy();
        }
      }
      class Cl {
        constructor(e, n, o = () => !0) {
          this.binders = {}, this._buffers = [], this.context = n;
          const u = [];
          for (const l in e.paint._values) {
            const f = e.paint.get(l), v = e.paint.get(`${l}-use-theme`);
            if (l.endsWith("-use-theme") || !o(l) || !(f instanceof lc && nc(f.property.specification)))
              continue;
            const S = Mu(l, e.type), D = f.value, x = f.property.specification.type, P = !!f.property.useIntegerZoom, I = l === "line-dasharray" || l.endsWith("pattern"), M = l === "line-dasharray" && e.layout.get("line-cap").value.kind !== "constant";
            if (D.kind !== "constant" || M)
              if (D.kind === "source" || M || I) {
                const C = _h(l, x, "source");
                this.binders[l] = I ? new Ja(D, S, x, C, e.id) : new wa(D, S, x, C), u.push(`/a_${l}`);
              } else {
                const C = _h(l, x, "composite");
                this.binders[l] = new Do(D, S, x, P, n, C), u.push(`/z_${l}`);
              }
            else
              this.binders[l] = I ? new pc(D.value, S) : new fc(D.value, S, x, n), u.push(`/u_${l}`);
            v && (this.binders[l].ignoreLut = v.constantOr("default") === "none", this.binders[l].checkUseTheme = !0);
          }
          this.cacheKey = u.sort().join("");
        }
        getMaxValue(e) {
          const n = this.binders[e];
          return n instanceof wa || n instanceof Do ? n.maxValue : 0;
        }
        populatePaintArrays(e, n, o, u, l, f, v) {
          for (const S in this.binders) {
            const D = this.binders[S];
            D.context = this.context, (D instanceof wa || D instanceof Do || D instanceof Ja) && D.populatePaintArray(e, n, o, u, l, f, v);
          }
        }
        setConstantPatternPositions(e) {
          for (const n in this.binders) {
            const o = this.binders[n];
            o instanceof pc && o.setConstantPatternPositions(e);
          }
        }
        updatePaintArrays(e, n, o, u, l, f, v, S, D) {
          let x = !1;
          const P = Object.keys(e), I = P.length !== 0 && !S, M = I ? P : n.uniqueIds;
          this.context.lut = l.lut;
          for (const C in this.binders) {
            const k = this.binders[C];
            if (k.context = this.context, (k instanceof wa || k instanceof Do || k instanceof Ja) && (k.expression.isStateDependent === !0 || k.expression.isLightConstant === !1)) {
              const V = l.paint.get(C);
              k.expression = V.value;
              for (const U of M) {
                const q = e[U.toString()];
                n.eachPosition(U, ($, H, K) => {
                  const Q = u.feature($);
                  k.updatePaintArray(H, K, Q, q, f, v, D);
                });
              }
              if (!I)
                for (const U of o.uniqueIds) {
                  const q = e[U.toString()];
                  o.eachPosition(U, ($, H, K) => {
                    const Q = u.feature($);
                    k.updatePaintArray(H, K, Q, q, f, v, D);
                  });
                }
              x = !0;
            }
          }
          return x;
        }
        defines() {
          const e = [];
          for (const n in this.binders) {
            const o = this.binders[n];
            (o instanceof fc || o instanceof pc) && e.push(...o.uniformNames.map((u) => `#define HAS_UNIFORM_${u}`));
          }
          return e;
        }
        getBinderAttributes() {
          const e = [];
          for (const n in this.binders) {
            const o = this.binders[n];
            if (o instanceof wa || o instanceof Do || o instanceof Ja)
              for (let u = 0; u < o.paintVertexAttributes.length; u++)
                e.push(o.paintVertexAttributes[u].name);
          }
          return e;
        }
        getBinderUniforms() {
          const e = [];
          for (const n in this.binders) {
            const o = this.binders[n];
            if (o instanceof fc || o instanceof pc || o instanceof Do)
              for (const u of o.uniformNames)
                e.push(u);
          }
          return e;
        }
        getPaintVertexBuffers() {
          return this._buffers;
        }
        getUniforms(e) {
          const n = [];
          for (const o in this.binders) {
            const u = this.binders[o];
            if (u instanceof fc || u instanceof pc || u instanceof Do)
              for (const l of u.uniformNames)
                n.push({ name: l, property: o, binding: u.getBinding(e, l) });
          }
          return n;
        }
        setUniforms(e, n, o, u, l) {
          for (const { name: f, property: v, binding: S } of o) {
            if (this.binders[v].checkUseTheme && this.binders[v] instanceof fc) {
              const D = u.get(`${v}-use-theme`);
              D.isConstant() && (this.binders[v].ignoreLut = D.constantOr("default") === "none");
            }
            this.binders[v].setUniform(e, S, l, u.get(v), f);
          }
        }
        updatePaintBuffers() {
          this._buffers = [];
          for (const e in this.binders) {
            const n = this.binders[e];
            (n instanceof wa || n instanceof Do || n instanceof Ja) && n.paintVertexBuffer && this._buffers.push(n.paintVertexBuffer);
          }
        }
        upload(e) {
          for (const n in this.binders) {
            const o = this.binders[n];
            (o instanceof wa || o instanceof Do || o instanceof Ja) && o.upload(e);
          }
          this.updatePaintBuffers();
        }
        destroy() {
          for (const e in this.binders) {
            const n = this.binders[e];
            (n instanceof wa || n instanceof Do || n instanceof Ja) && n.destroy();
          }
        }
      }
      class Qa {
        constructor(e, n, o = () => !0) {
          this.programConfigurations = {};
          for (const u of e)
            this.programConfigurations[u.id] = new Cl(u, n, o);
          this.needsUpload = !1, this._featureMap = new Al(), this._featureMapWithoutIds = new Al(), this._bufferOffset = 0, this._idlessCounter = 0;
        }
        populatePaintArrays(e, n, o, u, l, f, v, S) {
          for (const D in this.programConfigurations)
            this.programConfigurations[D].populatePaintArrays(e, n, u, l, f, v, S);
          n.id !== void 0 ? this._featureMap.add(n.id, o, this._bufferOffset, e) : (this._featureMapWithoutIds.add(this._idlessCounter, o, this._bufferOffset, e), this._idlessCounter += 1), this._bufferOffset = e, this.needsUpload = !0;
        }
        updatePaintArrays(e, n, o, u, l, f, v) {
          for (const S of o)
            this.needsUpload = this.programConfigurations[S.id].updatePaintArrays(e, this._featureMap, this._featureMapWithoutIds, n, S, u, l, f, v || 0) || this.needsUpload;
        }
        get(e) {
          return this.programConfigurations[e];
        }
        upload(e) {
          if (this.needsUpload) {
            for (const n in this.programConfigurations)
              this.programConfigurations[n].upload(e);
            this.needsUpload = !1;
          }
        }
        destroy() {
          for (const e in this.programConfigurations)
            this.programConfigurations[e].destroy();
        }
      }
      const h_ = { "text-opacity": ["opacity"], "icon-opacity": ["opacity"], "text-occlusion-opacity": ["occlusion_opacity"], "icon-occlusion-opacity": ["occlusion_opacity"], "text-color": ["fill_color"], "icon-color": ["fill_color"], "text-emissive-strength": ["emissive_strength"], "icon-emissive-strength": ["emissive_strength"], "text-halo-color": ["halo_color"], "icon-halo-color": ["halo_color"], "text-halo-blur": ["halo_blur"], "icon-halo-blur": ["halo_blur"], "text-halo-width": ["halo_width"], "icon-halo-width": ["halo_width"], "symbol-z-offset": ["z_offset"], "line-gap-width": ["gapwidth"], "line-pattern": ["pattern", "pixel_ratio"], "fill-pattern": ["pattern", "pixel_ratio"], "fill-extrusion-pattern": ["pattern", "pixel_ratio"], "line-dasharray": ["dash"] };
      function Mu(r, e) {
        return h_[r] || [r.replace(`${e}-`, "").replace(/-/g, "_")];
      }
      const u_ = { "line-pattern": { source: Ya, composite: Ya }, "fill-pattern": { source: Ya, composite: Ya }, "fill-extrusion-pattern": { source: Ya, composite: Ya }, "line-dasharray": { source: fu, composite: fu } }, d_ = { color: { source: Pl, composite: Xa }, number: { source: uc, composite: Pl } };
      function _h(r, e, n) {
        const o = u_[r];
        return o && o[n] || d_[e][n];
      }
      Ft(fc, "ConstantBinder"), Ft(pc, "PatternConstantBinder"), Ft(wa, "SourceExpressionBinder"), Ft(Ja, "PatternCompositeBinder"), Ft(Do, "CompositeExpressionBinder"), Ft(Cl, "ProgramConfiguration", { omit: ["_buffers"] }), Ft(Qa, "ProgramConfigurationSet");
      const dr = Tt / Math.PI / 2, Su = 5, gp = 6, yp = 16383, Il = 64, Eu = [Il, 32, 16], uo = -dr, fo = dr;
      function mc(r, e, n, o = dr) {
        return n = vi(n), [r * Math.sin(n) * o, -e * o, r * Math.cos(n) * o];
      }
      function el(r, e, n) {
        return mc(Math.cos(vi(r)), Math.sin(vi(r)), e, n);
      }
      const _c = 63710088e-1, Fd = 2 * Math.PI * _c;
      class Ui {
        constructor(e, n) {
          if (isNaN(e) || isNaN(n))
            throw new Error(`Invalid LngLat object: (${e}, ${n})`);
          if (this.lng = +e, this.lat = +n, this.lat > 90 || this.lat < -90)
            throw new Error("Invalid LngLat latitude value: must be between -90 and 90");
        }
        wrap() {
          return new Ui(zn(this.lng, -180, 180), this.lat);
        }
        toArray() {
          return [this.lng, this.lat];
        }
        toString() {
          return `LngLat(${this.lng}, ${this.lat})`;
        }
        distanceTo(e) {
          const n = Math.PI / 180, o = this.lat * n, u = e.lat * n, l = Math.sin(o) * Math.sin(u) + Math.cos(o) * Math.cos(u) * Math.cos((e.lng - this.lng) * n);
          return _c * Math.acos(Math.min(l, 1));
        }
        toBounds(e = 0) {
          const n = 360 * e / 40075017, o = n / Math.cos(Math.PI / 180 * this.lat);
          return new tl({ lng: this.lng - o, lat: this.lat - n }, { lng: this.lng + o, lat: this.lat + n });
        }
        toEcef(e) {
          return el(this.lat, this.lng, dr + e * dr / _c);
        }
        static convert(e) {
          if (e instanceof Ui)
            return e;
          if (Array.isArray(e) && (e.length === 2 || e.length === 3))
            return new Ui(Number(e[0]), Number(e[1]));
          if (!Array.isArray(e) && typeof e == "object" && e !== null)
            return new Ui(Number("lng" in e ? e.lng : e.lon), Number(e.lat));
          throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]");
        }
      }
      class tl {
        constructor(e, n) {
          if (e)
            if (n)
              this.setSouthWest(e).setNorthEast(n);
            else if (e.length === 4) {
              const o = e;
              this.setSouthWest([o[0], o[1]]).setNorthEast([o[2], o[3]]);
            } else {
              const o = e;
              this.setSouthWest(o[0]).setNorthEast(o[1]);
            }
        }
        setNorthEast(e) {
          return this._ne = e instanceof Ui ? new Ui(e.lng, e.lat) : Ui.convert(e), this;
        }
        setSouthWest(e) {
          return this._sw = e instanceof Ui ? new Ui(e.lng, e.lat) : Ui.convert(e), this;
        }
        extend(e) {
          const n = this._sw, o = this._ne;
          let u, l;
          if (e instanceof Ui)
            u = e, l = e;
          else {
            if (!(e instanceof tl))
              return Array.isArray(e) ? e.length === 4 || e.every(Array.isArray) ? this.extend(tl.convert(e)) : this.extend(Ui.convert(e)) : typeof e == "object" && e !== null && e.hasOwnProperty("lat") && (e.hasOwnProperty("lon") || e.hasOwnProperty("lng")) ? this.extend(Ui.convert(e)) : this;
            if (u = e._sw, l = e._ne, !u || !l)
              return this;
          }
          return n || o ? (n.lng = Math.min(u.lng, n.lng), n.lat = Math.min(u.lat, n.lat), o.lng = Math.max(l.lng, o.lng), o.lat = Math.max(l.lat, o.lat)) : (this._sw = new Ui(u.lng, u.lat), this._ne = new Ui(l.lng, l.lat)), this;
        }
        getCenter() {
          return new Ui((this._sw.lng + this._ne.lng) / 2, (this._sw.lat + this._ne.lat) / 2);
        }
        getSouthWest() {
          return this._sw;
        }
        getNorthEast() {
          return this._ne;
        }
        getNorthWest() {
          return new Ui(this.getWest(), this.getNorth());
        }
        getSouthEast() {
          return new Ui(this.getEast(), this.getSouth());
        }
        getWest() {
          return this._sw.lng;
        }
        getSouth() {
          return this._sw.lat;
        }
        getEast() {
          return this._ne.lng;
        }
        getNorth() {
          return this._ne.lat;
        }
        toArray() {
          return [this._sw.toArray(), this._ne.toArray()];
        }
        toString() {
          return `LngLatBounds(${this._sw.toString()}, ${this._ne.toString()})`;
        }
        isEmpty() {
          return !(this._sw && this._ne);
        }
        contains(e) {
          const { lng: n, lat: o } = Ui.convert(e);
          let u = this._sw.lng <= n && n <= this._ne.lng;
          return this._sw.lng > this._ne.lng && (u = this._sw.lng >= n && n >= this._ne.lng), this._sw.lat <= o && o <= this._ne.lat && u;
        }
        static convert(e) {
          if (e)
            return e instanceof tl ? e : new tl(e);
        }
      }
      const f_ = 0, xp = 25.5;
      function gh(r) {
        return Fd * Math.cos(r * Math.PI / 180);
      }
      function ta(r) {
        return (180 + r) / 360;
      }
      function Ta(r) {
        return (180 - 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + r * Math.PI / 360))) / 360;
      }
      function fr(r, e) {
        return r / gh(e);
      }
      function Fr(r) {
        return 360 * r - 180;
      }
      function Os(r) {
        return 360 / Math.PI * Math.atan(Math.exp((180 - 360 * r) * Math.PI / 180)) - 90;
      }
      function vp(r, e) {
        return r * gh(Os(e));
      }
      const Un = 85.051129;
      function p_(r) {
        return Math.cos(vi(si(r, -Un, Un)));
      }
      function c(r, e) {
        const n = si(e, f_, xp), o = Math.pow(2, n);
        return p_(r) * Fd / (512 * o);
      }
      function t(r) {
        return 1 / Math.cos(r * Math.PI / 180);
      }
      function s(r, e = 0) {
        const n = Math.exp(Math.PI * (1 - (r.y + e / Tt) / (1 << r.z) * 2));
        return 80150034 * n / (n * n + 1) / Tt / (1 << r.z);
      }
      class h {
        constructor(e, n, o = 0) {
          this.x = +e, this.y = +n, this.z = +o;
        }
        static fromLngLat(e, n = 0) {
          const o = Ui.convert(e);
          return new h(ta(o.lng), Ta(o.lat), fr(n, o.lat));
        }
        toLngLat() {
          return new Ui(Fr(this.x), Os(this.y));
        }
        toAltitude() {
          return vp(this.z, this.y);
        }
        meterInMercatorCoordinateUnits() {
          return 1 / Fd * t(Os(this.y));
        }
      }
      function _(r, e, n, o, u, l, f, v, S) {
        const D = (e + o) / 2, x = (n + u) / 2, P = new Et(D, x);
        v(P), function(I, M, C, k, V, U) {
          const q = C - V, $ = k - U;
          return Math.abs((k - M) * q - (C - I) * $) / Math.hypot(q, $);
        }(P.x, P.y, l.x, l.y, f.x, f.y) >= S ? (_(r, e, n, D, x, l, P, v, S), _(r, D, x, o, u, P, f, v, S)) : r.push(f);
      }
      function y(r, e, n) {
        let o = r[0], u = o.x, l = o.y;
        e(o);
        const f = [o];
        for (let v = 1; v < r.length; v++) {
          const S = r[v], { x: D, y: x } = S;
          e(S), _(f, u, l, D, x, o, S, e, n), u = D, l = x, o = S;
        }
        return f;
      }
      function T(r, e, n, o) {
        if (o(e, n)) {
          const u = e.add(n)._mult(0.5);
          T(r, e, u, o), T(r, u, n, o);
        } else
          r.push(n);
      }
      function z(r, e) {
        let n = r[0];
        const o = [n];
        for (let u = 1; u < r.length; u++) {
          const l = r[u];
          T(o, n, l, e), n = l;
        }
        return o;
      }
      const R = Math.pow(2, 14) - 1, F = -R - 1;
      function N(r, e) {
        const n = Math.round(r.x * e), o = Math.round(r.y * e);
        return r.x = si(n, F, R), r.y = si(o, F, R), (n < r.x || n > r.x + 1 || o < r.y || o > r.y + 1) && mi("Geometry exceeds allowed extent, reduce your vector tile buffer size"), r;
      }
      function G(r, e, n) {
        const o = r.loadGeometry(), u = r.extent, l = Tt / u;
        if (e && n && n.projection.isReprojectedInTileSpace) {
          const f = 1 << e.z, { scale: v, x: S, y: D, projection: x } = n, P = (I) => {
            const M = Fr((e.x + I.x / u) / f), C = Os((e.y + I.y / u) / f), k = x.project(M, C);
            I.x = (k.x * v - S) * u, I.y = (k.y * v - D) * u;
          };
          for (let I = 0; I < o.length; I++)
            if (r.type !== 1)
              o[I] = y(o[I], P, 1);
            else {
              const M = [];
              for (const C of o[I])
                C.x < 0 || C.x >= u || C.y < 0 || C.y >= u || (P(C), M.push(C));
              o[I] = M;
            }
        }
        for (const f of o)
          for (const v of f)
            N(v, l);
        return o;
      }
      function Z(r, e) {
        return { type: r.type, id: r.id, properties: r.properties, geometry: e ? G(r) : [] };
      }
      function W(r, e, n, o, u) {
        r.emplaceBack(2 * e + (o + 1) / 2, 2 * n + (u + 1) / 2);
      }
      function te(r, e, n) {
        r.emplaceBack(e.x, e.y, e.z, n[0] * 16384, n[1] * 16384, n[2] * 16384);
      }
      class ee {
        constructor(e) {
          this.zoom = e.zoom, this.overscaling = e.overscaling, this.layers = e.layers, this.layerIds = this.layers.map((n) => n.fqid), this.index = e.index, this.hasPattern = !1, this.projection = e.projection, this.layoutVertexArray = new Lo(), this.indexArray = new qs(), this.segments = new Wn(), this.programConfigurations = new Qa(e.layers, { zoom: e.zoom, lut: e.lut }), this.stateDependentLayerIds = this.layers.filter((n) => n.isStateDependent()).map((n) => n.id);
        }
        updateFootprints(e, n) {
        }
        populate(e, n, o, u) {
          const l = this.layers[0], f = [];
          let v = null;
          l.type === "circle" && (v = l.layout.get("circle-sort-key"));
          for (const { feature: D, id: x, index: P, sourceLayerIndex: I } of e) {
            const M = this.layers[0]._featureFilter.needGeometry, C = Z(D, M);
            if (!this.layers[0]._featureFilter.filter(new Tn(this.zoom), C, o))
              continue;
            const k = v ? v.evaluate(C, {}, o) : void 0, V = { id: x, properties: D.properties, type: D.type, sourceLayerIndex: I, index: P, geometry: M ? C.geometry : G(D, o, u), patterns: {}, sortKey: k };
            f.push(V);
          }
          v && f.sort((D, x) => D.sortKey - x.sortKey);
          let S = null;
          u.projection.name === "globe" && (this.globeExtVertexArray = new pu(), S = u.projection);
          for (const D of f) {
            const { geometry: x, index: P, sourceLayerIndex: I } = D, M = e[P].feature;
            this.addFeature(D, x, P, n.availableImages, o, S, n.brightness), n.featureIndex.insert(M, x, P, I, this.index);
          }
        }
        update(e, n, o, u, l, f, v) {
          this.programConfigurations.updatePaintArrays(e, n, l, o, u, f, v);
        }
        isEmpty() {
          return this.layoutVertexArray.length === 0;
        }
        uploadPending() {
          return !this.uploaded || this.programConfigurations.needsUpload;
        }
        upload(e) {
          this.uploaded || (this.layoutVertexBuffer = e.createVertexBuffer(this.layoutVertexArray, r_.members), this.indexBuffer = e.createIndexBuffer(this.indexArray), this.globeExtVertexArray && (this.globeExtVertexBuffer = e.createVertexBuffer(this.globeExtVertexArray, Dd.members))), this.programConfigurations.upload(e), this.uploaded = !0;
        }
        destroy() {
          this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy(), this.globeExtVertexBuffer && this.globeExtVertexBuffer.destroy());
        }
        addFeature(e, n, o, u, l, f, v) {
          for (const S of n)
            for (const D of S) {
              const x = D.x, P = D.y;
              if (x < 0 || x >= Tt || P < 0 || P >= Tt)
                continue;
              if (f) {
                const C = f.projectTilePoint(x, P, l), k = f.upVector(l, x, P), V = this.globeExtVertexArray;
                te(V, C, k), te(V, C, k), te(V, C, k), te(V, C, k);
              }
              const I = this.segments.prepareSegment(4, this.layoutVertexArray, this.indexArray, e.sortKey), M = I.vertexLength;
              W(this.layoutVertexArray, x, P, -1, -1), W(this.layoutVertexArray, x, P, 1, -1), W(this.layoutVertexArray, x, P, 1, 1), W(this.layoutVertexArray, x, P, -1, 1), this.indexArray.emplaceBack(M, M + 1, M + 2), this.indexArray.emplaceBack(M, M + 2, M + 3), I.vertexLength += 4, I.primitiveLength += 2;
            }
          this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, e, o, {}, u, l, v);
        }
      }
      function se(r, e) {
        for (let n = 0; n < r.length; n++)
          if (Ae(e, r[n]))
            return !0;
        for (let n = 0; n < e.length; n++)
          if (Ae(r, e[n]))
            return !0;
        return !!pe(r, e);
      }
      function oe(r, e, n) {
        return !!Ae(r, e) || !!xe(e, r, n);
      }
      function he(r, e) {
        if (r.length === 1)
          return ve(e, r[0]);
        for (let n = 0; n < e.length; n++) {
          const o = e[n];
          for (let u = 0; u < o.length; u++)
            if (Ae(r, o[u]))
              return !0;
        }
        for (let n = 0; n < r.length; n++)
          if (ve(e, r[n]))
            return !0;
        for (let n = 0; n < e.length; n++)
          if (pe(r, e[n]))
            return !0;
        return !1;
      }
      function _e(r, e, n) {
        if (r.length > 1) {
          if (pe(r, e))
            return !0;
          for (let o = 0; o < e.length; o++)
            if (xe(e[o], r, n))
              return !0;
        }
        for (let o = 0; o < r.length; o++)
          if (xe(r[o], e, n))
            return !0;
        return !1;
      }
      function pe(r, e) {
        if (r.length === 0 || e.length === 0)
          return !1;
        for (let n = 0; n < r.length - 1; n++) {
          const o = r[n], u = r[n + 1];
          for (let l = 0; l < e.length - 1; l++)
            if (Me(o, u, e[l], e[l + 1]))
              return !0;
        }
        return !1;
      }
      function Me(r, e, n, o) {
        return On(r, n, o) !== On(e, n, o) && On(r, e, n) !== On(r, e, o);
      }
      function xe(r, e, n) {
        const o = n * n;
        if (e.length === 1)
          return r.distSqr(e[0]) < o;
        for (let u = 1; u < e.length; u++)
          if (we(r, e[u - 1], e[u]) < o)
            return !0;
        return !1;
      }
      function we(r, e, n) {
        const o = e.distSqr(n);
        if (o === 0)
          return r.distSqr(e);
        const u = ((r.x - e.x) * (n.x - e.x) + (r.y - e.y) * (n.y - e.y)) / o;
        return r.distSqr(u < 0 ? e : u > 1 ? n : n.sub(e)._mult(u)._add(e));
      }
      function ve(r, e) {
        let n, o, u, l = !1;
        for (let f = 0; f < r.length; f++) {
          n = r[f];
          for (let v = 0, S = n.length - 1; v < n.length; S = v++)
            o = n[v], u = n[S], o.y > e.y != u.y > e.y && e.x < (u.x - o.x) * (e.y - o.y) / (u.y - o.y) + o.x && (l = !l);
        }
        return l;
      }
      function Ae(r, e) {
        let n = !1;
        for (let o = 0, u = r.length - 1; o < r.length; u = o++) {
          const l = r[o], f = r[u];
          l.y > e.y != f.y > e.y && e.x < (f.x - l.x) * (e.y - l.y) / (f.y - l.y) + l.x && (n = !n);
        }
        return n;
      }
      function Oe(r, e, n, o, u) {
        for (const f of r)
          if (e <= f.x && n <= f.y && o >= f.x && u >= f.y)
            return !0;
        const l = [new Et(e, n), new Et(e, u), new Et(o, u), new Et(o, n)];
        if (r.length > 2) {
          for (const f of l)
            if (Ae(r, f))
              return !0;
        }
        for (let f = 0; f < r.length - 1; f++)
          if (Xe(r[f], r[f + 1], l))
            return !0;
        return !1;
      }
      function Xe(r, e, n) {
        const o = n[0], u = n[2];
        if (r.x < o.x && e.x < o.x || r.x > u.x && e.x > u.x || r.y < o.y && e.y < o.y || r.y > u.y && e.y > u.y)
          return !1;
        const l = On(r, e, n[0]);
        return l !== On(r, e, n[1]) || l !== On(r, e, n[2]) || l !== On(r, e, n[3]);
      }
      function He(r, e, n, o, u, l) {
        let f = e.y - r.y, v = r.x - e.x;
        if (l = l || 0) {
          const S = f * f + v * v;
          if (S === 0)
            return !0;
          const D = Math.sqrt(S);
          f /= D, v /= D;
        }
        return !((n.x - r.x) * f + (n.y - r.y) * v - l < 0 || (o.x - r.x) * f + (o.y - r.y) * v - l < 0 || (u.x - r.x) * f + (u.y - r.y) * v - l < 0);
      }
      function ke(r, e, n, o, u, l, f) {
        return !(He(r, e, o, u, l, f) || He(e, n, o, u, l, f) || He(n, r, o, u, l, f) || He(o, u, r, e, n, f) || He(u, l, r, e, n, f) || He(l, o, r, e, n, f));
      }
      function Ne(r, e, n) {
        const o = e.paint.get(r).value;
        return o.kind === "constant" ? o.value : n.programConfigurations.get(e.id).getMaxValue(r);
      }
      function st(r) {
        return Math.sqrt(r[0] * r[0] + r[1] * r[1]);
      }
      function ut(r, e, n, o, u) {
        if (!e[0] && !e[1])
          return r;
        const l = Et.convert(e)._mult(u);
        n === "viewport" && l._rotate(-o);
        const f = [];
        for (let v = 0; v < r.length; v++)
          f.push(r[v].sub(l));
        return f;
      }
      function xt(r, e, n, o) {
        const u = Et.convert(r)._mult(o);
        return e === "viewport" && u._rotate(-n), u;
      }
      let Ge, lt;
      Ft(ee, "CircleBucket", { omit: ["layers"] });
      var Je, _t = { exports: {} }, ct = (Je || (Je = 1, function(r, e) {
        (function(n) {
          function o(l, f, v) {
            var S = u(256 * l, 256 * (f = Math.pow(2, v) - f - 1), v), D = u(256 * (l + 1), 256 * (f + 1), v);
            return S[0] + "," + S[1] + "," + D[0] + "," + D[1];
          }
          function u(l, f, v) {
            var S = 2 * Math.PI * 6378137 / 256 / Math.pow(2, v);
            return [l * S - 2 * Math.PI * 6378137 / 2, f * S - 2 * Math.PI * 6378137 / 2];
          }
          n.getURL = function(l, f, v, S, D, x) {
            return x = x || {}, l + "?" + ["bbox=" + o(v, S, D), "format=" + (x.format || "image/png"), "service=" + (x.service || "WMS"), "version=" + (x.version || "1.1.1"), "request=" + (x.request || "GetMap"), "srs=" + (x.srs || "EPSG:3857"), "width=" + (x.width || 256), "height=" + (x.height || 256), "layers=" + f].join("&");
          }, n.getTileBBox = o, n.getMercCoords = u, Object.defineProperty(n, "__esModule", { value: !0 });
        })(e);
      }(0, _t.exports)), _t.exports);
      class nt {
        constructor(e, n, o) {
          this.z = e, this.x = n, this.y = o, this.key = zt(0, e, e, n, o);
        }
        equals(e) {
          return this.z === e.z && this.x === e.x && this.y === e.y;
        }
        url(e, n) {
          const o = ct.getTileBBox(this.x, this.y, this.z), u = function(l, f, v) {
            let S, D = "";
            for (let x = l; x > 0; x--)
              S = 1 << x - 1, D += (f & S ? 1 : 0) + (v & S ? 2 : 0);
            return D;
          }(this.z, this.x, this.y);
          return e[(this.x + this.y) % e.length].replace("{prefix}", (this.x % 16).toString(16) + (this.y % 16).toString(16)).replace(/{z}/g, String(this.z)).replace(/{x}/g, String(this.x)).replace(/{y}/g, String(n === "tms" ? Math.pow(2, this.z) - this.y - 1 : this.y)).replace("{quadkey}", u).replace("{bbox-epsg-3857}", o);
        }
        toString() {
          return `${this.z}/${this.x}/${this.y}`;
        }
      }
      class Lt {
        constructor(e, n) {
          this.wrap = e, this.canonical = n, this.key = zt(e, n.z, n.z, n.x, n.y);
        }
      }
      class bt {
        constructor(e, n, o, u, l) {
          this.overscaledZ = e, this.wrap = n, this.canonical = new nt(o, +u, +l), this.key = n === 0 && e === o ? this.canonical.key : zt(n, e, o, u, l);
        }
        equals(e) {
          return this.overscaledZ === e.overscaledZ && this.wrap === e.wrap && this.canonical.equals(e.canonical);
        }
        scaledTo(e) {
          const n = this.canonical.z - e;
          return e > this.canonical.z ? new bt(e, this.wrap, this.canonical.z, this.canonical.x, this.canonical.y) : new bt(e, this.wrap, e, this.canonical.x >> n, this.canonical.y >> n);
        }
        calculateScaledKey(e, n = !0) {
          if (this.overscaledZ === e && n)
            return this.key;
          if (e > this.canonical.z)
            return zt(this.wrap * +n, e, this.canonical.z, this.canonical.x, this.canonical.y);
          {
            const o = this.canonical.z - e;
            return zt(this.wrap * +n, e, e, this.canonical.x >> o, this.canonical.y >> o);
          }
        }
        isChildOf(e) {
          if (e.wrap !== this.wrap)
            return !1;
          const n = this.canonical.z - e.canonical.z;
          return e.overscaledZ === 0 || e.overscaledZ < this.overscaledZ && e.canonical.z < this.canonical.z && e.canonical.x === this.canonical.x >> n && e.canonical.y === this.canonical.y >> n;
        }
        children(e) {
          if (this.overscaledZ >= e)
            return [new bt(this.overscaledZ + 1, this.wrap, this.canonical.z, this.canonical.x, this.canonical.y)];
          const n = this.canonical.z + 1, o = 2 * this.canonical.x, u = 2 * this.canonical.y;
          return [new bt(n, this.wrap, n, o, u), new bt(n, this.wrap, n, o + 1, u), new bt(n, this.wrap, n, o, u + 1), new bt(n, this.wrap, n, o + 1, u + 1)];
        }
        isLessThan(e) {
          return this.wrap < e.wrap || !(this.wrap > e.wrap) && (this.overscaledZ < e.overscaledZ || !(this.overscaledZ > e.overscaledZ) && (this.canonical.x < e.canonical.x || !(this.canonical.x > e.canonical.x) && this.canonical.y < e.canonical.y));
        }
        wrapped() {
          return new bt(this.overscaledZ, 0, this.canonical.z, this.canonical.x, this.canonical.y);
        }
        unwrapTo(e) {
          return new bt(this.overscaledZ, e, this.canonical.z, this.canonical.x, this.canonical.y);
        }
        overscaleFactor() {
          return Math.pow(2, this.overscaledZ - this.canonical.z);
        }
        toUnwrapped() {
          return new Lt(this.wrap, this.canonical);
        }
        toString() {
          return `${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}`;
        }
      }
      function zt(r, e, n, o, u) {
        const l = 1 << Math.min(n, 22);
        let f = l * (u % l) + o % l;
        return r && n < 22 && (f += l * l * ((r < 0 ? -2 * r - 1 : 2 * r) % (1 << 2 * (22 - n)))), 16 * (32 * f + n) + (e - n);
      }
      const Bt = [(r) => {
        let e = r.canonical.x - 1, n = r.wrap;
        return e < 0 && (e = (1 << r.canonical.z) - 1, n--), new bt(r.overscaledZ, n, r.canonical.z, e, r.canonical.y);
      }, (r) => {
        let e = r.canonical.x + 1, n = r.wrap;
        return e === 1 << r.canonical.z && (e = 0, n++), new bt(r.overscaledZ, n, r.canonical.z, e, r.canonical.y);
      }, (r) => new bt(r.overscaledZ, r.wrap, r.canonical.z, r.canonical.x, (r.canonical.y === 0 ? 1 << r.canonical.z : r.canonical.y) - 1), (r) => new bt(r.overscaledZ, r.wrap, r.canonical.z, r.canonical.x, r.canonical.y === (1 << r.canonical.z) - 1 ? 0 : r.canonical.y + 1)];
      Ft(nt, "CanonicalTileID"), Ft(bt, "OverscaledTileID", { omit: ["projMatrix", "expandedProjMatrix"] });
      const oi = qi([{ type: "Float32", name: "a_globe_pos", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }]), { members: $t } = oi, Xt = qi([{ name: "a_pos_3", components: 3, type: "Int16" }]);
      var ai = qi([{ name: "a_pos", type: "Int16", components: 2 }]);
      class zi {
        constructor(e, n) {
          this.pos = e, this.dir = n;
        }
        intersectsPlane(e, n, o) {
          const u = De.vec3.dot(n, this.dir);
          if (Math.abs(u) < 1e-6)
            return !1;
          const l = ((e[0] - this.pos[0]) * n[0] + (e[1] - this.pos[1]) * n[1] + (e[2] - this.pos[2]) * n[2]) / u;
          return o[0] = this.pos[0] + this.dir[0] * l, o[1] = this.pos[1] + this.dir[1] * l, o[2] = this.pos[2] + this.dir[2] * l, !0;
        }
        closestPointOnSphere(e, n, o) {
          if (De.vec3.equals(this.pos, e) || n === 0)
            return o[0] = o[1] = o[2] = 0, !1;
          const [u, l, f] = this.dir, v = this.pos[0] - e[0], S = this.pos[1] - e[1], D = this.pos[2] - e[2], x = u * u + l * l + f * f, P = 2 * (v * u + S * l + D * f), I = P * P - 4 * x * (v * v + S * S + D * D - n * n);
          if (I < 0) {
            const M = Math.max(-P / 2, 0), C = v + u * M, k = S + l * M, V = D + f * M, U = Math.hypot(C, k, V);
            return o[0] = C * n / U, o[1] = k * n / U, o[2] = V * n / U, !1;
          }
          {
            const M = (-P - Math.sqrt(I)) / (2 * x);
            if (M < 0) {
              const C = Math.hypot(v, S, D);
              return o[0] = v * n / C, o[1] = S * n / C, o[2] = D * n / C, !1;
            }
            return o[0] = v + u * M, o[1] = S + l * M, o[2] = D + f * M, !0;
          }
        }
      }
      class wi {
        constructor(e, n, o, u, l) {
          this.TL = e, this.TR = n, this.BR = o, this.BL = u, this.horizon = l;
        }
        static fromInvProjectionMatrix(e, n, o) {
          const u = [-1, 1, 1], l = [1, 1, 1], f = [1, -1, 1], v = [-1, -1, 1], S = De.vec3.transformMat4(u, u, e), D = De.vec3.transformMat4(l, l, e), x = De.vec3.transformMat4(f, f, e), P = De.vec3.transformMat4(v, v, e);
          return new wi(S, D, x, P, n / o);
        }
      }
      function mn(r, e, n) {
        let o = 1 / 0, u = -1 / 0;
        const l = [];
        for (const f of r) {
          De.vec3.sub(l, f, e);
          const v = De.vec3.dot(l, n);
          o = Math.min(o, v), u = Math.max(u, v);
        }
        return [o, u];
      }
      function Mn(r, e) {
        let n = !0;
        for (let o = 0; o < r.planes.length; o++) {
          const u = r.planes[o];
          let l = 0;
          for (let f = 0; f < e.length; f++)
            l += De.vec3.dot(u, e[f]) + u[3] >= 0;
          if (l === 0)
            return 0;
          l !== e.length && (n = !1);
        }
        return n ? 2 : 1;
      }
      function Xi(r, e) {
        for (const n of r.projections) {
          const o = mn(e, r.points[0], n.axis);
          if (n.projection[1] < o[0] || n.projection[0] > o[1])
            return 0;
        }
        return 1;
      }
      function sn(r, e) {
        let n = 0;
        const o = [0, 0, 0, 0];
        for (let u = 0; u < r.length; u++)
          o[0] = r[u][0], o[1] = r[u][1], o[2] = r[u][2], o[3] = 1, De.vec4.dot(o, e) >= 0 && n++;
        return n;
      }
      class _i {
        constructor(e, n) {
          this.points = e || new Array(8).fill([0, 0, 0]), this.planes = n || new Array(6).fill([0, 0, 0, 0]), this.bounds = Jt.fromPoints(this.points), this.projections = [], this.frustumEdges = [De.vec3.sub([], this.points[2], this.points[3]), De.vec3.sub([], this.points[0], this.points[3]), De.vec3.sub([], this.points[4], this.points[0]), De.vec3.sub([], this.points[5], this.points[1]), De.vec3.sub([], this.points[6], this.points[2]), De.vec3.sub([], this.points[7], this.points[3])];
          for (const o of this.frustumEdges) {
            const u = [0, -o[2], o[1]], l = [o[2], 0, -o[0]];
            this.projections.push({ axis: u, projection: mn(this.points, this.points[0], u) }), this.projections.push({ axis: l, projection: mn(this.points, this.points[0], l) });
          }
        }
        static fromInvProjectionMatrix(e, n, o, u) {
          const l = Math.pow(2, o), f = [[-1, 1, -1, 1], [1, 1, -1, 1], [1, -1, -1, 1], [-1, -1, -1, 1], [-1, 1, 1, 1], [1, 1, 1, 1], [1, -1, 1, 1], [-1, -1, 1, 1]].map((D) => {
            const x = De.vec4.transformMat4([], D, e), P = 1 / x[3] / n * l;
            return De.vec4.mul(x, x, [P, P, u ? 1 / x[3] : P, P]);
          }), v = [[0, 1, 2], [6, 5, 4], [0, 3, 7], [2, 1, 5], [3, 2, 6], [0, 4, 5]].map((D) => {
            const x = De.vec3.sub([], f[D[0]], f[D[1]]), P = De.vec3.sub([], f[D[2]], f[D[1]]), I = De.vec3.normalize([], De.vec3.cross([], x, P)), M = -De.vec3.dot(I, f[D[1]]);
            return I.concat(M);
          }), S = [];
          for (let D = 0; D < f.length; D++)
            S.push([f[D][0], f[D][1], f[D][2]]);
          return new _i(S, v);
        }
        intersectsPrecise(e, n, o) {
          for (let u = 0; u < n.length; u++)
            if (!sn(e, n[u]))
              return 0;
          for (let u = 0; u < this.planes.length; u++)
            if (!sn(e, this.planes[u]))
              return 0;
          for (const u of o)
            for (const l of this.frustumEdges) {
              const f = De.vec3.cross([], u, l), v = De.vec3.length(f);
              if (v === 0)
                continue;
              De.vec3.scale(f, f, 1 / v);
              const S = mn(this.points, this.points[0], f), D = mn(e, this.points[0], f);
              if (S[0] > D[1] || D[0] > S[1])
                return 0;
            }
          return 1;
        }
        containsPoint(e) {
          for (const n of this.planes) {
            const o = n[3];
            if (De.vec3.dot([n[0], n[1], n[2]], e) + o < 0)
              return !1;
          }
          return !0;
        }
      }
      class Jt {
        static fromPoints(e) {
          const n = [1 / 0, 1 / 0, 1 / 0], o = [-1 / 0, -1 / 0, -1 / 0];
          for (const u of e)
            De.vec3.min(n, n, u), De.vec3.max(o, o, u);
          return new Jt(n, o);
        }
        static fromTileIdAndHeight(e, n, o) {
          const u = 1 << e.canonical.z, l = e.canonical.x, f = e.canonical.y;
          return new Jt([l / u, f / u, n], [(l + 1) / u, (f + 1) / u, o]);
        }
        static applyTransform(e, n) {
          const o = e.getCorners();
          for (let u = 0; u < o.length; ++u)
            De.vec3.transformMat4(o[u], o[u], n);
          return Jt.fromPoints(o);
        }
        static applyTransformFast(e, n) {
          const o = [n[12], n[13], n[14]], u = [...o];
          for (let l = 0; l < 3; l++)
            for (let f = 0; f < 3; f++) {
              const v = n[4 * f + l], S = v * e.min[f], D = v * e.max[f];
              o[l] += Math.min(S, D), u[l] += Math.max(S, D);
            }
          return new Jt(o, u);
        }
        static projectAabbCorners(e, n) {
          const o = e.getCorners();
          for (let u = 0; u < o.length; ++u)
            De.vec3.transformMat4(o[u], o[u], n);
          return o;
        }
        constructor(e, n) {
          this.min = e, this.max = n, this.center = De.vec3.scale([], De.vec3.add([], this.min, this.max), 0.5);
        }
        quadrant(e) {
          const n = [e % 2 == 0, e < 2], o = De.vec3.clone(this.min), u = De.vec3.clone(this.max);
          for (let l = 0; l < n.length; l++)
            o[l] = n[l] ? this.min[l] : this.center[l], u[l] = n[l] ? this.center[l] : this.max[l];
          return u[2] = this.max[2], new Jt(o, u);
        }
        distanceX(e) {
          return Math.max(Math.min(this.max[0], e[0]), this.min[0]) - e[0];
        }
        distanceY(e) {
          return Math.max(Math.min(this.max[1], e[1]), this.min[1]) - e[1];
        }
        distanceZ(e) {
          return Math.max(Math.min(this.max[2], e[2]), this.min[2]) - e[2];
        }
        getCorners() {
          const e = this.min, n = this.max;
          return [[e[0], e[1], e[2]], [n[0], e[1], e[2]], [n[0], n[1], e[2]], [e[0], n[1], e[2]], [e[0], e[1], n[2]], [n[0], e[1], n[2]], [n[0], n[1], n[2]], [e[0], n[1], n[2]]];
        }
        intersects(e) {
          return this.intersectsAabb(e.bounds) ? Mn(e, this.getCorners()) : 0;
        }
        intersectsFlat(e) {
          return this.intersectsAabb(e.bounds) ? Mn(e, [[this.min[0], this.min[1], 0], [this.max[0], this.min[1], 0], [this.max[0], this.max[1], 0], [this.min[0], this.max[1], 0]]) : 0;
        }
        intersectsPrecise(e, n) {
          return n || this.intersects(e) ? Xi(e, this.getCorners()) : 0;
        }
        intersectsPreciseFlat(e, n) {
          return n || this.intersectsFlat(e) ? Xi(e, [[this.min[0], this.min[1], 0], [this.max[0], this.min[1], 0], [this.max[0], this.max[1], 0], [this.min[0], this.max[1], 0]]) : 0;
        }
        intersectsAabb(e) {
          for (let n = 0; n < 3; ++n)
            if (this.min[n] > e.max[n] || e.min[n] > this.max[n])
              return !1;
          return !0;
        }
        intersectsAabbXY(e) {
          return !(this.min[0] > e.max[0] || e.min[0] > this.max[0] || this.min[1] > e.max[1] || e.min[1] > this.max[1]);
        }
        encapsulate(e) {
          for (let n = 0; n < 3; n++)
            this.min[n] = Math.min(this.min[n], e.min[n]), this.max[n] = Math.max(this.max[n], e.max[n]);
        }
        encapsulatePoint(e) {
          for (let n = 0; n < 3; n++)
            this.min[n] = Math.min(this.min[n], e[n]), this.max[n] = Math.max(this.max[n], e[n]);
        }
        closestPoint(e) {
          return [Math.max(Math.min(this.max[0], e[0]), this.min[0]), Math.max(Math.min(this.max[1], e[1]), this.min[1]), Math.max(Math.min(this.max[2], e[2]), this.min[2])];
        }
      }
      function ji(r) {
        return r * dr / _c;
      }
      Ft(Jt, "Aabb");
      const Yi = [new Jt([uo, uo, uo], [fo, fo, fo]), new Jt([uo, uo, uo], [0, 0, fo]), new Jt([0, uo, uo], [fo, 0, fo]), new Jt([uo, 0, uo], [0, fo, fo]), new Jt([0, 0, uo], [fo, fo, fo])];
      function In(r, e, n, o = !0) {
        const u = De.vec3.scale([], r._camera.position, r.worldSize), l = [e, n, 1, 1];
        De.vec4.transformMat4(l, l, r.pixelMatrixInverse), De.vec4.scale(l, l, 1 / l[3]);
        const f = De.vec3.sub([], l, u), v = De.vec3.normalize([], f), S = r.globeMatrix, D = [S[12], S[13], S[14]], x = De.vec3.sub([], D, u), P = De.vec3.length(x), I = De.vec3.normalize([], x), M = r.worldSize / (2 * Math.PI), C = De.vec3.dot(I, v), k = Math.asin(M / P);
        if (k < Math.acos(C)) {
          if (!o)
            return null;
          const Se = [], me = [];
          De.vec3.scale(Se, v, P / C), De.vec3.normalize(me, De.vec3.sub(me, Se, x)), De.vec3.normalize(v, De.vec3.add(v, x, De.vec3.scale(v, me, Math.tan(k) * P)));
        }
        const V = [];
        new zi(u, v).closestPointOnSphere(D, M, V);
        const U = De.vec3.normalize([], zs(S, 0)), q = De.vec3.normalize([], zs(S, 1)), $ = De.vec3.normalize([], zs(S, 2)), H = De.vec3.dot(U, V), K = De.vec3.dot(q, V), Q = De.vec3.dot($, V), ie = kn(Math.asin(-K / M));
        let fe = kn(Math.atan2(H, Q));
        fe = r.center.lng + function(Se, me) {
          const Ee = (me - Se + 180) % 360 - 180;
          return Ee < -180 ? Ee + 360 : Ee;
        }(r.center.lng, fe);
        const de = ta(fe), ue = si(Ta(ie), 0, 1);
        return new h(de, ue);
      }
      class Fs {
        constructor(e, n, o) {
          this.a = De.vec3.sub([], e, o), this.b = De.vec3.sub([], n, o), this.center = o;
          const u = De.vec3.normalize([], this.a), l = De.vec3.normalize([], this.b);
          this.angle = Math.acos(De.vec3.dot(u, l));
        }
      }
      function pr(r, e) {
        if (r.angle === 0)
          return null;
        let n;
        return n = r.a[e] === 0 ? 1 / r.angle * 0.5 * Math.PI : 1 / r.angle * Math.atan(r.b[e] / r.a[e] / Math.sin(r.angle) - 1 / Math.tan(r.angle)), n < 0 || n > 1 ? null : function(o, u, l, f) {
          const v = Math.sin(l);
          return o * (Math.sin((1 - f) * l) / v) + u * (Math.sin(f * l) / v);
        }(r.a[e], r.b[e], r.angle, si(n, 0, 1)) + r.center[e];
      }
      function ts(r) {
        if (r.z <= 1)
          return Yi[r.z + 2 * r.y + r.x];
        const e = _n(dn(r));
        return Jt.fromPoints(e);
      }
      function Ps(r, e, n) {
        return De.vec3.scale(r, r, 1 - n), De.vec3.scaleAndAdd(r, r, e, n);
      }
      function Qs(r, e, n) {
        for (const o of r)
          De.vec3.transformMat4(o, o, e), De.vec3.scale(o, o, n);
      }
      function jn(r, e, n, o) {
        const u = e / r.worldSize, l = r.globeMatrix;
        if (n.z <= 1) {
          const de = ts(n).getCorners();
          return Qs(de, l, u), Jt.fromPoints(de);
        }
        const f = dn(n, o), v = _n(f, dr + ji(r._tileCoverLift));
        Qs(v, l, u);
        const S = Number.MAX_VALUE, D = [-S, -S, -S], x = [S, S, S];
        if (f.contains(r.center)) {
          for (const Se of v)
            De.vec3.min(x, x, Se), De.vec3.max(D, D, Se);
          D[2] = 0;
          const de = r.point, ue = [de.x * u, de.y * u, 0];
          return De.vec3.min(x, x, ue), De.vec3.max(D, D, ue), new Jt(x, D);
        }
        if (r._tileCoverLift > 0) {
          for (const de of v)
            De.vec3.min(x, x, de), De.vec3.max(D, D, de);
          return new Jt(x, D);
        }
        const P = [l[12] * u, l[13] * u, l[14] * u], I = f.getCenter(), M = si(r.center.lat, -Un, Un), C = si(I.lat, -Un, Un), k = ta(r.center.lng), V = Ta(M);
        let U = k - ta(I.lng);
        const q = V - Ta(C);
        U > 0.5 ? U -= 1 : U < -0.5 && (U += 1);
        let $ = 0;
        if (Math.abs(U) > Math.abs(q))
          $ = U >= 0 ? 1 : 3;
        else {
          $ = q >= 0 ? 0 : 2;
          const de = [l[4] * u, l[5] * u, l[6] * u], ue = -Math.sin(vi(q >= 0 ? f.getSouth() : f.getNorth())) * dr;
          De.vec3.scaleAndAdd(P, P, de, ue);
        }
        const H = v[$], K = v[($ + 1) % 4], Q = new Fs(H, K, P), ie = [pr(Q, 0) || H[0], pr(Q, 1) || H[1], pr(Q, 2) || H[2]], fe = mr(r.zoom);
        if (fe > 0) {
          const de = function({ x: Se, y: me, z: Ee }, ze, Ie, Re, Ve) {
            const Ue = 1 / (1 << Ee);
            let Fe = Se * Ue, et = Fe + Ue, dt = me * Ue, tt = dt + Ue, Mt = 0;
            const wt = (Fe + et) / 2 - Re;
            return wt > 0.5 ? Mt = -1 : wt < -0.5 && (Mt = 1), Fe = ((Fe + Mt) * ze - (Re *= ze)) * Ie + Re, et = ((et + Mt) * ze - Re) * Ie + Re, dt = (dt * ze - (Ve *= ze)) * Ie + Ve, tt = (tt * ze - Ve) * Ie + Ve, [[Fe, tt, 0], [et, tt, 0], [et, dt, 0], [Fe, dt, 0]];
          }(n, e, r._pixelsPerMercatorPixel, k, V);
          for (let Se = 0; Se < v.length; Se++)
            Ps(v[Se], de[Se], fe);
          const ue = De.vec3.add([], de[$], de[($ + 1) % 4]);
          De.vec3.scale(ue, ue, 0.5), Ps(ie, ue, fe);
        }
        for (const de of v)
          De.vec3.min(x, x, de), De.vec3.max(D, D, de);
        return x[2] = Math.min(H[2], K[2]), De.vec3.min(x, x, ie), De.vec3.max(D, D, ie), new Jt(x, D);
      }
      function dn({ x: r, y: e, z: n }, o = !1) {
        const u = 1 / (1 << n), l = new Ui(Fr(r * u), e === (1 << n) - 1 && o ? -90 : Os((e + 1) * u)), f = new Ui(Fr((r + 1) * u), e === 0 && o ? 90 : Os(e * u));
        return new tl(l, f);
      }
      function _n(r, e = dr) {
        const n = vi(r.getNorth()), o = vi(r.getSouth()), u = Math.cos(n), l = Math.cos(o), f = Math.sin(n), v = Math.sin(o), S = r.getWest(), D = r.getEast();
        return [mc(l, v, S, e), mc(l, v, D, e), mc(u, f, D, e), mc(u, f, S, e)];
      }
      function Ri(r, e, n, o) {
        const u = 1 << n.z, l = (r / Tt + n.x) / u;
        return el(Os((e / Tt + n.y) / u), Fr(l), o);
      }
      function Gn({ min: r, max: e }) {
        return yp / Math.max(e[0] - r[0], e[1] - r[1], e[2] - r[2]);
      }
      const Bs = new Float64Array(16);
      function cn(r) {
        const e = Gn(r), n = De.mat4.fromScaling(Bs, [e, e, e]);
        return De.mat4.translate(n, n, De.vec3.negate([], r.min));
      }
      function er(r) {
        const e = De.mat4.fromTranslation(Bs, r.min), n = 1 / Gn(r);
        return De.mat4.scale(e, e, [n, n, n]);
      }
      function eo(r) {
        const e = Tt / (2 * Math.PI);
        return r / (2 * Math.PI) / e;
      }
      function Br(r, e) {
        return Tt / (512 * Math.pow(2, r)) * Gn(ts(e));
      }
      function Ma(r, e, n, o, u) {
        const l = eo(n), f = [r, e, -n / (2 * Math.PI)], v = De.mat4.identity(new Float64Array(16));
        return De.mat4.translate(v, v, f), De.mat4.scale(v, v, [l, l, l]), De.mat4.rotateX(v, v, vi(-u)), De.mat4.rotateY(v, v, vi(-o)), v;
      }
      function mr(r) {
        return fs(Su, gp, r);
      }
      function ko(r, e) {
        const n = el(e.lat, e.lng), o = function(l) {
          const f = el(l._center.lat, l._center.lng), v = De.vec3.fromValues(0, 1, 0);
          let S = De.vec3.cross([], v, f);
          const D = De.mat4.fromRotation([], -l.angle, f);
          S = De.vec3.transformMat4(S, S, D), De.mat4.fromRotation(D, -l._pitch, S);
          const x = De.vec3.normalize([], f);
          return De.vec3.scale(x, x, ji(l.cameraToCenterDistance / l.pixelsPerMeter)), De.vec3.transformMat4(x, x, D), De.vec3.add([], f, x);
        }(r), u = De.vec3.subtract([], o, n);
        return De.vec3.angle(u, n);
      }
      function Nr(r, e) {
        return ko(r, e) > Math.PI / 2 * 1.01;
      }
      const il = vi(85), ia = Math.cos(il), Ll = Math.sin(il), yh = De.mat4.create(), Pu = (r) => {
        const e = [];
        return r.paint.get("circle-pitch-alignment") === "map" && e.push("PITCH_WITH_MAP"), r.paint.get("circle-pitch-scale") === "map" && e.push("SCALE_WITH_MAP"), e;
      };
      function Au(r, e, n, o, u, l, f, v, S) {
        if (l && r.queryGeometry.isAboveHorizon)
          return !1;
        l && (S *= r.pixelToTileUnitsFactor);
        const D = r.tileID.canonical, x = n.projection.upVectorScale(D, n.center.lat, n.worldSize).metersToTile;
        for (const P of e)
          for (const I of P) {
            const M = I.add(v), C = u && n.elevation ? n.elevation.exaggeration() * u.getElevationAt(M.x, M.y, !0) : 0, k = n.projection.projectTilePoint(M.x, M.y, D);
            if (C > 0) {
              const $ = n.projection.upVector(D, M.x, M.y);
              k.x += $[0] * x * C, k.y += $[1] * x * C, k.z += $[2] * x * C;
            }
            const V = l ? M : Ew(k.x, k.y, k.z, o), U = l ? r.tilespaceRays.map(($) => Aw($, C)) : r.queryGeometry.screenGeometry, q = De.vec4.transformMat4([], [k.x, k.y, k.z, 1], o);
            if (!f && l ? S *= q[3] / n.cameraToCenterDistance : f && !l && (S *= n.cameraToCenterDistance / q[3]), l) {
              const $ = Os((I.y / Tt + D.y) / (1 << D.z));
              S /= n.projection.pixelsPerMeter($, 1) / fr(1, $);
            }
            if (oe(U, V, S))
              return !0;
          }
        return !1;
      }
      function Ew(r, e, n, o) {
        const u = De.vec4.transformMat4([], [r, e, n, 1], o);
        return new Et(u[0] / u[3], u[1] / u[3]);
      }
      const My = De.vec3.fromValues(0, 0, 0), Pw = De.vec3.fromValues(0, 0, 1);
      function Aw(r, e) {
        const n = De.vec3.create();
        return My[2] = e, r.intersectsPlane(My, Pw, n), new Et(n[0], n[1]);
      }
      class Sy extends ee {
      }
      let Ey, Py, Ay, Cy;
      function Iy(r, { width: e, height: n }, o, u) {
        if (u) {
          if (u instanceof Uint8ClampedArray)
            u = new Uint8Array(u.buffer);
          else if (u.length !== e * n * o)
            throw new RangeError("mismatched image size");
        } else
          u = new Uint8Array(e * n * o);
        return r.width = e, r.height = n, r.data = u, r;
      }
      function Ly(r, e, n) {
        const { width: o, height: u } = e;
        o === r.width && u === r.height || (m_(r, e, { x: 0, y: 0 }, { x: 0, y: 0 }, { width: Math.min(r.width, o), height: Math.min(r.height, u) }, n, null), r.width = o, r.height = u, r.data = e.data);
      }
      function m_(r, e, n, o, u, l, f, v) {
        if (u.width === 0 || u.height === 0)
          return e;
        if (u.width > r.width || u.height > r.height || n.x > r.width - u.width || n.y > r.height - u.height)
          throw new RangeError("out of range source coordinates for image copy");
        if (u.width > e.width || u.height > e.height || o.x > e.width - u.width || o.y > e.height - u.height)
          throw new RangeError("out of range destination coordinates for image copy");
        const S = r.data, D = e.data, x = l === 4 && v;
        for (let P = 0; P < u.height; P++) {
          const I = ((n.y + P) * r.width + n.x) * l, M = ((o.y + P) * e.width + o.x) * l;
          if (x)
            for (let C = 0; C < u.width; C++) {
              const k = I + C * l + 3, V = M + C * l;
              D[V + 0] = 255, D[V + 1] = 255, D[V + 2] = 255, D[V + 3] = S[k];
            }
          else if (f)
            for (let C = 0; C < u.width; C++) {
              const k = I + C * l, V = M + C * l, U = S[k + 3], q = new ki(S[k + 0] / 255 * U, S[k + 1] / 255 * U, S[k + 2] / 255 * U, U).toRenderColor(f).toArray();
              D[V + 0] = q[0], D[V + 1] = q[1], D[V + 2] = q[2], D[V + 3] = q[3];
            }
          else
            for (let C = 0; C < u.width * l; C++)
              D[M + C] = S[I + C];
        }
        return e;
      }
      Ft(Sy, "HeatmapBucket", { omit: ["layers"] });
      class gc {
        constructor(e, n) {
          Iy(this, e, 1, n);
        }
        resize(e) {
          Ly(this, new gc(e), 1);
        }
        clone() {
          return new gc({ width: this.width, height: this.height }, new Uint8Array(this.data));
        }
        static copy(e, n, o, u, l) {
          m_(e, n, o, u, l, 1, null);
        }
      }
      class _r {
        constructor(e, n) {
          Iy(this, e, 4, n);
        }
        resize(e) {
          Ly(this, new _r(e), 4);
        }
        replace(e, n) {
          n ? this.data.set(e) : this.data = e instanceof Uint8ClampedArray ? new Uint8Array(e.buffer) : e;
        }
        clone() {
          return new _r({ width: this.width, height: this.height }, new Uint8Array(this.data));
        }
        static copy(e, n, o, u, l, f, v) {
          m_(e, n, o, u, l, 4, f, v);
        }
      }
      class zy {
        constructor(e, n) {
          this.width = e.width, this.height = e.height, this.data = n instanceof Uint8Array ? new Float32Array(n.buffer) : n;
        }
      }
      function Bd(r) {
        const e = {}, n = r.resolution || 256, o = r.clips ? r.clips.length : 1, u = r.image || new _r({ width: n, height: o }), l = (f, v, S) => {
          e[r.evaluationKey] = S;
          const D = r.expression.evaluate(e);
          D && (u.data[f + v + 0] = Math.floor(255 * D.r / D.a), u.data[f + v + 1] = Math.floor(255 * D.g / D.a), u.data[f + v + 2] = Math.floor(255 * D.b / D.a), u.data[f + v + 3] = Math.floor(255 * D.a));
        };
        if (r.clips)
          for (let f = 0, v = 0; f < o; ++f, v += 4 * n)
            for (let S = 0, D = 0; S < n; S++, D += 4) {
              const x = S / (n - 1), { start: P, end: I } = r.clips[f];
              l(v, D, P * (1 - x) + I * x);
            }
        else
          for (let f = 0, v = 0; f < n; f++, v += 4)
            l(0, v, f / (n - 1));
        return u;
      }
      Ft(gc, "AlphaImage"), Ft(_r, "RGBAImage");
      const Cw = qi([{ name: "a_pos", components: 2, type: "Int16" }], 4), { members: Iw } = Cw;
      function Nd(r, e, n = 2) {
        const o = e && e.length, u = o ? e[0] * n : r.length;
        let l = Dy(r, 0, u, n, !0);
        const f = [];
        if (!l || l.next === l.prev)
          return f;
        let v, S, D;
        if (o && (l = function(x, P, I, M) {
          const C = [];
          for (let k = 0, V = P.length; k < V; k++) {
            const U = Dy(x, P[k] * M, k < V - 1 ? P[k + 1] * M : x.length, M, !1);
            U === U.next && (U.steiner = !0), C.push(Bw(U));
          }
          C.sort(Rw);
          for (let k = 0; k < C.length; k++)
            I = Ow(C[k], I);
          return I;
        }(r, e, l, n)), r.length > 80 * n) {
          v = 1 / 0, S = 1 / 0;
          let x = -1 / 0, P = -1 / 0;
          for (let I = n; I < u; I += n) {
            const M = r[I], C = r[I + 1];
            M < v && (v = M), C < S && (S = C), M > x && (x = M), C > P && (P = C);
          }
          D = Math.max(x - v, P - S), D = D !== 0 ? 32767 / D : 0;
        }
        return Vd(l, f, n, v, S, D, 0), f;
      }
      function Dy(r, e, n, o, u) {
        let l;
        if (u === function(f, v, S, D) {
          let x = 0;
          for (let P = v, I = S - D; P < S; P += D)
            x += (f[I] - f[P]) * (f[P + 1] + f[I + 1]), I = P;
          return x;
        }(r, e, n, o) > 0)
          for (let f = e; f < n; f += o)
            l = Oy(f / o | 0, r[f], r[f + 1], l);
        else
          for (let f = n - o; f >= e; f -= o)
            l = Oy(f / o | 0, r[f], r[f + 1], l);
        return l && bp(l, l.next) && (jd(l), l = l.next), l;
      }
      function xh(r, e) {
        if (!r)
          return r;
        e || (e = r);
        let n, o = r;
        do
          if (n = !1, o.steiner || !bp(o, o.next) && Ts(o.prev, o, o.next) !== 0)
            o = o.next;
          else {
            if (jd(o), o = e = o.prev, o === o.next)
              break;
            n = !0;
          }
        while (n || o !== e);
        return e;
      }
      function Vd(r, e, n, o, u, l, f) {
        if (!r)
          return;
        !f && l && function(S, D, x, P) {
          let I = S;
          do
            I.z === 0 && (I.z = __(I.x, I.y, D, x, P)), I.prevZ = I.prev, I.nextZ = I.next, I = I.next;
          while (I !== S);
          I.prevZ.nextZ = null, I.prevZ = null, function(M) {
            let C, k = 1;
            do {
              let V, U = M;
              M = null;
              let q = null;
              for (C = 0; U; ) {
                C++;
                let $ = U, H = 0;
                for (let Q = 0; Q < k && (H++, $ = $.nextZ, $); Q++)
                  ;
                let K = k;
                for (; H > 0 || K > 0 && $; )
                  H !== 0 && (K === 0 || !$ || U.z <= $.z) ? (V = U, U = U.nextZ, H--) : (V = $, $ = $.nextZ, K--), q ? q.nextZ = V : M = V, V.prevZ = q, q = V;
                U = $;
              }
              q.nextZ = null, k *= 2;
            } while (C > 1);
          }(I);
        }(r, o, u, l);
        let v = r;
        for (; r.prev !== r.next; ) {
          const S = r.prev, D = r.next;
          if (l ? zw(r, o, u, l) : Lw(r))
            e.push(S.i, r.i, D.i), jd(r), r = D.next, v = D.next;
          else if ((r = D) === v) {
            f ? f === 1 ? Vd(r = Dw(xh(r), e), e, n, o, u, l, 2) : f === 2 && kw(r, e, n, o, u, l) : Vd(xh(r), e, n, o, u, l, 1);
            break;
          }
        }
      }
      function Lw(r) {
        const e = r.prev, n = r, o = r.next;
        if (Ts(e, n, o) >= 0)
          return !1;
        const u = e.x, l = n.x, f = o.x, v = e.y, S = n.y, D = o.y, x = u < l ? u < f ? u : f : l < f ? l : f, P = v < S ? v < D ? v : D : S < D ? S : D, I = u > l ? u > f ? u : f : l > f ? l : f, M = v > S ? v > D ? v : D : S > D ? S : D;
        let C = o.next;
        for (; C !== e; ) {
          if (C.x >= x && C.x <= I && C.y >= P && C.y <= M && Cu(u, v, l, S, f, D, C.x, C.y) && Ts(C.prev, C, C.next) >= 0)
            return !1;
          C = C.next;
        }
        return !0;
      }
      function zw(r, e, n, o) {
        const u = r.prev, l = r, f = r.next;
        if (Ts(u, l, f) >= 0)
          return !1;
        const v = u.x, S = l.x, D = f.x, x = u.y, P = l.y, I = f.y, M = v < S ? v < D ? v : D : S < D ? S : D, C = x < P ? x < I ? x : I : P < I ? P : I, k = v > S ? v > D ? v : D : S > D ? S : D, V = x > P ? x > I ? x : I : P > I ? P : I, U = __(M, C, e, n, o), q = __(k, V, e, n, o);
        let $ = r.prevZ, H = r.nextZ;
        for (; $ && $.z >= U && H && H.z <= q; ) {
          if ($.x >= M && $.x <= k && $.y >= C && $.y <= V && $ !== u && $ !== f && Cu(v, x, S, P, D, I, $.x, $.y) && Ts($.prev, $, $.next) >= 0 || ($ = $.prevZ, H.x >= M && H.x <= k && H.y >= C && H.y <= V && H !== u && H !== f && Cu(v, x, S, P, D, I, H.x, H.y) && Ts(H.prev, H, H.next) >= 0))
            return !1;
          H = H.nextZ;
        }
        for (; $ && $.z >= U; ) {
          if ($.x >= M && $.x <= k && $.y >= C && $.y <= V && $ !== u && $ !== f && Cu(v, x, S, P, D, I, $.x, $.y) && Ts($.prev, $, $.next) >= 0)
            return !1;
          $ = $.prevZ;
        }
        for (; H && H.z <= q; ) {
          if (H.x >= M && H.x <= k && H.y >= C && H.y <= V && H !== u && H !== f && Cu(v, x, S, P, D, I, H.x, H.y) && Ts(H.prev, H, H.next) >= 0)
            return !1;
          H = H.nextZ;
        }
        return !0;
      }
      function Dw(r, e) {
        let n = r;
        do {
          const o = n.prev, u = n.next.next;
          !bp(o, u) && ky(o, n, n.next, u) && Ud(o, u) && Ud(u, o) && (e.push(o.i, n.i, u.i), jd(n), jd(n.next), n = r = u), n = n.next;
        } while (n !== r);
        return xh(n);
      }
      function kw(r, e, n, o, u, l) {
        let f = r;
        do {
          let v = f.next.next;
          for (; v !== f.prev; ) {
            if (f.i !== v.i && Nw(f, v)) {
              let S = Ry(f, v);
              return f = xh(f, f.next), S = xh(S, S.next), Vd(f, e, n, o, u, l, 0), void Vd(S, e, n, o, u, l, 0);
            }
            v = v.next;
          }
          f = f.next;
        } while (f !== r);
      }
      function Rw(r, e) {
        return r.x - e.x;
      }
      function Ow(r, e) {
        const n = function(u, l) {
          let f = l;
          const v = u.x, S = u.y;
          let D, x = -1 / 0;
          do {
            if (S <= f.y && S >= f.next.y && f.next.y !== f.y) {
              const k = f.x + (S - f.y) * (f.next.x - f.x) / (f.next.y - f.y);
              if (k <= v && k > x && (x = k, D = f.x < f.next.x ? f : f.next, k === v))
                return D;
            }
            f = f.next;
          } while (f !== l);
          if (!D)
            return null;
          const P = D, I = D.x, M = D.y;
          let C = 1 / 0;
          f = D;
          do {
            if (v >= f.x && f.x >= I && v !== f.x && Cu(S < M ? v : x, S, I, M, S < M ? x : v, S, f.x, f.y)) {
              const k = Math.abs(S - f.y) / (v - f.x);
              Ud(f, u) && (k < C || k === C && (f.x > D.x || f.x === D.x && Fw(D, f))) && (D = f, C = k);
            }
            f = f.next;
          } while (f !== P);
          return D;
        }(r, e);
        if (!n)
          return e;
        const o = Ry(n, r);
        return xh(o, o.next), xh(n, n.next);
      }
      function Fw(r, e) {
        return Ts(r.prev, r, e.prev) < 0 && Ts(e.next, r, r.next) < 0;
      }
      function __(r, e, n, o, u) {
        return (r = 1431655765 & ((r = 858993459 & ((r = 252645135 & ((r = 16711935 & ((r = (r - n) * u | 0) | r << 8)) | r << 4)) | r << 2)) | r << 1)) | (e = 1431655765 & ((e = 858993459 & ((e = 252645135 & ((e = 16711935 & ((e = (e - o) * u | 0) | e << 8)) | e << 4)) | e << 2)) | e << 1)) << 1;
      }
      function Bw(r) {
        let e = r, n = r;
        do
          (e.x < n.x || e.x === n.x && e.y < n.y) && (n = e), e = e.next;
        while (e !== r);
        return n;
      }
      function Cu(r, e, n, o, u, l, f, v) {
        return (u - f) * (e - v) >= (r - f) * (l - v) && (r - f) * (o - v) >= (n - f) * (e - v) && (n - f) * (l - v) >= (u - f) * (o - v);
      }
      function Nw(r, e) {
        return r.next.i !== e.i && r.prev.i !== e.i && !function(n, o) {
          let u = n;
          do {
            if (u.i !== n.i && u.next.i !== n.i && u.i !== o.i && u.next.i !== o.i && ky(u, u.next, n, o))
              return !0;
            u = u.next;
          } while (u !== n);
          return !1;
        }(r, e) && (Ud(r, e) && Ud(e, r) && function(n, o) {
          let u = n, l = !1;
          const f = (n.x + o.x) / 2, v = (n.y + o.y) / 2;
          do
            u.y > v != u.next.y > v && u.next.y !== u.y && f < (u.next.x - u.x) * (v - u.y) / (u.next.y - u.y) + u.x && (l = !l), u = u.next;
          while (u !== n);
          return l;
        }(r, e) && (Ts(r.prev, r, e.prev) || Ts(r, e.prev, e)) || bp(r, e) && Ts(r.prev, r, r.next) > 0 && Ts(e.prev, e, e.next) > 0);
      }
      function Ts(r, e, n) {
        return (e.y - r.y) * (n.x - e.x) - (e.x - r.x) * (n.y - e.y);
      }
      function bp(r, e) {
        return r.x === e.x && r.y === e.y;
      }
      function ky(r, e, n, o) {
        const u = Tp(Ts(r, e, n)), l = Tp(Ts(r, e, o)), f = Tp(Ts(n, o, r)), v = Tp(Ts(n, o, e));
        return u !== l && f !== v || !(u !== 0 || !wp(r, n, e)) || !(l !== 0 || !wp(r, o, e)) || !(f !== 0 || !wp(n, r, o)) || !(v !== 0 || !wp(n, e, o));
      }
      function wp(r, e, n) {
        return e.x <= Math.max(r.x, n.x) && e.x >= Math.min(r.x, n.x) && e.y <= Math.max(r.y, n.y) && e.y >= Math.min(r.y, n.y);
      }
      function Tp(r) {
        return r > 0 ? 1 : r < 0 ? -1 : 0;
      }
      function Ud(r, e) {
        return Ts(r.prev, r, r.next) < 0 ? Ts(r, e, r.next) >= 0 && Ts(r, r.prev, e) >= 0 : Ts(r, e, r.prev) < 0 || Ts(r, r.next, e) < 0;
      }
      function Ry(r, e) {
        const n = g_(r.i, r.x, r.y), o = g_(e.i, e.x, e.y), u = r.next, l = e.prev;
        return r.next = e, e.prev = r, n.next = u, u.prev = n, o.next = n, n.prev = o, l.next = o, o.prev = l, o;
      }
      function Oy(r, e, n, o) {
        const u = g_(r, e, n);
        return o ? (u.next = o.next, u.prev = o, o.next.prev = u, o.next = u) : (u.prev = u, u.next = u), u;
      }
      function jd(r) {
        r.next.prev = r.prev, r.prev.next = r.next, r.prevZ && (r.prevZ.nextZ = r.nextZ), r.nextZ && (r.nextZ.prevZ = r.prevZ);
      }
      function g_(r, e, n) {
        return { i: r, x: e, y: n, prev: null, next: null, z: 0, prevZ: null, nextZ: null, steiner: !1 };
      }
      function Mp(r, e) {
        const n = r.length;
        if (n <= 1)
          return [r];
        const o = [];
        let u, l;
        for (let f = 0; f < n; f++) {
          const v = Vn(r[f]);
          v !== 0 && (r[f].area = Math.abs(v), l === void 0 && (l = v < 0), l === v < 0 ? (u && o.push(u), u = [r[f]]) : u.push(r[f]));
        }
        if (u && o.push(u), e > 1)
          for (let f = 0; f < o.length; f++)
            o[f].length <= e || (Nh(o[f], e, 1, o[f].length - 1, Vw), o[f] = o[f].slice(0, e));
        return o;
      }
      function Vw(r, e) {
        return e.area - r.area;
      }
      function Fy(r, e) {
        if (!r)
          return null;
        const n = typeof r == "string" ? r : r.getPrimary().id;
        e[n] || (e[n] = []);
        const o = ss.from(r).getPrimary();
        return e[n].push(o), o.serialize();
      }
      function y_(r, e, n) {
        const o = n.patternDependencies;
        let u = !1;
        for (const l of e) {
          const f = l.paint.get(`${r}-pattern`);
          f.isConstant() || (u = !0), Fy(f.constantOr(null), o) && (u = !0);
        }
        return u;
      }
      function x_(r, e, n, o, u) {
        const l = u.patternDependencies;
        for (const f of e) {
          const v = f.paint.get(`${r}-pattern`).value;
          if (v.kind !== "constant") {
            let S = v.evaluate({ zoom: o }, n, {}, u.availableImages);
            S = S && S.name ? S.name : S;
            const D = Fy(S, l);
            D && (n.patterns[f.id] = D);
          }
        }
        return n;
      }
      class v_ {
        constructor(e) {
          this.zoom = e.zoom, this.overscaling = e.overscaling, this.layers = e.layers, this.layerIds = this.layers.map((n) => n.fqid), this.index = e.index, this.hasPattern = !1, this.patternFeatures = [], this.layoutVertexArray = new Lo(), this.indexArray = new qs(), this.indexArray2 = new Ka(), this.programConfigurations = new Qa(e.layers, { zoom: e.zoom, lut: e.lut }), this.segments = new Wn(), this.segments2 = new Wn(), this.stateDependentLayerIds = this.layers.filter((n) => n.isStateDependent()).map((n) => n.id), this.projection = e.projection;
        }
        updateFootprints(e, n) {
        }
        populate(e, n, o, u) {
          this.hasPattern = y_("fill", this.layers, n);
          const l = this.layers[0].layout.get("fill-sort-key"), f = [];
          for (const { feature: v, id: S, index: D, sourceLayerIndex: x } of e) {
            const P = this.layers[0]._featureFilter.needGeometry, I = Z(v, P);
            if (!this.layers[0]._featureFilter.filter(new Tn(this.zoom), I, o))
              continue;
            const M = l ? l.evaluate(I, {}, o, n.availableImages) : void 0, C = { id: S, properties: v.properties, type: v.type, sourceLayerIndex: x, index: D, geometry: P ? I.geometry : G(v, o, u), patterns: {}, sortKey: M };
            f.push(C);
          }
          l && f.sort((v, S) => v.sortKey - S.sortKey);
          for (const v of f) {
            const { geometry: S, index: D, sourceLayerIndex: x } = v;
            if (this.hasPattern) {
              const P = x_("fill", this.layers, v, this.zoom, n);
              this.patternFeatures.push(P);
            } else
              this.addFeature(v, S, D, o, {}, n.availableImages, n.brightness);
            n.featureIndex.insert(e[D].feature, S, D, x, this.index);
          }
        }
        update(e, n, o, u, l, f, v) {
          this.programConfigurations.updatePaintArrays(e, n, l, o, u, f, v);
        }
        addFeatures(e, n, o, u, l, f) {
          for (const v of this.patternFeatures)
            this.addFeature(v, v.geometry, v.index, n, o, u, f);
        }
        isEmpty() {
          return this.layoutVertexArray.length === 0;
        }
        uploadPending() {
          return !this.uploaded || this.programConfigurations.needsUpload;
        }
        upload(e) {
          this.uploaded || (this.layoutVertexBuffer = e.createVertexBuffer(this.layoutVertexArray, Iw), this.indexBuffer = e.createIndexBuffer(this.indexArray), this.indexBuffer2 = e.createIndexBuffer(this.indexArray2)), this.programConfigurations.upload(e), this.uploaded = !0;
        }
        destroy() {
          this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.indexBuffer2.destroy(), this.programConfigurations.destroy(), this.segments.destroy(), this.segments2.destroy());
        }
        addFeature(e, n, o, u, l, f = [], v) {
          for (const S of Mp(n, 500)) {
            let D = 0;
            for (const k of S)
              D += k.length;
            const x = this.segments.prepareSegment(D, this.layoutVertexArray, this.indexArray), P = x.vertexLength, I = [], M = [];
            for (const k of S) {
              if (k.length === 0)
                continue;
              k !== S[0] && M.push(I.length / 2);
              const V = this.segments2.prepareSegment(k.length, this.layoutVertexArray, this.indexArray2), U = V.vertexLength;
              this.layoutVertexArray.emplaceBack(k[0].x, k[0].y), this.indexArray2.emplaceBack(U + k.length - 1, U), I.push(k[0].x), I.push(k[0].y);
              for (let q = 1; q < k.length; q++)
                this.layoutVertexArray.emplaceBack(k[q].x, k[q].y), this.indexArray2.emplaceBack(U + q - 1, U + q), I.push(k[q].x), I.push(k[q].y);
              V.vertexLength += k.length, V.primitiveLength += k.length;
            }
            const C = Nd(I, M);
            for (let k = 0; k < C.length; k += 3)
              this.indexArray.emplaceBack(P + C[k], P + C[k + 1], P + C[k + 2]);
            x.vertexLength += D, x.primitiveLength += C.length / 3;
          }
          this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, e, o, l, f, u, v);
        }
      }
      let By, Ny, Vy, Uy;
      Ft(v_, "FillBucket", { omit: ["layers", "patternFeatures"] });
      class b_ {
        constructor(e, n, o, u) {
          if (this.triangleCount = n.length / 3, this.min = new Et(0, 0), this.max = new Et(0, 0), this.xScale = 0, this.yScale = 0, this.cellsX = 0, this.cellsY = 0, this.cells = [], this.payload = [], this.triangleCount === 0 || e.length === 0)
            return;
          const [l, f] = [e[0].clone(), e[0].clone()];
          for (let P = 1; P < e.length; ++P) {
            const I = e[P];
            l.x = Math.min(l.x, I.x), l.y = Math.min(l.y, I.y), f.x = Math.max(f.x, I.x), f.y = Math.max(f.y, I.y);
          }
          if (u) {
            const P = Math.ceil(Math.max(f.x - l.x, f.y - l.y) / u);
            o = Math.max(o, P);
          }
          if (o === 0)
            return;
          this.min = l, this.max = f;
          const v = this.max.sub(this.min);
          v.x = Math.max(v.x, 1), v.y = Math.max(v.y, 1);
          const S = Math.max(v.x, v.y) / o;
          this.cellsX = Math.max(1, Math.ceil(v.x / S)), this.cellsY = Math.max(1, Math.ceil(v.y / S)), this.xScale = 1 / S, this.yScale = 1 / S;
          const D = [];
          for (let P = 0; P < this.triangleCount; P++) {
            const I = e[n[3 * P + 0]].sub(this.min), M = e[n[3 * P + 1]].sub(this.min), C = e[n[3 * P + 2]].sub(this.min), k = nl(Math.floor(Math.min(I.x, M.x, C.x)), this.xScale, this.cellsX), V = nl(Math.floor(Math.max(I.x, M.x, C.x)), this.xScale, this.cellsX), U = nl(Math.floor(Math.min(I.y, M.y, C.y)), this.yScale, this.cellsY), q = nl(Math.floor(Math.max(I.y, M.y, C.y)), this.yScale, this.cellsY), $ = new Et(0, 0), H = new Et(0, 0), K = new Et(0, 0), Q = new Et(0, 0);
            for (let ie = U; ie <= q; ++ie) {
              $.y = H.y = ie * S, K.y = Q.y = (ie + 1) * S;
              for (let fe = k; fe <= V; ++fe)
                $.x = K.x = fe * S, H.x = Q.x = (fe + 1) * S, (ke(I, M, C, $, H, Q) || ke(I, M, C, $, Q, K)) && D.push({ cellIdx: ie * this.cellsX + fe, triIdx: P });
            }
          }
          if (D.length === 0)
            return;
          D.sort((P, I) => P.cellIdx - I.cellIdx || P.triIdx - I.triIdx);
          let x = 0;
          for (; x < D.length; ) {
            const P = D[x].cellIdx, I = { start: this.payload.length, len: 0 };
            for (; x < D.length && D[x].cellIdx === P; )
              ++I.len, this.payload.push(D[x++].triIdx);
            this.cells[P] = I;
          }
        }
        _lazyInitLookup() {
          this.lookup || (this.lookup = new Uint8Array(Math.ceil(this.triangleCount / 8))), this.lookup.fill(0);
        }
        queryPoint(e, n) {
          if (this.triangleCount === 0 || this.cells.length === 0 || e.x > this.max.x || this.min.x > e.x || e.y > this.max.y || this.min.y > e.y)
            return;
          const o = nl(e.x - this.min.x, this.xScale, this.cellsX), u = nl(e.y - this.min.y, this.yScale, this.cellsY), l = this.cells[u * this.cellsX + o];
          if (l) {
            this._lazyInitLookup();
            for (let f = 0; f < l.len; f++) {
              const v = this.payload[l.start + f], S = Math.floor(v / 8), D = 1 << v % 8;
              if (!(this.lookup[S] & D) && (this.lookup[S] |= D, n.push(v), n.length === this.triangleCount))
                return;
            }
          }
        }
        query(e, n, o) {
          if (this.triangleCount === 0 || this.cells.length === 0 || e.x > this.max.x || this.min.x > n.x || e.y > this.max.y || this.min.y > n.y)
            return;
          this._lazyInitLookup();
          const u = nl(e.x - this.min.x, this.xScale, this.cellsX), l = nl(n.x - this.min.x, this.xScale, this.cellsX), f = nl(e.y - this.min.y, this.yScale, this.cellsY), v = nl(n.y - this.min.y, this.yScale, this.cellsY);
          for (let S = f; S <= v; S++)
            for (let D = u; D <= l; D++) {
              const x = this.cells[S * this.cellsX + D];
              if (x)
                for (let P = 0; P < x.len; P++) {
                  const I = this.payload[x.start + P], M = Math.floor(I / 8), C = 1 << I % 8;
                  if (!(this.lookup[M] & C) && (this.lookup[M] |= C, o.push(I), o.length === this.triangleCount))
                    return;
                }
            }
        }
      }
      function nl(r, e, n) {
        return Math.max(0, Math.min(n - 1, Math.floor(r * e)));
      }
      Ft(b_, "TriangleGridIndex");
      class jy {
        constructor(e) {
          this.zoom = e.zoom, this.layers = e.layers, this.layerIds = this.layers.map((n) => n.fqid), this.index = e.index, this.hasPattern = !1, this.stateDependentLayerIds = this.layers.filter((n) => n.isStateDependent()).map((n) => n.id), this.footprints = [];
        }
        updateFootprints(e, n) {
          for (const o of this.footprints)
            n.push({ footprint: o, id: e });
        }
        populate(e, n, o, u) {
          const l = [];
          for (const { feature: f, id: v, index: S, sourceLayerIndex: D } of e) {
            const x = this.layers[0]._featureFilter.needGeometry, P = Z(f, x);
            if (!this.layers[0]._featureFilter.filter(new Tn(this.zoom), P, o))
              continue;
            const I = { id: v, properties: f.properties, type: f.type, sourceLayerIndex: D, index: S, geometry: x ? P.geometry : G(f, o, u), patterns: {} };
            l.push(I);
          }
          for (const f of l) {
            const { geometry: v, index: S, sourceLayerIndex: D } = f;
            this.addFeature(f, v, S, o, {}, n.availableImages, n.brightness), n.featureIndex.insert(e[S].feature, v, S, D, this.index);
          }
        }
        isEmpty() {
          return this.footprints.length === 0;
        }
        uploadPending() {
          return !1;
        }
        upload(e) {
        }
        update(e, n, o, u, l, f, v) {
        }
        destroy() {
        }
        addFeature(e, n, o, u, l, f = [], v) {
          for (const S of Mp(n, 2)) {
            const D = [], x = [], P = [], I = new Et(1 / 0, 1 / 0), M = new Et(-1 / 0, -1 / 0);
            for (const V of S)
              if (V.length !== 0) {
                V !== S[0] && P.push(x.length / 2);
                for (let U = 0; U < V.length; U++)
                  x.push(V[U].x), x.push(V[U].y), D.push(V[U]), I.x = Math.min(I.x, V[U].x), I.y = Math.min(I.y, V[U].y), M.x = Math.max(M.x, V[U].x), M.y = Math.max(M.y, V[U].y);
              }
            const C = Nd(x, P), k = new b_(D, C, 8, 256);
            this.footprints.push({ vertices: D, indices: C, grid: k, min: I, max: M });
          }
        }
      }
      Ft(jy, "ClipBucket", { omit: ["layers"] });
      const Uw = qi([{ name: "a_pos_normal_ed", components: 4, type: "Int16" }]), jw = qi([{ name: "a_pos_end", components: 4, type: "Int16" }, { name: "a_angular_offset_factor", components: 1, type: "Int16" }]), Gw = qi([{ name: "a_centroid_pos", components: 2, type: "Uint16" }]), Zw = qi([{ name: "a_join_normal_inside", components: 3, type: "Int16" }]), Hw = qi([{ name: "a_hidden_by_landmark", components: 1, type: "Uint8" }]), qw = qi([{ name: "a_pos_3", components: 3, type: "Int16" }, { name: "a_pos_normal_3", components: 3, type: "Int16" }]), { members: Ww } = Uw;
      var w_, Gy, T_, Zy, M_, Hy, qy, Sp = {};
      function Wy() {
        if (Gy)
          return w_;
        Gy = 1;
        var r = Zr();
        function e(u, l, f, v, S) {
          this.properties = {}, this.extent = f, this.type = 0, this._pbf = u, this._geometry = -1, this._keys = v, this._values = S, u.readFields(n, this, l);
        }
        function n(u, l, f) {
          u == 1 ? l.id = f.readVarint() : u == 2 ? function(v, S) {
            for (var D = v.readVarint() + v.pos; v.pos < D; ) {
              var x = S._keys[v.readVarint()], P = S._values[v.readVarint()];
              S.properties[x] = P;
            }
          }(f, l) : u == 3 ? l.type = f.readVarint() : u == 4 && (l._geometry = f.pos);
        }
        function o(u) {
          for (var l, f, v = 0, S = 0, D = u.length, x = D - 1; S < D; x = S++)
            v += ((f = u[x]).x - (l = u[S]).x) * (l.y + f.y);
          return v;
        }
        return w_ = e, e.types = ["Unknown", "Point", "LineString", "Polygon"], e.prototype.loadGeometry = function() {
          var u = this._pbf;
          u.pos = this._geometry;
          for (var l, f = u.readVarint() + u.pos, v = 1, S = 0, D = 0, x = 0, P = []; u.pos < f; ) {
            if (S <= 0) {
              var I = u.readVarint();
              v = 7 & I, S = I >> 3;
            }
            if (S--, v === 1 || v === 2)
              D += u.readSVarint(), x += u.readSVarint(), v === 1 && (l && P.push(l), l = []), l.push(new r(D, x));
            else {
              if (v !== 7)
                throw new Error("unknown command " + v);
              l && l.push(l[0].clone());
            }
          }
          return l && P.push(l), P;
        }, e.prototype.bbox = function() {
          var u = this._pbf;
          u.pos = this._geometry;
          for (var l = u.readVarint() + u.pos, f = 1, v = 0, S = 0, D = 0, x = 1 / 0, P = -1 / 0, I = 1 / 0, M = -1 / 0; u.pos < l; ) {
            if (v <= 0) {
              var C = u.readVarint();
              f = 7 & C, v = C >> 3;
            }
            if (v--, f === 1 || f === 2)
              (S += u.readSVarint()) < x && (x = S), S > P && (P = S), (D += u.readSVarint()) < I && (I = D), D > M && (M = D);
            else if (f !== 7)
              throw new Error("unknown command " + f);
          }
          return [x, I, P, M];
        }, e.prototype.toGeoJSON = function(u, l, f) {
          var v, S, D = this.extent * Math.pow(2, f), x = this.extent * u, P = this.extent * l, I = this.loadGeometry(), M = e.types[this.type];
          function C(U) {
            for (var q = 0; q < U.length; q++) {
              var $ = U[q];
              U[q] = [360 * ($.x + x) / D - 180, 360 / Math.PI * Math.atan(Math.exp((180 - 360 * ($.y + P) / D) * Math.PI / 180)) - 90];
            }
          }
          switch (this.type) {
            case 1:
              var k = [];
              for (v = 0; v < I.length; v++)
                k[v] = I[v][0];
              C(I = k);
              break;
            case 2:
              for (v = 0; v < I.length; v++)
                C(I[v]);
              break;
            case 3:
              for (I = function(U) {
                var q = U.length;
                if (q <= 1)
                  return [U];
                for (var $, H, K = [], Q = 0; Q < q; Q++) {
                  var ie = o(U[Q]);
                  ie !== 0 && (H === void 0 && (H = ie < 0), H === ie < 0 ? ($ && K.push($), $ = [U[Q]]) : $.push(U[Q]));
                }
                return $ && K.push($), K;
              }(I), v = 0; v < I.length; v++)
                for (S = 0; S < I[v].length; S++)
                  C(I[v][S]);
          }
          I.length === 1 ? I = I[0] : M = "Multi" + M;
          var V = { type: "Feature", geometry: { type: M, coordinates: I }, properties: this.properties };
          return "id" in this && (V.id = this.id), V;
        }, w_;
      }
      function $y() {
        if (Zy)
          return T_;
        Zy = 1;
        var r = Wy();
        function e(o, u) {
          this.version = 1, this.name = null, this.extent = 4096, this.length = 0, this._pbf = o, this._keys = [], this._values = [], this._features = [], o.readFields(n, this, u), this.length = this._features.length;
        }
        function n(o, u, l) {
          o === 15 ? u.version = l.readVarint() : o === 1 ? u.name = l.readString() : o === 5 ? u.extent = l.readVarint() : o === 2 ? u._features.push(l.pos) : o === 3 ? u._keys.push(l.readString()) : o === 4 && u._values.push(function(f) {
            for (var v = null, S = f.readVarint() + f.pos; f.pos < S; ) {
              var D = f.readVarint() >> 3;
              v = D === 1 ? f.readString() : D === 2 ? f.readFloat() : D === 3 ? f.readDouble() : D === 4 ? f.readVarint64() : D === 5 ? f.readVarint() : D === 6 ? f.readSVarint() : D === 7 ? f.readBoolean() : null;
            }
            return v;
          }(l));
        }
        return T_ = e, e.prototype.feature = function(o) {
          if (o < 0 || o >= this._features.length)
            throw new Error("feature index out of bounds");
          this._pbf.pos = this._features[o];
          var u = this._pbf.readVarint() + this._pbf.pos;
          return new r(this._pbf, u, this.extent, this._keys, this._values);
        }, T_;
      }
      function Xy() {
        return qy || (qy = 1, Sp.VectorTile = function() {
          if (Hy)
            return M_;
          Hy = 1;
          var r = $y();
          function e(n, o, u) {
            if (n === 3) {
              var l = new r(u, u.readVarint() + u.pos);
              l.length && (o[l.name] = l);
            }
          }
          return M_ = function(n, o) {
            this.layers = n.readFields(e, {}, o);
          }, M_;
        }(), Sp.VectorTileFeature = Wy(), Sp.VectorTileLayer = $y()), Sp;
      }
      var Iu = Xy();
      class vh extends Et {
        constructor(e, n, o) {
          super(e, n), this.z = o;
        }
      }
      class Yy extends vh {
        constructor(e, n, o, u) {
          super(e, n, o), this.w = u;
        }
      }
      function Ep(r, e, n, o) {
        const u = [], l = o === 0 ? (f, v, S, D, x, P) => {
          f.push(new Et(P, S + (P - v) / (D - v) * (x - S)));
        } : (f, v, S, D, x, P) => {
          f.push(new Et(v + (P - S) / (x - S) * (D - v), P));
        };
        for (const f of r) {
          const v = [];
          for (const S of f) {
            if (S.length <= 2)
              continue;
            const D = [];
            for (let I = 0; I < S.length - 1; I++) {
              const M = S[I].x, C = S[I].y, k = S[I + 1].x, V = S[I + 1].y, U = o === 0 ? M : C, q = o === 0 ? k : V;
              U < e ? q > e && l(D, M, C, k, V, e) : U > n ? q < n && l(D, M, C, k, V, n) : D.push(S[I]), q < e && U >= e && l(D, M, C, k, V, e), q > n && U <= n && l(D, M, C, k, V, n);
            }
            let x = S[S.length - 1];
            const P = o === 0 ? x.x : x.y;
            P >= e && P <= n && D.push(x), D.length && (x = D[D.length - 1], D[0].x === x.x && D[0].y === x.y || D.push(D[0]), v.push(D));
          }
          v.length && u.push(v);
        }
        return u;
      }
      function Ky(r, e, n, o) {
        const u = n === "x" ? "y" : "x", l = (o - r[n]) / (e[n] - r[n]);
        r[u] = r[u] + (e[u] - r[u]) * l, r[n] = o, r.hasOwnProperty("z") && (r.z = ei(r.z, e.z, l)), r.hasOwnProperty("w") && (r.w = ei(r.w, e.w, l));
      }
      function Jy(r, e, n, o) {
        const u = n, l = o;
        for (const f of ["x", "y"]) {
          let v = r, S = e;
          v[f] >= S[f] && (v = e, S = r), v[f] < u && S[f] > u && Ky(v, S, f, u), v[f] < l && S[f] > l && Ky(S, v, f, l);
        }
      }
      const Pp = Number.MAX_SAFE_INTEGER;
      function Qy(r, e, n, o) {
        return r.order < e || r.order === Pp || !(r.clipMask & n) || function(u, l) {
          return l.length !== 0 && l.find((f) => f === u) === void 0;
        }(o, r.clipScope);
      }
      function Ap(r, e) {
        return r.x - e.x || r.y - e.y;
      }
      function e0(r, e) {
        return Ap(r.min, e.min) === 0 && Ap(r.max, e.max) === 0;
      }
      function S_(r, e) {
        return !(r.min.x > e.max.x || r.max.x < e.min.x || r.min.y > e.max.y || r.max.y < e.min.y);
      }
      function E_(r, e) {
        if (r.length !== e.length)
          return !1;
        for (let n = 0; n < r.length; n++)
          if (r[n].sourceId !== e[n].sourceId || !e0(r[n], e[n]) || r[n].order !== e[n].order || r[n].clipMask !== e[n].clipMask || !Ws(r[n].clipScope, e[n].clipScope))
            return !1;
        return !0;
      }
      function t0(r, e, n) {
        const o = 1 / Tt, u = 1 / (1 << n.canonical.z), l = (e.x * o + n.canonical.x) * u + n.wrap, f = (e.y * o + n.canonical.y) * u;
        return { min: new Et((r.x * o + n.canonical.x) * u + n.wrap, (r.y * o + n.canonical.y) * u), max: new Et(l, f) };
      }
      function $w(r, e, n) {
        const o = 1 << n.canonical.z, u = ((e.x - n.wrap) * o - n.canonical.x) * Tt, l = (e.y * o - n.canonical.y) * Tt;
        return { min: new Et(((r.x - n.wrap) * o - n.canonical.x) * Tt, (r.y * o - n.canonical.y) * Tt), max: new Et(u, l) };
      }
      function i0(r, e, n, o, u, l, f) {
        const v = r.indices, S = r.vertices, D = [];
        for (let x = o; x < o + u; x += 3) {
          const P = e[n[x + 0] + l], I = e[n[x + 1] + l], M = e[n[x + 2] + l], C = Math.min(P.x, I.x, M.x), k = Math.max(P.x, I.x, M.x), V = Math.min(P.y, I.y, M.y), U = Math.max(P.y, I.y, M.y);
          D.length = 0, r.grid.query(new Et(C, V), new Et(k, U), D);
          for (let q = 0; q < D.length; q++) {
            const $ = D[q];
            if (ke(S[v[3 * $ + 0]], S[v[3 * $ + 1]], S[v[3 * $ + 2]], P, I, M, f))
              return !0;
          }
        }
        return !1;
      }
      function n0(r, e, n, o) {
        if (!r || !n)
          return !1;
        let u = r.vertices;
        if (!e.canonical.equals(o.canonical) || e.wrap !== o.wrap) {
          if (n.vertices.length < r.vertices.length)
            return n0(n, o, r, e);
          const l = e.canonical, f = o.canonical, v = Math.pow(2, f.z - l.z);
          u = r.vertices.map((S) => new Et((S.x + l.x * Tt) * v - f.x * Tt, (S.y + l.y * Tt) * v - f.y * Tt));
        }
        return i0(n, u, r.indices, 0, r.indices.length, 0, 0);
      }
      function s0(r, e, n, o) {
        const u = Math.pow(2, o.z - n.z);
        return new Et((r + n.x * Tt) * u - o.x * Tt, (e + n.y * Tt) * u - o.y * Tt);
      }
      function r0(r, e) {
        const n = [];
        e.grid.queryPoint(r, n);
        const o = e.indices, u = e.vertices;
        for (let l = 0; l < n.length; l++) {
          const f = n[l];
          if (Ae([u[o[3 * f + 0]], u[o[3 * f + 1]], u[o[3 * f + 2]]], r))
            return !0;
        }
        return !1;
      }
      const P_ = [new Et(0, 0), new Et(Tt, 0), new Et(Tt, Tt), new Et(0, Tt)];
      function o0(r, e) {
        const n = [];
        let o = [];
        if (!e || r.length < 2)
          return [r];
        if (r.length === 2)
          return Xe(r[0], r[1], P_) ? [r] : [];
        for (let u = 0; u < r.length + 2; u++) {
          const l = r[u % r.length], f = r[(u + 1) % r.length], v = Xe(u === 0 ? r[r.length - 1] : r[(u - 1) % r.length], l, P_), S = Xe(l, f, P_), D = v || S;
          D && o.push(l), D && S || o.length > 0 && (o.length > 1 && n.push(o), o = []);
        }
        return o.length > 1 && n.push(o), n;
      }
      const A_ = Iu.VectorTileFeature.types, Xw = ["fill-extrusion-base", "fill-extrusion-height", "fill-extrusion-color", "fill-extrusion-pattern", "fill-extrusion-flood-light-wall-radius", "fill-extrusion-line-width", "fill-extrusion-emissive-strength"], Yw = ["fill-extrusion-flood-light-ground-radius"], Kw = Math.pow(2, 13), Jw = Math.pow(2, 15) - 1, a0 = new Et(0, 1), yc = 2147483648;
      function Gd(r, e, n, o, u, l, f, v) {
        r.emplaceBack((e << 1) + f, (n << 1) + l, (Math.floor(o * Kw) << 1) + u, Math.round(v));
      }
      function Zd(r, e, n) {
        r.emplaceBack(e.x * Tt, e.y * Tt, n ? 1 : 0);
      }
      function Cp(r, e, n, o, u, l) {
        r.emplaceBack(e.x, e.y, (n.x << 1) + o, (n.y << 1) + u, l);
      }
      function Hd(r, e, n) {
        r.emplaceBack(e.x, e.y, e.z, n[0] * 16384, n[1] * 16384, n[2] * 16384);
      }
      class l0 {
        constructor() {
          this.vertexOffset = 0, this.vertexCount = 0, this.indexOffset = 0, this.indexCount = 0;
        }
      }
      class c0 {
        constructor() {
          this.centroidXY = new Et(0, 0), this.vertexArrayOffset = 0, this.vertexCount = 0, this.groundVertexArrayOffset = 0, this.groundVertexCount = 0, this.flags = 0, this.footprintSegIdx = -1, this.footprintSegLen = 0, this.polygonSegIdx = -1, this.polygonSegLen = 0, this.min = new Et(Number.MAX_VALUE, Number.MAX_VALUE), this.max = new Et(-Number.MAX_VALUE, -Number.MAX_VALUE), this.height = 0;
        }
        span() {
          return new Et(this.max.x - this.min.x, this.max.y - this.min.y);
        }
      }
      class h0 {
        constructor() {
          this.acc = new Et(0, 0), this.accCount = 0, this.centroidDataIndex = 0;
        }
        startRing(e, n) {
          e.min.x === Number.MAX_VALUE && (e.min.x = e.max.x = n.x, e.min.y = e.max.y = n.y);
        }
        appendEdge(e, n, o) {
          this.accCount++, this.acc._add(n);
          let u = !!this.borders;
          n.x < e.min.x ? (e.min.x = n.x, u = !0) : n.x > e.max.x && (e.max.x = n.x, u = !0), n.y < e.min.y ? (e.min.y = n.y, u = !0) : n.y > e.max.y && (e.max.y = n.y, u = !0), ((n.x === 0 || n.x === Tt) && n.x === o.x) != ((n.y === 0 || n.y === Tt) && n.y === o.y) && this.processBorderOverlap(n, o), u && this.checkBorderIntersection(n, o);
        }
        checkBorderIntersection(e, n) {
          n.x < 0 != e.x < 0 && this.addBorderIntersection(0, ei(n.y, e.y, (0 - n.x) / (e.x - n.x))), n.x > Tt != e.x > Tt && this.addBorderIntersection(1, ei(n.y, e.y, (Tt - n.x) / (e.x - n.x))), n.y < 0 != e.y < 0 && this.addBorderIntersection(2, ei(n.x, e.x, (0 - n.y) / (e.y - n.y))), n.y > Tt != e.y > Tt && this.addBorderIntersection(3, ei(n.x, e.x, (Tt - n.y) / (e.y - n.y)));
        }
        addBorderIntersection(e, n) {
          this.borders || (this.borders = [[Number.MAX_VALUE, -Number.MAX_VALUE], [Number.MAX_VALUE, -Number.MAX_VALUE], [Number.MAX_VALUE, -Number.MAX_VALUE], [Number.MAX_VALUE, -Number.MAX_VALUE]]);
          const o = this.borders[e];
          n < o[0] && (o[0] = n), n > o[1] && (o[1] = n);
        }
        processBorderOverlap(e, n) {
          if (e.x === n.x) {
            if (e.y === n.y)
              return;
            const o = e.x === 0 ? 0 : 1;
            this.addBorderIntersection(o, n.y), this.addBorderIntersection(o, e.y);
          } else {
            const o = e.y === 0 ? 2 : 3;
            this.addBorderIntersection(o, n.x), this.addBorderIntersection(o, e.x);
          }
        }
        centroid() {
          return this.accCount === 0 ? new Et(0, 0) : new Et(Math.floor(Math.max(0, this.acc.x) / this.accCount), Math.floor(Math.max(0, this.acc.y) / this.accCount));
        }
        intersectsCount() {
          return this.borders ? this.borders.reduce((e, n) => e + +(n[0] !== Number.MAX_VALUE), 0) : 0;
        }
      }
      function u0(r, e) {
        const n = r.add(e)._unit(), o = si(r.x * n.x + r.y * n.y, -1, 1);
        var u, l, f;
        return f = Math.acos(o), Math.min(4, Math.max(-4, Math.tan(f))) / 4 * Jw * ((u = r).x * (l = e).y - u.y * l.x < 0 ? -1 : 1);
      }
      const Qw = [(r) => r.x < 0, (r) => r.x > Tt, (r) => r.y < 0, (r) => r.y > Tt];
      function eT(r, e, n, o) {
        const u = [4];
        if (o === 0)
          return u;
        n._mult(o);
        const l = r.sub(n), f = e.sub(n), v = [r, e, l, f];
        for (let S = 0; S < 4; S++)
          for (const D of v)
            if (Qw[S](D)) {
              u.push(S);
              break;
            }
        return u;
      }
      class d0 {
        constructor(e) {
          this.vertexArray = new wd(), this.indexArray = new qs(), this.programConfigurations = new Qa(e.layers, { zoom: e.zoom, lut: e.lut }, (n) => Yw.includes(n)), this._segments = new Wn(), this.hiddenByLandmarkVertexArray = new vu(), this._segmentToGroundQuads = {}, this._segmentToGroundQuads[0] = [], this._segmentToRegionTriCounts = {}, this._segmentToRegionTriCounts[0] = [0, 0, 0, 0, 0], this.regionSegments = {}, this.regionSegments[4] = new Wn();
        }
        getDefaultSegment() {
          return this.regionSegments[4];
        }
        hasData() {
          return this.vertexArray.length !== 0;
        }
        addData(e, n, o, u = !1) {
          const l = e.length;
          if (l > 2) {
            let f = Math.max(0, this._segments.get().length - 1);
            const v = this._segments._prepareSegment(4 * l, this.vertexArray.length, 2 * this._segmentToGroundQuads[f].length);
            let S;
            f !== this._segments.get().length - 1 && (f++, this._segmentToGroundQuads[f] = [], this._segmentToRegionTriCounts[f] = [0, 0, 0, 0, 0]);
            {
              const D = e[0], x = e[1];
              S = u0(D.sub(e[l - 1])._perp()._unit(), x.sub(D)._perp()._unit());
            }
            for (let D = 0; D < l; D++) {
              const x = D === l - 1 ? 0 : D + 1, P = e[D], I = e[x], M = e[x === l - 1 ? 0 : x + 1], C = I.sub(P)._perp()._unit(), k = u0(C, M.sub(I)._perp()._unit()), V = S, U = k;
              if (C_(P, I, n) || u && m0(P, n) && m0(I, n)) {
                S = k;
                continue;
              }
              const q = v.vertexLength;
              Cp(this.vertexArray, P, I, 1, 1, V), Cp(this.vertexArray, P, I, 1, 0, V), Cp(this.vertexArray, P, I, 0, 1, U), Cp(this.vertexArray, P, I, 0, 0, U), v.vertexLength += 4;
              const $ = eT(P, I, C, o);
              for (const H of $)
                this._segmentToGroundQuads[f].push({ id: q, region: H }), this._segmentToRegionTriCounts[f][H] += 2, v.primitiveLength += 2;
              S = k;
            }
          }
        }
        prepareBorderSegments() {
          if (!this.hasData())
            return;
          const e = this._segments.get(), n = e.length;
          for (let o = 0; o < n; o++)
            this._segmentToGroundQuads[o].sort((u, l) => u.region - l.region);
          for (let o = 0; o < n; o++) {
            const u = this._segmentToGroundQuads[o], l = e[o], f = this._segmentToRegionTriCounts[o];
            f.reduce((S, D) => S + D, 0);
            let v = 0;
            for (let S = 0; S <= 4; S++) {
              const D = f[S];
              if (D !== 0) {
                let x = this.regionSegments[S];
                x || (x = this.regionSegments[S] = new Wn());
                const P = { vertexOffset: l.vertexOffset, primitiveOffset: l.primitiveOffset + v, vertexLength: l.vertexLength, primitiveLength: D };
                x.get().push(P);
              }
              v += D;
            }
            for (let S = 0; S < u.length; S++) {
              const D = u[S].id;
              this.indexArray.emplaceBack(D, D + 1, D + 3), this.indexArray.emplaceBack(D, D + 3, D + 2);
            }
          }
          this._segmentToGroundQuads = null, this._segmentToRegionTriCounts = null, this._segments.destroy(), this._segments = null;
        }
        addPaintPropertiesData(e, n, o, u, l, f) {
          this.hasData() && this.programConfigurations.populatePaintArrays(this.vertexArray.length, e, n, o, u, l, f);
        }
        upload(e) {
          this.hasData() && (this.vertexBuffer = e.createVertexBuffer(this.vertexArray, jw.members), this.indexBuffer = e.createIndexBuffer(this.indexArray));
        }
        uploadPaintProperties(e) {
          this.hasData() && this.programConfigurations.upload(e);
        }
        update(e, n, o, u, l, f, v) {
          this.hasData() && this.programConfigurations.updatePaintArrays(e, n, o, u, l, f, v);
        }
        updateHiddenByLandmark(e) {
          if (!this.hasData())
            return;
          const n = e.groundVertexCount + e.groundVertexArrayOffset;
          if (e.groundVertexCount === 0)
            return;
          const o = e.flags & yc ? 1 : 0;
          for (let u = e.groundVertexArrayOffset; u < n; ++u)
            this.hiddenByLandmarkVertexArray.emplace(u, o);
          this._needsHiddenByLandmarkUpdate = !0;
        }
        uploadHiddenByLandmark(e) {
          this.hasData() && this._needsHiddenByLandmarkUpdate && (!this.hiddenByLandmarkVertexBuffer && this.hiddenByLandmarkVertexArray.length > 0 ? this.hiddenByLandmarkVertexBuffer = e.createVertexBuffer(this.hiddenByLandmarkVertexArray, Hw.members, !0) : this.hiddenByLandmarkVertexBuffer && this.hiddenByLandmarkVertexBuffer.updateData(this.hiddenByLandmarkVertexArray), this._needsHiddenByLandmarkUpdate = !1);
        }
        destroy() {
          if (this.vertexBuffer) {
            this.vertexBuffer.destroy(), this.indexBuffer.destroy(), this.hiddenByLandmarkVertexBuffer && this.hiddenByLandmarkVertexBuffer.destroy(), this._segments && this._segments.destroy(), this.programConfigurations.destroy();
            for (let e = 0; e <= 4; e++) {
              const n = this.regionSegments[e];
              n && n.destroy();
            }
          }
        }
      }
      class Ip {
        constructor(e) {
          this.zoom = e.zoom, this.canonical = e.canonical, this.overscaling = e.overscaling, this.layers = e.layers, this.layerIds = this.layers.map((n) => n.fqid), this.index = e.index, this.hasPattern = !1, this.edgeRadius = 0, this.projection = e.projection, this.activeReplacements = [], this.replacementUpdateTime = 0, this.centroidData = [], this.footprintIndices = new qs(), this.footprintVertices = new Lo(), this.footprintSegments = [], this.layoutVertexArray = new $a(), this.centroidVertexArray = new dp(), this.wallVertexArray = new pp(), this.indexArray = new qs(), this.programConfigurations = new Qa(e.layers, { zoom: e.zoom, lut: e.lut }, (n) => Xw.includes(n)), this.segments = new Wn(), this.stateDependentLayerIds = this.layers.filter((n) => n.isStateDependent()).map((n) => n.id), this.groundEffect = new d0(e), this.maxHeight = 0, this.partLookup = {}, this.triangleSubSegments = [], this.polygonSegments = [];
        }
        updateFootprints(e, n) {
        }
        populate(e, n, o, u) {
          this.features = [], this.hasPattern = y_("fill-extrusion", this.layers, n), this.featuresOnBorder = [], this.borderFeatureIndices = [[], [], [], []], this.borderDoneWithNeighborZ = [-1, -1, -1, -1], this.selfDEMTileTimestamp = Number.MAX_VALUE, this.borderDEMTileTimestamp = [Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE], this.tileToMeter = s(o), this.edgeRadius = this.layers[0].layout.get("fill-extrusion-edge-radius") / this.tileToMeter, this.wallMode = this.layers[0].paint.get("fill-extrusion-line-width").constantOr(1) !== 0;
          for (const { feature: l, id: f, index: v, sourceLayerIndex: S } of e) {
            const D = this.layers[0]._featureFilter.needGeometry, x = Z(l, D);
            if (!this.layers[0]._featureFilter.filter(new Tn(this.zoom), x, o))
              continue;
            const P = { id: f, sourceLayerIndex: S, index: v, geometry: D ? x.geometry : G(l, o, u), properties: l.properties, type: l.type, patterns: {} }, I = this.layoutVertexArray.length, M = A_[P.type] === "Polygon";
            if (this.hasPattern)
              this.features.push(x_("fill-extrusion", this.layers, P, this.zoom, n));
            else if (this.wallMode)
              for (const C of P.geometry)
                for (const k of o0(C, M))
                  this.addFeature(P, [k], v, o, {}, n.availableImages, u, n.brightness);
            else
              this.addFeature(P, P.geometry, v, o, {}, n.availableImages, u, n.brightness);
            n.featureIndex.insert(l, P.geometry, v, S, this.index, I);
          }
          this.sortBorders(), this.projection.name === "mercator" && this.splitToSubtiles(), this.groundEffect.prepareBorderSegments(), this.polygonSegments.length = 0;
        }
        addFeatures(e, n, o, u, l, f) {
          for (const v of this.features) {
            const S = A_[v.type] === "Polygon", { geometry: D } = v;
            if (this.wallMode)
              for (const x of D)
                for (const P of o0(x, S))
                  this.addFeature(v, [P], v.index, n, o, u, l, f);
            else
              this.addFeature(v, D, v.index, n, o, u, l, f);
          }
          this.sortBorders(), this.projection.name === "mercator" && this.splitToSubtiles();
        }
        update(e, n, o, u, l, f, v) {
          this.programConfigurations.updatePaintArrays(e, n, l, o, u, f, v), this.groundEffect.update(e, n, l, o, u, f, v);
        }
        isEmpty() {
          return this.layoutVertexArray.length === 0;
        }
        uploadPending() {
          return !this.uploaded || this.programConfigurations.needsUpload || this.groundEffect.programConfigurations.needsUpload;
        }
        upload(e) {
          this.uploaded || (this.layoutVertexBuffer = e.createVertexBuffer(this.layoutVertexArray, Ww), this.indexBuffer = e.createIndexBuffer(this.indexArray), this.wallVertexBuffer = e.createVertexBuffer(this.wallVertexArray, Zw.members), this.layoutVertexExtArray && (this.layoutVertexExtBuffer = e.createVertexBuffer(this.layoutVertexExtArray, qw.members, !0)), this.groundEffect.upload(e)), this.groundEffect.uploadPaintProperties(e), this.programConfigurations.upload(e), this.uploaded = !0;
        }
        uploadCentroid(e) {
          this.groundEffect.uploadHiddenByLandmark(e), this.needsCentroidUpdate && (!this.centroidVertexBuffer && this.centroidVertexArray.length > 0 ? this.centroidVertexBuffer = e.createVertexBuffer(this.centroidVertexArray, Gw.members, !0) : this.centroidVertexBuffer && this.centroidVertexBuffer.updateData(this.centroidVertexArray), this.needsCentroidUpdate = !1);
        }
        destroy() {
          this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.centroidVertexBuffer && this.centroidVertexBuffer.destroy(), this.layoutVertexExtBuffer && this.layoutVertexExtBuffer.destroy(), this.groundEffect.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy());
        }
        addFeature(e, n, o, u, l, f, v, S) {
          const D = this.layers[0].paint.get("fill-extrusion-flood-light-ground-radius").evaluate(e, {}) / this.tileToMeter, x = [new Et(0, 0), new Et(Tt, Tt)], P = v.projection, I = P.name === "globe", M = this.wallMode || A_[e.type] === "Polygon", C = new h0();
          C.centroidDataIndex = this.centroidData.length;
          const k = new c0(), V = this.layers[0].paint.get("fill-extrusion-base").evaluate(e, {}, u) <= 0, U = this.layers[0].paint.get("fill-extrusion-height").evaluate(e, {}, u);
          let q;
          if (k.height = U, k.vertexArrayOffset = this.layoutVertexArray.length, k.groundVertexArrayOffset = this.groundEffect.vertexArray.length, I && !this.layoutVertexExtArray && (this.layoutVertexExtArray = new pu()), this.wallMode) {
            if (I)
              return void mi("Non zero fill-extrusion-line-width is not yet supported on globe.");
            if (n.length !== 1)
              return;
            q = function(ue) {
              const Se = ue[0].x === ue[ue.length - 1].x && ue[0].y === ue[ue.length - 1].y;
              (function(At) {
                let rt = 0;
                const Ut = At.length;
                for (let St = 0; St < Ut; St++)
                  rt += (At[(St + 1) % Ut].x - At[St].x) * (At[(St + 1) % Ut].y + At[St].y);
                return rt >= 0;
              })(ue) || (ue = ue.reverse());
              const Ee = { geometry: [], joinNormals: [], indices: [] }, ze = [], Ie = [], Re = [];
              let Ve = ue.length;
              for (; Ve >= 2 && ue[Ve - 1].equals(ue[Ve - 2]); )
                Ve--;
              if (Ve < (Se ? 3 : 2))
                return Ee;
              let Ue, Fe, et, dt, tt, Mt = 0;
              for (; Mt < Ve - 1 && ue[Mt].equals(ue[Mt + 1]); )
                Mt++;
              Se && (Ue = ue[Ve - 2], tt = ue[Mt].sub(Ue)._unit()._perp());
              for (let At = Mt; At < Ve; At++) {
                if (et = At === Ve - 1 ? Se ? ue[Mt + 1] : void 0 : ue[At + 1], et && ue[At].equals(et))
                  continue;
                tt && (dt = tt), Ue && (Fe = Ue), Ue = ue[At], tt = et ? et.sub(Ue)._unit()._perp() : dt, dt = dt || tt;
                let rt = dt.add(tt);
                rt.x === 0 && rt.y === 0 || rt._unit();
                const Ut = rt.x * tt.x + rt.y * tt.y, St = Ut !== 0 ? 1 / Ut : 1 / 0, Nt = dt.x * tt.y - dt.y * tt.x > 0;
                let Qt = "miter";
                const pi = 2;
                Qt === "miter" && St > pi && (Qt = "bevel"), Qt === "bevel" && (St > 100 && (Qt = "flipbevel"), St < pi && (Qt = "miter"));
                const gi = (Ai, yi, Ii, fn) => {
                  const rn = new Et(Ai.x, Ai.y), hi = new Et(Ai.x, Ai.y);
                  rn.x += yi.x * fn, rn.y += yi.y * fn, hi.x -= yi.x * Math.max(Ii, 1), hi.y -= yi.y * Math.max(Ii, 1), Re.push(yi), ze.push(rn), Ie.push(hi);
                };
                if (Qt === "miter")
                  rt._mult(St), gi(Ue, rt, 0, 0);
                else if (Qt === "flipbevel")
                  rt = tt.mult(-1), gi(Ue, rt, 0, 0), gi(Ue, rt.mult(-1), 0, 0);
                else {
                  const Ai = -Math.sqrt(St * St - 1), yi = Nt ? Ai : 0, Ii = Nt ? 0 : Ai;
                  Fe && gi(Ue, dt, yi, Ii), et && gi(Ue, tt, yi, Ii);
                }
              }
              Ee.geometry = [...ze, ...Ie.reverse(), ze[0]], Ee.joinNormals = [...Re, ...Re.reverse(), Re[Re.length - 1]];
              const wt = Ee.geometry.length - 1;
              for (let At = 0; At < wt / 2; At++)
                if (At + 1 < wt / 2) {
                  let rt = At, Ut = At + 1, St = wt - 1 - At, Nt = wt - 2 - At;
                  rt = rt === 0 ? wt - 1 : rt - 1, Ut = Ut === 0 ? wt - 1 : Ut - 1, St = St === 0 ? wt - 1 : St - 1, Nt = Nt === 0 ? wt - 1 : Nt - 1, Ee.indices.push(St), Ee.indices.push(Ut), Ee.indices.push(rt), Ee.indices.push(St), Ee.indices.push(Nt), Ee.indices.push(Ut);
                }
              return Ee;
            }(n[0]), n = [q.geometry];
          }
          const $ = (ue, Se) => ue < (Se.length - 1) / 2 || ue === Se.length - 1, H = this.wallMode ? [n] : Mp(n, 500);
          for (let ue = H.length - 1; ue >= 0; ue--) {
            const Se = H[ue];
            (Se.length === 0 || (K = Se[0]).every((me) => me.x <= 0) || K.every((me) => me.x >= Tt) || K.every((me) => me.y <= 0) || K.every((me) => me.y >= Tt)) && H.splice(ue, 1);
          }
          var K;
          let Q;
          if (I)
            Q = x0(H, x, u);
          else {
            Q = [];
            for (const ue of H)
              Q.push({ polygon: ue, bounds: x });
          }
          const ie = M ? this.edgeRadius : 0, fe = ie > 0 && this.zoom < 17, de = (ue, Se) => {
            if (ue.length === 0)
              return !1;
            const me = ue[ue.length - 1];
            return Se.x === me.x && Se.y === me.y;
          };
          for (const { polygon: ue, bounds: Se } of Q) {
            let me = 0, Ee = 0;
            for (const Ve of ue)
              M && !Ve[0].equals(Ve[Ve.length - 1]) && Ve.push(Ve[0]), Ee += M ? Ve.length - 1 : Ve.length;
            const ze = this.segments.prepareSegment((M ? 5 : 4) * Ee, this.layoutVertexArray, this.indexArray);
            k.footprintSegIdx < 0 && (k.footprintSegIdx = this.footprintSegments.length), k.polygonSegIdx < 0 && (k.polygonSegIdx = this.polygonSegments.length);
            const Ie = { triangleArrayOffset: this.indexArray.length, triangleCount: 0, triangleSegIdx: this.segments.segments.length - 1 }, Re = new l0();
            if (Re.vertexOffset = this.footprintVertices.length, Re.indexOffset = 3 * this.footprintIndices.length, Re.ringIndices = [], M) {
              const Ve = [], Ue = [];
              me = ze.vertexLength;
              for (let et = 0; et < ue.length; et++) {
                const dt = ue[et];
                dt.length && et !== 0 && Ue.push(Ve.length / 2);
                const tt = [];
                let Mt, wt;
                Mt = dt[1].sub(dt[0])._perp()._unit(), Re.ringIndices.push(dt.length - 1);
                for (let At = 1; At < dt.length; At++) {
                  const rt = dt[At], Ut = dt[At === dt.length - 1 ? 1 : At + 1], St = rt.clone();
                  if (ie) {
                    wt = Ut.sub(rt)._perp()._unit();
                    const Nt = Mt.add(wt)._unit(), Qt = ie * Math.min(4, 1 / (Mt.x * Nt.x + Mt.y * Nt.y));
                    St.x += Qt * Nt.x, St.y += Qt * Nt.y, St.x = Math.round(St.x), St.y = Math.round(St.y), Mt = wt;
                  }
                  if (!V || ie !== 0 && !fe || de(tt, St) || tt.push(St), Gd(this.layoutVertexArray, St.x, St.y, 0, 0, 1, 1, 0), this.wallMode) {
                    const Nt = $(At, dt);
                    Zd(this.wallVertexArray, q.joinNormals[At], !Nt);
                  }
                  ze.vertexLength++, this.footprintVertices.emplaceBack(rt.x, rt.y), Ve.push(rt.x, rt.y), I && Hd(this.layoutVertexExtArray, P.projectTilePoint(St.x, St.y, u), P.upVector(u, St.x, St.y));
                }
                V && (ie === 0 || fe) && (tt.length !== 0 && de(tt, tt[0]) && tt.pop(), this.groundEffect.addData(tt, Se, D));
              }
              const Fe = this.wallMode ? q.indices : Nd(Ve, Ue);
              for (let et = 0; et < Fe.length; et += 3)
                this.footprintIndices.emplaceBack(Re.vertexOffset + Fe[et + 0], Re.vertexOffset + Fe[et + 1], Re.vertexOffset + Fe[et + 2]), this.indexArray.emplaceBack(me + Fe[et], me + Fe[et + 2], me + Fe[et + 1]), ze.primitiveLength++;
              Re.indexCount += Fe.length, Re.vertexCount += this.footprintVertices.length - Re.vertexOffset;
            }
            for (let Ve = 0; Ve < ue.length; Ve++) {
              const Ue = ue[Ve];
              C.startRing(k, Ue[0]);
              let Fe = Ue.length > 4 && _0(Ue[Ue.length - 2], Ue[0], Ue[1]), et = ie ? tT(Ue[Ue.length - 2], Ue[0], Ue[1], ie) : 0;
              const dt = [];
              let tt, Mt, wt;
              Mt = Ue[1].sub(Ue[0])._perp()._unit();
              let At = !0;
              for (let rt = 1, Ut = 0; rt < Ue.length; rt++) {
                let St = Ue[rt - 1], Nt = Ue[rt];
                const Qt = Ue[rt === Ue.length - 1 ? 1 : rt + 1];
                if (C.appendEdge(k, Nt, St), C_(Nt, St, Se)) {
                  ie && (Mt = Qt.sub(Nt)._perp()._unit(), At = !At);
                  continue;
                }
                const pi = Nt.sub(St)._perp(), gi = pi.x / (Math.abs(pi.x) + Math.abs(pi.y)), Ai = pi.y > 0 ? 1 : 0, yi = St.dist(Nt);
                if (Ut + yi > 32768 && (Ut = 0), ie) {
                  wt = Qt.sub(Nt)._perp()._unit();
                  let hi = p0(St, Nt, Qt, f0(Mt, wt), ie);
                  isNaN(hi) && (hi = 0);
                  const on = Nt.sub(St)._unit();
                  St = St.add(on.mult(et))._round(), Nt = Nt.add(on.mult(-hi))._round(), et = hi, Mt = wt, V && this.zoom >= 17 && (de(dt, St) || dt.push(St), de(dt, Nt) || dt.push(Nt));
                }
                const Ii = ze.vertexLength, fn = Ue.length > 4 && _0(St, Nt, Qt);
                let rn = g0(Ut, Fe, At);
                if (Gd(this.layoutVertexArray, St.x, St.y, gi, Ai, 0, 0, rn), Gd(this.layoutVertexArray, St.x, St.y, gi, Ai, 0, 1, rn), this.wallMode) {
                  const hi = $(rt - 1, Ue), on = q.joinNormals[rt - 1];
                  Zd(this.wallVertexArray, on, hi), Zd(this.wallVertexArray, on, hi);
                }
                if (Ut += yi, rn = g0(Ut, fn, !At), Fe = fn, Gd(this.layoutVertexArray, Nt.x, Nt.y, gi, Ai, 0, 0, rn), Gd(this.layoutVertexArray, Nt.x, Nt.y, gi, Ai, 0, 1, rn), this.wallMode) {
                  const hi = $(rt, Ue), on = q.joinNormals[rt];
                  Zd(this.wallVertexArray, on, hi), Zd(this.wallVertexArray, on, hi);
                }
                if (ze.vertexLength += 4, this.indexArray.emplaceBack(Ii + 0, Ii + 1, Ii + 2), this.indexArray.emplaceBack(Ii + 1, Ii + 3, Ii + 2), ze.primitiveLength += 2, ie) {
                  const hi = me + (rt === 1 ? Ue.length - 2 : rt - 2), on = rt === 1 ? me : hi + 1;
                  if (this.indexArray.emplaceBack(Ii + 1, hi, Ii + 3), this.indexArray.emplaceBack(hi, on, Ii + 3), ze.primitiveLength += 2, tt === void 0 && (tt = Ii), !C_(Qt, Ue[rt], Se)) {
                    const Qi = rt === Ue.length - 1 ? tt : ze.vertexLength;
                    this.indexArray.emplaceBack(Ii + 2, Ii + 3, Qi), this.indexArray.emplaceBack(Ii + 3, Qi + 1, Qi), this.indexArray.emplaceBack(Ii + 3, on, Qi + 1), ze.primitiveLength += 3;
                  }
                  At = !At;
                }
                if (I) {
                  const hi = this.layoutVertexExtArray, on = P.projectTilePoint(St.x, St.y, u), Qi = P.projectTilePoint(Nt.x, Nt.y, u), pn = P.upVector(u, St.x, St.y), as = P.upVector(u, Nt.x, Nt.y);
                  Hd(hi, on, pn), Hd(hi, on, pn), Hd(hi, Qi, as), Hd(hi, Qi, as);
                }
              }
              M && (me += Ue.length - 1), V && ie && this.zoom >= 17 && (dt.length !== 0 && de(dt, dt[0]) && dt.pop(), this.groundEffect.addData(dt, Se, D, ie > 0));
            }
            this.footprintSegments.push(Re), Ie.triangleCount = this.indexArray.length - Ie.triangleArrayOffset, this.polygonSegments.push(Ie), ++k.footprintSegLen, ++k.polygonSegLen;
          }
          if (k.vertexCount = this.layoutVertexArray.length - k.vertexArrayOffset, k.groundVertexCount = this.groundEffect.vertexArray.length - k.groundVertexArrayOffset, k.vertexCount !== 0) {
            if (k.centroidXY = C.borders ? a0 : this.encodeCentroid(C, k), this.centroidData.push(k), C.borders) {
              this.featuresOnBorder.push(C);
              const ue = this.featuresOnBorder.length - 1;
              for (let Se = 0; Se < C.borders.length; Se++)
                C.borders[Se][0] !== Number.MAX_VALUE && this.borderFeatureIndices[Se].push(ue);
            }
            this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, e, o, l, f, u, S), this.groundEffect.addPaintPropertiesData(e, o, l, f, u, S), this.maxHeight = Math.max(this.maxHeight, U);
          }
        }
        sortBorders() {
          for (let e = 0; e < this.borderFeatureIndices.length; e++)
            this.borderFeatureIndices[e].sort((n, o) => this.featuresOnBorder[n].borders[e][0] - this.featuresOnBorder[o].borders[e][0]);
        }
        splitToSubtiles() {
          const e = [];
          for (let v = 0; v < this.centroidData.length; v++) {
            const S = this.centroidData[v], D = +(S.min.y + S.max.y > Tt), x = 2 * D + (+(S.min.x + S.max.x > Tt) ^ D);
            for (let P = 0; P < S.polygonSegLen; P++) {
              const I = S.polygonSegIdx + P;
              e.push({ centroidIdx: v, subtile: x, polygonSegmentIdx: I, triangleSegmentIdx: this.polygonSegments[I].triangleSegIdx });
            }
          }
          const n = new qs();
          e.sort((v, S) => v.triangleSegmentIdx === S.triangleSegmentIdx ? v.subtile - S.subtile : v.triangleSegmentIdx - S.triangleSegmentIdx);
          let o = 0, u = 0, l = 0;
          for (const v of e) {
            if (v.triangleSegmentIdx !== o)
              break;
            l++;
          }
          const f = e.length;
          for (; u !== e.length; ) {
            o = e[u].triangleSegmentIdx;
            let v = 0, S = u, D = u;
            for (let x = S; x < l && e[x].subtile === v; x++)
              D++;
            for (; S !== l; ) {
              const x = e[S];
              v = x.subtile;
              const P = this.centroidData[x.centroidIdx].min.clone(), I = this.centroidData[x.centroidIdx].max.clone(), M = { vertexOffset: this.segments.segments[o].vertexOffset, primitiveOffset: n.length, vertexLength: this.segments.segments[o].vertexLength, primitiveLength: 0, sortKey: void 0, vaos: {} };
              for (let C = S; C < D; C++) {
                const k = e[C], V = this.polygonSegments[k.polygonSegmentIdx], U = this.centroidData[k.centroidIdx].min, q = this.centroidData[k.centroidIdx].max, $ = this.indexArray.uint16;
                for (let H = V.triangleArrayOffset; H < V.triangleArrayOffset + V.triangleCount; H++)
                  n.emplaceBack($[3 * H], $[3 * H + 1], $[3 * H + 2]);
                M.primitiveLength += V.triangleCount, P.x = Math.min(P.x, U.x), P.y = Math.min(P.y, U.y), I.x = Math.max(I.x, q.x), I.y = Math.max(I.y, q.y);
              }
              M.primitiveLength > 0 && this.triangleSubSegments.push({ segment: M, min: P, max: I }), S = D;
              for (let C = S; C < l && e[C].subtile === e[S].subtile; C++)
                D++;
            }
            u = l;
            for (let x = u; x < f && e[x].triangleSegmentIdx === e[u].triangleSegmentIdx; x++)
              l++;
          }
          n._trim(), this.indexArray = n;
        }
        getVisibleSegments(e, n, o) {
          const u = new Wn();
          if (this.wallMode) {
            for (const k of this.triangleSubSegments)
              u.segments.push(k.segment);
            return u;
          }
          let l = 0, f = 0;
          const v = 1 << e.canonical.z;
          if (n) {
            const k = n.getMinMaxForTile(e);
            k && (l = k.min, f = k.max);
          }
          f += this.maxHeight;
          const S = e.toUnwrapped();
          let D;
          const x = [S.canonical.x / v + S.wrap, S.canonical.y / v], P = [(S.canonical.x + 1) / v + S.wrap, (S.canonical.y + 1) / v], I = (k, V, U) => [k[0] * (1 - U[0]) + V[0] * U[0], k[1] * (1 - U[1]) + V[1] * U[1]], M = [], C = [];
          for (const k of this.triangleSubSegments) {
            M[0] = k.min.x / Tt, M[1] = k.min.y / Tt, C[0] = k.max.x / Tt, C[1] = k.max.y / Tt;
            const V = I(x, P, M), U = I(x, P, C);
            if (new Jt([V[0], V[1], l], [U[0], U[1], f]).intersectsPrecise(o) === 0) {
              D && (u.segments.push(D), D = void 0);
              continue;
            }
            const q = k.segment;
            D && D.vertexOffset !== q.vertexOffset && (u.segments.push(D), D = void 0), D ? (D.vertexLength += q.vertexLength, D.primitiveLength += q.primitiveLength) : D = { vertexOffset: q.vertexOffset, primitiveLength: q.primitiveLength, vertexLength: q.vertexLength, primitiveOffset: q.primitiveOffset, sortKey: void 0, vaos: {} };
          }
          return D && u.segments.push(D), u;
        }
        encodeCentroid(e, n) {
          const o = e.centroid(), u = n.span(), l = Math.min(7, Math.round(u.x * this.tileToMeter / 10)), f = Math.min(7, Math.round(u.y * this.tileToMeter / 10));
          return new Et(si(o.x, 1, Tt - 1) << 3 | l, si(o.y, 1, Tt - 1) << 3 | f);
        }
        encodeBorderCentroid(e) {
          if (!e.borders)
            return new Et(0, 0);
          const n = e.borders, o = Number.MAX_VALUE;
          if (n[0][0] !== o || n[1][0] !== o) {
            const u = n[0][0] !== o ? 0 : 1;
            return new Et(6 | (n[0][0] !== o ? 0 : 65528), (n[u][0] + n[u][1]) / 2 << 3 | 6);
          }
          {
            const u = n[2][0] !== o ? 2 : 3;
            return new Et((n[u][0] + n[u][1]) / 2 << 3 | 6, 6 | (n[2][0] !== o ? 0 : 65528));
          }
        }
        showCentroid(e) {
          const n = this.centroidData[e.centroidDataIndex];
          n.flags &= yc, n.centroidXY.x = 0, n.centroidXY.y = 0, this.writeCentroidToBuffer(n);
        }
        writeCentroidToBuffer(e) {
          this.groundEffect.updateHiddenByLandmark(e);
          const n = e.vertexArrayOffset, o = e.vertexCount + e.vertexArrayOffset, u = e.flags & yc ? a0 : e.centroidXY, l = this.centroidVertexArray.geta_centroid_pos0(n);
          if (this.centroidVertexArray.geta_centroid_pos1(n) !== u.y || l !== u.x) {
            for (let f = n; f < o; ++f)
              this.centroidVertexArray.emplace(f, u.x, u.y);
            this.needsCentroidUpdate = !0;
          }
        }
        createCentroidsBuffer() {
          this.centroidVertexArray.resize(this.layoutVertexArray.length), this.groundEffect.hiddenByLandmarkVertexArray.resize(this.groundEffect.vertexArray.length);
          for (const e of this.centroidData)
            this.writeCentroidToBuffer(e);
        }
        updateReplacement(e, n, o) {
          if (n.updateTime === this.replacementUpdateTime)
            return;
          this.replacementUpdateTime = n.updateTime;
          const u = n.getReplacementRegionsForTile(e.toUnwrapped());
          if (E_(this.activeReplacements, u))
            return;
          if (this.activeReplacements = u, this.centroidVertexArray.length === 0)
            this.createCentroidsBuffer();
          else
            for (const f of this.centroidData)
              f.flags &= 2147483647;
          const l = [];
          for (const f of this.activeReplacements) {
            if (f.order < o)
              continue;
            const v = Math.max(1, Math.pow(2, f.footprintTileId.canonical.z - e.canonical.z));
            for (const S of this.centroidData)
              if (!(S.flags & yc || f.min.x > S.max.x || S.min.x > f.max.x || f.min.y > S.max.y || S.min.y > f.max.y))
                for (let D = 0; D < S.footprintSegLen; D++) {
                  const x = this.footprintSegments[S.footprintSegIdx + D];
                  if (l.length = 0, iT(this.footprintVertices, x.vertexOffset, x.vertexCount, f.footprintTileId.canonical, e.canonical, l), i0(f.footprint, l, this.footprintIndices.uint16, x.indexOffset, x.indexCount, -x.vertexOffset, -v)) {
                    S.flags |= yc;
                    break;
                  }
                }
          }
          for (const f of this.centroidData)
            this.writeCentroidToBuffer(f);
          this.borderDoneWithNeighborZ = [-1, -1, -1, -1];
        }
        footprintContainsPoint(e, n, o) {
          let u = !1;
          for (let l = 0; l < o.footprintSegLen; l++) {
            const f = this.footprintSegments[o.footprintSegIdx + l];
            let v = 0;
            for (const S of f.ringIndices) {
              for (let D = v, x = S + v - 1; D < S + v; x = D++) {
                const P = this.footprintVertices.int16[2 * (D + f.vertexOffset) + 0], I = this.footprintVertices.int16[2 * (D + f.vertexOffset) + 1], M = this.footprintVertices.int16[2 * (x + f.vertexOffset) + 1];
                I > n != M > n && e < (this.footprintVertices.int16[2 * (x + f.vertexOffset) + 0] - P) * (n - I) / (M - I) + P && (u = !u);
              }
              v = S;
            }
          }
          return u;
        }
        getHeightAtTileCoord(e, n) {
          let o = Number.NEGATIVE_INFINITY, u = !0;
          const l = 4 * (e + Tt) * Tt + (n + Tt);
          if (this.partLookup.hasOwnProperty(l)) {
            const f = this.partLookup[l];
            return f ? { height: f.height, hidden: !!(f.flags & yc) } : void 0;
          }
          for (const f of this.centroidData)
            e > f.max.x || f.min.x > e || n > f.max.y || f.min.y > n || this.footprintContainsPoint(e, n, f) && f && f.height > o && (o = f.height, this.partLookup[l] = f, u = !!(f.flags & yc));
          if (o !== Number.NEGATIVE_INFINITY)
            return { height: o, hidden: u };
          this.partLookup[l] = void 0;
        }
      }
      function f0(r, e) {
        const n = r.add(e)._unit();
        return r.x * n.x + r.y * n.y;
      }
      function tT(r, e, n, o) {
        const u = e.sub(r)._perp()._unit(), l = n.sub(e)._perp()._unit();
        return p0(r, e, n, f0(u, l), o);
      }
      function p0(r, e, n, o, u) {
        const l = Math.sqrt(1 - o * o);
        return Math.min(r.dist(e) / 3, e.dist(n) / 3, u * l / o);
      }
      function C_(r, e, n) {
        return r.x < n[0].x && e.x < n[0].x || r.x > n[1].x && e.x > n[1].x || r.y < n[0].y && e.y < n[0].y || r.y > n[1].y && e.y > n[1].y;
      }
      function m0(r, e) {
        return r.x < e[0].x || r.x > e[1].x || r.y < e[0].y || r.y > e[1].y;
      }
      function _0(r, e, n) {
        if (r.x < 0 || r.x >= Tt || e.x < 0 || e.x >= Tt || n.x < 0 || n.x >= Tt)
          return !1;
        const o = n.sub(e), u = o.perp(), l = r.sub(e);
        return (o.x * l.x + o.y * l.y) / Math.sqrt((o.x * o.x + o.y * o.y) * (l.x * l.x + l.y * l.y)) > -0.866 && u.x * l.x + u.y * l.y < 0;
      }
      function g0(r, e, n) {
        const o = e ? 2 | r : -3 & r;
        return n ? 1 | o : -2 & o;
      }
      function y0() {
        const r = Math.PI / 32, e = Math.tan(r), n = _c;
        return n * Math.sqrt(1 + 2 * e * e) - n;
      }
      function x0(r, e, n) {
        const o = 1 << n.z, u = Fr(n.x / o), l = Fr((n.x + 1) / o), f = Os(n.y / o), v = Os((n.y + 1) / o);
        return function(S, D, x, P, I = 0, M) {
          const C = [];
          if (!S.length || !x || !P)
            return C;
          const k = (Q, ie) => {
            for (const fe of Q)
              C.push({ polygon: fe, bounds: ie });
          }, V = Math.ceil(Math.log2(x)), U = Math.ceil(Math.log2(P)), q = V - U, $ = [];
          for (let Q = 0; Q < Math.abs(q); Q++)
            $.push(q > 0 ? 0 : 1);
          for (let Q = 0; Q < Math.min(V, U); Q++)
            $.push(0), $.push(1);
          let H = S;
          if (H = Ep(H, D[0].y - I, D[1].y + I, 1), H = Ep(H, D[0].x - I, D[1].x + I, 0), !H.length)
            return C;
          const K = [];
          for ($.length ? K.push({ polygons: H, bounds: D, depth: 0 }) : k(H, D); K.length; ) {
            const Q = K.pop(), ie = Q.depth, fe = $[ie], de = Q.bounds[0], ue = Q.bounds[1], Se = fe === 0 ? de.x : de.y, me = fe === 0 ? ue.x : ue.y, Ee = M ? M(fe, Se, me) : 0.5 * (Se + me), ze = Ep(Q.polygons, Se - I, Ee + I, fe), Ie = Ep(Q.polygons, Ee - I, me + I, fe);
            if (ze.length) {
              const Re = [de, new Et(fe === 0 ? Ee : ue.x, fe === 1 ? Ee : ue.y)];
              $.length > ie + 1 ? K.push({ polygons: ze, bounds: Re, depth: ie + 1 }) : k(ze, Re);
            }
            if (Ie.length) {
              const Re = [new Et(fe === 0 ? Ee : de.x, fe === 1 ? Ee : de.y), ue];
              $.length > ie + 1 ? K.push({ polygons: Ie, bounds: Re, depth: ie + 1 }) : k(Ie, Re);
            }
          }
          return C;
        }(r, e, Math.ceil((l - u) / 11.25), Math.ceil((f - v) / 11.25), 1, (S, D, x) => {
          if (S === 0)
            return 0.5 * (D + x);
          {
            const P = Os((n.y + D / Tt) / o);
            return (Ta(0.5 * (Os((n.y + x / Tt) / o) + P)) * o - n.y) * Tt;
          }
        });
      }
      function iT(r, e, n, o, u, l) {
        const f = Math.pow(2, o.z - u.z);
        for (let v = 0; v < n; v++) {
          let S = r.int16[2 * (v + e) + 0], D = r.int16[2 * (v + e) + 1];
          S = (S + u.x * Tt) * f - o.x * Tt, D = (D + u.y * Tt) * f - o.y * Tt, l.push(new Et(S, D));
        }
      }
      let v0, b0;
      function qd(r, e) {
        return r.x * e.x + r.y * e.y;
      }
      function w0(r, e) {
        if (r.length === 1) {
          let n = 0;
          const o = e[n++];
          let u;
          for (; !u || o.equals(u); )
            if (u = e[n++], !u)
              return 1 / 0;
          for (; n < e.length; n++) {
            const l = e[n], f = r[0], v = u.sub(o), S = l.sub(o), D = f.sub(o), x = qd(v, v), P = qd(v, S), I = qd(S, S), M = qd(D, v), C = qd(D, S), k = x * I - P * P, V = (I * M - P * C) / k, U = (x * C - P * M) / k, q = o.z * (1 - V - U) + u.z * V + l.z * U;
            if (isFinite(q))
              return q;
          }
          return 1 / 0;
        }
        {
          let n = 1 / 0;
          for (const o of e)
            n = Math.min(n, o.z);
          return n;
        }
      }
      function T0(r, e, n, o, u, l, f, v) {
        const S = f * u.getElevationAt(r, e, !0, !0), D = l[0] !== 0, x = D ? l[1] === 0 ? f * (l[0] / 7 - 450) : f * function(P, I, M) {
          const C = Math.floor(I[0] / 8), k = Math.floor(I[1] / 8), V = 10 * (I[0] - 8 * C), U = 10 * (I[1] - 8 * k), q = P.getElevationAt(C, k, !0, !0), $ = P.getMeterToDEM(M), H = Math.floor(0.5 * (V * $ - 1)), K = Math.floor(0.5 * (U * $ - 1)), Q = P.tileCoordToPixel(C, k), ie = 2 * H + 1, fe = 2 * K + 1, de = function(Ie, Re, Ve, Ue, Fe) {
            return [Ie.getElevationAtPixel(Re, Ve, !0), Ie.getElevationAtPixel(Re + Fe, Ve, !0), Ie.getElevationAtPixel(Re, Ve + Fe, !0), Ie.getElevationAtPixel(Re + Ue, Ve + Fe, !0)];
          }(P, Q.x - H, Q.y - K, ie, fe), ue = Math.abs(de[0] - de[1]), Se = Math.abs(de[2] - de[3]), me = Math.abs(de[0] - de[2]) + Math.abs(de[1] - de[3]), Ee = Math.min(0.25, 0.5 * $ * (ue + Se) / ie), ze = Math.min(0.25, 0.5 * $ * me / fe);
          return q + Math.max(Ee * V, ze * U);
        }(u, l, v) : S;
        return { base: S + (n === 0 ? -1 : n), top: D ? Math.max(x + o, S + n + 2) : S + o };
      }
      Ft(Ip, "FillExtrusionBucket", { omit: ["layers", "features"] }), Ft(c0, "PartData"), Ft(l0, "FootprintSegment"), Ft(h0, "BorderCentroidData"), Ft(d0, "GroundEffect");
      const nT = qi([{ name: "a_pos_normal", components: 2, type: "Int16" }, { name: "a_data", components: 4, type: "Uint8" }, { name: "a_linesofar", components: 1, type: "Float32" }], 4), sT = qi([{ name: "a_z_offset_width", components: 2, type: "Float32" }], 4), { members: rT } = nT, oT = qi([{ name: "a_packed", components: 4, type: "Float32" }]), { members: aT } = oT, lT = qi([{ name: "a_pattern_data", components: 3, type: "Float32" }]), { members: cT } = lT;
      class M0 {
        constructor(e, n) {
          this.width = e, this.height = n, this.nextRow = 0, this.image = new gc({ width: e, height: n }), this.positions = {}, this.uploaded = !1;
        }
        getDash(e, n) {
          const o = this.getKey(e, n);
          return this.positions[o];
        }
        trim() {
          const e = this.width, n = this.height = xo(this.nextRow);
          this.image.resize({ width: e, height: n });
        }
        getKey(e, n) {
          return e.join(",") + n;
        }
        getDashRanges(e, n, o) {
          const u = [];
          let l = e.length % 2 == 1 ? -e[e.length - 1] * o : 0, f = e[0] * o, v = !0;
          u.push({ left: l, right: f, isDash: v, zeroLength: e[0] === 0 });
          let S = e[0];
          for (let D = 1; D < e.length; D++) {
            v = !v;
            const x = e[D];
            l = S * o, S += x, f = S * o, u.push({ left: l, right: f, isDash: v, zeroLength: x === 0 });
          }
          return u;
        }
        addRoundDash(e, n, o) {
          const u = n / 2;
          for (let l = -o; l <= o; l++) {
            const f = this.width * (this.nextRow + o + l);
            let v = 0, S = e[v];
            for (let D = 0; D < this.width; D++) {
              D / S.right > 1 && (S = e[++v]);
              const x = Math.abs(D - S.left), P = Math.abs(D - S.right), I = Math.min(x, P);
              let M;
              const C = l / o * (u + 1);
              if (S.isDash) {
                const k = u - Math.abs(C);
                M = Math.sqrt(I * I + k * k);
              } else
                M = u - Math.sqrt(I * I + C * C);
              this.image.data[f + D] = Math.max(0, Math.min(255, M + 128));
            }
          }
        }
        addRegularDash(e, n) {
          for (let S = e.length - 1; S >= 0; --S) {
            const D = e[S], x = e[S + 1];
            D.zeroLength ? e.splice(S, 1) : x && x.isDash === D.isDash && (x.left = D.left, e.splice(S, 1));
          }
          const o = e[0], u = e[e.length - 1];
          o.isDash === u.isDash && (o.left = u.left - this.width, u.right = o.right + this.width);
          const l = this.width * this.nextRow;
          let f = 0, v = e[f];
          for (let S = 0; S < this.width; S++) {
            S / v.right > 1 && (v = e[++f]);
            const D = Math.abs(S - v.left), x = Math.abs(S - v.right), P = Math.min(D, x);
            this.image.data[l + S] = Math.max(0, Math.min(255, (v.isDash ? P : -P) + n + 128));
          }
        }
        addDash(e, n) {
          const o = this.getKey(e, n);
          if (this.positions[o])
            return this.positions[o];
          const u = n === "round", l = u ? 7 : 0, f = 2 * l + 1;
          if (this.nextRow + f > this.height)
            return mi("LineAtlas out of space"), null;
          e.length === 0 && e.push(1);
          let v = 0;
          for (let x = 0; x < e.length; x++)
            e[x] < 0 && (mi("Negative value is found in line dasharray, replacing values with 0"), e[x] = 0), v += e[x];
          if (v !== 0) {
            const x = this.width / v, P = this.getDashRanges(e, this.width, x);
            u ? this.addRoundDash(P, x, l) : this.addRegularDash(P, n === "square" ? 0.5 * x : 0);
          }
          const S = this.nextRow + l;
          this.nextRow += f;
          const D = { tl: [S, l], br: [v, 0] };
          return this.positions[o] = D, D;
        }
      }
      Ft(M0, "LineAtlas");
      const hT = Iu.VectorTileFeature.types, uT = Math.cos(Math.PI / 180 * 37.5), dT = Math.cos(Math.PI / 180 * 5);
      class I_ {
        constructor(e) {
          this.evaluationGlobals = { zoom: 0, lineProgress: void 0 }, this.zoom = e.zoom, this.evaluationGlobals.zoom = this.zoom, this.overscaling = e.overscaling, this.layers = e.layers, this.layerIds = this.layers.map((n) => n.fqid), this.index = e.index, this.projection = e.projection, this.hasPattern = !1, this.hasZOffset = !1, this.hasCrossSlope = !1, this.patternFeatures = [], this.lineClipsArray = [], this.gradients = {}, this.layers.forEach((n) => {
            this.gradients[n.id] = {};
          }), this.layoutVertexArray = new ho(), this.layoutVertexArray2 = new Xa(), this.patternVertexArray = new va(), this.indexArray = new qs(), this.programConfigurations = new Qa(e.layers, { zoom: e.zoom, lut: e.lut }), this.segments = new Wn(), this.maxLineLength = 0, this.zOffsetVertexArray = new Pl(), this.stateDependentLayerIds = this.layers.filter((n) => n.isStateDependent()).map((n) => n.id), this.tessellationStep = e.tessellationStep ? e.tessellationStep : Tt / 64;
        }
        updateFootprints(e, n) {
        }
        populate(e, n, o, u) {
          this.hasPattern = y_("line", this.layers, n);
          const l = this.layers[0].layout.get("line-sort-key");
          this.tileToMeter = s(o), this.hasZOffset = !this.layers[0].isDraped();
          const f = this.layers[0].layout.get("line-elevation-reference");
          this.hasZOffset && f === "none" && mi(`line-elevation-reference: ground is used for the layer ${this.layerIds[0]} because non-zero line-z-offset value was found.`);
          const v = this.layers[0].layout.get("line-cross-slope");
          this.hasCrossSlope = this.hasZOffset && v !== void 0;
          const S = [];
          for (const { feature: I, id: M, index: C, sourceLayerIndex: k } of e) {
            const V = this.layers[0]._featureFilter.needGeometry, U = Z(I, V);
            if (!this.layers[0]._featureFilter.filter(new Tn(this.zoom), U, o))
              continue;
            const q = l ? l.evaluate(U, {}, o) : void 0, $ = { id: M, properties: I.properties, type: I.type, sourceLayerIndex: k, index: C, geometry: V ? U.geometry : G(I, o, u), patterns: {}, sortKey: q };
            S.push($);
          }
          l && S.sort((I, M) => I.sortKey - M.sortKey);
          const { lineAtlas: D, featureIndex: x } = n, P = this.addConstantDashes(D);
          for (const I of S) {
            const { geometry: M, index: C, sourceLayerIndex: k } = I;
            if (P && this.addFeatureDashes(I, D), this.hasPattern) {
              const V = x_("line", this.layers, I, this.zoom, n);
              this.patternFeatures.push(V);
            } else
              this.addFeature(I, M, C, o, D.positions, n.availableImages, n.brightness);
            x.insert(e[C].feature, M, C, k, this.index);
          }
        }
        addConstantDashes(e) {
          let n = !1;
          for (const o of this.layers) {
            const u = o.paint.get("line-dasharray").value, l = o.layout.get("line-cap").value;
            if (u.kind !== "constant" || l.kind !== "constant")
              n = !0;
            else {
              const f = l.value, v = u.value;
              if (!v)
                continue;
              e.addDash(v, f);
            }
          }
          return n;
        }
        addFeatureDashes(e, n) {
          const o = this.zoom;
          for (const u of this.layers) {
            const l = u.paint.get("line-dasharray").value, f = u.layout.get("line-cap").value;
            if (l.kind === "constant" && f.kind === "constant")
              continue;
            let v, S;
            if (l.kind === "constant") {
              if (v = l.value, !v)
                continue;
            } else
              v = l.evaluate({ zoom: o }, e);
            S = f.kind === "constant" ? f.value : f.evaluate({ zoom: o }, e), n.addDash(v, S), e.patterns[u.id] = n.getKey(v, S);
          }
        }
        update(e, n, o, u, l, f, v) {
          this.programConfigurations.updatePaintArrays(e, n, l, o, u, f, v);
        }
        addFeatures(e, n, o, u, l, f) {
          for (const v of this.patternFeatures)
            this.addFeature(v, v.geometry, v.index, n, o, u, f);
        }
        isEmpty() {
          return this.layoutVertexArray.length === 0;
        }
        uploadPending() {
          return !this.uploaded || this.programConfigurations.needsUpload;
        }
        upload(e) {
          this.uploaded || (this.layoutVertexArray2.length !== 0 && (this.layoutVertexBuffer2 = e.createVertexBuffer(this.layoutVertexArray2, aT)), this.patternVertexArray.length !== 0 && (this.patternVertexBuffer = e.createVertexBuffer(this.patternVertexArray, cT)), !this.zOffsetVertexBuffer && this.zOffsetVertexArray.length > 0 && (this.zOffsetVertexBuffer = e.createVertexBuffer(this.zOffsetVertexArray, sT.members, !0)), this.layoutVertexBuffer = e.createVertexBuffer(this.layoutVertexArray, rT), this.indexBuffer = e.createIndexBuffer(this.indexArray)), this.programConfigurations.upload(e), this.uploaded = !0;
        }
        destroy() {
          this.layoutVertexBuffer && (this.zOffsetVertexBuffer && this.zOffsetVertexBuffer.destroy(), this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy());
        }
        lineFeatureClips(e) {
          if (e.properties && e.properties.hasOwnProperty("mapbox_clip_start") && e.properties.hasOwnProperty("mapbox_clip_end"))
            return { start: +e.properties.mapbox_clip_start, end: +e.properties.mapbox_clip_end };
        }
        addFeature(e, n, o, u, l, f, v) {
          const S = this.layers[0].layout, D = S.get("line-join").evaluate(e, {}), x = S.get("line-cap").evaluate(e, {}), P = S.get("line-miter-limit"), I = S.get("line-round-limit");
          this.lineClips = this.lineFeatureClips(e), this.lineFeature = e, this.zOffsetValue = S.get("line-z-offset").value;
          const M = this.layers[0].paint.get("line-width").value;
          M.kind !== "constant" && M.isLineProgressConstant === !1 && (this.variableWidthValue = M);
          for (const C of n)
            this.addLine(C, e, u, D, x, P, I);
          this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length, e, o, l, f, u, v);
        }
        addLine(e, n, o, u, l, f, v) {
          this.distance = 0, this.prevDistance = 0, this.scaledDistance = 0, this.totalDistance = 0, this.totalFeatureLength = 0, this.lineSoFar = 0, this.currentVertex = void 0;
          const S = u === "none";
          if (this.patternJoinNone = this.hasPattern && S, this.segmentStart = 0, this.segmentStartf32 = 0, this.segmentPoints = [], this.lineClips) {
            this.lineClipsArray.push(this.lineClips);
            for (let $ = 0; $ < e.length - 1; $++)
              this.totalDistance += e[$].dist(e[$ + 1]);
            this.totalFeatureLength = this.totalDistance / (this.lineClips.end - this.lineClips.start), this.updateScaledDistance(), this.maxLineLength = Math.max(this.maxLineLength, this.totalDistance);
          }
          const D = hT[n.type] === "Polygon";
          let x = e.length;
          for (; x >= 2 && e[x - 1].equals(e[x - 2]); )
            x--;
          let P = 0;
          for (; P < x - 1 && e[P].equals(e[P + 1]); )
            P++;
          if (x < (D ? 3 : 2))
            return;
          u === "bevel" && (f = 1.05);
          const I = this.segments.prepareSegment(10 * x, this.layoutVertexArray, this.indexArray);
          let M, C, k, V, U, q;
          this.e1 = this.e2 = -1, D && (M = e[x - 2], U = e[P].sub(M)._unit()._perp());
          for (let $ = P; $ < x; $++) {
            if (k = $ === x - 1 ? D ? e[P + 1] : void 0 : e[$ + 1], k && e[$].equals(k))
              continue;
            U && (V = U), M && (C = M), M = e[$], q = this.evaluateLineProgressFeatures(C ? C.dist(M) : 0), U = k ? k.sub(M)._unit()._perp() : V, V = V || U;
            const H = C && k;
            let K = H ? u : D || S ? "butt" : l;
            const Q = V.x * U.x + V.y * U.y;
            if (S) {
              const ze = function(Ie) {
                if (Ie.patternJoinNone) {
                  const Re = Ie.segmentPoints.length / 2, Ve = Ie.lineSoFar - Ie.segmentStart;
                  for (let Ue = 0; Ue < Re; ++Ue) {
                    const Fe = Ie.segmentPoints[2 * Ue + 1], et = Math.round(Ie.segmentPoints[2 * Ue]) + 0.5 + 0.25 * Fe;
                    Ie.patternVertexArray.emplaceBack(et, Ve, Ie.segmentStart), Ie.patternVertexArray.emplaceBack(et, Ve, Ie.segmentStart);
                  }
                  Ie.segmentPoints.length = 0;
                }
                Ie.e1 = Ie.e2 = -1;
              };
              if (H && Q < dT) {
                this.updateDistance(C, M), this.addCurrentVertex(M, V, 1, 1, I, q), ze(this), this.addCurrentVertex(M, U, -1, -1, I, q);
                continue;
              }
              if (C) {
                if (!k) {
                  this.updateDistance(C, M), this.addCurrentVertex(M, V, 1, 1, I, q), ze(this);
                  continue;
                }
                K = "miter";
              }
            }
            let ie = V.add(U);
            ie.x === 0 && ie.y === 0 || ie._unit();
            const fe = ie.x * U.x + ie.y * U.y, de = fe !== 0 ? 1 / fe : 1 / 0, ue = 2 * Math.sqrt(2 - 2 * fe), Se = fe < uT && C && k, me = V.x * U.y - V.y * U.x > 0, Ee = this.overscaling <= 16 ? 15 * Tt / (512 * this.overscaling) : 0;
            if (H && K === "round") {
              if (de < v)
                K = "miter";
              else if (de <= 2) {
                const ze = L_(M, -10, Tt + 10);
                K = this.hasZOffset && (ze || this.hasCrossSlope) ? "miter" : "fakeround";
              }
            }
            if (K === "miter" && de > f && (K = "bevel"), K === "bevel" && (de > 2 && (K = "flipbevel"), de < f && (K = "miter")), C && !(K === "miter" && Se) && this.updateDistance(C, M), K === "miter")
              if (Se) {
                const ze = M.dist(C);
                if (ze > 2 * Ee) {
                  const Re = M.sub(M.sub(C)._mult(Ee / ze)._round());
                  this.updateDistance(C, Re), this.addCurrentVertex(Re, V, 0, 0, I, q), C = Re;
                }
                this.updateDistance(C, M), ie._mult(de), this.addCurrentVertex(M, ie, 0, 0, I, q);
                const Ie = M.dist(k);
                if (Ie > 2 * Ee) {
                  const Re = M.add(k.sub(M)._mult(Ee / Ie)._round());
                  this.updateDistance(M, Re), this.addCurrentVertex(Re, U, 0, 0, I, q), M = Re;
                }
              } else
                ie._mult(de), this.addCurrentVertex(M, ie, 0, 0, I, q);
            else if (K === "flipbevel") {
              if (de > 100)
                ie = U.mult(-1);
              else {
                const ze = de * V.add(U).mag() / V.sub(U).mag();
                ie._perp()._mult(ze * (me ? -1 : 1));
              }
              this.addCurrentVertex(M, ie, 0, 0, I, q), this.addCurrentVertex(M, ie.mult(-1), 0, 0, I, q);
            } else if (K === "bevel" || K === "fakeround") {
              q != null && C && this.addCurrentVertex(M, V, -1, -1, I, q);
              const ze = M.dist(C) <= 2 * Ee && K !== "bevel", Ie = ie.mult(me ? 1 : -1);
              Ie._mult(de);
              const Re = U.mult(me ? -1 : 1), Ve = V.mult(me ? -1 : 1), Ue = this.evaluateLineProgressFeatures(this.distance);
              if (q == null && (this.addHalfVertex(M, Ie.x, Ie.y, !1, !me, 0, I, Ue), ze || this.addHalfVertex(M, Ie.x + 2 * Ve.x, Ie.y + 2 * Ve.y, !1, me, 0, I, Ue)), K === "fakeround") {
                const Fe = Math.round(180 * ue / Math.PI / 20);
                this.addHalfVertex(M, Ve.x, Ve.y, !1, me, 0, I, Ue);
                for (let et = 0; et < Fe; et++) {
                  let dt = et / Fe;
                  if (dt !== 0.5) {
                    const Mt = dt - 0.5;
                    dt += dt * Mt * (dt - 1) * ((1.0904 + Q * (Q * (3.55645 - 1.43519 * Q) - 3.2452)) * Mt * Mt + (0.848013 + Q * (0.215638 * Q - 1.06021)));
                  }
                  const tt = Re.sub(Ve)._mult(dt)._add(Ve)._unit();
                  this.addHalfVertex(M, tt.x, tt.y, !1, me, 0, I, Ue);
                }
                this.addHalfVertex(M, Re.x, Re.y, !1, me, 0, I, Ue);
              }
              ze || q != null || this.addHalfVertex(M, Ie.x + 2 * Re.x, Ie.y + 2 * Re.y, !1, me, 0, I, Ue), q != null && k && this.addCurrentVertex(M, U, 1, 1, I, q);
            } else
              K === "butt" ? this.addCurrentVertex(M, ie, 0, 0, I, q) : K === "square" ? (C || this.addCurrentVertex(M, ie, -1, -1, I, q), this.addCurrentVertex(M, ie, 0, 0, I, q), C && this.addCurrentVertex(M, ie, 1, 1, I, q)) : K === "round" && (C && (this.addCurrentVertex(M, V, 0, 0, I, q), this.addCurrentVertex(M, V, 1, 1, I, q, !0)), k && (this.addCurrentVertex(M, U, -1, -1, I, q, !0), this.addCurrentVertex(M, U, 0, 0, I, q)));
          }
        }
        addVerticesTo(e, n, o, u, l, f, v, S, D, x) {
          const P = (n.w - e.w) / this.tessellationStep | 0;
          let I = 0;
          const M = this.scaledDistance;
          if (P > 1) {
            this.lineSoFar = e.w;
            const k = (n.x - e.x) / P, V = (n.y - e.y) / P, U = (n.z - e.z) / P, q = (n.w - e.w) / P;
            for (let $ = 1; $ < P; ++$) {
              e.x += k, e.y += V, e.z += U, this.lineSoFar += q, I += q;
              const H = this.evaluateLineProgressFeatures(this.prevDistance + I);
              this.scaledDistance = (this.prevDistance + I) / this.totalDistance, this.addHalfVertex(e, o, u, x, !1, v, D, H), this.addHalfVertex(e, l, f, x, !0, -S, D, H);
            }
          }
          this.lineSoFar = n.w, this.scaledDistance = M;
          const C = this.evaluateLineProgressFeatures(this.distance);
          this.addHalfVertex(n, o, u, x, !1, v, D, C), this.addHalfVertex(n, l, f, x, !0, -S, D, C);
        }
        evaluateLineProgressFeatures(e) {
          if (!this.variableWidthValue && !this.hasZOffset)
            return null;
          this.evaluationGlobals.lineProgress = 0, this.lineClips ? this.evaluationGlobals.lineProgress = Math.min(1, (this.totalFeatureLength * this.lineClips.start + e) / this.totalFeatureLength) : mi(`line-progress evaluation for ${this.layerIds[0]} requires enabling 'lineMetrics' for the source.`);
          let n = 0;
          return this.variableWidthValue && this.variableWidthValue.kind !== "constant" && (n = this.variableWidthValue.evaluate(this.evaluationGlobals, this.lineFeature) || 0), this.hasZOffset ? this.zOffsetValue.kind === "constant" ? { zOffset: this.zOffsetValue.value, variableWidth: n } : { zOffset: this.zOffsetValue.evaluate(this.evaluationGlobals, this.lineFeature) || 0, variableWidth: n } : { zOffset: 0, variableWidth: n };
        }
        addCurrentVertex(e, n, o, u, l, f, v = !1) {
          const S = n.x + n.y * o, D = n.y - n.x * o, x = n.y * u - n.x, P = -n.y - n.x * u;
          if (f != null) {
            const I = this.hasZOffset, M = -10, C = Tt + 10, k = f.zOffset, V = new Yy(e.x, e.y, k, this.lineSoFar), U = !!I && L_(e, M, C), q = this.lineSoFar, $ = this.distance;
            if (this.currentVertex)
              if (U) {
                const H = this.currentVertexIsOutside, K = this.currentVertex, Q = new Yy(e.x, e.y, k, this.lineSoFar);
                if (Jy(K, Q, M, C), !L_(Q, M, C)) {
                  if (H) {
                    this.e1 = this.e2 = -1, this.distance -= K.dist(V), this.lineSoFar = K.w;
                    const ie = this.evaluateLineProgressFeatures(K.w - this.totalFeatureLength * (this.lineClips ? this.lineClips.start : 0));
                    this.addHalfVertex(K, S, D, v, !1, o, l, ie), this.addHalfVertex(K, x, P, v, !0, -u, l, ie), this.prevDistance = this.distance;
                  }
                  this.distance = this.prevDistance + K.dist(Q), this.scaledDistance = this.distance / this.totalDistance, this.addVerticesTo(K, Q, S, D, x, P, o, u, l, v), this.distance = $, this.scaledDistance = this.distance / this.totalDistance;
                }
              } else {
                const H = this.currentVertex;
                if (this.currentVertexIsOutside) {
                  Jy(H, V, M, C), this.e1 = this.e2 = -1, this.distance -= H.dist(V), this.scaledDistance = this.distance / this.totalDistance, this.lineSoFar = H.w;
                  const K = this.evaluateLineProgressFeatures(H.w - this.totalFeatureLength * (this.lineClips ? this.lineClips.start : 0));
                  this.addHalfVertex(H, S, D, v, !1, o, l, K), this.addHalfVertex(H, x, P, v, !0, -u, l, K), this.prevDistance = this.distance, this.distance = $, this.scaledDistance = this.distance / this.totalDistance;
                }
                this.addVerticesTo(H, V, S, D, x, P, o, u, l, v);
              }
            else
              U || (this.addHalfVertex(e, S, D, v, !1, o, l, f), this.addHalfVertex(e, x, P, v, !0, -u, l, f));
            this.currentVertex = V, this.currentVertexIsOutside = U, this.lineSoFar = q;
          } else
            this.addHalfVertex(e, S, D, v, !1, o, l, f), this.addHalfVertex(e, x, P, v, !0, -u, l, f);
        }
        addHalfVertex({ x: e, y: n }, o, u, l, f, v, S, D) {
          this.patternJoinNone && (this.segmentPoints.length === 0 && (this.segmentStart = this.lineSoFar, this.segmentStartf32 = Math.fround(this.lineSoFar)), f || this.segmentPoints.push(this.lineSoFar - this.segmentStart, v)), this.layoutVertexArray.emplaceBack((e << 1) + (l ? 1 : 0), (n << 1) + (f ? 1 : 0), Math.round(63 * o) + 128, Math.round(63 * u) + 128, 1 + (v === 0 ? 0 : v < 0 ? -1 : 1), 0, this.lineSoFar - this.segmentStartf32), this.lineClips && this.layoutVertexArray2.emplaceBack(this.scaledDistance, this.lineClipsArray.length, this.lineClips.start, this.lineClips.end);
          const x = S.vertexLength++;
          this.e1 >= 0 && this.e2 >= 0 && (this.indexArray.emplaceBack(this.e1, this.e2, x), S.primitiveLength++), f ? this.e2 = x : this.e1 = x, D != null && this.zOffsetVertexArray.emplaceBack(D.zOffset, D.variableWidth);
        }
        updateScaledDistance() {
          this.lineClips ? (this.scaledDistance = this.distance / this.totalDistance, this.lineSoFar = this.totalFeatureLength * this.lineClips.start + this.distance) : this.lineSoFar = this.distance;
        }
        updateDistance(e, n) {
          this.prevDistance = this.distance, this.distance += e.dist(n), this.updateScaledDistance();
        }
      }
      function L_(r, e, n) {
        return r.x < e || r.x > n || r.y < e || r.y > n;
      }
      let S0, E0;
      function P0(r, e, n) {
        return e * (Tt / (r.tileSize * Math.pow(2, n - r.tileID.overscaledZ)));
      }
      Ft(I_, "LineBucket", { omit: ["layers", "patternFeatures", "currentVertex", "currentVertexIsOutside"] });
      const A0 = (r, e, n) => (1 - n) * r + n * e;
      function C0(r, e) {
        return 1 / P0(r, 1, e.tileZoom);
      }
      function I0(r, e, n, o) {
        return r.translatePosMatrix(o || e.tileID.projMatrix, e, n.paint.get("line-translate"), n.paint.get("line-translate-anchor"));
      }
      const L0 = (r) => {
        const e = [];
        z0(r) && e.push("RENDER_LINE_DASH"), r.paint.get("line-gradient") && e.push("RENDER_LINE_GRADIENT");
        const n = r.paint.get("line-trim-offset");
        n[0] === 0 && n[1] === 0 || e.push("RENDER_LINE_TRIM_OFFSET"), r.paint.get("line-border-width").constantOr(1) !== 0 && e.push("RENDER_LINE_BORDER");
        const o = r.layout.get("line-join").constantOr("miter") === "none", u = !!r.paint.get("line-pattern").constantOr(1);
        return o && u && e.push("LINE_JOIN_NONE"), e;
      };
      function z0(r) {
        const e = r.paint.get("line-dasharray").value;
        return e.value || e.kind !== "constant";
      }
      let z_;
      const D0 = () => z_ || (z_ = { layout: S0 || (S0 = new Bn({ "line-cap": new Dt($e.layout_line["line-cap"]), "line-join": new Dt($e.layout_line["line-join"]), "line-miter-limit": new yt($e.layout_line["line-miter-limit"]), "line-round-limit": new yt($e.layout_line["line-round-limit"]), "line-sort-key": new Dt($e.layout_line["line-sort-key"]), "line-z-offset": new Dt($e.layout_line["line-z-offset"]), "line-elevation-reference": new yt($e.layout_line["line-elevation-reference"]), "line-cross-slope": new yt($e.layout_line["line-cross-slope"]), visibility: new yt($e.layout_line.visibility), "line-width-unit": new yt($e.layout_line["line-width-unit"]) })), paint: E0 || (E0 = new Bn({ "line-opacity": new Dt($e.paint_line["line-opacity"]), "line-color": new Dt($e.paint_line["line-color"]), "line-translate": new yt($e.paint_line["line-translate"]), "line-translate-anchor": new yt($e.paint_line["line-translate-anchor"]), "line-width": new Dt($e.paint_line["line-width"]), "line-gap-width": new Dt($e.paint_line["line-gap-width"]), "line-offset": new Dt($e.paint_line["line-offset"]), "line-blur": new Dt($e.paint_line["line-blur"]), "line-dasharray": new Dt($e.paint_line["line-dasharray"]), "line-pattern": new Dt($e.paint_line["line-pattern"]), "line-gradient": new Wa($e.paint_line["line-gradient"]), "line-trim-offset": new yt($e.paint_line["line-trim-offset"]), "line-trim-fade-range": new yt($e.paint_line["line-trim-fade-range"]), "line-trim-color": new yt($e.paint_line["line-trim-color"]), "line-emissive-strength": new yt($e.paint_line["line-emissive-strength"]), "line-border-width": new Dt($e.paint_line["line-border-width"]), "line-border-color": new Dt($e.paint_line["line-border-color"]), "line-occlusion-opacity": new yt($e.paint_line["line-occlusion-opacity"]), "line-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "line-gradient-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "line-trim-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "line-border-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, z_);
      class fT extends Dt {
        possiblyEvaluate(e, n) {
          return n = new Tn(Math.floor(n.zoom), { now: n.now, fadeDuration: n.fadeDuration, transition: n.transition }), super.possiblyEvaluate(e, n);
        }
        evaluate(e, n, o, u) {
          return n = An({}, n, { zoom: Math.floor(n.zoom) }), super.evaluate(e, n, o, u);
        }
      }
      let Wd;
      function k0(r, e) {
        return e > 0 ? e + 2 * r : r;
      }
      const pT = qi([{ name: "a_pos_offset", components: 4, type: "Int16" }, { name: "a_tex_size", components: 4, type: "Uint16" }, { name: "a_pixeloffset", components: 4, type: "Int16" }], 4), mT = qi([{ name: "a_globe_anchor", components: 3, type: "Int16" }, { name: "a_globe_normal", components: 3, type: "Float32" }], 4), _T = qi([{ name: "a_projected_pos", components: 4, type: "Float32" }], 4);
      qi([{ name: "a_fade_opacity", components: 1, type: "Uint32" }], 4);
      const gT = qi([{ name: "a_auto_z_offset", components: 1, type: "Float32" }], 4), yT = qi([{ name: "a_texb", components: 2, type: "Uint16" }]), xT = qi([{ name: "a_placed", components: 2, type: "Uint8" }, { name: "a_shift", components: 2, type: "Float32" }, { name: "a_elevation_from_sea", components: 2, type: "Float32" }]), vT = qi([{ name: "a_size_scale", components: 1, type: "Float32" }, { name: "a_padding", components: 2, type: "Float32" }, { name: "a_auto_z_offset", components: 1, type: "Float32" }]);
      qi([{ type: "Int16", name: "projectedAnchorX" }, { type: "Int16", name: "projectedAnchorY" }, { type: "Int16", name: "projectedAnchorZ" }, { type: "Int16", name: "tileAnchorX" }, { type: "Int16", name: "tileAnchorY" }, { type: "Float32", name: "x1" }, { type: "Float32", name: "y1" }, { type: "Float32", name: "x2" }, { type: "Float32", name: "y2" }, { type: "Int16", name: "padding" }, { type: "Uint32", name: "featureIndex" }, { type: "Uint16", name: "sourceLayerIndex" }, { type: "Uint16", name: "bucketIndex" }]);
      const R0 = qi([{ name: "a_pos", components: 3, type: "Int16" }, { name: "a_anchor_pos", components: 2, type: "Int16" }, { name: "a_extrude", components: 2, type: "Int16" }], 4), bT = qi([{ name: "a_pos_2f", components: 2, type: "Float32" }, { name: "a_radius", components: 1, type: "Float32" }, { name: "a_flags", components: 2, type: "Int16" }], 4);
      qi([{ name: "triangle", components: 3, type: "Uint16" }]), qi([{ type: "Int16", name: "projectedAnchorX" }, { type: "Int16", name: "projectedAnchorY" }, { type: "Int16", name: "projectedAnchorZ" }, { type: "Float32", name: "tileAnchorX" }, { type: "Float32", name: "tileAnchorY" }, { type: "Uint16", name: "glyphStartIndex" }, { type: "Uint16", name: "numGlyphs" }, { type: "Uint32", name: "vertexStartIndex" }, { type: "Uint32", name: "lineStartIndex" }, { type: "Uint32", name: "lineLength" }, { type: "Uint16", name: "segment" }, { type: "Uint16", name: "lowerSize" }, { type: "Uint16", name: "upperSize" }, { type: "Float32", name: "lineOffsetX" }, { type: "Float32", name: "lineOffsetY" }, { type: "Uint8", name: "writingMode" }, { type: "Uint8", name: "placedOrientation" }, { type: "Uint8", name: "hidden" }, { type: "Uint32", name: "crossTileID" }, { type: "Int16", name: "associatedIconIndex" }, { type: "Uint8", name: "flipState" }]), qi([{ type: "Float32", name: "tileAnchorX" }, { type: "Float32", name: "tileAnchorY" }, { type: "Int16", name: "projectedAnchorX" }, { type: "Int16", name: "projectedAnchorY" }, { type: "Int16", name: "projectedAnchorZ" }, { type: "Int16", name: "rightJustifiedTextSymbolIndex" }, { type: "Int16", name: "centerJustifiedTextSymbolIndex" }, { type: "Int16", name: "leftJustifiedTextSymbolIndex" }, { type: "Int16", name: "verticalPlacedTextSymbolIndex" }, { type: "Int16", name: "placedIconSymbolIndex" }, { type: "Int16", name: "verticalPlacedIconSymbolIndex" }, { type: "Uint16", name: "key" }, { type: "Uint16", name: "textBoxStartIndex" }, { type: "Uint16", name: "textBoxEndIndex" }, { type: "Uint16", name: "verticalTextBoxStartIndex" }, { type: "Uint16", name: "verticalTextBoxEndIndex" }, { type: "Uint16", name: "iconBoxStartIndex" }, { type: "Uint16", name: "iconBoxEndIndex" }, { type: "Uint16", name: "verticalIconBoxStartIndex" }, { type: "Uint16", name: "verticalIconBoxEndIndex" }, { type: "Uint16", name: "featureIndex" }, { type: "Uint16", name: "numHorizontalGlyphVertices" }, { type: "Uint16", name: "numVerticalGlyphVertices" }, { type: "Uint16", name: "numIconVertices" }, { type: "Uint16", name: "numVerticalIconVertices" }, { type: "Uint16", name: "useRuntimeCollisionCircles" }, { type: "Uint32", name: "crossTileID" }, { type: "Float32", components: 2, name: "textOffset" }, { type: "Float32", name: "collisionCircleDiameter" }, { type: "Float32", name: "zOffset" }, { type: "Uint8", name: "hasIconTextFit" }]), qi([{ type: "Float32", name: "offsetX" }]), qi([{ type: "Int16", name: "x" }, { type: "Int16", name: "y" }]);
      var tr = 24;
      const Sa = 128;
      function Lp(r, e, n, o, u) {
        if (r.kind === "camera")
          return r.maxSize;
        if (r.kind === "composite") {
          const l = e.possiblyEvaluate(new Tn(r.maxZoom), n).evaluate(u, {}, n), f = e.possiblyEvaluate(new Tn(r.minZoom), n).evaluate(u, {}, n);
          return Math.max(l, f);
        }
        return e.possiblyEvaluate(new Tn(o)).evaluate(u, {}, n);
      }
      function D_(r, e) {
        const { expression: n } = e;
        if (n.kind === "constant")
          return { kind: "constant", layoutSize: n.evaluate(new Tn(r + 1)) };
        if (n.kind === "source")
          return { kind: "source" };
        {
          const { zoomStops: o, interpolationType: u } = n;
          let l = 0;
          for (; l < o.length && o[l] <= r; )
            l++;
          l = Math.max(0, l - 1);
          let f = l;
          for (; f < o.length && o[f] < r + 1; )
            f++;
          f = Math.min(o.length - 1, f);
          const v = o[l], S = o[f];
          return n.kind === "composite" ? { kind: "composite", minZoom: v, maxZoom: S, interpolationType: u } : { kind: "camera", minZoom: v, maxZoom: S, minSize: n.evaluate(new Tn(v)), maxSize: n.evaluate(new Tn(S)), interpolationType: u };
        }
      }
      function zp(r, { uSize: e, uSizeT: n }, { lowerSize: o, upperSize: u }) {
        return r.kind === "source" ? o / Sa : r.kind === "composite" ? ei(o / Sa, u / Sa, n) : e;
      }
      function Lu(r, e, n = 1) {
        let o = 0, u = 0;
        if (r.kind === "constant")
          u = r.layoutSize * n;
        else if (r.kind !== "source") {
          const { interpolationType: l, minZoom: f, maxZoom: v } = r, S = l ? si(X.interpolationFactor(l, e, f, v), 0, 1) : 0;
          r.kind === "camera" ? u = ei(r.minSize, r.maxSize, S) * n : o = S * n;
        }
        return { uSizeT: o, uSize: u };
      }
      var wT = Object.freeze({ __proto__: null, SIZE_PACK_FACTOR: Sa, evaluateSizeForFeature: zp, evaluateSizeForZoom: Lu, getRasterizedIconSize: Lp, getSizeData: D_ });
      function TT(r, e, n) {
        return r.sections.forEach((o) => {
          o.text = function(u, l, f) {
            const v = l.layout.get("text-transform").evaluate(f, {});
            return v === "uppercase" ? u = u.toLocaleUpperCase() : v === "lowercase" && (u = u.toLocaleLowerCase()), co.applyArabicShaping && (u = co.applyArabicShaping(u)), u;
          }(o.text, e, n);
        }), r;
      }
      const $d = { "!": "︕", "#": "#", $: "$", "%": "%", "&": "&", "(": "︵", ")": "︶", "*": "*", "+": "+", ",": "︐", "-": "︲", ".": "・", "/": "/", ":": "︓", ";": "︔", "<": "︿", "=": "=", ">": "﹀", "?": "︖", "@": "@", "[": "﹇", "\\": "\", "]": "﹈", "^": "^", _: "︳", "`": "`", "{": "︷", "|": "―", "}": "︸", "~": "~", "¢": "¢", "£": "£", "¥": "¥", "¦": "¦", "¬": "¬", "¯": " ̄", "–": "︲", "—": "︱", "‘": "﹃", "’": "﹄", "“": "﹁", "”": "﹂", "…": "︙", "‧": "・", "₩": "₩", "、": "︑", "。": "︒", "〈": "︿", "〉": "﹀", "《": "︽", "》": "︾", "「": "﹁", "」": "﹂", "『": "﹃", "』": "﹄", "【": "︻", "】": "︼", "〔": "︹", "〕": "︺", "〖": "︗", "〗": "︘", "!": "︕", "(": "︵", ")": "︶", ",": "︐", "-": "︲", ".": "・", ":": "︓", ";": "︔", "<": "︿", ">": "﹀", "?": "︖", "[": "﹇", "]": "﹈", "_": "︳", "{": "︷", "|": "―", "}": "︸", "⦅": "︵", "⦆": "︶", "。": "︒", "「": "﹁", "」": "﹂", "←": "↑", "→": "↓" };
      function MT(r) {
        return r === "︶" || r === "﹈" || r === "︸" || r === "﹄" || r === "﹂" || r === "︾" || r === "︼" || r === "︺" || r === "︘" || r === "﹀" || r === "︐" || r === "︓" || r === "︔" || r === "`" || r === " ̄" || r === "︑" || r === "︒";
      }
      function ST(r) {
        return r === "︵" || r === "﹇" || r === "︷" || r === "﹃" || r === "﹁" || r === "︽" || r === "︻" || r === "︹" || r === "︗" || r === "︿";
      }
      var O0, k_, F0, R_ = {};
      /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
      function ET() {
        return O0 || (O0 = 1, R_.read = function(r, e, n, o, u) {
          var l, f, v = 8 * u - o - 1, S = (1 << v) - 1, D = S >> 1, x = -7, P = n ? u - 1 : 0, I = n ? -1 : 1, M = r[e + P];
          for (P += I, l = M & (1 << -x) - 1, M >>= -x, x += v; x > 0; l = 256 * l + r[e + P], P += I, x -= 8)
            ;
          for (f = l & (1 << -x) - 1, l >>= -x, x += o; x > 0; f = 256 * f + r[e + P], P += I, x -= 8)
            ;
          if (l === 0)
            l = 1 - D;
          else {
            if (l === S)
              return f ? NaN : 1 / 0 * (M ? -1 : 1);
            f += Math.pow(2, o), l -= D;
          }
          return (M ? -1 : 1) * f * Math.pow(2, l - o);
        }, R_.write = function(r, e, n, o, u, l) {
          var f, v, S, D = 8 * l - u - 1, x = (1 << D) - 1, P = x >> 1, I = u === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0, M = o ? 0 : l - 1, C = o ? 1 : -1, k = e < 0 || e === 0 && 1 / e < 0 ? 1 : 0;
          for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (v = isNaN(e) ? 1 : 0, f = x) : (f = Math.floor(Math.log(e) / Math.LN2), e * (S = Math.pow(2, -f)) < 1 && (f--, S *= 2), (e += f + P >= 1 ? I / S : I * Math.pow(2, 1 - P)) * S >= 2 && (f++, S /= 2), f + P >= x ? (v = 0, f = x) : f + P >= 1 ? (v = (e * S - 1) * Math.pow(2, u), f += P) : (v = e * Math.pow(2, P - 1) * Math.pow(2, u), f = 0)); u >= 8; r[n + M] = 255 & v, M += C, v /= 256, u -= 8)
            ;
          for (f = f << u | v, D += u; D > 0; r[n + M] = 255 & f, M += C, f /= 256, D -= 8)
            ;
          r[n + M - C] |= 128 * k;
        }), R_;
      }
      function B0() {
        if (F0)
          return k_;
        F0 = 1, k_ = e;
        var r = ET();
        function e(H) {
          this.buf = ArrayBuffer.isView && ArrayBuffer.isView(H) ? H : new Uint8Array(H || 0), this.pos = 0, this.type = 0, this.length = this.buf.length;
        }
        e.Varint = 0, e.Fixed64 = 1, e.Bytes = 2, e.Fixed32 = 5;
        var n = 4294967296, o = 1 / n, u = typeof TextDecoder > "u" ? null : new TextDecoder("utf8");
        function l(H) {
          return H.type === e.Bytes ? H.readVarint() + H.pos : H.pos + 1;
        }
        function f(H, K, Q) {
          return Q ? 4294967296 * K + (H >>> 0) : 4294967296 * (K >>> 0) + (H >>> 0);
        }
        function v(H, K, Q) {
          var ie = K <= 16383 ? 1 : K <= 2097151 ? 2 : K <= 268435455 ? 3 : Math.floor(Math.log(K) / (7 * Math.LN2));
          Q.realloc(ie);
          for (var fe = Q.pos - 1; fe >= H; fe--)
            Q.buf[fe + ie] = Q.buf[fe];
        }
        function S(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeVarint(H[Q]);
        }
        function D(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeSVarint(H[Q]);
        }
        function x(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeFloat(H[Q]);
        }
        function P(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeDouble(H[Q]);
        }
        function I(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeBoolean(H[Q]);
        }
        function M(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeFixed32(H[Q]);
        }
        function C(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeSFixed32(H[Q]);
        }
        function k(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeFixed64(H[Q]);
        }
        function V(H, K) {
          for (var Q = 0; Q < H.length; Q++)
            K.writeSFixed64(H[Q]);
        }
        function U(H, K) {
          return (H[K] | H[K + 1] << 8 | H[K + 2] << 16) + 16777216 * H[K + 3];
        }
        function q(H, K, Q) {
          H[Q] = K, H[Q + 1] = K >>> 8, H[Q + 2] = K >>> 16, H[Q + 3] = K >>> 24;
        }
        function $(H, K) {
          return (H[K] | H[K + 1] << 8 | H[K + 2] << 16) + (H[K + 3] << 24);
        }
        return e.prototype = { destroy: function() {
          this.buf = null;
        }, readFields: function(H, K, Q) {
          for (Q = Q || this.length; this.pos < Q; ) {
            var ie = this.readVarint(), fe = ie >> 3, de = this.pos;
            this.type = 7 & ie, H(fe, K, this), this.pos === de && this.skip(ie);
          }
          return K;
        }, readMessage: function(H, K) {
          return this.readFields(H, K, this.readVarint() + this.pos);
        }, readFixed32: function() {
          var H = U(this.buf, this.pos);
          return this.pos += 4, H;
        }, readSFixed32: function() {
          var H = $(this.buf, this.pos);
          return this.pos += 4, H;
        }, readFixed64: function() {
          var H = U(this.buf, this.pos) + U(this.buf, this.pos + 4) * n;
          return this.pos += 8, H;
        }, readSFixed64: function() {
          var H = U(this.buf, this.pos) + $(this.buf, this.pos + 4) * n;
          return this.pos += 8, H;
        }, readFloat: function() {
          var H = r.read(this.buf, this.pos, !0, 23, 4);
          return this.pos += 4, H;
        }, readDouble: function() {
          var H = r.read(this.buf, this.pos, !0, 52, 8);
          return this.pos += 8, H;
        }, readVarint: function(H) {
          var K, Q, ie = this.buf;
          return K = 127 & (Q = ie[this.pos++]), Q < 128 ? K : (K |= (127 & (Q = ie[this.pos++])) << 7, Q < 128 ? K : (K |= (127 & (Q = ie[this.pos++])) << 14, Q < 128 ? K : (K |= (127 & (Q = ie[this.pos++])) << 21, Q < 128 ? K : function(fe, de, ue) {
            var Se, me, Ee = ue.buf;
            if (Se = (112 & (me = Ee[ue.pos++])) >> 4, me < 128 || (Se |= (127 & (me = Ee[ue.pos++])) << 3, me < 128) || (Se |= (127 & (me = Ee[ue.pos++])) << 10, me < 128) || (Se |= (127 & (me = Ee[ue.pos++])) << 17, me < 128) || (Se |= (127 & (me = Ee[ue.pos++])) << 24, me < 128) || (Se |= (1 & (me = Ee[ue.pos++])) << 31, me < 128))
              return f(fe, Se, de);
            throw new Error("Expected varint not more than 10 bytes");
          }(K |= (15 & (Q = ie[this.pos])) << 28, H, this))));
        }, readVarint64: function() {
          return this.readVarint(!0);
        }, readSVarint: function() {
          var H = this.readVarint();
          return H % 2 == 1 ? (H + 1) / -2 : H / 2;
        }, readBoolean: function() {
          return !!this.readVarint();
        }, readString: function() {
          var H = this.readVarint() + this.pos, K = this.pos;
          return this.pos = H, H - K >= 12 && u ? function(Q, ie, fe) {
            return u.decode(Q.subarray(ie, fe));
          }(this.buf, K, H) : function(Q, ie, fe) {
            for (var de = "", ue = ie; ue < fe; ) {
              var Se, me, Ee, ze = Q[ue], Ie = null, Re = ze > 239 ? 4 : ze > 223 ? 3 : ze > 191 ? 2 : 1;
              if (ue + Re > fe)
                break;
              Re === 1 ? ze < 128 && (Ie = ze) : Re === 2 ? (192 & (Se = Q[ue + 1])) == 128 && (Ie = (31 & ze) << 6 | 63 & Se) <= 127 && (Ie = null) : Re === 3 ? (me = Q[ue + 2], (192 & (Se = Q[ue + 1])) == 128 && (192 & me) == 128 && ((Ie = (15 & ze) << 12 | (63 & Se) << 6 | 63 & me) <= 2047 || Ie >= 55296 && Ie <= 57343) && (Ie = null)) : Re === 4 && (me = Q[ue + 2], Ee = Q[ue + 3], (192 & (Se = Q[ue + 1])) == 128 && (192 & me) == 128 && (192 & Ee) == 128 && ((Ie = (15 & ze) << 18 | (63 & Se) << 12 | (63 & me) << 6 | 63 & Ee) <= 65535 || Ie >= 1114112) && (Ie = null)), Ie === null ? (Ie = 65533, Re = 1) : Ie > 65535 && (Ie -= 65536, de += String.fromCharCode(Ie >>> 10 & 1023 | 55296), Ie = 56320 | 1023 & Ie), de += String.fromCharCode(Ie), ue += Re;
            }
            return de;
          }(this.buf, K, H);
        }, readBytes: function() {
          var H = this.readVarint() + this.pos, K = this.buf.subarray(this.pos, H);
          return this.pos = H, K;
        }, readPackedVarint: function(H, K) {
          if (this.type !== e.Bytes)
            return H.push(this.readVarint(K));
          var Q = l(this);
          for (H = H || []; this.pos < Q; )
            H.push(this.readVarint(K));
          return H;
        }, readPackedSVarint: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readSVarint());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readSVarint());
          return H;
        }, readPackedBoolean: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readBoolean());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readBoolean());
          return H;
        }, readPackedFloat: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readFloat());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readFloat());
          return H;
        }, readPackedDouble: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readDouble());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readDouble());
          return H;
        }, readPackedFixed32: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readFixed32());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readFixed32());
          return H;
        }, readPackedSFixed32: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readSFixed32());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readSFixed32());
          return H;
        }, readPackedFixed64: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readFixed64());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readFixed64());
          return H;
        }, readPackedSFixed64: function(H) {
          if (this.type !== e.Bytes)
            return H.push(this.readSFixed64());
          var K = l(this);
          for (H = H || []; this.pos < K; )
            H.push(this.readSFixed64());
          return H;
        }, skip: function(H) {
          var K = 7 & H;
          if (K === e.Varint)
            for (; this.buf[this.pos++] > 127; )
              ;
          else if (K === e.Bytes)
            this.pos = this.readVarint() + this.pos;
          else if (K === e.Fixed32)
            this.pos += 4;
          else {
            if (K !== e.Fixed64)
              throw new Error("Unimplemented type: " + K);
            this.pos += 8;
          }
        }, writeTag: function(H, K) {
          this.writeVarint(H << 3 | K);
        }, realloc: function(H) {
          for (var K = this.length || 16; K < this.pos + H; )
            K *= 2;
          if (K !== this.length) {
            var Q = new Uint8Array(K);
            Q.set(this.buf), this.buf = Q, this.length = K;
          }
        }, finish: function() {
          return this.length = this.pos, this.pos = 0, this.buf.subarray(0, this.length);
        }, writeFixed32: function(H) {
          this.realloc(4), q(this.buf, H, this.pos), this.pos += 4;
        }, writeSFixed32: function(H) {
          this.realloc(4), q(this.buf, H, this.pos), this.pos += 4;
        }, writeFixed64: function(H) {
          this.realloc(8), q(this.buf, -1 & H, this.pos), q(this.buf, Math.floor(H * o), this.pos + 4), this.pos += 8;
        }, writeSFixed64: function(H) {
          this.realloc(8), q(this.buf, -1 & H, this.pos), q(this.buf, Math.floor(H * o), this.pos + 4), this.pos += 8;
        }, writeVarint: function(H) {
          (H = +H || 0) > 268435455 || H < 0 ? function(K, Q) {
            var ie, fe;
            if (K >= 0 ? (ie = K % 4294967296 | 0, fe = K / 4294967296 | 0) : (fe = ~(-K / 4294967296), 4294967295 ^ (ie = ~(-K % 4294967296)) ? ie = ie + 1 | 0 : (ie = 0, fe = fe + 1 | 0)), K >= 18446744073709552e3 || K < -18446744073709552e3)
              throw new Error("Given varint doesn't fit into 10 bytes");
            Q.realloc(10), function(de, ue, Se) {
              Se.buf[Se.pos++] = 127 & de | 128, de >>>= 7, Se.buf[Se.pos++] = 127 & de | 128, de >>>= 7, Se.buf[Se.pos++] = 127 & de | 128, de >>>= 7, Se.buf[Se.pos++] = 127 & de | 128, Se.buf[Se.pos] = 127 & (de >>>= 7);
            }(ie, 0, Q), function(de, ue) {
              var Se = (7 & de) << 4;
              ue.buf[ue.pos++] |= Se | ((de >>>= 3) ? 128 : 0), de && (ue.buf[ue.pos++] = 127 & de | ((de >>>= 7) ? 128 : 0), de && (ue.buf[ue.pos++] = 127 & de | ((de >>>= 7) ? 128 : 0), de && (ue.buf[ue.pos++] = 127 & de | ((de >>>= 7) ? 128 : 0), de && (ue.buf[ue.pos++] = 127 & de | ((de >>>= 7) ? 128 : 0), de && (ue.buf[ue.pos++] = 127 & de)))));
            }(fe, Q);
          }(H, this) : (this.realloc(4), this.buf[this.pos++] = 127 & H | (H > 127 ? 128 : 0), H <= 127 || (this.buf[this.pos++] = 127 & (H >>>= 7) | (H > 127 ? 128 : 0), H <= 127 || (this.buf[this.pos++] = 127 & (H >>>= 7) | (H > 127 ? 128 : 0), H <= 127 || (this.buf[this.pos++] = H >>> 7 & 127))));
        }, writeSVarint: function(H) {
          this.writeVarint(H < 0 ? 2 * -H - 1 : 2 * H);
        }, writeBoolean: function(H) {
          this.writeVarint(!!H);
        }, writeString: function(H) {
          H = String(H), this.realloc(4 * H.length), this.pos++;
          var K = this.pos;
          this.pos = function(ie, fe, de) {
            for (var ue, Se, me = 0; me < fe.length; me++) {
              if ((ue = fe.charCodeAt(me)) > 55295 && ue < 57344) {
                if (!Se) {
                  ue > 56319 || me + 1 === fe.length ? (ie[de++] = 239, ie[de++] = 191, ie[de++] = 189) : Se = ue;
                  continue;
                }
                if (ue < 56320) {
                  ie[de++] = 239, ie[de++] = 191, ie[de++] = 189, Se = ue;
                  continue;
                }
                ue = Se - 55296 << 10 | ue - 56320 | 65536, Se = null;
              } else
                Se && (ie[de++] = 239, ie[de++] = 191, ie[de++] = 189, Se = null);
              ue < 128 ? ie[de++] = ue : (ue < 2048 ? ie[de++] = ue >> 6 | 192 : (ue < 65536 ? ie[de++] = ue >> 12 | 224 : (ie[de++] = ue >> 18 | 240, ie[de++] = ue >> 12 & 63 | 128), ie[de++] = ue >> 6 & 63 | 128), ie[de++] = 63 & ue | 128);
            }
            return de;
          }(this.buf, H, this.pos);
          var Q = this.pos - K;
          Q >= 128 && v(K, Q, this), this.pos = K - 1, this.writeVarint(Q), this.pos += Q;
        }, writeFloat: function(H) {
          this.realloc(4), r.write(this.buf, H, this.pos, !0, 23, 4), this.pos += 4;
        }, writeDouble: function(H) {
          this.realloc(8), r.write(this.buf, H, this.pos, !0, 52, 8), this.pos += 8;
        }, writeBytes: function(H) {
          var K = H.length;
          this.writeVarint(K), this.realloc(K);
          for (var Q = 0; Q < K; Q++)
            this.buf[this.pos++] = H[Q];
        }, writeRawMessage: function(H, K) {
          this.pos++;
          var Q = this.pos;
          H(K, this);
          var ie = this.pos - Q;
          ie >= 128 && v(Q, ie, this), this.pos = Q - 1, this.writeVarint(ie), this.pos += ie;
        }, writeMessage: function(H, K, Q) {
          this.writeTag(H, e.Bytes), this.writeRawMessage(K, Q);
        }, writePackedVarint: function(H, K) {
          K.length && this.writeMessage(H, S, K);
        }, writePackedSVarint: function(H, K) {
          K.length && this.writeMessage(H, D, K);
        }, writePackedBoolean: function(H, K) {
          K.length && this.writeMessage(H, I, K);
        }, writePackedFloat: function(H, K) {
          K.length && this.writeMessage(H, x, K);
        }, writePackedDouble: function(H, K) {
          K.length && this.writeMessage(H, P, K);
        }, writePackedFixed32: function(H, K) {
          K.length && this.writeMessage(H, M, K);
        }, writePackedSFixed32: function(H, K) {
          K.length && this.writeMessage(H, C, K);
        }, writePackedFixed64: function(H, K) {
          K.length && this.writeMessage(H, k, K);
        }, writePackedSFixed64: function(H, K) {
          K.length && this.writeMessage(H, V, K);
        }, writeBytesField: function(H, K) {
          this.writeTag(H, e.Bytes), this.writeBytes(K);
        }, writeFixed32Field: function(H, K) {
          this.writeTag(H, e.Fixed32), this.writeFixed32(K);
        }, writeSFixed32Field: function(H, K) {
          this.writeTag(H, e.Fixed32), this.writeSFixed32(K);
        }, writeFixed64Field: function(H, K) {
          this.writeTag(H, e.Fixed64), this.writeFixed64(K);
        }, writeSFixed64Field: function(H, K) {
          this.writeTag(H, e.Fixed64), this.writeSFixed64(K);
        }, writeVarintField: function(H, K) {
          this.writeTag(H, e.Varint), this.writeVarint(K);
        }, writeSVarintField: function(H, K) {
          this.writeTag(H, e.Varint), this.writeSVarint(K);
        }, writeStringField: function(H, K) {
          this.writeTag(H, e.Bytes), this.writeString(K);
        }, writeFloatField: function(H, K) {
          this.writeTag(H, e.Fixed32), this.writeFloat(K);
        }, writeDoubleField: function(H, K) {
          this.writeTag(H, e.Fixed64), this.writeDouble(K);
        }, writeBooleanField: function(H, K) {
          this.writeVarintField(H, !!K);
        } }, k_;
      }
      var Dp = O(B0());
      const O_ = 3;
      function PT(r, e, n) {
        e.glyphs = [], r === 1 && n.readMessage(AT, e);
      }
      function AT(r, e, n) {
        if (r === 3) {
          const { id: o, bitmap: u, width: l, height: f, left: v, top: S, advance: D } = n.readMessage(CT, {});
          e.glyphs.push({ id: o, bitmap: new gc({ width: l + 2 * O_, height: f + 2 * O_ }, u), metrics: { width: l, height: f, left: v, top: S, advance: D } });
        } else
          r === 4 ? e.ascender = n.readSVarint() : r === 5 && (e.descender = n.readSVarint());
      }
      function CT(r, e, n) {
        r === 1 ? e.id = n.readVarint() : r === 2 ? e.bitmap = n.readBytes() : r === 3 ? e.width = n.readVarint() : r === 4 ? e.height = n.readVarint() : r === 5 ? e.left = n.readSVarint() : r === 6 ? e.top = n.readSVarint() : r === 7 && (e.advance = n.readVarint());
      }
      const N0 = O_, Ro = { horizontal: 1, vertical: 2, horizontalOnly: 3 };
      class Xd {
        constructor() {
          this.scale = 1, this.fontStack = "", this.image = null;
        }
        static forText(e, n) {
          const o = new Xd();
          return o.scale = e || 1, o.fontStack = n, o;
        }
        static forImage(e) {
          const n = new Xd();
          return n.image = e, n;
        }
      }
      class zu {
        constructor() {
          this.text = "", this.sectionIndex = [], this.sections = [], this.imageSectionID = null;
        }
        static fromFeature(e, n) {
          const o = new zu();
          for (let u = 0; u < e.sections.length; u++) {
            const l = e.sections[u];
            l.image ? o.addImageSection(l) : o.addTextSection(l, n);
          }
          return o;
        }
        length() {
          return this.text.length;
        }
        getSection(e) {
          return this.sections[this.sectionIndex[e]];
        }
        getSections() {
          return this.sections;
        }
        getSectionIndex(e) {
          return this.sectionIndex[e];
        }
        getCodePoint(e) {
          return this.text.codePointAt(e);
        }
        verticalizePunctuation(e) {
          this.text = function(n, o) {
            let u = "";
            for (let l = 0; l < n.length; l++) {
              const f = n.charCodeAt(l + 1) || null, v = n.charCodeAt(l - 1) || null;
              u += !o && (f && _d(f) && !$d[n[l + 1]] || v && _d(v) && !$d[n[l - 1]]) || !$d[n[l]] ? n[l] : $d[n[l]];
            }
            return u;
          }(this.text, e);
        }
        trim() {
          let e = 0;
          for (let o = 0; o < this.text.length && kp[this.text.charCodeAt(o)]; o++)
            e++;
          let n = this.text.length;
          for (let o = this.text.length - 1; o >= 0 && o >= e && kp[this.text.charCodeAt(o)]; o--)
            n--;
          this.text = this.text.substring(e, n), this.sectionIndex = this.sectionIndex.slice(e, n);
        }
        substring(e, n) {
          const o = new zu();
          return o.text = this.text.substring(e, n), o.sectionIndex = this.sectionIndex.slice(e, n), o.sections = this.sections, o;
        }
        toString() {
          return this.text;
        }
        getMaxScale() {
          return this.sectionIndex.reduce((e, n) => Math.max(e, this.sections[n].scale), 0);
        }
        addTextSection(e, n) {
          this.text += e.text, this.sections.push(Xd.forText(e.scale, e.fontStack || n));
          const o = this.sections.length - 1;
          for (let u = 0; u < e.text.length; ++u)
            this.sectionIndex.push(o);
        }
        addImageSection(e) {
          const n = e.image && e.image.namePrimary ? e.image.getPrimary() : null;
          if (!n)
            return void mi("Can't add FormattedSection with an empty image.");
          const o = this.getNextImageSectionCharCode();
          o ? (this.text += String.fromCodePoint(o), this.sections.push(Xd.forImage(n)), this.sectionIndex.push(this.sections.length - 1)) : mi("Reached maximum number of images 6401");
        }
        getNextImageSectionCharCode() {
          return this.imageSectionID ? this.imageSectionID >= 63743 ? null : ++this.imageSectionID : (this.imageSectionID = 57344, this.imageSectionID);
        }
      }
      function F_(r, e, n, o, u, l, f, v, S, D, x, P, I, M, C) {
        const k = zu.fromFeature(r, u);
        P === Ro.vertical && k.verticalizePunctuation(I);
        let V = [];
        const U = function(Q, ie, fe, de, ue, Se) {
          if (!Q)
            return [];
          const me = [], Ee = function(Ve, Ue, Fe, et, dt, tt) {
            let Mt = 0;
            for (let wt = 0; wt < Ve.length(); wt++) {
              const At = Ve.getSection(wt);
              Mt += V0(Ve.getCodePoint(wt), At, et, dt, Ue, tt);
            }
            return Mt / Math.max(1, Math.ceil(Mt / Fe));
          }(Q, ie, fe, de, ue, Se), ze = Q.text.indexOf("​") >= 0;
          let Ie = 0;
          for (let Ve = 0; Ve < Q.length(); Ve++) {
            const Ue = Q.getSection(Ve), Fe = Q.getCodePoint(Ve);
            if (kp[Fe] || (Ie += V0(Fe, Ue, de, ue, ie, Se)), Ve < Q.length() - 1) {
              const et = !((Re = Fe) < 11904 || !(Zt["Bopomofo Extended"](Re) || Zt.Bopomofo(Re) || Zt["CJK Compatibility Forms"](Re) || Zt["CJK Compatibility Ideographs"](Re) || Zt["CJK Compatibility"](Re) || Zt["CJK Radicals Supplement"](Re) || Zt["CJK Strokes"](Re) || Zt["CJK Symbols and Punctuation"](Re) || Zt["CJK Unified Ideographs Extension A"](Re) || Zt["CJK Unified Ideographs"](Re) || Zt["Enclosed CJK Letters and Months"](Re) || Zt["Halfwidth and Fullwidth Forms"](Re) || Zt.Hiragana(Re) || Zt["Ideographic Description Characters"](Re) || Zt["Kangxi Radicals"](Re) || Zt["Katakana Phonetic Extensions"](Re) || Zt.Katakana(Re) || Zt["Vertical Forms"](Re) || Zt["Yi Radicals"](Re) || Zt["Yi Syllables"](Re)));
              (IT[Fe] || et || Ue.image) && me.push(j0(Ve + 1, Ie, Ee, me, LT(Fe, Q.getCodePoint(Ve + 1), et && ze), !1));
            }
          }
          var Re;
          return G0(j0(Q.length(), Ie, Ee, me, 0, !0));
        }(k, D, l, e, o, M), { processBidirectionalText: q, processStyledBidirectionalText: $ } = co;
        if (q && k.sections.length === 1) {
          const Q = q(k.toString(), U);
          for (const ie of Q) {
            const fe = new zu();
            fe.text = ie, fe.sections = k.sections;
            for (let de = 0; de < ie.length; de++)
              fe.sectionIndex.push(0);
            V.push(fe);
          }
        } else if ($) {
          const Q = $(k.text, k.sectionIndex, U);
          for (const ie of Q) {
            const fe = new zu();
            fe.text = ie[0], fe.sectionIndex = ie[1], fe.sections = k.sections, V.push(fe);
          }
        } else
          V = function(Q, ie) {
            const fe = [], de = Q.text;
            let ue = 0;
            for (const Se of ie)
              fe.push(Q.substring(ue, Se)), ue = Se;
            return ue < de.length && fe.push(Q.substring(ue, de.length)), fe;
          }(k, U);
        const H = [], K = { positionedLines: H, text: k.toString(), top: x[1], bottom: x[1], left: x[0], right: x[0], writingMode: P, iconsInText: !1, verticalizable: !1, hasBaseline: !1 };
        return function(Q, ie, fe, de, ue, Se, me, Ee, ze, Ie, Re, Ve) {
          let Ue = 0, Fe = 0, et = 0;
          const dt = Ee === "right" ? 1 : Ee === "left" ? 0 : 0.5;
          let tt = !1;
          for (const St of ue) {
            const Nt = St.getSections();
            for (const Qt of Nt) {
              if (Qt.image)
                continue;
              const pi = ie[Qt.fontStack];
              if (pi && (tt = pi.ascender !== void 0 && pi.descender !== void 0, !tt))
                break;
            }
            if (!tt)
              break;
          }
          let Mt = 0;
          for (const St of ue) {
            St.trim();
            const Nt = St.getMaxScale(), Qt = (Nt - 1) * tr, pi = { positionedGlyphs: [], lineOffset: 0 };
            Q.positionedLines[Mt] = pi;
            const gi = pi.positionedGlyphs;
            let Ai = 0;
            if (!St.length()) {
              Fe += Se, ++Mt;
              continue;
            }
            let yi = 0, Ii = 0;
            for (let rn = 0; rn < St.length(); rn++) {
              const hi = St.getSection(rn), on = St.getSectionIndex(rn), Qi = St.getCodePoint(rn);
              let pn = hi.scale, as = null, ls = null, Kn = null, Vr = tr, Sn = 0;
              const Ln = !(ze === Ro.horizontal || !Re && !su(Qi) || Re && (kp[Qi] || (wt = Qi, Zt.Arabic(wt) || Zt["Arabic Supplement"](wt) || Zt["Arabic Extended-A"](wt) || Zt["Arabic Presentation Forms-A"](wt) || Zt["Arabic Presentation Forms-B"](wt))));
              if (hi.image) {
                const Tr = de[hi.image.serialize()];
                if (!Tr)
                  continue;
                Kn = hi.image.id, Q.iconsInText = Q.iconsInText || !0, ls = Tr.paddedRect;
                const cs = Tr.displaySize;
                pn = pn * tr / Ve, as = { width: cs[0], height: cs[1], left: 0, top: -N0, advance: Ln ? cs[1] : cs[0], localGlyph: !1 }, Sn = tt ? -as.height * pn : Nt * tr - 17 - cs[1] * pn, Vr = as.advance;
                const to = (Ln ? cs[0] : cs[1]) * pn - tr * Nt;
                to > 0 && to > Ai && (Ai = to);
              } else {
                const Tr = fe[hi.fontStack];
                if (!Tr)
                  continue;
                Tr[Qi] && (ls = Tr[Qi]);
                const cs = ie[hi.fontStack];
                if (!cs)
                  continue;
                const to = cs.glyphs[Qi];
                if (!to)
                  continue;
                if (as = to.metrics, Vr = Qi !== 8203 ? tr : 0, tt) {
                  const Ms = cs.ascender !== void 0 ? Math.abs(cs.ascender) : 0, sl = cs.descender !== void 0 ? Math.abs(cs.descender) : 0, Mc = (Ms + sl) * pn;
                  yi < Mc && (yi = Mc, Ii = (Ms - sl) / 2 * pn), Sn = -Ms * pn;
                } else
                  Sn = (Nt - pn) * tr - 17;
              }
              Ln ? (Q.verticalizable = !0, gi.push({ glyph: Qi, imageName: Kn, x: Ue, y: Fe + Sn, vertical: Ln, scale: pn, localGlyph: as.localGlyph, fontStack: hi.fontStack, sectionIndex: on, metrics: as, rect: ls }), Ue += Vr * pn + Ie) : (gi.push({ glyph: Qi, imageName: Kn, x: Ue, y: Fe + Sn, vertical: Ln, scale: pn, localGlyph: as.localGlyph, fontStack: hi.fontStack, sectionIndex: on, metrics: as, rect: ls }), Ue += as.advance * pn + Ie);
            }
            gi.length !== 0 && (et = Math.max(Ue - Ie, et), tt ? Z0(gi, dt, Ai, Ii, Se * Nt / 2) : Z0(gi, dt, Ai, 0, Se / 2)), Ue = 0;
            const fn = Se * Nt + Ai;
            pi.lineOffset = Math.max(Ai, Qt), Fe += fn, ++Mt;
          }
          var wt;
          const At = Fe, { horizontalAlign: rt, verticalAlign: Ut } = B_(me);
          (function(St, Nt, Qt, pi, gi, Ai) {
            const yi = (Nt - Qt) * gi, Ii = -Ai * pi;
            for (const fn of St)
              for (const rn of fn.positionedGlyphs)
                rn.x += yi, rn.y += Ii;
          })(Q.positionedLines, dt, rt, Ut, et, At), Q.top += -Ut * At, Q.bottom = Q.top + At, Q.left += -rt * et, Q.right = Q.left + et, Q.hasBaseline = tt;
        }(K, e, n, o, V, f, v, S, P, D, I, C), !function(Q) {
          for (const ie of Q)
            if (ie.positionedGlyphs.length !== 0)
              return !1;
          return !0;
        }(H) && K;
      }
      const kp = { 9: !0, 10: !0, 11: !0, 12: !0, 13: !0, 32: !0 }, IT = { 10: !0, 32: !0, 38: !0, 40: !0, 41: !0, 43: !0, 45: !0, 47: !0, 173: !0, 183: !0, 8203: !0, 8208: !0, 8211: !0, 8231: !0 };
      function V0(r, e, n, o, u, l) {
        if (e.image) {
          const f = o[e.image.serialize()];
          return f ? f.displaySize[0] * e.scale * tr / l + u : 0;
        }
        {
          const f = n[e.fontStack], v = f && f.glyphs[r];
          return v ? v.metrics.advance * e.scale + u : 0;
        }
      }
      function U0(r, e, n, o) {
        const u = Math.pow(r - e, 2);
        return o ? r < e ? u / 2 : 2 * u : u + Math.abs(n) * n;
      }
      function LT(r, e, n) {
        let o = 0;
        return r === 10 && (o -= 1e4), n && (o += 150), r !== 40 && r !== 65288 || (o += 50), e !== 41 && e !== 65289 || (o += 50), o;
      }
      function j0(r, e, n, o, u, l) {
        let f = null, v = U0(e, n, u, l);
        for (const S of o) {
          const D = U0(e - S.x, n, u, l) + S.badness;
          D <= v && (f = S, v = D);
        }
        return { index: r, x: e, priorBreak: f, badness: v };
      }
      function G0(r) {
        return r ? G0(r.priorBreak).concat(r.index) : [];
      }
      function B_(r) {
        let e = 0.5, n = 0.5;
        switch (r) {
          case "right":
          case "top-right":
          case "bottom-right":
            e = 1;
            break;
          case "left":
          case "top-left":
          case "bottom-left":
            e = 0;
        }
        switch (r) {
          case "bottom":
          case "bottom-right":
          case "bottom-left":
            n = 1;
            break;
          case "top":
          case "top-right":
          case "top-left":
            n = 0;
        }
        return { horizontalAlign: e, verticalAlign: n };
      }
      function Z0(r, e, n, o, u) {
        if (!(e || n || o || u))
          return;
        const l = r.length - 1, f = r[l], v = (f.x + f.metrics.advance * f.scale) * e;
        for (let S = 0; S <= l; S++)
          r[S].x -= v, r[S].y += n + o + u;
      }
      function zT(r, e, n, o) {
        const { horizontalAlign: u, verticalAlign: l } = B_(o), f = n[0] - r.displaySize[0] * u, v = n[1] - r.displaySize[1] * l;
        return { imagePrimary: r, imageSecondary: e, top: v, bottom: v + r.displaySize[1], left: f, right: f + r.displaySize[0] };
      }
      function H0(r, e, n, o, u, l) {
        const f = r.imagePrimary;
        let v;
        if (f.content) {
          const V = f.content, U = f.pixelRatio || 1;
          v = [V[0] / U, V[1] / U, f.displaySize[0] - V[2] / U, f.displaySize[1] - V[3] / U];
        }
        const S = e.left * l, D = e.right * l;
        let x, P, I, M;
        n === "width" || n === "both" ? (M = u[0] + S - o[3], P = u[0] + D + o[1]) : (M = u[0] + (S + D - f.displaySize[0]) / 2, P = M + f.displaySize[0]);
        const C = e.top * l, k = e.bottom * l;
        return n === "height" || n === "both" ? (x = u[1] + C - o[0], I = u[1] + k + o[2]) : (x = u[1] + (C + k - f.displaySize[1]) / 2, I = x + f.displaySize[1]), { imagePrimary: f, imageSecondary: void 0, top: x, right: P, bottom: I, left: M, collisionPadding: v };
      }
      class zl extends Et {
        constructor(e, n, o, u, l) {
          super(e, n), this.angle = u, this.z = o, l !== void 0 && (this.segment = l);
        }
        clone() {
          return new zl(this.x, this.y, this.z, this.angle, this.segment);
        }
      }
      function q0(r, e, n, o, u) {
        if (e.segment === void 0)
          return !0;
        let l = e, f = e.segment + 1, v = 0;
        for (; v > -n / 2; ) {
          if (f--, f < 0)
            return !1;
          v -= r[f].dist(l), l = r[f];
        }
        v += r[f].dist(r[f + 1]), f++;
        const S = [];
        let D = 0;
        for (; v < n / 2; ) {
          const x = r[f], P = r[f + 1];
          if (!P)
            return !1;
          let I = r[f - 1].angleTo(x) - x.angleTo(P);
          for (I = Math.abs((I + 3 * Math.PI) % (2 * Math.PI) - Math.PI), S.push({ distance: v, angleDelta: I }), D += I; v - S[0].distance > o; )
            D -= S.shift().angleDelta;
          if (D > u)
            return !1;
          f++, v += x.dist(P);
        }
        return !0;
      }
      function W0(r) {
        let e = 0;
        for (let n = 0; n < r.length - 1; n++)
          e += r[n].dist(r[n + 1]);
        return e;
      }
      function $0(r, e, n) {
        return r ? 0.6 * e * n : 0;
      }
      function X0(r, e) {
        return Math.max(r ? r.right - r.left : 0, e ? e.right - e.left : 0);
      }
      function DT(r, e, n, o, u, l) {
        const f = $0(n, u, l), v = X0(n, o) * l;
        let S = 0;
        const D = W0(r) / 2;
        for (let x = 0; x < r.length - 1; x++) {
          const P = r[x], I = r[x + 1], M = P.dist(I);
          if (S + M > D) {
            const C = (D - S) / M, k = ei(P.x, I.x, C), V = ei(P.y, I.y, C), U = new zl(k, V, 0, I.angleTo(P), x);
            return !f || q0(r, U, v, f, e) ? U : void 0;
          }
          S += M;
        }
      }
      function kT(r, e, n, o, u, l, f, v, S) {
        const D = $0(o, l, f), x = X0(o, u), P = x * f, I = r[0].x === 0 || r[0].x === S || r[0].y === 0 || r[0].y === S;
        return e - P < e / 4 && (e = P + e / 4), Y0(r, I ? e / 2 * v % e : (x / 2 + 2 * l) * f * v % e, e, D, n, P, I, !1, S);
      }
      function Y0(r, e, n, o, u, l, f, v, S) {
        const D = l / 2, x = W0(r);
        let P = 0, I = e - n, M = [];
        for (let C = 0; C < r.length - 1; C++) {
          const k = r[C], V = r[C + 1], U = k.dist(V), q = V.angleTo(k);
          for (; I + n < P + U; ) {
            I += n;
            const $ = (I - P) / U, H = ei(k.x, V.x, $), K = ei(k.y, V.y, $);
            if (H >= 0 && H < S && K >= 0 && K < S && I - D >= 0 && I + D <= x) {
              const Q = new zl(H, K, 0, q, C);
              o && !q0(r, Q, l, o, u) || M.push(Q);
            }
          }
          P += U;
        }
        return v || M.length || f || (M = Y0(r, P / 2, n, o, u, l, f, !0, S)), M;
      }
      function K0(r, e, n, o, u) {
        const l = [];
        for (let f = 0; f < r.length; f++) {
          const v = r[f];
          let S;
          for (let D = 0; D < v.length - 1; D++) {
            let x = v[D], P = v[D + 1];
            x.x < e && P.x < e || (x.x < e ? x = new Et(e, x.y + (e - x.x) / (P.x - x.x) * (P.y - x.y))._round() : P.x < e && (P = new Et(e, x.y + (e - x.x) / (P.x - x.x) * (P.y - x.y))._round()), x.y < n && P.y < n || (x.y < n ? x = new Et(x.x + (n - x.y) / (P.y - x.y) * (P.x - x.x), n)._round() : P.y < n && (P = new Et(x.x + (n - x.y) / (P.y - x.y) * (P.x - x.x), n)._round()), x.x >= o && P.x >= o || (x.x >= o ? x = new Et(o, x.y + (o - x.x) / (P.x - x.x) * (P.y - x.y))._round() : P.x >= o && (P = new Et(o, x.y + (o - x.x) / (P.x - x.x) * (P.y - x.y))._round()), x.y >= u && P.y >= u || (x.y >= u ? x = new Et(x.x + (u - x.y) / (P.y - x.y) * (P.x - x.x), u)._round() : P.y >= u && (P = new Et(x.x + (u - x.y) / (P.y - x.y) * (P.x - x.x), u)._round()), S && x.equals(S[S.length - 1]) || (S = [x], l.push(S)), S.push(P)))));
          }
        }
        return l;
      }
      function J0(r) {
        let e = 0, n = 0;
        for (const f of r)
          e += f.w * f.h, n = Math.max(n, f.w);
        r.sort((f, v) => v.h - f.h);
        const o = [{ x: 0, y: 0, w: Math.max(Math.ceil(Math.sqrt(e / 0.95)), n), h: 1 / 0 }];
        let u = 0, l = 0;
        for (const f of r)
          for (let v = o.length - 1; v >= 0; v--) {
            const S = o[v];
            if (!(f.w > S.w || f.h > S.h)) {
              if (f.x = S.x, f.y = S.y, l = Math.max(l, f.y + f.h), u = Math.max(u, f.x + f.w), f.w === S.w && f.h === S.h) {
                const D = o.pop();
                v < o.length && (o[v] = D);
              } else
                f.h === S.h ? (S.x += f.w, S.w -= f.w) : f.w === S.w ? (S.y += f.h, S.h -= f.h) : (o.push({ x: S.x + f.w, y: S.y, w: S.w - f.w, h: f.h }), S.y += f.h, S.h -= f.h);
              break;
            }
          }
        return { w: u, h: l, fill: e / (u * l) || 0 };
      }
      Ft(zl, "Anchor");
      const Yd = 1;
      class N_ {
        constructor(e, { pixelRatio: n, version: o, stretchX: u, stretchY: l, content: f }, v) {
          this.paddedRect = e, this.pixelRatio = n, this.stretchX = u, this.stretchY = l, this.content = f, this.version = o, this.padding = v;
        }
        get tl() {
          return [this.paddedRect.x + this.padding, this.paddedRect.y + this.padding];
        }
        get br() {
          return [this.paddedRect.x + this.paddedRect.w - this.padding, this.paddedRect.y + this.paddedRect.h - this.padding];
        }
        get displaySize() {
          return [(this.paddedRect.w - 2 * this.padding) / this.pixelRatio, (this.paddedRect.h - 2 * this.padding) / this.pixelRatio];
        }
      }
      class Q0 {
        constructor(e, n, o) {
          const u = {}, l = {};
          this.haveRenderCallbacks = [];
          const f = [];
          this.addImages(e, u, Yd, f), this.addImages(n, l, 2, f);
          const { w: v, h: S } = J0(f), D = new _r({ width: v || 1, height: S || 1 });
          for (const x in e) {
            const P = e[x], I = u[x].paddedRect;
            _r.copy(P.data, D, { x: 0, y: 0 }, { x: I.x + Yd, y: I.y + Yd }, P.data, o, P.sdf);
          }
          for (const x in n) {
            const P = n[x], I = l[x].paddedRect;
            let M = l[x].padding;
            const C = I.x + M, k = I.y + M, V = P.data.width, U = P.data.height;
            M = M > 1 ? M - 1 : M, _r.copy(P.data, D, { x: 0, y: 0 }, { x: C, y: k }, P.data, o), _r.copy(P.data, D, { x: 0, y: U - M }, { x: C, y: k - M }, { width: V, height: M }, o), _r.copy(P.data, D, { x: 0, y: 0 }, { x: C, y: k + U }, { width: V, height: M }, o), _r.copy(P.data, D, { x: V - M, y: 0 }, { x: C - M, y: k }, { width: M, height: U }, o), _r.copy(P.data, D, { x: 0, y: 0 }, { x: C + V, y: k }, { width: M, height: U }, o), _r.copy(P.data, D, { x: V - M, y: U - M }, { x: C - M, y: k - M }, { width: M, height: M }, o), _r.copy(P.data, D, { x: 0, y: U - M }, { x: C + V, y: k - M }, { width: M, height: M }, o), _r.copy(P.data, D, { x: 0, y: 0 }, { x: C + V, y: k + U }, { width: M, height: M }, o), _r.copy(P.data, D, { x: V - M, y: 0 }, { x: C - M, y: k + U }, { width: M, height: M }, o);
          }
          this.image = D, this.iconPositions = u, this.patternPositions = l;
        }
        addImages(e, n, o, u) {
          for (const l in e) {
            const f = e[l], v = { x: 0, y: 0, w: f.data.width + 2 * o, h: f.data.height + 2 * o };
            u.push(v), n[l] = new N_(v, f, o), f.hasRenderCallback && this.haveRenderCallbacks.push(rr.deserializeId(l));
          }
        }
        patchUpdatedImages(e, n, o) {
          this.haveRenderCallbacks = this.haveRenderCallbacks.filter((u) => e.hasImage(u, o)), e.dispatchRenderCallbacks(this.haveRenderCallbacks, o);
          for (const u in e.getUpdatedImages(o)) {
            for (const l of Object.keys(this.iconPositions))
              rr.deserializeId(l) === u && this.patchUpdatedImage(this.iconPositions[l], e.getImage(u, o), n);
            for (const l of Object.keys(this.patternPositions))
              rr.deserializeId(l) === u && this.patchUpdatedImage(this.patternPositions[l], e.getImage(u, o), n);
          }
        }
        patchUpdatedImage(e, n, o) {
          if (!e || !n || e.version === n.version)
            return;
          e.version = n.version;
          const [u, l] = e.tl;
          o.update(n.data, { position: { x: u, y: l } });
        }
      }
      Ft(N_, "ImagePosition"), Ft(Q0, "ImageAtlas");
      const Kd = 1e20;
      function ex(r, e, n, o, u, l, f, v, S) {
        for (let D = e; D < e + o; D++)
          tx(r, n * l + D, l, u, f, v, S);
        for (let D = n; D < n + u; D++)
          tx(r, D * l + e, 1, o, f, v, S);
      }
      function tx(r, e, n, o, u, l, f) {
        l[0] = 0, f[0] = -Kd, f[1] = Kd, u[0] = r[e];
        for (let v = 1, S = 0, D = 0; v < o; v++) {
          u[v] = r[e + v * n];
          const x = v * v;
          do {
            const P = l[S];
            D = (u[v] - u[P] + x - P * P) / (v - P) / 2;
          } while (D <= f[S] && --S > -1);
          S++, l[S] = v, f[S] = D, f[S + 1] = Kd;
        }
        for (let v = 0, S = 0; v < o; v++) {
          for (; f[S + 1] < v; )
            S++;
          const D = l[S], x = v - D;
          r[e + v * n] = u[D] + x * x;
        }
      }
      const Ea = 2, V_ = { none: 0, ideographs: 1, all: 2 };
      class Du {
        constructor(e, n, o) {
          this.requestManager = e, this.localGlyphMode = n, this.localFontFamily = o, this.urls = {}, this.entries = {}, this.localGlyphs = { 200: {}, 400: {}, 500: {}, 900: {} };
        }
        setURL(e, n) {
          this.urls[n] = e;
        }
        getGlyphs(e, n, o) {
          const u = [], l = this.urls[n] || ge.GLYPHS_URL;
          for (const f in e)
            for (const v of e[f])
              u.push({ stack: f, id: v });
          Rn(u, ({ stack: f, id: v }, S) => {
            let D = this.entries[f];
            D || (D = this.entries[f] = { glyphs: {}, requests: {}, ranges: {}, ascender: void 0, descender: void 0 });
            let x = D.glyphs[v];
            if (x !== void 0)
              return void S(null, { stack: f, id: v, glyph: x });
            if (x = this._tinySDF(D, f, v), x)
              return D.glyphs[v] = x, void S(null, { stack: f, id: v, glyph: x });
            const P = Math.floor(v / 256);
            if (256 * P > 65535)
              return mi("glyphs > 65535 not supported"), void S(null, { stack: f, id: v, glyph: x });
            if (D.ranges[P])
              return void S(null, { stack: f, id: v, glyph: x });
            let I = D.requests[P];
            I || (I = D.requests[P] = [], Du.loadGlyphRange(f, P, l, this.requestManager, (M, C) => {
              if (C) {
                D.ascender = C.ascender, D.descender = C.descender;
                for (const k in C.glyphs)
                  this._doesCharSupportLocalGlyph(+k) || (D.glyphs[+k] = C.glyphs[+k]);
                D.ranges[P] = !0;
              }
              for (const k of I)
                k(M, C);
              delete D.requests[P];
            })), I.push((M, C) => {
              M ? S(M) : C && S(null, { stack: f, id: v, glyph: C.glyphs[v] || null });
            });
          }, (f, v) => {
            if (f)
              o(f);
            else if (v) {
              const S = {};
              for (const { stack: D, id: x, glyph: P } of v)
                S[D] === void 0 && (S[D] = {}), S[D].glyphs === void 0 && (S[D].glyphs = {}), S[D].glyphs[x] = P && { id: P.id, bitmap: P.bitmap.clone(), metrics: P.metrics }, S[D].ascender = this.entries[D].ascender, S[D].descender = this.entries[D].descender;
              o(null, S);
            }
          });
        }
        _doesCharSupportLocalGlyph(e) {
          return this.localGlyphMode !== V_.none && (this.localGlyphMode === V_.all ? !!this.localFontFamily : !!this.localFontFamily && (Zt["CJK Unified Ideographs"](e) || Zt["Hangul Syllables"](e) || Zt.Hiragana(e) || Zt.Katakana(e) || Zt["CJK Symbols and Punctuation"](e) || Zt["CJK Unified Ideographs Extension A"](e) || Zt["CJK Unified Ideographs Extension B"](e) || Zt.Osage(e)));
        }
        _tinySDF(e, n, o) {
          const u = this.localFontFamily;
          if (!u || !this._doesCharSupportLocalGlyph(o))
            return;
          let l = e.tinySDF;
          if (!l) {
            let k = "400";
            /bold/i.test(n) ? k = "900" : /medium/i.test(n) ? k = "500" : /light/i.test(n) && (k = "200"), l = e.tinySDF = new Du.TinySDF({ fontFamily: u, fontWeight: k, fontSize: 24 * Ea, buffer: 3 * Ea, radius: 8 * Ea }), l.fontWeight = k;
          }
          if (this.localGlyphs[l.fontWeight][o])
            return this.localGlyphs[l.fontWeight][o];
          const f = String.fromCodePoint(o), { data: v, width: S, height: D, glyphWidth: x, glyphHeight: P, glyphLeft: I, glyphTop: M, glyphAdvance: C } = l.draw(f);
          return this.localGlyphs[l.fontWeight][o] = { id: o, bitmap: new gc({ width: S, height: D }, v), metrics: { width: x / Ea, height: P / Ea, left: I / Ea, top: M / Ea - 27, advance: C / Ea, localGlyph: !0 } };
        }
      }
      Du.loadGlyphRange = function(r, e, n, o, u) {
        const l = 256 * e, f = l + 255, v = o.transformRequest(o.normalizeGlyphsURL(n).replace("{fontstack}", r).replace("{range}", `${l}-${f}`), Uo.Glyphs);
        no(v, (S, D) => {
          if (S)
            u(S);
          else if (D) {
            const x = {}, P = function(I) {
              return new Dp(I).readFields(PT, {});
            }(D);
            for (const I of P.glyphs)
              x[I.id] = I;
            u(null, { glyphs: x, ascender: P.ascender, descender: P.descender });
          }
        });
      }, Du.TinySDF = class {
        constructor({ fontSize: r = 24, buffer: e = 3, radius: n = 8, cutoff: o = 0.25, fontFamily: u = "sans-serif", fontWeight: l = "normal", fontStyle: f = "normal" } = {}) {
          this.buffer = e, this.cutoff = o, this.radius = n;
          const v = this.size = r + 4 * e, S = this._createCanvas(v), D = this.ctx = S.getContext("2d", { willReadFrequently: !0 });
          D.font = `${f} ${l} ${r}px ${u}`, D.textBaseline = "alphabetic", D.textAlign = "left", D.fillStyle = "black", this.gridOuter = new Float64Array(v * v), this.gridInner = new Float64Array(v * v), this.f = new Float64Array(v), this.z = new Float64Array(v + 1), this.v = new Uint16Array(v);
        }
        _createCanvas(r) {
          const e = document.createElement("canvas");
          return e.width = e.height = r, e;
        }
        draw(r) {
          const { width: e, actualBoundingBoxAscent: n, actualBoundingBoxDescent: o, actualBoundingBoxLeft: u, actualBoundingBoxRight: l } = this.ctx.measureText(r), f = Math.ceil(n), v = Math.max(0, Math.min(this.size - this.buffer, Math.ceil(l - u))), S = Math.min(this.size - this.buffer, f + Math.ceil(o)), D = v + 2 * this.buffer, x = S + 2 * this.buffer, P = Math.max(D * x, 0), I = new Uint8ClampedArray(P), M = { data: I, width: D, height: x, glyphWidth: v, glyphHeight: S, glyphTop: f, glyphLeft: 0, glyphAdvance: e };
          if (v === 0 || S === 0)
            return M;
          const { ctx: C, buffer: k, gridInner: V, gridOuter: U } = this;
          C.clearRect(k, k, v, S), C.fillText(r, k, k + f);
          const q = C.getImageData(k, k, v, S);
          U.fill(Kd, 0, P), V.fill(0, 0, P);
          for (let $ = 0; $ < S; $++)
            for (let H = 0; H < v; H++) {
              const K = q.data[4 * ($ * v + H) + 3] / 255;
              if (K === 0)
                continue;
              const Q = ($ + k) * D + H + k;
              if (K === 1)
                U[Q] = 0, V[Q] = Kd;
              else {
                const ie = 0.5 - K;
                U[Q] = ie > 0 ? ie * ie : 0, V[Q] = ie < 0 ? ie * ie : 0;
              }
            }
          ex(U, 0, 0, D, x, D, this.f, this.v, this.z), ex(V, k, k, v, S, D, this.f, this.v, this.z);
          for (let $ = 0; $ < P; $++) {
            const H = Math.sqrt(U[$]) - Math.sqrt(V[$]);
            I[$] = Math.round(255 - 255 * (H / this.radius + this.cutoff));
          }
          return M;
        }
      };
      const xc = Yd;
      function ix(r, e) {
        return r + e[1] - e[0];
      }
      function nx(r, e, n, o, u = 1) {
        const l = [], f = r.imagePrimary, v = f.pixelRatio, S = f.paddedRect.w - 2 * xc, D = f.paddedRect.h - 2 * xc, x = (r.right - r.left) * u, P = (r.bottom - r.top) * u, I = f.stretchX || [[0, S]], M = f.stretchY || [[0, D]], C = I.reduce(ix, 0), k = M.reduce(ix, 0), V = S - C, U = D - k;
        let q = 0, $ = C, H = 0, K = k, Q = 0, ie = V, fe = 0, de = U;
        if (f.content && o) {
          const Se = f.content;
          q = Rp(I, 0, Se[0]), H = Rp(M, 0, Se[1]), $ = Rp(I, Se[0], Se[2]), K = Rp(M, Se[1], Se[3]), Q = Se[0] - q, fe = Se[1] - H, ie = Se[2] - Se[0] - $, de = Se[3] - Se[1] - K;
        }
        const ue = (Se, me, Ee, ze) => {
          const Ie = Op(Se.stretch - q, $, x, r.left * u), Re = Fp(Se.fixed - Q, ie, Se.stretch, C), Ve = Op(me.stretch - H, K, P, r.top * u), Ue = Fp(me.fixed - fe, de, me.stretch, k), Fe = Op(Ee.stretch - q, $, x, r.left * u), et = Fp(Ee.fixed - Q, ie, Ee.stretch, C), dt = Op(ze.stretch - H, K, P, r.top * u), tt = Fp(ze.fixed - fe, de, ze.stretch, k), Mt = new Et(Ie, Ve), wt = new Et(Fe, Ve), At = new Et(Fe, dt), rt = new Et(Ie, dt), Ut = new Et(Re / v, Ue / v), St = new Et(et / v, tt / v), Nt = e * Math.PI / 180;
          if (Nt) {
            const Ii = Math.sin(Nt), fn = Math.cos(Nt), rn = [fn, -Ii, Ii, fn];
            Mt._matMult(rn), wt._matMult(rn), rt._matMult(rn), At._matMult(rn);
          }
          const Qt = Se.stretch + Se.fixed, pi = Ee.stretch + Ee.fixed, gi = me.stretch + me.fixed, Ai = ze.stretch + ze.fixed, yi = r.imageSecondary;
          return { tl: Mt, tr: wt, bl: rt, br: At, texPrimary: { x: f.paddedRect.x + xc + Qt, y: f.paddedRect.y + xc + gi, w: pi - Qt, h: Ai - gi }, texSecondary: yi ? { x: yi.paddedRect.x + xc + Qt, y: yi.paddedRect.y + xc + gi, w: pi - Qt, h: Ai - gi } : void 0, writingMode: void 0, glyphOffset: [0, 0], sectionIndex: 0, pixelOffsetTL: Ut, pixelOffsetBR: St, minFontScaleX: ie / v / x, minFontScaleY: de / v / P, isSDF: n };
        };
        if (o && (f.stretchX || f.stretchY)) {
          const Se = sx(I, V, C), me = sx(M, U, k);
          for (let Ee = 0; Ee < Se.length - 1; Ee++) {
            const ze = Se[Ee], Ie = Se[Ee + 1];
            for (let Re = 0; Re < me.length - 1; Re++)
              l.push(ue(ze, me[Re], Ie, me[Re + 1]));
          }
        } else
          l.push(ue({ fixed: 0, stretch: -1 }, { fixed: 0, stretch: -1 }, { fixed: 0, stretch: S + 1 }, { fixed: 0, stretch: D + 1 }));
        return l;
      }
      function Rp(r, e, n) {
        let o = 0;
        for (const u of r)
          o += Math.max(e, Math.min(n, u[1])) - Math.max(e, Math.min(n, u[0]));
        return o;
      }
      function sx(r, e, n) {
        const o = [{ fixed: -xc, stretch: 0 }];
        for (const [u, l] of r) {
          const f = o[o.length - 1];
          o.push({ fixed: u - f.stretch, stretch: f.stretch }), o.push({ fixed: u - f.stretch, stretch: f.stretch + (l - u) });
        }
        return o.push({ fixed: e + xc, stretch: n }), o;
      }
      function Op(r, e, n, o) {
        return r / e * n + o;
      }
      function Fp(r, e, n, o) {
        return r - e * n / o;
      }
      function RT(r, e, n, o) {
        const u = e + r.positionedLines[o].lineOffset;
        return o === 0 ? n + u / 2 : n + (u + (e + r.positionedLines[o - 1].lineOffset)) / 2;
      }
      function OT(r, e = 1, n = !1) {
        let o = 1 / 0, u = 1 / 0, l = -1 / 0, f = -1 / 0;
        const v = r[0];
        for (let M = 0; M < v.length; M++) {
          const C = v[M];
          (!M || C.x < o) && (o = C.x), (!M || C.y < u) && (u = C.y), (!M || C.x > l) && (l = C.x), (!M || C.y > f) && (f = C.y);
        }
        const S = Math.min(l - o, f - u);
        let D = S / 2;
        const x = new Wl([], FT);
        if (S === 0)
          return new Et(o, u);
        for (let M = o; M < l; M += S)
          for (let C = u; C < f; C += S)
            x.push(new ku(M + D, C + D, D, r));
        let P = function(M) {
          let C = 0, k = 0, V = 0;
          const U = M[0];
          for (let q = 0, $ = U.length, H = $ - 1; q < $; H = q++) {
            const K = U[q], Q = U[H], ie = K.x * Q.y - Q.x * K.y;
            k += (K.x + Q.x) * ie, V += (K.y + Q.y) * ie, C += 3 * ie;
          }
          return new ku(k / C, V / C, 0, M);
        }(r), I = x.length;
        for (; x.length; ) {
          const M = x.pop();
          (M.d > P.d || !P.d) && (P = M, n && console.log("found best %d after %d probes", Math.round(1e4 * M.d) / 1e4, I)), M.max - P.d <= e || (D = M.h / 2, x.push(new ku(M.p.x - D, M.p.y - D, D, r)), x.push(new ku(M.p.x + D, M.p.y - D, D, r)), x.push(new ku(M.p.x - D, M.p.y + D, D, r)), x.push(new ku(M.p.x + D, M.p.y + D, D, r)), I += 4);
        }
        return n && (console.log(`num probes: ${I}`), console.log(`best distance: ${P.d}`)), P.p;
      }
      function FT(r, e) {
        return e.max - r.max;
      }
      class ku {
        constructor(e, n, o, u) {
          this.p = new Et(e, n), this.h = o, this.d = function(l, f) {
            let v = !1, S = 1 / 0;
            for (let D = 0; D < f.length; D++) {
              const x = f[D];
              for (let P = 0, I = x.length, M = I - 1; P < I; M = P++) {
                const C = x[P], k = x[M];
                C.y > l.y != k.y > l.y && l.x < (k.x - C.x) * (l.y - C.y) / (k.y - C.y) + C.x && (v = !v), S = Math.min(S, we(l, C, k));
              }
            }
            return (v ? 1 : -1) * Math.sqrt(S);
          }(this.p, u), this.max = this.d + this.h * Math.SQRT2;
        }
      }
      const U_ = Number.POSITIVE_INFINITY, BT = Math.sqrt(2);
      function rx(r, [e, n]) {
        let o = 0, u = 0;
        if (n === U_) {
          e < 0 && (e = 0);
          const l = e / BT;
          switch (r) {
            case "top-right":
            case "top-left":
              u = l - 7;
              break;
            case "bottom-right":
            case "bottom-left":
              u = 7 - l;
              break;
            case "bottom":
              u = 7 - e;
              break;
            case "top":
              u = e - 7;
          }
          switch (r) {
            case "top-right":
            case "bottom-right":
              o = -l;
              break;
            case "top-left":
            case "bottom-left":
              o = l;
              break;
            case "left":
              o = e;
              break;
            case "right":
              o = -e;
          }
        } else {
          switch (e = Math.abs(e), n = Math.abs(n), r) {
            case "top-right":
            case "top-left":
            case "top":
              u = n - 7;
              break;
            case "bottom-right":
            case "bottom-left":
            case "bottom":
              u = 7 - n;
          }
          switch (r) {
            case "top-right":
            case "bottom-right":
            case "right":
              o = -e;
              break;
            case "top-left":
            case "bottom-left":
            case "left":
              o = e;
          }
        }
        return [o, u];
      }
      function j_(r) {
        switch (r) {
          case "right":
          case "top-right":
          case "bottom-right":
            return "right";
          case "left":
          case "top-left":
          case "bottom-left":
            return "left";
        }
        return "center";
      }
      function NT(r, e, n, o, u, l, f, v, S, D, x, P, I, M, C, k) {
        let V = l.textMaxSize.evaluate(e, {}, I);
        V === void 0 ? V = f * l.textScaleFactor : V *= l.textScaleFactor;
        const U = r.layers[0].layout, q = U.get("icon-offset").evaluate(e, {}, I), $ = ax(n.horizontal) || n.vertical, H = M.name === "globe", K = tr, Q = f * l.textScaleFactor / K, ie = r.tilePixelRatio * V / K, fe = (Re = r.overscaling, r.zoom > 18 && Re > 2 && (Re >>= 1), Math.max(Tt / (512 * Re), 1) * U.get("symbol-spacing")), de = U.get("text-padding") * r.tilePixelRatio, ue = U.get("icon-padding") * r.tilePixelRatio, Se = vi(U.get("text-max-angle")), me = U.get("text-rotation-alignment") === "map" && U.get("symbol-placement") !== "point", Ee = U.get("icon-rotation-alignment") === "map" && U.get("symbol-placement") !== "point", ze = U.get("symbol-placement"), Ie = fe / 2;
        var Re;
        const Ve = U.get("icon-text-fit").evaluate(e, {}, I), Ue = U.get("icon-text-fit-padding").evaluate(e, {}, I), Fe = Ve !== "none";
        let et;
        r.hasAnyIconTextFit === !1 && Fe && (r.hasAnyIconTextFit = !0), o && Fe && (r.allowVerticalPlacement && n.vertical && (et = H0(o, n.vertical, Ve, Ue, q, Q)), $ && (o = H0(o, $, Ve, Ue, q, Q)));
        const dt = (tt, Mt, wt) => {
          if (Mt.x < 0 || Mt.x >= Tt || Mt.y < 0 || Mt.y >= Tt)
            return;
          let At = null;
          if (H) {
            const { x: rt, y: Ut, z: St } = M.projectTilePoint(Mt.x, Mt.y, wt);
            At = { anchor: new zl(rt, Ut, St, 0, void 0), up: M.upVector(wt, Mt.x, Mt.y) };
          }
          (function(rt, Ut, St, Nt, Qt, pi, gi, Ai, yi, Ii, fn, rn, hi, on, Qi, pn, as, ls, Kn, Vr, Sn, Ln, Tr, cs, to, Ms, sl, Mc) {
            const Sc = rt.addToLineVertexArray(Ut, Nt);
            let Dl, Ec, Pc, hm, Nv, Vv, Uv, jv = 0, Gv = 0, Zv = 0, Hv = 0, Tg = -1, Mg = -1;
            const rl = {};
            let qv = $r("");
            const Sh = St ? St.anchor : Ut, Sg = yi.layout.get("icon-text-fit").evaluate(Sn, {}, Ms) !== "none";
            let Eg = 0, Pg = 0;
            if (yi._unevaluatedLayout.getValue("text-radial-offset") === void 0 ? [Eg, Pg] = yi.layout.get("text-offset").evaluate(Sn, {}, Ms).map((Fo) => Fo * tr) : (Eg = yi.layout.get("text-radial-offset").evaluate(Sn, {}, Ms) * tr, Pg = U_), rt.allowVerticalPlacement && Qt.vertical) {
              const Fo = Qt.vertical;
              if (Qi)
                Vv = G_(Fo), Ai && (Uv = G_(Ai));
              else {
                const po = yi.layout.get("text-rotate").evaluate(Sn, {}, Ms) + 90;
                Pc = Bp(Ii, Sh, Ut, fn, rn, hi, Fo, on, po, pn), Ai && (hm = Bp(Ii, Sh, Ut, fn, rn, hi, Ai, ls, po));
              }
            }
            if (pi) {
              const Fo = rt.iconSizeData, po = cs ? Lp(rt.iconSizeData, rt.layers[0]._unevaluatedLayout._values["icon-size"], Ms, rt.zoom, Sn) : 1, Hu = yi.layout.get("icon-rotate").evaluate(Sn, {}, Ms), Wv = nx(pi, Hu, Tr, Sg, cs ? 1 / po : Ln.iconScaleFactor), Cg = Ai ? nx(Ai, Hu, Tr, Sg, Ln.iconScaleFactor) : void 0;
              Ec = Bp(Ii, Sh, Ut, fn, rn, hi, pi, ls, Hu, null, cs ? Ln.iconScaleFactor * po : 1), jv = 4 * Wv.length;
              let Eh = null;
              Fo.kind === "source" ? (Eh = [Sa * yi.layout.get("icon-size").evaluate(Sn, {}, Ms) * Ln.iconScaleFactor], Eh[0] > vc && mi(`${rt.layerIds[0]}: Value for "icon-size" is >= ${Jd}. Reduce your "icon-size".`)) : Fo.kind === "composite" && (Eh = [Sa * Ln.compositeIconSizes[0].evaluate(Sn, {}, Ms) * Ln.iconScaleFactor, Sa * Ln.compositeIconSizes[1].evaluate(Sn, {}, Ms) * Ln.iconScaleFactor], (Eh[0] > vc || Eh[1] > vc) && mi(`${rt.layerIds[0]}: Value for "icon-size" is >= ${Jd}. Reduce your "icon-size".`)), rt.addSymbols(rt.icon, Wv, Eh, Vr, Kn, Sn, !1, St, Ut, Sc.lineStartIndex, Sc.lineLength, -1, to, Ms, sl, Mc), Tg = rt.icon.placedSymbolArray.length - 1, Cg && (Gv = 4 * Cg.length, rt.addSymbols(rt.icon, Cg, Eh, Vr, Kn, Sn, Ro.vertical, St, Ut, Sc.lineStartIndex, Sc.lineLength, -1, to, Ms, sl, Mc), Mg = rt.icon.placedSymbolArray.length - 1);
            }
            for (const Fo in Qt.horizontal) {
              const po = Qt.horizontal[Fo];
              Dl || (qv = $r(po.text), Qi ? Nv = G_(po) : Dl = Bp(Ii, Sh, Ut, fn, rn, hi, po, on, yi.layout.get("text-rotate").evaluate(Sn, {}, Ms), pn));
              const Hu = po.positionedLines.length === 1;
              if (Zv += ox(rt, St, Ut, po, gi, yi, Qi, Sn, pn, Sc, Qt.vertical ? Ro.horizontal : Ro.horizontalOnly, Hu ? Object.keys(Qt.horizontal) : [Fo], rl, Tg, Ln, to, Ms, sl), Hu)
                break;
            }
            Qt.vertical && (Hv += ox(rt, St, Ut, Qt.vertical, gi, yi, Qi, Sn, pn, Sc, Ro.vertical, ["vertical"], rl, Mg, Ln, to, Ms, sl));
            let Ac = -1;
            const Ag = (Fo, po) => Fo ? Math.max(Fo, po) : po;
            Ac = Ag(Nv, Ac), Ac = Ag(Vv, Ac), Ac = Ag(Uv, Ac);
            const yM = Ac > -1 ? 1 : 0;
            rt.glyphOffsetArray.length >= 65535 && mi("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"), Sn.sortKey !== void 0 && rt.addToSortKeyRanges(rt.symbolInstances.length, Sn.sortKey), rt.symbolInstances.emplaceBack(Ut.x, Ut.y, Sh.x, Sh.y, Sh.z, rl.right >= 0 ? rl.right : -1, rl.center >= 0 ? rl.center : -1, rl.left >= 0 ? rl.left : -1, rl.vertical >= 0 ? rl.vertical : -1, Tg, Mg, qv, Dl !== void 0 ? Dl : rt.collisionBoxArray.length, Dl !== void 0 ? Dl + 1 : rt.collisionBoxArray.length, Pc !== void 0 ? Pc : rt.collisionBoxArray.length, Pc !== void 0 ? Pc + 1 : rt.collisionBoxArray.length, Ec !== void 0 ? Ec : rt.collisionBoxArray.length, Ec !== void 0 ? Ec + 1 : rt.collisionBoxArray.length, hm || rt.collisionBoxArray.length, hm ? hm + 1 : rt.collisionBoxArray.length, fn, Zv, Hv, jv, Gv, yM, 0, Eg, Pg, Ac, 0, Sg ? 1 : 0);
          })(r, Mt, At, tt, n, o, u, et, r.layers[0], r.collisionBoxArray, e.index, e.sourceLayerIndex, r.index, de, me, S, 0, ue, Ee, q, e, l, D, x, P, I, C, k);
        };
        if (ze === "line")
          for (const tt of K0(e.geometry, 0, 0, Tt, Tt)) {
            const Mt = kT(tt, fe, Se, n.vertical || $, o, K, ie, r.overscaling, Tt);
            for (const wt of Mt)
              $ && VT(r, $.text, Ie, wt) || dt(tt, wt, I);
          }
        else if (ze === "line-center") {
          for (const tt of e.geometry)
            if (tt.length > 1) {
              const Mt = DT(tt, Se, n.vertical || $, o, K, ie);
              Mt && dt(tt, Mt, I);
            }
        } else if (e.type === "Polygon")
          for (const tt of Mp(e.geometry, 0)) {
            const Mt = OT(tt, 16);
            dt(tt[0], new zl(Mt.x, Mt.y, 0, 0, void 0), I);
          }
        else if (e.type === "LineString")
          for (const tt of e.geometry)
            dt(tt, new zl(tt[0].x, tt[0].y, 0, 0, void 0), I);
        else if (e.type === "Point")
          for (const tt of e.geometry)
            for (const Mt of tt)
              dt([Mt], new zl(Mt.x, Mt.y, 0, 0, void 0), I);
      }
      const Jd = 255, vc = Jd * Sa;
      function ox(r, e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V, U) {
        const q = function(K, Q, ie, fe, de, ue, Se, me) {
          const Ee = [];
          if (Q.positionedLines.length === 0)
            return Ee;
          const ze = fe.layout.get("text-rotate").evaluate(ue, {}) * Math.PI / 180, Ie = function(et) {
            const dt = et[0], tt = et[1], Mt = dt * tt;
            return Mt > 0 ? [dt, -tt] : Mt < 0 ? [-dt, tt] : dt === 0 ? [tt, dt] : [tt, -dt];
          }(ie);
          let Re = Math.abs(Q.top - Q.bottom);
          for (const et of Q.positionedLines)
            Re -= et.lineOffset;
          const Ve = Q.positionedLines.length, Ue = Re / Ve;
          let Fe = Q.top - ie[1];
          for (let et = 0; et < Ve; ++et) {
            const dt = Q.positionedLines[et];
            Fe = RT(Q, Ue, Fe, et);
            for (const tt of dt.positionedGlyphs) {
              if (!tt.rect)
                continue;
              const Mt = tt.rect || {};
              let wt = N0 + 1, At = !0, rt = 1, Ut = 0;
              if (tt.imageName) {
                const Kn = Se[ss.build(tt.imageName).getSerializedPrimary()];
                if (!Kn)
                  continue;
                if (Kn.sdf) {
                  mi("SDF images are not supported in formatted text and will be ignored.");
                  continue;
                }
                At = !1, rt = Kn.pixelRatio, wt = Yd / rt;
              }
              const St = (de || me) && tt.vertical, Nt = tt.metrics.advance * tt.scale / 2, Qt = tt.metrics, pi = tt.rect;
              if (pi === null)
                continue;
              me && Q.verticalizable && (Ut = tt.imageName ? Nt - tt.metrics.width * tt.scale / 2 : 0);
              const gi = de ? [tt.x + Nt, tt.y] : [0, 0];
              let Ai = [0, 0], yi = [0, 0], Ii = !1;
              de || (St ? (yi = [tt.x + Nt + Ie[0], tt.y + Ie[1] - Ut], Ii = !0) : Ai = [tt.x + Nt + ie[0], tt.y + ie[1] - Ut]);
              const fn = pi.w * tt.scale / (rt * (tt.localGlyph ? Ea : 1)), rn = pi.h * tt.scale / (rt * (tt.localGlyph ? Ea : 1));
              let hi, on, Qi, pn;
              if (St) {
                const Kn = tt.y - Fe, Vr = new Et(-Nt, Nt - Kn), Sn = -Math.PI / 2, Ln = new Et(...yi);
                hi = new Et(-Nt + Ai[0], Ai[1]), hi._rotateAround(Sn, Vr)._add(Ln), hi.x += -Kn + Nt, hi.y -= (Qt.left - wt) * tt.scale;
                const Tr = tt.imageName ? Qt.advance * tt.scale : tr * tt.scale, cs = String.fromCodePoint(tt.glyph);
                MT(cs) ? hi.x += (1 - wt) * tt.scale : ST(cs) ? hi.x += Tr - Qt.height * tt.scale + (-wt - 1) * tt.scale : hi.x += tt.imageName || Qt.width + 2 * wt === pi.w && Qt.height + 2 * wt === pi.h ? (Tr - rn) / 2 : (Tr - (Qt.height + 2 * wt) * tt.scale) / 2, on = new Et(hi.x, hi.y - fn), Qi = new Et(hi.x + rn, hi.y), pn = new Et(hi.x + rn, hi.y - fn);
              } else {
                const Kn = (Qt.left - wt) * tt.scale - Nt + Ai[0], Vr = (-Qt.top - wt) * tt.scale + Ai[1], Sn = Kn + fn, Ln = Vr + rn;
                hi = new Et(Kn, Vr), on = new Et(Sn, Vr), Qi = new Et(Kn, Ln), pn = new Et(Sn, Ln);
              }
              if (ze) {
                let Kn;
                Kn = de ? new Et(0, 0) : Ii ? new Et(Ie[0], Ie[1]) : new Et(ie[0], ie[1]), hi._rotateAround(ze, Kn), on._rotateAround(ze, Kn), Qi._rotateAround(ze, Kn), pn._rotateAround(ze, Kn);
              }
              const as = new Et(0, 0), ls = new Et(0, 0);
              Ee.push({ tl: hi, tr: on, bl: Qi, br: pn, texPrimary: Mt, texSecondary: void 0, writingMode: Q.writingMode, glyphOffset: gi, sectionIndex: tt.sectionIndex, isSDF: At, pixelOffsetTL: as, pixelOffsetBR: ls, minFontScaleX: 0, minFontScaleY: 0 });
            }
          }
          return Ee;
        }(0, o, S, l, f, v, u, r.allowVerticalPlacement), $ = r.textSizeData;
        let H = null;
        $.kind === "source" ? (H = [Sa * l.layout.get("text-size").evaluate(v, {}, V) * C.textScaleFactor], H[0] > vc && mi(`${r.layerIds[0]}: Value for "text-size" is >= ${Jd}. Reduce your "text-size".`)) : $.kind === "composite" && (H = [Sa * C.compositeTextSizes[0].evaluate(v, {}, V) * C.textScaleFactor, Sa * C.compositeTextSizes[1].evaluate(v, {}, V) * C.textScaleFactor], (H[0] > vc || H[1] > vc) && mi(`${r.layerIds[0]}: Value for "text-size" is >= ${Jd}. Reduce your "text-size".`)), r.addSymbols(r.text, q, H, S, f, v, x, e, n, D.lineStartIndex, D.lineLength, M, k, V, U, !1);
        for (const K of P)
          I[K] = r.text.placedSymbolArray.length - 1;
        return 4 * q.length;
      }
      function ax(r) {
        for (const e in r)
          return r[e];
        return null;
      }
      function Bp(r, e, n, o, u, l, f, v, S, D, x = 1) {
        let P = f.top / x, I = f.bottom / x, M = f.left / x, C = f.right / x;
        const k = f.collisionPadding;
        if (k && (M -= k[0], P -= k[1], C += k[2], I += k[3]), S) {
          const V = new Et(M, P), U = new Et(C, P), q = new Et(M, I), $ = new Et(C, I), H = vi(S);
          let K = new Et(0, 0);
          D && (K = new Et(D[0], D[1])), V._rotateAround(H, K), U._rotateAround(H, K), q._rotateAround(H, K), $._rotateAround(H, K), M = Math.min(V.x, U.x, q.x, $.x), C = Math.max(V.x, U.x, q.x, $.x), P = Math.min(V.y, U.y, q.y, $.y), I = Math.max(V.y, U.y, q.y, $.y);
        }
        return r.emplaceBack(e.x, e.y, e.z, n.x, n.y, M, P, C, I, v, o, u, l), r.length - 1;
      }
      function G_(r) {
        r.collisionPadding && (r.top -= r.collisionPadding[1], r.bottom += r.collisionPadding[3]);
        const e = r.bottom - r.top;
        return e > 0 ? Math.max(10, e) : null;
      }
      function VT(r, e, n, o) {
        const u = r.compareText;
        if (e in u) {
          const l = u[e];
          for (let f = l.length - 1; f >= 0; f--)
            if (o.dist(l[f]) < n)
              return !0;
        } else
          u[e] = [];
        return u[e].push(o), !1;
      }
      function lx(r, e) {
        const n = r.fovAboveCenter, o = r.elevation ? r.elevation.getMinElevationBelowMSL() * e : 0, u = (r._camera.position[2] * r.worldSize - o) / Math.cos(r._pitch), l = Math.sin(n) * u / Math.sin(Math.max(Math.PI / 2 - r._pitch - n, 0.01));
        let f = Math.sin(r._pitch) * l + u;
        const v = u * (1 / r._horizonShift);
        return r.elevation && r.elevation.exaggeration() !== 0 || (f *= 1 + Math.max(r.zoom - 17, 0)), Math.min(1.01 * f, v);
      }
      function Qd(r, e) {
        if (!e.isReprojectedInTileSpace)
          return { scale: 1 << r.z, x: r.x, y: r.y, x2: r.x + 1, y2: r.y + 1, projection: e };
        const n = Math.pow(2, -r.z), o = r.x * n, u = (r.x + 1) * n, l = r.y * n, f = (r.y + 1) * n, v = Fr(o), S = Fr(u), D = Os(l), x = Os(f), P = e.project(v, D), I = e.project(S, D), M = e.project(S, x), C = e.project(v, x);
        let k = Math.min(P.x, I.x, M.x, C.x), V = Math.min(P.y, I.y, M.y, C.y), U = Math.max(P.x, I.x, M.x, C.x), q = Math.max(P.y, I.y, M.y, C.y);
        const $ = n / 16;
        function H(Q, ie, fe, de, ue, Se) {
          const me = (fe + ue) / 2, Ee = (de + Se) / 2, ze = e.project(Fr(me), Os(Ee)), Ie = Math.max(0, k - ze.x, V - ze.y, ze.x - U, ze.y - q);
          k = Math.min(k, ze.x), U = Math.max(U, ze.x), V = Math.min(V, ze.y), q = Math.max(q, ze.y), Ie > $ && (H(Q, ze, fe, de, me, Ee), H(ze, ie, me, Ee, ue, Se));
        }
        H(P, I, o, l, u, l), H(I, M, u, l, u, f), H(M, C, u, f, o, f), H(C, P, o, f, o, l), k -= $, V -= $, U += $, q += $;
        const K = 1 / Math.max(U - k, q - V);
        return { scale: K, x: k * K, y: V * K, x2: U * K, y2: q * K, projection: e };
      }
      function cx(r, { x: e, y: n }, o = 0) {
        return new Et(((e - o) * r.scale - r.x) * Tt, (n * r.scale - r.y) * Tt);
      }
      const UT = De.mat4.identity(new Float32Array(16));
      class bc {
        constructor(e) {
          this.spec = e, this.name = e.name, this.wrap = !1, this.requiresDraping = !1, this.supportsWorldCopies = !1, this.supportsTerrain = !1, this.supportsFog = !1, this.supportsFreeCamera = !1, this.zAxisUnit = "meters", this.isReprojectedInTileSpace = !0, this.unsupportedLayers = ["custom"], this.center = [0, 0], this.range = [3.5, 7];
        }
        project(e, n) {
          return { x: 0, y: 0, z: 0 };
        }
        unproject(e, n) {
          return new Ui(0, 0);
        }
        projectTilePoint(e, n, o) {
          return { x: e, y: n, z: 0 };
        }
        locationPoint(e, n, o = !0) {
          return e._coordinatePoint(e.locationCoordinate(n), o);
        }
        pixelsPerMeter(e, n) {
          return fr(1, e) * n;
        }
        pixelSpaceConversion(e, n, o) {
          return 1;
        }
        farthestPixelDistance(e) {
          return lx(e, e.pixelsPerMeter);
        }
        pointCoordinate(e, n, o, u) {
          const l = e.horizonLineFromTop(!1), f = new Et(n, Math.max(l, o));
          return e.rayIntersectionCoordinate(e.pointRayIntersection(f, u));
        }
        pointCoordinate3D(e, n, o) {
          const u = new Et(n, o);
          if (e.elevation)
            return e.elevation.pointCoordinate(u);
          {
            const l = this.pointCoordinate(e, u.x, u.y, 0);
            return [l.x, l.y, l.z];
          }
        }
        isPointAboveHorizon(e, n) {
          if (e.elevation && e.elevation.visibleDemTiles.length)
            return !this.pointCoordinate3D(e, n.x, n.y);
          const o = e.horizonLineFromTop();
          return n.y < o;
        }
        createInversionMatrix(e, n) {
          return UT;
        }
        createTileMatrix(e, n, o) {
          let u, l, f;
          const v = o.canonical, S = De.mat4.identity(new Float64Array(16));
          if (this.isReprojectedInTileSpace) {
            const D = Qd(v, this);
            u = 1, l = D.x + o.wrap * D.scale, f = D.y, De.mat4.scale(S, S, [u / D.scale, u / D.scale, e.pixelsPerMeter / n]);
          } else
            u = n / e.zoomScale(v.z), l = (v.x + Math.pow(2, v.z) * o.wrap) * u, f = v.y * u;
          return De.mat4.translate(S, S, [l, f, 0]), De.mat4.scale(S, S, [u / Tt, u / Tt, 1]), S;
        }
        upVector(e, n, o) {
          return [0, 0, 1];
        }
        upVectorScale(e, n, o) {
          return { metersToTile: 1 };
        }
      }
      class jT extends bc {
        constructor(e) {
          super(e), this.range = [4, 7], this.center = e.center || [-96, 37.5];
          const [n, o] = this.parallels = e.parallels || [29.5, 45.5], u = Math.sin(vi(n));
          this.n = (u + Math.sin(vi(o))) / 2, this.c = 1 + u * (2 * this.n - u), this.r0 = Math.sqrt(this.c) / this.n;
        }
        project(e, n) {
          const { n: o, c: u, r0: l } = this, f = vi(e - this.center[0]), v = vi(n), S = Math.sqrt(u - 2 * o * Math.sin(v)) / o;
          return { x: S * Math.sin(f * o), y: S * Math.cos(f * o) - l, z: 0 };
        }
        unproject(e, n) {
          const { n: o, c: u, r0: l } = this, f = l + n;
          let v = Math.atan2(e, Math.abs(f)) * Math.sign(f);
          f * o < 0 && (v -= Math.PI * Math.sign(e) * Math.sign(f));
          const S = vi(this.center[0]) * o;
          v = zn(v, -Math.PI - S, Math.PI - S);
          const D = si(kn(v / o) + this.center[0], -180, 180), x = Math.asin(si((u - (e * e + f * f) * o * o) / (2 * o), -1, 1)), P = si(kn(x), -Un, Un);
          return new Ui(D, P);
        }
      }
      const ef = 1.340264, tf = -0.081106, nf = 893e-6, sf = 3796e-6, Np = Math.sqrt(3) / 2;
      class GT extends bc {
        project(e, n) {
          n = n / 180 * Math.PI, e = e / 180 * Math.PI;
          const o = Math.asin(Np * Math.sin(n)), u = o * o, l = u * u * u;
          return { x: 0.5 * (e * Math.cos(o) / (Np * (ef + 3 * tf * u + l * (7 * nf + 9 * sf * u))) / Math.PI + 0.5), y: 1 - 0.5 * (o * (ef + tf * u + l * (nf + sf * u)) / Math.PI + 1), z: 0 };
        }
        unproject(e, n) {
          e = (2 * e - 0.5) * Math.PI;
          let o = n = (2 * (1 - n) - 1) * Math.PI, u = o * o, l = u * u * u;
          for (let x, P, I, M = 0; M < 12 && (P = o * (ef + tf * u + l * (nf + sf * u)) - n, I = ef + 3 * tf * u + l * (7 * nf + 9 * sf * u), x = P / I, o = si(o - x, -Math.PI / 3, Math.PI / 3), u = o * o, l = u * u * u, !(Math.abs(x) < 1e-12)); ++M)
            ;
          const f = Np * e * (ef + 3 * tf * u + l * (7 * nf + 9 * sf * u)) / Math.cos(o), v = Math.asin(Math.sin(o) / Np), S = si(180 * f / Math.PI, -180, 180), D = si(180 * v / Math.PI, -Un, Un);
          return new Ui(S, D);
        }
      }
      class ZT extends bc {
        constructor(e) {
          super(e), this.wrap = !0, this.supportsWorldCopies = !0;
        }
        project(e, n) {
          return { x: 0.5 + e / 360, y: 0.5 - n / 360, z: 0 };
        }
        unproject(e, n) {
          const o = 360 * (e - 0.5), u = si(360 * (0.5 - n), -Un, Un);
          return new Ui(o, u);
        }
      }
      const Ru = Math.PI / 2;
      function Vp(r) {
        return Math.tan((Ru + r) / 2);
      }
      class HT extends bc {
        constructor(e) {
          super(e), this.center = e.center || [0, 30];
          const [n, o] = this.parallels = e.parallels || [30, 30];
          let u = vi(n), l = vi(o);
          this.southernCenter = u + l < 0, this.southernCenter && (u = -u, l = -l);
          const f = Math.cos(u), v = Vp(u);
          this.n = u === l ? Math.sin(u) : Math.log(f / Math.cos(l)) / Math.log(Vp(l) / v), this.f = f * Math.pow(Vp(u), this.n) / this.n;
        }
        project(e, n) {
          n = vi(n), this.southernCenter && (n = -n), e = vi(e - this.center[0]);
          const o = 1e-6, { n: u, f: l } = this;
          l > 0 ? n < -Ru + o && (n = -Ru + o) : n > Ru - o && (n = Ru - o);
          const f = l / Math.pow(Vp(n), u);
          let v = f * Math.sin(u * e), S = l - f * Math.cos(u * e);
          return v = 0.5 * (v / Math.PI + 0.5), S = 0.5 * (S / Math.PI + 0.5), { x: v, y: this.southernCenter ? S : 1 - S, z: 0 };
        }
        unproject(e, n) {
          e = (2 * e - 0.5) * Math.PI, this.southernCenter && (n = 1 - n), n = (2 * (1 - n) - 0.5) * Math.PI;
          const { n: o, f: u } = this, l = u - n, f = Math.sign(l), v = Math.sign(o) * Math.sqrt(e * e + l * l);
          let S = Math.atan2(e, Math.abs(l)) * f;
          l * o < 0 && (S -= Math.PI * Math.sign(e) * f);
          const D = si(kn(S / o) + this.center[0], -180, 180), x = si(kn(2 * Math.atan(Math.pow(u / v, 1 / o)) - Ru), -Un, Un);
          return new Ui(D, this.southernCenter ? -x : x);
        }
      }
      class hx extends bc {
        constructor(e) {
          super(e), this.wrap = !0, this.supportsWorldCopies = !0, this.supportsTerrain = !0, this.supportsFog = !0, this.supportsFreeCamera = !0, this.isReprojectedInTileSpace = !1, this.unsupportedLayers = [], this.range = null;
        }
        project(e, n) {
          return { x: ta(e), y: Ta(n), z: 0 };
        }
        unproject(e, n) {
          const o = Fr(e), u = Os(n);
          return new Ui(o, u);
        }
      }
      const ux = vi(Un);
      class qT extends bc {
        project(e, n) {
          const o = (n = vi(n)) * n, u = o * o;
          return { x: 0.5 * ((e = vi(e)) * (0.8707 - 0.131979 * o + u * (u * (3971e-6 * o - 1529e-6 * u) - 0.013791)) / Math.PI + 0.5), y: 1 - 0.5 * (n * (1.007226 + o * (0.015085 + u * (0.028874 * o - 0.044475 - 5916e-6 * u))) / Math.PI + 1), z: 0 };
        }
        unproject(e, n) {
          e = (2 * e - 0.5) * Math.PI;
          let o = n = (2 * (1 - n) - 1) * Math.PI, u = 25, l = 0, f = o * o;
          do {
            f = o * o;
            const D = f * f;
            l = (o * (1.007226 + f * (0.015085 + D * (0.028874 * f - 0.044475 - 5916e-6 * D))) - n) / (1.007226 + f * (0.045255 + D * (0.259866 * f - 0.311325 - 5916e-6 * 11 * D))), o = si(o - l, -ux, ux);
          } while (Math.abs(l) > 1e-6 && --u > 0);
          f = o * o;
          const v = si(kn(e / (0.8707 + f * (f * (f * f * f * (3971e-6 - 1529e-6 * f) - 0.013791) - 0.131979))), -180, 180), S = kn(o);
          return new Ui(v, S);
        }
      }
      const dx = vi(Un);
      class WT extends bc {
        project(e, n) {
          n = vi(n), e = vi(e);
          const o = Math.cos(n), u = 2 / Math.PI, l = Math.acos(o * Math.cos(e / 2)), f = Math.sin(l) / l, v = 0.5 * (e * u + 2 * o * Math.sin(e / 2) / f) || 0, S = 0.5 * (n + Math.sin(n) / f) || 0;
          return { x: 0.5 * (v / Math.PI + 0.5), y: 1 - 0.5 * (S / Math.PI + 1), z: 0 };
        }
        unproject(e, n) {
          let o = e = (2 * e - 0.5) * Math.PI, u = n = (2 * (1 - n) - 1) * Math.PI, l = 25;
          const f = 1e-6;
          let v = 0, S = 0;
          do {
            const D = Math.cos(u), x = Math.sin(u), P = 2 * x * D, I = x * x, M = D * D, C = Math.cos(o / 2), k = Math.sin(o / 2), V = 2 * C * k, U = k * k, q = 1 - M * C * C, $ = q ? 1 / q : 0, H = q ? Math.acos(D * C) * Math.sqrt(1 / q) : 0, K = 0.5 * (2 * H * D * k + 2 * o / Math.PI) - e, Q = 0.5 * (H * x + u) - n, ie = 0.5 * $ * (M * U + H * D * C * I) + 1 / Math.PI, fe = $ * (V * P / 4 - H * x * k), de = 0.125 * $ * (P * k - H * x * M * V), ue = 0.5 * $ * (I * C + H * U * D) + 0.5, Se = fe * de - ue * ie;
            v = (Q * fe - K * ue) / Se, S = (K * de - Q * ie) / Se, o = si(o - v, -Math.PI, Math.PI), u = si(u - S, -dx, dx);
          } while ((Math.abs(v) > f || Math.abs(S) > f) && --l > 0);
          return new Ui(kn(o), kn(u));
        }
      }
      class fx extends bc {
        constructor(e) {
          super(e), this.center = e.center || [0, 0], this.parallels = e.parallels || [0, 0], this.cosPhi = Math.max(0.01, Math.cos(vi(this.parallels[0]))), this.scale = 1 / (2 * Math.max(Math.PI * this.cosPhi, 1 / this.cosPhi)), this.wrap = !0, this.supportsWorldCopies = !0;
        }
        project(e, n) {
          const { scale: o, cosPhi: u } = this;
          return { x: vi(e) * u * o + 0.5, y: -Math.sin(vi(n)) / u * o + 0.5, z: 0 };
        }
        unproject(e, n) {
          const { scale: o, cosPhi: u } = this, l = -(n - 0.5) / o, f = si(kn((e - 0.5) / o) / u, -180, 180), v = Math.asin(si(l * u, -1, 1)), S = si(kn(v), -Un, Un);
          return new Ui(f, S);
        }
      }
      class $T extends hx {
        constructor(e) {
          super(e), this.requiresDraping = !0, this.supportsWorldCopies = !1, this.supportsFog = !0, this.zAxisUnit = "pixels", this.unsupportedLayers = ["debug"], this.range = [3, 5];
        }
        projectTilePoint(e, n, o) {
          const u = Ri(e, n, o), l = cn(ts(o));
          return De.vec3.transformMat4(u, u, l), { x: u[0], y: u[1], z: u[2] };
        }
        locationPoint(e, n) {
          const o = el(n.lat, n.lng), u = De.vec3.normalize([], o), l = e.elevation ? e.elevation.getAtPointOrZero(e.locationCoordinate(n), e._centerAltitude) : e._centerAltitude, f = fr(1, 0) * Tt * l;
          De.vec3.scaleAndAdd(o, o, u, f);
          const v = De.mat4.identity(new Float64Array(16));
          return De.mat4.multiply(v, e.pixelMatrix, e.globeMatrix), De.vec3.transformMat4(o, o, v), new Et(o[0], o[1]);
        }
        pixelsPerMeter(e, n) {
          return fr(1, 0) * n;
        }
        pixelSpaceConversion(e, n, o) {
          const u = fr(1, e) * n, l = ei(fr(1, 45) * n, u, o);
          return this.pixelsPerMeter(e, n) / l;
        }
        createTileMatrix(e, n, o) {
          const u = er(ts(o.canonical));
          return De.mat4.multiply(new Float64Array(16), e.globeMatrix, u);
        }
        createInversionMatrix(e, n) {
          const { center: o } = e, u = cn(ts(n));
          return De.mat4.rotateY(u, u, vi(o.lng)), De.mat4.rotateX(u, u, vi(o.lat)), De.mat4.scale(u, u, [e._pixelsPerMercatorPixel, e._pixelsPerMercatorPixel, 1]), Float32Array.from(u);
        }
        pointCoordinate(e, n, o, u) {
          return In(e, n, o, !0) || new h(0, 0);
        }
        pointCoordinate3D(e, n, o) {
          const u = this.pointCoordinate(e, n, o, 0);
          return [u.x, u.y, u.z];
        }
        isPointAboveHorizon(e, n) {
          return !In(e, n.x, n.y, !1);
        }
        farthestPixelDistance(e) {
          const n = function(u, l) {
            const f = u.cameraToCenterDistance, v = u._centerAltitude * l, S = u._camera, D = u._camera.forward(), x = De.vec3.add([], De.vec3.scale([], D, -f), [0, 0, v]), P = u.worldSize / (2 * Math.PI), I = [0, 0, -P], M = u.width / u.height, C = Math.tan(u.fovAboveCenter), k = De.vec3.scale([], S.up(), C), V = De.vec3.scale([], S.right(), C * M), U = De.vec3.normalize([], De.vec3.add([], De.vec3.add([], D, k), V)), q = [];
            let $;
            if (new zi(x, U).closestPointOnSphere(I, P, q)) {
              const H = De.vec3.add([], q, I), K = De.vec3.sub([], H, x);
              $ = Math.cos(u.fovAboveCenter) * De.vec3.length(K);
            } else {
              const H = De.vec3.sub([], x, I), K = De.vec3.sub([], I, x);
              De.vec3.normalize(K, K);
              const Q = De.vec3.length(H) - P;
              $ = Math.sqrt(Q * (Q + 2 * P));
              const ie = Math.acos($ / (P + Q)) - Math.acos(De.vec3.dot(D, K));
              $ *= Math.cos(ie);
            }
            return 1.01 * $;
          }(e, this.pixelsPerMeter(e.center.lat, e.worldSize)), o = mr(e.zoom);
          if (o > 0) {
            const u = lx(e, fr(1, e.center.lat) * e.worldSize), l = e.worldSize / (2 * Math.PI), f = Math.max(e.width, e.height) / e.worldSize * Math.PI;
            return ei(n, u + l * (1 - Math.cos(f)), Math.pow(o, 10));
          }
          return n;
        }
        upVector(e, n, o) {
          return Ri(n, o, e, 1);
        }
        upVectorScale(e) {
          return { metersToTile: ji(Gn(ts(e))) };
        }
      }
      function px(r) {
        const e = r.parallels, n = !!e && Math.abs(e[0] + e[1]) < 0.01;
        switch (r.name) {
          case "mercator":
            return new hx(r);
          case "equirectangular":
            return new ZT(r);
          case "naturalEarth":
            return new qT(r);
          case "equalEarth":
            return new GT(r);
          case "winkelTripel":
            return new WT(r);
          case "albers":
            return n ? new fx(r) : new jT(r);
          case "lambertConformalConic":
            return n ? new fx(r) : new HT(r);
          case "globe":
            return new $T(r);
        }
        throw new Error(`Invalid projection name: ${r.name}`);
      }
      const XT = Iu.VectorTileFeature.types, YT = [{ name: "a_fade_opacity", components: 1, type: "Uint8", offset: 0 }];
      function Up(r, e, n, o, u, l, f, v, S, D, x, P, I) {
        const M = v ? Math.min(vc, Math.round(v[0])) : 0, C = v ? Math.min(vc, Math.round(v[1])) : 0;
        r.emplaceBack(e, n, Math.round(32 * o), Math.round(32 * u), l, f, (M << 1) + (S ? 1 : 0), C, 16 * D, 16 * x, 256 * P, 256 * I);
      }
      function jp(r, e, n) {
        r.emplaceBack(e, n);
      }
      function Gp(r, e, n, o, u, l, f) {
        r.emplaceBack(e, n, o, u, l, f);
      }
      function Zp(r, e, n, o, u) {
        r.emplaceBack(e, n, o, u), r.emplaceBack(e, n, o, u), r.emplaceBack(e, n, o, u), r.emplaceBack(e, n, o, u);
      }
      function KT(r) {
        for (const e of r.sections)
          if (Qf(e.text))
            return !0;
        return !1;
      }
      class Z_ {
        constructor(e) {
          this.layoutVertexArray = new Td(), this.indexArray = new qs(), this.programConfigurations = e, this.segments = new Wn(), this.dynamicLayoutVertexArray = new Xa(), this.opacityVertexArray = new Sd(), this.placedSymbolArray = new cp(), this.iconTransitioningVertexArray = new Ka(), this.globeExtVertexArray = new Md(), this.zOffsetVertexArray = new uc();
        }
        isEmpty() {
          return this.layoutVertexArray.length === 0 && this.indexArray.length === 0 && this.dynamicLayoutVertexArray.length === 0 && this.opacityVertexArray.length === 0 && this.iconTransitioningVertexArray.length === 0;
        }
        upload(e, n, o, u, l) {
          this.isEmpty() || (o && (this.layoutVertexBuffer = e.createVertexBuffer(this.layoutVertexArray, pT.members), this.indexBuffer = e.createIndexBuffer(this.indexArray, n), this.dynamicLayoutVertexBuffer = e.createVertexBuffer(this.dynamicLayoutVertexArray, _T.members, !0), this.opacityVertexBuffer = e.createVertexBuffer(this.opacityVertexArray, YT, !0), this.iconTransitioningVertexArray.length > 0 && (this.iconTransitioningVertexBuffer = e.createVertexBuffer(this.iconTransitioningVertexArray, yT.members, !0)), this.globeExtVertexArray.length > 0 && (this.globeExtVertexBuffer = e.createVertexBuffer(this.globeExtVertexArray, mT.members, !0)), !this.zOffsetVertexBuffer && (this.zOffsetVertexArray.length > 0 || l) && (this.zOffsetVertexBuffer = e.createVertexBuffer(this.zOffsetVertexArray, gT.members, !0)), this.opacityVertexBuffer.itemSize = 1), (o || u) && this.programConfigurations.upload(e));
        }
        destroy() {
          this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.programConfigurations.destroy(), this.segments.destroy(), this.dynamicLayoutVertexBuffer.destroy(), this.opacityVertexBuffer.destroy(), this.iconTransitioningVertexBuffer && this.iconTransitioningVertexBuffer.destroy(), this.globeExtVertexBuffer && this.globeExtVertexBuffer.destroy(), this.zOffsetVertexBuffer && this.zOffsetVertexBuffer.destroy());
        }
      }
      Ft(Z_, "SymbolBuffers");
      class H_ {
        constructor(e, n, o) {
          this.layoutVertexArray = new e(), this.layoutAttributes = n, this.indexArray = new o(), this.segments = new Wn(), this.collisionVertexArray = new Pd(), this.collisionVertexArrayExt = new Xa();
        }
        upload(e) {
          this.layoutVertexBuffer = e.createVertexBuffer(this.layoutVertexArray, this.layoutAttributes), this.indexBuffer = e.createIndexBuffer(this.indexArray), this.collisionVertexBuffer = e.createVertexBuffer(this.collisionVertexArray, xT.members, !0), this.collisionVertexBufferExt = e.createVertexBuffer(this.collisionVertexArrayExt, vT.members, !0);
        }
        destroy() {
          this.layoutVertexBuffer && (this.layoutVertexBuffer.destroy(), this.indexBuffer.destroy(), this.segments.destroy(), this.collisionVertexBuffer.destroy(), this.collisionVertexBufferExt.destroy());
        }
      }
      Ft(H_, "CollisionBuffers");
      class Hp {
        constructor(e) {
          this.collisionBoxArray = e.collisionBoxArray, this.zoom = e.zoom, this.lut = e.lut, this.overscaling = e.overscaling, this.layers = e.layers, this.layerIds = this.layers.map((f) => f.fqid), this.index = e.index, this.pixelRatio = e.pixelRatio, this.sourceLayerIndex = e.sourceLayerIndex, this.hasPattern = !1, this.hasRTLText = !1, this.fullyClipped = !1, this.hasAnyIconTextFit = !1, this.sortKeyRanges = [], this.collisionCircleArray = [], this.placementInvProjMatrix = De.mat4.identity([]), this.placementViewportMatrix = De.mat4.identity([]);
          const n = this.layers[0]._unevaluatedLayout._values;
          this.textSizeData = D_(this.zoom, n["text-size"]), this.iconSizeData = D_(this.zoom, n["icon-size"]);
          const o = this.layers[0].layout, u = o.get("symbol-sort-key"), l = o.get("symbol-z-order");
          this.canOverlap = o.get("text-allow-overlap") || o.get("icon-allow-overlap") || o.get("text-ignore-placement") || o.get("icon-ignore-placement"), this.sortFeaturesByKey = l !== "viewport-y" && u.constantOr(1) !== void 0, this.sortFeaturesByY = (l === "viewport-y" || l === "auto" && !this.sortFeaturesByKey) && this.canOverlap, this.writingModes = o.get("text-writing-mode").map((f) => Ro[f]), this.stateDependentLayerIds = this.layers.filter((f) => f.isStateDependent()).map((f) => f.id), this.sourceID = e.sourceID, this.projection = e.projection, this.hasAnyZOffset = !1, this.zOffsetSortDirty = !1, this.zOffsetBuffersNeedUpload = o.get("symbol-z-elevate"), this.activeReplacements = [], this.replacementUpdateTime = 0;
        }
        createArrays() {
          this.text = new Z_(new Qa(this.layers, { zoom: this.zoom, lut: this.lut }, (e) => e.startsWith("text") || e.startsWith("symbol"))), this.icon = new Z_(new Qa(this.layers, { zoom: this.zoom, lut: this.lut }, (e) => e.startsWith("icon") || e.startsWith("symbol"))), this.glyphOffsetArray = new hh(), this.lineVertexArray = new uh(), this.symbolInstances = new up();
        }
        calculateGlyphDependencies(e, n, o, u, l) {
          for (const f of e) {
            const v = f.codePointAt(0);
            if (v === void 0)
              break;
            if (n[v] = !0, u && l && v <= 65535) {
              const S = $d[f];
              S && (n[S.charCodeAt(0)] = !0);
            }
          }
        }
        updateFootprints(e, n) {
        }
        updateReplacement(e, n) {
          if (n.updateTime === this.replacementUpdateTime)
            return !1;
          this.replacementUpdateTime = n.updateTime;
          const o = n.getReplacementRegionsForTile(e.toUnwrapped(), !0);
          return !E_(this.activeReplacements, o) && (this.activeReplacements = o, !0);
        }
        populate(e, n, o, u) {
          const l = this.layers[0], f = l.layout, v = this.projection.name === "globe", S = f.get("text-font"), D = f.get("text-field"), x = f.get("icon-image"), [P, I] = f.get("icon-size-scale-range"), M = si(n.scaleFactor || 1, P, I), C = (D.value.kind !== "constant" || D.value.value instanceof Dn && !D.value.value.isEmpty() || D.value.value.toString().length > 0) && (S.value.kind !== "constant" || S.value.value.length > 0), k = x.value.kind !== "constant" || !!x.value.value || Object.keys(x.parameters).length > 0, V = f.get("symbol-sort-key");
          if (this.features = [], !C && !k)
            return;
          const U = n.iconDependencies, q = n.glyphDependencies, $ = n.availableImages, H = new Tn(this.zoom);
          for (const { feature: K, id: Q, index: ie, sourceLayerIndex: fe } of e) {
            const de = l._featureFilter.needGeometry, ue = Z(K, de);
            if (!l._featureFilter.filter(H, ue, o))
              continue;
            if (de || (ue.geometry = G(K, o, u)), v && K.type !== 1 && o.z <= 5) {
              const Ie = ue.geometry, Re = 0.98078528056, Ve = (Ue, Fe) => {
                const et = Ri(Ue.x, Ue.y, o, 1), dt = Ri(Fe.x, Fe.y, o, 1);
                return De.vec3.dot(et, dt) < Re;
              };
              for (let Ue = 0; Ue < Ie.length; Ue++)
                Ie[Ue] = z(Ie[Ue], Ve);
            }
            let Se, me;
            if (C) {
              const Ie = l.getValueAndResolveTokens("text-field", ue, o, $), Re = Dn.factory(Ie);
              KT(Re) && (this.hasRTLText = !0), (!this.hasRTLText || au() === "unavailable" || this.hasRTLText && co.isParsed()) && (Se = TT(Re, l, ue));
            }
            if (k) {
              const Ie = l.getValueAndResolveTokens("icon-image", ue, o, $);
              me = Ie instanceof ss ? Ie : ss.build(Ie);
            }
            if (!Se && !me)
              continue;
            const Ee = this.sortFeaturesByKey ? V.evaluate(ue, {}, o) : void 0, ze = { id: Q, text: Se, icon: me, index: ie, sourceLayerIndex: fe, geometry: ue.geometry, properties: K.properties, type: XT[K.type], sortKey: Ee };
            if (this.features.push(ze), me) {
              const Ie = Lp(this.iconSizeData, this.layers[0]._unevaluatedLayout._values["icon-size"], o, this.zoom, ze) * M * this.pixelRatio, Re = me.getPrimary().scaleSelf(Ie);
              if (U[Re.id] = U[Re.id] || [], U[Re.id].push(Re), me.nameSecondary) {
                const Ve = me.getSecondary().scaleSelf(Ie);
                U[Ve.id] = U[Ve.id] || [], U[Ve.id].push(Ve);
              }
            }
            if (Se) {
              const Ie = S.evaluate(ue, {}, o).join(","), Re = f.get("text-rotation-alignment") === "map" && f.get("symbol-placement") !== "point";
              this.allowVerticalPlacement = this.writingModes && this.writingModes.indexOf(Ro.vertical) >= 0;
              for (const Ve of Se.sections)
                if (Ve.image) {
                  const Ue = Ve.image.getPrimary().scaleSelf(this.pixelRatio);
                  U[Ue.id] = U[Ue.id] || [], U[Ue.id].push(Ue);
                } else {
                  const Ue = md(Se.toString()), Fe = Ve.fontStack || Ie, et = q[Fe] = q[Fe] || {};
                  this.calculateGlyphDependencies(Ve.text, et, Re, this.allowVerticalPlacement, Ue);
                }
            }
          }
          f.get("symbol-placement") === "line" && (this.features = function(K) {
            const Q = {}, ie = {}, fe = [];
            let de = 0;
            function ue(ze) {
              fe.push(K[ze]), de++;
            }
            function Se(ze, Ie, Re) {
              const Ve = ie[ze];
              return delete ie[ze], ie[Ie] = Ve, fe[Ve].geometry[0].pop(), fe[Ve].geometry[0] = fe[Ve].geometry[0].concat(Re[0]), Ve;
            }
            function me(ze, Ie, Re) {
              const Ve = Q[Ie];
              return delete Q[Ie], Q[ze] = Ve, fe[Ve].geometry[0].shift(), fe[Ve].geometry[0] = Re[0].concat(fe[Ve].geometry[0]), Ve;
            }
            function Ee(ze, Ie, Re) {
              const Ve = Re ? Ie[0][Ie[0].length - 1] : Ie[0][0];
              return `${ze}:${Ve.x}:${Ve.y}`;
            }
            for (let ze = 0; ze < K.length; ze++) {
              const Ie = K[ze], Re = Ie.geometry, Ve = Ie.text ? Ie.text.toString() : null;
              if (!Ve) {
                ue(ze);
                continue;
              }
              const Ue = Ee(Ve, Re), Fe = Ee(Ve, Re, !0);
              if (Ue in ie && Fe in Q && ie[Ue] !== Q[Fe]) {
                const et = me(Ue, Fe, Re), dt = Se(Ue, Fe, fe[et].geometry);
                delete Q[Ue], delete ie[Fe], ie[Ee(Ve, fe[dt].geometry, !0)] = dt, fe[et].geometry = null;
              } else
                Ue in ie ? Se(Ue, Fe, Re) : Fe in Q ? me(Ue, Fe, Re) : (ue(ze), Q[Ue] = de - 1, ie[Fe] = de - 1);
            }
            return fe.filter((ze) => ze.geometry);
          }(this.features)), this.sortFeaturesByKey && this.features.sort((K, Q) => K.sortKey - Q.sortKey);
        }
        update(e, n, o, u, l, f, v) {
          this.text.programConfigurations.updatePaintArrays(e, n, l, o, u, f, v), this.icon.programConfigurations.updatePaintArrays(e, n, l, o, u, f, v);
        }
        updateZOffset() {
          const e = (l, f, v) => {
            o += f, o > l.length && l.resize(o);
            for (let S = -f; S < 0; S++)
              l.emplace(S + o, v);
          }, n = (l, f, v) => {
            u += f, u > l.length && l.resize(u);
            for (let S = -f; S < 0; S++)
              l.emplace(S + u, v);
          };
          if (!this.zOffsetBuffersNeedUpload)
            return;
          this.zOffsetBuffersNeedUpload = !1;
          let o = 0, u = 0;
          for (let l = 0; l < this.symbolInstances.length; l++) {
            const f = this.symbolInstances.get(l), { numHorizontalGlyphVertices: v, numVerticalGlyphVertices: S, numIconVertices: D } = f, x = f.zOffset, P = D > 0;
            if ((v > 0 || S > 0) && (e(this.text.zOffsetVertexArray, v, x), e(this.text.zOffsetVertexArray, S, x)), P) {
              const { placedIconSymbolIndex: I, verticalPlacedIconSymbolIndex: M } = f;
              I >= 0 && n(this.icon.zOffsetVertexArray, D, x), M >= 0 && n(this.icon.zOffsetVertexArray, f.numVerticalIconVertices, x);
            }
          }
          this.text.zOffsetVertexBuffer && this.text.zOffsetVertexBuffer.updateData(this.text.zOffsetVertexArray), this.icon.zOffsetVertexBuffer && this.icon.zOffsetVertexBuffer.updateData(this.icon.zOffsetVertexArray);
        }
        isEmpty() {
          return this.symbolInstances.length === 0 && !this.hasRTLText;
        }
        uploadPending() {
          return !this.uploaded || this.text.programConfigurations.needsUpload || this.icon.programConfigurations.needsUpload;
        }
        upload(e) {
          !this.uploaded && this.hasDebugData() && (this.textCollisionBox.upload(e), this.iconCollisionBox.upload(e)), this.text.upload(e, this.sortFeaturesByY, !this.uploaded, this.text.programConfigurations.needsUpload, this.zOffsetBuffersNeedUpload), this.icon.upload(e, this.sortFeaturesByY, !this.uploaded, this.icon.programConfigurations.needsUpload, this.zOffsetBuffersNeedUpload), this.uploaded = !0;
        }
        destroyDebugData() {
          this.textCollisionBox.destroy(), this.iconCollisionBox.destroy();
        }
        getProjection() {
          return this.projectionInstance || (this.projectionInstance = px(this.projection)), this.projectionInstance;
        }
        destroy() {
          this.text.destroy(), this.icon.destroy(), this.hasDebugData() && this.destroyDebugData();
        }
        addToLineVertexArray(e, n) {
          const o = this.lineVertexArray.length;
          if (e.segment !== void 0)
            for (const { x: u, y: l } of n)
              this.lineVertexArray.emplaceBack(u, l);
          return { lineStartIndex: o, lineLength: this.lineVertexArray.length - o };
        }
        addSymbols(e, n, o, u, l, f, v, S, D, x, P, I, M, C, k, V) {
          const U = e.indexArray, q = e.layoutVertexArray, $ = e.globeExtVertexArray, H = e.segments.prepareSegment(4 * n.length, q, U, this.canOverlap ? f.sortKey : void 0), K = this.glyphOffsetArray.length, Q = H.vertexLength, ie = this.allowVerticalPlacement && v === Ro.vertical ? Math.PI / 2 : 0, fe = f.text && f.text.sections;
          for (let ue = 0; ue < n.length; ue++) {
            const { tl: Se, tr: me, bl: Ee, br: ze, texPrimary: Ie, texSecondary: Re, pixelOffsetTL: Ve, pixelOffsetBR: Ue, minFontScaleX: Fe, minFontScaleY: et, glyphOffset: dt, isSDF: tt, sectionIndex: Mt } = n[ue], wt = H.vertexLength, At = dt[1];
            if (Up(q, D.x, D.y, Se.x, At + Se.y, Ie.x, Ie.y, o, tt, Ve.x, Ve.y, Fe, et), Up(q, D.x, D.y, me.x, At + me.y, Ie.x + Ie.w, Ie.y, o, tt, Ue.x, Ve.y, Fe, et), Up(q, D.x, D.y, Ee.x, At + Ee.y, Ie.x, Ie.y + Ie.h, o, tt, Ve.x, Ue.y, Fe, et), Up(q, D.x, D.y, ze.x, At + ze.y, Ie.x + Ie.w, Ie.y + Ie.h, o, tt, Ue.x, Ue.y, Fe, et), S) {
              const { x: rt, y: Ut, z: St } = S.anchor, [Nt, Qt, pi] = S.up;
              Gp($, rt, Ut, St, Nt, Qt, pi), Gp($, rt, Ut, St, Nt, Qt, pi), Gp($, rt, Ut, St, Nt, Qt, pi), Gp($, rt, Ut, St, Nt, Qt, pi), Zp(e.dynamicLayoutVertexArray, rt, Ut, St, ie);
            } else
              Zp(e.dynamicLayoutVertexArray, D.x, D.y, D.z, ie);
            if (V) {
              const rt = Re || Ie;
              jp(e.iconTransitioningVertexArray, rt.x, rt.y), jp(e.iconTransitioningVertexArray, rt.x + rt.w, rt.y), jp(e.iconTransitioningVertexArray, rt.x, rt.y + rt.h), jp(e.iconTransitioningVertexArray, rt.x + rt.w, rt.y + rt.h);
            }
            U.emplaceBack(wt, wt + 1, wt + 2), U.emplaceBack(wt + 1, wt + 2, wt + 3), H.vertexLength += 4, H.primitiveLength += 2, this.glyphOffsetArray.emplaceBack(dt[0]), ue !== n.length - 1 && Mt === n[ue + 1].sectionIndex || e.programConfigurations.populatePaintArrays(q.length, f, f.index, {}, M, C, k, fe && fe[Mt]);
          }
          const de = S ? S.anchor : D;
          e.placedSymbolArray.emplaceBack(de.x, de.y, de.z, D.x, D.y, K, this.glyphOffsetArray.length - K, Q, x, P, D.segment, o ? o[0] : 0, o ? o[1] : 0, u[0], u[1], v, 0, !1, 0, I, 0);
        }
        _commitLayoutVertex(e, n, o, u, l, f, v) {
          e.emplaceBack(n, o, u, l, f, Math.round(v.x), Math.round(v.y));
        }
        _addCollisionDebugVertices(e, n, o, u, l, f, v) {
          const S = o.segments.prepareSegment(4, o.layoutVertexArray, o.indexArray), D = S.vertexLength, x = v.tileAnchorX, P = v.tileAnchorY;
          for (let M = 0; M < 4; M++)
            o.collisionVertexArray.emplaceBack(0, 0, 0, 0, 0, 0);
          this._commitDebugCollisionVertexUpdate(o.collisionVertexArrayExt, n, e.padding, v.zOffset), this._commitLayoutVertex(o.layoutVertexArray, u, l, f, x, P, new Et(e.x1, e.y1)), this._commitLayoutVertex(o.layoutVertexArray, u, l, f, x, P, new Et(e.x2, e.y1)), this._commitLayoutVertex(o.layoutVertexArray, u, l, f, x, P, new Et(e.x2, e.y2)), this._commitLayoutVertex(o.layoutVertexArray, u, l, f, x, P, new Et(e.x1, e.y2)), S.vertexLength += 4;
          const I = o.indexArray;
          I.emplaceBack(D, D + 1), I.emplaceBack(D + 1, D + 2), I.emplaceBack(D + 2, D + 3), I.emplaceBack(D + 3, D), S.primitiveLength += 4;
        }
        _addTextDebugCollisionBoxes(e, n, o, u, l, f) {
          for (let v = u; v < l; v++) {
            const S = o.get(v), D = this.getSymbolInstanceTextSize(e, f, n, v);
            this._addCollisionDebugVertices(S, D, this.textCollisionBox, S.projectedAnchorX, S.projectedAnchorY, S.projectedAnchorZ, f);
          }
        }
        _addIconDebugCollisionBoxes(e, n, o, u, l, f) {
          for (let v = u; v < l; v++) {
            const S = o.get(v), D = this.getSymbolInstanceIconSize(e, n, f.placedIconSymbolIndex);
            this._addCollisionDebugVertices(S, D, this.iconCollisionBox, S.projectedAnchorX, S.projectedAnchorY, S.projectedAnchorZ, f);
          }
        }
        generateCollisionDebugBuffers(e, n, o) {
          this.hasDebugData() && this.destroyDebugData(), this.textCollisionBox = new H_(mu, R0.members, Ka), this.iconCollisionBox = new H_(mu, R0.members, Ka);
          const u = Lu(this.iconSizeData, e), l = Lu(this.textSizeData, e, o);
          for (let f = 0; f < this.symbolInstances.length; f++) {
            const v = this.symbolInstances.get(f);
            this._addTextDebugCollisionBoxes(l, e, n, v.textBoxStartIndex, v.textBoxEndIndex, v), this._addTextDebugCollisionBoxes(l, e, n, v.verticalTextBoxStartIndex, v.verticalTextBoxEndIndex, v), this._addIconDebugCollisionBoxes(u, e, n, v.iconBoxStartIndex, v.iconBoxEndIndex, v), this._addIconDebugCollisionBoxes(u, e, n, v.verticalIconBoxStartIndex, v.verticalIconBoxEndIndex, v);
          }
        }
        getSymbolInstanceTextSize(e, n, o, u) {
          const l = this.text.placedSymbolArray.get(n.rightJustifiedTextSymbolIndex >= 0 ? n.rightJustifiedTextSymbolIndex : n.centerJustifiedTextSymbolIndex >= 0 ? n.centerJustifiedTextSymbolIndex : n.leftJustifiedTextSymbolIndex >= 0 ? n.leftJustifiedTextSymbolIndex : n.verticalPlacedTextSymbolIndex >= 0 ? n.verticalPlacedTextSymbolIndex : u), f = zp(this.textSizeData, e, l) / tr;
          return this.tilePixelRatio * f;
        }
        getSymbolInstanceIconSize(e, n, o) {
          const u = this.icon.placedSymbolArray.get(o), l = zp(this.iconSizeData, e, u);
          return this.tilePixelRatio * l;
        }
        _commitDebugCollisionVertexUpdate(e, n, o, u) {
          e.emplaceBack(n, -o, -o, u), e.emplaceBack(n, o, -o, u), e.emplaceBack(n, o, o, u), e.emplaceBack(n, -o, o, u);
        }
        _updateTextDebugCollisionBoxes(e, n, o, u, l, f, v) {
          for (let S = u; S < l; S++) {
            const D = o.get(S), x = this.getSymbolInstanceTextSize(e, f, n, S);
            this._commitDebugCollisionVertexUpdate(this.textCollisionBox.collisionVertexArrayExt, x, D.padding, f.zOffset);
          }
        }
        _updateIconDebugCollisionBoxes(e, n, o, u, l, f, v) {
          for (let S = u; S < l; S++) {
            const D = o.get(S), x = this.getSymbolInstanceIconSize(e, n, f.placedIconSymbolIndex);
            this._commitDebugCollisionVertexUpdate(this.iconCollisionBox.collisionVertexArrayExt, x, D.padding, f.zOffset);
          }
        }
        updateCollisionDebugBuffers(e, n, o, u) {
          if (!this.hasDebugData())
            return;
          this.hasTextCollisionBoxData() && this.textCollisionBox.collisionVertexArrayExt.clear(), this.hasIconCollisionBoxData() && this.iconCollisionBox.collisionVertexArrayExt.clear();
          const l = Lu(this.iconSizeData, e, u), f = Lu(this.textSizeData, e, o);
          for (let v = 0; v < this.symbolInstances.length; v++) {
            const S = this.symbolInstances.get(v);
            this._updateTextDebugCollisionBoxes(f, e, n, S.textBoxStartIndex, S.textBoxEndIndex, S, o), this._updateTextDebugCollisionBoxes(f, e, n, S.verticalTextBoxStartIndex, S.verticalTextBoxEndIndex, S, o), this._updateIconDebugCollisionBoxes(l, e, n, S.iconBoxStartIndex, S.iconBoxEndIndex, S, u), this._updateIconDebugCollisionBoxes(l, e, n, S.verticalIconBoxStartIndex, S.verticalIconBoxEndIndex, S, u);
          }
          this.hasTextCollisionBoxData() && this.textCollisionBox.collisionVertexBufferExt && this.textCollisionBox.collisionVertexBufferExt.updateData(this.textCollisionBox.collisionVertexArrayExt), this.hasIconCollisionBoxData() && this.iconCollisionBox.collisionVertexBufferExt && this.iconCollisionBox.collisionVertexBufferExt.updateData(this.iconCollisionBox.collisionVertexArrayExt);
        }
        _deserializeCollisionBoxesForSymbol(e, n, o, u, l, f, v, S, D) {
          const x = {};
          if (n < o) {
            const { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H, featureIndex: K } = e.get(n);
            x.textBox = { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H }, x.textFeatureIndex = K;
          }
          if (u < l) {
            const { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H, featureIndex: K } = e.get(u);
            x.verticalTextBox = { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H }, x.verticalTextFeatureIndex = K;
          }
          if (f < v) {
            const { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H, featureIndex: K } = e.get(f);
            x.iconBox = { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H }, x.iconFeatureIndex = K;
          }
          if (S < D) {
            const { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H, featureIndex: K } = e.get(S);
            x.verticalIconBox = { x1: P, y1: I, x2: M, y2: C, padding: k, projectedAnchorX: V, projectedAnchorY: U, projectedAnchorZ: q, tileAnchorX: $, tileAnchorY: H }, x.verticalIconFeatureIndex = K;
          }
          return x;
        }
        deserializeCollisionBoxes(e) {
          this.collisionArrays = [];
          for (let n = 0; n < this.symbolInstances.length; n++) {
            const o = this.symbolInstances.get(n);
            this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(e, o.textBoxStartIndex, o.textBoxEndIndex, o.verticalTextBoxStartIndex, o.verticalTextBoxEndIndex, o.iconBoxStartIndex, o.iconBoxEndIndex, o.verticalIconBoxStartIndex, o.verticalIconBoxEndIndex));
          }
        }
        hasTextData() {
          return this.text.segments.get().length > 0;
        }
        hasIconData() {
          return this.icon.segments.get().length > 0;
        }
        hasDebugData() {
          return this.textCollisionBox && this.iconCollisionBox;
        }
        hasTextCollisionBoxData() {
          return this.hasDebugData() && this.textCollisionBox.segments.get().length > 0;
        }
        hasIconCollisionBoxData() {
          return this.hasDebugData() && this.iconCollisionBox.segments.get().length > 0;
        }
        hasIconTextFit() {
          return this.hasAnyIconTextFit;
        }
        addIndicesForPlacedSymbol(e, n) {
          const o = e.placedSymbolArray.get(n), u = o.vertexStartIndex + 4 * o.numGlyphs;
          for (let l = o.vertexStartIndex; l < u; l += 4)
            e.indexArray.emplaceBack(l, l + 1, l + 2), e.indexArray.emplaceBack(l + 1, l + 2, l + 3);
        }
        getSortedSymbolIndexes(e) {
          if (this.sortedAngle === e && this.symbolInstanceIndexes !== void 0)
            return this.symbolInstanceIndexes;
          const n = Math.sin(e), o = Math.cos(e), u = [], l = [], f = [];
          for (let v = 0; v < this.symbolInstances.length; ++v) {
            f.push(v);
            const S = this.symbolInstances.get(v);
            u.push(0 | Math.round(n * S.tileAnchorX + o * S.tileAnchorY)), l.push(S.featureIndex);
          }
          return f.sort((v, S) => u[v] - u[S] || l[S] - l[v]), f;
        }
        getSortedIndexesByZOffset() {
          if (!this.zOffsetSortDirty)
            return this.symbolInstanceIndexesSortedZOffset;
          if (!this.symbolInstanceIndexesSortedZOffset) {
            this.symbolInstanceIndexesSortedZOffset = [];
            for (let e = 0; e < this.symbolInstances.length; ++e)
              this.symbolInstanceIndexesSortedZOffset.push(e);
          }
          return this.zOffsetSortDirty = !1, this.symbolInstanceIndexesSortedZOffset.sort((e, n) => this.symbolInstances.get(n).zOffset - this.symbolInstances.get(e).zOffset);
        }
        addToSortKeyRanges(e, n) {
          const o = this.sortKeyRanges[this.sortKeyRanges.length - 1];
          o && o.sortKey === n ? o.symbolInstanceEnd = e + 1 : this.sortKeyRanges.push({ sortKey: n, symbolInstanceStart: e, symbolInstanceEnd: e + 1 });
        }
        sortFeatures(e) {
          if (this.sortFeaturesByY && this.sortedAngle !== e && !(this.text.segments.get().length > 1 || this.icon.segments.get().length > 1)) {
            this.symbolInstanceIndexes = this.getSortedSymbolIndexes(e), this.sortedAngle = e, this.text.indexArray.clear(), this.icon.indexArray.clear(), this.featureSortOrder = [];
            for (const n of this.symbolInstanceIndexes) {
              const o = this.symbolInstances.get(n);
              this.featureSortOrder.push(o.featureIndex);
              const { rightJustifiedTextSymbolIndex: u, centerJustifiedTextSymbolIndex: l, leftJustifiedTextSymbolIndex: f, verticalPlacedTextSymbolIndex: v, placedIconSymbolIndex: S, verticalPlacedIconSymbolIndex: D } = o;
              u >= 0 && this.addIndicesForPlacedSymbol(this.text, u), l >= 0 && l !== u && this.addIndicesForPlacedSymbol(this.text, l), f >= 0 && f !== l && f !== u && this.addIndicesForPlacedSymbol(this.text, f), v >= 0 && this.addIndicesForPlacedSymbol(this.text, v), S >= 0 && this.addIndicesForPlacedSymbol(this.icon, S), D >= 0 && this.addIndicesForPlacedSymbol(this.icon, D);
            }
            this.text.indexBuffer && this.text.indexBuffer.updateData(this.text.indexArray), this.icon.indexBuffer && this.icon.indexBuffer.updateData(this.icon.indexArray);
          }
        }
      }
      let mx, _x, q_;
      Ft(Hp, "SymbolBucket", { omit: ["layers", "collisionBoxArray", "features", "compareText"] }), Hp.addDynamicAttributes = Zp;
      class gx {
        constructor(e) {
          this.type = e.property.overrides ? e.property.overrides.runtimeType : ha, this.defaultValue = e;
        }
        evaluate(e) {
          if (e.formattedSection) {
            const n = this.defaultValue.property.overrides;
            if (n && n.hasOverride(e.formattedSection))
              return n.getOverride(e.formattedSection);
          }
          return e.feature && e.featureState ? this.defaultValue.evaluate(e.feature, e.featureState) : this.defaultValue.property.specification.default;
        }
        eachChild(e) {
          this.defaultValue.isConstant() || e(this.defaultValue.value._styleExpression.expression);
        }
        outputDefined() {
          return !1;
        }
        serialize() {
          return null;
        }
      }
      Ft(gx, "FormatSectionOverride", { omit: ["defaultValue"] });
      const W_ = () => q_ || (q_ = { layout: mx || (mx = new Bn({ "symbol-placement": new yt($e.layout_symbol["symbol-placement"]), "symbol-spacing": new yt($e.layout_symbol["symbol-spacing"]), "symbol-avoid-edges": new yt($e.layout_symbol["symbol-avoid-edges"]), "symbol-sort-key": new Dt($e.layout_symbol["symbol-sort-key"]), "symbol-z-order": new yt($e.layout_symbol["symbol-z-order"]), "symbol-z-elevate": new yt($e.layout_symbol["symbol-z-elevate"]), "symbol-elevation-reference": new yt($e.layout_symbol["symbol-elevation-reference"]), "icon-allow-overlap": new yt($e.layout_symbol["icon-allow-overlap"]), "icon-ignore-placement": new yt($e.layout_symbol["icon-ignore-placement"]), "icon-optional": new yt($e.layout_symbol["icon-optional"]), "icon-rotation-alignment": new yt($e.layout_symbol["icon-rotation-alignment"]), "icon-size": new Dt($e.layout_symbol["icon-size"]), "icon-size-scale-range": new yt($e.layout_symbol["icon-size-scale-range"]), "icon-text-fit": new Dt($e.layout_symbol["icon-text-fit"]), "icon-text-fit-padding": new Dt($e.layout_symbol["icon-text-fit-padding"]), "icon-image": new Dt($e.layout_symbol["icon-image"]), "icon-rotate": new Dt($e.layout_symbol["icon-rotate"]), "icon-padding": new yt($e.layout_symbol["icon-padding"]), "icon-keep-upright": new yt($e.layout_symbol["icon-keep-upright"]), "icon-offset": new Dt($e.layout_symbol["icon-offset"]), "icon-anchor": new Dt($e.layout_symbol["icon-anchor"]), "icon-pitch-alignment": new yt($e.layout_symbol["icon-pitch-alignment"]), "text-pitch-alignment": new yt($e.layout_symbol["text-pitch-alignment"]), "text-rotation-alignment": new yt($e.layout_symbol["text-rotation-alignment"]), "text-field": new Dt($e.layout_symbol["text-field"]), "text-font": new Dt($e.layout_symbol["text-font"]), "text-size": new Dt($e.layout_symbol["text-size"]), "text-size-scale-range": new yt($e.layout_symbol["text-size-scale-range"]), "text-max-width": new Dt($e.layout_symbol["text-max-width"]), "text-line-height": new Dt($e.layout_symbol["text-line-height"]), "text-letter-spacing": new Dt($e.layout_symbol["text-letter-spacing"]), "text-justify": new Dt($e.layout_symbol["text-justify"]), "text-radial-offset": new Dt($e.layout_symbol["text-radial-offset"]), "text-variable-anchor": new yt($e.layout_symbol["text-variable-anchor"]), "text-anchor": new Dt($e.layout_symbol["text-anchor"]), "text-max-angle": new yt($e.layout_symbol["text-max-angle"]), "text-writing-mode": new yt($e.layout_symbol["text-writing-mode"]), "text-rotate": new Dt($e.layout_symbol["text-rotate"]), "text-padding": new yt($e.layout_symbol["text-padding"]), "text-keep-upright": new yt($e.layout_symbol["text-keep-upright"]), "text-transform": new Dt($e.layout_symbol["text-transform"]), "text-offset": new Dt($e.layout_symbol["text-offset"]), "text-allow-overlap": new yt($e.layout_symbol["text-allow-overlap"]), "text-ignore-placement": new yt($e.layout_symbol["text-ignore-placement"]), "text-optional": new yt($e.layout_symbol["text-optional"]), visibility: new yt($e.layout_symbol.visibility) })), paint: _x || (_x = new Bn({ "icon-opacity": new Dt($e.paint_symbol["icon-opacity"]), "icon-occlusion-opacity": new Dt($e.paint_symbol["icon-occlusion-opacity"]), "icon-emissive-strength": new Dt($e.paint_symbol["icon-emissive-strength"]), "text-emissive-strength": new Dt($e.paint_symbol["text-emissive-strength"]), "icon-color": new Dt($e.paint_symbol["icon-color"]), "icon-halo-color": new Dt($e.paint_symbol["icon-halo-color"]), "icon-halo-width": new Dt($e.paint_symbol["icon-halo-width"]), "icon-halo-blur": new Dt($e.paint_symbol["icon-halo-blur"]), "icon-translate": new yt($e.paint_symbol["icon-translate"]), "icon-translate-anchor": new yt($e.paint_symbol["icon-translate-anchor"]), "icon-image-cross-fade": new Dt($e.paint_symbol["icon-image-cross-fade"]), "text-opacity": new Dt($e.paint_symbol["text-opacity"]), "text-occlusion-opacity": new Dt($e.paint_symbol["text-occlusion-opacity"]), "text-color": new Dt($e.paint_symbol["text-color"], { runtimeType: ms, getOverride: (r) => r.textColor, hasOverride: (r) => !!r.textColor }), "text-halo-color": new Dt($e.paint_symbol["text-halo-color"]), "text-halo-width": new Dt($e.paint_symbol["text-halo-width"]), "text-halo-blur": new Dt($e.paint_symbol["text-halo-blur"]), "text-translate": new yt($e.paint_symbol["text-translate"]), "text-translate-anchor": new yt($e.paint_symbol["text-translate-anchor"]), "icon-color-saturation": new yt($e.paint_symbol["icon-color-saturation"]), "icon-color-contrast": new yt($e.paint_symbol["icon-color-contrast"]), "icon-color-brightness-min": new yt($e.paint_symbol["icon-color-brightness-min"]), "icon-color-brightness-max": new yt($e.paint_symbol["icon-color-brightness-max"]), "symbol-z-offset": new Dt($e.paint_symbol["symbol-z-offset"]), "icon-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "icon-halo-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "text-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "text-halo-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, q_);
      class qp extends wr {
        constructor(e, n, o, u) {
          super(e, W_(), n, o, u), this._colorAdjustmentMatrix = De.mat4.identity([]), this.hasInitialOcclusionOpacityProperties = e.paint !== void 0 && ("icon-occlusion-opacity" in e.paint || "text-occlusion-opacity" in e.paint);
        }
        recalculate(e, n) {
          super.recalculate(e, n), this.layout.get("icon-rotation-alignment") === "auto" && (this.layout._values["icon-rotation-alignment"] = this.layout.get("symbol-placement") !== "point" ? "map" : "viewport"), this.layout.get("text-rotation-alignment") === "auto" && (this.layout._values["text-rotation-alignment"] = this.layout.get("symbol-placement") !== "point" ? "map" : "viewport"), this.layout.get("text-pitch-alignment") === "auto" && (this.layout._values["text-pitch-alignment"] = this.layout.get("text-rotation-alignment")), this.layout.get("icon-pitch-alignment") === "auto" && (this.layout._values["icon-pitch-alignment"] = this.layout.get("icon-rotation-alignment"));
          const o = this.layout.get("text-writing-mode");
          if (o) {
            const u = [];
            for (const l of o)
              u.indexOf(l) < 0 && u.push(l);
            this.layout._values["text-writing-mode"] = u;
          } else
            this.layout._values["text-writing-mode"] = this.layout.get("symbol-placement") === "point" ? ["horizontal"] : ["horizontal", "vertical"];
          this._setPaintOverrides();
        }
        getColorAdjustmentMatrix(e, n, o, u) {
          return this._saturation === e && this._contrast === n && this._brightnessMin === o && this._brightnessMax === u || (this._colorAdjustmentMatrix = function(l, f, v, S) {
            l = le(l), f = re(f);
            const D = De.mat4.create(), x = l / 3, P = 1 - 2 * x, I = [P, x, x, 0, x, P, x, 0, x, x, P, 0, 0, 0, 0, 1], M = 0.5 - 0.5 * f, C = S - v;
            return De.mat4.multiply(D, [C, 0, 0, 0, 0, C, 0, 0, 0, 0, C, 0, v, v, v, 1], [f, 0, 0, 0, 0, f, 0, 0, 0, 0, f, 0, M, M, M, 1]), De.mat4.multiply(D, D, I), D;
          }(e, n, o, u), this._saturation = e, this._contrast = n, this._brightnessMin = o, this._brightnessMax = u), this._colorAdjustmentMatrix;
        }
        getValueAndResolveTokens(e, n, o, u) {
          const l = this.layout.get(e).evaluate(n, {}, o, u), f = this._unevaluatedLayout._values[e];
          return f.isDataDriven() || tu(f.value) || !l ? l : function(v, S) {
            return S.replace(/{([^{}]+)}/g, (D, x) => x in v ? String(v[x]) : "");
          }(n.properties, l);
        }
        createBucket(e) {
          return new Hp(e);
        }
        queryRadius() {
          return 0;
        }
        queryIntersectsFeature() {
          return !1;
        }
        _setPaintOverrides() {
          for (const e of W_().paint.overridableProperties) {
            if (!qp.hasPaintOverride(this.layout, e))
              continue;
            const n = this.paint.get(e), o = new gx(n), u = new cd(o, n.property.specification, this.scope, this.options);
            let l = null;
            l = n.value.kind === "constant" || n.value.kind === "source" ? new hd("source", u) : new sc("composite", u, n.value.zoomStops, n.value._interpolationType), this.paint._values[e] = new lc(n.property, l, n.parameters);
          }
        }
        _handleOverridablePaintPropertyUpdate(e, n, o) {
          return !(!this.layout || n.isDataDriven() || o.isDataDriven()) && qp.hasPaintOverride(this.layout, e);
        }
        static hasPaintOverride(e, n) {
          const o = e.get("text-field"), u = W_().paint.properties[n];
          let l = !1;
          const f = (v) => {
            for (const S of v)
              if (u.overrides && u.overrides.hasOverride(S))
                return void (l = !0);
          };
          if (o.value.kind === "constant" && o.value.value instanceof Dn)
            f(o.value.value.sections);
          else if (o.value.kind === "source") {
            const v = (D) => {
              l || (D instanceof Lr && vn(D.value) === Js ? f(D.value.sections) : D instanceof Es ? f(D.sections) : D.eachChild(v));
            }, S = o.value;
            S._styleExpression && v(S._styleExpression.expression);
          }
          return l;
        }
        getProgramIds() {
          return ["symbol"];
        }
        getDefaultProgramParams(e, n, o) {
          return { config: new Cl(this, { zoom: n, lut: o }), overrideFog: !1 };
        }
      }
      let yx, xx, vx, bx;
      var $_ = qi([{ name: "a_pos", type: "Int16", components: 2 }, { name: "a_texture_pos", type: "Int16", components: 2 }]);
      function X_(r) {
        switch (r) {
          case WebGL2RenderingContext.RGBA8:
            return WebGL2RenderingContext.RGBA;
          case WebGL2RenderingContext.DEPTH_COMPONENT16:
            return WebGL2RenderingContext.DEPTH_COMPONENT;
          case WebGL2RenderingContext.DEPTH24_STENCIL8:
            return WebGL2RenderingContext.DEPTH_STENCIL;
          case WebGL2RenderingContext.R8:
          case WebGL2RenderingContext.R32F:
            return WebGL2RenderingContext.RED;
        }
      }
      function Y_(r) {
        switch (r) {
          case WebGL2RenderingContext.RGBA8:
            return WebGL2RenderingContext.UNSIGNED_BYTE;
          case WebGL2RenderingContext.DEPTH_COMPONENT16:
            return WebGL2RenderingContext.UNSIGNED_SHORT;
          case WebGL2RenderingContext.DEPTH24_STENCIL8:
            return WebGL2RenderingContext.UNSIGNED_INT_24_8;
          case WebGL2RenderingContext.R8:
            return WebGL2RenderingContext.UNSIGNED_BYTE;
          case WebGL2RenderingContext.R32F:
            return WebGL2RenderingContext.FLOAT;
        }
      }
      class K_ {
        constructor(e, n, o, u) {
          this.context = e, this.format = o, this.useMipmap = u && u.useMipmap, this.texture = e.gl.createTexture(), this.update(n, { premultiply: u && u.premultiply });
        }
        update(e, n) {
          const o = e && e instanceof HTMLVideoElement && e.width === 0 ? e.videoWidth : e.width, u = e && e instanceof HTMLVideoElement && e.height === 0 ? e.videoHeight : e.height, { context: l } = this, { gl: f } = l, { x: v, y: S } = n && n.position ? n.position : { x: 0, y: 0 }, D = v + o, x = S + u;
          !this.size || this.size[0] === D && this.size[1] === x || (f.bindTexture(f.TEXTURE_2D, null), f.deleteTexture(this.texture), this.texture = f.createTexture(), this.size = null), f.bindTexture(f.TEXTURE_2D, this.texture), l.pixelStoreUnpackFlipY.set(!1), l.pixelStoreUnpack.set(1), l.pixelStoreUnpackPremultiplyAlpha.set(this.format === f.RGBA8 && (!n || n.premultiply !== !1));
          const P = e instanceof HTMLImageElement || e instanceof HTMLCanvasElement || e instanceof HTMLVideoElement || e instanceof ImageData || ImageBitmap && e instanceof ImageBitmap;
          if (!this.size && D > 0 && x > 0) {
            const I = this.useMipmap ? Math.floor(Math.log2(Math.max(D, x))) + 1 : 1;
            f.texStorage2D(f.TEXTURE_2D, I, this.format, D, x), this.size = [D, x];
          }
          if (this.size)
            if (P)
              f.texSubImage2D(f.TEXTURE_2D, 0, v, S, X_(this.format), Y_(this.format), e);
            else {
              const I = e.data;
              I && f.texSubImage2D(f.TEXTURE_2D, 0, v, S, o, u, X_(this.format), Y_(this.format), I);
            }
          this.useMipmap && f.generateMipmap(f.TEXTURE_2D);
        }
        bind(e, n, o = !1) {
          const { context: u } = this, { gl: l } = u;
          l.bindTexture(l.TEXTURE_2D, this.texture), e !== this.minFilter && (l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MAG_FILTER, e), l.texParameteri(l.TEXTURE_2D, l.TEXTURE_MIN_FILTER, this.useMipmap && !o ? e === l.NEAREST ? l.NEAREST_MIPMAP_NEAREST : l.LINEAR_MIPMAP_LINEAR : e), this.minFilter = e), n !== this.wrapS && (l.texParameteri(l.TEXTURE_2D, l.TEXTURE_WRAP_S, n), l.texParameteri(l.TEXTURE_2D, l.TEXTURE_WRAP_T, n), this.wrapS = n);
        }
        bindExtraParam(e, n, o, u) {
          const { context: l } = this, { gl: f } = l;
          f.bindTexture(f.TEXTURE_2D, this.texture), n !== this.magFilter && (f.texParameteri(f.TEXTURE_2D, f.TEXTURE_MAG_FILTER, n), this.magFilter = n), e !== this.minFilter && (f.texParameteri(f.TEXTURE_2D, f.TEXTURE_MIN_FILTER, this.useMipmap ? e === f.NEAREST ? f.NEAREST_MIPMAP_NEAREST : f.LINEAR_MIPMAP_LINEAR : e), this.minFilter = e), o !== this.wrapS && (f.texParameteri(f.TEXTURE_2D, f.TEXTURE_WRAP_S, o), this.wrapS = o), u !== this.wrapT && (f.texParameteri(f.TEXTURE_2D, f.TEXTURE_WRAP_T, u), this.wrapT = u);
        }
        destroy() {
          const { gl: e } = this.context;
          e.deleteTexture(this.texture), this.texture = null;
        }
      }
      class Wp {
        constructor(e, n) {
          this.context = e, this.texture = n;
        }
        bind(e, n) {
          const { context: o } = this, { gl: u } = o;
          u.bindTexture(u.TEXTURE_2D, this.texture), e !== this.minFilter && (u.texParameteri(u.TEXTURE_2D, u.TEXTURE_MAG_FILTER, e), u.texParameteri(u.TEXTURE_2D, u.TEXTURE_MIN_FILTER, e), this.minFilter = e), n !== this.wrapS && (u.texParameteri(u.TEXTURE_2D, u.TEXTURE_WRAP_S, n), u.texParameteri(u.TEXTURE_2D, u.TEXTURE_WRAP_T, n), this.wrapS = n);
        }
      }
      function $p(r, e, n, o, u, l, f, v) {
        const S = [r, e, 1, n, o, 1, u, l, 1], D = [f, v, 1], x = De.mat3.adjoint([], S), [P, I, M] = De.vec3.transformMat3(D, D, x);
        return De.mat3.multiply(S, S, [P, 0, 0, 0, I, 0, 0, 0, M]);
      }
      function wx(r, e, n, o, u, l, f, v) {
        const S = function(D, x, P, I, M, C, k, V) {
          const U = $p(0, 0, 1, 0, 1, 1, 0, 1), q = $p(D, x, P, I, M, C, k, V), $ = De.mat3.adjoint([], U);
          return De.mat3.multiply(q, q, $);
        }(r, e, n, o, u, l, f, v);
        return [S[2] / S[8] / Tt, S[5] / S[8] / Tt];
      }
      function Xp(r) {
        return [r[0], Math.min(Math.max(r[1], -Un), Un)];
      }
      class Tx extends Zo {
        constructor(e, n, o, u) {
          super(), this.id = e, this.dispatcher = o, this.coordinates = n.coordinates, this.type = "image", this.minzoom = 0, this.maxzoom = 22, this.tileSize = 512, this.tiles = {}, this._loaded = !1, this.onNorthPole = !1, this.onSouthPole = !1, this.setEventedParent(u), this.options = n, this._dirty = !1;
        }
        load(e, n) {
          if (this._loaded = n || !1, this.fire(new Ar("dataloading", { dataType: "source" })), this.url = this.options.url, !this.url)
            return e && (this.coordinates = e), this._loaded = !0, void this._finishLoading();
          this._imageRequest = Hn(this.map._requestManager.transformRequest(this.url, Uo.Image), (o, u) => {
            this._imageRequest = null, this._loaded = !0, o ? this.fire(new Cr(o)) : u && (this.image = u instanceof HTMLImageElement ? Ct.getImageData(u) : u, this._dirty = !0, this.width = this.image.width, this.height = this.image.height, e && (this.coordinates = e), this._finishLoading());
          });
        }
        loaded() {
          return this._loaded;
        }
        updateImage(e) {
          return e.url ? (this._imageRequest && e.url !== this.options.url && (this._imageRequest.cancel(), this._imageRequest = null), this.options.url = e.url, this.load(e.coordinates, this._loaded), this) : this;
        }
        setTexture(e) {
          if (!(e.handle instanceof WebGLTexture))
            throw new Error("The provided handle is not a WebGLTexture instance");
          return this.texture = new Wp(this.map.painter.context, e.handle), this.width = e.dimensions[0], this.height = e.dimensions[1], this._dirty = !1, this._loaded = !0, this._finishLoading(), this;
        }
        _finishLoading() {
          this.map && (this.setCoordinates(this.coordinates), this.fire(new Ar("data", { dataType: "source", sourceDataType: "metadata" })));
        }
        onAdd(e) {
          this.map = e, this.load();
        }
        onRemove(e) {
          this._imageRequest && (this._imageRequest.cancel(), this._imageRequest = null), !this.texture || this.texture instanceof Wp || this.texture.destroy(), this.boundsBuffer && (this.boundsBuffer.destroy(), this.elevatedGlobeVertexBuffer && this.elevatedGlobeVertexBuffer.destroy(), this.elevatedGlobeIndexBuffer && this.elevatedGlobeIndexBuffer.destroy());
        }
        setCoordinates(e) {
          if (this.coordinates = e, this._boundsArray = void 0, this._unsupportedCoords = !1, !e.length)
            return this;
          this.onNorthPole = !1, this.onSouthPole = !1;
          let n = e[0][1], o = e[0][1];
          for (const l of e)
            l[1] > o && (o = l[1]), l[1] < n && (n = l[1]);
          const u = (o + n) / 2;
          if (u > Un ? this.onNorthPole = !0 : u < -Un && (this.onSouthPole = !0), !this.onNorthPole && !this.onSouthPole) {
            const l = e.map(h.fromLngLat);
            this.tileID = function(f) {
              let v = 1 / 0, S = 1 / 0, D = -1 / 0, x = -1 / 0;
              for (const k of f)
                v = Math.min(v, k.x), S = Math.min(S, k.y), D = Math.max(D, k.x), x = Math.max(x, k.y);
              const P = Math.max(D - v, x - S), I = Math.max(0, Math.floor(-Math.log(P) / Math.LN2)), M = Math.pow(2, I);
              let C = Math.floor((v + D) / 2 * M);
              return C > 1 && (C -= 1), new nt(I, C, Math.floor((S + x) / 2 * M));
            }(l), this.minzoom = this.maxzoom = this.tileID.z;
          }
          return this.fire(new Ar("data", { dataType: "source", sourceDataType: "content" })), this;
        }
        _clear() {
          this._boundsArray = void 0, this._unsupportedCoords = !1;
        }
        _prepareData(e) {
          for (const U in this.tiles) {
            const q = this.tiles[U];
            q.state !== "loaded" && (q.state = "loaded", q.texture = this.texture);
          }
          if (this._boundsArray || this.onNorthPole || this.onSouthPole || this._unsupportedCoords)
            return;
          const n = Qd(new nt(0, 0, 0), this.map.transform.projection), o = [n.projection.project(this.coordinates[0][0], this.coordinates[0][1]), n.projection.project(this.coordinates[1][0], this.coordinates[1][1]), n.projection.project(this.coordinates[2][0], this.coordinates[2][1]), n.projection.project(this.coordinates[3][0], this.coordinates[3][1])];
          if (!function(U) {
            const q = U[1].x - U[0].x, $ = U[1].y - U[0].y, H = U[2].x - U[1].x, K = U[2].y - U[1].y, Q = U[3].x - U[2].x, ie = U[3].y - U[2].y, fe = U[0].x - U[3].x, de = U[0].y - U[3].y, ue = q * K - H * $, Se = H * ie - Q * K, me = Q * de - fe * ie, Ee = fe * $ - q * de;
            return ue > 0 && Se > 0 && me > 0 && Ee > 0 || ue < 0 && Se < 0 && me < 0 && Ee < 0;
          }(o))
            return console.warn("Image source coordinates are defining non-convex area in the Mercator projection"), void (this._unsupportedCoords = !0);
          const u = Qd(this.tileID, this.map.transform.projection), [l, f, v, S] = this.coordinates.map((U) => {
            const q = u.projection.project(U[0], U[1]);
            return cx(u, q)._round();
          });
          this.perspectiveTransform = wx(l.x, l.y, f.x, f.y, v.x, v.y, S.x, S.y);
          const D = this._boundsArray = new $a();
          D.emplaceBack(l.x, l.y, 0, 0), D.emplaceBack(f.x, f.y, Tt, 0), D.emplaceBack(S.x, S.y, 0, Tt), D.emplaceBack(v.x, v.y, Tt, Tt), this.boundsBuffer && (this.boundsBuffer.destroy(), this.elevatedGlobeVertexBuffer && this.elevatedGlobeVertexBuffer.destroy(), this.elevatedGlobeIndexBuffer && this.elevatedGlobeIndexBuffer.destroy()), this.boundsBuffer = e.createVertexBuffer(D, $_.members), this.boundsSegments = Wn.simpleSegment(0, 0, 4, 2);
          const x = [], P = [Xp((I = this.coordinates)[0]), Xp(I[1]), Xp(I[2]), Xp(I[3])];
          var I;
          const [M, C, k, V] = function(U) {
            let q = U[0][0], $ = q, H = U[0][1], K = H;
            for (let Q = 1; Q < U.length; Q++)
              U[Q][0] < q ? q = U[Q][0] : U[Q][0] > $ && ($ = U[Q][0]), U[Q][1] < H ? H = U[Q][1] : U[Q][1] > K && (K = U[Q][1]);
            return [q, H, $ - q, K - H];
          }(P);
          {
            const U = new $a(), [q, $, H, K] = function(Ve) {
              let Ue = Ve[0].x, Fe = Ue, et = Ve[0].y, dt = et;
              for (let tt = 1; tt < Ve.length; tt++)
                Ve[tt].x < Ue ? Ue = Ve[tt].x : Ve[tt].x > Fe && (Fe = Ve[tt].x), Ve[tt].y < et ? et = Ve[tt].y : Ve[tt].y > dt && (dt = Ve[tt].y);
              return [Ue, et, Fe - Ue, dt - et];
            }(o), Q = (Ve) => [(Ve.x - q) / H, (Ve.y - $) / K], [ie, fe, de, ue] = o.map(Q), Se = function(Ve, Ue, Fe, et, dt, tt, Mt, wt) {
              const At = $p(0, 0, 1, 0, 1, 1, 0, 1), rt = $p(Ve, Ue, Fe, et, dt, tt, Mt, wt), Ut = De.mat3.adjoint([], rt);
              return De.mat3.multiply(At, At, Ut);
            }(ie[0], ie[1], fe[0], fe[1], de[0], de[1], ue[0], ue[1]);
            this.elevatedGlobePerspectiveTransform = wx(ie[0], ie[1], fe[0], fe[1], de[0], de[1], ue[0], ue[1]);
            const me = (Ve, Ue) => {
              x.push(Ve.lng);
              const Fe = Math.round((Ve.lng - M) / k * Tt), et = Math.round((Ve.lat - C) / V * Tt), dt = Q(Ue), tt = De.vec3.transformMat3([], [dt[0], dt[1], 1], Se), Mt = Math.round(tt[0] / tt[2] * Tt), wt = Math.round(tt[1] / tt[2] * Tt);
              U.emplaceBack(Fe, et, Mt, wt);
            }, Ee = o[3].x - o[0].x, ze = o[3].y - o[0].y, Ie = o[2].x - o[1].x, Re = o[2].y - o[1].y;
            for (let Ve = 0; Ve < 65; Ve++) {
              const Ue = Ve / 64, Fe = [o[0].x + Ue * Ee, o[0].y + Ue * ze], et = [o[1].x + Ue * Ie, o[1].y + Ue * Re], dt = et[0] - Fe[0], tt = et[1] - Fe[1];
              for (let Mt = 0; Mt < 65; Mt++) {
                const wt = Mt / 64, At = { x: Fe[0] + dt * wt, y: Fe[1] + tt * wt, z: 0 };
                me(n.projection.unproject(At.x, At.y), At);
              }
            }
            this.elevatedGlobeVertexBuffer = e.createVertexBuffer(U, $_.members);
          }
          {
            this.maxLongitudeTriangleSize = 0;
            let U = [], q = new qs();
            const $ = (H, K, Q) => {
              q.emplaceBack(H, K, Q);
              const ie = x[H], fe = x[K], de = x[Q], ue = Math.min(Math.min(ie, fe), de), Se = Math.max(Math.max(ie, fe), de) - ue;
              Se > this.maxLongitudeTriangleSize && (this.maxLongitudeTriangleSize = Se), U.push(ue + Se / 2);
            };
            for (let H = 0; H < 64; H++)
              for (let K = 0; K < 64; K++) {
                const Q = 65 * H + K, ie = Q + 1, fe = Q + 65, de = fe + 1;
                $(Q, fe, ie), $(ie, fe, de);
              }
            [U, q] = function(H, K) {
              const Q = Array.from({ length: H.length }, (de, ue) => ue);
              Q.sort((de, ue) => H[de] - H[ue]);
              const ie = [], fe = new qs();
              for (let de = 0; de < Q.length; de++) {
                const ue = Q[de];
                ie.push(H[ue]);
                const Se = 3 * ue, me = Se + 1;
                fe.emplaceBack(K.uint16[Se], K.uint16[me], K.uint16[me + 1]);
              }
              return [ie, fe];
            }(U, q), this.elevatedGlobeTrianglesCenterLongitudes = U, this.elevatedGlobeIndexBuffer = e.createIndexBuffer(q);
          }
          this.elevatedGlobeSegments = Wn.simpleSegment(0, 0, 4225, 8192), this.elevatedGlobeGridMatrix = new Float32Array([0, k / Tt, 0, V / Tt, 0, 0, C, M, 0]);
        }
        prepare() {
          const e = Object.keys(this.tiles).length !== 0;
          if (this.tileID && !e)
            return;
          const n = this.map.painter.context, o = n.gl;
          !this._dirty || this.texture instanceof Wp || (this.texture ? this.texture.update(this.image) : (this.texture = new K_(n, this.image, o.RGBA8), this.texture.bind(o.LINEAR, o.CLAMP_TO_EDGE)), this._dirty = !1), e && this._prepareData(n);
        }
        loadTile(e, n) {
          this.tileID && this.tileID.equals(e.tileID.canonical) ? (this.tiles[String(e.tileID.wrap)] = e, e.buckets = {}, n(null)) : (e.state = "errored", n(null));
        }
        serialize() {
          return { type: "image", url: this.options.url, coordinates: this.coordinates };
        }
        hasTransition() {
          return !1;
        }
        getSegmentsForLongitude(e) {
          const n = this.elevatedGlobeSegments;
          if (!this.elevatedGlobeTrianglesCenterLongitudes || !n)
            return null;
          const o = this.elevatedGlobeTrianglesCenterLongitudes;
          let u = (l = e + 180) + 360 * Math.round((o[0] - l) / 360);
          var l;
          const f = new Wn(), v = (P, I) => {
            f.segments.push({ vertexOffset: 0, primitiveOffset: P, vertexLength: n.segments[0].vertexLength, primitiveLength: I, sortKey: void 0, vaos: {} });
          }, S = 0.51 * this.maxLongitudeTriangleSize;
          if (Math.abs(o[0] - u) <= S) {
            const P = Ke(o, 0, o.length, u + S);
            return P === o.length || v(P, Vo(o, P + 1, o.length, u + 360 - S) - P), f;
          }
          u < o[0] && (u += 360);
          const D = Vo(o, 0, o.length, u - S);
          if (D === o.length)
            return v(0, o.length), f;
          v(0, D - 0);
          const x = Ke(o, D + 1, o.length, u + S);
          return x !== o.length && v(x, o.length - x), f;
        }
      }
      const JT = (Math.pow(256, 2) - 1) / 16907520;
      class Mx extends wr {
        constructor(e, n, o, u) {
          super(e, { layout: vx || (vx = new Bn({ visibility: new yt($e.layout_raster.visibility) })), paint: bx || (bx = new Bn({ "raster-opacity": new yt($e.paint_raster["raster-opacity"]), "raster-color": new Wa($e.paint_raster["raster-color"]), "raster-color-mix": new yt($e.paint_raster["raster-color-mix"]), "raster-color-range": new yt($e.paint_raster["raster-color-range"]), "raster-hue-rotate": new yt($e.paint_raster["raster-hue-rotate"]), "raster-brightness-min": new yt($e.paint_raster["raster-brightness-min"]), "raster-brightness-max": new yt($e.paint_raster["raster-brightness-max"]), "raster-saturation": new yt($e.paint_raster["raster-saturation"]), "raster-contrast": new yt($e.paint_raster["raster-contrast"]), "raster-resampling": new yt($e.paint_raster["raster-resampling"]), "raster-fade-duration": new yt($e.paint_raster["raster-fade-duration"]), "raster-emissive-strength": new yt($e.paint_raster["raster-emissive-strength"]), "raster-array-band": new yt($e.paint_raster["raster-array-band"]), "raster-elevation": new yt($e.paint_raster["raster-elevation"]), "raster-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, n, o, u), this.updateColorRamp(), this._curRampRange = [NaN, NaN];
        }
        getProgramIds() {
          return ["raster"];
        }
        hasColorMap() {
          return !!this._transitionablePaint._values["raster-color"].value.value;
        }
        tileCoverLift() {
          return this.paint.get("raster-elevation");
        }
        isDraped(e) {
          return !(e && e._source instanceof Tx && (e._source.onNorthPole || e._source.onSouthPole)) && this.paint.get("raster-elevation") === 0;
        }
        _handleSpecialPaintPropertyUpdate(e) {
          e !== "raster-color" && e !== "raster-color-range" || (this._curRampRange = [NaN, NaN], this.updateColorRamp());
        }
        updateColorRamp(e) {
          if (!this.hasColorMap() || !this._curRampRange)
            return;
          const n = this._transitionablePaint._values["raster-color"].value.expression, [o, u] = e || this._transitionablePaint._values["raster-color-range"].value.expression.evaluate({ zoom: 0 }) || [NaN, NaN];
          isNaN(o) && isNaN(u) || o === this._curRampRange[0] && u === this._curRampRange[1] || (this.colorRamp = Bd({ expression: n, evaluationKey: "rasterValue", image: this.colorRamp, clips: [{ start: o, end: u }], resolution: 256 }), this.colorRampTexture = null, this._curRampRange = [o, u]);
        }
      }
      let Sx, Ex, Px, Ax, Cx;
      class Ix extends wr {
        constructor(e, n, o, u) {
          super(e, { layout: Sx || (Sx = new Bn({ visibility: new yt($e["layout_raster-particle"].visibility) })), paint: Ex || (Ex = new Bn({ "raster-particle-array-band": new yt($e["paint_raster-particle"]["raster-particle-array-band"]), "raster-particle-count": new yt($e["paint_raster-particle"]["raster-particle-count"]), "raster-particle-color": new Wa($e["paint_raster-particle"]["raster-particle-color"]), "raster-particle-max-speed": new yt($e["paint_raster-particle"]["raster-particle-max-speed"]), "raster-particle-speed-factor": new yt($e["paint_raster-particle"]["raster-particle-speed-factor"]), "raster-particle-fade-opacity-factor": new yt($e["paint_raster-particle"]["raster-particle-fade-opacity-factor"]), "raster-particle-reset-rate-factor": new yt($e["paint_raster-particle"]["raster-particle-reset-rate-factor"]), "raster-particle-elevation": new yt($e["paint_raster-particle"]["raster-particle-elevation"]), "raster-particle-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, n, o, u), this._updateColorRamp(), this.lastInvalidatedAt = Ct.now();
        }
        onRemove(e) {
          this.colorRampTexture && this.colorRampTexture.destroy(), this.tileFramebuffer && this.tileFramebuffer.destroy(), this.particleFramebuffer && this.particleFramebuffer.destroy();
        }
        hasColorMap() {
          return !!this._transitionablePaint._values["raster-particle-color"].value.value;
        }
        getProgramIds() {
          return ["rasterParticle"];
        }
        hasOffscreenPass() {
          return this.visibility !== "none";
        }
        isDraped(e) {
          return !1;
        }
        _handleSpecialPaintPropertyUpdate(e) {
          e !== "raster-particle-color" && e !== "raster-particle-max-speed" || (this._updateColorRamp(), this._invalidateAnimationState()), e === "raster-particle-count" && this._invalidateAnimationState();
        }
        _updateColorRamp() {
          if (!this.hasColorMap())
            return;
          const e = this._transitionablePaint._values["raster-particle-color"].value.expression, n = this._transitionablePaint._values["raster-particle-max-speed"].value.expression.evaluate({ zoom: 0 });
          this.colorRamp = Bd({ expression: e, evaluationKey: "rasterParticleSpeed", image: this.colorRamp, clips: [{ start: 0, end: n }], resolution: 256 }), this.colorRampTexture = null;
        }
        _invalidateAnimationState() {
          this.lastInvalidatedAt = Ct.now();
        }
        tileCoverLift() {
          return this.paint.get("raster-particle-elevation");
        }
      }
      class QT extends wr {
        constructor(e, n) {
          super(e, {}, n, null), this.implementation = e, e.slot && (this.slot = e.slot);
        }
        is3D() {
          return this.implementation.renderingMode === "3d";
        }
        hasOffscreenPass() {
          return this.implementation.prerender !== void 0;
        }
        isDraped(e) {
          return this.implementation.renderToTile !== void 0;
        }
        shouldRedrape() {
          return !!this.implementation.shouldRerenderTiles && this.implementation.shouldRerenderTiles();
        }
        recalculate() {
        }
        updateTransitions() {
        }
        hasTransition() {
          return !1;
        }
        serialize() {
        }
        onAdd(e) {
          this.implementation.onAdd && this.implementation.onAdd(e, e.painter.context.gl);
        }
        onRemove(e) {
          this.implementation.onRemove && this.implementation.onRemove(e, e.painter.context.gl);
        }
      }
      function J_(r, e, n) {
        const o = [0, 0, 1], u = De.quat.identity([]);
        return De.quat.rotateY(u, u, n ? -vi(r) + Math.PI : vi(r)), De.quat.rotateX(u, u, -vi(e)), De.vec3.transformQuat(o, o, u), De.vec3.normalize(o, o);
      }
      function Lx(r, e) {
        const n = Yp(r.projection, r.zoom, r.width, r.height), o = function(l, f, v, S, D) {
          const x = new Ui(v.lng - 180 * wc, v.lat), P = new Ui(v.lng + 180 * wc, v.lat), I = l.project(x.lng, x.lat), M = l.project(P.lng, P.lat), C = -Math.atan2(M.y - I.y, M.x - I.x), k = h.fromLngLat(v);
          k.y = si(k.y, -1 + wc, 1 - wc);
          const V = k.toLngLat(), U = l.project(V.lng, V.lat), q = h.fromLngLat(V);
          q.x += wc;
          const $ = q.toLngLat(), H = l.project($.lng, $.lat), K = Dx(H.x - U.x, H.y - U.y, C), Q = h.fromLngLat(V);
          Q.y += wc;
          const ie = Q.toLngLat(), fe = l.project(ie.lng, ie.lat), de = Dx(fe.x - U.x, fe.y - U.y, C), ue = Math.abs(K.x) / Math.abs(de.y), Se = De.mat4.identity([]);
          De.mat4.rotateZ(Se, Se, -C * (1 - (D ? 0 : S)));
          const me = De.mat4.identity([]);
          return De.mat4.scale(me, me, [1, 1 - (1 - ue) * S, 1]), me[4] = -de.x / de.y * S, De.mat4.rotateZ(me, me, C), De.mat4.multiply(me, Se, me), me;
        }(r.projection, 0, r.center, n, e), u = zx(r);
        return De.mat4.scale(o, o, [u, u, 1]), o;
      }
      function zx(r) {
        const e = r.projection, n = Yp(r.projection, r.zoom, r.width, r.height), o = Q_(e, r.center), u = Q_(e, Ui.convert(e.center));
        return Math.pow(2, o * n + (1 - n) * u);
      }
      function Yp(r, e, n, o, u = 1 / 0) {
        const l = r.range;
        if (!l)
          return 0;
        const f = Math.min(u, Math.max(n, o)), v = Math.log(f / 1024) / Math.LN2;
        return fs(l[0] + v, l[1] + v, e);
      }
      const wc = 1 / 4e4;
      function Q_(r, e) {
        const n = si(e.lat, -Un, Un), o = new Ui(e.lng - 180 * wc, n), u = new Ui(e.lng + 180 * wc, n), l = r.project(o.lng, n), f = r.project(u.lng, n), v = h.fromLngLat(o), S = h.fromLngLat(u), D = f.x - l.x, x = f.y - l.y, P = S.x - v.x, I = S.y - v.y, M = Math.sqrt((P * P + I * I) / (D * D + x * x));
        return Math.log(M) / Math.LN2;
      }
      function Dx(r, e, n) {
        const o = Math.cos(n), u = Math.sin(n);
        return { x: r * o - e * u, y: r * u + e * o };
      }
      function kx(r, e, n) {
        De.mat4.identity(r), De.mat4.rotateZ(r, r, vi(e[2])), De.mat4.rotateX(r, r, vi(e[0])), De.mat4.rotateY(r, r, vi(e[1])), De.mat4.scale(r, r, n), De.mat4.multiply(r, r, [1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
      }
      function Kp(r, e, n, o, u, l, f, v) {
        const S = [n[0] - e[0], n[1] - e[1], 0], D = [o[0] - e[0], o[1] - e[1], 0];
        if (De.vec3.length(S) < 1e-12 || De.vec3.length(D) < 1e-12)
          return De.quat.identity(r);
        const x = De.vec3.cross([], S, D);
        De.vec3.normalize(x, x), De.vec3.subtract(D, o, e), S[2] = (l - u) * v, D[2] = (f - u) * v;
        const P = S;
        return De.vec3.cross(P, S, D), De.vec3.normalize(P, P), De.quat.rotationTo(r, x, P);
      }
      function eg(r, e, n = !1) {
        const o = mr(e.zoom), u = function(l, f, v) {
          const S = f.worldSize, D = [l[12], l[13], l[14]], x = Os(D[1] / S), P = Fr(D[0] / S), I = De.mat4.identity([]), M = fr(1, x) * S, C = fr(1, 0) * S * c(x, f.zoom), k = 1 / eo(S);
          let V = C * k;
          if (v) {
            const H = Yp(f.projection, f.zoom, f.width, f.height, 1024);
            V = k * f.projection.pixelSpaceConversion(f.center.lat, S, H);
          }
          const U = el(x, P);
          De.vec3.add(U, U, De.vec3.scale([], De.vec3.normalize([], U), M * V * D[2]));
          const q = function(H) {
            const K = [H[0], H[1], H[2]];
            let Q = [0, 1, 0];
            const ie = De.vec3.cross([], Q, K);
            return De.vec3.cross(Q, K, ie), De.vec3.squaredLength(Q) === 0 && (Q = [0, 1, 0], De.vec3.cross(ie, K, Q)), De.vec3.normalize(ie, ie), De.vec3.normalize(Q, Q), De.vec3.normalize(K, K), [ie[0], ie[1], ie[2], 0, Q[0], Q[1], Q[2], 0, K[0], K[1], K[2], 0, H[0], H[1], H[2], 1];
          }(U);
          De.mat4.scale(I, I, [V, V, V * M]), De.mat4.translate(I, I, [-D[0], -D[1], -D[2]]);
          const $ = De.mat4.multiply([], f.globeMatrix, q);
          return De.mat4.multiply($, $, I), De.mat4.multiply($, $, l), $;
        }(r, e, n);
        if (o > 0) {
          const l = function(f, v) {
            const S = v.worldSize, D = fr(1, 0) * S * c(v.center.lat, v.zoom) / eo(S), x = fr(1, v.center.lat) * S, P = De.mat4.identity([]);
            return De.mat4.rotateY(P, P, vi(v.center.lng)), De.mat4.rotateX(P, P, vi(v.center.lat)), De.mat4.translate(P, P, [0, 0, dr]), De.mat4.scale(P, P, [D, D, D * x]), De.mat4.translate(P, P, [v.point.x - 0.5 * S, v.point.y - 0.5 * S, 0]), De.mat4.multiply(P, P, f), De.mat4.multiply(P, v.globeMatrix, P);
          }(r, e);
          return function(f, v, S) {
            const D = (C, k, V) => {
              const U = De.vec3.length(C), q = De.vec3.length(k), $ = Ps(C, k, V);
              return De.vec3.scale($, $, 1 / De.vec3.length($) * ei(U, q, V));
            }, x = D([f[0], f[1], f[2]], [v[0], v[1], v[2]], S), P = D([f[4], f[5], f[6]], [v[4], v[5], v[6]], S), I = D([f[8], f[9], f[10]], [v[8], v[9], v[10]], S), M = Ps([f[12], f[13], f[14]], [v[12], v[13], v[14]], S);
            return [x[0], x[1], x[2], 0, P[0], P[1], P[2], 0, I[0], I[1], I[2], 0, M[0], M[1], M[2], 1];
          }(u, l, o);
        }
        return u;
      }
      function Rx(r, e, n, o) {
        const u = Jt.projectAabbCorners(o, n);
        let l = Number.MAX_VALUE, f = -1;
        for (let D = 0; D < u.length; ++D) {
          const x = u[D];
          x[0] = (0.5 * x[0] + 0.5) * e.width, x[1] = (0.5 - 0.5 * x[1]) * e.height, x[2] < l && (f = D, l = x[2]);
        }
        const v = (D) => new Et(u[D][0], u[D][1]);
        let S;
        switch (f) {
          case 0:
          case 6:
            S = [v(1), v(5), v(4), v(7), v(3), v(2), v(1)];
            break;
          case 1:
          case 7:
            S = [v(0), v(4), v(5), v(6), v(2), v(3), v(0)];
            break;
          case 3:
          case 5:
            S = [v(1), v(0), v(4), v(7), v(6), v(2), v(1)];
            break;
          default:
            S = [v(1), v(5), v(6), v(7), v(3), v(0), v(1)];
        }
        if (se(r, S))
          return l;
      }
      const e2 = qi([{ name: "a_pos_3f", components: 3, type: "Float32" }]), t2 = qi([{ name: "a_color_3f", components: 3, type: "Float32" }]), i2 = qi([{ name: "a_color_4f", components: 4, type: "Float32" }]), n2 = qi([{ name: "a_uv_2f", components: 2, type: "Float32" }]), s2 = qi([{ name: "a_normal_3f", components: 3, type: "Float32" }]), r2 = qi([{ name: "a_normal_matrix0", components: 4, type: "Float32" }, { name: "a_normal_matrix1", components: 4, type: "Float32" }, { name: "a_normal_matrix2", components: 4, type: "Float32" }, { name: "a_normal_matrix3", components: 4, type: "Float32" }]), o2 = qi([{ name: "a_pbr", components: 4, type: "Uint16" }, { name: "a_heightBasedEmissiveStrength", components: 3, type: "Float32" }]), Ox = { None: 0, Model: 1, Symbol: 2, FillExtrusion: 4, All: 7 };
      class Jp {
        constructor(e, n, o, u) {
          this.message = (e ? `${e}: ` : "") + o, u && (this.identifier = u), n != null && n.__line__ && (this.line = n.__line__);
        }
      }
      function Fx(r, e) {
        const n = r.indexOf("://") === -1;
        try {
          return new URL(r, n && e ? "http://example.com" : void 0), !0;
        } catch {
          return !1;
        }
      }
      class Bx {
        constructor(e, n) {
          this.feature = e, this.instancedDataOffset = n, this.instancedDataCount = 0, this.rotation = [0, 0, 0], this.scale = [1, 1, 1], this.translation = [0, 0, 0];
        }
      }
      class Nx {
        constructor() {
          this.instancedDataArray = new Ld(), this.instancesEvaluatedElevation = [], this.features = [], this.idToFeaturesIndex = {};
        }
      }
      class tg {
        constructor(e) {
          this.zoom = e.zoom, this.canonical = e.canonical, this.layers = e.layers, this.layerIds = this.layers.map((n) => n.fqid), this.projection = e.projection, this.index = e.index, this.hasZoomDependentProperties = this.layers[0].isZoomDependent(), this.stateDependentLayerIds = this.layers.filter((n) => n.isStateDependent()).map((n) => n.id), this.hasPattern = !1, this.instancesPerModel = {}, this.validForExaggeration = 0, this.maxVerticalOffset = 0, this.maxScale = 0, this.maxHeight = 0, this.lookupDim = this.zoom > this.canonical.z ? 256 : this.zoom > 15 ? 75 : 100, this.instanceCount = 0, this.terrainElevationMin = 0, this.terrainElevationMax = 0, this.validForDEMTile = { id: null, timestamp: 0 }, this.modelUris = [], this.modelsRequested = !1, this.activeReplacements = [], this.replacementUpdateTime = 0;
        }
        updateFootprints(e, n) {
        }
        populate(e, n, o, u) {
          this.tileToMeter = s(o);
          const l = this.layers[0]._featureFilter.needGeometry;
          this.lookup = new Uint8Array(this.lookupDim * this.lookupDim);
          for (const { feature: f, id: v, index: S, sourceLayerIndex: D } of e) {
            const x = v ?? (f.properties && f.properties.hasOwnProperty("id") ? f.properties.id : void 0), P = Z(f, l);
            if (!this.layers[0]._featureFilter.filter(new Tn(this.zoom), P, o))
              continue;
            const I = { id: x, sourceLayerIndex: D, index: S, geometry: l ? P.geometry : G(f, o, u), properties: f.properties, type: f.type, patterns: {} }, M = this.addFeature(I, I.geometry, P);
            M && n.featureIndex.insert(f, I.geometry, S, D, this.index, this.instancesPerModel[M].instancedDataArray.length, Tt / 32);
          }
          this.lookup = null;
        }
        update(e, n, o, u) {
          for (const l in this.instancesPerModel) {
            const f = this.instancesPerModel[l];
            for (const v in e)
              f.idToFeaturesIndex.hasOwnProperty(v) && (this.evaluate(f.features[f.idToFeaturesIndex[v]], e[v], f, !0), this.uploaded = !1);
          }
          this.maxHeight = 0;
        }
        updateZoomBasedPaintProperties() {
          if (!this.hasZoomDependentProperties)
            return !1;
          let e = !1;
          for (const n in this.instancesPerModel) {
            const o = this.instancesPerModel[n];
            for (const u of o.features) {
              const l = this.layers[0], f = u.feature, v = this.canonical, S = l.paint.get("model-rotation").evaluate(f, {}, v), D = l.paint.get("model-scale").evaluate(f, {}, v), x = l.paint.get("model-translation").evaluate(f, {}, v);
              De.vec3.exactEquals(u.rotation, S) && De.vec3.exactEquals(u.scale, D) && De.vec3.exactEquals(u.translation, x) || (this.evaluate(u, u.featureStates, o, !0), e = !0);
            }
          }
          return e;
        }
        updateReplacement(e, n, o, u) {
          if (n.updateTime === this.replacementUpdateTime)
            return !1;
          this.replacementUpdateTime = n.updateTime;
          const l = n.getReplacementRegionsForTile(e.toUnwrapped(), !0);
          if (E_(this.activeReplacements, l))
            return !1;
          this.activeReplacements = l;
          let f = !1;
          for (const v in this.instancesPerModel) {
            const S = this.instancesPerModel[v], D = S.instancedDataArray;
            for (const x of S.features) {
              const P = x.instancedDataOffset, I = x.instancedDataCount;
              for (let M = 0; M < I; M++) {
                const C = 16 * (M + P);
                let k = D.float32[C + 0];
                const V = k > Tt;
                k = V ? k - Tt : k;
                const U = Math.floor(k), q = D.float32[C + 1];
                let $ = !1;
                for (const H of this.activeReplacements)
                  if (!Qy(H, o, Ox.Model, u) && !(H.min.x > U || U > H.max.x || H.min.y > q || q > H.max.y) && ($ = r0(s0(U, q, e.canonical, H.footprintTileId.canonical), H.footprint), $))
                    break;
                D.float32[C] = $ ? k + Tt : k, f = f || $ !== V;
              }
            }
          }
          return f;
        }
        isEmpty() {
          for (const e in this.instancesPerModel)
            if (this.instancesPerModel[e].instancedDataArray.length !== 0)
              return !1;
          return !0;
        }
        uploadPending() {
          return !this.uploaded;
        }
        upload(e) {
          if (!this.uploaded)
            for (const n in this.instancesPerModel) {
              const o = this.instancesPerModel[n];
              o.instancedDataArray.length < 0 || o.instancedDataArray.length === 0 || (o.instancedDataBuffer ? o.instancedDataBuffer.updateData(o.instancedDataArray) : o.instancedDataBuffer = e.createVertexBuffer(o.instancedDataArray, r2.members, !0, void 0, this.instanceCount));
            }
          this.uploaded = !0;
        }
        destroy() {
          for (const n in this.instancesPerModel) {
            const o = this.instancesPerModel[n];
            o.instancedDataArray.length !== 0 && o.instancedDataBuffer && o.instancedDataBuffer.destroy();
          }
          const e = this.layers[0].modelManager;
          if (e && this.modelUris)
            for (const n of this.modelUris)
              e.removeModel(n, "");
        }
        addFeature(e, n, o) {
          const u = this.layers[0], l = u.layout.get("model-id").evaluate(o, {}, this.canonical);
          if (!l)
            return mi(`modelId is not evaluated for layer ${u.id} and it is not going to get rendered.`), l;
          Fx(l, !1) && (this.modelUris.includes(l) || this.modelUris.push(l)), this.instancesPerModel[l] || (this.instancesPerModel[l] = new Nx());
          const f = this.instancesPerModel[l], v = f.instancedDataArray, S = new Bx(o, v.length);
          for (const D of n)
            for (const x of D) {
              if (x.x < 0 || x.x >= Tt || x.y < 0 || x.y >= Tt)
                continue;
              const P = (this.lookupDim - 1) / Tt, I = this.lookupDim * (x.y * P | 0) + x.x * P | 0;
              if (this.lookup) {
                if (this.lookup[I] !== 0)
                  continue;
                this.lookup[I] = 1;
              }
              this.instanceCount++;
              const M = v.length;
              v.resize(M + 1), f.instancesEvaluatedElevation.push(0), v.float32[16 * M] = x.x, v.float32[16 * M + 1] = x.y;
            }
          return S.instancedDataCount = f.instancedDataArray.length - S.instancedDataOffset, S.instancedDataCount > 0 && (e.id && (f.idToFeaturesIndex[e.id] = f.features.length), f.features.push(S), this.evaluate(S, {}, f, !1)), l;
        }
        getModelUris() {
          return this.modelUris;
        }
        evaluate(e, n, o, u) {
          const l = this.layers[0], f = e.feature, v = this.canonical, S = e.rotation = l.paint.get("model-rotation").evaluate(f, n, v), D = e.scale = l.paint.get("model-scale").evaluate(f, n, v), x = e.translation = l.paint.get("model-translation").evaluate(f, n, v), P = l.paint.get("model-color").evaluate(f, n, v);
          P.a = l.paint.get("model-color-mix-intensity").evaluate(f, n, v);
          const I = [];
          this.maxVerticalOffset < x[2] && (this.maxVerticalOffset = x[2]), this.maxScale = Math.max(Math.max(this.maxScale, D[0]), Math.max(D[1], D[2])), kx(I, S, D);
          const M = Math.round(100 * P.a) + P.b / 1.05;
          for (let C = 0; C < e.instancedDataCount; ++C) {
            const k = e.instancedDataOffset + C, V = 16 * k, U = o.instancedDataArray.float32;
            let q = 0;
            u && (q = U[V + 6] - o.instancesEvaluatedElevation[k]);
            const $ = 0 | U[V + 1];
            U[V] = (0 | U[V]) + P.r / 1.05, U[V + 1] = $ + P.g / 1.05, U[V + 2] = M, U[V + 3] = 1 / (v.z > 10 ? this.tileToMeter : s(v, $)), U[V + 4] = x[0], U[V + 5] = x[1], U[V + 6] = x[2] + q, U[V + 7] = I[0], U[V + 8] = I[1], U[V + 9] = I[2], U[V + 10] = I[4], U[V + 11] = I[5], U[V + 12] = I[6], U[V + 13] = I[8], U[V + 14] = I[9], U[V + 15] = I[10], o.instancesEvaluatedElevation[k] = x[2];
          }
        }
      }
      let Vx, Ux;
      Ft(tg, "ModelBucket", { omit: ["layers"] }), Ft(Nx, "PerModelAttributes"), Ft(Bx, "ModelFeature");
      const bh = 64, Ou = { CoordinateSpaceTile: 1, CoordinateSpaceYUp: 2, HasMapboxMeshFeatures: 4, HasMeshoptCompression: 8 };
      function jx(r, e, n, o, u, l, f, v, S, D = !1) {
        const x = n.zoom, P = n.project(o), I = c(o.lat, x), M = 1 / I;
        De.mat4.identity(r), De.mat4.translate(r, r, [P.x + f[0] * M, P.y + f[1] * M, f[2]]);
        let C = 1, k = 1;
        const V = n.worldSize;
        if (D) {
          if (n.projection.name === "mercator") {
            let H = 0;
            n.elevation && (H = n.elevation.getAtPointOrZero(new h(P.x / V, P.y / V), 0));
            const K = De.vec4.transformMat4([], [P.x, P.y, H, 1], n.projMatrix)[3] / n.cameraToCenterDistance;
            C = K, k = K * c(n.center.lat, x);
          } else if (n.projection.name === "globe") {
            const H = eg(r, n), K = De.mat4.multiply([], n.projMatrix, H), Q = [0, 0, 0, 1];
            De.vec4.transformMat4(Q, Q, K);
            const ie = Q[3] / n.cameraToCenterDistance, fe = mr(x), de = n.projection.pixelsPerMeter(o.lat, V) * c(o.lat, x), ue = n.projection.pixelsPerMeter(n.center.lat, V) * c(n.center.lat, x);
            C = ie / ei(de, p_(n.center.lat), fe), k = ie * I / de, C *= ue, k *= ue;
          }
        } else
          C = M;
        De.mat4.scale(r, r, [C, C, k]);
        const U = [...r], q = e.orientation, $ = [];
        if (kx($, [q[0] + u[0], q[1] + u[1], q[2] + u[2]], l), De.mat4.multiply(r, U, $), v && n.elevation) {
          let H = 0;
          const K = [];
          if (S && n.elevation) {
            H = function(fe, de, ue, Se, me) {
              const Ee = de.elevation;
              if (!Ee)
                return 0;
              const ze = Jt.projectAabbCorners(ue, Se), Ie = fr(1, me.lat) * de.worldSize, Re = function(Ut, St) {
                const Nt = [0, 0, 1], Qt = [{ corners: [0, 1, 3, 2], dotProductWithUp: 0 }, { corners: [1, 5, 2, 6], dotProductWithUp: 0 }, { corners: [0, 4, 1, 5], dotProductWithUp: 0 }, { corners: [2, 6, 3, 7], dotProductWithUp: 0 }, { corners: [4, 7, 5, 6], dotProductWithUp: 0 }, { corners: [0, 3, 4, 7], dotProductWithUp: 0 }];
                for (const pi of Qt) {
                  const gi = Ut[pi.corners[0]], Ai = Ut[pi.corners[1]], yi = Ut[pi.corners[2]], Ii = [Ai[0] - gi[0], Ai[1] - gi[1], St * (Ai[2] - gi[2])], fn = De.vec3.cross(Ii, Ii, [yi[0] - gi[0], yi[1] - gi[1], St * (yi[2] - gi[2])]);
                  De.vec3.normalize(fn, fn), pi.dotProductWithUp = De.vec3.dot(fn, Nt);
                }
                return Qt.sort((pi, gi) => pi.dotProductWithUp - gi.dotProductWithUp), Qt[0].corners;
              }(ze, Ie), Ve = ze[Re[0]], Ue = ze[Re[1]], Fe = ze[Re[2]], et = ze[Re[3]], dt = Ee.getAtPointOrZero(new h(Ve[0] / de.worldSize, Ve[1] / de.worldSize), 0), tt = Ee.getAtPointOrZero(new h(Ue[0] / de.worldSize, Ue[1] / de.worldSize), 0), Mt = Ee.getAtPointOrZero(new h(Fe[0] / de.worldSize, Fe[1] / de.worldSize), 0), wt = Ee.getAtPointOrZero(new h(et[0] / de.worldSize, et[1] / de.worldSize), 0), At = (dt + wt) / 2, rt = (tt + Mt) / 2;
              return At > rt ? tt < Mt ? Kp(fe, Ue, et, Ve, tt, wt, dt, Ie) : Kp(fe, Fe, Ve, et, Mt, dt, wt, Ie) : dt < wt ? Kp(fe, Ve, Ue, Fe, dt, tt, Mt, Ie) : Kp(fe, et, Fe, Ue, wt, Mt, tt, Ie), Math.max(At, rt);
            }(K, n, e.aabb, r, o);
            const Q = De.mat4.fromQuat([], K), ie = De.mat4.multiply([], Q, $);
            De.mat4.multiply(r, U, ie);
          } else
            H = n.elevation.getAtPointOrZero(new h(P.x / V, P.y / V), 0);
          H !== 0 && (r[14] += H);
        }
      }
      function rf(r, e, n = !1) {
        r.uploaded || (r.gfxTexture = new K_(e, r.image, n ? e.gl.R8 : e.gl.RGBA8, { useMipmap: r.sampler.minFilter >= e.gl.NEAREST_MIPMAP_NEAREST }), r.uploaded = !0, r.image = null);
      }
      function a2(r, e, n) {
        r.indexBuffer = e.createIndexBuffer(r.indexArray, !1, !0), r.vertexBuffer = e.createVertexBuffer(r.vertexArray, e2.members, !1, !0), r.normalArray && (r.normalBuffer = e.createVertexBuffer(r.normalArray, s2.members, !1, !0)), r.texcoordArray && (r.texcoordBuffer = e.createVertexBuffer(r.texcoordArray, n2.members, !1, !0)), r.colorArray && (r.colorBuffer = e.createVertexBuffer(r.colorArray, (r.colorArray.bytesPerElement === 12 ? t2 : i2).members, !1, !0)), r.featureArray && (r.pbrBuffer = e.createVertexBuffer(r.featureArray, o2.members, !0)), r.segments = Wn.simpleSegment(0, 0, r.vertexArray.length, r.indexArray.length);
        const o = r.material;
        o.pbrMetallicRoughness.baseColorTexture && rf(o.pbrMetallicRoughness.baseColorTexture, e), o.pbrMetallicRoughness.metallicRoughnessTexture && rf(o.pbrMetallicRoughness.metallicRoughnessTexture, e), o.normalTexture && rf(o.normalTexture, e), o.occlusionTexture && rf(o.occlusionTexture, e, n), o.emissionTexture && rf(o.emissionTexture, e);
      }
      function ig(r, e, n) {
        if (r.meshes)
          for (const o of r.meshes)
            a2(o, e, n);
        if (r.children)
          for (const o of r.children)
            ig(o, e, n);
      }
      function Qp(r) {
        if (r.meshes)
          for (const e of r.meshes)
            e.indexArray.destroy(), e.vertexArray.destroy(), e.colorArray && e.colorArray.destroy(), e.normalArray && e.normalArray.destroy(), e.texcoordArray && e.texcoordArray.destroy(), e.featureArray && e.featureArray.destroy();
        if (r.children)
          for (const e of r.children)
            Qp(e);
      }
      function ng(r) {
        if (r.meshes)
          for (const n of r.meshes)
            n.vertexBuffer && (n.vertexBuffer.destroy(), n.indexBuffer.destroy(), n.normalBuffer && n.normalBuffer.destroy(), n.texcoordBuffer && n.texcoordBuffer.destroy(), n.colorBuffer && n.colorBuffer.destroy(), n.pbrBuffer && n.pbrBuffer.destroy(), n.segments.destroy(), n.material && ((e = n.material).pbrMetallicRoughness.baseColorTexture && e.pbrMetallicRoughness.baseColorTexture.gfxTexture && e.pbrMetallicRoughness.baseColorTexture.gfxTexture.destroy(), e.pbrMetallicRoughness.metallicRoughnessTexture && e.pbrMetallicRoughness.metallicRoughnessTexture.gfxTexture && e.pbrMetallicRoughness.metallicRoughnessTexture.gfxTexture.destroy(), e.normalTexture && e.normalTexture.gfxTexture && e.normalTexture.gfxTexture.destroy(), e.emissionTexture && e.emissionTexture.gfxTexture && e.emissionTexture.gfxTexture.destroy(), e.occlusionTexture && e.occlusionTexture.gfxTexture && e.occlusionTexture.gfxTexture.destroy()));
        var e;
        if (r.children)
          for (const n of r.children)
            ng(n);
      }
      class Fu {
        constructor(e, n, o) {
          this._demTile = e, this._dem = this._demTile.dem, this._scale = n, this._offset = o;
        }
        static create(e, n, o) {
          const u = o || e.findDEMTileFor(n);
          if (!u || !u.dem)
            return;
          const l = u.dem, f = u.tileID, v = 1 << n.canonical.z - f.canonical.z;
          return new Fu(u, l.dim / Tt / v, [(n.canonical.x / v - f.canonical.x) * l.dim, (n.canonical.y / v - f.canonical.y) * l.dim]);
        }
        tileCoordToPixel(e, n) {
          const o = n * this._scale + this._offset[1], u = Math.floor(e * this._scale + this._offset[0]), l = Math.floor(o);
          return new Et(u, l);
        }
        getElevationAt(e, n, o, u) {
          const l = e * this._scale + this._offset[0], f = n * this._scale + this._offset[1], v = Math.floor(l), S = Math.floor(f), D = this._dem;
          return u = !!u, o ? ei(ei(D.get(v, S, u), D.get(v, S + 1, u), f - S), ei(D.get(v + 1, S, u), D.get(v + 1, S + 1, u), f - S), l - v) : D.get(v, S, u);
        }
        getElevationAtPixel(e, n, o) {
          return this._dem.get(e, n, !!o);
        }
        getMeterToDEM(e) {
          return (1 << this._demTile.tileID.canonical.z) * fr(1, e) * this._dem.stride;
        }
      }
      const sg = new Float32Array(262144), wh = new Uint8Array(262144);
      function Gx(r) {
        let e = 0;
        if (r.meshes)
          for (const n of r.meshes)
            e = Math.max(e, n.aabb.max[2]);
        if (r.children)
          for (const n of r.children)
            e = Math.max(e, Gx(n));
        return e;
      }
      function Zx(r, e, n) {
        if (r.meshes)
          for (const o of r.meshes) {
            if (o.aabb.min[0] === 1 / 0)
              continue;
            const u = Jt.applyTransform(o.aabb, r.matrix);
            n.insert(e, u.min[0], u.min[1], u.max[0], u.max[1]);
          }
        if (r.children)
          for (const o of r.children)
            Zx(o, e, n);
      }
      const Hx = ["", "wall", "door", "roof", "window", "lamp", "logo"];
      class qx {
        constructor(e) {
          this.node = e, this.evaluatedRMEA = [[1, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1], [0.4, 1, 0, 1], [1, 0, 0, 1], [1, 0, 0, 1]], this.hiddenByReplacement = !1, this.evaluatedScale = [1, 1, 1], this.evaluatedColor = [], this.emissionHeightBasedParams = [], this.cameraCollisionOpacity = 1, this.feature = { type: "Point", id: e.id, geometry: [], properties: { height: Gx(e) } }, this.aabb = this._getLocalBounds(), this.state = null;
        }
        _getLocalBounds() {
          if (!this.node.meshes)
            return new Jt([1 / 0, 1 / 0, 1 / 0], [-1 / 0, -1 / 0, -1 / 0]);
          if (!this.aabb) {
            let e = 0;
            const n = new Jt([1 / 0, 1 / 0, 1 / 0], [-1 / 0, -1 / 0, -1 / 0]);
            for (const o of this.node.meshes)
              this.node.lightMeshIndex !== e && (o.transformedAabb = Jt.applyTransformFast(o.aabb, this.node.matrix), n.encapsulate(o.transformedAabb)), e++;
            this.aabb = n;
          }
          return this.aabb;
        }
      }
      class em {
        constructor(e, n, o, u, l, f, v) {
          this.id = o, this.layers = e, this.layerIds = this.layers.map((S) => S.fqid), this.stateDependentLayerIds = this.layers.filter((S) => S.isStateDependent()).map((S) => S.id), this.modelTraits |= Ou.CoordinateSpaceTile, this.uploaded = !1, this.hasPattern = !1, u && (this.modelTraits |= Ou.HasMapboxMeshFeatures), l && (this.modelTraits |= Ou.HasMeshoptCompression), this.zoom = -1, this.terrainExaggeration = 1, this.projection = { name: "mercator" }, this.replacementUpdateTime = 0, this.elevationReadFromZ = 255, this.brightness = f, this.dirty = !0, this.needsUpload = !1, this.nodesInfo = [];
          for (const S of n)
            this.nodesInfo.push(new qx(S)), Zx(S, v.featureIndexArray.length, v.grid), v.featureIndexArray.emplaceBack(this.nodesInfo.length - 1, 0, v.bucketLayerIDs.length - 1, 0);
          this.states = {};
        }
        updateFootprints(e, n) {
          for (const o of this.getNodesInfo()) {
            const u = o.node;
            u.footprint && n.push({ footprint: u.footprint, id: e });
          }
        }
        update(e) {
          const n = Object.keys(e).length !== 0;
          if (n && !this.stateDependentLayers.length)
            return;
          const o = n ? this.stateDependentLayers : this.layers;
          if (!Ws(e, this.states))
            for (const u of o)
              this.evaluate(u, e);
          this.states = structuredClone(e);
        }
        populate() {
          console.log("populate 3D model bucket");
        }
        uploadPending() {
          return !this.uploaded || this.needsUpload;
        }
        upload(e) {
          if (!this.needsUpload)
            return;
          const n = this.getNodesInfo();
          for (const o of n) {
            const u = o.node;
            this.uploaded ? this.updatePbrBuffer(u) : ig(u, e, !0);
          }
          for (const o of n)
            Qp(o.node);
          this.uploaded = !0, this.needsUpload = !1;
        }
        updatePbrBuffer(e) {
          let n = !1;
          if (!e.meshes)
            return n;
          for (const o of e.meshes)
            o.pbrBuffer && (o.pbrBuffer.updateData(o.featureArray), n = !0);
          return n;
        }
        needsReEvaluation(e, n, o) {
          const u = e.transform.projectionOptions, l = e.style.getBrightness(), f = this.brightness !== l;
          if (!this.uploaded || this.dirty || u.name !== this.projection.name || of(o.paint.get("model-color").value, f) || of(o.paint.get("model-color-mix-intensity").value, f) || of(o.paint.get("model-roughness").value, f) || of(o.paint.get("model-emissive-strength").value, f) || of(o.paint.get("model-height-based-emissive-strength-multiplier").value, f)) {
            this.projection = u, this.brightness = l;
            const v = this.getNodesInfo();
            for (const S of v)
              S.state = null;
            return !0;
          }
          return !1;
        }
        evaluateScale(e, n) {
          if (e.transform.zoom === this.zoom)
            return;
          this.zoom = e.transform.zoom;
          const o = this.getNodesInfo(), u = this.id.canonical;
          for (const l of o) {
            const f = l.feature;
            l.evaluatedScale = n.paint.get("model-scale").evaluate(f, {}, u);
          }
        }
        evaluate(e, n) {
          const o = this.getNodesInfo();
          for (const u of o) {
            if (!u.node.meshes)
              continue;
            const l = u.feature, f = n && n[l.id];
            if (Ws(f, u.state))
              continue;
            u.state = structuredClone(f);
            const v = u.node.meshes && u.node.meshes[0].featureData, S = u.evaluatedColor[2], D = u.evaluatedRMEA[2], x = this.id.canonical;
            if (u.hasTranslucentParts = !1, v) {
              for (let P = 0; P < Hx.length; P++) {
                const I = Hx[P];
                I.length && (l.properties.part = I);
                const M = e.paint.get("model-color").evaluate(l, f, x).toRenderColor(null), C = e.paint.get("model-color-mix-intensity").evaluate(l, f, x);
                u.evaluatedColor[P] = [M.r, M.g, M.b, C], u.evaluatedRMEA[P][0] = e.paint.get("model-roughness").evaluate(l, f, x), u.evaluatedRMEA[P][2] = e.paint.get("model-emissive-strength").evaluate(l, f, x), u.evaluatedRMEA[P][3] = M.a, u.emissionHeightBasedParams[P] = e.paint.get("model-height-based-emissive-strength-multiplier").evaluate(l, f, x), !u.hasTranslucentParts && M.a < 1 && (u.hasTranslucentParts = !0);
              }
              delete l.properties.part, c2(u, S !== u.evaluatedColor[2] || D !== u.evaluatedRMEA[2], this.modelTraits);
            } else
              u.evaluatedRMEA[0][2] = e.paint.get("model-emissive-strength").evaluate(l, f, x);
            u.evaluatedScale = e.paint.get("model-scale").evaluate(l, f, x), this.updatePbrBuffer(u.node) || (this.needsUpload = !0);
          }
          this.dirty = !1;
        }
        elevationUpdate(e, n, o, u) {
          const l = e.findDEMTileFor(o);
          if (l && (l.tileID.canonical !== this.terrainTile || n !== this.terrainExaggeration)) {
            if (l.dem && l.tileID.overscaledZ !== this.elevationReadFromZ) {
              this.elevationReadFromZ = l.tileID.overscaledZ;
              const f = Fu.create(e, o, l);
              if (!f)
                return;
              this.modelTraits & Ou.HasMapboxMeshFeatures && this.updateDEM(e, f, o, u);
              for (const v of this.getNodesInfo()) {
                const S = v.node;
                if (!S.footprint || !S.footprint.vertices || !S.footprint.vertices.length)
                  continue;
                const D = S.footprint.vertices;
                let x = f.getElevationAt(D[0].x, D[0].y, !0, !0);
                for (let P = 1; P < D.length; P++)
                  x = Math.min(x, f.getElevationAt(D[P].x, D[P].y, !0, !0));
                S.elevation = x;
              }
            }
            this.terrainTile = l.tileID.canonical, this.terrainExaggeration = n;
          }
        }
        updateDEM(e, n, o, u) {
          let l = n._dem._modifiedForSources[u];
          if (l === void 0 && (n._dem._modifiedForSources[u] = [], l = n._dem._modifiedForSources[u]), l.includes(o.canonical))
            return;
          const f = n._dem.dim;
          l.push(o.canonical);
          let v = !1;
          for (const S of this.getNodesInfo()) {
            const D = S.node;
            if (!D.footprint || !D.footprint.grid)
              continue;
            const x = D.footprint.grid, P = n.tileCoordToPixel(x.min.x, x.min.y), I = n.tileCoordToPixel(x.max.x, x.max.y), M = Math.min(Math.min(f - I.y, P.x), Math.min(P.y, f - I.x));
            if (M < 0)
              continue;
            const C = si(M, 2, 5);
            let k = Math.max(0, P.x - C), V = Math.max(0, P.y - C), U = Math.min(I.x + C, f - 1), q = Math.min(I.y + C, f - 1);
            for (let Q = V; Q <= q; ++Q)
              for (let ie = k; ie <= U; ++ie)
                wh[Q * f + ie] = 255;
            let $ = 0, H = 0;
            for (let Q = 0; Q < x.cellsY; ++Q)
              for (let ie = 0; ie < x.cellsX; ++ie) {
                if (!x.cells[Q * x.cellsX + ie])
                  continue;
                const fe = n.tileCoordToPixel(x.min.x + ie / x.xScale, x.min.y + Q / x.yScale), de = n.tileCoordToPixel(x.min.x + (ie + 1) / x.xScale, x.min.y + (Q + 1) / x.yScale);
                for (let ue = fe.y; ue <= Math.min(de.y + 1, f - 1); ++ue)
                  for (let Se = fe.x; Se <= Math.min(de.x + 1, f - 1); ++Se)
                    wh[ue * f + Se] === 255 && (wh[ue * f + Se] = 0, $ += n.getElevationAtPixel(Se, ue), H++);
              }
            const K = $ / H;
            k = Math.max(1, P.x - C), V = Math.max(1, P.y - C), U = Math.min(I.x + C, f - 2), q = Math.min(I.y + C, f - 2), v = !0;
            for (let Q = V; Q <= q; ++Q)
              for (let ie = k; ie <= U; ++ie)
                wh[Q * f + ie] === 0 && (sg[Q * f + ie] = n._dem.set(ie, Q, K));
            for (let Q = 1; Q < C; ++Q) {
              k = Math.max(1, P.x - Q), V = Math.max(1, P.y - Q), U = Math.min(I.x + Q, f - 2), q = Math.min(I.y + Q, f - 2);
              for (let ie = V; ie <= q; ++ie)
                for (let fe = k; fe <= U; ++fe) {
                  const de = ie * f + fe;
                  if (wh[de] === 255) {
                    let ue = 0, Se = 0, me = -1, Ee = -1;
                    for (let ze = -1; ze <= 1; ++ze)
                      for (let Ie = -1; Ie <= 1; ++Ie) {
                        const Re = (ie + ze) * f + fe + Ie;
                        if (wh[Re] >= Q)
                          continue;
                        const Ve = sg[Re], Ue = Math.abs(Ve);
                        Ue > Se && (ue = Ve, Se = Ue, me = Ie, Ee = ze);
                      }
                    if (Se > 0.1) {
                      const ze = 1 - (Q + 0.5 * Math.abs(me * Ee)) / C;
                      let Ie = n._dem.get(fe, ie) + ue * ze;
                      const Re = n._dem.get(fe + me, ie + Ee), Ve = n._dem.get(fe - me, ie - Ee, !0);
                      (Ie - Re) * (Ie - Ve) > 0 && (Ie = (Re + Ve) / 2), sg[de] = n._dem.set(fe, ie, Ie), wh[de] = Q;
                    }
                  }
                }
            }
          }
          v && (n._demTile.needsDEMTextureUpload = !0, n._dem._timestamp = Ct.now());
        }
        getNodesInfo() {
          return this.nodesInfo;
        }
        destroy() {
          const e = this.getNodesInfo();
          for (const n of e)
            Qp(n.node), ng(n.node);
        }
        isEmpty() {
          return !this.nodesInfo.length;
        }
        updateReplacement(e, n) {
          if (n.updateTime === this.replacementUpdateTime)
            return;
          this.replacementUpdateTime = n.updateTime;
          const o = n.getReplacementRegionsForTile(e.toUnwrapped()), u = this.getNodesInfo();
          for (let l = 0; l < this.nodesInfo.length; l++) {
            const f = u[l].node;
            u[l].hiddenByReplacement = !!f.footprint && !o.find((v) => v.footprint === f.footprint);
          }
        }
        getHeightAtTileCoord(e, n) {
          const o = this.getNodesInfo(), u = [], l = [0, 0, 0], f = De.mat4.identity([]);
          for (let v = 0; v < this.nodesInfo.length; v++) {
            const S = o[v], D = S.node.meshes[0], x = D.transformedAabb;
            if (e < x.min[0] || n < x.min[1] || e > x.max[0] || n > x.max[1])
              continue;
            if (S.node.hidden === !0)
              return { height: 1 / 0, maxHeight: S.feature.properties.height, hidden: !1, verticalScale: S.evaluatedScale[2] };
            De.mat4.invert(f, S.node.matrix), l[0] = e, l[1] = n, De.vec3.transformMat4(l, l, f);
            const P = (l[0] - D.aabb.min[0]) / (D.aabb.max[0] - D.aabb.min[0]) * bh | 0, I = Math.min(63, (l[1] - D.aabb.min[1]) / (D.aabb.max[1] - D.aabb.min[1]) * bh | 0) * bh + Math.min(63, P), M = D.heightmap[I];
            if (!(M < 0 && S.node.footprint))
              return S.hiddenByReplacement ? void 0 : { height: M, maxHeight: S.feature.properties.height, hidden: !1, verticalScale: S.evaluatedScale[2] };
            if (S.node.footprint.grid.query(new Et(e, n), new Et(e, n), u), u.length > 0)
              return { height: void 0, maxHeight: S.feature.properties.height, hidden: S.hiddenByReplacement, verticalScale: S.evaluatedScale[2] };
          }
        }
      }
      function of(r, e) {
        return !r.isLightConstant && e;
      }
      function l2(r, e, n, o, u, l, f, v) {
        let S = (61440 & e | (61440 & e) >> 4) >> 8, D = (3840 & e | (3840 & e) >> 4) >> 4, x = 240 & e | (240 & e) >> 4;
        n[3] > 0 && (S = ei(S, 255 * n[0], n[3]), D = ei(D, 255 * n[1], n[3]), x = ei(x, 255 * n[2], n[3]));
        const P = S << 8 | D, I = x << 8 | Math.floor(255 * o[3]), M = function(Q) {
          const ie = si(Q, 0, 2);
          return Math.min(Math.round(0.5 * ie * 255), 255);
        }(o[2]) << 8 | 15 * o[0] << 4 | 15 * o[1], C = si(u[0], 0, 1), k = si(u[1], 0, 1), V = si(u[2], 0, 1), U = si(u[3], 0, 1);
        let q, $, H, K;
        if (C !== k && f !== l && k !== C) {
          const Q = f - l;
          $ = 1 / (Q * (k - C)), H = -(l + Q * C) / (Q * (k - C));
          const ie = si(u[4], -1, 1);
          K = Math.pow(10, ie), q = 255 * V << 8 | 255 * U;
        } else
          q = 65535, $ = 0, H = 1, K = 1;
        if (r.emplaceBack(P, I, M, q, $, H, K), v) {
          const Q = v.length;
          v.clear();
          for (let ie = 0; ie < Q; ie++)
            v.emplaceBack(P, I, M, q, $, H, K);
        }
      }
      function c2(r, e, n) {
        const o = r.node;
        let u = 0;
        const l = n & Ou.HasMeshoptCompression;
        for (const f of o.meshes) {
          if (o.lights && o.lightMeshIndex === u || !f.featureData)
            continue;
          f.featureArray = new lh(), f.featureArray.reserve(f.featureData.length);
          let v = e;
          for (const S of f.featureData) {
            const D = l ? 65535 & S : S >> 16 & 65535, x = l ? S >> 16 & 65535 : 65535 & S, P = (15 & x) < 8 ? 15 & x : 0, I = r.evaluatedRMEA[P], M = r.evaluatedColor[P], C = r.emissionHeightBasedParams[P];
            let k;
            if (v && P === 2 && o.lights && (k = new lh(), k.resize(10 * o.lights.length)), l2(f.featureArray, D, M, I, C, f.aabb.min[2], f.aabb.max[2], k), k && v) {
              v = !1;
              const V = o.meshes[o.lightMeshIndex];
              V.featureArray = k, V.featureArray._trim();
            }
          }
          f.featureArray._trim(), u++;
        }
      }
      function Wx(r, e, n, o) {
        const u = 1 << r.z;
        e.lat = Os((o / Tt + r.y) / u), e.lng = Fr((n / Tt + r.x) / u);
      }
      Ft(em, "Tiled3dModelBucket", { omit: ["layers"] }), Ft(qx, "Tiled3dModelFeature");
      const h2 = { circle: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: Ge || (Ge = new Bn({ "circle-sort-key": new Dt($e.layout_circle["circle-sort-key"]), visibility: new yt($e.layout_circle.visibility) })), paint: lt || (lt = new Bn({ "circle-radius": new Dt($e.paint_circle["circle-radius"]), "circle-color": new Dt($e.paint_circle["circle-color"]), "circle-blur": new Dt($e.paint_circle["circle-blur"]), "circle-opacity": new Dt($e.paint_circle["circle-opacity"]), "circle-translate": new yt($e.paint_circle["circle-translate"]), "circle-translate-anchor": new yt($e.paint_circle["circle-translate-anchor"]), "circle-pitch-scale": new yt($e.paint_circle["circle-pitch-scale"]), "circle-pitch-alignment": new yt($e.paint_circle["circle-pitch-alignment"]), "circle-stroke-width": new Dt($e.paint_circle["circle-stroke-width"]), "circle-stroke-color": new Dt($e.paint_circle["circle-stroke-color"]), "circle-stroke-opacity": new Dt($e.paint_circle["circle-stroke-opacity"]), "circle-emissive-strength": new yt($e.paint_circle["circle-emissive-strength"]), "circle-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "circle-stroke-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o);
        }
        createBucket(r) {
          return new ee(r);
        }
        queryRadius(r) {
          const e = r;
          return Ne("circle-radius", this, e) + Ne("circle-stroke-width", this, e) + st(this.paint.get("circle-translate"));
        }
        queryIntersectsFeature(r, e, n, o, u, l, f, v) {
          const S = xt(this.paint.get("circle-translate"), this.paint.get("circle-translate-anchor"), l.angle, r.pixelToTileUnitsFactor), D = this.paint.get("circle-radius").evaluate(e, n) + this.paint.get("circle-stroke-width").evaluate(e, n);
          return Au(r, o, l, f, v, this.paint.get("circle-pitch-alignment") === "map", this.paint.get("circle-pitch-scale") === "map", S, D);
        }
        getProgramIds() {
          return ["circle"];
        }
        getDefaultProgramParams(r, e, n) {
          const o = Pu(this);
          return { config: new Cl(this, { zoom: e, lut: n }), defines: o, overrideFog: !1 };
        }
      }, heatmap: class extends wr {
        createBucket(r) {
          return new Sy(r);
        }
        constructor(r, e, n, o) {
          super(r, { layout: Ey || (Ey = new Bn({ visibility: new yt($e.layout_heatmap.visibility) })), paint: Py || (Py = new Bn({ "heatmap-radius": new Dt($e.paint_heatmap["heatmap-radius"]), "heatmap-weight": new Dt($e.paint_heatmap["heatmap-weight"]), "heatmap-intensity": new yt($e.paint_heatmap["heatmap-intensity"]), "heatmap-color": new Wa($e.paint_heatmap["heatmap-color"]), "heatmap-opacity": new yt($e.paint_heatmap["heatmap-opacity"]), "heatmap-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o), this._updateColorRamp();
        }
        _handleSpecialPaintPropertyUpdate(r) {
          r === "heatmap-color" && this._updateColorRamp();
        }
        _updateColorRamp() {
          this.colorRamp = Bd({ expression: this._transitionablePaint._values["heatmap-color"].value.expression, evaluationKey: "heatmapDensity", image: this.colorRamp }), this.colorRampTexture = null;
        }
        resize() {
          this.heatmapFbo && (this.heatmapFbo.destroy(), this.heatmapFbo = null);
        }
        queryRadius(r) {
          return Ne("heatmap-radius", this, r);
        }
        queryIntersectsFeature(r, e, n, o, u, l, f, v) {
          const S = this.paint.get("heatmap-radius").evaluate(e, n);
          return Au(r, o, l, f, v, !0, !0, new Et(0, 0), S);
        }
        hasOffscreenPass() {
          return this.paint.get("heatmap-opacity") !== 0 && this.visibility !== "none";
        }
        getProgramIds() {
          return ["heatmap", "heatmapTexture"];
        }
        getDefaultProgramParams(r, e, n) {
          return r === "heatmap" ? { config: new Cl(this, { zoom: e, lut: n }), overrideFog: !1 } : {};
        }
      }, hillshade: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: Ay || (Ay = new Bn({ visibility: new yt($e.layout_hillshade.visibility) })), paint: Cy || (Cy = new Bn({ "hillshade-illumination-direction": new yt($e.paint_hillshade["hillshade-illumination-direction"]), "hillshade-illumination-anchor": new yt($e.paint_hillshade["hillshade-illumination-anchor"]), "hillshade-exaggeration": new yt($e.paint_hillshade["hillshade-exaggeration"]), "hillshade-shadow-color": new yt($e.paint_hillshade["hillshade-shadow-color"]), "hillshade-highlight-color": new yt($e.paint_hillshade["hillshade-highlight-color"]), "hillshade-accent-color": new yt($e.paint_hillshade["hillshade-accent-color"]), "hillshade-emissive-strength": new yt($e.paint_hillshade["hillshade-emissive-strength"]), "hillshade-shadow-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "hillshade-highlight-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "hillshade-accent-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o);
        }
        shouldRedrape() {
          return this.hasOffscreenPass() && this.paint.get("hillshade-illumination-anchor") === "viewport";
        }
        hasOffscreenPass() {
          return this.paint.get("hillshade-exaggeration") !== 0 && this.visibility !== "none";
        }
        getProgramIds() {
          return ["hillshade", "hillshadePrepare"];
        }
        getDefaultProgramParams(r, e, n) {
          return { overrideFog: !1 };
        }
      }, fill: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: By || (By = new Bn({ "fill-sort-key": new Dt($e.layout_fill["fill-sort-key"]), visibility: new yt($e.layout_fill.visibility), "fill-elevation-reference": new yt($e.layout_fill["fill-elevation-reference"]) })), paint: Ny || (Ny = new Bn({ "fill-antialias": new yt($e.paint_fill["fill-antialias"]), "fill-opacity": new Dt($e.paint_fill["fill-opacity"]), "fill-color": new Dt($e.paint_fill["fill-color"]), "fill-outline-color": new Dt($e.paint_fill["fill-outline-color"]), "fill-translate": new yt($e.paint_fill["fill-translate"]), "fill-translate-anchor": new yt($e.paint_fill["fill-translate-anchor"]), "fill-pattern": new Dt($e.paint_fill["fill-pattern"]), "fill-emissive-strength": new yt($e.paint_fill["fill-emissive-strength"]), "fill-z-offset": new Dt($e.paint_fill["fill-z-offset"]), "fill-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "fill-outline-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o);
        }
        getProgramIds() {
          const r = this.paint.get("fill-pattern"), e = r && r.constantOr(1), n = [e ? "fillPattern" : "fill"];
          return this.paint.get("fill-antialias") && n.push(e && !this.getPaintProperty("fill-outline-color") ? "fillOutlinePattern" : "fillOutline"), n;
        }
        getDefaultProgramParams(r, e, n) {
          return { config: new Cl(this, { zoom: e, lut: n }), overrideFog: !1 };
        }
        recalculate(r, e) {
          super.recalculate(r, e);
          const n = this.paint._values["fill-outline-color"];
          n.value.kind === "constant" && n.value.value === void 0 && (this.paint._values["fill-outline-color"] = this.paint._values["fill-color"]);
        }
        createBucket(r) {
          return new v_(r);
        }
        queryRadius() {
          return st(this.paint.get("fill-translate"));
        }
        queryIntersectsFeature(r, e, n, o, u, l) {
          return !r.queryGeometry.isAboveHorizon && he(ut(r.tilespaceGeometry, this.paint.get("fill-translate"), this.paint.get("fill-translate-anchor"), l.angle, r.pixelToTileUnitsFactor), o);
        }
        isTileClipped() {
          return !0;
        }
        is3D() {
          return this.paint.get("fill-z-offset").constantOr(1) !== 0;
        }
      }, "fill-extrusion": class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: v0 || (v0 = new Bn({ visibility: new yt($e["layout_fill-extrusion"].visibility), "fill-extrusion-edge-radius": new yt($e["layout_fill-extrusion"]["fill-extrusion-edge-radius"]) })), paint: b0 || (b0 = new Bn({ "fill-extrusion-opacity": new yt($e["paint_fill-extrusion"]["fill-extrusion-opacity"]), "fill-extrusion-color": new Dt($e["paint_fill-extrusion"]["fill-extrusion-color"]), "fill-extrusion-translate": new yt($e["paint_fill-extrusion"]["fill-extrusion-translate"]), "fill-extrusion-translate-anchor": new yt($e["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]), "fill-extrusion-pattern": new Dt($e["paint_fill-extrusion"]["fill-extrusion-pattern"]), "fill-extrusion-height": new Dt($e["paint_fill-extrusion"]["fill-extrusion-height"]), "fill-extrusion-base": new Dt($e["paint_fill-extrusion"]["fill-extrusion-base"]), "fill-extrusion-height-alignment": new yt($e["paint_fill-extrusion"]["fill-extrusion-height-alignment"]), "fill-extrusion-base-alignment": new yt($e["paint_fill-extrusion"]["fill-extrusion-base-alignment"]), "fill-extrusion-vertical-gradient": new yt($e["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"]), "fill-extrusion-ambient-occlusion-intensity": new yt($e["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-intensity"]), "fill-extrusion-ambient-occlusion-radius": new yt($e["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-radius"]), "fill-extrusion-ambient-occlusion-wall-radius": new yt($e["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-wall-radius"]), "fill-extrusion-ambient-occlusion-ground-radius": new yt($e["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-ground-radius"]), "fill-extrusion-ambient-occlusion-ground-attenuation": new yt($e["paint_fill-extrusion"]["fill-extrusion-ambient-occlusion-ground-attenuation"]), "fill-extrusion-flood-light-color": new yt($e["paint_fill-extrusion"]["fill-extrusion-flood-light-color"]), "fill-extrusion-flood-light-intensity": new yt($e["paint_fill-extrusion"]["fill-extrusion-flood-light-intensity"]), "fill-extrusion-flood-light-wall-radius": new Dt($e["paint_fill-extrusion"]["fill-extrusion-flood-light-wall-radius"]), "fill-extrusion-flood-light-ground-radius": new Dt($e["paint_fill-extrusion"]["fill-extrusion-flood-light-ground-radius"]), "fill-extrusion-flood-light-ground-attenuation": new yt($e["paint_fill-extrusion"]["fill-extrusion-flood-light-ground-attenuation"]), "fill-extrusion-vertical-scale": new yt($e["paint_fill-extrusion"]["fill-extrusion-vertical-scale"]), "fill-extrusion-rounded-roof": new yt($e["paint_fill-extrusion"]["fill-extrusion-rounded-roof"]), "fill-extrusion-cutoff-fade-range": new yt($e["paint_fill-extrusion"]["fill-extrusion-cutoff-fade-range"]), "fill-extrusion-emissive-strength": new Dt($e["paint_fill-extrusion"]["fill-extrusion-emissive-strength"]), "fill-extrusion-line-width": new Dt($e["paint_fill-extrusion"]["fill-extrusion-line-width"]), "fill-extrusion-cast-shadows": new yt($e["paint_fill-extrusion"]["fill-extrusion-cast-shadows"]), "fill-extrusion-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "fill-extrusion-flood-light-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o), this._stats = { numRenderedVerticesInShadowPass: 0, numRenderedVerticesInTransparentPass: 0 };
        }
        createBucket(r) {
          return new Ip(r);
        }
        queryRadius() {
          return st(this.paint.get("fill-extrusion-translate"));
        }
        is3D() {
          return !0;
        }
        hasShadowPass() {
          return this.paint.get("fill-extrusion-cast-shadows");
        }
        cutoffRange() {
          return this.paint.get("fill-extrusion-cutoff-fade-range");
        }
        canCastShadows() {
          return !0;
        }
        getProgramIds() {
          return [this.paint.get("fill-extrusion-pattern").constantOr(1) ? "fillExtrusionPattern" : "fillExtrusion"];
        }
        queryIntersectsFeature(r, e, n, o, u, l, f, v, S) {
          const D = xt(this.paint.get("fill-extrusion-translate"), this.paint.get("fill-extrusion-translate-anchor"), l.angle, r.pixelToTileUnitsFactor), x = this.paint.get("fill-extrusion-height").evaluate(e, n), P = this.paint.get("fill-extrusion-base").evaluate(e, n), I = [0, 0], M = v && l.elevation, C = l.elevation ? l.elevation.exaggeration() : 1, k = r.tile.getBucket(this);
          if (M && k instanceof Ip) {
            const H = k.centroidVertexArray, K = S + 1;
            K < H.length && (I[0] = H.geta_centroid_pos0(K), I[1] = H.geta_centroid_pos1(K));
          }
          if (I[0] === 0 && I[1] === 1)
            return !1;
          l.projection.name === "globe" && (o = x0([o], [new Et(0, 0), new Et(Tt, Tt)], r.tileID.canonical).map((H) => H.polygon).flat());
          const V = M ? v : null, [U, q] = function(H, K, Q, ie, fe, de, ue, Se, me, Ee, ze) {
            return H.projection.name === "globe" ? function(Ie, Re, Ve, Ue, Fe, et, dt, tt, Mt, wt, At) {
              const rt = [], Ut = [], St = Ie.projection.upVectorScale(At, Ie.center.lat, Ie.worldSize).metersToTile, Nt = [0, 0, 0, 1], Qt = [0, 0, 0, 1], pi = (Ai, yi, Ii, fn) => {
                Ai[0] = yi, Ai[1] = Ii, Ai[2] = fn, Ai[3] = 1;
              }, gi = y0();
              Ve > 0 && (Ve += gi), Ue += gi;
              for (const Ai of Re) {
                const yi = [], Ii = [];
                for (const fn of Ai) {
                  const rn = fn.x + Fe.x, hi = fn.y + Fe.y, on = Ie.projection.projectTilePoint(rn, hi, At), Qi = Ie.projection.upVector(At, fn.x, fn.y);
                  let pn = Ve, as = Ue;
                  if (dt) {
                    const ls = T0(rn, hi, Ve, Ue, dt, tt, Mt, wt);
                    pn += ls.base, as += ls.top;
                  }
                  Ve !== 0 ? pi(Nt, on.x + Qi[0] * St * pn, on.y + Qi[1] * St * pn, on.z + Qi[2] * St * pn) : pi(Nt, on.x, on.y, on.z), pi(Qt, on.x + Qi[0] * St * as, on.y + Qi[1] * St * as, on.z + Qi[2] * St * as), De.vec3.transformMat4(Nt, Nt, et), De.vec3.transformMat4(Qt, Qt, et), yi.push(new vh(Nt[0], Nt[1], Nt[2])), Ii.push(new vh(Qt[0], Qt[1], Qt[2]));
                }
                rt.push(yi), Ut.push(Ii);
              }
              return [rt, Ut];
            }(H, K, Q, ie, fe, de, ue, Se, me, Ee, ze) : ue ? function(Ie, Re, Ve, Ue, Fe, et, dt, tt, Mt) {
              const wt = [], At = [], rt = [0, 0, 0, 1];
              for (const Ut of Ie) {
                const St = [], Nt = [];
                for (const Qt of Ut) {
                  const pi = Qt.x + Ue.x, gi = Qt.y + Ue.y, Ai = T0(pi, gi, Re, Ve, et, dt, tt, Mt);
                  rt[0] = pi, rt[1] = gi, rt[2] = Ai.base, rt[3] = 1, De.vec4.transformMat4(rt, rt, Fe), rt[3] = Math.max(rt[3], 1e-5);
                  const yi = new vh(rt[0] / rt[3], rt[1] / rt[3], rt[2] / rt[3]);
                  rt[0] = pi, rt[1] = gi, rt[2] = Ai.top, rt[3] = 1, De.vec4.transformMat4(rt, rt, Fe), rt[3] = Math.max(rt[3], 1e-5);
                  const Ii = new vh(rt[0] / rt[3], rt[1] / rt[3], rt[2] / rt[3]);
                  St.push(yi), Nt.push(Ii);
                }
                wt.push(St), At.push(Nt);
              }
              return [wt, At];
            }(K, Q, ie, fe, de, ue, Se, me, Ee) : function(Ie, Re, Ve, Ue, Fe) {
              const et = [], dt = [], tt = Fe[8] * Re, Mt = Fe[9] * Re, wt = Fe[10] * Re, At = Fe[11] * Re, rt = Fe[8] * Ve, Ut = Fe[9] * Ve, St = Fe[10] * Ve, Nt = Fe[11] * Ve;
              for (const Qt of Ie) {
                const pi = [], gi = [];
                for (const Ai of Qt) {
                  const yi = Ai.x + Ue.x, Ii = Ai.y + Ue.y, fn = Fe[0] * yi + Fe[4] * Ii + Fe[12], rn = Fe[1] * yi + Fe[5] * Ii + Fe[13], hi = Fe[2] * yi + Fe[6] * Ii + Fe[14], on = Fe[3] * yi + Fe[7] * Ii + Fe[15], Qi = fn + tt, pn = rn + Mt, as = hi + wt, ls = Math.max(on + At, 1e-5), Kn = fn + rt, Vr = rn + Ut, Sn = hi + St, Ln = Math.max(on + Nt, 1e-5);
                  pi.push(new vh(Qi / ls, pn / ls, as / ls)), gi.push(new vh(Kn / Ln, Vr / Ln, Sn / Ln));
                }
                et.push(pi), dt.push(gi);
              }
              return [et, dt];
            }(K, Q, ie, fe, de);
          }(l, o, P, x, D, f, V, I, C, l.center.lat, r.tileID.canonical), $ = r.queryGeometry;
          return function(H, K, Q) {
            let ie = 1 / 0;
            he(Q, K) && (ie = w0(Q, K[0]));
            for (let fe = 0; fe < K.length; fe++) {
              const de = K[fe], ue = H[fe];
              for (let Se = 0; Se < de.length - 1; Se++) {
                const me = de[Se], Ee = [me, de[Se + 1], ue[Se + 1], ue[Se], me];
                se(Q, Ee) && (ie = Math.min(ie, w0(Q, Ee)));
              }
            }
            return ie !== 1 / 0 && ie;
          }(U, q, $.isPointQuery() ? $.screenBounds : $.screenGeometry);
        }
      }, line: class extends wr {
        constructor(r, e, n, o) {
          const u = D0();
          super(r, u, e, n, o), u.layout && (this.layout = new cc(u.layout)), this.gradientVersion = 0;
        }
        _handleSpecialPaintPropertyUpdate(r) {
          if (r === "line-gradient") {
            const e = this._transitionablePaint._values["line-gradient"].value.expression;
            this.stepInterpolant = e._styleExpression && e._styleExpression.expression instanceof Ti, this.gradientVersion = (this.gradientVersion + 1) % Number.MAX_SAFE_INTEGER;
          }
        }
        gradientExpression() {
          return this._transitionablePaint._values["line-gradient"].value.expression;
        }
        widthExpression() {
          return this._transitionablePaint._values["line-width"].value.expression;
        }
        recalculate(r, e) {
          super.recalculate(r, e), this.paint._values["line-floorwidth"] = (() => {
            if (Wd)
              return Wd;
            const n = D0();
            return Wd = new fT(n.paint.properties["line-width"].specification), Wd.useIntegerZoom = !0, Wd;
          })().possiblyEvaluate(this._transitioningPaint._values["line-width"].value, r);
        }
        createBucket(r) {
          return new I_(r);
        }
        getProgramIds() {
          return [this.paint.get("line-pattern").constantOr(1) ? "linePattern" : "line"];
        }
        getDefaultProgramParams(r, e, n) {
          const o = L0(this);
          return { config: new Cl(this, { zoom: e, lut: n }), defines: o, overrideFog: !1 };
        }
        queryRadius(r) {
          const e = r, n = k0(Ne("line-width", this, e), Ne("line-gap-width", this, e)), o = Ne("line-offset", this, e);
          return n / 2 + Math.abs(o) + st(this.paint.get("line-translate"));
        }
        queryIntersectsFeature(r, e, n, o, u, l) {
          if (r.queryGeometry.isAboveHorizon)
            return !1;
          const f = ut(r.tilespaceGeometry, this.paint.get("line-translate"), this.paint.get("line-translate-anchor"), l.angle, r.pixelToTileUnitsFactor), v = r.pixelToTileUnitsFactor / 2 * k0(this.paint.get("line-width").evaluate(e, n), this.paint.get("line-gap-width").evaluate(e, n)), S = this.paint.get("line-offset").evaluate(e, n);
          return S && (o = function(D, x) {
            const P = [], I = new Et(0, 0);
            for (let M = 0; M < D.length; M++) {
              const C = D[M], k = [];
              for (let V = 0; V < C.length; V++) {
                const U = C[V], q = C[V + 1], $ = V === 0 ? I : U.sub(C[V - 1])._unit()._perp(), H = V === C.length - 1 ? I : q.sub(U)._unit()._perp(), K = $._add(H)._unit();
                K._mult(1 / (K.x * H.x + K.y * H.y)), k.push(K._mult(x)._add(U));
              }
              P.push(k);
            }
            return P;
          }(o, S * r.pixelToTileUnitsFactor)), function(D, x, P) {
            for (let I = 0; I < x.length; I++) {
              const M = x[I];
              if (D.length >= 3) {
                for (let C = 0; C < M.length; C++)
                  if (Ae(D, M[C]))
                    return !0;
              }
              if (_e(D, M, P))
                return !0;
            }
            return !1;
          }(f, o, v);
        }
        isTileClipped() {
          return !0;
        }
        isDraped(r) {
          const e = this.layout.get("line-z-offset"), n = e.isConstant() && !e.constantOr(0), o = this.layout.get("line-elevation-reference");
          return !(o === "sea" || o === "ground") && (n || o !== "none");
        }
      }, symbol: qp, background: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: yx || (yx = new Bn({ visibility: new yt($e.layout_background.visibility) })), paint: xx || (xx = new Bn({ "background-pitch-alignment": new yt($e.paint_background["background-pitch-alignment"]), "background-color": new yt($e.paint_background["background-color"]), "background-pattern": new yt($e.paint_background["background-pattern"]), "background-opacity": new yt($e.paint_background["background-opacity"]), "background-emissive-strength": new yt($e.paint_background["background-emissive-strength"]), "background-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o);
        }
        getProgramIds() {
          return [this.paint.get("background-pattern") ? "backgroundPattern" : "background"];
        }
        getDefaultProgramParams(r, e, n) {
          return { overrideFog: !1 };
        }
        is3D() {
          return this.paint.get("background-pitch-alignment") === "viewport";
        }
      }, raster: Mx, "raster-particle": Ix, sky: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: Px || (Px = new Bn({ visibility: new yt($e.layout_sky.visibility) })), paint: Ax || (Ax = new Bn({ "sky-type": new yt($e.paint_sky["sky-type"]), "sky-atmosphere-sun": new yt($e.paint_sky["sky-atmosphere-sun"]), "sky-atmosphere-sun-intensity": new yt($e.paint_sky["sky-atmosphere-sun-intensity"]), "sky-gradient-center": new yt($e.paint_sky["sky-gradient-center"]), "sky-gradient-radius": new yt($e.paint_sky["sky-gradient-radius"]), "sky-gradient": new Wa($e.paint_sky["sky-gradient"]), "sky-atmosphere-halo-color": new yt($e.paint_sky["sky-atmosphere-halo-color"]), "sky-atmosphere-color": new yt($e.paint_sky["sky-atmosphere-color"]), "sky-opacity": new yt($e.paint_sky["sky-opacity"]), "sky-gradient-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "sky-atmosphere-halo-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }), "sky-atmosphere-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o), this._updateColorRamp();
        }
        _handleSpecialPaintPropertyUpdate(r) {
          r === "sky-gradient" ? this._updateColorRamp() : r !== "sky-atmosphere-sun" && r !== "sky-atmosphere-halo-color" && r !== "sky-atmosphere-color" && r !== "sky-atmosphere-sun-intensity" || (this._skyboxInvalidated = !0);
        }
        _updateColorRamp() {
          this.colorRamp = Bd({ expression: this._transitionablePaint._values["sky-gradient"].value.expression, evaluationKey: "skyRadialProgress" }), this.colorRampTexture && (this.colorRampTexture.destroy(), this.colorRampTexture = null);
        }
        needsSkyboxCapture(r) {
          if (this._skyboxInvalidated || !this.skyboxTexture || !this.skyboxGeometry)
            return !0;
          if (!this.paint.get("sky-atmosphere-sun")) {
            const e = r.style.light.properties.get("position");
            return this._lightPosition.azimuthal !== e.azimuthal || this._lightPosition.polar !== e.polar;
          }
          return !1;
        }
        getCenter(r, e) {
          if (this.paint.get("sky-type") === "atmosphere") {
            const o = this.paint.get("sky-atmosphere-sun"), u = !o, l = r.style.light, f = l.properties.get("position");
            return u && l.properties.get("anchor") === "viewport" && mi("The sun direction is attached to a light with viewport anchor, lighting may behave unexpectedly."), u ? J_(f.azimuthal, 90 - f.polar, e) : J_(o[0], 90 - o[1], e);
          }
          const n = this.paint.get("sky-gradient-center");
          return J_(n[0], 90 - n[1], e);
        }
        isSky() {
          return !0;
        }
        markSkyboxValid(r) {
          this._skyboxInvalidated = !1, this._lightPosition = r.style.light.properties.get("position");
        }
        hasOffscreenPass() {
          return !0;
        }
        getProgramIds() {
          const r = this.paint.get("sky-type");
          return r === "atmosphere" ? ["skyboxCapture", "skybox"] : r === "gradient" ? ["skyboxGradient"] : null;
        }
      }, slot: class extends wr {
        constructor(r, e, n, o) {
          super(r, { paint: Cx || (Cx = new Bn({})) }, e, null);
        }
      }, model: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: Vx || (Vx = new Bn({ visibility: new yt($e.layout_model.visibility), "model-id": new Dt($e.layout_model["model-id"]) })), paint: Ux || (Ux = new Bn({ "model-opacity": new Dt($e.paint_model["model-opacity"]), "model-rotation": new Dt($e.paint_model["model-rotation"]), "model-scale": new Dt($e.paint_model["model-scale"]), "model-translation": new Dt($e.paint_model["model-translation"]), "model-color": new Dt($e.paint_model["model-color"]), "model-color-mix-intensity": new Dt($e.paint_model["model-color-mix-intensity"]), "model-type": new yt($e.paint_model["model-type"]), "model-cast-shadows": new yt($e.paint_model["model-cast-shadows"]), "model-receive-shadows": new yt($e.paint_model["model-receive-shadows"]), "model-ambient-occlusion-intensity": new yt($e.paint_model["model-ambient-occlusion-intensity"]), "model-emissive-strength": new Dt($e.paint_model["model-emissive-strength"]), "model-roughness": new Dt($e.paint_model["model-roughness"]), "model-height-based-emissive-strength-multiplier": new Dt($e.paint_model["model-height-based-emissive-strength-multiplier"]), "model-cutoff-fade-range": new yt($e.paint_model["model-cutoff-fade-range"]), "model-front-cutoff": new yt($e.paint_model["model-front-cutoff"]), "model-color-use-theme": new Dt({ type: "string", default: "default", "property-type": "data-driven" }) })) }, e, n, o), this._stats = { numRenderedVerticesInShadowPass: 0, numRenderedVerticesInTransparentPass: 0 };
        }
        createBucket(r) {
          return new tg(r);
        }
        getProgramIds() {
          return ["model"];
        }
        is3D() {
          return !0;
        }
        hasShadowPass() {
          return !0;
        }
        canCastShadows() {
          return !0;
        }
        hasLightBeamPass() {
          return !0;
        }
        cutoffRange() {
          return this.paint.get("model-cutoff-fade-range");
        }
        queryRadius(r) {
          return r instanceof em ? Tt - 1 : 0;
        }
        queryIntersectsFeature(r, e, n, o, u, l) {
          if (!this.modelManager)
            return !1;
          const f = this.modelManager, v = r.tile.getBucket(this);
          if (!(v && v instanceof tg))
            return !1;
          for (const S in v.instancesPerModel) {
            const D = v.instancesPerModel[S], x = e.id !== void 0 ? e.id : e.properties && e.properties.hasOwnProperty("id") ? e.properties.id : void 0;
            if (D.idToFeaturesIndex.hasOwnProperty(x)) {
              const P = D.features[D.idToFeaturesIndex[x]], I = f.getModel(S, this.scope);
              if (!I)
                return !1;
              let M = De.mat4.create();
              const C = new Ui(0, 0), k = v.canonical;
              let V = Number.MAX_VALUE;
              for (let U = 0; U < P.instancedDataCount; ++U) {
                const q = 16 * (P.instancedDataOffset + U), $ = D.instancedDataArray.float32, H = [$[q + 4], $[q + 5], $[q + 6]];
                Wx(k, C, $[q], 0 | $[q + 1]), jx(M, I, l, C, P.rotation, P.scale, H, !1, !1, !1), l.projection.name === "globe" && (M = eg(M, l));
                const K = De.mat4.multiply([], l.projMatrix, M), Q = r.queryGeometry, ie = Rx(Q.isPointQuery() ? Q.screenBounds : Q.screenGeometry, l, K, I.aabb);
                ie != null && (V = Math.min(ie, V));
              }
              return V !== Number.MAX_VALUE && V;
            }
          }
          return !1;
        }
        _handleOverridablePaintPropertyUpdate(r, e, n) {
          return !(!this.layout || e.isDataDriven() || n.isDataDriven() || r !== "model-color" && r !== "model-color-mix-intensity" && r !== "model-rotation" && r !== "model-scale" && r !== "model-translation" && r !== "model-emissive-strength");
        }
        _isPropertyZoomDependent(r) {
          const e = this._transitionablePaint._values[r];
          return e != null && e.value != null && e.value.expression != null && e.value.expression instanceof sc;
        }
        isZoomDependent() {
          return this._isPropertyZoomDependent("model-scale") || this._isPropertyZoomDependent("model-rotation") || this._isPropertyZoomDependent("model-translation");
        }
      }, clip: class extends wr {
        constructor(r, e, n, o) {
          super(r, { layout: Vy || (Vy = new Bn({ "clip-layer-types": new yt($e.layout_clip["clip-layer-types"]), "clip-layer-scope": new yt($e.layout_clip["clip-layer-scope"]) })), paint: Uy || (Uy = new Bn({})) }, e, n, o);
        }
        recalculate(r, e) {
          super.recalculate(r, e);
        }
        createBucket(r) {
          return new jy(r);
        }
        isTileClipped() {
          return !0;
        }
        is3D() {
          return !0;
        }
      } };
      class u2 {
        constructor(e) {
          this._callback = e, this._triggered = !1, typeof MessageChannel < "u" && (this._channel = new MessageChannel(), this._channel.port2.onmessage = () => {
            this._triggered = !1, this._callback();
          });
        }
        trigger() {
          this._triggered || (this._triggered = !0, this._channel ? this._channel.port1.postMessage(!0) : setTimeout(() => {
            this._triggered = !1, this._callback();
          }, 0));
        }
        remove() {
          this._channel = void 0, this._callback = () => {
          };
        }
      }
      class d2 {
        constructor() {
          this.tasks = {}, this.taskQueue = [], vo(["process"], this), this.invoker = new u2(this.process), this.nextId = 0;
        }
        add(e, n) {
          const o = this.nextId++, u = function({ type: l, isSymbolTile: f, zoom: v }) {
            return v = v || 0, l === "message" ? 0 : l !== "maybePrepare" || f ? l !== "parseTile" || f ? l === "parseTile" && f ? 300 - v : l === "maybePrepare" && f ? 400 - v : 500 : 200 - v : 100 - v;
          }(n);
          if (u === 0) {
            try {
              e();
            } finally {
            }
            return null;
          }
          return this.tasks[o] = { fn: e, metadata: n, priority: u, id: o }, this.taskQueue.push(o), this.invoker.trigger(), { cancel: () => {
            delete this.tasks[o];
          } };
        }
        process() {
          try {
            if (this.taskQueue = this.taskQueue.filter((o) => !!this.tasks[o]), !this.taskQueue.length)
              return;
            const e = this.pick();
            if (e === null)
              return;
            const n = this.tasks[e];
            if (delete this.tasks[e], this.taskQueue.length && this.invoker.trigger(), !n)
              return;
            n.fn();
          } finally {
          }
        }
        pick() {
          let e = null, n = 1 / 0;
          for (let u = 0; u < this.taskQueue.length; u++) {
            const l = this.tasks[this.taskQueue[u]];
            l.priority < n && (n = l.priority, e = u);
          }
          if (e === null)
            return null;
          const o = this.taskQueue[e];
          return this.taskQueue.splice(e, 1), o;
        }
        remove() {
          this.invoker.remove();
        }
      }
      class $x {
        constructor(e, n, o) {
          this.target = e, this.parent = n, this.mapId = o, this.callbacks = {}, this.cancelCallbacks = {}, vo(["receive"], this), this.target.addEventListener("message", this.receive, !1), this.scheduler = new d2();
        }
        send(e, n, o, u, l = !1, f) {
          const v = Math.round(1e18 * Math.random()).toString(36).substring(0, 10);
          o && (o.metadata = f, this.callbacks[v] = o);
          const S = /* @__PURE__ */ new Set();
          return this.target.postMessage({ id: v, type: e, hasCallback: !!o, targetMapId: u, mustQueue: l, sourceMapId: this.mapId, data: lo(n, S) }, S), { cancel: () => {
            o && delete this.callbacks[v], this.target.postMessage({ id: v, type: "<cancel>", targetMapId: u, sourceMapId: this.mapId });
          } };
        }
        receive(e) {
          const n = e.data, o = n.id;
          if (o && (!n.targetMapId || this.mapId === n.targetMapId))
            if (n.type === "<cancel>") {
              const u = this.cancelCallbacks[o];
              delete this.cancelCallbacks[o], u && u.cancel();
            } else if (n.mustQueue || Jn()) {
              const u = this.callbacks[o], l = this.scheduler.add(() => this.processTask(o, n), u && u.metadata || { type: "message" });
              l && (this.cancelCallbacks[o] = l);
            } else
              this.processTask(o, n);
        }
        processTask(e, n) {
          if (delete this.cancelCallbacks[e], n.type === "<response>") {
            const o = this.callbacks[e];
            delete this.callbacks[e], o && (n.error ? o(Tl(n.error)) : o(null, Tl(n.data)));
          } else {
            const o = /* @__PURE__ */ new Set(), u = n.hasCallback ? (f, v) => {
              this.target.postMessage({ id: e, type: "<response>", sourceMapId: this.mapId, error: f ? lo(f) : null, data: lo(v, o) }, o);
            } : () => {
            }, l = Tl(n.data);
            if (this.parent[n.type])
              this.parent[n.type](n.sourceMapId, l, u);
            else if (this.parent.getWorkerSource) {
              const f = n.type.split(".");
              this.parent.getWorkerSource(n.sourceMapId, f[0], l.source, l.scope)[f[1]](l, u);
            } else
              u(new Error(`Could not find function ${n.type}`));
          }
        }
        remove() {
          this.scheduler.remove(), this.target.removeEventListener("message", this.receive, !1);
        }
      }
      var af = { workerUrl: "", workerClass: null, workerParams: void 0 };
      const rg = "mapboxgl_preloaded_worker_pool";
      class Th {
        constructor() {
          this.active = {};
        }
        acquire(e, n = Th.workerCount) {
          if (!this.workers)
            for (this.workers = []; this.workers.length < n; )
              this.workers.push(af.workerClass != null ? new af.workerClass() : new self.Worker(af.workerUrl, af.workerParams));
          return this.active[e] = !0, this.workers.slice();
        }
        release(e) {
          delete this.active[e], this.workers && this.numActive() === 0 && (this.workers.forEach((n) => {
            n.terminate();
          }), this.workers = null);
        }
        isPreloaded() {
          return !!this.active[rg];
        }
        numActive() {
          return Object.keys(this.active).length;
        }
      }
      Th.workerCount = 2;
      class Bu {
        constructor(e, n, o = "Worker", u = Th.workerCount) {
          this.workerPool = e, this.actors = [], this.currentActor = 0, this.id = yo();
          const l = this.workerPool.acquire(this.id, u);
          for (let f = 0; f < l.length; f++) {
            const v = new Bu.Actor(l[f], n, this.id);
            v.name = `${o} ${f}`, this.actors.push(v);
          }
          this.ready = !1, this.broadcast("checkIfReady", null, () => {
            this.ready = !0;
          });
        }
        broadcast(e, n, o) {
          Rn(this.actors, (u, l) => {
            u.send(e, n, l);
          }, o = o || function() {
          });
        }
        getActor() {
          return this.currentActor = (this.currentActor + 1) % this.actors.length, this.actors[this.currentActor];
        }
        remove() {
          this.actors.forEach((e) => {
            e.remove();
          }), this.actors = [], this.workerPool.release(this.id);
        }
      }
      let lf, og;
      function tm() {
        return lf || (lf = new Th()), lf;
      }
      Bu.Actor = $x;
      const ag = new ki(0, 0, 0);
      var im = ((r) => (r[r.PATH_RULE_UNSPECIFIED = 0] = "PATH_RULE_UNSPECIFIED", r[r.PATH_RULE_NON_ZERO = 1] = "PATH_RULE_NON_ZERO", r[r.PATH_RULE_EVEN_ODD = 2] = "PATH_RULE_EVEN_ODD", r))(im || {}), nm = ((r) => (r[r.LINE_CAP_UNSPECIFIED = 0] = "LINE_CAP_UNSPECIFIED", r[r.LINE_CAP_BUTT = 1] = "LINE_CAP_BUTT", r[r.LINE_CAP_ROUND = 2] = "LINE_CAP_ROUND", r[r.LINE_CAP_SQUARE = 3] = "LINE_CAP_SQUARE", r))(nm || {}), cf = ((r) => (r[r.LINE_JOIN_UNSPECIFIED = 0] = "LINE_JOIN_UNSPECIFIED", r[r.LINE_JOIN_MITER = 1] = "LINE_JOIN_MITER", r[r.LINE_JOIN_MITER_CLIP = 2] = "LINE_JOIN_MITER_CLIP", r[r.LINE_JOIN_ROUND = 3] = "LINE_JOIN_ROUND", r[r.LINE_JOIN_BEVEL = 4] = "LINE_JOIN_BEVEL", r))(cf || {}), Xx = ((r) => (r[r.PAINT_ORDER_UNSPECIFIED = 0] = "PAINT_ORDER_UNSPECIFIED", r[r.PAINT_ORDER_FILL_AND_STROKE = 1] = "PAINT_ORDER_FILL_AND_STROKE", r[r.PAINT_ORDER_STROKE_AND_FILL = 2] = "PAINT_ORDER_STROKE_AND_FILL", r))(Xx || {}), Nu = ((r) => (r[r.PATH_COMMAND_UNSPECIFIED = 0] = "PATH_COMMAND_UNSPECIFIED", r[r.PATH_COMMAND_MOVE = 1] = "PATH_COMMAND_MOVE", r[r.PATH_COMMAND_LINE = 2] = "PATH_COMMAND_LINE", r[r.PATH_COMMAND_QUAD = 3] = "PATH_COMMAND_QUAD", r[r.PATH_COMMAND_CUBIC = 4] = "PATH_COMMAND_CUBIC", r[r.PATH_COMMAND_CLOSE = 5] = "PATH_COMMAND_CLOSE", r))(Nu || {}), Yx = ((r) => (r[r.MASK_TYPE_UNSPECIFIED = 0] = "MASK_TYPE_UNSPECIFIED", r[r.MASK_TYPE_LUMINANCE = 1] = "MASK_TYPE_LUMINANCE", r[r.MASK_TYPE_ALPHA = 2] = "MASK_TYPE_ALPHA", r))(Yx || {});
      function f2(r, e, n) {
        r === 1 && e.icons.push(function(o, u) {
          return function(l) {
            if (l.usvg_tree.height || (l.usvg_tree.height = l.usvg_tree.width), !l.metadata)
              return l;
            const { metadata: f } = l;
            if (f.content_area) {
              const { content_area: v } = f;
              v.top == null && (v.top = v.left), v.width == null && (v.width = l.usvg_tree.width), v.height == null && (v.height = v.width);
            }
            return f.stretch_x && f.stretch_x.length && Kx(f, "x"), f.stretch_y && f.stretch_y.length && Kx(f, "y"), l;
          }(o.readFields(p2, { name: void 0 }, u));
        }(n, n.readVarint() + n.pos));
      }
      function Kx(r, e) {
        const n = [], o = r[`stretch_${e}`];
        let u = null;
        for (let l = 0; l < o.length; l++)
          u === null ? u = n.length === 0 ? o[0] : n[n.length - 1][1] + o[l] : (n.push([u, u + o[l]]), u = null);
        r[`stretch_${e}_areas`] = n;
      }
      function p2(r, e, n) {
        r === 1 ? e.name = n.readString() : r === 2 ? e.metadata = function(o, u) {
          return o.readFields(m2, { stretch_x: null, stretch_y: null, stretch_x_areas: null, stretch_y_areas: null, variables: [] }, u);
        }(n, n.readVarint() + n.pos) : r === 3 && (e.usvg_tree = function(o, u) {
          return o.readFields(y2, { width: 20, children: [], linear_gradients: [], radial_gradients: [], clip_paths: [], masks: [] }, u);
        }(n, n.readVarint() + n.pos), e.data = "usvg_tree");
      }
      function m2(r, e, n) {
        r === 1 ? e.stretch_x = n.readPackedVarint() : r === 2 ? e.stretch_y = n.readPackedVarint() : r === 3 ? e.content_area = function(o, u) {
          return o.readFields(_2, { left: 0 }, u);
        }(n, n.readVarint() + n.pos) : r === 4 && e.variables.push(function(o, u) {
          return o.readFields(g2, { name: void 0 }, u);
        }(n, n.readVarint() + n.pos));
      }
      function _2(r, e, n) {
        r === 1 ? e.left = n.readVarint() : r === 2 ? e.width = n.readVarint() : r === 3 ? e.top = n.readVarint() : r === 4 && (e.height = n.readVarint());
      }
      function g2(r, e, n) {
        r === 1 ? e.name = n.readString() : r === 2 && (e.rgb_color = om(n.readVarint()), e.value = "rgb_color");
      }
      function y2(r, e, n) {
        r === 1 ? e.width = e.height = n.readVarint() : r === 2 ? e.height = n.readVarint() : r === 3 ? e.children.push(sm(n, n.readVarint() + n.pos)) : r === 4 ? e.linear_gradients.push(function(o, u) {
          return o.readFields(S2, { spread_method: 1, stops: [], x1: 0, y1: 0, x2: 1, y2: 0 }, u);
        }(n, n.readVarint() + n.pos)) : r === 5 ? e.radial_gradients.push(function(o, u) {
          return o.readFields(P2, { spread_method: 1, stops: [], cx: 0.5, cy: 0.5, r: 0.5, fx: 0.5, fy: 0.5, fr: 0 }, u);
        }(n, n.readVarint() + n.pos)) : r === 7 ? e.clip_paths.push(function(o, u) {
          return o.readFields(A2, { children: [] }, u);
        }(n, n.readVarint() + n.pos)) : r === 8 && e.masks.push(function(o, u) {
          const l = o.readFields(C2, { left: 0, width: 20, mask_type: 1, children: [] }, u);
          return l.height == null && (l.height = l.width), l.top == null && (l.top = l.left), l;
        }(n, n.readVarint() + n.pos));
      }
      function sm(r, e) {
        return r.readFields(x2, {}, e);
      }
      function x2(r, e, n) {
        r === 1 ? (e.group = function(o, u) {
          return o.readFields(v2, { opacity: 255, children: [] }, u);
        }(n, n.readVarint() + n.pos), e.node = "group") : r === 2 && (e.path = function(o, u) {
          return o.readFields(w2, { paint_order: 1, commands: [], step: 1, diffs: [], rule: 1 }, u);
        }(n, n.readVarint() + n.pos), e.node = "path");
      }
      function v2(r, e, n) {
        r === 1 ? e.transform = rm(n, n.readVarint() + n.pos) : r === 2 ? e.opacity = n.readVarint() : r === 5 ? e.clip_path_idx = n.readVarint() : r === 6 ? e.mask_idx = n.readVarint() : r === 7 && e.children.push(sm(n, n.readVarint() + n.pos));
      }
      function rm(r, e) {
        return r.readFields(b2, { sx: 1, ky: 0, kx: 0, sy: 1, tx: 0, ty: 0 }, e);
      }
      function b2(r, e, n) {
        r === 1 ? e.sx = n.readFloat() : r === 2 ? e.ky = n.readFloat() : r === 3 ? e.kx = n.readFloat() : r === 4 ? e.sy = n.readFloat() : r === 5 ? e.tx = n.readFloat() : r === 6 && (e.ty = n.readFloat());
      }
      function w2(r, e, n) {
        r === 1 ? e.fill = function(o, u) {
          return o.readFields(T2, { rgb_color: ag, paint: "rgb_color", opacity: 255 }, u);
        }(n, n.readVarint() + n.pos) : r === 2 ? e.stroke = function(o, u) {
          return o.readFields(M2, { rgb_color: ag, paint: "rgb_color", dasharray: [], dashoffset: 0, miterlimit: 4, opacity: 255, width: 1, linecap: 1, linejoin: 1 }, u);
        }(n, n.readVarint() + n.pos) : r === 3 ? e.paint_order = n.readVarint() : r === 5 ? n.readPackedVarint(e.commands) : r === 6 ? e.step = n.readFloat() : r === 7 ? n.readPackedSVarint(e.diffs) : r === 8 && (e.rule = n.readVarint());
      }
      function T2(r, e, n) {
        r === 1 ? (e.rgb_color = om(n.readVarint()), e.paint = "rgb_color") : r === 2 ? (e.linear_gradient_idx = n.readVarint(), e.paint = "linear_gradient_idx") : r === 3 ? (e.radial_gradient_idx = n.readVarint(), e.paint = "radial_gradient_idx") : r === 5 && (e.opacity = n.readVarint());
      }
      function om(r) {
        return new ki((r >> 16 & 255) / 255, (r >> 8 & 255) / 255, (255 & r) / 255, 1);
      }
      function M2(r, e, n) {
        r === 1 ? (e.rgb_color = om(n.readVarint()), e.paint = "rgb_color") : r === 2 ? (e.linear_gradient_idx = n.readVarint(), e.paint = "linear_gradient_idx") : r === 3 ? (e.radial_gradient_idx = n.readVarint(), e.paint = "radial_gradient_idx") : r === 5 ? n.readPackedFloat(e.dasharray) : r === 6 ? e.dashoffset = n.readFloat() : r === 7 ? e.miterlimit = n.readFloat() : r === 8 ? e.opacity = n.readVarint() : r === 9 ? e.width = n.readFloat() : r === 10 ? e.linecap = n.readVarint() : r === 11 && (e.linejoin = n.readVarint());
      }
      function S2(r, e, n) {
        r === 1 ? e.transform = rm(n, n.readVarint() + n.pos) : r === 2 ? e.spread_method = n.readVarint() : r === 3 ? e.stops.push(Jx(n, n.readVarint() + n.pos)) : r === 4 ? e.x1 = n.readFloat() : r === 5 ? e.y1 = n.readFloat() : r === 6 ? e.x2 = n.readFloat() : r === 7 && (e.y2 = n.readFloat());
      }
      function Jx(r, e) {
        return r.readFields(E2, { offset: 0, opacity: 255, rgb_color: ag }, e);
      }
      function E2(r, e, n) {
        r === 1 ? e.offset = n.readFloat() : r === 2 ? e.opacity = n.readVarint() : r === 3 && (e.rgb_color = om(n.readVarint()));
      }
      function P2(r, e, n) {
        r === 1 ? e.transform = rm(n, n.readVarint() + n.pos) : r === 2 ? e.spread_method = n.readVarint() : r === 3 ? e.stops.push(Jx(n, n.readVarint() + n.pos)) : r === 4 ? e.cx = n.readFloat() : r === 5 ? e.cy = n.readFloat() : r === 6 ? e.r = n.readFloat() : r === 7 ? e.fx = n.readFloat() : r === 8 ? e.fy = n.readFloat() : r === 9 && (e.fr = n.readFloat());
      }
      function A2(r, e, n) {
        r === 1 ? e.transform = rm(n, n.readVarint() + n.pos) : r === 2 ? e.clip_path_idx = n.readVarint() : r === 3 && e.children.push(sm(n, n.readVarint() + n.pos));
      }
      function C2(r, e, n) {
        r === 1 ? e.left = e.top = n.readFloat() : r === 2 ? e.width = e.height = n.readFloat() : r === 3 ? e.top = n.readFloat() : r === 4 ? e.height = n.readFloat() : r === 5 ? e.mask_type = n.readVarint() : r === 6 ? e.mask_idx = n.readVarint() : r === 7 && e.children.push(sm(n, n.readVarint() + n.pos));
      }
      class I2 {
        static calculate(e, n) {
          const o = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
          if (Object.keys(e).length === 0)
            return o;
          n.forEach((l) => {
            u.set(l.name, l.rgb_color || new ki(0, 0, 0));
          });
          for (const [l, f] of Object.entries(e))
            u.has(l) ? o.set(u.get(l).toStringPremultipliedAlpha(), f) : console.warn(`Ignoring unknown image variable "${l}"`);
          return o;
        }
      }
      function Vu(r, e = 255, n) {
        const o = e / 255, u = r.toStringPremultipliedAlpha(), l = n.has(u) ? n.get(u).clone() : r.clone();
        return l.a = o, l.toString();
      }
      function lg(r, e) {
        if (!mt()) {
          const n = document.createElement("canvas");
          return n.width = r, n.height = e, n;
        }
        return new OffscreenCanvas(r, e);
      }
      function L2(r, e) {
        const n = I2.calculate(e.params, r.metadata ? r.metadata.variables : []), o = r.usvg_tree, u = o.width, l = o.height, f = e.transform ? e.transform : new DOMMatrix(), v = Math.max(1, Math.round(u * f.a)), S = Math.max(1, Math.round(l * f.d)), D = new DOMMatrix([v / u, 0, 0, S / l, 0, 0]), x = lg(v, S).getContext("2d");
        return cg(x, D, o, o, n), x.getImageData(0, 0, v, S);
      }
      function cg(r, e, n, o, u) {
        for (const l of o.children)
          Qx(r, e, n, l, u);
      }
      function Qx(r, e, n, o, u) {
        o.group ? (r.save(), function(l, f, v, S, D) {
          const x = S.mask_idx != null ? v.masks[S.mask_idx] : null, P = S.clip_path_idx != null ? v.clip_paths[S.clip_path_idx] : null;
          if (S.transform && (f = hf(S.transform).preMultiplySelf(f)), !function(C, k, V) {
            return C.opacity !== 255 || k || V;
          }(S, P != null, x != null))
            return void cg(l, f, v, S, D);
          const I = lg(l.canvas.width, l.canvas.height), M = I.getContext("2d");
          P && sv(M, f, v, P), cg(M, f, v, S, D), x && rv(M, f, v, x, D), l.globalAlpha = S.opacity / 255, l.drawImage(I, 0, 0);
        }(r, e, n, o.group, u), r.restore()) : o.path && (r.save(), function(l, f, v, S, D) {
          const x = ov(S);
          l.setTransform(f), S.paint_order === Xx.PAINT_ORDER_FILL_AND_STROKE ? (ev(l, v, S, x, D), tv(l, v, S, x, D)) : (tv(l, v, S, x, D), ev(l, v, S, x, D));
        }(r, e, n, o.path, u), r.restore());
      }
      function ev(r, e, n, o, u) {
        const l = n.fill;
        if (!l)
          return;
        const f = l.opacity / 255;
        switch (l.paint) {
          case "rgb_color":
            r.fillStyle = Vu(l.rgb_color, l.opacity, u);
            break;
          case "linear_gradient_idx":
            r.fillStyle = iv(r, e.linear_gradients[l.linear_gradient_idx], f, u);
            break;
          case "radial_gradient_idx":
            r.fillStyle = nv(r, e.radial_gradients[l.radial_gradient_idx], f, u);
        }
        let v;
        switch (n.rule) {
          case im.PATH_RULE_NON_ZERO:
            v = "nonzero";
            break;
          case im.PATH_RULE_EVEN_ODD:
            v = "evenodd";
        }
        r.fill(o, v);
      }
      function tv(r, e, n, o, u) {
        const l = n.stroke;
        if (!l)
          return;
        r.lineWidth = l.width, r.miterLimit = l.miterlimit, r.setLineDash(l.dasharray), r.lineDashOffset = l.dashoffset;
        const f = l.opacity / 255;
        switch (l.paint) {
          case "rgb_color":
            r.strokeStyle = Vu(l.rgb_color, l.opacity, u);
            break;
          case "linear_gradient_idx":
            r.strokeStyle = iv(r, e.linear_gradients[l.linear_gradient_idx], f, u);
            break;
          case "radial_gradient_idx":
            r.strokeStyle = nv(r, e.radial_gradients[l.radial_gradient_idx], f, u);
        }
        switch (l.linejoin) {
          case cf.LINE_JOIN_MITER_CLIP:
          case cf.LINE_JOIN_MITER:
            r.lineJoin = "miter";
            break;
          case cf.LINE_JOIN_ROUND:
            r.lineJoin = "round";
            break;
          case cf.LINE_JOIN_BEVEL:
            r.lineJoin = "bevel";
        }
        switch (l.linecap) {
          case nm.LINE_CAP_BUTT:
            r.lineCap = "butt";
            break;
          case nm.LINE_CAP_ROUND:
            r.lineCap = "round";
            break;
          case nm.LINE_CAP_SQUARE:
            r.lineCap = "square";
        }
        r.stroke(o);
      }
      function iv(r, e, n, o) {
        if (e.stops.length === 1) {
          const I = e.stops[0];
          return Vu(I.rgb_color, I.opacity * n, o);
        }
        const u = hf(e.transform), { x1: l, y1: f, x2: v, y2: S } = e, D = u.transformPoint(new DOMPoint(l, f)), x = u.transformPoint(new DOMPoint(v, S)), P = r.createLinearGradient(D.x, D.y, x.x, x.y);
        for (const I of e.stops)
          P.addColorStop(I.offset, Vu(I.rgb_color, I.opacity * n, o));
        return P;
      }
      function nv(r, e, n, o) {
        if (e.stops.length === 1) {
          const I = e.stops[0];
          return Vu(I.rgb_color, I.opacity * n, o);
        }
        const u = hf(e.transform), { fx: l, fy: f, cx: v, cy: S } = e, D = u.transformPoint(new DOMPoint(l, f)), x = u.transformPoint(new DOMPoint(v, S)), P = r.createRadialGradient(D.x, D.y, 0, x.x, x.y, e.r * ((u.a + u.d) / 2));
        for (const I of e.stops)
          P.addColorStop(I.offset, Vu(I.rgb_color, I.opacity * n, o));
        return P;
      }
      function sv(r, e, n, o) {
        const u = hf(o.transform).preMultiplySelf(e), l = o.clip_path_idx != null ? n.clip_paths[o.clip_path_idx] : null;
        l && sv(r, u, n, l);
        const f = new Path2D();
        let v;
        function S(D, x) {
          if (D.path) {
            const P = D.path;
            f.addPath(ov(P), x), P.rule === im.PATH_RULE_EVEN_ODD && (v = "evenodd");
          } else if (D.group) {
            const P = D.group.transform ? hf(D.group.transform).preMultiplySelf(x) : x;
            for (const I of D.group.children)
              S(I, P);
          }
        }
        for (const D of o.children)
          S(D, u);
        r.clip(f, v);
      }
      function rv(r, e, n, o, u) {
        if (o.children.length === 0)
          return;
        const l = o.mask_idx != null ? n.masks[o.mask_idx] : null;
        l && rv(r, e, n, l, u);
        const f = r.canvas.width, v = r.canvas.height, S = lg(f, v), D = S.getContext("2d"), x = o.width, P = o.height, I = o.left, M = o.top, C = new Path2D(), k = new Path2D();
        k.rect(I, M, x, P), C.addPath(k, e), D.clip(C);
        for (const q of o.children)
          Qx(D, e, n, q, u);
        const V = D.getImageData(0, 0, f, v), U = V.data;
        if (o.mask_type === Yx.MASK_TYPE_LUMINANCE)
          for (let q = 0; q < U.length; q += 4)
            U[q + 3] = U[q + 3] / 255 * (0.2126 * U[q] + 0.7152 * U[q + 1] + 0.0722 * U[q + 2]);
        D.putImageData(V, 0, 0), r.globalCompositeOperation = "destination-in", r.drawImage(S, 0, 0);
      }
      function hf(r) {
        return r ? new DOMMatrix([r.sx, r.ky, r.kx, r.sy, r.tx, r.ty]) : new DOMMatrix();
      }
      function ov(r) {
        const e = new Path2D(), n = r.step;
        let o = r.diffs[0] * n, u = r.diffs[1] * n;
        e.moveTo(o, u);
        for (let l = 0, f = 2; l < r.commands.length; l++)
          switch (r.commands[l]) {
            case Nu.PATH_COMMAND_MOVE:
              o += r.diffs[f++] * n, u += r.diffs[f++] * n, e.moveTo(o, u);
              break;
            case Nu.PATH_COMMAND_LINE:
              o += r.diffs[f++] * n, u += r.diffs[f++] * n, e.lineTo(o, u);
              break;
            case Nu.PATH_COMMAND_QUAD: {
              const v = o + r.diffs[f++] * n, S = u + r.diffs[f++] * n;
              o = v + r.diffs[f++] * n, u = S + r.diffs[f++] * n, e.quadraticCurveTo(v, S, o, u);
              break;
            }
            case Nu.PATH_COMMAND_CUBIC: {
              const v = o + r.diffs[f++] * n, S = u + r.diffs[f++] * n, D = v + r.diffs[f++] * n, x = S + r.diffs[f++] * n;
              o = D + r.diffs[f++] * n, u = x + r.diffs[f++] * n, e.bezierCurveTo(v, S, D, x, o, u);
              break;
            }
            case Nu.PATH_COMMAND_CLOSE:
              e.closePath();
          }
        return e;
      }
      class hg {
        constructor(e) {
          this.capacity = e, this.cache = /* @__PURE__ */ new Map();
        }
        get(e) {
          if (!this.cache.has(e))
            return;
          const n = this.cache.get(e);
          return this.cache.delete(e), this.cache.set(e, n), n;
        }
        put(e, n) {
          this.cache.has(e) ? this.cache.delete(e) : this.cache.size === this.capacity && this.cache.delete(this.cache.keys().next().value), this.cache.set(e, n);
        }
        delete(e) {
          this.cache.delete(e);
        }
      }
      class ug {
        constructor() {
          this.cacheMap = /* @__PURE__ */ new Map(), this.cacheDependenciesMap = /* @__PURE__ */ new Map();
        }
        static _getImage(e) {
          return new _r(e, e.data);
        }
        getFromCache(e, n, o) {
          return this.cacheMap.has(o) || this.cacheMap.set(o, new hg(150)), this.cacheMap.get(o).get(Io(e.serialize(), n));
        }
        setInCache(e, n, o, u) {
          this.cacheDependenciesMap.has(u) || this.cacheDependenciesMap.set(u, /* @__PURE__ */ new Map()), this.cacheMap.has(u) || this.cacheMap.set(u, new hg(150));
          const l = this.cacheDependenciesMap.get(u);
          l.get(Io(e.id, o)) || l.set(Io(e.id, o), /* @__PURE__ */ new Set());
          const f = this.cacheMap.get(u), v = e.serialize();
          l.get(Io(e.id, o)).add(v), f.put(Io(e.serialize(), o), n);
        }
        removeImagesFromCacheByIds(e, n, o = "") {
          if (!this.cacheMap.has(o) || !this.cacheDependenciesMap.has(o))
            return;
          const u = this.cacheMap.get(o), l = this.cacheDependenciesMap.get(o);
          for (const f of e)
            if (l.has(Io(f, n))) {
              for (const v of l.get(Io(f, n)))
                u.delete(v);
              l.delete(Io(f, n));
            }
        }
        rasterize(e, n, o, u, l = L2) {
          const f = this.getFromCache(e, o, u);
          if (f)
            return f.clone();
          const v = l(n.icon, e.options), S = ug._getImage(v);
          return this.setInCache(e, S, o, u), S.clone();
        }
      }
      class av {
        constructor(e) {
          this.size = e, this.minimums = [], this.maximums = [], this.leaves = [];
        }
        getElevation(e, n) {
          const o = this.toIdx(e, n);
          return { min: this.minimums[o], max: this.maximums[o] };
        }
        isLeaf(e, n) {
          return this.leaves[this.toIdx(e, n)];
        }
        toIdx(e, n) {
          return n * this.size + e;
        }
      }
      function lv(r, e, n, o) {
        let u = 0, l = Number.MAX_VALUE;
        for (let f = 0; f < 3; f++)
          if (Math.abs(o[f]) < 1e-15) {
            if (n[f] < r[f] || n[f] > e[f])
              return null;
          } else {
            const v = 1 / o[f];
            let S = (r[f] - n[f]) * v, D = (e[f] - n[f]) * v;
            if (S > D) {
              const x = S;
              S = D, D = x;
            }
            if (S > u && (u = S), D < l && (l = D), u > l)
              return null;
          }
        return u;
      }
      function cv(r, e, n, o, u, l, f, v, S, D, x) {
        const P = o - r, I = u - e, M = l - n, C = f - r, k = v - e, V = S - n, U = x[1] * V - x[2] * k, q = x[2] * C - x[0] * V, $ = x[0] * k - x[1] * C, H = P * U + I * q + M * $;
        if (Math.abs(H) < 1e-15)
          return null;
        const K = 1 / H, Q = D[0] - r, ie = D[1] - e, fe = D[2] - n, de = (Q * U + ie * q + fe * $) * K;
        if (de < 0 || de > 1)
          return null;
        const ue = ie * M - fe * I, Se = fe * P - Q * M, me = Q * I - ie * P, Ee = (x[0] * ue + x[1] * Se + x[2] * me) * K;
        return Ee < 0 || de + Ee > 1 ? null : (C * ue + k * Se + V * me) * K;
      }
      function hv(r, e, n) {
        return (r - e) / (n - e);
      }
      function uv(r, e, n, o, u, l, f, v, S) {
        const D = 1 << n, x = l - o, P = f - u, I = (r + 1) / D * x + o, M = (e + 0) / D * P + u, C = (e + 1) / D * P + u;
        v[0] = (r + 0) / D * x + o, v[1] = M, S[0] = I, S[1] = C;
      }
      class dv {
        constructor(e) {
          if (this.maximums = [], this.minimums = [], this.leaves = [], this.childOffsets = [], this.nodeCount = 0, this.dem = e, this._siblingOffset = [[0, 0], [1, 0], [0, 1], [1, 1]], !this.dem)
            return;
          const n = function(l) {
            const f = Math.ceil(Math.log2(l.dim / 8)), v = [];
            let S = Math.ceil(Math.pow(2, f));
            const D = 1 / S, x = (M, C, k, V, U) => {
              const q = V ? 1 : 0, $ = (M + 1) * k - q, H = C * k, K = (C + 1) * k - q;
              U[0] = M * k, U[1] = H, U[2] = $, U[3] = K;
            };
            let P = new av(S);
            const I = [];
            for (let M = 0; M < S * S; M++) {
              x(M % S, Math.floor(M / S), D, !1, I);
              const C = Tc(I[0], I[1], l), k = Tc(I[2], I[1], l), V = Tc(I[2], I[3], l), U = Tc(I[0], I[3], l);
              P.minimums.push(Math.min(C, k, V, U)), P.maximums.push(Math.max(C, k, V, U)), P.leaves.push(1);
            }
            for (v.push(P), S /= 2; S >= 1; S /= 2) {
              const M = v[v.length - 1];
              P = new av(S);
              for (let C = 0; C < S * S; C++) {
                x(C % S, Math.floor(C / S), 2, !0, I);
                const k = M.getElevation(I[0], I[1]), V = M.getElevation(I[2], I[1]), U = M.getElevation(I[2], I[3]), q = M.getElevation(I[0], I[3]), $ = M.isLeaf(I[0], I[1]), H = M.isLeaf(I[2], I[1]), K = M.isLeaf(I[2], I[3]), Q = M.isLeaf(I[0], I[3]), ie = Math.min(k.min, V.min, U.min, q.min), fe = Math.max(k.max, V.max, U.max, q.max), de = $ && H && K && Q;
                P.maximums.push(fe), P.minimums.push(ie), P.leaves.push(fe - ie <= 5 && de ? 1 : 0);
              }
              v.push(P);
            }
            return v;
          }(this.dem), o = n.length - 1, u = n[o];
          this._addNode(u.minimums[0], u.maximums[0], u.leaves[0]), this._construct(n, 0, 0, o, 0);
        }
        raycastRoot(e, n, o, u, l, f, v = 1) {
          return lv([e, n, -100], [o, u, this.maximums[0] * v], l, f);
        }
        raycast(e, n, o, u, l, f, v = 1) {
          if (!this.nodeCount)
            return null;
          const S = this.raycastRoot(e, n, o, u, l, f, v);
          if (S == null)
            return null;
          const D = [], x = [], P = [], I = [], M = [{ idx: 0, t: S, nodex: 0, nodey: 0, depth: 0 }];
          for (; M.length > 0; ) {
            const { idx: C, t: k, nodex: V, nodey: U, depth: q } = M.pop();
            if (this.leaves[C]) {
              uv(V, U, q, e, n, o, u, P, I);
              const H = 1 << q, K = (V + 0) / H, Q = (V + 1) / H, ie = (U + 0) / H, fe = (U + 1) / H, de = Tc(K, ie, this.dem) * v, ue = Tc(Q, ie, this.dem) * v, Se = Tc(Q, fe, this.dem) * v, me = Tc(K, fe, this.dem) * v, Ee = cv(P[0], P[1], de, I[0], P[1], ue, I[0], I[1], Se, l, f), ze = cv(I[0], I[1], Se, P[0], I[1], me, P[0], P[1], de, l, f), Ie = Math.min(Ee !== null ? Ee : Number.MAX_VALUE, ze !== null ? ze : Number.MAX_VALUE);
              if (Ie !== Number.MAX_VALUE)
                return Ie;
              {
                const Re = De.vec3.scaleAndAdd([], l, f, k);
                if (fv(de, ue, me, Se, hv(Re[0], P[0], I[0]), hv(Re[1], P[1], I[1])) >= Re[2])
                  return k;
              }
              continue;
            }
            let $ = 0;
            for (let H = 0; H < this._siblingOffset.length; H++) {
              uv((V << 1) + this._siblingOffset[H][0], (U << 1) + this._siblingOffset[H][1], q + 1, e, n, o, u, P, I), P[2] = -100, I[2] = this.maximums[this.childOffsets[C] + H] * v;
              const K = lv(P, I, l, f);
              if (K != null) {
                const Q = K;
                D[H] = Q;
                let ie = !1;
                for (let fe = 0; fe < $ && !ie; fe++)
                  Q >= D[x[fe]] && (x.splice(fe, 0, H), ie = !0);
                ie || (x[$] = H), $++;
              }
            }
            for (let H = 0; H < $; H++) {
              const K = x[H];
              M.push({ idx: this.childOffsets[C] + K, t: D[K], nodex: (V << 1) + this._siblingOffset[K][0], nodey: (U << 1) + this._siblingOffset[K][1], depth: q + 1 });
            }
          }
          return null;
        }
        _addNode(e, n, o) {
          return this.minimums.push(e), this.maximums.push(n), this.leaves.push(o), this.childOffsets.push(0), this.nodeCount++;
        }
        _construct(e, n, o, u, l) {
          if (e[u].isLeaf(n, o) === 1)
            return;
          this.childOffsets[l] || (this.childOffsets[l] = this.nodeCount);
          const f = u - 1, v = e[f];
          let S = 0, D = 0;
          for (let x = 0; x < this._siblingOffset.length; x++) {
            const P = 2 * n + this._siblingOffset[x][0], I = 2 * o + this._siblingOffset[x][1], M = v.getElevation(P, I), C = v.isLeaf(P, I), k = this._addNode(M.min, M.max, C);
            C && (S |= 1 << x), D || (D = k);
          }
          for (let x = 0; x < this._siblingOffset.length; x++)
            S & 1 << x || this._construct(e, 2 * n + this._siblingOffset[x][0], 2 * o + this._siblingOffset[x][1], f, D + x);
        }
      }
      function fv(r, e, n, o, u, l) {
        return ei(ei(r, n, l), ei(e, o, l), u);
      }
      function Tc(r, e, n) {
        const o = n.dim, u = si(r * o - 0.5, 0, o - 1), l = si(e * o - 0.5, 0, o - 1), f = Math.floor(u), v = Math.floor(l), S = Math.min(f + 1, o - 1), D = Math.min(v + 1, o - 1);
        return fv(n.get(f, v), n.get(S, v), n.get(f, D), n.get(S, D), u - f, l - v);
      }
      const z2 = { mapbox: [6553.6, 25.6, 0.1, 1e4], terrarium: [256, 1, 1 / 256, 32768] };
      function D2(r, e, n) {
        return (256 * r * 256 + 256 * e + n) / 10 - 1e4;
      }
      function k2(r, e, n) {
        return 256 * r + e + n / 256 - 32768;
      }
      class am {
        get tree() {
          return this._tree || this._buildQuadTree(), this._tree;
        }
        constructor(e, n, o, u = !1) {
          if (this.uid = e, n.height !== n.width)
            throw new RangeError("DEM tiles must be square");
          if (o && o !== "mapbox" && o !== "terrarium")
            return void mi(`"${o}" is not a valid encoding type. Valid types include "mapbox" and "terrarium".`);
          this.stride = n.height;
          const l = this.dim = n.height - 2, f = new Uint32Array(n.data.buffer);
          if (this.pixels = new Uint8Array(n.data.buffer), this.floatView = new Float32Array(n.data.buffer), this.borderReady = u, this._modifiedForSources = {}, !u) {
            for (let S = 0; S < l; S++)
              f[this._idx(-1, S)] = f[this._idx(0, S)], f[this._idx(l, S)] = f[this._idx(l - 1, S)], f[this._idx(S, -1)] = f[this._idx(S, 0)], f[this._idx(S, l)] = f[this._idx(S, l - 1)];
            f[this._idx(-1, -1)] = f[this._idx(0, 0)], f[this._idx(l, -1)] = f[this._idx(l - 1, 0)], f[this._idx(-1, l)] = f[this._idx(0, l - 1)], f[this._idx(l, l)] = f[this._idx(l - 1, l - 1)];
          }
          const v = o === "terrarium" ? k2 : D2;
          for (let S = 0; S < f.length; ++S) {
            const D = 4 * S;
            this.floatView[S] = v(this.pixels[D], this.pixels[D + 1], this.pixels[D + 2]);
          }
          this._timestamp = Ct.now();
        }
        _buildQuadTree() {
          this._tree = new dv(this);
        }
        get(e, n, o = !1) {
          o && (e = si(e, -1, this.dim), n = si(n, -1, this.dim));
          const u = this._idx(e, n);
          return this.floatView[u];
        }
        set(e, n, o) {
          const u = this._idx(e, n), l = this.floatView[u];
          return this.floatView[u] = o, o - l;
        }
        static getUnpackVector(e) {
          return z2[e];
        }
        _idx(e, n) {
          if (e < -1 || e >= this.dim + 1 || n < -1 || n >= this.dim + 1)
            throw new RangeError("out of range source coordinates for DEM data");
          return (n + 1) * this.stride + (e + 1);
        }
        static pack(e, n) {
          const o = [0, 0, 0, 0], u = am.getUnpackVector(n);
          let l = Math.floor((e + u[3]) / u[2]);
          return o[2] = l % 256, l = Math.floor(l / 256), o[1] = l % 256, l = Math.floor(l / 256), o[0] = l, o;
        }
        getPixels() {
          return new zy({ width: this.stride, height: this.stride }, this.pixels);
        }
        backfillBorder(e, n, o) {
          if (this.dim !== e.dim)
            throw new Error("dem dimension mismatch");
          let u = n * this.dim, l = n * this.dim + this.dim, f = o * this.dim, v = o * this.dim + this.dim;
          switch (n) {
            case -1:
              u = l - 1;
              break;
            case 1:
              l = u + 1;
          }
          switch (o) {
            case -1:
              f = v - 1;
              break;
            case 1:
              v = f + 1;
          }
          const S = -n * this.dim, D = -o * this.dim;
          for (let x = f; x < v; x++)
            for (let P = u; P < l; P++) {
              const I = 4 * this._idx(P, x), M = 4 * this._idx(P + S, x + D);
              this.pixels[I + 0] = e.pixels[M + 0], this.pixels[I + 1] = e.pixels[M + 1], this.pixels[I + 2] = e.pixels[M + 2], this.pixels[I + 3] = e.pixels[M + 3];
            }
        }
        onDeserialize() {
          this._tree && (this._tree.dem = this);
        }
      }
      function R2(r, e, n) {
        r === 1 ? e.headerLength = n.readFixed32() : r === 2 ? e.x = n.readVarint() : r === 3 ? e.y = n.readVarint() : r === 4 ? e.z = n.readVarint() : r === 5 && e.layers.push(function(o, u) {
          return o.readFields(V2, { version: 0, name: "", units: "", tileSize: 0, buffer: 0, pixelFormat: 0, dataIndex: [] }, u);
        }(n, n.readVarint() + n.pos));
      }
      function O2(r, e, n) {
        r === 1 ? (e.delta_filter = function(o, u) {
          return o.readFields(F2, { blockSize: 0 }, u);
        }(n, n.readVarint() + n.pos), e.filter = "delta_filter") : r === 2 ? (n.readVarint(), e.filter = "zigzag_filter") : r === 3 ? (n.readVarint(), e.filter = "bitshuffle_filter") : r === 4 && (n.readVarint(), e.filter = "byteshuffle_filter");
      }
      function F2(r, e, n) {
        r === 1 && (e.blockSize = n.readVarint());
      }
      function B2(r, e, n) {
        r === 1 ? (n.readVarint(), e.codec = "gzip_data") : r === 2 ? (n.readVarint(), e.codec = "jpeg_image") : r === 3 ? (n.readVarint(), e.codec = "webp_image") : r === 4 && (n.readVarint(), e.codec = "png_image");
      }
      function N2(r, e, n) {
        let o = 0, u = 0;
        r === 1 ? e.firstByte = n.readFixed64() : r === 2 ? e.lastByte = n.readFixed64() : r === 3 ? e.filters.push(function(l, f) {
          return l.readFields(O2, {}, f);
        }(n, n.readVarint() + n.pos)) : r === 4 ? e.codec = function(l, f) {
          return l.readFields(B2, {}, f);
        }(n, n.readVarint() + n.pos) : r === 5 ? u = n.readFloat() : r === 6 ? o = n.readFloat() : r === 7 ? e.bands.push(n.readString()) : r === 8 ? e.offset = n.readDouble() : r === 9 && (e.scale = n.readDouble()), e.offset === 0 && (e.offset = u), e.scale === 0 && (e.scale = o);
      }
      function V2(r, e, n) {
        r === 1 ? e.version = n.readVarint() : r === 2 ? e.name = n.readString() : r === 3 ? e.units = n.readString() : r === 4 ? e.tileSize = n.readVarint() : r === 5 ? e.buffer = n.readVarint() : r === 6 ? e.pixelFormat = n.readVarint() : r === 7 && e.dataIndex.push(function(o, u) {
          return o.readFields(N2, { firstByte: 0, lastByte: 0, filters: [], codec: null, offset: 0, scale: 0, bands: [] }, u);
        }(n, n.readVarint() + n.pos));
      }
      function U2(r, e, n) {
        if (r === 2)
          (function(o, u, l) {
            o.readFields(j2, l, u);
          })(n, n.readVarint() + n.pos, e);
        else if (r === 3)
          throw new Error("Not implemented");
      }
      function j2(r, e, n) {
        if (r === 1) {
          let o = 0;
          const u = n.readVarint() + n.pos;
          for (; n.pos < u; )
            e[o++] = n.readVarint();
        }
      }
      function G2(r, e) {
        if (e.length !== 4)
          throw new Error(`Expected data of dimension 4 but got ${e.length}.`);
        let n = e[3];
        for (let o = 2; o >= 1; o--) {
          const u = o === 1 ? 1 : 0, l = o === 2 ? 1 : 0;
          for (let f = 0; f < e[0]; f++) {
            const v = e[1] * f;
            for (let S = u; S < e[1]; S++) {
              const D = e[2] * (S + v);
              for (let x = l; x < e[2]; x++) {
                const P = e[3] * (x + D);
                for (let I = 0; I < e[3]; I++) {
                  const M = P + I;
                  r[M] += r[M - n];
                }
              }
            }
          }
          n *= e[o];
        }
        return r;
      }
      function Z2(r) {
        for (let e = 0, n = r.length; e < n; e++)
          r[e] = r[e] >>> 1 ^ -(1 & r[e]);
        return r;
      }
      function H2(r, e) {
        switch (e) {
          case "uint32":
            return r;
          case "uint16":
            for (let n = 0; n < r.length; n += 2) {
              const o = r[n], u = r[n + 1];
              r[n] = (240 & o) >> 4 | (61440 & o) >> 8 | (240 & u) << 4 | 61440 & u, r[n + 1] = 15 & o | (3840 & o) >> 4 | (15 & u) << 8 | (3840 & u) << 4;
            }
            return r;
          case "uint8":
            for (let n = 0; n < r.length; n += 4) {
              const o = r[n], u = r[n + 1], l = r[n + 2], f = r[n + 3];
              r[n + 0] = (192 & o) >> 6 | (192 & u) >> 4 | (192 & l) >> 2 | 192 & f, r[n + 1] = (48 & o) >> 4 | (48 & u) >> 2 | 48 & l | (48 & f) << 2, r[n + 2] = (12 & o) >> 2 | 12 & u | (12 & l) << 2 | (12 & f) << 4, r[n + 3] = 3 & o | (3 & u) << 2 | (3 & l) << 4 | (3 & f) << 6;
            }
            return r;
          default:
            throw new Error(`Invalid pixel format, "${e}"`);
        }
      }
      Ft(am, "DEMData"), Ft(dv, "DemMinMaxQuadTree", { omit: ["dem"] });
      var Oo = Uint8Array, uf = Uint16Array, q2 = Int32Array, pv = new Oo([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0]), mv = new Oo([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0]), W2 = new Oo([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), _v = function(r, e) {
        for (var n = new uf(31), o = 0; o < 31; ++o)
          n[o] = e += 1 << r[o - 1];
        var u = new q2(n[30]);
        for (o = 1; o < 30; ++o)
          for (var l = n[o]; l < n[o + 1]; ++l)
            u[l] = l - n[o] << 5 | o;
        return { b: n, r: u };
      }, gv = _v(pv, 2), yv = gv.b, $2 = gv.r;
      yv[28] = 258, $2[258] = 28;
      for (var X2 = _v(mv, 0).b, xv = new uf(32768), os = 0; os < 32768; ++os) {
        var Uu = (43690 & os) >> 1 | (21845 & os) << 1;
        xv[os] = ((65280 & (Uu = (61680 & (Uu = (52428 & Uu) >> 2 | (13107 & Uu) << 2)) >> 4 | (3855 & Uu) << 4)) >> 8 | (255 & Uu) << 8) >> 1;
      }
      var df = function(r, e, n) {
        for (var o = r.length, u = 0, l = new uf(e); u < o; ++u)
          r[u] && ++l[r[u] - 1];
        var f, v = new uf(e);
        for (u = 1; u < e; ++u)
          v[u] = v[u - 1] + l[u - 1] << 1;
        f = new uf(1 << e);
        var S = 15 - e;
        for (u = 0; u < o; ++u)
          if (r[u])
            for (var D = u << 4 | r[u], x = e - r[u], P = v[r[u] - 1]++ << x, I = P | (1 << x) - 1; P <= I; ++P)
              f[xv[P] >> S] = D;
        return f;
      }, ff = new Oo(288);
      for (os = 0; os < 144; ++os)
        ff[os] = 8;
      for (os = 144; os < 256; ++os)
        ff[os] = 9;
      for (os = 256; os < 280; ++os)
        ff[os] = 7;
      for (os = 280; os < 288; ++os)
        ff[os] = 8;
      var vv = new Oo(32);
      for (os = 0; os < 32; ++os)
        vv[os] = 5;
      var Y2 = df(ff, 9), K2 = df(vv, 5), dg = function(r) {
        for (var e = r[0], n = 1; n < r.length; ++n)
          r[n] > e && (e = r[n]);
        return e;
      }, Pa = function(r, e, n) {
        var o = e / 8 | 0;
        return (r[o] | r[o + 1] << 8) >> (7 & e) & n;
      }, fg = function(r, e) {
        var n = e / 8 | 0;
        return (r[n] | r[n + 1] << 8 | r[n + 2] << 16) >> (7 & e);
      }, J2 = ["unexpected EOF", "invalid block type", "invalid length/literal", "invalid distance", "stream finished", "no stream handler", , "no callback", "invalid UTF-8 data", "extra field too long", "date not in range 1980-2099", "filename too long", "stream finishing", "invalid zip data"], Aa = function(r, e, n) {
        var o = new Error(e || J2[r]);
        if (o.code = r, Error.captureStackTrace && Error.captureStackTrace(o, Aa), !n)
          throw o;
        return o;
      }, Q2 = new Oo(0), eM = typeof TextDecoder < "u" && new TextDecoder();
      try {
        eM.decode(Q2, { stream: !0 });
      } catch {
      }
      const tM = { gzip_data: "gzip" };
      class na extends Error {
        constructor(e) {
          super(e), this.name = "MRTError";
        }
      }
      const iM = { 0: "uint32", 1: "uint32", 2: "uint16", 3: "uint8" }, bv = { uint32: 1, uint16: 2, uint8: 4 }, nM = { uint32: Uint32Array, uint16: Uint16Array, uint8: Uint8Array };
      let pg;
      class mg {
        constructor(e = 5) {
          this.x = NaN, this.y = NaN, this.z = NaN, this.layers = {}, this._cacheSize = e;
        }
        getLayer(e) {
          const n = this.layers[e];
          if (!n)
            throw new na(`Layer '${e}' not found`);
          return n;
        }
        getHeaderLength(e) {
          const n = new Uint8Array(e), o = new DataView(e);
          if (n[0] !== 13)
            throw new na("File is not a valid MRT.");
          return o.getUint32(1, !0);
        }
        parseHeader(e) {
          const n = new Uint8Array(e), o = this.getHeaderLength(e);
          if (n.length < o)
            throw new na(`Expected header with length >= ${o} but got buffer of length ${n.length}`);
          const u = function(l, f) {
            return l.readFields(R2, { headerLength: 0, x: 0, y: 0, z: 0, layers: [] }, void 0);
          }(new pg(n.subarray(0, o)));
          if (!isNaN(this.x) && (this.x !== u.x || this.y !== u.y || this.z !== u.z))
            throw new na(`Invalid attempt to parse header ${u.z}/${u.x}/${u.y} for tile ${this.z}/${this.x}/${this.y}`);
          this.x = u.x, this.y = u.y, this.z = u.z;
          for (const l of u.layers)
            this.layers[l.name] = new sM(l, { cacheSize: this._cacheSize });
          return this;
        }
        createDecodingTask(e) {
          const n = [], o = this.getLayer(e.layerName);
          for (let u of e.blockIndices) {
            const l = o.dataIndex[u], f = l.firstByte - e.firstByte, v = l.lastByte - e.firstByte;
            if (o._blocksInProgress.has(u))
              continue;
            const S = { layerName: o.name, firstByte: f, lastByte: v, pixelFormat: o.pixelFormat, blockIndex: u, blockShape: [l.bands.length].concat(o.bandShape), buffer: o.buffer, codec: l.codec.codec, filters: l.filters.map((D) => D.filter) };
            o._blocksInProgress.add(u), n.push(S);
          }
          return new wv(n, () => {
            n.forEach((u) => o._blocksInProgress.delete(u.blockIndex));
          }, (u, l) => {
            if (n.forEach((f) => o._blocksInProgress.delete(f.blockIndex)), u)
              throw u;
            l.forEach((f) => {
              this.getLayer(f.layerName).processDecodedData(f);
            });
          });
        }
      }
      class sM {
        constructor({ version: e, name: n, units: o, tileSize: u, pixelFormat: l, buffer: f, dataIndex: v }, S) {
          if (this.version = e, this.version !== 1)
            throw new na(`Cannot parse raster layer encoded with MRT version ${e}`);
          this.name = n, this.units = o, this.tileSize = u, this.buffer = f, this.pixelFormat = iM[l], this.dataIndex = v, this.bandShape = [u + 2 * f, u + 2 * f, bv[this.pixelFormat]], this._decodedBlocks = new hg(S ? S.cacheSize : 5), this._blocksInProgress = /* @__PURE__ */ new Set();
        }
        get dimension() {
          return bv[this.pixelFormat];
        }
        get cacheSize() {
          return this._decodedBlocks.capacity;
        }
        getBandList() {
          return this.dataIndex.map(({ bands: e }) => e).flat();
        }
        processDecodedData(e) {
          const n = e.blockIndex.toString();
          this._decodedBlocks.get(n) || this._decodedBlocks.put(n, e.data);
        }
        getBlockForBand(e) {
          let n = 0;
          switch (typeof e) {
            case "string":
              for (const [o, u] of this.dataIndex.entries()) {
                for (const [l, f] of u.bands.entries())
                  if (f === e)
                    return { bandIndex: n + l, blockIndex: o, blockBandIndex: l };
                n += u.bands.length;
              }
              break;
            case "number":
              for (const [o, u] of this.dataIndex.entries()) {
                if (e >= n && e < n + u.bands.length)
                  return { bandIndex: e, blockIndex: o, blockBandIndex: e - n };
                n += u.bands.length;
              }
              break;
            default:
              throw new na(`Invalid band \`${JSON.stringify(e)}\`. Expected string or integer.`);
          }
          throw new na(`Band not found: ${JSON.stringify(e)}`);
        }
        getDataRange(e) {
          let n = 1 / 0, o = -1 / 0;
          const u = [], l = /* @__PURE__ */ new Set();
          for (const f of e) {
            const { blockIndex: v } = this.getBlockForBand(f);
            if (v < 0)
              throw new na(`Invalid band: ${JSON.stringify(f)}`);
            const S = this.dataIndex[v];
            u.includes(v) || u.push(v), l.add(v), n = Math.min(n, S.firstByte), o = Math.max(o, S.lastByte);
          }
          if (l.size > this.cacheSize)
            throw new na(`Number of blocks to decode (${l.size}) exceeds cache size (${this.cacheSize}).`);
          return { layerName: this.name, firstByte: n, lastByte: o, blockIndices: u };
        }
        hasBand(e) {
          const { blockIndex: n } = this.getBlockForBand(e);
          return n >= 0;
        }
        hasDataForBand(e) {
          const { blockIndex: n } = this.getBlockForBand(e);
          return n >= 0 && !!this._decodedBlocks.get(n.toString());
        }
        getBandView(e) {
          const { blockIndex: n, blockBandIndex: o } = this.getBlockForBand(e), u = this._decodedBlocks.get(n.toString());
          if (!u)
            throw new na(`Data for band ${JSON.stringify(e)} of layer "${this.name}" not decoded.`);
          const l = this.dataIndex[n], f = this.bandShape.reduce((D, x) => D * x, 1), v = o * f, S = u.subarray(v, v + f);
          return { data: S, bytes: new Uint8Array(S.buffer).subarray(S.byteOffset, S.byteOffset + S.byteLength), tileSize: this.tileSize, buffer: this.buffer, pixelFormat: this.pixelFormat, dimension: this.dimension, offset: l.offset, scale: l.scale };
        }
      }
      mg.setPbf = function(r) {
        pg = r;
      };
      class wv {
        constructor(e, n, o) {
          this.tasks = e, this._onCancel = n, this._onComplete = o, this._finalized = !1;
        }
        cancel() {
          this._finalized || (this._onCancel(), this._finalized = !0);
        }
        complete(e, n) {
          this._finalized || (this._onComplete(e, n), this._finalized = !0);
        }
      }
      mg.performDecoding = function(r, e) {
        const n = new Uint8Array(r);
        return Promise.all(e.tasks.map((o) => {
          const { layerName: u, firstByte: l, lastByte: f, pixelFormat: v, blockShape: S, blockIndex: D, filters: x, codec: P } = o, I = n.subarray(l, f + 1), M = new Uint32Array(S[0] * S[1] * S[2]);
          let C;
          if (P !== "gzip_data")
            throw new na(`Unhandled codec: ${P}`);
          return C = function(k, V) {
            if (!globalThis.DecompressionStream && V === "gzip_data")
              return Promise.resolve(((H = function(ie) {
                ie[0] == 31 && ie[1] == 139 && ie[2] == 8 || Aa(6, "invalid gzip data");
                var fe = ie[3], de = 10;
                4 & fe && (de += 2 + (ie[10] | ie[11] << 8));
                for (var ue = (fe >> 3 & 1) + (fe >> 4 & 1); ue > 0; ue -= !ie[de++])
                  ;
                return de + (2 & fe);
              }($ = k)) + 8 > $.length && Aa(6, "invalid gzip data"), function(ie, fe, de, ue) {
                var Se = ie.length;
                if (!Se || fe.f && !fe.l)
                  return de || new Oo(0);
                var me = !de, Ee = me || fe.i != 2, ze = fe.i;
                me && (de = new Oo(3 * Se));
                var Ie, Re, Ve = function(Dl) {
                  var Ec = de.length;
                  if (Dl > Ec) {
                    var Pc = new Oo(Math.max(2 * Ec, Dl));
                    Pc.set(de), de = Pc;
                  }
                }, Ue = fe.f || 0, Fe = fe.p || 0, et = fe.b || 0, dt = fe.l, tt = fe.d, Mt = fe.m, wt = fe.n, At = 8 * Se;
                do {
                  if (!dt) {
                    Ue = Pa(ie, Fe, 1);
                    var rt = Pa(ie, Fe + 1, 3);
                    if (Fe += 3, !rt) {
                      var Ut = ie[(hi = 4 + ((Fe + 7) / 8 | 0)) - 4] | ie[hi - 3] << 8, St = hi + Ut;
                      if (St > Se) {
                        ze && Aa(0);
                        break;
                      }
                      Ee && Ve(et + Ut), de.set(ie.subarray(hi, St), et), fe.b = et += Ut, fe.p = Fe = 8 * St, fe.f = Ue;
                      continue;
                    }
                    if (rt == 1)
                      dt = Y2, tt = K2, Mt = 9, wt = 5;
                    else if (rt == 2) {
                      var Nt = Pa(ie, Fe, 31) + 257, Qt = Pa(ie, Fe + 10, 15) + 4, pi = Nt + Pa(ie, Fe + 5, 31) + 1;
                      Fe += 14;
                      for (var gi = new Oo(pi), Ai = new Oo(19), yi = 0; yi < Qt; ++yi)
                        Ai[W2[yi]] = Pa(ie, Fe + 3 * yi, 7);
                      Fe += 3 * Qt;
                      var Ii = dg(Ai), fn = (1 << Ii) - 1, rn = df(Ai, Ii);
                      for (yi = 0; yi < pi; ) {
                        var hi, on = rn[Pa(ie, Fe, fn)];
                        if (Fe += 15 & on, (hi = on >> 4) < 16)
                          gi[yi++] = hi;
                        else {
                          var Qi = 0, pn = 0;
                          for (hi == 16 ? (pn = 3 + Pa(ie, Fe, 3), Fe += 2, Qi = gi[yi - 1]) : hi == 17 ? (pn = 3 + Pa(ie, Fe, 7), Fe += 3) : hi == 18 && (pn = 11 + Pa(ie, Fe, 127), Fe += 7); pn--; )
                            gi[yi++] = Qi;
                        }
                      }
                      var as = gi.subarray(0, Nt), ls = gi.subarray(Nt);
                      Mt = dg(as), wt = dg(ls), dt = df(as, Mt), tt = df(ls, wt);
                    } else
                      Aa(1);
                    if (Fe > At) {
                      ze && Aa(0);
                      break;
                    }
                  }
                  Ee && Ve(et + 131072);
                  for (var Kn = (1 << Mt) - 1, Vr = (1 << wt) - 1, Sn = Fe; ; Sn = Fe) {
                    var Ln = (Qi = dt[fg(ie, Fe) & Kn]) >> 4;
                    if ((Fe += 15 & Qi) > At) {
                      ze && Aa(0);
                      break;
                    }
                    if (Qi || Aa(2), Ln < 256)
                      de[et++] = Ln;
                    else {
                      if (Ln == 256) {
                        Sn = Fe, dt = null;
                        break;
                      }
                      var Tr = Ln - 254;
                      Ln > 264 && (Tr = Pa(ie, Fe, (1 << (Ms = pv[yi = Ln - 257])) - 1) + yv[yi], Fe += Ms);
                      var cs = tt[fg(ie, Fe) & Vr], to = cs >> 4;
                      if (cs || Aa(3), Fe += 15 & cs, ls = X2[to], to > 3) {
                        var Ms = mv[to];
                        ls += fg(ie, Fe) & (1 << Ms) - 1, Fe += Ms;
                      }
                      if (Fe > At) {
                        ze && Aa(0);
                        break;
                      }
                      Ee && Ve(et + 131072);
                      var sl = et + Tr;
                      if (et < ls) {
                        var Mc = 0 - ls, Sc = Math.min(ls, sl);
                        for (Mc + et < 0 && Aa(3); et < Sc; ++et)
                          de[et] = (void 0)[Mc + et];
                      }
                      for (; et < sl; ++et)
                        de[et] = de[et - ls];
                    }
                  }
                  fe.l = dt, fe.p = Sn, fe.b = et, fe.f = Ue, dt && (Ue = 1, fe.m = Mt, fe.d = tt, fe.n = wt);
                } while (!Ue);
                return et != de.length && me ? (Ie = de, ((Re = et) == null || Re > Ie.length) && (Re = Ie.length), new Oo(Ie.subarray(0, Re))) : de.subarray(0, et);
              }($.subarray(H, -8), { i: 2 }, new Oo(((U = $)[(q = U.length) - 4] | U[q - 3] << 8 | U[q - 2] << 16 | U[q - 1] << 24) >>> 0))));
            var U, q, $, H;
            const K = tM[V];
            if (!K)
              throw new Error(`Unhandled codec: ${V}`);
            const Q = new globalThis.DecompressionStream(K);
            return new Response(new Blob([k]).stream().pipeThrough(Q)).arrayBuffer().then((ie) => new Uint8Array(ie));
          }(I, P).then((k) => (function(V, U) {
            V.readFields(U2, U);
          }(new pg(k), M), new nM[v](M.buffer))), C.then((k) => {
            for (let V = x.length - 1; V >= 0; V--)
              switch (x[V]) {
                case "delta_filter":
                  G2(k, S);
                  break;
                case "zigzag_filter":
                  Z2(k);
                  break;
                case "bitshuffle_filter":
                  H2(k, v);
                  break;
                default:
                  throw new na(`Unhandled filter "${x[V]}"`);
              }
            return { layerName: u, blockIndex: D, data: k };
          }).catch((k) => {
            throw k;
          });
        }));
      }, Ft(wv, "MRTDecodingBatch", { omit: ["_onCancel", "_onComplete"] });
      let pf, _g, Ca, ju, gg, Gu = null;
      function Tv() {
        return Jn() && self.worker && self.worker.dracoUrl ? self.worker.dracoUrl : _g || ge.DRACO_URL;
      }
      function Mv() {
        if (Jn() && self.worker && self.worker.meshoptUrl)
          return self.worker.meshoptUrl;
        if (ju)
          return ju;
        const r = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]);
        if (typeof WebAssembly != "object")
          throw new Error("WebAssembly not supported, cannot instantiate meshoptimizer");
        return ju = WebAssembly.validate(r) ? ge.MESHOPT_SIMD_URL : ge.MESHOPT_URL, ju;
      }
      const lm = { 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array }, rM = { 5120: "DT_INT8", 5121: "DT_UINT8", 5122: "DT_INT16", 5123: "DT_UINT16", 5125: "DT_UINT32", 5126: "DT_FLOAT32" }, mf = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT2: 4, MAT3: 9, MAT4: 16 };
      function Sv(r, e, n) {
        const o = n.json.bufferViews.length, u = n.buffers.length;
        e.bufferView = o, n.json.bufferViews[o] = { buffer: u, byteLength: r.byteLength }, n.buffers[u] = r;
      }
      const yg = "KHR_draco_mesh_compression";
      function oM(r, e) {
        const n = r.extensions && r.extensions[yg];
        if (!n)
          return;
        const o = new Ca.Decoder(), u = Cv(e, n.bufferView), l = new Ca.Mesh();
        if (!o.DecodeArrayToMesh(u, u.byteLength, l))
          throw new Error("Failed to decode Draco mesh");
        const f = e.json.accessors[r.indices], v = lm[f.componentType], S = f.count * v.BYTES_PER_ELEMENT, D = Ca._malloc(S);
        v === Uint16Array ? o.GetTrianglesUInt16Array(l, S, D) : o.GetTrianglesUInt32Array(l, S, D), Sv(Ca.memory.buffer.slice(D, D + S), f, e), Ca._free(D);
        for (const x of Object.keys(n.attributes)) {
          const P = o.GetAttributeByUniqueId(l, n.attributes[x]), I = e.json.accessors[r.attributes[x]], M = rM[I.componentType], C = I.count * mf[I.type] * lm[I.componentType].BYTES_PER_ELEMENT, k = Ca._malloc(C);
          o.GetAttributeDataArrayForAllPoints(l, P, Ca[M], C, k), Sv(Ca.memory.buffer.slice(k, k + C), I, e), Ca._free(k);
        }
        o.destroy(), l.destroy(), delete r.extensions[yg];
      }
      const cm = "EXT_meshopt_compression";
      function aM(r, e) {
        if (!r.extensions || !r.extensions[cm])
          return;
        const n = r.extensions[cm], o = new Uint8Array(e.buffers[n.buffer], n.byteOffset || 0, n.byteLength || 0), u = new Uint8Array(n.count * n.byteStride);
        gg.decodeGltfBuffer(u, n.count, n.byteStride, o, n.mode, n.filter), r.buffer = e.buffers.length, r.byteOffset = 0, e.buffers[r.buffer] = u.buffer, delete r.extensions[cm];
      }
      const Ev = 1179937895, Pv = new TextDecoder("utf8");
      function Av(r, e) {
        return new URL(r, e).href;
      }
      function lM(r, e, n, o) {
        return fetch(Av(r.uri, o)).then((u) => u.arrayBuffer()).then((u) => {
          e.buffers[n] = u;
        });
      }
      function Cv(r, e) {
        const n = r.json.bufferViews[e];
        return new Uint8Array(r.buffers[n.buffer], n.byteOffset || 0, n.byteLength);
      }
      function cM(r, e, n, o) {
        if (r.uri) {
          const u = Av(r.uri, o);
          return fetch(u).then((l) => l.blob()).then((l) => createImageBitmap(l)).then((l) => {
            e.images[n] = l;
          });
        }
        if (r.bufferView !== void 0) {
          const u = Cv(e, r.bufferView), l = new Blob([u], { type: r.mimeType });
          return createImageBitmap(l).then((f) => {
            e.images[n] = f;
          });
        }
      }
      function Iv(r, e = 0, n) {
        const o = { json: null, images: [], buffers: [] };
        if (new Uint32Array(r, e, 1)[0] === Ev) {
          const x = new Uint32Array(r, e);
          let P = 2;
          const I = (x[P++] >> 2) - 3, M = x[P++] >> 2;
          if (P++, o.json = JSON.parse(Pv.decode(x.subarray(P, P + M))), P += M, P < I) {
            const C = x[P++];
            P++;
            const k = e + (P << 2);
            o.buffers[0] = r.slice(k, k + C);
          }
        } else
          o.json = JSON.parse(Pv.decode(new Uint8Array(r, e)));
        const { buffers: u, images: l, meshes: f, extensionsUsed: v, bufferViews: S } = o.json;
        let D = Promise.resolve();
        if (u) {
          const x = [];
          for (let P = 0; P < u.length; P++) {
            const I = u[P];
            I.uri ? x.push(lM(I, o, P, n)) : o.buffers[P] || (o.buffers[P] = null);
          }
          D = Promise.all(x);
        }
        return D.then(() => {
          const x = [], P = v && v.includes(yg), I = v && v.includes(cm);
          if (P && x.push(function() {
            if (!Ca)
              return pf ?? (pf = function(M) {
                let C, k = null;
                function V() {
                  C = new Uint8Array(k.buffer);
                }
                function U() {
                  throw new Error("Unexpected Draco error.");
                }
                const q = { a: { a: U, d: function($, H, K) {
                  return C.copyWithin($, H, H + K);
                }, c: function($) {
                  const H = C.length, K = Math.max($ >>> 0, Math.ceil(1.2 * H)), Q = Math.ceil((K - H) / 65536);
                  try {
                    return k.grow(Q), V(), !0;
                  } catch {
                    return !1;
                  }
                }, b: U } };
                return (WebAssembly.instantiateStreaming ? WebAssembly.instantiateStreaming(M, q) : M.then(($) => $.arrayBuffer()).then(($) => WebAssembly.instantiate($, q))).then(($) => {
                  const { Rb: H, Qb: K, P: Q, T: ie, X: fe, Ja: de, La: ue, Qa: Se, Va: me, Wa: Ee, eb: ze, jb: Ie, f: Re, e: Ve, yb: Ue, zb: Fe, Ab: et, Bb: dt, Db: tt, Gb: Mt } = $.instance.exports;
                  k = Ve;
                  const wt = (() => {
                    let At = 0, rt = 0, Ut = 0, St = 0;
                    return (Nt) => {
                      Ut && (H(St), H(At), rt += Ut, Ut = At = 0), At || (rt += 128, At = K(rt));
                      const Qt = Nt.length + 7 & -8;
                      let pi = At;
                      Qt >= rt && (Ut = Qt, pi = St = K(Qt));
                      for (let gi = 0; gi < Nt.length; gi++)
                        C[pi + gi] = Nt[gi];
                      return pi;
                    };
                  })();
                  return V(), Re(), { memory: Ve, _free: H, _malloc: K, Mesh: class {
                    constructor() {
                      this.ptr = Q();
                    }
                    destroy() {
                      ie(this.ptr);
                    }
                  }, Decoder: class {
                    constructor() {
                      this.ptr = de();
                    }
                    destroy() {
                      Ie(this.ptr);
                    }
                    DecodeArrayToMesh(At, rt, Ut) {
                      const St = wt(At), Nt = ue(this.ptr, St, rt, Ut.ptr);
                      return !!fe(Nt);
                    }
                    GetAttributeByUniqueId(At, rt) {
                      return { ptr: Se(this.ptr, At.ptr, rt) };
                    }
                    GetTrianglesUInt16Array(At, rt, Ut) {
                      me(this.ptr, At.ptr, rt, Ut);
                    }
                    GetTrianglesUInt32Array(At, rt, Ut) {
                      Ee(this.ptr, At.ptr, rt, Ut);
                    }
                    GetAttributeDataArrayForAllPoints(At, rt, Ut, St, Nt) {
                      ze(this.ptr, At.ptr, rt.ptr, Ut, St, Nt);
                    }
                  }, DT_INT8: Ue(), DT_UINT8: Fe(), DT_INT16: et(), DT_UINT16: dt(), DT_UINT32: tt(), DT_FLOAT32: Mt() };
                });
              }(fetch(Tv())), pf.then((M) => {
                Ca = M, pf = void 0;
              }));
          }()), I && x.push(function() {
            if (gg)
              return;
            const M = function(C) {
              let k;
              const V = WebAssembly.instantiateStreaming(C, {}).then(($) => {
                k = $.instance, k.exports.__wasm_call_ctors();
              }), U = { NONE: "", OCTAHEDRAL: "meshopt_decodeFilterOct", QUATERNION: "meshopt_decodeFilterQuat", EXPONENTIAL: "meshopt_decodeFilterExp" }, q = { ATTRIBUTES: "meshopt_decodeVertexBuffer", TRIANGLES: "meshopt_decodeIndexBuffer", INDICES: "meshopt_decodeIndexSequence" };
              return { ready: V, supported: !0, decodeGltfBuffer($, H, K, Q, ie, fe) {
                (function(de, ue, Se, me, Ee, ze, Ie) {
                  const Re = de.exports.sbrk, Ve = me + 3 & -4, Ue = Re(Ve * Ee), Fe = Re(ze.length), et = new Uint8Array(de.exports.memory.buffer);
                  et.set(ze, Fe);
                  const dt = ue(Ue, me, Ee, Fe, ze.length);
                  if (dt === 0 && Ie && Ie(Ue, Ve, Ee), Se.set(et.subarray(Ue, Ue + me * Ee)), Re(Ue - Re(0)), dt !== 0)
                    throw new Error(`Malformed buffer data: ${dt}`);
                })(k, k.exports[q[ie]], $, H, K, Q, k.exports[U[fe]]);
              } };
            }(fetch(Mv()));
            return M.ready.then(() => {
              gg = M;
            });
          }()), l)
            for (let M = 0; M < l.length; M++)
              x.push(cM(l[M], o, M, n));
          return (x.length ? Promise.all(x) : Promise.resolve()).then(() => {
            if (P && f)
              for (const { primitives: M } of f)
                for (const C of M)
                  oM(C, o);
            if (I && f && S)
              for (const M of S)
                aM(M, o);
            return o;
          });
        });
      }
      function Mh(r, e) {
        const n = r.json.bufferViews[e.bufferView], o = lm[e.componentType];
        return new o(r.buffers[n.buffer], (e.byteOffset || 0) + (n.byteOffset || 0), e.count * (n.byteStride && n.byteStride !== mf[e.type] * o.BYTES_PER_ELEMENT ? n.byteStride / o.BYTES_PER_ELEMENT : mf[e.type]));
      }
      function xg(r, e, n, o) {
        const u = lm[e.componentType], l = function(x) {
          switch (x) {
            case Int8Array:
              return 1 / 127;
            case Uint8Array:
              return 1 / 255;
            case Int16Array:
              return 1 / 32767;
            case Uint16Array:
              return 1 / 65535;
            default:
              return 1;
          }
        }(u), f = r.json.bufferViews[e.bufferView], v = f.byteStride ? f.byteStride / u.BYTES_PER_ELEMENT : mf[e.type], S = n.float32, D = S.length / n.capacity;
        for (let x = 0, P = 0; x < e.count * v; x += v, P += D)
          for (let I = 0; I < D; I++)
            S[P + I] = o[x + I] * l;
        n._trim();
      }
      function hM(r, e, n) {
        const o = r.indices, u = r.attributes, l = {};
        l.indexArray = new qs();
        const f = e.json.accessors[o], v = f.count / 3;
        l.indexArray.reserve(v);
        const S = Mh(e, f);
        for (let I = 0; I < v; I++)
          l.indexArray.emplaceBack(S[3 * I], S[3 * I + 1], S[3 * I + 2]);
        l.indexArray._trim(), l.vertexArray = new va();
        const D = e.json.accessors[u.POSITION];
        l.vertexArray.reserve(D.count);
        const x = Mh(e, D);
        for (let I = 0; I < D.count; I++)
          l.vertexArray.emplaceBack(x[3 * I], x[3 * I + 1], x[3 * I + 2]);
        if (l.vertexArray._trim(), l.aabb = new Jt(D.min, D.max), l.centroid = function(I, M) {
          const C = [0, 0, 0], k = I.length;
          if (k > 0) {
            for (let V = 0; V < k; V++) {
              const U = 3 * I[V];
              C[0] += M[U], C[1] += M[U + 1], C[2] += M[U + 2];
            }
            C[0] /= k, C[1] /= k, C[2] /= k;
          }
          return C;
        }(S, x), u.COLOR_0 !== void 0) {
          const I = e.json.accessors[u.COLOR_0], M = mf[I.type], C = Mh(e, I);
          l.colorArray = M === 3 ? new va() : new Xa(), l.colorArray.resize(I.count), xg(e, I, l.colorArray, C);
        }
        if (u.NORMAL !== void 0) {
          l.normalArray = new va();
          const I = e.json.accessors[u.NORMAL];
          l.normalArray.resize(I.count);
          const M = Mh(e, I);
          xg(e, I, l.normalArray, M);
        }
        if (u.TEXCOORD_0 !== void 0 && n.length > 0) {
          l.texcoordArray = new Pl();
          const I = e.json.accessors[u.TEXCOORD_0];
          l.texcoordArray.resize(I.count);
          const M = Mh(e, I);
          xg(e, I, l.texcoordArray, M);
        }
        if (u._FEATURE_ID_RGBA4444 !== void 0) {
          const I = e.json.accessors[u._FEATURE_ID_RGBA4444];
          e.json.extensionsUsed && e.json.extensionsUsed.includes("EXT_meshopt_compression") && (l.featureData = Mh(e, I));
        }
        u._FEATURE_RGBA4444 !== void 0 && (l.featureData = new Uint32Array(Mh(e, e.json.accessors[u._FEATURE_RGBA4444]).buffer));
        const P = r.material;
        return l.material = function(I, M) {
          const { emissiveFactor: C = [0, 0, 0], alphaMode: k = "OPAQUE", alphaCutoff: V = 0.5, normalTexture: U, occlusionTexture: q, emissiveTexture: $, doubleSided: H } = I, { baseColorFactor: K = [1, 1, 1, 1], metallicFactor: Q = 1, roughnessFactor: ie = 1, baseColorTexture: fe, metallicRoughnessTexture: de } = I.pbrMetallicRoughness || {}, ue = q ? M[q.index] : void 0;
          if (q && q.extensions && q.extensions.KHR_texture_transform && ue) {
            const Se = q.extensions.KHR_texture_transform;
            ue.offsetScale = [Se.offset[0], Se.offset[1], Se.scale[0], Se.scale[1]];
          }
          return { pbrMetallicRoughness: { baseColorFactor: new ki(...K), metallicFactor: Q, roughnessFactor: ie, baseColorTexture: fe ? M[fe.index] : void 0, metallicRoughnessTexture: de ? M[de.index] : void 0 }, doubleSided: H, emissiveFactor: C, alphaMode: k, alphaCutoff: V, normalTexture: U ? M[U.index] : void 0, occlusionTexture: ue, emissionTexture: $ ? M[$.index] : void 0, defined: I.defined === void 0 };
        }(P !== void 0 ? e.json.materials[P] : { defined: !1 }, n), l;
      }
      function Lv(r, e, n) {
        const { matrix: o, rotation: u, translation: l, scale: f, mesh: v, extras: S, children: D } = r, x = {};
        if (x.matrix = o || De.mat4.fromRotationTranslationScale([], u || [0, 0, 0, 1], l || [0, 0, 0], f || [1, 1, 1]), v !== void 0) {
          x.meshes = n[v];
          const P = x.anchor = [0, 0];
          for (const I of x.meshes) {
            const { min: M, max: C } = I.aabb;
            P[0] += M[0] + C[0], P[1] += M[1] + C[1];
          }
          P[0] = Math.floor(P[0] / x.meshes.length / 2), P[1] = Math.floor(P[1] / x.meshes.length / 2);
        }
        if (S && (S.id && (x.id = S.id), S.lights && (x.lights = function(P) {
          if (!P.length)
            return [];
          const I = function(U) {
            const q = atob(U), $ = new Uint8Array(q.length);
            for (let H = 0; H < q.length; H++)
              $[H] = q.codePointAt(H);
            return $;
          }(P), M = [], C = I.length / 24, k = new Uint16Array(I.buffer), V = new Float32Array(I.buffer);
          for (let U = 0; U < C; U++) {
            const q = k[2 * U * 6] / 30, $ = k[2 * U * 6 + 1] / 30, H = k[2 * U * 6 + 10] / 100, K = V[6 * U + 1], Q = V[6 * U + 2], ie = V[6 * U + 3], fe = V[6 * U + 4], de = ie - K, ue = fe - Q, Se = Math.hypot(de, ue);
            M.push({ pos: [K + 0.5 * de, Q + 0.5 * ue, $], normal: [ue / Se, -de / Se, 0], width: Se, height: q, depth: H, points: [K, Q, ie, fe] });
          }
          return M;
        }(S.lights))), D) {
          const P = [];
          for (const I of D)
            P.push(Lv(e.json.nodes[I], e, n));
          x.children = P;
        }
        return x;
      }
      function uM(r) {
        if (r.vertices.length === 0 || r.indices.length === 0)
          return null;
        const e = new b_(r.vertices, r.indices, 8, 256), [n, o] = [e.min.clone(), e.max.clone()];
        return { vertices: r.vertices, indices: r.indices, grid: e, min: n, max: o };
      }
      function dM(r) {
        if (!r.extras || !r.extras.ground)
          return null;
        const e = r.extras.ground;
        if (!e || !Array.isArray(e) || e.length === 0)
          return null;
        const n = e[0];
        if (!n || !Array.isArray(n) || n.length === 0)
          return null;
        const o = [];
        for (const f of n) {
          if (!Array.isArray(f) || f.length !== 2)
            continue;
          const v = f[0], S = f[1];
          typeof v == "number" && typeof S == "number" && o.push(new Et(v, S));
        }
        if (o.length < 3)
          return null;
        o.length > 1 && o[o.length - 1].equals(o[0]) && o.pop();
        let u = 0;
        for (let f = 0; f < o.length; f++) {
          const v = o[f], S = o[(f + 1) % o.length], D = o[(f + 2) % o.length];
          u += (v.x - S.x) * (D.y - S.y) - (D.x - S.x) * (v.y - S.y);
        }
        u > 0 && o.reverse();
        const l = Nd(o.flatMap((f) => [f.x, f.y]), []);
        return l.length === 0 ? null : { vertices: o, indices: l };
      }
      function fM(r, e) {
        const n = [], o = [];
        let u = 0;
        const l = [];
        for (const f of r) {
          u = n.length;
          const v = f.vertexArray.float32, S = f.indexArray.uint16;
          for (let D = 0; D < f.vertexArray.length; D++)
            l[0] = v[3 * D + 0], l[1] = v[3 * D + 1], l[2] = v[3 * D + 2], De.vec3.transformMat4(l, l, e), n.push(new Et(l[0], l[1]));
          for (let D = 0; D < 3 * f.indexArray.length; D++)
            o.push(S[D] + u);
        }
        if (o.length % 3 != 0)
          return null;
        for (let f = 0; f < o.length; f += 3) {
          const v = n[o[f + 0]], S = n[o[f + 1]], D = n[o[f + 2]];
          (v.x - S.x) * (D.y - S.y) - (D.x - S.x) * (v.y - S.y) > 0 && ([o[f + 1], o[f + 2]] = [o[f + 2], o[f + 1]]);
        }
        return { vertices: n, indices: o };
      }
      function zv(r) {
        const e = function(S, D) {
          const x = [], P = WebGL2RenderingContext;
          if (S.json.textures)
            for (const I of S.json.textures) {
              const M = { magFilter: P.LINEAR, minFilter: P.NEAREST, wrapS: P.REPEAT, wrapT: P.REPEAT };
              I.sampler !== void 0 && Object.assign(M, S.json.samplers[I.sampler]), x.push({ image: D[I.source], sampler: M, uploaded: !1 });
            }
          return x;
        }(r, r.images), n = function(S, D) {
          const x = [];
          for (const P of S.json.meshes) {
            const I = [];
            for (const M of P.primitives)
              I.push(hM(M, S, D));
            x.push(I);
          }
          return x;
        }(r, e), { scenes: o, scene: u, nodes: l } = r.json, f = o ? o[u || 0].nodes : l, v = [];
        for (const S of f)
          v.push(Lv(l[S], r, n));
        return function(S, D, x) {
          const P = {}, I = /* @__PURE__ */ new Set();
          for (let M = 0; M < S.length; M++) {
            const C = x[D[M]];
            if (!C.extras)
              continue;
            const k = C.extras["mapbox:footprint:version"], V = C.extras["mapbox:footprint:id"];
            (k || V) && I.add(M), k === "1.0.0" && V && (P[V] = M);
          }
          for (let M = 0; M < S.length; M++) {
            if (I.has(M))
              continue;
            const C = S[M], k = x[D[M]];
            if (!k.extras)
              continue;
            let V = null;
            C.id in P && (V = fM(S[P[C.id]].meshes, C.matrix)), V || (V = dM(k)), V && (C.footprint = uM(V));
          }
          if (I.size > 0) {
            const M = Array.from(I.values()).sort((C, k) => C - k);
            for (let C = M.length - 1; C >= 0; C--)
              S.splice(M[C], 1);
          }
        }(v, f, r.json.nodes), v;
      }
      function pM(r) {
        r.heightmap = new Float32Array(4096), r.heightmap.fill(-1);
        const e = r.vertexArray.float32, n = r.aabb.min[0] - 1, o = r.aabb.min[1] - 1, u = bh / (r.aabb.max[0] - n + 2), l = bh / (r.aabb.max[1] - o + 2);
        for (let f = 0; f < e.length; f += 3) {
          const v = e[f + 2], S = (e[f + 0] - n) * u | 0, D = (e[f + 1] - o) * l | 0;
          v > r.heightmap[D * bh + S] && (r.heightmap[D * bh + S] = v);
        }
      }
      function mM(r, e) {
        const n = {};
        n.indexArray = new qs(), n.indexArray.reserve(4 * r.length), n.vertexArray = new va(), n.vertexArray.reserve(10 * r.length), n.colorArray = new Xa(), n.vertexArray.reserve(10 * r.length);
        let o = 0;
        for (const f of r) {
          const v = Math.min(10, Math.max(4, 1.3 * f.height)) * e, S = [-f.normal[1], f.normal[0], 0], D = Math.min(0.29, 0.1 * f.width / f.depth), x = f.width - 2 * f.depth * e * (D + 0.01), P = De.vec3.scaleAndAdd([], f.pos, S, x / 2), I = De.vec3.scaleAndAdd([], f.pos, S, -x / 2), M = [P[0], P[1], P[2] + f.height], C = [I[0], I[1], I[2] + f.height], k = De.vec3.scaleAndAdd([], f.normal, S, D);
          De.vec3.scale(k, k, v);
          const V = De.vec3.scaleAndAdd([], f.normal, S, -D);
          De.vec3.scale(V, V, v), De.vec3.add(k, P, k), De.vec3.add(V, I, V), P[2] += 0.1, I[2] += 0.1, n.vertexArray.emplaceBack(k[0], k[1], k[2]), n.vertexArray.emplaceBack(V[0], V[1], V[2]), n.vertexArray.emplaceBack(P[0], P[1], P[2]), n.vertexArray.emplaceBack(I[0], I[1], I[2]), n.vertexArray.emplaceBack(M[0], M[1], M[2]), n.vertexArray.emplaceBack(C[0], C[1], C[2]), n.vertexArray.emplaceBack(P[0], P[1], P[2]), n.vertexArray.emplaceBack(I[0], I[1], I[2]), n.vertexArray.emplaceBack(k[0], k[1], k[2]), n.vertexArray.emplaceBack(V[0], V[1], V[2]);
          const U = x / v / 2;
          n.colorArray.emplaceBack(-U - D, -1, U, 0.8), n.colorArray.emplaceBack(U + D, -1, U, 0.8), n.colorArray.emplaceBack(-U, 0, U, 1.3), n.colorArray.emplaceBack(U, 0, U, 1.3), n.colorArray.emplaceBack(U + D, -0.8, U, 0.7), n.colorArray.emplaceBack(U + D, -0.8, U, 0.7), n.colorArray.emplaceBack(0, 0, U, 1.3), n.colorArray.emplaceBack(0, 0, U, 1.3), n.colorArray.emplaceBack(U + D, -1.2, U, 0.8), n.colorArray.emplaceBack(U + D, -1.2, U, 0.8), n.indexArray.emplaceBack(6 + o, 4 + o, 8 + o), n.indexArray.emplaceBack(7 + o, 9 + o, 5 + o), n.indexArray.emplaceBack(0 + o, 1 + o, 2 + o), n.indexArray.emplaceBack(1 + o, 3 + o, 2 + o), o += 10;
        }
        const u = { defined: !0, emissiveFactor: [0, 0, 0] }, l = {};
        return l.baseColorFactor = ki.white, u.pbrMetallicRoughness = l, n.material = u, n.aabb = new Jt([1 / 0, 1 / 0, 1 / 0], [-1 / 0, -1 / 0, -1 / 0]), n;
      }
      class Dv {
        constructor(e) {
          this._stringToNumber = {}, this._numberToString = [];
          for (let n = 0; n < e.length; n++) {
            const o = e[n];
            this._stringToNumber[o] = n, this._numberToString[n] = o;
          }
        }
        encode(e) {
          return this._stringToNumber[e];
        }
        decode(e) {
          return this._numberToString[e];
        }
      }
      const _M = ["id", "tile", "layer", "source", "sourceLayer", "state"];
      class Zu {
        constructor(e, n, o, u, l) {
          this.type = "Feature", this._vectorTileFeature = e, this._z = n, this._x = o, this._y = u, this.properties = e.properties, this.id = l;
        }
        clone() {
          const e = new Zu(this._vectorTileFeature, this._z, this._x, this._y, this.id);
          return this.state && (e.state = { ...this.state }), this.layer && (e.layer = { ...this.layer }), this.source && (e.source = this.source), this.sourceLayer && (e.sourceLayer = this.sourceLayer), e;
        }
        get geometry() {
          return this._geometry === void 0 && (this._geometry = this._vectorTileFeature.toGeoJSON(this._x, this._y, this._z).geometry), this._geometry;
        }
        set geometry(e) {
          this._geometry = e;
        }
        toJSON() {
          const e = { type: "Feature", state: void 0, geometry: this.geometry, properties: this.properties };
          for (const n of _M)
            this[n] !== void 0 && (e[n] = this[n]);
          return e;
        }
      }
      class kv {
        constructor(e, n) {
          this.tileID = e, this.x = e.canonical.x, this.y = e.canonical.y, this.z = e.canonical.z, this.grid = new rc(Tt, 16, 0), this.featureIndexArray = new dh(), this.promoteId = n, this.is3DTile = !1, this.serializedLayersCache = /* @__PURE__ */ new Map();
        }
        insert(e, n, o, u, l, f = 0, v = 0) {
          const S = this.featureIndexArray.length;
          this.featureIndexArray.emplaceBack(o, u, l, f);
          const D = this.grid;
          for (let x = 0; x < n.length; x++) {
            const P = n[x], I = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
            for (let M = 0; M < P.length; M++) {
              const C = P[M];
              I[0] = Math.min(I[0], C.x), I[1] = Math.min(I[1], C.y), I[2] = Math.max(I[2], C.x), I[3] = Math.max(I[3], C.y);
            }
            v !== 0 && (I[0] -= v, I[1] -= v, I[2] += v, I[3] += v), I[0] < Tt && I[1] < Tt && I[2] >= 0 && I[3] >= 0 && D.insert(S, I[0], I[1], I[2], I[3]);
          }
        }
        loadVTLayers() {
          if (!this.vtLayers) {
            this.vtLayers = new Iu.VectorTile(new Dp(this.rawTileData)).layers, this.sourceLayerCoder = new Dv(this.vtLayers ? Object.keys(this.vtLayers).sort() : ["_geojsonTileLayer"]), this.vtFeatures = {};
            for (const e in this.vtLayers)
              this.vtFeatures[e] = [];
          }
          return this.vtLayers;
        }
        query(e, n) {
          const { tilespaceGeometry: o, transform: u, tileTransform: l, pixelPosMatrix: f, availableImages: v } = n;
          this.loadVTLayers(), this.serializedLayersCache.clear();
          const S = o.bufferedTilespaceBounds, D = this.grid.query(S.min.x, S.min.y, S.max.x, S.max.y, (M, C, k, V) => Oe(o.bufferedTilespaceGeometry, M, C, k, V));
          D.sort(gM);
          let x = null;
          u.elevation && D.length > 0 && (x = Fu.create(u.elevation, this.tileID));
          const P = {};
          let I;
          for (let M = 0; M < D.length; M++) {
            const C = D[M];
            if (C === I)
              continue;
            I = C;
            const k = this.featureIndexArray.get(C);
            let V = null;
            this.is3DTile ? this.loadMatchingModelFeature(P, k, e, o, u) : this.loadMatchingFeature(P, k, e, v, (U, q, $, H = 0) => (V || (V = G(U, this.tileID.canonical, l)), q.queryIntersectsFeature(o, U, $, V, this.z, u, f, x, H)));
          }
          return P;
        }
        loadMatchingFeature(e, n, o, u, l) {
          const { featureIndex: f, bucketIndex: v, sourceLayerIndex: S, layoutVertexArrayOffset: D } = n, x = this.bucketLayerIDs[v], P = o.layers, I = Object.keys(P);
          if (I.length && !function(U, q) {
            for (let $ = 0; $ < U.length; $++)
              if (q.indexOf(U[$]) >= 0)
                return !0;
            return !1;
          }(I, x))
            return;
          const M = o.sourceCache, C = this.sourceLayerCoder.decode(S), k = this.vtLayers[C].feature(f), V = this.getId(k, C);
          for (let U = 0; U < x.length; U++) {
            const q = x[U];
            if (!P[q])
              continue;
            const { styleLayer: $, targets: H } = P[q];
            let K = {};
            V !== void 0 && (K = M.getFeatureState($.sourceLayer, V));
            const Q = !l || l(k, $, K, D);
            if (!Q)
              continue;
            const ie = new Zu(k, this.z, this.x, this.y, V);
            ie.tile = this.tileID.canonical, ie.state = K;
            let fe = this.serializedLayersCache.get(q);
            fe || (fe = $.serialize(), fe.id = q, this.serializedLayersCache.set(q, fe)), ie.source = fe.source, ie.sourceLayer = fe["source-layer"], ie.layer = An({}, fe), ie.layer.paint = Rv(fe.paint, $.paint, k, K, u), ie.layer.layout = Rv(fe.layout, $.layout, k, K, u);
            let de = !1;
            for (const ue of H) {
              this.updateFeatureProperties(ie, ue);
              const { filter: Se } = ue;
              if (Se) {
                if (k.properties = ie.properties, Se.needGeometry) {
                  const me = Z(k, !0);
                  if (!Se.filter(new Tn(this.tileID.overscaledZ), me, this.tileID.canonical))
                    continue;
                } else if (!Se.filter(new Tn(this.tileID.overscaledZ), k))
                  continue;
              }
              de = !0, ue.targetId && this.addFeatureVariant(ie, ue);
            }
            de && this.appendToResult(e, q, f, ie, Q);
          }
        }
        loadMatchingModelFeature(e, n, o, u, l) {
          const f = this.bucketLayerIDs[0][0], v = o.layers;
          if (!v[f])
            return;
          const { styleLayer: S, targets: D } = v[f];
          if (S.type !== "model")
            return;
          const x = u.tile, P = n.featureIndex, I = x.getBucket(S);
          if (!(I && I instanceof em))
            return;
          const M = function(fe, de, ue, Se) {
            const me = fe.getNodesInfo()[de];
            if (me.hiddenByReplacement || !me.node.meshes)
              return;
            let Ee = Number.MAX_VALUE;
            const ze = me.node, Ie = ue.tile, Re = Se.calculatePosMatrix(Ie.tileID.toUnwrapped(), Se.worldSize), Ve = me.evaluatedScale;
            let Ue = 0;
            Se.elevation && ze.elevation && (Ue = ze.elevation * Se.elevation.exaggeration()), De.mat4.translate(Re, Re, [(ze.anchor ? ze.anchor[0] : 0) * (Ve[0] - 1), (ze.anchor ? ze.anchor[1] : 0) * (Ve[1] - 1), Ue]), De.mat4.scale(Re, Re, Ve);
            const Fe = ue.queryGeometry, et = Fe.isPointQuery() ? Fe.screenBounds : Fe.screenGeometry, dt = function(Mt) {
              const wt = De.mat4.multiply([], Re, Mt.matrix);
              De.mat4.multiply(wt, Se.expandedFarZProjMatrix, wt);
              for (let At = 0; At < Mt.meshes.length; ++At) {
                const rt = Mt.meshes[At];
                if (At === Mt.lightMeshIndex)
                  continue;
                const Ut = Rx(et, Se, wt, rt.aabb);
                Ut != null && (Ee = Math.min(Ut, Ee));
              }
              if (Mt.children)
                for (const At of Mt.children)
                  dt(At);
            };
            if (dt(ze), Ee === Number.MAX_VALUE)
              return;
            const tt = new Ui(0, 0);
            return Wx(Ie.tileID.canonical, tt, me.node.anchor[0], me.node.anchor[1]), { intersectionZ: Ee, position: tt, feature: me.feature };
          }(I, P, u, l);
          if (!M)
            return;
          const { z: C, x: k, y: V } = x.tileID.canonical, { feature: U, intersectionZ: q, position: $ } = M;
          let H = {};
          U.id !== void 0 && (H = o.sourceCache.getFeatureState(S.sourceLayer, U.id));
          const K = new Zu({}, C, k, V, U.id);
          K.tile = this.tileID.canonical, K.state = H, K.properties = U.properties, K.geometry = { type: "Point", coordinates: [$.lng, $.lat] };
          let Q = this.serializedLayersCache.get(f);
          Q || (Q = S.serialize(), Q.id = f, this.serializedLayersCache.set(f, Q)), K.source = Q.source, K.sourceLayer = Q["source-layer"], K.layer = An({}, Q);
          let ie = !1;
          for (const fe of D) {
            this.updateFeatureProperties(K, fe);
            const { filter: de } = fe;
            if (de) {
              if (U.properties = K.properties, de.needGeometry) {
                if (!de.filter(new Tn(this.tileID.overscaledZ), U, this.tileID.canonical))
                  continue;
              } else if (!de.filter(new Tn(this.tileID.overscaledZ), U))
                continue;
            }
            ie = !0, fe.targetId && this.addFeatureVariant(K, fe);
          }
          ie && this.appendToResult(e, f, P, K, q);
        }
        updateFeatureProperties(e, n, o) {
          if (n.properties) {
            const u = {};
            for (const l in n.properties) {
              const f = n.properties[l].evaluate({ zoom: this.z }, e._vectorTileFeature, e.state, e.tile, o);
              f != null && (u[l] = f);
            }
            e.properties = u;
          }
        }
        addFeatureVariant(e, n, o) {
          const u = { target: n.target, namespace: n.namespace };
          n.properties && (u.properties = e.properties), e.variants = e.variants || {}, e.variants[n.targetId] = e.variants[n.targetId] || [], e.variants[n.targetId].push(u);
        }
        appendToResult(e, n, o, u, l) {
          let f = e[n];
          f === void 0 && (f = e[n] = []), f.push({ featureIndex: o, feature: u, intersectionZ: l });
        }
        lookupSymbolFeatures(e, n, o, u, l) {
          const f = {};
          this.loadVTLayers();
          for (const v of e)
            this.loadMatchingFeature(f, { bucketIndex: n, sourceLayerIndex: o, featureIndex: v, layoutVertexArrayOffset: 0 }, u, l);
          return f;
        }
        loadFeature(e) {
          const { featureIndex: n, sourceLayerIndex: o } = e;
          this.loadVTLayers();
          const u = this.sourceLayerCoder.decode(o), l = this.vtFeatures[u];
          if (l[n])
            return l[n];
          const f = this.vtLayers[u].feature(n);
          return l[n] = f, f;
        }
        hasLayer(e) {
          for (const n of this.bucketLayerIDs)
            for (const o of n)
              if (e === o)
                return !0;
          return !1;
        }
        getId(e, n) {
          let o = e.id;
          if (this.promoteId) {
            const u = typeof this.promoteId == "string" ? this.promoteId : this.promoteId[n];
            u != null && (o = e.properties[u]), typeof o == "boolean" && (o = Number(o));
          }
          return o;
        }
      }
      function Rv(r, e, n, o, u) {
        return Mr(r, (l, f) => {
          const v = e instanceof cc ? e.get(f) : null;
          return v && v.evaluate ? v.evaluate(n, o, u) : v;
        });
      }
      function gM(r, e) {
        return e - r;
      }
      Ft(kv, "FeatureIndex", { omit: ["rawTileData", "sourceLayerCoder"] });
      const Ov = [Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array];
      class vg {
        static from(e) {
          if (!(e instanceof ArrayBuffer))
            throw new Error("Data must be an instance of ArrayBuffer.");
          const [n, o] = new Uint8Array(e, 0, 2);
          if (n !== 219)
            throw new Error("Data does not appear to be in a KDBush format.");
          const u = o >> 4;
          if (u !== 1)
            throw new Error(`Got v${u} data when expected v1.`);
          const l = Ov[15 & o];
          if (!l)
            throw new Error("Unrecognized array type.");
          const [f] = new Uint16Array(e, 2, 1), [v] = new Uint32Array(e, 4, 1);
          return new vg(v, f, l, e);
        }
        constructor(e, n = 64, o = Float64Array, u) {
          if (isNaN(e) || e < 0)
            throw new Error(`Unpexpected numItems value: ${e}.`);
          this.numItems = +e, this.nodeSize = Math.min(Math.max(+n, 2), 65535), this.ArrayType = o, this.IndexArrayType = e < 65536 ? Uint16Array : Uint32Array;
          const l = Ov.indexOf(this.ArrayType), f = 2 * e * this.ArrayType.BYTES_PER_ELEMENT, v = e * this.IndexArrayType.BYTES_PER_ELEMENT, S = (8 - v % 8) % 8;
          if (l < 0)
            throw new Error(`Unexpected typed array class: ${o}.`);
          u && u instanceof ArrayBuffer ? (this.data = u, this.ids = new this.IndexArrayType(this.data, 8, e), this.coords = new this.ArrayType(this.data, 8 + v + S, 2 * e), this._pos = 2 * e, this._finished = !0) : (this.data = new ArrayBuffer(8 + f + v + S), this.ids = new this.IndexArrayType(this.data, 8, e), this.coords = new this.ArrayType(this.data, 8 + v + S, 2 * e), this._pos = 0, this._finished = !1, new Uint8Array(this.data, 0, 2).set([219, 16 + l]), new Uint16Array(this.data, 2, 1)[0] = n, new Uint32Array(this.data, 4, 1)[0] = e);
        }
        add(e, n) {
          const o = this._pos >> 1;
          return this.ids[o] = o, this.coords[this._pos++] = e, this.coords[this._pos++] = n, o;
        }
        finish() {
          const e = this._pos >> 1;
          if (e !== this.numItems)
            throw new Error(`Added ${e} items when expected ${this.numItems}.`);
          return bg(this.ids, this.coords, this.nodeSize, 0, this.numItems - 1, 0), this._finished = !0, this;
        }
        range(e, n, o, u) {
          if (!this._finished)
            throw new Error("Data not yet indexed - call index.finish().");
          const { ids: l, coords: f, nodeSize: v } = this, S = [0, l.length - 1, 0], D = [];
          for (; S.length; ) {
            const x = S.pop() || 0, P = S.pop() || 0, I = S.pop() || 0;
            if (P - I <= v) {
              for (let V = I; V <= P; V++) {
                const U = f[2 * V], q = f[2 * V + 1];
                U >= e && U <= o && q >= n && q <= u && D.push(l[V]);
              }
              continue;
            }
            const M = I + P >> 1, C = f[2 * M], k = f[2 * M + 1];
            C >= e && C <= o && k >= n && k <= u && D.push(l[M]), (x === 0 ? e <= C : n <= k) && (S.push(I), S.push(M - 1), S.push(1 - x)), (x === 0 ? o >= C : u >= k) && (S.push(M + 1), S.push(P), S.push(1 - x));
          }
          return D;
        }
        within(e, n, o) {
          if (!this._finished)
            throw new Error("Data not yet indexed - call index.finish().");
          const { ids: u, coords: l, nodeSize: f } = this, v = [0, u.length - 1, 0], S = [], D = o * o;
          for (; v.length; ) {
            const x = v.pop() || 0, P = v.pop() || 0, I = v.pop() || 0;
            if (P - I <= f) {
              for (let V = I; V <= P; V++)
                Bv(l[2 * V], l[2 * V + 1], e, n) <= D && S.push(u[V]);
              continue;
            }
            const M = I + P >> 1, C = l[2 * M], k = l[2 * M + 1];
            Bv(C, k, e, n) <= D && S.push(u[M]), (x === 0 ? e - o <= C : n - o <= k) && (v.push(I), v.push(M - 1), v.push(1 - x)), (x === 0 ? e + o >= C : n + o >= k) && (v.push(M + 1), v.push(P), v.push(1 - x));
          }
          return S;
        }
      }
      function bg(r, e, n, o, u, l) {
        if (u - o <= n)
          return;
        const f = o + u >> 1;
        Fv(r, e, f, o, u, l), bg(r, e, n, o, f - 1, 1 - l), bg(r, e, n, f + 1, u, 1 - l);
      }
      function Fv(r, e, n, o, u, l) {
        for (; u > o; ) {
          if (u - o > 600) {
            const D = u - o + 1, x = n - o + 1, P = Math.log(D), I = 0.5 * Math.exp(2 * P / 3), M = 0.5 * Math.sqrt(P * I * (D - I) / D) * (x - D / 2 < 0 ? -1 : 1);
            Fv(r, e, n, Math.max(o, Math.floor(n - x * I / D + M)), Math.min(u, Math.floor(n + (D - x) * I / D + M)), l);
          }
          const f = e[2 * n + l];
          let v = o, S = u;
          for (_f(r, e, o, n), e[2 * u + l] > f && _f(r, e, o, u); v < S; ) {
            for (_f(r, e, v, S), v++, S--; e[2 * v + l] < f; )
              v++;
            for (; e[2 * S + l] > f; )
              S--;
          }
          e[2 * o + l] === f ? _f(r, e, o, S) : (S++, _f(r, e, S, u)), S <= n && (o = S + 1), n <= S && (u = S - 1);
        }
      }
      function _f(r, e, n, o) {
        wg(r, n, o), wg(e, 2 * n, 2 * o), wg(e, 2 * n + 1, 2 * o + 1);
      }
      function wg(r, e, n) {
        const o = r[e];
        r[e] = r[n], r[n] = o;
      }
      function Bv(r, e, n, o) {
        const u = r - n, l = e - o;
        return u * u + l * l;
      }
      i.$ = bd, i.A = ss, i.B = 2, i.C = J0, i.D = Bu, i.E = Zo, i.F = N_, i.G = class extends Jp {
      }, i.H = qo, i.I = ug, i.J = Bi, i.K = ip, i.L = ad, i.M = nc, i.N = qf, i.O = tu, i.P = Et, i.Q = cu, i.R = Uo, i.S = ud, i.T = K_, i.U = Qc, i.V = Jp, i.W = xl, i.X = oo, i.Y = ro, i.Z = or, i._ = Ra, i.a = function(r) {
        return ge.API_CDN_URL_REGEX.test(r);
      }, i.a$ = Zu, i.a0 = Qh, i.a1 = Jh, i.a2 = function(r) {
        const e = r.value;
        let n = [];
        if (!e)
          return n;
        const o = qo(e);
        return o !== "string" ? (n = n.concat([new Jp(r.key, e, `string expected, "${o}" found`)]), n) : (Fx(e, !0) || (n = n.concat([new Jp(r.key, e, `invalid url "${e}"`)])), n);
      }, i.a3 = $e, i.a4 = ih, i.a5 = Bn, i.a6 = yt, i.a7 = class {
        constructor(r) {
          this.specification = r;
        }
        possiblyEvaluate(r, e) {
          return Zi(r.expression.evaluate(e));
        }
        interpolate(r, e, n) {
          return { x: ei(r.x, e.x, n), y: ei(r.y, e.y, n), z: ei(r.z, e.z, n), azimuthal: ei(r.azimuthal, e.azimuthal, n), polar: ei(r.polar, e.polar, n) };
        }
      }, i.a8 = Tn, i.a9 = sc, i.aA = Ta, i.aB = class {
        constructor(r) {
          this.entries = {}, this.scheduler = r;
        }
        request(r, e, n, o) {
          const u = this.entries[r] = this.entries[r] || { callbacks: [] };
          if (u.result) {
            const [l, f] = u.result;
            return this.scheduler ? this.scheduler.add(() => {
              o(l, f);
            }, e) : o(l, f), () => {
            };
          }
          return u.callbacks.push(o), u.cancel || (u.cancel = n((l, f) => {
            u.result = [l, f];
            for (const v of u.callbacks)
              this.scheduler ? this.scheduler.add(() => {
                v(l, f);
              }, e) : v(l, f);
            setTimeout(() => delete this.entries[r], 3e3);
          })), () => {
            u.result || (u.callbacks = u.callbacks.filter((l) => l !== o), u.callbacks.length || (u.cancel(), delete this.entries[r]));
          };
        }
      }, i.aC = Io, i.aD = function(r, e, n) {
        const o = JSON.stringify(r.request);
        return r.data && (this.deduped.entries[o] = { result: [null, r.data] }), this.deduped.request(o, { type: "parseTile", isSymbolTile: r.isSymbolTile, zoom: r.tileZoom }, (u) => {
          const l = no(r.request, (f, v, S, D) => {
            f ? u(f) : v && u(null, { vectorTile: n ? void 0 : new Iu.VectorTile(new Dp(v)), rawData: v, cacheControl: S, expires: D });
          });
          return () => {
            l.cancel(), u();
          };
        }, e);
      }, i.aE = function(r) {
        Xn++, Xn > ri && (r.getActor().send("enforceCacheSizeLimit", li), Xn = 0);
      }, i.aF = function(r) {
        return r <= 1 ? 1 : Math.pow(2, Math.floor(Math.log(r) / Math.LN2));
      }, i.aG = bt, i.aH = Mx, i.aI = Ix, i.aJ = Tx, i.aK = function(r, e) {
        const n = document.createElement("video");
        n.muted = !0, n.onloadstart = function() {
          e(null, n);
        };
        for (let o = 0; o < r.length; o++) {
          const u = document.createElement("source");
          Go(r[o]) || (n.crossOrigin = "Anonymous"), u.src = r[o], n.appendChild(u);
        }
        return { cancel: () => {
        } };
      }, i.aL = Wp, i.aM = function(r) {
        return fetch(r).then((e) => e.arrayBuffer()).then((e) => Iv(e, 0, r));
      }, i.aN = zv, i.aO = class {
        constructor(r, e, n, o) {
          this.id = r, this.position = e != null ? new Ui(e[0], e[1]) : new Ui(0, 0), this.orientation = n ?? [0, 0, 0], this.nodes = o, this.uploaded = !1, this.aabb = new Jt([1 / 0, 1 / 0, 1 / 0], [-1 / 0, -1 / 0, -1 / 0]), this.matrix = [];
        }
        _applyTransformations(r, e) {
          if (De.mat4.multiply(r.matrix, e, r.matrix), r.meshes)
            for (const n of r.meshes) {
              const o = Jt.applyTransformFast(n.aabb, r.matrix);
              this.aabb.encapsulate(o);
            }
          if (r.children)
            for (const n of r.children)
              this._applyTransformations(n, r.matrix);
        }
        computeBoundsAndApplyParent() {
          const r = De.mat4.identity([]);
          for (const e of this.nodes)
            this._applyTransformations(e, r);
        }
        computeModelMatrix(r, e, n, o, u, l, f = !1) {
          jx(this.matrix, this, r.transform, this.position, e, n, o, u, l, f);
        }
        upload(r) {
          if (!this.uploaded) {
            for (const e of this.nodes)
              ig(e, r);
            for (const e of this.nodes)
              Qp(e);
            this.uploaded = !0;
          }
        }
        destroy() {
          for (const r of this.nodes)
            ng(r);
        }
      }, i.aP = vo, i.aQ = Qd, i.aR = Fr, i.aS = Os, i.aT = $a, i.aU = qs, i.aV = yo, i.aW = ap, i.aX = Hp, i.aY = function() {
        co.isLoading() || co.isLoaded() || au() !== "deferred" || ep();
      }, i.aZ = np, i.a_ = Z, i.aa = h, i.ab = De, i.ac = fs, i.ad = cc, i.ae = mr, i.af = ei, i.ag = Tt, i.ah = ul, i.ai = vi, i.aj = ki, i.ak = class {
        constructor(r) {
          this.specification = r;
        }
        possiblyEvaluate(r, e) {
          return function([n, o]) {
            const u = Zi([1, n, o]);
            return { x: u.x, y: u.y, z: u.z };
          }(r.expression.evaluate(e));
        }
        interpolate(r, e, n) {
          return { x: ei(r.x, e.x, n), y: ei(r.y, e.y, n), z: ei(r.z, e.z, n) };
        }
      }, i.al = function(r, e, n = 0, o = !0) {
        const u = new Et(n, n), l = r.sub(u), f = e.add(u), v = [l, new Et(f.x, l.y), f, new Et(l.x, f.y)];
        return o && v.push(l.clone()), v;
      }, i.am = function(r, e) {
        const n = [];
        for (let o = 0; o < r.length; o++) {
          const u = zn(o - 1, -1, r.length - 1), l = zn(o + 1, -1, r.length - 1), f = r[o], v = r[l], S = r[u].sub(f).unit(), D = v.sub(f).unit(), x = D.angleWithSep(S.x, S.y), P = S.add(D).unit().mult(-1 * e / Math.sin(x / 2));
          n.push(f.add(P));
        }
        return n;
      }, i.an = cx, i.ao = Oe, i.ap = function(r, e, n = 0) {
        return De.vec3.fromValues(((e.x - n) * r.scale - r.x) * Tt, (e.y * r.scale - r.y) * Tt, vp(e.z, e.y));
      }, i.aq = zi, i.ar = P0, i.as = function(r) {
        let e = 1 / 0, n = 1 / 0, o = -1 / 0, u = -1 / 0;
        for (const l of r)
          e = Math.min(e, l.x), n = Math.min(n, l.y), o = Math.max(o, l.x), u = Math.max(u, l.y);
        return { min: new Et(e, n), max: new Et(o, u) };
      }, i.at = ta, i.au = Ae, i.av = y, i.aw = si, i.ax = dr, i.ay = function(r, e) {
        const n = {};
        for (let o = 0; o < e.length; o++) {
          const u = e[o];
          u in r && (n[u] = r[u]);
        }
        return n;
      }, i.az = tl, i.b = function(r) {
        return ge.API_FONTS_REGEX.test(r);
      }, i.b$ = Yp, i.b0 = Fn, i.b1 = I_, i.b2 = v_, i.b3 = G, i.b4 = Lo, i.b5 = xu, i.b6 = ai, i.b7 = Wn, i.b8 = Nd, i.b9 = $_, i.bA = r0, i.bB = j_, i.bC = rx, i.bD = B_, i.bE = vg, i.bF = zn, i.bG = zs, i.bH = fr, i.bI = function(r, e, n) {
        r[4 * e + 0] = n[0], r[4 * e + 1] = n[1], r[4 * e + 2] = n[2], r[4 * e + 3] = n[3];
      }, i.bJ = mh, i.bK = zo, i.bL = kd, i.bM = Nn, i.bN = dc, i.bO = Ui, i.bP = px, i.bQ = Lt, i.bR = _i, i.bS = zx, i.bT = nt, i.bU = jn, i.bV = function(r, e, n, o, u, l, f, v, S) {
        if (S.name === "globe")
          return jn(r, e, new nt(n, o, u), !1);
        const D = Qd({ z: n, x: o, y: u }, S);
        return new Jt([(l + D.x / D.scale) * e, e * (D.y / D.scale), f], [(l + D.x2 / D.scale) * e, e * (D.y2 / D.scale), v]);
      }, i.bW = function(r, e, n) {
        let o = 0;
        for (let u = 0; u < 2; ++u)
          r[u] > 0 && (o += (r[u] - 0) * (r[u] - 0)), e[u] < 0 && (o += (0 - e[u]) * (0 - e[u]));
        return o;
      }, i.bX = Un, i.bY = gp, i.bZ = function(r) {
        const e = De.mat4.identity(new Float64Array(16));
        De.mat4.multiply(e, r.pixelMatrix, r.globeMatrix);
        const n = [0, uo, 0], o = [0, fo, 0];
        return De.vec3.transformMat4(n, n, e), De.vec3.transformMat4(o, o, e), [n[0] > 0 && n[0] <= r.width && n[1] > 0 && n[1] <= r.height && !Nr(r, new Ui(r.center.lat, 90)), o[0] > 0 && o[0] <= r.width && o[1] > 0 && o[1] <= r.height && !Nr(r, new Ui(r.center.lat, -90))];
      }, i.b_ = function(r, e) {
        const { scale: n } = r.tileTransform, o = n * Tt / (r.tileSize * Math.pow(2, e.zoom - r.tileID.overscaledZ + r.tileID.canonical.z));
        return De.mat2.scale(new Float32Array(4), e.inverseAdjustmentMatrix, [o, o]);
      }, i.ba = function(r, e) {
        const n = mr(e.zoom);
        if (n === 0)
          return ts(r);
        const o = dn(r), u = _n(o), l = ta(o.getWest()) * e.worldSize, f = ta(o.getEast()) * e.worldSize, v = Ta(o.getNorth()) * e.worldSize, S = Ta(o.getSouth()) * e.worldSize, D = [l, v, 0], x = [f, v, 0], P = [l, S, 0], I = [f, S, 0], M = De.mat4.invert([], e.globeMatrix);
        return De.vec3.transformMat4(D, D, M), De.vec3.transformMat4(x, x, M), De.vec3.transformMat4(P, P, M), De.vec3.transformMat4(I, I, M), u[0] = Ps(u[0], P, n), u[1] = Ps(u[1], I, n), u[2] = Ps(u[2], x, n), u[3] = Ps(u[3], D, n), Jt.fromPoints(u);
      }, i.bb = cn, i.bc = Ri, i.bd = Ps, i.be = oh, i.bf = Xt, i.bg = mg, i.bh = Dp, i.bi = no, i.bj = function(r) {
        const e = [];
        for (const n in r)
          e.push(r[n]);
        return e;
      }, i.bk = function(r, e) {
        const n = [];
        for (const o in r)
          o in e || n.push(o);
        return n;
      }, i.bl = Rn, i.bm = ["type", "source", "source-layer", "minzoom", "maxzoom", "filter", "layout"], i.bn = Ws, i.bo = function(r, e) {
        const { x: n, y: o } = r.point, u = Ma(n, o, r.worldSize / r._pixelsPerMercatorPixel, 0, 0);
        return De.mat4.multiply(u, u, er(ts(e)));
      }, i.bp = Lu, i.bq = Ro, i.br = zp, i.bs = function(r, e, n, o, u) {
        const l = 5 * e + 2;
        r.float32[l + 0] = n, r.float32[l + 1] = o, r.float32[l + 2] = u;
      }, i.bt = Zp, i.bu = K0, i.bv = se, i.bw = tr, i.bx = Qy, i.by = Ox, i.bz = s0, i.c = Ce, i.c$ = (r, e, n, o, u, l, f, v) => {
        const S = r.transform, D = S.pitch < 15 ? A0(0.07, 0.7, si((14 - S.zoom) / 5, 0, 1)) : 0.07, x = n.paint.get("line-trim-color-use-theme").constantOr("default") === "none";
        return { u_matrix: I0(r, e, n, o), u_texsize: e.imageAtlasTexture ? e.imageAtlasTexture.size : [0, 0], u_pixels_to_tile_units: S.calculatePixelsToTileUnitsMatrix(e), u_device_pixel_ratio: u, u_width_scale: l, u_floor_width_scale: f, u_image: 0, u_tile_units_to_pixels: C0(e, S), u_units_to_pixels: [1 / S.pixelsToGLUnits[0], 1 / S.pixelsToGLUnits[1]], u_alpha_discard_threshold: 0, u_trim_offset: v, u_trim_fade_range: n.paint.get("line-trim-fade-range"), u_trim_color: n.paint.get("line-trim-color").toRenderColor(x ? null : n.lut).toArray01(), u_emissive_strength: n.paint.get("line-emissive-strength"), u_zbias_factor: D, u_tile_to_meter: s(e.tileID.canonical, 0) };
      }, i.c0 = Lx, i.c1 = function(r) {
        const e = Lx(r, !0);
        return De.mat2.invert([], [e[0], e[1], e[4], e[5]]);
      }, i.c2 = wi, i.c3 = function(r) {
        const { x: e, y: n } = r.point, { lng: o, lat: u } = r._center;
        return Ma(e, n, r.worldSize, o, u);
      }, i.c4 = kn, i.c5 = zt, i.c6 = Su, i.c7 = function(r) {
        const e = Math.round((r + 45 + 360) % 360 / 90) % 4;
        return Xs[e];
      }, i.c8 = 45, i.c9 = gh, i.cA = class extends ba {
        constructor(r) {
          super(r), this.current = l_;
        }
        set(r, e, n) {
          if (this.fetchUniformLocation(r, e)) {
            for (let o = 0; o < 9; o++)
              if (n[o] !== this.current[o]) {
                this.current = n, this.gl.uniformMatrix3fv(this.location, !1, n);
                break;
              }
          }
        }
      }, i.cB = Hr, i.cC = function(r, e, n) {
        const o = mr(n.zoom), u = r.style.map._antialias, l = e.options.extStandardDerivativesForceOff || r.terrain && r.terrain.exaggeration() > 0;
        return o === 0 && !u && !l;
      }, i.cD = function(r) {
        const e = r.pixelsPerMeter, n = e / fr(1, r.center.lat), o = De.mat4.identity(new Float64Array(16));
        return De.mat4.translate(o, o, [r.point.x, r.point.y, 0]), De.mat4.scale(o, o, [n, n, e]), Float32Array.from(o);
      }, i.cE = dn, i.cF = function(r) {
        const e = Un - 5;
        r = si(r, -e, e) / e * 90;
        const n = Math.pow(Math.abs(Math.sin(vi(r))), 3);
        return Math.round(n * (Eu.length - 1));
      }, i.cG = function(r, e, n, o) {
        const u = e.getNorth(), l = e.getSouth(), f = e.getWest(), v = e.getEast(), S = 1 << r.z, D = v - f, x = u - l, P = D / Il, I = -x / Eu[n], M = [0, P, 0, I, 0, 0, u, f, 0];
        if (r.z > 0) {
          const C = 180 / o;
          De.mat3.multiply(M, M, [C / D + 1, 0, 0, 0, C / x + 1, 0, -0.5 * C / P, 0.5 * C / I, 1]);
        }
        return M[2] = S, M[5] = r.x, M[8] = r.y, M;
      }, i.cH = ts, i.cI = function(r, e, n) {
        const o = De.mat4.identity(new Float64Array(16)), u = (e / (1 << r) - 0.5) * Math.PI * 2;
        return De.mat4.rotateY(o, n.globeMatrix, u), Float32Array.from(o);
      }, i.cJ = class {
        isDataAvailableAtPoint(r) {
          const e = this._source();
          if (this.isUsingMockSource() || !e || r.y < 0 || r.y > 1)
            return !1;
          const n = e.getSource().maxzoom, o = 1 << n, u = Math.floor(r.x), l = Math.floor((r.x - u) * o), f = Math.floor(r.y * o), v = this.findDEMTileFor(new bt(n, u, n, l, f));
          return !(!v || !v.dem);
        }
        getAtPointOrZero(r, e = 0) {
          return this.getAtPoint(r, e) || 0;
        }
        getAtPoint(r, e, n = !0) {
          if (this.isUsingMockSource())
            return null;
          e == null && (e = null);
          const o = this._source();
          if (!o || r.y < 0 || r.y > 1)
            return e;
          const u = o.getSource().maxzoom, l = 1 << u, f = Math.floor(r.x), v = r.x - f, S = new bt(u, f, u, Math.floor(v * l), Math.floor(r.y * l)), D = this.findDEMTileFor(S);
          if (!D || !D.dem)
            return e;
          const x = D.dem, P = 1 << D.tileID.canonical.z, I = (v * P - D.tileID.canonical.x) * x.dim, M = (r.y * P - D.tileID.canonical.y) * x.dim, C = Math.floor(I), k = Math.floor(M);
          return (n ? this.exaggeration() : 1) * ei(ei(x.get(C, k), x.get(C, k + 1), M - k), ei(x.get(C + 1, k), x.get(C + 1, k + 1), M - k), I - C);
        }
        getAtTileOffset(r, e, n) {
          const o = 1 << r.canonical.z;
          return this.getAtPointOrZero(new h(r.wrap + (r.canonical.x + e / Tt) / o, (r.canonical.y + n / Tt) / o));
        }
        getAtTileOffsetFunc(r, e, n, o) {
          return (u) => {
            const l = this.getAtTileOffset(r, u.x, u.y), f = o.upVector(r.canonical, u.x, u.y), v = o.upVectorScale(r.canonical, e, n).metersToTile;
            return De.vec3.scale(f, f, l * v), f;
          };
        }
        getForTilePoints(r, e, n, o) {
          if (this.isUsingMockSource())
            return !1;
          const u = Fu.create(this, r, o);
          return !!u && (e.forEach((l) => {
            l[2] = this.exaggeration() * u.getElevationAt(l[0], l[1], n);
          }), !0);
        }
        getMinMaxForTile(r) {
          if (this.isUsingMockSource())
            return null;
          const e = this.findDEMTileFor(r);
          if (!e || !e.dem)
            return null;
          const n = e.dem.tree, o = e.tileID, u = 1 << r.canonical.z - o.canonical.z;
          let l = r.canonical.x / u - o.canonical.x, f = r.canonical.y / u - o.canonical.y, v = 0;
          for (let S = 0; S < r.canonical.z - o.canonical.z && !n.leaves[v]; S++) {
            l *= 2, f *= 2;
            const D = 2 * Math.floor(f) + Math.floor(l);
            v = n.childOffsets[v] + D, l %= 1, f %= 1;
          }
          return { min: this.exaggeration() * n.minimums[v], max: this.exaggeration() * n.maximums[v] };
        }
        getMinElevationBelowMSL() {
          throw new Error("Pure virtual method called.");
        }
        raycast(r, e, n) {
          throw new Error("Pure virtual method called.");
        }
        pointCoordinate(r) {
          throw new Error("Pure virtual method called.");
        }
        _source() {
          throw new Error("Pure virtual method called.");
        }
        isUsingMockSource() {
          throw new Error("Pure virtual method called.");
        }
        exaggeration() {
          throw new Error("Pure virtual method called.");
        }
        findDEMTileFor(r) {
          throw new Error("Pure virtual method called.");
        }
        get visibleDemTiles() {
          throw new Error("Getter must be implemented in subclass.");
        }
        getMinMaxForVisibleTiles() {
          const r = this.visibleDemTiles;
          if (r.length === 0)
            return null;
          let e = !1, n = Number.MAX_VALUE, o = Number.MIN_VALUE;
          for (const u of r) {
            const l = this.getMinMaxForTile(u.tileID);
            l && (n = Math.min(n, l.min), o = Math.max(o, l.max), e = !0);
          }
          return e ? { min: n, max: o } : null;
        }
      }, i.cK = zy, i.cL = ji, i.cM = function(r, e) {
        return [Math.pow(r[0], 2.2) * e, Math.pow(r[1], 2.2) * e, Math.pow(r[2], 2.2) * e];
      }, i.cN = Br, i.cO = le, i.cP = re, i.cQ = 256, i.cR = function(r, e) {
        const n = [0, 0, 0], o = cn(ts(e.canonical));
        return De.vec3.transformMat4(n, n, o), De.vec3.transformMat4(n, n, r), n;
      }, i.cS = (r) => ({ u_camera_to_center_distance: new Nn(r), u_extrude_scale: new Od(r), u_device_pixel_ratio: new Nn(r), u_matrix: new mh(r), u_inv_rot_matrix: new mh(r), u_merc_center: new zo(r), u_tile_id: new kd(r), u_zoom_transition: new Nn(r), u_up_dir: new kd(r), u_emissive_strength: new Nn(r) }), i.cT = (r) => ({ u_matrix: new mh(r), u_pixels_to_tile_units: new Od(r), u_device_pixel_ratio: new Nn(r), u_width_scale: new Nn(r), u_floor_width_scale: new Nn(r), u_units_to_pixels: new zo(r), u_dash_image: new dc(r), u_gradient_image: new dc(r), u_image_height: new Nn(r), u_texsize: new zo(r), u_tile_units_to_pixels: new Nn(r), u_alpha_discard_threshold: new Nn(r), u_trim_offset: new zo(r), u_trim_fade_range: new zo(r), u_trim_color: new ph(r), u_emissive_strength: new Nn(r), u_zbias_factor: new Nn(r), u_tile_to_meter: new Nn(r) }), i.cU = (r) => ({ u_matrix: new mh(r), u_texsize: new zo(r), u_pixels_to_tile_units: new Od(r), u_device_pixel_ratio: new Nn(r), u_width_scale: new Nn(r), u_floor_width_scale: new Nn(r), u_image: new dc(r), u_units_to_pixels: new zo(r), u_tile_units_to_pixels: new Nn(r), u_alpha_discard_threshold: new Nn(r), u_trim_offset: new zo(r), u_trim_fade_range: new zo(r), u_trim_color: new ph(r), u_emissive_strength: new Nn(r), u_zbias_factor: new Nn(r), u_tile_to_meter: new Nn(r) }), i.cV = _u, i.cW = bT, i.cX = wT, i.cY = Pu, i.cZ = (r, e, n, o, u, l) => {
        const f = r.transform, v = f.projection.name === "globe";
        let S;
        if (l.paint.get("circle-pitch-alignment") === "map")
          if (v) {
            const x = Br(f.zoom, e.canonical) * f._pixelsPerMercatorPixel;
            S = Float32Array.from([x, 0, 0, x]);
          } else
            S = f.calculatePixelsToTileUnitsMatrix(n);
        else
          S = new Float32Array([f.pixelsToGLUnits[0], 0, 0, f.pixelsToGLUnits[1]]);
        const D = { u_camera_to_center_distance: r.transform.getCameraToCenterDistance(f.projection), u_matrix: r.translatePosMatrix(e.projMatrix, n, l.paint.get("circle-translate"), l.paint.get("circle-translate-anchor")), u_device_pixel_ratio: Ct.devicePixelRatio, u_extrude_scale: S, u_inv_rot_matrix: yh, u_merc_center: [0, 0], u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_up_dir: [0, 0, 0], u_emissive_strength: l.paint.get("circle-emissive-strength") };
        if (v) {
          D.u_inv_rot_matrix = o, D.u_merc_center = u, D.u_tile_id = [e.canonical.x, e.canonical.y, 1 << e.canonical.z], D.u_zoom_transition = mr(f.zoom);
          const x = u[0] * Tt, P = u[1] * Tt;
          D.u_up_dir = f.projection.upVector(new nt(0, 0, 0), x, P);
        }
        return D;
      }, i.c_ = L0, i.ca = ph, i.cb = function(r, e, n) {
        const o = Math.sqrt(r * r + e * e + n * n), u = o > 0 ? Math.acos(n / o) * $s : 0;
        let l = r !== 0 || e !== 0 ? Math.atan2(-e, -r) * $s + 90 : 0;
        return l < 0 && (l += 360), [o, l, u];
      }, i.cc = s, i.cd = Jt, i.ce = Zi, i.cf = function(r) {
        return [Math.pow(r[0], 1 / 2.2), Math.pow(r[1], 1 / 2.2), Math.pow(r[2], 1 / 2.2)];
      }, i.cg = function(r, e) {
        return r.readFields(f2, { icons: [] }, e);
      }, i.ch = function(r) {
        return r({ pluginStatus: br, pluginURL: qa }), oc.on("pluginStateChange", r), r;
      }, i.ci = tm, i.cj = Du, i.ck = V_, i.cl = tn, i.cm = th, i.cn = Kt, i.co = $r, i.cp = Ys, i.cq = function(r) {
        const e = r.indexOf(Co);
        return e >= 0 ? r.slice(0, e) : r;
      }, i.cr = function(r) {
        return r.indexOf(Co) >= 0;
      }, i.cs = function(r) {
        const e = r.indexOf(Co);
        return e >= 0 ? r.slice(e + 1) : "";
      }, i.ct = function(r) {
        const e = [], n = r.id;
        return n === void 0 && e.push({ message: `layers.${n}: missing required property "id"` }), r.render === void 0 && e.push({ message: `layers.${n}: missing required method "render"` }), r.renderingMode && r.renderingMode !== "2d" && r.renderingMode !== "3d" && e.push({ message: `layers.${n}: property "renderingMode" must be either "2d" or "3d"` }), e;
      }, i.cu = function(r, e, n, o) {
        return r.type === "custom" ? new QT(r, e) : new h2[r.type](r, e, n, o);
      }, i.cv = io, i.cw = class extends Zu {
        constructor(r, e) {
          super(r._vectorTileFeature, r._z, r._x, r._y, r.id), r.state && (this.state = { ...r.state }), this.target = e.target, this.namespace = e.namespace, e.properties && (this.properties = e.properties), this.target && ("featuresetId" in this.target && !this.target.importId || "layerId" in this.target) && (this.source = r.source, this.sourceLayer = r.sourceLayer, this.layer = r.layer);
        }
        toJSON() {
          const r = super.toJSON();
          return r.target = this.target, r.namespace = this.namespace, r;
        }
      }, i.cx = oc, i.cy = xn, i.cz = _p, i.d = function(r) {
        return ge.API_TILEJSON_REGEX.test(r);
      }, i.d$ = Mr, i.d0 = (r, e, n, o, u, l, f, v, S) => {
        const D = r.transform, x = D.calculatePixelsToTileUnitsMatrix(e), P = n.paint.get("line-trim-color-use-theme").constantOr("default") === "none", I = D.pitch < 15 ? A0(0.07, 0.7, si((14 - D.zoom) / 5, 0, 1)) : 0.07;
        return { u_matrix: I0(r, e, n, o), u_pixels_to_tile_units: x, u_device_pixel_ratio: l, u_width_scale: f, u_floor_width_scale: v, u_units_to_pixels: [1 / D.pixelsToGLUnits[0], 1 / D.pixelsToGLUnits[1]], u_dash_image: 0, u_gradient_image: 1, u_image_height: u, u_texsize: z0(n) && e.lineAtlasTexture ? e.lineAtlasTexture.size : [0, 0], u_tile_units_to_pixels: C0(e, r.transform), u_alpha_discard_threshold: 0, u_trim_offset: S, u_trim_fade_range: n.paint.get("line-trim-fade-range"), u_trim_color: n.paint.get("line-trim-color").toRenderColor(P ? null : n.lut).toArray01(), u_emissive_strength: n.paint.get("line-emissive-strength"), u_zbias_factor: I, u_tile_to_meter: s(e.tileID.canonical, 0) };
      }, i.d1 = xo, i.d2 = Bd, i.d3 = y0, i.d4 = Bt, i.d5 = Ip, i.d6 = yc, i.d7 = 450, i.d8 = 7, i.d9 = JT, i.dA = Wr, i.dB = t, i.dC = el, i.dD = function([r, e, n]) {
        const o = Math.hypot(r, e, n), u = Math.atan2(r, n), l = 0.5 * Math.PI - Math.acos(-e / o);
        return new Ui(kn(u), kn(l));
      }, i.dE = Q_, i.dF = function(r) {
        const e = r.navigator ? r.navigator.userAgent : null;
        return !!function(n) {
          if (Ls == null) {
            const o = n.navigator ? n.navigator.userAgent : null;
            Ls = !!n.safari || !(!o || !(/\b(iPad|iPhone|iPod)\b/.test(o) || o.match("Safari") && !o.match("Chrome")));
          }
          return Ls;
        }(r) && e && (e.match("Version/15.4") || e.match("Version/15.5") || e.match(/CPU (OS|iPhone OS) (15_4|15_5) like Mac OS X/));
      }, i.dG = function(r, e) {
        li = r, ri = e;
      }, i.dH = Nr, i.dI = ko, i.dJ = function(r) {
        const e = [0, 0, 0], n = De.mat4.identity(new Float64Array(16));
        return De.mat4.multiply(n, r.pixelMatrix, r.globeMatrix), De.vec3.transformMat4(e, e, n), new Et(e[0], e[1]);
      }, i.dK = function(r, e, n = !1) {
        if (br === yd || br === ea || br === xd)
          throw new Error("setRTLTextPlugin cannot be called multiple times.");
        qa = Ct.resolveURL(r), br = yd, vd = e, ou(), n || ep();
      }, i.dL = au, i.dM = function() {
        tm().acquire(rg);
      }, i.dN = function() {
        const r = lf;
        r && (r.isPreloaded() && r.numActive() === 1 ? (r.release(rg), lf = null) : console.warn("Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()"));
      }, i.dO = Th, i.dP = function(r) {
        const e = $i();
        if (!e)
          return;
        const n = e.delete(di);
        r && n.catch(r).then(() => r());
      }, i.dQ = af, i.dR = Tv, i.dS = function(r) {
        _g = Ct.resolveURL(r), Gu || (Gu = new Bu(tm(), new Zo())), Gu.broadcast("setDracoUrl", _g);
      }, i.dT = Mv, i.dU = function(r) {
        ju = Ct.resolveURL(r), Gu || (Gu = new Bu(tm(), new Zo())), Gu.broadcast("setMeshoptUrl", ju);
      }, i.dV = Ft, i.dW = gc, i.dX = Ea, i.dY = Dv, i.dZ = kv, i.d_ = M0, i.da = qi, i.db = zd, i.dc = 256, i.dd = er, i.de = va, i.df = Rr, i.dg = yu, i.dh = function(r, e, n, o, u) {
        return si((r - e) / (n - e) * (u - o) + o, o, u);
      }, i.di = es, i.dj = c, i.dk = class {
        constructor(r, e, n, o) {
          this.context = r, this.format = o, this.size = n, this.texture = r.gl.createTexture();
          const [u, l, f] = this.size, { gl: v } = r;
          v.bindTexture(v.TEXTURE_3D, this.texture), r.pixelStoreUnpackFlipY.set(!1), r.pixelStoreUnpack.set(1), r.pixelStoreUnpackPremultiplyAlpha.set(!1), v.texImage3D(v.TEXTURE_3D, 0, this.format, u, l, f, 0, X_(this.format), Y_(this.format), e.data);
        }
        bind(r, e) {
          const { context: n } = this, { gl: o } = n;
          o.bindTexture(o.TEXTURE_3D, this.texture), r !== this.minFilter && (o.texParameteri(o.TEXTURE_3D, o.TEXTURE_MAG_FILTER, r), o.texParameteri(o.TEXTURE_3D, o.TEXTURE_MIN_FILTER, r), this.minFilter = r), e !== this.wrapS && (o.texParameteri(o.TEXTURE_3D, o.TEXTURE_WRAP_S, e), o.texParameteri(o.TEXTURE_3D, o.TEXTURE_WRAP_T, e), this.wrapS = e);
        }
        destroy() {
          const { gl: r } = this.context;
          r.deleteTexture(this.texture), this.texture = null;
        }
      }, i.dl = eg, i.dm = [1, 1, 1], i.dn = Fu, i.dp = Ou, i.dq = Ka, i.dr = Pl, i.ds = _c, i.dt = Id, i.du = Cd, i.dv = class {
        constructor() {
          this._updateTime = 0, this._sourceIds = [], this._activeRegions = [], this._prevRegions = [], this._globalClipBounds = { min: new Et(1 / 0, 1 / 0), max: new Et(-1 / 0, -1 / 0) };
        }
        clear() {
          this._activeRegions.length > 0 && ++this._updateTime, this._activeRegions = [], this._prevRegions = [];
        }
        get updateTime() {
          return this._updateTime;
        }
        getReplacementRegionsForTile(r, e = !1) {
          const n = t0(new Et(0, 0), new Et(Tt, Tt), r), o = [];
          if (e && !S_(n, this._globalClipBounds))
            return o;
          for (const u of this._activeRegions) {
            if (u.hiddenByOverlap || !S_(n, u))
              continue;
            const l = $w(u.min, u.max, r);
            o.push({ min: l.min, max: l.max, sourceId: this._sourceIds[u.priority], footprint: u.footprint, footprintTileId: u.tileId, order: u.order, clipMask: u.clipMask, clipScope: u.clipScope });
          }
          return o;
        }
        setSources(r) {
          this._setSources(r.map((e) => ({ getSourceId: () => e.cache.id, getFootprints: () => {
            const n = [];
            for (const o of e.cache.getVisibleCoordinates()) {
              const u = e.cache.getTile(o).buckets[e.layer];
              u && u.updateFootprints(o.toUnwrapped(), n);
            }
            return n;
          }, getOrder: () => e.order, getClipMask: () => e.clipMask, getClipScope: () => e.clipScope })));
        }
        _addSource(r) {
          const e = r.getFootprints();
          if (e.length === 0)
            return;
          const n = r.getOrder(), o = r.getClipMask(), u = r.getClipScope();
          for (const l of e) {
            if (!l.footprint)
              continue;
            const f = t0(l.footprint.min, l.footprint.max, l.id);
            this._activeRegions.push({ min: f.min, max: f.max, hiddenByOverlap: !1, priority: this._sourceIds.length, tileId: l.id, footprint: l.footprint, order: n, clipMask: o, clipScope: u });
          }
          this._sourceIds.push(r.getSourceId());
        }
        _computeReplacement() {
          this._activeRegions.sort((e, n) => e.priority - n.priority || Ap(e.min, n.min) || Ap(e.max, n.max) || e.order - n.order || e.clipMask - n.clipMask || function(o, u) {
            const l = (f, v) => f + v;
            return o.length - u.length || o.reduce(l, "").localeCompare(u.reduce(l, ""));
          }(e.clipScope, n.clipScope));
          let r = this._activeRegions.length !== this._prevRegions.length;
          if (!r) {
            let e = 0;
            for (; !r && e !== this._activeRegions.length; ) {
              const n = this._activeRegions[e], o = this._prevRegions[e];
              r = n.priority !== o.priority || !e0(n, o) || n.order !== o.order || n.clipMask !== o.clipMask || !Ws(n.clipScope, o.clipScope), ++e;
            }
          }
          if (r) {
            ++this._updateTime;
            for (const n of this._activeRegions)
              n.order !== Pp && (this._globalClipBounds.min.x = Math.min(this._globalClipBounds.min.x, n.min.x), this._globalClipBounds.min.y = Math.min(this._globalClipBounds.min.y, n.min.y), this._globalClipBounds.max.x = Math.max(this._globalClipBounds.max.x, n.max.x), this._globalClipBounds.max.y = Math.max(this._globalClipBounds.max.y, n.max.y));
            const e = (n) => {
              const o = this._activeRegions;
              if (n >= o.length)
                return n;
              const u = o[n].priority;
              for (; n < o.length && o[n].priority === u; )
                ++n;
              return n;
            };
            if (this._sourceIds.length > 1) {
              let n = 0, o = e(n);
              for (; n !== o; ) {
                let u = n;
                const l = n;
                for (; u !== o; ) {
                  const f = this._activeRegions[u];
                  f.hiddenByOverlap = !1;
                  for (let v = 0; v < l; v++) {
                    const S = this._activeRegions[v];
                    if (!S.hiddenByOverlap && f.order === Pp && S_(f, S) && (f.hiddenByOverlap = n0(f.footprint, f.tileId, S.footprint, S.tileId), f.hiddenByOverlap))
                      break;
                  }
                  ++u;
                }
                n = o, o = e(n);
              }
            }
          }
        }
        _setSources(r) {
          [this._prevRegions, this._activeRegions] = [this._activeRegions, []], this._sourceIds = [];
          for (let e = r.length - 1; e >= 0; e--)
            this._addSource(r[e]);
          this._computeReplacement();
        }
      }, i.dw = class {
        constructor(r) {
          this._createGrid(r), this._createPoles(r);
        }
        destroy() {
          this._poleIndexBuffer.destroy(), this._gridBuffer.destroy(), this._gridIndexBuffer.destroy(), this._poleNorthVertexBuffer.destroy(), this._poleSouthVertexBuffer.destroy();
          for (const r of this._poleSegments)
            r.destroy();
          for (const r of this._gridSegments)
            r.withSkirts.destroy(), r.withoutSkirts.destroy();
        }
        _fillGridMeshWithLods(r, e) {
          const n = new Lo(), o = new qs(), u = [], l = r + 1 + 2, f = e[0] + 1, v = e[0] + 1 + (1 + e.length), S = (D, x, P) => {
            let I = D === l - 1 ? D - 2 : D === 0 ? D : D - 1;
            return I += P ? 24575 : 0, [I, x];
          };
          for (let D = 0; D < l; ++D)
            n.emplaceBack(...S(D, 0, !0));
          for (let D = 0; D < f; ++D)
            for (let x = 0; x < l; ++x)
              n.emplaceBack(...S(x, D, (x === 0 || x === l - 1) && !0));
          for (let D = 0; D < e.length; ++D) {
            const x = e[D];
            for (let P = 0; P < l; ++P)
              n.emplaceBack(...S(P, x, !0));
          }
          for (let D = 0; D < e.length; ++D) {
            const x = o.length, P = e[D] + 1 + 2, I = new qs();
            for (let k = 0; k < P - 1; k++) {
              const V = k === P - 2, U = V ? l * (v - e.length + D - k) : l;
              for (let q = 0; q < l - 1; q++) {
                const $ = k * l + q;
                k === 0 || V || q === 0 || q === l - 2 ? (I.emplaceBack($ + 1, $, $ + U), I.emplaceBack($ + U, $ + U + 1, $ + 1)) : (o.emplaceBack($ + 1, $, $ + U), o.emplaceBack($ + U, $ + U + 1, $ + 1));
              }
            }
            const M = Wn.simpleSegment(0, x, n.length, o.length - x);
            for (let k = 0; k < I.uint16.length; k += 3)
              o.emplaceBack(I.uint16[k], I.uint16[k + 1], I.uint16[k + 2]);
            const C = Wn.simpleSegment(0, x, n.length, o.length - x);
            u.push({ withoutSkirts: M, withSkirts: C });
          }
          return { vertices: n, indices: o, segments: u };
        }
        _createGrid(r) {
          const e = this._fillGridMeshWithLods(Il, Eu);
          this._gridSegments = e.segments, this._gridBuffer = r.createVertexBuffer(e.vertices, ai.members), this._gridIndexBuffer = r.createIndexBuffer(e.indices, !0);
        }
        _createPoles(r) {
          const e = new qs();
          for (let f = 0; f <= Il; f++)
            e.emplaceBack(0, f + 1, f + 2);
          this._poleIndexBuffer = r.createIndexBuffer(e, !0);
          const n = new Rr(), o = new Rr(), u = new Rr(), l = new Rr();
          this._poleSegments = [];
          for (let f = 0, v = 0; f < Su; f++) {
            const S = 360 / (1 << f);
            n.emplaceBack(0, -dr, 0, 0.5, 0), o.emplaceBack(0, -dr, 0, 0.5, 1), u.emplaceBack(0, -dr, 0, 0.5, 0.5), l.emplaceBack(0, -dr, 0, 0.5, 0.5);
            for (let D = 0; D <= Il; D++) {
              let x = D / Il, P = 0;
              const I = ei(0, S, x), [M, C, k] = mc(ia, Ll, I, dr);
              n.emplaceBack(M, C, k, x, P), o.emplaceBack(M, C, k, x, 1 - P);
              const V = vi(I);
              x = 0.5 + 0.5 * Math.sin(V), P = 0.5 + 0.5 * Math.cos(V), u.emplaceBack(M, C, k, x, P), l.emplaceBack(M, C, k, x, 1 - P);
            }
            this._poleSegments.push(Wn.simpleSegment(v, 0, 66, 64)), v += 66;
          }
          this._poleNorthVertexBuffer = r.createVertexBuffer(n, $t, !1), this._poleSouthVertexBuffer = r.createVertexBuffer(o, $t, !1), this._texturedPoleNorthVertexBuffer = r.createVertexBuffer(u, $t, !1), this._texturedPoleSouthVertexBuffer = r.createVertexBuffer(l, $t, !1);
        }
        getGridBuffers(r, e) {
          return [this._gridBuffer, this._gridIndexBuffer, e ? this._gridSegments[r].withSkirts : this._gridSegments[r].withoutSkirts];
        }
        getPoleBuffers(r, e) {
          return [e ? this._texturedPoleNorthVertexBuffer : this._poleNorthVertexBuffer, e ? this._texturedPoleSouthVertexBuffer : this._poleSouthVertexBuffer, this._poleIndexBuffer, this._poleSegments[r]];
        }
      }, i.dx = Pp, i.dy = qr, i.dz = function() {
        return !!document.fullscreenElement || !!document.webkitFullscreenElement;
      }, i.e = ge, i.e0 = rr, i.e1 = Q0, i.e2 = function(r, e, n, o, u, l, f, v, S, D, x = 1, P, I) {
        r.createArrays(), r.tilePixelRatio = Tt / (512 * r.overscaling), r.compareText = {}, r.iconsNeedLinear = !1;
        const M = r.layers[0].layout, C = r.layers[0]._unevaluatedLayout._values, k = {};
        k.scaleFactor = x, k.textSizeScaleRange = M.get("text-size-scale-range"), k.iconSizeScaleRange = M.get("icon-size-scale-range");
        const [V, U] = k.textSizeScaleRange, [q, $] = k.iconSizeScaleRange;
        if (k.textScaleFactor = si(k.scaleFactor, V, U), k.iconScaleFactor = si(k.scaleFactor, q, $), r.textSizeData.kind === "composite") {
          const { minZoom: ie, maxZoom: fe } = r.textSizeData;
          k.compositeTextSizes = [C["text-size"].possiblyEvaluate(new Tn(ie), v), C["text-size"].possiblyEvaluate(new Tn(fe), v)];
        }
        if (r.iconSizeData.kind === "composite") {
          const { minZoom: ie, maxZoom: fe } = r.iconSizeData;
          k.compositeIconSizes = [C["icon-size"].possiblyEvaluate(new Tn(ie), v), C["icon-size"].possiblyEvaluate(new Tn(fe), v)];
        }
        k.layoutTextSize = C["text-size"].possiblyEvaluate(new Tn(S + 1), v), k.layoutIconSize = C["icon-size"].possiblyEvaluate(new Tn(S + 1), v), k.textMaxSize = C["text-size"].possiblyEvaluate(new Tn(18), v);
        const H = M.get("text-rotation-alignment") === "map" && M.get("symbol-placement") !== "point", K = M.get("text-size");
        let Q = !1;
        for (const ie of r.features)
          if (ie.icon && ie.icon.nameSecondary) {
            Q = !0;
            break;
          }
        for (const ie of r.features) {
          const fe = M.get("text-font").evaluate(ie, {}, v).join(","), de = K.evaluate(ie, {}, v) * k.textScaleFactor, ue = k.layoutTextSize.evaluate(ie, {}, v) * k.textScaleFactor, Se = (k.layoutIconSize.evaluate(ie, {}, v), { horizontal: {}, vertical: void 0 }), me = ie.text;
          let Ee, ze = [0, 0];
          if (me) {
            const Ue = me.toString(), Fe = M.get("text-letter-spacing").evaluate(ie, {}, v) * tr, et = M.get("text-line-height").evaluate(ie, {}, v) * tr, dt = Kf(Ue) ? Fe : 0, tt = M.get("text-anchor").evaluate(ie, {}, v), Mt = M.get("text-variable-anchor");
            if (!Mt) {
              const St = M.get("text-radial-offset").evaluate(ie, {}, v);
              ze = St ? rx(tt, [St * tr, U_]) : M.get("text-offset").evaluate(ie, {}, v).map((Nt) => Nt * tr);
            }
            let wt = H ? "center" : M.get("text-justify").evaluate(ie, {}, v);
            const At = M.get("symbol-placement") === "point", rt = At ? M.get("text-max-width").evaluate(ie, {}, v) * tr : 1 / 0, Ut = (St) => {
              r.allowVerticalPlacement && md(Ue) && (Se.vertical = F_(me, e, n, u, fe, rt, et, tt, St, dt, ze, Ro.vertical, !0, ue, de));
            };
            if (!H && Mt) {
              const St = wt === "auto" ? Mt.map((Qt) => j_(Qt)) : [wt];
              let Nt = !1;
              for (let Qt = 0; Qt < St.length; Qt++) {
                const pi = St[Qt];
                if (!Se.horizontal[pi])
                  if (Nt)
                    Se.horizontal[pi] = Se.horizontal[0];
                  else {
                    const gi = F_(me, e, n, u, fe, rt, et, "center", pi, dt, ze, Ro.horizontal, !1, ue, de);
                    gi && (Se.horizontal[pi] = gi, Nt = gi.positionedLines.length === 1);
                  }
              }
              Ut("left");
            } else {
              if (wt === "auto" && (wt = j_(tt)), At || M.get("text-writing-mode").indexOf("horizontal") >= 0 || !md(Ue)) {
                const St = F_(me, e, n, u, fe, rt, et, tt, wt, dt, ze, Ro.horizontal, !1, ue, de);
                St && (Se.horizontal[wt] = St);
              }
              Ut(At ? "left" : wt);
            }
          }
          let Ie = !1, Re = !1;
          if (ie.icon && ie.icon.namePrimary) {
            const Ue = Lp(r.iconSizeData, C["icon-size"], v, r.zoom, ie) * k.iconScaleFactor * P, Fe = ie.icon.getPrimary().scaleSelf(Ue).serialize(), et = o[Fe];
            et && (Ee = zT(u[Fe], ie.icon.nameSecondary ? u[ie.icon.getSecondary().scaleSelf(Ue).serialize()] : void 0, M.get("icon-offset").evaluate(ie, {}, v), M.get("icon-anchor").evaluate(ie, {}, v)), Ie = et.sdf, Re = et.usvg, r.sdfIcons === void 0 ? r.sdfIcons = et.sdf : r.sdfIcons !== et.sdf && mi("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"), (et.pixelRatio !== r.pixelRatio || M.get("icon-rotate").constantOr(1) !== 0) && (r.iconsNeedLinear = !0));
          }
          const Ve = ax(Se.horizontal) || Se.vertical;
          r.iconsInText || (r.iconsInText = !!Ve && Ve.iconsInText), (Ve || Ee) && NT(r, ie, Se, Ee, o, k, ue, 0, ze, Ie, Re, f, v, D, I, Q);
        }
        l && r.generateCollisionDebugBuffers(S, r.collisionBoxArray, k.textScaleFactor);
      }, i.e3 = Iu, i.e4 = am, i.e5 = Zr, i.e6 = Xy, i.e7 = B0, i.e8 = O, i.e9 = function(r) {
        let e = 0;
        if (new Uint32Array(r, 0, 1)[0] !== Ev) {
          const n = new Uint32Array(r, 0, 7), [, , o, u, l, f] = n;
          e = n.byteLength + u + l + f + l, (o !== r.byteLength || e >= r.byteLength) && mi("Invalid b3dm header information.");
        }
        return Iv(r, e);
      }, i.ea = function(r, e) {
        const n = zv(r);
        for (const o of n) {
          for (const u of o.meshes)
            pM(u);
          o.lights && (o.lightMeshIndex = o.meshes.length, o.meshes.push(mM(o.lights, e)));
        }
        return n;
      }, i.eb = em, i.ec = $x, i.ed = co, i.ee = function(r) {
        Hi(), Ni != null && Ni.then((e) => {
          e.keys().then((n) => {
            for (let o = 0; o < n.length - r; o++)
              e.delete(n[o]);
          });
        });
      }, i.f = function(r) {
        return r.indexOf("mapbox:") === 0;
      }, i.g = function(r, e) {
        return xn(An(r, { method: "GET" }), e);
      }, i.h = Le, i.i = function(r) {
        return ge.API_STYLE_REGEX.test(r) && !Ce(r);
      }, i.j = function(r) {
        return decodeURIComponent(atob(r).split("").map((e) => "%" + ("00" + e.charCodeAt(0).toString(16)).slice(-2)).join(""));
      }, i.k = function(r) {
        return btoa(encodeURIComponent(r).replace(/%([0-9A-F]{2})/g, (e, n) => String.fromCharCode(+("0x" + n))));
      }, i.l = An, i.m = Gs, i.n = function(r, e) {
        return xn(An(r, { type: "json" }), e);
      }, i.o = Hn, i.p = function(r, e) {
        return xn(An(r, { method: "POST" }), e);
      }, i.q = Ct, i.r = _r, i.s = function(r) {
        try {
          const e = self[r];
          return e.setItem("_mapbox_test_", 1), e.removeItem("_mapbox_test_"), !0;
        } catch {
          return !1;
        }
      }, i.t = mt, i.u = function() {
        return function r(e) {
          return e ? (e ^ Math.random() * (16 >> e / 4)).toString(16) : ([1e7] + -[1e3] + -4e3 + -8e3 + -1e11).replace(/[018]/g, r);
        }();
      }, i.v = function(r) {
        return !!r && /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(r);
      }, i.w = mi, i.x = function() {
        return og || (og = new Th()), og;
      }, i.y = Cr, i.z = Ar;
    }), b(["./shared"], function(i) {
      function O(Ke) {
        const re = Ke ? Ke.url.toString() : void 0;
        return re ? performance.getEntriesByName(re) : [];
      }
      function j(Ke) {
        if (typeof Ke == "number" || typeof Ke == "boolean" || typeof Ke == "string" || Ke == null)
          return JSON.stringify(Ke);
        if (Array.isArray(Ke)) {
          let le = "[";
          for (const ge of Ke)
            le += `${j(ge)},`;
          return `${le}]`;
        }
        let re = "{";
        for (const le of Object.keys(Ke).sort())
          re += `${le}:${j(Ke[le])},`;
        return `${re}}`;
      }
      function Y(Ke) {
        let re = "";
        for (const le of i.bm)
          re += `/${j(Ke[le])}`;
        return re;
      }
      class J {
        constructor(re) {
          this.keyCache = {}, this._layers = {}, this._layerConfigs = {}, re && this.replace(re);
        }
        replace(re, le) {
          this._layerConfigs = {}, this._layers = {}, this.update(re, [], le);
        }
        update(re, le, ge) {
          this._options = ge;
          for (const Ce of re)
            this._layerConfigs[Ce.id] = Ce, (this._layers[Ce.id] = i.cu(Ce, this.scope, null, this._options)).compileFilter(ge), this.keyCache[Ce.id] && delete this.keyCache[Ce.id];
          for (const Ce of le)
            delete this.keyCache[Ce], delete this._layerConfigs[Ce], delete this._layers[Ce];
          this.familiesBySource = {};
          const Le = function(Ce, Be) {
            const qe = {};
            for (let Ye = 0; Ye < Ce.length; Ye++) {
              const Qe = Ce[Ye];
              let it = Be && Be[Qe.id];
              !it && (it = Y(Qe), Qe.type === "line" && Qe.paint) && function Ct(It) {
                return typeof It == "string" && It === "line-progress" || (Array.isArray(It) ? It.some(Ct) : !(!It || typeof It != "object") && Object.values(It).some(Ct));
              }(Qe.paint["line-width"]) && (it += `/${j(Qe.paint["line-width"])}`), Be && (Be[Qe.id] = it);
              let mt = qe[it];
              mt || (mt = qe[it] = []), mt.push(Qe);
            }
            const Pe = [];
            for (const Ye in qe)
              Pe.push(qe[Ye]);
            return Pe;
          }(i.bj(this._layerConfigs), this.keyCache);
          for (const Ce of Le) {
            const Be = Ce.map((mt) => this._layers[mt.id]), qe = Be[0];
            if (qe.visibility === "none")
              continue;
            const Pe = qe.source || "";
            let Ye = this.familiesBySource[Pe];
            Ye || (Ye = this.familiesBySource[Pe] = {});
            const Qe = qe.sourceLayer || "_geojsonTileLayer";
            let it = Ye[Qe];
            it || (it = Ye[Qe] = []), it.push(Be);
          }
        }
      }
      const ae = 1 * i.dX;
      class ce {
        constructor(re) {
          const le = {}, ge = [];
          for (const qe in re) {
            const Pe = re[qe], Ye = le[qe] = {};
            for (const Qe in Pe.glyphs) {
              const it = Pe.glyphs[+Qe];
              if (!it || it.bitmap.width === 0 || it.bitmap.height === 0)
                continue;
              const mt = it.metrics.localGlyph ? ae : 1, Ct = { x: 0, y: 0, w: it.bitmap.width + 2 * mt, h: it.bitmap.height + 2 * mt };
              ge.push(Ct), Ye[Qe] = Ct;
            }
          }
          const { w: Le, h: Ce } = i.C(ge), Be = new i.dW({ width: Le || 1, height: Ce || 1 });
          for (const qe in re) {
            const Pe = re[qe];
            for (const Ye in Pe.glyphs) {
              const Qe = Pe.glyphs[+Ye];
              if (!Qe || Qe.bitmap.width === 0 || Qe.bitmap.height === 0)
                continue;
              const it = le[qe][Ye], mt = Qe.metrics.localGlyph ? ae : 1;
              i.dW.copy(Qe.bitmap, Be, { x: 0, y: 0 }, { x: it.x + mt, y: it.y + mt }, Qe.bitmap);
            }
          }
          this.image = Be, this.positions = le;
        }
      }
      i.dV(ce, "GlyphAtlas");
      class Te {
        constructor(re) {
          this.tileID = new i.aG(re.tileID.overscaledZ, re.tileID.wrap, re.tileID.canonical.z, re.tileID.canonical.x, re.tileID.canonical.y), this.tileZoom = re.tileZoom, this.uid = re.uid, this.zoom = re.zoom, this.lut = re.lut, this.canonical = re.tileID.canonical, this.pixelRatio = re.pixelRatio, this.tileSize = re.tileSize, this.source = re.source, this.scope = re.scope, this.overscaling = this.tileID.overscaleFactor(), this.showCollisionBoxes = re.showCollisionBoxes, this.collectResourceTiming = !!re.request && re.request.collectResourceTiming, this.promoteId = re.promoteId, this.isSymbolTile = re.isSymbolTile, this.tileTransform = i.aQ(re.tileID.canonical, re.projection), this.projection = re.projection, this.worldview = re.worldview, this.localizableLayerIds = re.localizableLayerIds, this.brightness = re.brightness, this.extraShadowCaster = !!re.extraShadowCaster, this.tessellationStep = re.tessellationStep, this.scaleFactor = re.scaleFactor;
        }
        parse(re, le, ge, Le, Ce) {
          this.status = "parsing", this.data = re, this.collisionBoxArray = new i.aW();
          const Be = new i.dY(Object.keys(re.layers).sort()), qe = new i.dZ(this.tileID, this.promoteId);
          qe.bucketLayerIDs = [];
          const Pe = {}, Ye = new i.d_(256, 256), Qe = { featureIndex: qe, iconDependencies: {}, patternDependencies: {}, glyphDependencies: {}, lineAtlas: Ye, availableImages: ge, brightness: this.brightness, scaleFactor: this.scaleFactor }, it = le.familiesBySource[this.source];
          for (const ri in it) {
            const Ki = re.layers[ri];
            if (!Ki)
              continue;
            let Ni = !1, Ei = !1, $i = !1;
            for (const Gs of it[ri])
              Gs[0].type === "symbol" ? Ni = !0 : Ei = !0, Gs[0].is3D() && Gs[0].type !== "model" && ($i = !0);
            if (this.extraShadowCaster && !$i || this.isSymbolTile === !0 && !Ni || this.isSymbolTile === !1 && !Ei)
              continue;
            Ki.version === 1 && i.w(`Vector tile source "${this.source}" layer "${ri}" does not use vector tile spec v2 and therefore may have some rendering errors.`);
            const Hi = Be.encode(ri), Xn = [];
            for (let Gs = 0, ps = 0; Gs < Ki.length; Gs++) {
              const vs = Ki.feature(Gs), ra = qe.getId(vs, ri);
              if (this.localizableLayerIds && this.localizableLayerIds.has(ri)) {
                const Er = vs.properties ? vs.properties.worldview : null;
                if (this.worldview && typeof Er == "string")
                  if (Er === "all")
                    vs.properties.$localized = !0;
                  else {
                    if (!Er.split(",").includes(this.worldview))
                      continue;
                    vs.properties.$localized = !0, vs.properties.worldview = this.worldview;
                  }
              }
              Xn.push({ feature: vs, id: ra, index: ps, sourceLayerIndex: Hi }), ps++;
            }
            for (const Gs of it[ri]) {
              const ps = Gs[0];
              (!this.extraShadowCaster || ps.is3D() && ps.type !== "model") && (this.isSymbolTile !== void 0 && ps.type === "symbol" !== this.isSymbolTile || ps.minzoom && this.zoom < Math.floor(ps.minzoom) || ps.maxzoom && this.zoom >= ps.maxzoom || ps.visibility !== "none" && (be(Gs, this.zoom, Qe.brightness, ge), (Pe[ps.id] = ps.createBucket({ index: qe.bucketLayerIDs.length, layers: Gs, zoom: this.zoom, lut: this.lut, canonical: this.canonical, pixelRatio: this.pixelRatio, overscaling: this.overscaling, collisionBoxArray: this.collisionBoxArray, sourceLayerIndex: Hi, sourceID: this.source, projection: this.projection.spec, tessellationStep: this.tessellationStep })).populate(Xn, Qe, this.tileID.canonical, this.tileTransform), qe.bucketLayerIDs.push(Gs.map((vs) => i.aC(vs.id, vs.scope)))));
            }
          }
          let mt, Ct, It, Kt;
          Ye.trim();
          const di = { type: "maybePrepare", isSymbolTile: this.isSymbolTile, zoom: this.zoom }, li = () => {
            if (mt)
              return this.status = "done", Ce(mt);
            if (this.extraShadowCaster)
              this.status = "done", Ce(null, { buckets: i.bj(Pe).filter((ri) => !ri.isEmpty()), featureIndex: qe, collisionBoxArray: null, glyphAtlasImage: null, lineAtlas: null, imageAtlas: null, brightness: Qe.brightness, glyphMap: null, iconMap: null, glyphPositions: null });
            else if (Ct && It && Kt) {
              const ri = new ce(Ct), Ki = new i.e1(It, Kt, this.lut);
              for (const Ni in Pe) {
                const Ei = Pe[Ni];
                Ei instanceof i.aX ? (be(Ei.layers, this.zoom, Qe.brightness, ge), i.e2(Ei, Ct, ri.positions, It, Ki.iconPositions, this.showCollisionBoxes, ge, this.tileID.canonical, this.tileZoom, this.projection, this.scaleFactor, this.pixelRatio, this.brightness)) : Ei.hasPattern && (Ei instanceof i.b1 || Ei instanceof i.b2 || Ei instanceof i.d5) && (be(Ei.layers, this.zoom, Qe.brightness, ge), Ei.addFeatures(Qe, this.tileID.canonical, Ki.patternPositions, ge, this.tileTransform, this.brightness));
              }
              this.status = "done", Ce(null, { buckets: i.bj(Pe).filter((Ni) => !Ni.isEmpty()), featureIndex: qe, collisionBoxArray: this.collisionBoxArray, glyphAtlasImage: ri.image, lineAtlas: Ye, imageAtlas: Ki, brightness: Qe.brightness });
            }
          };
          if (!this.extraShadowCaster) {
            const ri = i.d$(Qe.glyphDependencies, (Ei) => Object.keys(Ei).map(Number));
            Object.keys(ri).length ? Le.send("getGlyphs", { uid: this.uid, stacks: ri, scope: this.scope }, (Ei, $i) => {
              mt || (mt = Ei, Ct = $i, li());
            }, void 0, !1, di) : Ct = {};
            const Ki = Object.keys(Qe.iconDependencies);
            Ki.length ? Le.send("getImages", { icons: Ki, source: this.source, scope: this.scope, tileID: this.tileID, type: "icons" }, (Ei, $i) => {
              if (mt)
                return;
              mt = Ei;
              const Hi = {};
              Object.values($i).some((Xn) => Xn.usvg) ? this.rasterize(Le, Hi, $i, Qe.iconDependencies, () => {
                It = Hi, li();
              }) : (this.fillImageMap(Hi, Qe.iconDependencies, $i), It = Hi, li());
            }, void 0, !1, di) : It = {};
            const Ni = Object.keys(Qe.patternDependencies);
            Ni.length ? Le.send("getImages", { icons: Ni, source: this.source, scope: this.scope, tileID: this.tileID, type: "patterns" }, (Ei, $i) => {
              if (!mt) {
                mt = Ei;
                const Hi = {};
                Object.values($i).some((Xn) => Xn.usvg) ? this.rasterize(Le, Hi, $i, Qe.patternDependencies, () => {
                  Kt = Hi, li();
                }) : (this.fillImageMap(Hi, Qe.patternDependencies, $i), Kt = Hi, li());
              }
            }, void 0, !1, di) : Kt = {};
          }
          li();
        }
        fillImageMap(re, le, ge) {
          for (const Le in ge) {
            const Ce = le[Le] || [];
            for (const Be of Ce)
              ge[Be.id].usvg || (re[Be.serialize()] = ge[Be.id]);
          }
        }
        getImageTaskQueue(re, le, ge) {
          const Le = {};
          for (const Ce in le) {
            const Be = ge[Ce] || [];
            for (const qe of Be) {
              const Pe = qe.serialize();
              le[qe.id].usvg ? Le[Pe] || (Le[Pe] = qe) : re[Pe] = le[qe.id];
            }
          }
          return Le;
        }
        rasterize(re, le, ge, Le, Ce) {
          const Be = this.getImageTaskQueue(le, ge, Le);
          this.rasterizeTask = re.send("rasterizeImages", { scope: this.scope, imageTasks: Be }, (qe, Pe) => {
            if (!qe)
              for (const Ye in Pe) {
                const { id: Qe } = i.e0.deserializeFromString(Ye);
                le[Ye] = Object.assign({}, ge[Qe], { data: Pe[Ye] });
              }
            Ce();
          });
        }
        cancelRasterize() {
          this.rasterizeTask && this.rasterizeTask.cancel();
        }
      }
      function be(Ke, re, le, ge) {
        const Le = new i.a8(re, { brightness: le });
        for (const Ce of Ke)
          Ce.recalculate(Le, ge);
      }
      class Ze extends i.E {
        constructor(re, le, ge, Le, Ce, Be) {
          super(), this.actor = re, this.layerIndex = le, this.availableImages = ge, this.loadVectorData = Ce || i.aD, this.loading = {}, this.loaded = {}, this.deduped = new i.aB(re.scheduler), this.isSpriteLoaded = Le, this.scheduler = re.scheduler, this.brightness = Be;
        }
        loadTile(re, le) {
          const ge = re.uid, Le = re && re.request, Ce = Le && Le.collectResourceTiming, Be = this.loading[ge] = new Te(re);
          Be.abort = this.loadVectorData(re, (qe, Pe) => {
            const Ye = !this.loading[ge];
            if (delete this.loading[ge], Be.cancelRasterize(), Ye || qe || !Pe)
              return Be.status = "done", Ye || (this.loaded[ge] = Be), le(qe);
            const Qe = Pe.rawData, it = {};
            Pe.expires && (it.expires = Pe.expires), Pe.cacheControl && (it.cacheControl = Pe.cacheControl), Be.vectorTile = Pe.vectorTile || new i.e3.VectorTile(new i.bh(Qe));
            const mt = () => {
              Be.parse(Be.vectorTile, this.layerIndex, this.availableImages, this.actor, (Ct, It) => {
                if (Ct || !It)
                  return le(Ct);
                const Kt = {};
                if (Ce) {
                  const di = O(Le);
                  di.length > 0 && (Kt.resourceTiming = JSON.parse(JSON.stringify(di)));
                }
                le(null, i.l({ rawTileData: Qe.slice(0) }, It, it, Kt));
              });
            };
            this.isSpriteLoaded ? mt() : this.once("isSpriteLoaded", () => {
              this.scheduler ? this.scheduler.add(mt, { type: "parseTile", isSymbolTile: re.isSymbolTile, zoom: re.tileZoom }) : mt();
            }), this.loaded = this.loaded || {}, this.loaded[ge] = Be;
          });
        }
        reloadTile(re, le) {
          const ge = this.loaded, Le = re.uid;
          if (ge && ge[Le]) {
            const Ce = ge[Le];
            Ce.scaleFactor = re.scaleFactor, Ce.showCollisionBoxes = re.showCollisionBoxes, Ce.projection = re.projection, Ce.brightness = re.brightness, Ce.tileTransform = i.aQ(re.tileID.canonical, re.projection), Ce.extraShadowCaster = re.extraShadowCaster, Ce.lut = re.lut;
            const Be = (qe, Pe) => {
              const Ye = Ce.reloadCallback;
              Ye && (delete Ce.reloadCallback, Ce.parse(Ce.vectorTile, this.layerIndex, this.availableImages, this.actor, Ye)), le(qe, Pe);
            };
            Ce.status === "parsing" ? Ce.reloadCallback = Be : Ce.status === "done" && (Ce.vectorTile ? Ce.parse(Ce.vectorTile, this.layerIndex, this.availableImages, this.actor, Be) : Be());
          } else
            le(null, void 0);
        }
        abortTile(re, le) {
          const ge = re.uid, Le = this.loading[ge];
          Le && (Le.abort && Le.abort(), delete this.loading[ge]), le();
        }
        removeTile(re, le) {
          const ge = this.loaded, Le = re.uid;
          ge && ge[Le] && delete ge[Le], le();
        }
      }
      class je {
        loadTile(re, le) {
          const { uid: ge, encoding: Le, rawImageData: Ce, padding: Be } = re, qe = ImageBitmap && Ce instanceof ImageBitmap ? this.getImageData(Ce, Be) : Ce;
          le(null, new i.e4(ge, qe, Le, Be < 1));
        }
        getImageData(re, le) {
          this.offscreenCanvas && this.offscreenCanvasContext || (this.offscreenCanvas = new OffscreenCanvas(re.width, re.height), this.offscreenCanvasContext = this.offscreenCanvas.getContext("2d", { willReadFrequently: !0 })), this.offscreenCanvas.width = re.width, this.offscreenCanvas.height = re.height, this.offscreenCanvasContext.drawImage(re, 0, 0, re.width, re.height);
          const ge = this.offscreenCanvasContext.getImageData(-le, -le, re.width + 2 * le, re.height + 2 * le);
          return this.offscreenCanvasContext.clearRect(0, 0, this.offscreenCanvas.width, this.offscreenCanvas.height), ge;
        }
      }
      i.bg.setPbf(i.bh);
      class ot {
        decodeRasterArray({ task: re, buffer: le }, ge) {
          i.bg.performDecoding(le, re).then((Le) => {
            ge(null, Le);
          }, (Le) => {
            ge(Le);
          });
        }
      }
      const vt = i.e3.VectorTileFeature.prototype.toGeoJSON;
      class ht {
        constructor(re) {
          this._feature = re, this.extent = i.ag, this.type = re.type, this.properties = re.tags, "id" in re && !isNaN(re.id) && (this.id = parseInt(re.id, 10));
        }
        loadGeometry() {
          if (this._feature.type === 1) {
            const re = [];
            for (const le of this._feature.geometry)
              re.push([new i.P(le[0], le[1])]);
            return re;
          }
          {
            const re = [];
            for (const le of this._feature.geometry) {
              const ge = [];
              for (const Le of le)
                ge.push(new i.P(Le[0], Le[1]));
              re.push(ge);
            }
            return re;
          }
        }
        toGeoJSON(re, le, ge) {
          return vt.call(this, re, le, ge);
        }
      }
      class gt {
        constructor(re) {
          this.layers = { _geojsonTileLayer: this }, this.name = "_geojsonTileLayer", this.extent = i.ag, this.length = re.length, this._features = re;
        }
        feature(re) {
          return new ht(this._features[re]);
        }
      }
      const Vt = 64 / 4096, pt = 128;
      class Gt {
        constructor() {
          this.features = /* @__PURE__ */ new Map();
        }
        clear() {
          this.features.clear();
        }
        load(re = [], le) {
          for (const ge of re) {
            const Le = ge.id;
            if (Le == null)
              continue;
            let Ce = this.features.get(Le);
            Ce && this.updateCache(Ce, le), ge.geometry ? (Ce = kt(ge), this.updateCache(Ce, le), this.features.set(Le, Ce)) : this.features.delete(Le), this.updateCache(Ce, le);
          }
        }
        updateCache(re, le) {
          for (const { canonical: ge, uid: Le } of Object.values(le)) {
            const { z: Ce, x: Be, y: qe } = ge;
            ui(re, Math.pow(2, Ce), Be, qe) && delete le[Le];
          }
        }
        getTile(re, le, ge) {
          const Le = Math.pow(2, re), Ce = [];
          for (const Be of this.features.values())
            ui(Be, Le, le, ge) && Ce.push(hn(Be, Le, le, ge));
          return { features: Ce };
        }
        getFeatures() {
          return [...this.features.values()];
        }
      }
      function ui({ minX: Ke, minY: re, maxX: le, maxY: ge }, Le, Ce, Be) {
        return Ke < (Ce + 1 + Vt) / Le && re < (Be + 1 + Vt) / Le && le > (Ce - Vt) / Le && ge > (Be - Vt) / Le;
      }
      function kt(Ke) {
        const { id: re, geometry: le, properties: ge } = Ke;
        if (!le)
          return;
        if (le.type === "GeometryCollection")
          throw new Error("GeometryCollection not supported in dynamic mode.");
        const { type: Le, coordinates: Ce } = le, Be = { id: re, type: 1, geometry: [], tags: ge, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 }, qe = Be.geometry;
        if (Le === "Point")
          Pt(Ce, qe, Be);
        else if (Le === "MultiPoint")
          for (const Pe of Ce)
            Pt(Pe, qe, Be);
        else if (Le === "LineString")
          Be.type = 2, Mi(Ce, qe, Be);
        else if (Le === "MultiLineString")
          Be.type = 2, Pn(Ce, qe, Be);
        else if (Le === "Polygon")
          Be.type = 3, Pn(Ce, qe, Be, !0);
        else {
          if (Le !== "MultiPolygon")
            throw new Error("Input data is not a valid GeoJSON object.");
          Be.type = 3;
          for (const Pe of Ce)
            Pn(Pe, qe, Be, !0);
        }
        return Be;
      }
      function Pt([Ke, re], le, ge) {
        const Le = i.at(Ke);
        let Ce = i.aA(re);
        Ce = Ce < 0 ? 0 : Ce > 1 ? 1 : Ce, le.push(Le, Ce), ge.minX = Math.min(ge.minX, Le), ge.minY = Math.min(ge.minY, Ce), ge.maxX = Math.max(ge.maxX, Le), ge.maxY = Math.max(ge.maxY, Ce);
      }
      function Mi(Ke, re, le, ge = !1, Le = !1) {
        const Ce = [];
        for (const Be of Ke)
          Pt(Be, Ce, le);
        re.push(Ce), ge && function(Be, qe) {
          let Pe = 0;
          for (let Ye = 0, Qe = Be.length, it = Qe - 2; Ye < Qe; it = Ye, Ye += 2)
            Pe += (Be[Ye] - Be[it]) * (Be[Ye + 1] + Be[it + 1]);
          if (Pe > 0 === qe)
            for (let Ye = 0, Qe = Be.length; Ye < Qe / 2; Ye += 2) {
              const it = Be[Ye], mt = Be[Ye + 1];
              Be[Ye] = Be[Qe - 2 - Ye], Be[Ye + 1] = Be[Qe - 1 - Ye], Be[Qe - 2 - Ye] = it, Be[Qe - 1 - Ye] = mt;
            }
        }(Ce, Le);
      }
      function Pn(Ke, re, le, ge = !1) {
        for (let Le = 0; Le < Ke.length; Le++)
          Mi(Ke[Le], re, le, ge, Le === 0);
      }
      function hn(Ke, re, le, ge) {
        const { id: Le, type: Ce, geometry: Be, tags: qe } = Ke, Pe = [];
        if (Ce === 1)
          (function(Ye, Qe, it, mt, Ct) {
            for (let It = 0; It < Ye.length; It += 2) {
              const Kt = Math.round(i.ag * (Ye[It + 0] * Qe - it)), di = Math.round(i.ag * (Ye[It + 1] * Qe - mt));
              Ct.push([Kt, di]);
            }
          })(Be, re, le, ge, Pe);
        else
          for (const Ye of Be)
            Ht(Ye, re, le, ge, Pe);
        return { id: Le, type: Ce, geometry: Pe, tags: qe };
      }
      function Ht(Ke, re, le, ge, Le) {
        const Ce = -pt, Be = i.ag + pt;
        let qe;
        for (let Pe = 0; Pe < Ke.length - 2; Pe += 2) {
          let Ye = Math.round(i.ag * (Ke[Pe + 0] * re - le)), Qe = Math.round(i.ag * (Ke[Pe + 1] * re - ge)), it = Math.round(i.ag * (Ke[Pe + 2] * re - le)), mt = Math.round(i.ag * (Ke[Pe + 3] * re - ge));
          const Ct = it - Ye, It = mt - Qe;
          Ye < Ce && it < Ce || (Ye < Ce ? (Qe += Math.round(It * ((Ce - Ye) / Ct)), Ye = Ce) : it < Ce && (mt = Qe + Math.round(It * ((Ce - Ye) / Ct)), it = Ce), Qe < Ce && mt < Ce || (Qe < Ce ? (Ye += Math.round(Ct * ((Ce - Qe) / It)), Qe = Ce) : mt < Ce && (it = Ye + Math.round(Ct * ((Ce - Qe) / It)), mt = Ce), Ye >= Be && it >= Be || (Ye >= Be ? (Qe += Math.round(It * ((Be - Ye) / Ct)), Ye = Be) : it >= Be && (mt = Qe + Math.round(It * ((Be - Ye) / Ct)), it = Be), Qe >= Be && mt >= Be || (Qe >= Be ? (Ye += Math.round(Ct * ((Be - Qe) / It)), Qe = Be) : mt >= Be && (it = Ye + Math.round(Ct * ((Be - Qe) / It)), mt = Be), qe && Ye === qe[qe.length - 1][0] && Qe === qe[qe.length - 1][1] || (qe = [[Ye, Qe]], Le.push(qe)), qe.push([it, mt])))));
        }
      }
      var Si, Ji, fi, jt = { exports: {} }, ni = function() {
        if (fi)
          return jt.exports;
        fi = 1;
        var Ke = i.e7(), re = function() {
          if (Ji)
            return Si;
          Ji = 1;
          var Qe = i.e5(), it = i.e6().VectorTileFeature;
          function mt(It, Kt) {
            this.options = Kt || {}, this.features = It, this.length = It.length;
          }
          function Ct(It, Kt) {
            this.id = typeof It.id == "number" ? It.id : void 0, this.type = It.type, this.rawGeometry = It.type === 1 ? [It.geometry] : It.geometry, this.properties = It.tags, this.extent = Kt || 4096;
          }
          return Si = mt, mt.prototype.feature = function(It) {
            return new Ct(this.features[It], this.options.extent);
          }, Ct.prototype.loadGeometry = function() {
            var It = this.rawGeometry;
            this.geometry = [];
            for (var Kt = 0; Kt < It.length; Kt++) {
              for (var di = It[Kt], li = [], ri = 0; ri < di.length; ri++)
                li.push(new Qe(di[ri][0], di[ri][1]));
              this.geometry.push(li);
            }
            return this.geometry;
          }, Ct.prototype.bbox = function() {
            this.geometry || this.loadGeometry();
            for (var It = this.geometry, Kt = 1 / 0, di = -1 / 0, li = 1 / 0, ri = -1 / 0, Ki = 0; Ki < It.length; Ki++)
              for (var Ni = It[Ki], Ei = 0; Ei < Ni.length; Ei++) {
                var $i = Ni[Ei];
                Kt = Math.min(Kt, $i.x), di = Math.max(di, $i.x), li = Math.min(li, $i.y), ri = Math.max(ri, $i.y);
              }
            return [Kt, li, di, ri];
          }, Ct.prototype.toGeoJSON = it.prototype.toGeoJSON, Si;
        }();
        function le(Qe) {
          var it = new Ke();
          return function(mt, Ct) {
            for (var It in mt.layers)
              Ct.writeMessage(3, ge, mt.layers[It]);
          }(Qe, it), it.finish();
        }
        function ge(Qe, it) {
          var mt;
          it.writeVarintField(15, Qe.version || 1), it.writeStringField(1, Qe.name || ""), it.writeVarintField(5, Qe.extent || 4096);
          var Ct = { keys: [], values: [], keycache: {}, valuecache: {} };
          for (mt = 0; mt < Qe.length; mt++)
            Ct.feature = Qe.feature(mt), it.writeMessage(2, Le, Ct);
          var It = Ct.keys;
          for (mt = 0; mt < It.length; mt++)
            it.writeStringField(3, It[mt]);
          var Kt = Ct.values;
          for (mt = 0; mt < Kt.length; mt++)
            it.writeMessage(4, Ye, Kt[mt]);
        }
        function Le(Qe, it) {
          var mt = Qe.feature;
          mt.id !== void 0 && it.writeVarintField(1, mt.id), it.writeMessage(2, Ce, Qe), it.writeVarintField(3, mt.type), it.writeMessage(4, Pe, mt);
        }
        function Ce(Qe, it) {
          var mt = Qe.feature, Ct = Qe.keys, It = Qe.values, Kt = Qe.keycache, di = Qe.valuecache;
          for (var li in mt.properties) {
            var ri = mt.properties[li], Ki = Kt[li];
            if (ri !== null) {
              Ki === void 0 && (Ct.push(li), Kt[li] = Ki = Ct.length - 1), it.writeVarint(Ki);
              var Ni = typeof ri;
              Ni !== "string" && Ni !== "boolean" && Ni !== "number" && (ri = JSON.stringify(ri));
              var Ei = Ni + ":" + ri, $i = di[Ei];
              $i === void 0 && (It.push(ri), di[Ei] = $i = It.length - 1), it.writeVarint($i);
            }
          }
        }
        function Be(Qe, it) {
          return (it << 3) + (7 & Qe);
        }
        function qe(Qe) {
          return Qe << 1 ^ Qe >> 31;
        }
        function Pe(Qe, it) {
          for (var mt = Qe.loadGeometry(), Ct = Qe.type, It = 0, Kt = 0, di = mt.length, li = 0; li < di; li++) {
            var ri = mt[li], Ki = 1;
            Ct === 1 && (Ki = ri.length), it.writeVarint(Be(1, Ki));
            for (var Ni = Ct === 3 ? ri.length - 1 : ri.length, Ei = 0; Ei < Ni; Ei++) {
              Ei === 1 && Ct !== 1 && it.writeVarint(Be(2, Ni - 1));
              var $i = ri[Ei].x - It, Hi = ri[Ei].y - Kt;
              it.writeVarint(qe($i)), it.writeVarint(qe(Hi)), It += $i, Kt += Hi;
            }
            Ct === 3 && it.writeVarint(Be(7, 1));
          }
        }
        function Ye(Qe, it) {
          var mt = typeof Qe;
          mt === "string" ? it.writeStringField(1, Qe) : mt === "boolean" ? it.writeBooleanField(7, Qe) : mt === "number" && (Qe % 1 != 0 ? it.writeDoubleField(3, Qe) : Qe < 0 ? it.writeSVarintField(6, Qe) : it.writeVarintField(5, Qe));
        }
        return jt.exports = le, jt.exports.fromVectorTileJs = le, jt.exports.fromGeojsonVt = function(Qe, it) {
          it = it || {};
          var mt = {};
          for (var Ct in Qe)
            mt[Ct] = new re(Qe[Ct].features, it), mt[Ct].name = Ct, mt[Ct].version = it.version, mt[Ct].extent = it.extent;
          return le({ layers: mt });
        }, jt.exports.GeoJSONWrapper = re, jt.exports;
      }(), Gi = i.e8(ni);
      const an = { minZoom: 0, maxZoom: 16, minPoints: 2, radius: 40, extent: 512, nodeSize: 64, log: !1, generateId: !1, reduce: null, map: (Ke) => Ke }, qt = Math.fround || (ln = new Float32Array(1), (Ke) => (ln[0] = +Ke, ln[0]));
      var ln;
      const Di = 3, xi = 5, Cs = 6;
      class xs {
        constructor(re) {
          this.options = Object.assign(Object.create(an), re), this.trees = new Array(this.options.maxZoom + 1), this.stride = this.options.reduce ? 7 : 6, this.clusterProps = [];
        }
        load(re) {
          const { log: le, minZoom: ge, maxZoom: Le } = this.options;
          le && console.time("total time");
          const Ce = `prepare ${re.length} points`;
          le && console.time(Ce), this.points = re;
          const Be = [];
          for (let Pe = 0; Pe < re.length; Pe++) {
            const Ye = re[Pe];
            if (!Ye.geometry)
              continue;
            const [Qe, it] = Ye.geometry.coordinates, mt = qt(Vs(Qe)), Ct = qt(Us(it));
            Be.push(mt, Ct, 1 / 0, Pe, -1, 1), this.options.reduce && Be.push(0);
          }
          let qe = this.trees[Le + 1] = this._createTree(Be);
          le && console.timeEnd(Ce);
          for (let Pe = Le; Pe >= ge; Pe--) {
            const Ye = +Date.now();
            qe = this.trees[Pe] = this._createTree(this._cluster(qe, Pe)), le && console.log("z%d: %d clusters in %dms", Pe, qe.numItems, +Date.now() - Ye);
          }
          return le && console.timeEnd("total time"), this;
        }
        getClusters(re, le) {
          let ge = ((re[0] + 180) % 360 + 360) % 360 - 180;
          const Le = Math.max(-90, Math.min(90, re[1]));
          let Ce = re[2] === 180 ? 180 : ((re[2] + 180) % 360 + 360) % 360 - 180;
          const Be = Math.max(-90, Math.min(90, re[3]));
          if (re[2] - re[0] >= 360)
            ge = -180, Ce = 180;
          else if (ge > Ce) {
            const it = this.getClusters([ge, Le, 180, Be], le), mt = this.getClusters([-180, Le, Ce, Be], le);
            return it.concat(mt);
          }
          const qe = this.trees[this._limitZoom(le)], Pe = qe.range(Vs(ge), Us(Be), Vs(Ce), Us(Le)), Ye = qe.data, Qe = [];
          for (const it of Pe) {
            const mt = this.stride * it;
            Qe.push(Ye[mt + xi] > 1 ? Is(Ye, mt, this.clusterProps) : this.points[Ye[mt + Di]]);
          }
          return Qe;
        }
        getChildren(re) {
          const le = this._getOriginId(re), ge = this._getOriginZoom(re), Le = "No cluster with the specified id.", Ce = this.trees[ge];
          if (!Ce)
            throw new Error(Le);
          const Be = Ce.data;
          if (le * this.stride >= Be.length)
            throw new Error(Le);
          const qe = this.options.radius / (this.options.extent * Math.pow(2, ge - 1)), Pe = Ce.within(Be[le * this.stride], Be[le * this.stride + 1], qe), Ye = [];
          for (const Qe of Pe) {
            const it = Qe * this.stride;
            Be[it + 4] === re && Ye.push(Be[it + xi] > 1 ? Is(Be, it, this.clusterProps) : this.points[Be[it + Di]]);
          }
          if (Ye.length === 0)
            throw new Error(Le);
          return Ye;
        }
        getLeaves(re, le, ge) {
          const Le = [];
          return this._appendLeaves(Le, re, le = le || 10, ge = ge || 0, 0), Le;
        }
        getTile(re, le, ge) {
          const Le = this.trees[this._limitZoom(re)], Ce = Math.pow(2, re), { extent: Be, radius: qe } = this.options, Pe = qe / Be, Ye = (ge - Pe) / Ce, Qe = (ge + 1 + Pe) / Ce, it = { features: [] };
          return this._addTileFeatures(Le.range((le - Pe) / Ce, Ye, (le + 1 + Pe) / Ce, Qe), Le.data, le, ge, Ce, it), le === 0 && this._addTileFeatures(Le.range(1 - Pe / Ce, Ye, 1, Qe), Le.data, Ce, ge, Ce, it), le === Ce - 1 && this._addTileFeatures(Le.range(0, Ye, Pe / Ce, Qe), Le.data, -1, ge, Ce, it), it.features.length ? it : null;
        }
        getClusterExpansionZoom(re) {
          let le = this._getOriginZoom(re) - 1;
          for (; le <= this.options.maxZoom; ) {
            const ge = this.getChildren(re);
            if (le++, ge.length !== 1)
              break;
            re = ge[0].properties.cluster_id;
          }
          return le;
        }
        _appendLeaves(re, le, ge, Le, Ce) {
          const Be = this.getChildren(le);
          for (const qe of Be) {
            const Pe = qe.properties;
            if (Pe && Pe.cluster ? Ce + Pe.point_count <= Le ? Ce += Pe.point_count : Ce = this._appendLeaves(re, Pe.cluster_id, ge, Le, Ce) : Ce < Le ? Ce++ : re.push(qe), re.length === ge)
              break;
          }
          return Ce;
        }
        _createTree(re) {
          const le = new i.bE(re.length / this.stride | 0, this.options.nodeSize, Float32Array);
          for (let ge = 0; ge < re.length; ge += this.stride)
            le.add(re[ge], re[ge + 1]);
          return le.finish(), le.data = re, le;
        }
        _addTileFeatures(re, le, ge, Le, Ce, Be) {
          for (const qe of re) {
            const Pe = qe * this.stride, Ye = le[Pe + xi] > 1;
            let Qe, it, mt;
            if (Ye)
              Qe = De(le, Pe, this.clusterProps), it = le[Pe], mt = le[Pe + 1];
            else {
              const Kt = this.points[le[Pe + Di]];
              Qe = Kt.properties;
              const [di, li] = Kt.geometry.coordinates;
              it = Vs(di), mt = Us(li);
            }
            const Ct = { type: 1, geometry: [[Math.round(this.options.extent * (it * Ce - ge)), Math.round(this.options.extent * (mt * Ce - Le))]], tags: Qe };
            let It;
            It = Ye || this.options.generateId ? le[Pe + Di] : this.points[le[Pe + Di]].id, It !== void 0 && (Ct.id = It), Be.features.push(Ct);
          }
        }
        _limitZoom(re) {
          return Math.max(this.options.minZoom, Math.min(Math.floor(+re), this.options.maxZoom + 1));
        }
        _cluster(re, le) {
          const { radius: ge, extent: Le, reduce: Ce, minPoints: Be } = this.options, qe = ge / (Le * Math.pow(2, le)), Pe = re.data, Ye = [], Qe = this.stride;
          for (let it = 0; it < Pe.length; it += Qe) {
            if (Pe[it + 2] <= le)
              continue;
            Pe[it + 2] = le;
            const mt = Pe[it], Ct = Pe[it + 1], It = re.within(Pe[it], Pe[it + 1], qe), Kt = Pe[it + xi];
            let di = Kt;
            for (const li of It) {
              const ri = li * Qe;
              Pe[ri + 2] > le && (di += Pe[ri + xi]);
            }
            if (di > Kt && di >= Be) {
              let li, ri = mt * Kt, Ki = Ct * Kt, Ni = -1;
              const Ei = (it / Qe << 5) + (le + 1) + this.points.length;
              for (const $i of It) {
                const Hi = $i * Qe;
                if (Pe[Hi + 2] <= le)
                  continue;
                Pe[Hi + 2] = le;
                const Xn = Pe[Hi + xi];
                ri += Pe[Hi] * Xn, Ki += Pe[Hi + 1] * Xn, Pe[Hi + 4] = Ei, Ce && (li || (li = this._map(Pe, it, !0), Ni = this.clusterProps.length, this.clusterProps.push(li)), Ce(li, this._map(Pe, Hi)));
              }
              Pe[it + 4] = Ei, Ye.push(ri / di, Ki / di, 1 / 0, Ei, -1, di), Ce && Ye.push(Ni);
            } else {
              for (let li = 0; li < Qe; li++)
                Ye.push(Pe[it + li]);
              if (di > 1)
                for (const li of It) {
                  const ri = li * Qe;
                  if (!(Pe[ri + 2] <= le)) {
                    Pe[ri + 2] = le;
                    for (let Ki = 0; Ki < Qe; Ki++)
                      Ye.push(Pe[ri + Ki]);
                  }
                }
            }
          }
          return Ye;
        }
        _getOriginId(re) {
          return re - this.points.length >> 5;
        }
        _getOriginZoom(re) {
          return (re - this.points.length) % 32;
        }
        _map(re, le, ge) {
          if (re[le + xi] > 1) {
            const Be = this.clusterProps[re[le + Cs]];
            return ge ? Object.assign({}, Be) : Be;
          }
          const Le = this.points[re[le + Di]].properties, Ce = this.options.map(Le);
          return ge && Ce === Le ? Object.assign({}, Ce) : Ce;
        }
      }
      function Is(Ke, re, le) {
        return { type: "Feature", id: Ke[re + Di], properties: De(Ke, re, le), geometry: { type: "Point", coordinates: [(ge = Ke[re], 360 * (ge - 0.5)), Zr(Ke[re + 1])] } };
        var ge;
      }
      function De(Ke, re, le) {
        const ge = Ke[re + xi], Le = ge >= 1e4 ? `${Math.round(ge / 1e3)}k` : ge >= 1e3 ? Math.round(ge / 100) / 10 + "k" : ge, Ce = Ke[re + Cs], Be = Ce === -1 ? {} : Object.assign({}, le[Ce]);
        return Object.assign(Be, { cluster: !0, cluster_id: Ke[re + Di], point_count: ge, point_count_abbreviated: Le });
      }
      function Vs(Ke) {
        return Ke / 360 + 0.5;
      }
      function Us(Ke) {
        const re = Math.sin(Ke * Math.PI / 180), le = 0.5 - 0.25 * Math.log((1 + re) / (1 - re)) / Math.PI;
        return le < 0 ? 0 : le > 1 ? 1 : le;
      }
      function Zr(Ke) {
        const re = (180 - 360 * Ke) * Math.PI / 180;
        return 360 * Math.atan(Math.exp(re)) / Math.PI - 90;
      }
      function Et(Ke, re, le, ge) {
        let Le = ge;
        const Ce = re + (le - re >> 1);
        let Be, qe = le - re;
        const Pe = Ke[re], Ye = Ke[re + 1], Qe = Ke[le], it = Ke[le + 1];
        for (let mt = re + 3; mt < le; mt += 3) {
          const Ct = Ws(Ke[mt], Ke[mt + 1], Pe, Ye, Qe, it);
          if (Ct > Le)
            Be = mt, Le = Ct;
          else if (Ct === Le) {
            const It = Math.abs(mt - Ce);
            It < qe && (Be = mt, qe = It);
          }
        }
        Le > ge && (Be - re > 3 && Et(Ke, re, Be, ge), Ke[Be + 2] = Le, le - Be > 3 && Et(Ke, Be, le, ge));
      }
      function Ws(Ke, re, le, ge, Le, Ce) {
        let Be = Le - le, qe = Ce - ge;
        if (Be !== 0 || qe !== 0) {
          const Pe = ((Ke - le) * Be + (re - ge) * qe) / (Be * Be + qe * qe);
          Pe > 1 ? (le = Le, ge = Ce) : Pe > 0 && (le += Be * Pe, ge += qe * Pe);
        }
        return Be = Ke - le, qe = re - ge, Be * Be + qe * qe;
      }
      function $n(Ke, re, le, ge) {
        const Le = { id: Ke ?? null, type: re, geometry: le, tags: ge, minX: 1 / 0, minY: 1 / 0, maxX: -1 / 0, maxY: -1 / 0 };
        if (re === "Point" || re === "MultiPoint" || re === "LineString")
          $s(Le, le);
        else if (re === "Polygon")
          $s(Le, le[0]);
        else if (re === "MultiLineString")
          for (const Ce of le)
            $s(Le, Ce);
        else if (re === "MultiPolygon")
          for (const Ce of le)
            $s(Le, Ce[0]);
        return Le;
      }
      function $s(Ke, re) {
        for (let le = 0; le < re.length; le += 3)
          Ke.minX = Math.min(Ke.minX, re[le]), Ke.minY = Math.min(Ke.minY, re[le + 1]), Ke.maxX = Math.max(Ke.maxX, re[le]), Ke.maxY = Math.max(Ke.maxY, re[le + 1]);
      }
      function vi(Ke, re, le, ge) {
        if (!re.geometry)
          return;
        const Le = re.geometry.coordinates;
        if (Le && Le.length === 0)
          return;
        const Ce = re.geometry.type, Be = Math.pow(le.tolerance / ((1 << le.maxZoom) * le.extent), 2);
        let qe = [], Pe = re.id;
        if (le.promoteId ? Pe = re.properties[le.promoteId] : le.generateId && (Pe = ge || 0), Ce === "Point")
          kn(Le, qe);
        else if (Ce === "MultiPoint")
          for (const Ye of Le)
            kn(Ye, qe);
        else if (Ce === "LineString")
          Xs(Le, qe, Be, !1);
        else if (Ce === "MultiLineString") {
          if (le.lineMetrics) {
            for (const Ye of Le)
              qe = [], Xs(Ye, qe, Be, !1), Ke.push($n(Pe, "LineString", qe, re.properties));
            return;
          }
          Hr(Le, qe, Be, !1);
        } else if (Ce === "Polygon")
          Hr(Le, qe, Be, !0);
        else {
          if (Ce !== "MultiPolygon") {
            if (Ce === "GeometryCollection") {
              for (const Ye of re.geometry.geometries)
                vi(Ke, { id: Pe, geometry: Ye, properties: re.properties }, le, ge);
              return;
            }
            throw new Error("Input data is not a valid GeoJSON object.");
          }
          for (const Ye of Le) {
            const Qe = [];
            Hr(Ye, Qe, Be, !0), qe.push(Qe);
          }
        }
        Ke.push($n(Pe, Ce, qe, re.properties));
      }
      function kn(Ke, re) {
        re.push(qr(Ke[0]), Wr(Ke[1]), 0);
      }
      function Xs(Ke, re, le, ge) {
        let Le, Ce, Be = 0;
        for (let Pe = 0; Pe < Ke.length; Pe++) {
          const Ye = qr(Ke[Pe][0]), Qe = Wr(Ke[Pe][1]);
          re.push(Ye, Qe, 0), Pe > 0 && (Be += ge ? (Le * Qe - Ye * Ce) / 2 : Math.sqrt(Math.pow(Ye - Le, 2) + Math.pow(Qe - Ce, 2))), Le = Ye, Ce = Qe;
        }
        const qe = re.length - 3;
        re[2] = 1, Et(re, 0, qe, le), re[qe + 2] = 1, re.size = Math.abs(Be), re.start = 0, re.end = re.size;
      }
      function Hr(Ke, re, le, ge) {
        for (let Le = 0; Le < Ke.length; Le++) {
          const Ce = [];
          Xs(Ke[Le], Ce, le, ge), re.push(Ce);
        }
      }
      function qr(Ke) {
        return Ke / 360 + 0.5;
      }
      function Wr(Ke) {
        const re = Math.sin(Ke * Math.PI / 180), le = 0.5 - 0.25 * Math.log((1 + re) / (1 - re)) / Math.PI;
        return le < 0 ? 0 : le > 1 ? 1 : le;
      }
      function si(Ke, re, le, ge, Le, Ce, Be, qe) {
        if (ge /= re, Ce >= (le /= re) && Be < ge)
          return Ke;
        if (Be < le || Ce >= ge)
          return null;
        const Pe = [];
        for (const Ye of Ke) {
          const Qe = Ye.geometry;
          let it = Ye.type;
          const mt = Le === 0 ? Ye.minX : Ye.minY, Ct = Le === 0 ? Ye.maxX : Ye.maxY;
          if (mt >= le && Ct < ge) {
            Pe.push(Ye);
            continue;
          }
          if (Ct < le || mt >= ge)
            continue;
          let It = [];
          if (it === "Point" || it === "MultiPoint")
            fs(Qe, It, le, ge, Le);
          else if (it === "LineString")
            zn(Qe, It, le, ge, Le, !1, qe.lineMetrics);
          else if (it === "MultiLineString")
            An(Qe, It, le, ge, Le, !1);
          else if (it === "Polygon")
            An(Qe, It, le, ge, Le, !0);
          else if (it === "MultiPolygon")
            for (const Kt of Qe) {
              const di = [];
              An(Kt, di, le, ge, Le, !0), di.length && It.push(di);
            }
          if (It.length) {
            if (qe.lineMetrics && it === "LineString") {
              for (const Kt of It)
                Pe.push($n(Ye.id, it, Kt, Ye.tags));
              continue;
            }
            it !== "LineString" && it !== "MultiLineString" || (It.length === 1 ? (it = "LineString", It = It[0]) : it = "MultiLineString"), it !== "Point" && it !== "MultiPoint" || (it = It.length === 3 ? "Point" : "MultiPoint"), Pe.push($n(Ye.id, it, It, Ye.tags));
          }
        }
        return Pe.length ? Pe : null;
      }
      function fs(Ke, re, le, ge, Le) {
        for (let Ce = 0; Ce < Ke.length; Ce += 3) {
          const Be = Ke[Ce + Le];
          Be >= le && Be <= ge && js(re, Ke[Ce], Ke[Ce + 1], Ke[Ce + 2]);
        }
      }
      function zn(Ke, re, le, ge, Le, Ce, Be) {
        let qe = Rn(Ke);
        const Pe = Le === 0 ? yo : xo;
        let Ye, Qe, it = Ke.start;
        for (let di = 0; di < Ke.length - 3; di += 3) {
          const li = Ke[di], ri = Ke[di + 1], Ki = Ke[di + 2], Ni = Ke[di + 3], Ei = Ke[di + 4], $i = Le === 0 ? li : ri, Hi = Le === 0 ? Ni : Ei;
          let Xn = !1;
          Be && (Ye = Math.sqrt(Math.pow(li - Ni, 2) + Math.pow(ri - Ei, 2))), $i < le ? Hi > le && (Qe = Pe(qe, li, ri, Ni, Ei, le), Be && (qe.start = it + Ye * Qe)) : $i > ge ? Hi < ge && (Qe = Pe(qe, li, ri, Ni, Ei, ge), Be && (qe.start = it + Ye * Qe)) : js(qe, li, ri, Ki), Hi < le && $i >= le && (Qe = Pe(qe, li, ri, Ni, Ei, le), Xn = !0), Hi > ge && $i <= ge && (Qe = Pe(qe, li, ri, Ni, Ei, ge), Xn = !0), !Ce && Xn && (Be && (qe.end = it + Ye * Qe), re.push(qe), qe = Rn(Ke)), Be && (it += Ye);
        }
        let mt = Ke.length - 3;
        const Ct = Ke[mt], It = Ke[mt + 1], Kt = Le === 0 ? Ct : It;
        Kt >= le && Kt <= ge && js(qe, Ct, It, Ke[mt + 2]), mt = qe.length - 3, Ce && mt >= 3 && (qe[mt] !== qe[0] || qe[mt + 1] !== qe[1]) && js(qe, qe[0], qe[1], qe[2]), qe.length && re.push(qe);
      }
      function Rn(Ke) {
        const re = [];
        return re.size = Ke.size, re.start = Ke.start, re.end = Ke.end, re;
      }
      function An(Ke, re, le, ge, Le, Ce) {
        for (const Be of Ke)
          zn(Be, re, le, ge, Le, Ce, !1);
      }
      function js(Ke, re, le, ge) {
        Ke.push(re, le, ge);
      }
      function yo(Ke, re, le, ge, Le, Ce) {
        const Be = (Ce - re) / (ge - re);
        return js(Ke, Ce, le + (Le - le) * Be, 1), Be;
      }
      function xo(Ke, re, le, ge, Le, Ce) {
        const Be = (Ce - le) / (Le - le);
        return js(Ke, re + (ge - re) * Be, Ce, 1), Be;
      }
      function vo(Ke, re) {
        const le = [];
        for (let ge = 0; ge < Ke.length; ge++) {
          const Le = Ke[ge], Ce = Le.type;
          let Be;
          if (Ce === "Point" || Ce === "MultiPoint" || Ce === "LineString")
            Be = yr(Le.geometry, re);
          else if (Ce === "MultiLineString" || Ce === "Polygon") {
            Be = [];
            for (const qe of Le.geometry)
              Be.push(yr(qe, re));
          } else if (Ce === "MultiPolygon") {
            Be = [];
            for (const qe of Le.geometry) {
              const Pe = [];
              for (const Ye of qe)
                Pe.push(yr(Ye, re));
              Be.push(Pe);
            }
          }
          le.push($n(Le.id, Ce, Be, Le.tags));
        }
        return le;
      }
      function yr(Ke, re) {
        const le = [];
        le.size = Ke.size, Ke.start !== void 0 && (le.start = Ke.start, le.end = Ke.end);
        for (let ge = 0; ge < Ke.length; ge += 3)
          le.push(Ke[ge] + re, Ke[ge + 1], Ke[ge + 2]);
        return le;
      }
      function Mr(Ke, re) {
        if (Ke.transformed)
          return Ke;
        const le = 1 << Ke.z, ge = Ke.x, Le = Ke.y;
        for (const Ce of Ke.features) {
          const Be = Ce.geometry, qe = Ce.type;
          if (Ce.geometry = [], qe === 1)
            for (let Pe = 0; Pe < Be.length; Pe += 2)
              Ce.geometry.push(io(Be[Pe], Be[Pe + 1], re, le, ge, Le));
          else
            for (let Pe = 0; Pe < Be.length; Pe++) {
              const Ye = [];
              for (let Qe = 0; Qe < Be[Pe].length; Qe += 2)
                Ye.push(io(Be[Pe][Qe], Be[Pe][Qe + 1], re, le, ge, Le));
              Ce.geometry.push(Ye);
            }
        }
        return Ke.transformed = !0, Ke;
      }
      function io(Ke, re, le, ge, Le, Ce) {
        return [Math.round(le * (Ke * ge - Le)), Math.round(le * (re * ge - Ce))];
      }
      function Ys(Ke, re, le, ge, Le) {
        const Ce = re === Le.maxZoom ? 0 : Le.tolerance / ((1 << re) * Le.extent), Be = { features: [], numPoints: 0, numSimplified: 0, numFeatures: Ke.length, source: null, x: le, y: ge, z: re, transformed: !1, minX: 2, minY: 1, maxX: -1, maxY: 0 };
        for (const qe of Ke)
          Sr(Be, qe, Ce, Le);
        return Be;
      }
      function Sr(Ke, re, le, ge) {
        const Le = re.geometry, Ce = re.type, Be = [];
        if (Ke.minX = Math.min(Ke.minX, re.minX), Ke.minY = Math.min(Ke.minY, re.minY), Ke.maxX = Math.max(Ke.maxX, re.maxX), Ke.maxY = Math.max(Ke.maxY, re.maxY), Ce === "Point" || Ce === "MultiPoint")
          for (let qe = 0; qe < Le.length; qe += 3)
            Be.push(Le[qe], Le[qe + 1]), Ke.numPoints++, Ke.numSimplified++;
        else if (Ce === "LineString")
          mi(Be, Le, Ke, le, !1, !1);
        else if (Ce === "MultiLineString" || Ce === "Polygon")
          for (let qe = 0; qe < Le.length; qe++)
            mi(Be, Le[qe], Ke, le, Ce === "Polygon", qe === 0);
        else if (Ce === "MultiPolygon")
          for (let qe = 0; qe < Le.length; qe++) {
            const Pe = Le[qe];
            for (let Ye = 0; Ye < Pe.length; Ye++)
              mi(Be, Pe[Ye], Ke, le, !0, Ye === 0);
          }
        if (Be.length) {
          let qe = re.tags || null;
          if (Ce === "LineString" && ge.lineMetrics) {
            qe = {};
            for (const Ye in re.tags)
              qe[Ye] = re.tags[Ye];
            qe.mapbox_clip_start = Le.start / Le.size, qe.mapbox_clip_end = Le.end / Le.size;
          }
          const Pe = { geometry: Be, type: Ce === "Polygon" || Ce === "MultiPolygon" ? 3 : Ce === "LineString" || Ce === "MultiLineString" ? 2 : 1, tags: qe };
          re.id !== null && (Pe.id = re.id), Ke.features.push(Pe);
        }
      }
      function mi(Ke, re, le, ge, Le, Ce) {
        const Be = ge * ge;
        if (ge > 0 && re.size < (Le ? Be : ge))
          return void (le.numPoints += re.length / 3);
        const qe = [];
        for (let Pe = 0; Pe < re.length; Pe += 3)
          (ge === 0 || re[Pe + 2] > Be) && (le.numSimplified++, qe.push(re[Pe], re[Pe + 1])), le.numPoints++;
        Le && function(Pe, Ye) {
          let Qe = 0;
          for (let it = 0, mt = Pe.length, Ct = mt - 2; it < mt; Ct = it, it += 2)
            Qe += (Pe[it] - Pe[Ct]) * (Pe[it + 1] + Pe[Ct + 1]);
          if (Qe > 0 === Ye)
            for (let it = 0, mt = Pe.length; it < mt / 2; it += 2) {
              const Ct = Pe[it], It = Pe[it + 1];
              Pe[it] = Pe[mt - 2 - it], Pe[it + 1] = Pe[mt - 1 - it], Pe[mt - 2 - it] = Ct, Pe[mt - 1 - it] = It;
            }
        }(qe, Ce), Ke.push(qe);
      }
      const On = { maxZoom: 14, indexMaxZoom: 5, indexMaxPoints: 1e5, tolerance: 3, extent: 4096, buffer: 64, lineMetrics: !1, promoteId: null, generateId: !1, debug: 0 };
      class Vn {
        constructor(re, le) {
          const ge = (le = this.options = function(Ce, Be) {
            for (const qe in Be)
              Ce[qe] = Be[qe];
            return Ce;
          }(Object.create(On), le)).debug;
          if (ge && console.time("preprocess data"), le.maxZoom < 0 || le.maxZoom > 24)
            throw new Error("maxZoom should be in the 0-24 range");
          if (le.promoteId && le.generateId)
            throw new Error("promoteId and generateId cannot be used together.");
          let Le = function(Ce, Be) {
            const qe = [];
            if (Ce.type === "FeatureCollection")
              for (let Pe = 0; Pe < Ce.features.length; Pe++)
                vi(qe, Ce.features[Pe], Be, Pe);
            else
              vi(qe, Ce.type === "Feature" ? Ce : { geometry: Ce }, Be);
            return qe;
          }(re, le);
          this.tiles = {}, this.tileCoords = [], ge && (console.timeEnd("preprocess data"), console.log("index: maxZoom: %d, maxPoints: %d", le.indexMaxZoom, le.indexMaxPoints), console.time("generate tiles"), this.stats = {}, this.total = 0), Le = function(Ce, Be) {
            const qe = Be.buffer / Be.extent;
            let Pe = Ce;
            const Ye = si(Ce, 1, -1 - qe, qe, 0, -1, 2, Be), Qe = si(Ce, 1, 1 - qe, 2 + qe, 0, -1, 2, Be);
            return (Ye || Qe) && (Pe = si(Ce, 1, -qe, 1 + qe, 0, -1, 2, Be) || [], Ye && (Pe = vo(Ye, 1).concat(Pe)), Qe && (Pe = Pe.concat(vo(Qe, -1)))), Pe;
          }(Le, le), Le.length && this.splitTile(Le, 0, 0, 0), ge && (Le.length && console.log("features: %d, points: %d", this.tiles[0].numFeatures, this.tiles[0].numPoints), console.timeEnd("generate tiles"), console.log("tiles generated:", this.total, JSON.stringify(this.stats)));
        }
        splitTile(re, le, ge, Le, Ce, Be, qe) {
          const Pe = [re, le, ge, Le], Ye = this.options, Qe = Ye.debug;
          for (; Pe.length; ) {
            Le = Pe.pop(), ge = Pe.pop(), le = Pe.pop(), re = Pe.pop();
            const it = 1 << le, mt = Zi(le, ge, Le);
            let Ct = this.tiles[mt];
            if (!Ct && (Qe > 1 && console.time("creation"), Ct = this.tiles[mt] = Ys(re, le, ge, Le, Ye), this.tileCoords.push({ z: le, x: ge, y: Le }), Qe)) {
              Qe > 1 && (console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)", le, ge, Le, Ct.numFeatures, Ct.numPoints, Ct.numSimplified), console.timeEnd("creation"));
              const Xn = `z${le}`;
              this.stats[Xn] = (this.stats[Xn] || 0) + 1, this.total++;
            }
            if (Ct.source = re, Ce == null) {
              if (le === Ye.indexMaxZoom || Ct.numPoints <= Ye.indexMaxPoints)
                continue;
            } else {
              if (le === Ye.maxZoom || le === Ce)
                continue;
              if (Ce != null) {
                const Xn = Ce - le;
                if (ge !== Be >> Xn || Le !== qe >> Xn)
                  continue;
              }
            }
            if (Ct.source = null, re.length === 0)
              continue;
            Qe > 1 && console.time("clipping");
            const It = 0.5 * Ye.buffer / Ye.extent, Kt = 0.5 - It, di = 0.5 + It, li = 1 + It;
            let ri = null, Ki = null, Ni = null, Ei = null, $i = si(re, it, ge - It, ge + di, 0, Ct.minX, Ct.maxX, Ye), Hi = si(re, it, ge + Kt, ge + li, 0, Ct.minX, Ct.maxX, Ye);
            re = null, $i && (ri = si($i, it, Le - It, Le + di, 1, Ct.minY, Ct.maxY, Ye), Ki = si($i, it, Le + Kt, Le + li, 1, Ct.minY, Ct.maxY, Ye), $i = null), Hi && (Ni = si(Hi, it, Le - It, Le + di, 1, Ct.minY, Ct.maxY, Ye), Ei = si(Hi, it, Le + Kt, Le + li, 1, Ct.minY, Ct.maxY, Ye), Hi = null), Qe > 1 && console.timeEnd("clipping"), Pe.push(ri || [], le + 1, 2 * ge, 2 * Le), Pe.push(Ki || [], le + 1, 2 * ge, 2 * Le + 1), Pe.push(Ni || [], le + 1, 2 * ge + 1, 2 * Le), Pe.push(Ei || [], le + 1, 2 * ge + 1, 2 * Le + 1);
          }
        }
        getTile(re, le, ge) {
          re = +re, le = +le, ge = +ge;
          const Le = this.options, { extent: Ce, debug: Be } = Le;
          if (re < 0 || re > 24)
            return null;
          const qe = 1 << re, Pe = Zi(re, le = le + qe & qe - 1, ge);
          if (this.tiles[Pe])
            return Mr(this.tiles[Pe], Ce);
          Be > 1 && console.log("drilling down to z%d-%d-%d", re, le, ge);
          let Ye, Qe = re, it = le, mt = ge;
          for (; !Ye && Qe > 0; )
            Qe--, it >>= 1, mt >>= 1, Ye = this.tiles[Zi(Qe, it, mt)];
          return Ye && Ye.source ? (Be > 1 && (console.log("found parent tile z%d-%d-%d", Qe, it, mt), console.time("drilling down")), this.splitTile(Ye.source, Qe, it, mt, re, le, ge), Be > 1 && console.timeEnd("drilling down"), this.tiles[Pe] ? Mr(this.tiles[Pe], Ce) : null) : null;
        }
      }
      function Zi(Ke, re, le) {
        return 32 * ((1 << Ke) * le + re) + Ke;
      }
      function Jn(Ke, re) {
        const le = Ke.tileID.canonical;
        if (!this._geoJSONIndex)
          return void re(null, null);
        const ge = this._geoJSONIndex.getTile(le.z, le.x, le.y);
        if (!ge)
          return void re(null, null);
        const Le = new gt(ge.features);
        let Ce = Gi(Le);
        Ce.byteOffset === 0 && Ce.byteLength === Ce.buffer.byteLength || (Ce = new Uint8Array(Ce)), re(null, { vectorTile: Le, rawData: Ce.buffer });
      }
      class Fn extends Ze {
        constructor(re, le, ge, Le, Ce, Be) {
          super(re, le, ge, Le, Jn, Be), Ce && (this.loadGeoJSON = Ce), this._dynamicIndex = new Gt();
        }
        loadData(re, le) {
          const ge = re && re.request, Le = ge && ge.collectResourceTiming;
          this.loadGeoJSON(re, (Ce, Be) => {
            if (Ce || !Be)
              return le(Ce);
            if (typeof Be != "object")
              return le(new Error(`Input data given to '${re.source}' is not a valid GeoJSON object.`));
            {
              try {
                if (re.filter) {
                  const Pe = i.U(re.filter, { type: "boolean", "property-type": "data-driven", overridable: !1, transition: !1 });
                  if (Pe.result === "error")
                    throw new Error(Pe.value.map((Ye) => `${Ye.key}: ${Ye.message}`).join(", "));
                  Be.features = Be.features.filter((Ye) => Pe.value.evaluate({ zoom: 0 }, Ye));
                }
                re.dynamic ? (Be.type === "Feature" && (Be = { type: "FeatureCollection", features: [Be] }), re.append || (this._dynamicIndex.clear(), this.loaded = {}), this._dynamicIndex.load(Be.features, this.loaded), re.cluster && (Be.features = this._dynamicIndex.getFeatures())) : this.loaded = {}, this._geoJSONIndex = re.cluster ? new xs(function({ superclusterOptions: Pe, clusterProperties: Ye }) {
                  if (!Ye || !Pe)
                    return Pe;
                  const Qe = {}, it = {}, mt = { accumulated: null, zoom: 0 }, Ct = { properties: null }, It = Object.keys(Ye);
                  for (const Kt of It) {
                    const [di, li] = Ye[Kt], ri = i.U(li), Ki = i.U(typeof di == "string" ? [di, ["accumulated"], ["get", Kt]] : di);
                    Qe[Kt] = ri.value, it[Kt] = Ki.value;
                  }
                  return Pe.map = (Kt) => {
                    Ct.properties = Kt;
                    const di = {};
                    for (const li of It)
                      di[li] = Qe[li].evaluate(mt, Ct);
                    return di;
                  }, Pe.reduce = (Kt, di) => {
                    Ct.properties = di;
                    for (const li of It)
                      mt.accumulated = Kt[li], Kt[li] = it[li].evaluate(mt, Ct);
                  }, Pe;
                }(re)).load(Be.features) : re.dynamic ? this._dynamicIndex : function(Pe, Ye) {
                  return new Vn(Pe, Ye);
                }(Be, re.geojsonVtOptions);
              } catch (Pe) {
                return le(Pe);
              }
              const qe = {};
              if (Le) {
                const Pe = O(ge);
                Pe && (qe.resourceTiming = {}, qe.resourceTiming[re.source] = JSON.parse(JSON.stringify(Pe)));
              }
              le(null, qe);
            }
          });
        }
        reloadTile(re, le) {
          const ge = this.loaded;
          return ge && ge[re.uid] ? re.partial ? le(null, void 0) : super.reloadTile(re, le) : this.loadTile(re, le);
        }
        loadGeoJSON(re, le) {
          if (re.request)
            i.n(re.request, le);
          else {
            if (typeof re.data != "string")
              return le(new Error(`Input data given to '${re.source}' is not a valid GeoJSON object.`));
            try {
              return le(null, JSON.parse(re.data));
            } catch {
              return le(new Error(`Input data given to '${re.source}' is not a valid GeoJSON object.`));
            }
          }
        }
        getClusterExpansionZoom(re, le) {
          try {
            le(null, this._geoJSONIndex.getClusterExpansionZoom(re.clusterId));
          } catch (ge) {
            le(ge);
          }
        }
        getClusterChildren(re, le) {
          try {
            le(null, this._geoJSONIndex.getChildren(re.clusterId));
          } catch (ge) {
            le(ge);
          }
        }
        getClusterLeaves(re, le) {
          try {
            le(null, this._geoJSONIndex.getLeaves(re.clusterId, re.limit, re.offset));
          } catch (ge) {
            le(ge);
          }
        }
      }
      class Ls {
        constructor(re, le) {
          this.tileID = new i.aG(re.tileID.overscaledZ, re.tileID.wrap, re.tileID.canonical.z, re.tileID.canonical.x, re.tileID.canonical.y), this.tileZoom = re.tileZoom, this.uid = re.uid, this.zoom = re.zoom, this.canonical = re.tileID.canonical, this.pixelRatio = re.pixelRatio, this.tileSize = re.tileSize, this.source = re.source, this.overscaling = this.tileID.overscaleFactor(), this.projection = re.projection, this.brightness = le;
        }
        parse(re, le, ge, Le) {
          this.status = "parsing";
          const Ce = new i.aG(ge.tileID.overscaledZ, ge.tileID.wrap, ge.tileID.canonical.z, ge.tileID.canonical.x, ge.tileID.canonical.y), Be = [], qe = le.familiesBySource[ge.source], Pe = new i.dZ(Ce, ge.promoteId);
          return Pe.bucketLayerIDs = [], Pe.is3DTile = !0, i.e9(re).then((Ye) => {
            if (!Ye)
              return Le(new Error("Could not parse tile"));
            const Qe = i.ea(Ye, 1 / i.cc(ge.tileID.canonical)), it = Ye.json.extensionsUsed && Ye.json.extensionsUsed.includes("MAPBOX_mesh_features") || Ye.json.asset.extras && Ye.json.asset.extras.MAPBOX_mesh_features, mt = Ye.json.extensionsUsed && Ye.json.extensionsUsed.includes("EXT_meshopt_compression"), Ct = new i.a8(this.zoom, { brightness: this.brightness });
            for (const It in qe)
              for (const Kt of qe[It]) {
                const di = Kt[0];
                Pe.bucketLayerIDs.push(Kt.map((ri) => i.aC(ri.id, ri.scope))), di.recalculate(Ct, []);
                const li = new i.eb(Kt, Qe, Ce, it, mt, this.brightness, Pe);
                it || (li.needsUpload = !0), Be.push(li), li.evaluate(di);
              }
            this.status = "done", Le(null, { buckets: Be, featureIndex: Pe, collisionBoxArray: null, glyphAtlasImage: null, lineAtlas: null, imageAtlas: null, brightness: null });
          }).catch((Ye) => Le(new Error(Ye.message)));
        }
      }
      class zs {
        constructor(re, le, ge, Le, Ce, Be) {
          this.actor = re, this.layerIndex = le, this.availableImages = ge, this.brightness = Be, this.loading = {}, this.loaded = {};
        }
        loadTile(re, le) {
          const ge = re.uid, Le = this.loading[ge] = new Ls(re, this.brightness);
          i.bi(re.request, (Ce, Be) => {
            const qe = !this.loading[ge];
            return delete this.loading[ge], qe || Ce ? (Le.status = "done", qe || (this.loaded[ge] = Le), le(Ce)) : Be && Be.byteLength !== 0 ? void Le.parse(Be, this.layerIndex, re, (Pe, Ye) => {
              Le.status = "done", this.loaded = this.loaded || {}, this.loaded[ge] = Le, Pe || !Ye ? le(Pe) : le(null, Ye);
            }) : (Le.status = "done", this.loaded[ge] = Le, le());
          });
        }
        reloadTile(re, le) {
          const ge = this.loaded, Le = re.uid;
          if (ge && ge[Le]) {
            const Ce = ge[Le];
            Ce.projection = re.projection, Ce.brightness = re.brightness;
            const Be = (qe, Pe) => {
              Ce.reloadCallback && (delete Ce.reloadCallback, this.loadTile(re, le)), le(qe, Pe);
            };
            Ce.status === "parsing" ? Ce.reloadCallback = Be : Ce.status === "done" && this.loadTile(re, le);
          }
        }
        abortTile(re, le) {
          const ge = re.uid;
          this.loading[ge] && delete this.loading[ge], le();
        }
        removeTile(re, le) {
          const ge = this.loaded, Le = re.uid;
          ge && ge[Le] && delete ge[Le], le();
        }
      }
      class Vo {
        constructor(re) {
          this.self = re, this.actor = new i.ec(re, this), this.layerIndexes = {}, this.availableImages = {}, this.isSpriteLoaded = {}, this.imageRasterizer = new i.I(), this.projections = {}, this.defaultProjection = i.bP({ name: "mercator" }), this.workerSourceTypes = { vector: Ze, geojson: Fn, "batched-model": zs }, this.workerSources = {}, this.demWorkerSources = {}, this.self.registerWorkerSource = (le, ge) => {
            if (this.workerSourceTypes[le])
              throw new Error(`Worker source with name "${le}" already registered.`);
            this.workerSourceTypes[le] = ge;
          }, this.self.registerRTLTextPlugin = (le) => {
            if (i.ed.isParsed())
              throw new Error("RTL text plugin already registered.");
            i.ed.applyArabicShaping = le.applyArabicShaping, i.ed.processBidirectionalText = le.processBidirectionalText, i.ed.processStyledBidirectionalText = le.processStyledBidirectionalText;
          };
        }
        clearCaches(re, le, ge) {
          delete this.layerIndexes[re], delete this.availableImages[re], delete this.workerSources[re], delete this.demWorkerSources[re], delete this.rasterArrayWorkerSource, ge();
        }
        checkIfReady(re, le, ge) {
          ge();
        }
        setReferrer(re, le) {
          this.referrer = le;
        }
        spriteLoaded(re, { scope: le, isLoaded: ge }) {
          if (this.isSpriteLoaded[re] || (this.isSpriteLoaded[re] = {}), this.isSpriteLoaded[re][le] = ge, this.workerSources[re] && this.workerSources[re][le])
            for (const Le in this.workerSources[re][le]) {
              const Ce = this.workerSources[re][le][Le];
              for (const Be in Ce) {
                const qe = Ce[Be];
                qe instanceof Ze && (qe.isSpriteLoaded = ge, qe.fire(new i.z("isSpriteLoaded")));
              }
            }
        }
        setImages(re, { scope: le, images: ge }, Le) {
          if (this.availableImages[re] || (this.availableImages[re] = {}), this.availableImages[re][le] = ge, this.workerSources[re] && this.workerSources[re][le]) {
            for (const Ce in this.workerSources[re][le]) {
              const Be = this.workerSources[re][le][Ce];
              for (const qe in Be)
                Be[qe].availableImages = ge;
            }
            Le();
          } else
            Le();
        }
        setProjection(re, le) {
          this.projections[re] = i.bP(le);
        }
        setBrightness(re, le, ge) {
          this.brightness = le, ge();
        }
        setLayers(re, le, ge) {
          this.getLayerIndex(re, le.scope).replace(le.layers, le.options), ge();
        }
        updateLayers(re, le, ge) {
          this.getLayerIndex(re, le.scope).update(le.layers, le.removedIds, le.options), ge();
        }
        loadTile(re, le, ge) {
          le.projection = this.projections[re] || this.defaultProjection, this.getWorkerSource(re, le.type, le.source, le.scope).loadTile(le, ge);
        }
        loadDEMTile(re, le, ge) {
          this.getDEMWorkerSource(re, le.source, le.scope).loadTile(le, ge);
        }
        decodeRasterArray(re, le, ge) {
          this.getRasterArrayWorkerSource().decodeRasterArray(le, ge);
        }
        reloadTile(re, le, ge) {
          le.projection = this.projections[re] || this.defaultProjection, this.getWorkerSource(re, le.type, le.source, le.scope).reloadTile(le, ge);
        }
        abortTile(re, le, ge) {
          this.getWorkerSource(re, le.type, le.source, le.scope).abortTile(le, ge);
        }
        removeTile(re, le, ge) {
          this.getWorkerSource(re, le.type, le.source, le.scope).removeTile(le, ge);
        }
        removeSource(re, le, ge) {
          if (!(this.workerSources[re] && this.workerSources[re][le.scope] && this.workerSources[re][le.scope][le.type] && this.workerSources[re][le.scope][le.type][le.source]))
            return;
          const Le = this.workerSources[re][le.scope][le.type][le.source];
          delete this.workerSources[re][le.scope][le.type][le.source], Le.removeSource !== void 0 ? Le.removeSource(le, ge) : ge();
        }
        loadWorkerSource(re, le, ge) {
          try {
            this.self.importScripts(le.url), ge();
          } catch (Le) {
            ge(Le.toString());
          }
        }
        syncRTLPluginState(re, le, ge) {
          try {
            i.ed.setState(le);
            const Le = i.ed.getPluginURL();
            if (i.ed.isLoaded() && !i.ed.isParsed() && Le != null) {
              this.self.importScripts(Le);
              const Ce = i.ed.isParsed();
              ge(Ce ? void 0 : new Error(`RTL Text Plugin failed to import scripts from ${Le}`), Ce);
            }
          } catch (Le) {
            ge(Le.toString());
          }
        }
        setDracoUrl(re, le) {
          this.dracoUrl = le;
        }
        getAvailableImages(re, le) {
          this.availableImages[re] || (this.availableImages[re] = {});
          let ge = this.availableImages[re][le];
          return ge || (ge = []), ge;
        }
        getLayerIndex(re, le) {
          this.layerIndexes[re] || (this.layerIndexes[re] = {});
          let ge = this.layerIndexes[re][le];
          return ge || (ge = this.layerIndexes[re][le] = new J(), ge.scope = le), ge;
        }
        getWorkerSource(re, le, ge, Le) {
          return this.workerSources[re] || (this.workerSources[re] = {}), this.workerSources[re][Le] || (this.workerSources[re][Le] = {}), this.workerSources[re][Le][le] || (this.workerSources[re][Le][le] = {}), this.isSpriteLoaded[re] || (this.isSpriteLoaded[re] = {}), this.workerSources[re][Le][le][ge] || (this.workerSources[re][Le][le][ge] = new this.workerSourceTypes[le]({ send: (Ce, Be, qe, Pe, Ye, Qe) => {
            this.actor.send(Ce, Be, qe, re, Ye, Qe);
          }, scheduler: this.actor.scheduler }, this.getLayerIndex(re, Le), this.getAvailableImages(re, Le), this.isSpriteLoaded[re][Le], void 0, this.brightness)), this.workerSources[re][Le][le][ge];
        }
        rasterizeImages(re, le, ge) {
          const { imageTasks: Le, scope: Ce } = le, Be = {};
          for (const qe in Le) {
            const { image: Pe, imageIdWithOptions: Ye } = Le[qe];
            Be[qe] = this.imageRasterizer.rasterize(Ye, Pe, Ce, re);
          }
          ge(void 0, Be);
        }
        removeRasterizedImages(re, le, ge) {
          const { imageIds: Le, scope: Ce } = le;
          this.imageRasterizer.removeImagesFromCacheByIds(Le, Ce, re), ge();
        }
        getDEMWorkerSource(re, le, ge) {
          return this.demWorkerSources[re] || (this.demWorkerSources[re] = {}), this.demWorkerSources[re][ge] || (this.demWorkerSources[re][ge] = {}), this.demWorkerSources[re][ge][le] || (this.demWorkerSources[re][ge][le] = new je()), this.demWorkerSources[re][ge][le];
        }
        getRasterArrayWorkerSource() {
          return this.rasterArrayWorkerSource || (this.rasterArrayWorkerSource = new ot()), this.rasterArrayWorkerSource;
        }
        enforceCacheSizeLimit(re, le) {
          i.ee(le);
        }
        getWorkerPerformanceMetrics(re, le, ge) {
          ge(void 0, void 0);
        }
      }
      return typeof WorkerGlobalScope < "u" && typeof self < "u" && self instanceof WorkerGlobalScope && (self.worker = new Vo(self)), Vo;
    }), b(["./shared"], function(i) {
      var O = "3.9.4";
      const j = { create: "create", load: "load", fullLoad: "fullLoad" }, Y = { mark(c) {
        performance.mark(c);
      }, measure(c, t, s) {
        performance.measure(c, t, s);
      } };
      function J(c) {
        const t = c.name.split("?")[0];
        return i.a(t) && t.includes("mapbox-gl.js") ? "javascript" : i.a(t) && t.includes("mapbox-gl.css") ? "css" : i.b(t) ? "fontRange" : i.c(t) ? "sprite" : i.i(t) ? "style" : i.d(t) ? "tilejson" : "other";
      }
      var ae, ce = {}, Te = function() {
        if (ae)
          return ce;
        function c(h) {
          return !t(h);
        }
        function t(h) {
          return typeof window > "u" || typeof document > "u" ? "not a browser" : function() {
            if (!("Worker" in window && "Blob" in window && "URL" in window))
              return !1;
            var y, T, z = new Blob([""], { type: "text/javascript" }), R = URL.createObjectURL(z);
            try {
              T = new Worker(R), y = !0;
            } catch {
              y = !1;
            }
            return T && T.terminate(), URL.revokeObjectURL(R), y;
          }() ? function() {
            var y = document.createElement("canvas");
            y.width = y.height = 1;
            var T = y.getContext("2d");
            if (!T)
              return !1;
            var z = T.getImageData(0, 0, 1, 1);
            return z && z.width === y.width;
          }() ? (s[_ = h && h.failIfMajorPerformanceCaveat] === void 0 && (s[_] = function(y) {
            var T, z = function(R) {
              var F = document.createElement("canvas"), N = Object.create(c.webGLContextAttributes);
              return N.failIfMajorPerformanceCaveat = R, F.getContext("webgl2", N);
            }(y);
            if (!z)
              return !1;
            try {
              T = z.createShader(z.VERTEX_SHADER);
            } catch {
              return !1;
            }
            return !(!T || z.isContextLost()) && (z.shaderSource(T, "void main() {}"), z.compileShader(T), z.getShaderParameter(T, z.COMPILE_STATUS) === !0);
          }(_)), s[_] ? document.documentMode ? "insufficient ECMAScript 6 support" : void 0 : "insufficient WebGL2 support") : "insufficient Canvas/getImageData support" : "insufficient worker support";
          var _;
        }
        ae = 1, ce.supported = c, ce.notSupportedReason = t;
        var s = {};
        return c.webGLContextAttributes = { antialias: !1, alpha: !0, stencil: !0, depth: !0 }, ce;
      }();
      function be(c, t, s) {
        const h = document.createElement(c);
        return t != null && (h.className = t), s && s.appendChild(h), h;
      }
      function Ze(c, t, s) {
        const h = document.createElementNS("http://www.w3.org/2000/svg", c);
        for (const _ of Object.keys(t))
          h.setAttributeNS(null, _, String(t[_]));
        return s && s.appendChild(h), h;
      }
      const je = typeof document < "u" ? document.documentElement && document.documentElement.style : null, ot = je && je.userSelect !== void 0 ? "userSelect" : "WebkitUserSelect";
      let vt;
      function ht() {
        je && ot && (vt = je[ot], je[ot] = "none");
      }
      function gt() {
        je && ot && (je[ot] = vt);
      }
      function Vt(c) {
        c.preventDefault(), c.stopPropagation(), window.removeEventListener("click", Vt, !0);
      }
      function pt() {
        window.addEventListener("click", Vt, !0), window.setTimeout(() => {
          window.removeEventListener("click", Vt, !0);
        }, 0);
      }
      function Gt(c, t) {
        const s = c.getBoundingClientRect();
        return Pt(c, s, t);
      }
      function ui(c, t) {
        const s = c.getBoundingClientRect(), h = [];
        for (let _ = 0; _ < t.length; _++)
          h.push(Pt(c, s, t[_]));
        return h;
      }
      function kt(c) {
        return window.InstallTrigger !== void 0 && c.button === 2 && c.ctrlKey && window.navigator.platform.toUpperCase().indexOf("MAC") >= 0 ? 0 : c.button;
      }
      function Pt(c, t, s) {
        const h = c.offsetWidth === t.width ? 1 : c.offsetWidth / t.width;
        return new i.P((s.clientX - t.left) * h, (s.clientY - t.top) * h);
      }
      const Mi = "01", Pn = "NO_ACCESS_TOKEN";
      class hn {
        constructor(t, s, h) {
          this._transformRequestFn = t, this._customAccessToken = s, this._silenceAuthErrors = !!h, this._createSkuToken();
        }
        _createSkuToken() {
          const t = function() {
            let s = "";
            for (let h = 0; h < 10; h++)
              s += "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(62 * Math.random())];
            return { token: ["1", Mi, s].join(""), tokenExpiresAt: Date.now() + 432e5 };
          }();
          this._skuToken = t.token, this._skuTokenExpiresAt = t.tokenExpiresAt;
        }
        _isSkuTokenExpired() {
          return Date.now() > this._skuTokenExpiresAt;
        }
        transformRequest(t, s) {
          return this._transformRequestFn && this._transformRequestFn(t, s) || { url: t };
        }
        normalizeStyleURL(t, s) {
          if (!i.f(t))
            return t;
          const h = Si(t);
          return h.params.push(`sdk=js-${O}`), h.path = `/styles/v1${h.path}`, this._makeAPIURL(h, this._customAccessToken || s);
        }
        normalizeGlyphsURL(t, s) {
          if (!i.f(t))
            return t;
          const h = Si(t);
          return h.path = `/fonts/v1${h.path}`, this._makeAPIURL(h, this._customAccessToken || s);
        }
        normalizeModelURL(t, s) {
          if (!i.f(t))
            return t;
          const h = Si(t);
          return h.path = `/models/v1${h.path}`, this._makeAPIURL(h, this._customAccessToken || s);
        }
        normalizeSourceURL(t, s, h, _) {
          if (!i.f(t))
            return t;
          const y = Si(t);
          return y.path = `/v4/${y.authority}.json`, y.params.push("secure"), h && y.params.push(`language=${h}`), _ && y.params.push(`worldview=${_}`), this._makeAPIURL(y, this._customAccessToken || s);
        }
        normalizeIconsetURL(t, s) {
          const h = Si(t);
          return i.f(t) ? (h.path = `/styles/v1${h.path}/iconset.pbf`, this._makeAPIURL(h, this._customAccessToken || s)) : Ji(h);
        }
        normalizeSpriteURL(t, s, h, _) {
          const y = Si(t);
          return i.f(t) ? (y.path = `/styles/v1${y.path}/sprite${s}${h}`, this._makeAPIURL(y, this._customAccessToken || _)) : (y.path += `${s}${h}`, Ji(y));
        }
        normalizeTileURL(t, s, h) {
          if (this._isSkuTokenExpired() && this._createSkuToken(), t && !i.f(t))
            return t;
          const _ = Si(t);
          _.path = _.path.replace(/(\.(png|jpg)\d*)(?=$)/, `${s || h && _.authority !== "raster" && h === 512 ? "@2x" : ""}${i.m.supported ? ".webp" : "$1"}`), _.authority === "raster" ? _.path = `/${i.e.RASTER_URL_PREFIX}${_.path}` : _.authority === "rasterarrays" ? _.path = `/${i.e.RASTERARRAYS_URL_PREFIX}${_.path}` : _.authority === "3dtiles" ? _.path = `/${i.e.TILES3D_URL_PREFIX}${_.path}` : (_.path = _.path.replace(/^.+\/v4\//, "/"), _.path = `/${i.e.TILE_URL_VERSION}${_.path}`);
          const y = this._customAccessToken || function(T) {
            for (const z of T) {
              const R = z.match(/^access_token=(.*)$/);
              if (R)
                return R[1];
            }
            return null;
          }(_.params) || i.e.ACCESS_TOKEN;
          return i.e.REQUIRE_ACCESS_TOKEN && y && this._skuToken && _.params.push(`sku=${this._skuToken}`), this._makeAPIURL(_, y);
        }
        canonicalizeTileURL(t, s) {
          const h = Si(t);
          if (!h.path.match(/^(\/v4\/|\/(raster|rasterarrays)\/v1\/)/) || !h.path.match(/\.[\w]+$/))
            return t;
          let _ = "mapbox://";
          h.path.match(/^\/raster\/v1\//) ? _ += `raster/${h.path.replace(`/${i.e.RASTER_URL_PREFIX}/`, "")}` : h.path.match(/^\/rasterarrays\/v1\//) ? _ += `rasterarrays/${h.path.replace(`/${i.e.RASTERARRAYS_URL_PREFIX}/`, "")}` : _ += `tiles/${h.path.replace(`/${i.e.TILE_URL_VERSION}/`, "")}`;
          let y = h.params;
          return s && (y = y.filter((T) => !T.match(/^access_token=/))), y.length && (_ += `?${y.join("&")}`), _;
        }
        canonicalizeTileset(t, s) {
          const h = !!s && i.f(s), _ = [];
          for (const y of t.tiles || [])
            i.h(y) ? _.push(this.canonicalizeTileURL(y, h)) : _.push(y);
          return _;
        }
        _makeAPIURL(t, s) {
          const h = "See https://docs.mapbox.com/api/overview/#access-tokens-and-token-scopes", _ = Si(i.e.API_URL);
          if (t.protocol = _.protocol, t.authority = _.authority, t.protocol === "http") {
            const y = t.params.indexOf("secure");
            y >= 0 && t.params.splice(y, 1);
          }
          if (_.path !== "/" && (t.path = `${_.path}${t.path}`), !i.e.REQUIRE_ACCESS_TOKEN)
            return Ji(t);
          if (s = s || i.e.ACCESS_TOKEN, !this._silenceAuthErrors) {
            if (!s)
              throw new Error(`An API access token is required to use Mapbox GL. ${h}`);
            if (s[0] === "s")
              throw new Error(`Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). ${h}`);
          }
          return t.params = t.params.filter((y) => y.indexOf("access_token") === -1), t.params.push(`access_token=${s || ""}`), Ji(t);
        }
      }
      const Ht = /^(\w+):\/\/([^/?]*)(\/[^?]+)?\??(.+)?/;
      function Si(c) {
        const t = c.match(Ht);
        if (!t)
          throw new Error("Unable to parse URL object");
        return { protocol: t[1], authority: t[2], path: t[3] || "/", params: t[4] ? t[4].split("&") : [] };
      }
      function Ji(c) {
        const t = c.params.length ? `?${c.params.join("&")}` : "";
        return `${c.protocol}://${c.authority}${c.path}${t}`;
      }
      const fi = "mapbox.eventData";
      function jt(c) {
        if (!c)
          return null;
        const t = c.split(".");
        if (!t || t.length !== 3)
          return null;
        try {
          return JSON.parse(i.j(t[1]));
        } catch {
          return null;
        }
      }
      class ni {
        constructor(t) {
          this.type = t, this.anonId = null, this.eventData = {}, this.queue = [], this.pendingRequest = null;
        }
        getStorageKey(t) {
          const s = jt(i.e.ACCESS_TOKEN);
          let h = "";
          return h = s && s.u ? i.k(s.u) : i.e.ACCESS_TOKEN || "", t ? `${fi}.${t}:${h}` : `${fi}:${h}`;
        }
        fetchEventData() {
          const t = i.s("localStorage"), s = this.getStorageKey(), h = this.getStorageKey("uuid");
          if (t)
            try {
              const _ = localStorage.getItem(s);
              _ && (this.eventData = JSON.parse(_));
              const y = localStorage.getItem(h);
              y && (this.anonId = y);
            } catch {
              i.w("Unable to read from LocalStorage");
            }
        }
        saveEventData() {
          const t = i.s("localStorage"), s = this.getStorageKey(), h = this.getStorageKey("uuid"), _ = this.anonId;
          if (t && _)
            try {
              localStorage.setItem(h, _), Object.keys(this.eventData).length >= 1 && localStorage.setItem(s, JSON.stringify(this.eventData));
            } catch {
              i.w("Unable to write to LocalStorage");
            }
        }
        processRequests(t) {
        }
        postEvent(t, s, h, _) {
          if (!i.e.EVENTS_URL)
            return;
          const y = Si(i.e.EVENTS_URL);
          y.params.push(`access_token=${_ || i.e.ACCESS_TOKEN || ""}`);
          const T = { event: this.type, created: new Date(t).toISOString() }, z = s ? i.l(T, s) : T, R = { url: Ji(y), headers: { "Content-Type": "text/plain" }, body: JSON.stringify([z]) };
          this.pendingRequest = i.p(R, (F) => {
            this.pendingRequest = null, h(F), this.saveEventData(), this.processRequests(_);
          });
        }
        queueRequest(t, s) {
          this.queue.push(t), this.processRequests(s);
        }
      }
      const Gi = new class extends ni {
        constructor(c) {
          super("appUserTurnstile"), this._customAccessToken = c;
        }
        postTurnstileEvent(c, t) {
          i.e.EVENTS_URL && i.e.ACCESS_TOKEN && Array.isArray(c) && c.some((s) => i.f(s) || i.h(s)) && this.queueRequest(Date.now(), t);
        }
        processRequests(c) {
          if (this.pendingRequest || this.queue.length === 0)
            return;
          this.anonId && this.eventData.lastSuccess && this.eventData.tokenU || this.fetchEventData();
          const t = jt(i.e.ACCESS_TOKEN), s = t ? t.u : i.e.ACCESS_TOKEN;
          let h = s !== this.eventData.tokenU;
          i.v(this.anonId) || (this.anonId = i.u(), h = !0);
          const _ = this.queue.shift();
          if (this.eventData.lastSuccess) {
            const y = new Date(this.eventData.lastSuccess), T = new Date(_), z = (_ - this.eventData.lastSuccess) / 864e5;
            h = h || z >= 1 || z < -1 || y.getDate() !== T.getDate();
          } else
            h = !0;
          h ? this.postEvent(_, { sdkIdentifier: "mapbox-gl-js", sdkVersion: O, skuId: Mi, "enabled.telemetry": !1, userId: this.anonId }, (y) => {
            y || (this.eventData.lastSuccess = _, this.eventData.tokenU = s);
          }, c) : this.processRequests();
        }
      }(), an = Gi.postTurnstileEvent.bind(Gi), qt = new class extends ni {
        constructor() {
          super("map.load"), this.success = {}, this.skuToken = "";
        }
        postMapLoadEvent(c, t, s, h) {
          this.skuToken = t, this.errorCb = h, i.e.EVENTS_URL && (s || i.e.ACCESS_TOKEN ? this.queueRequest({ id: c, timestamp: Date.now() }, s) : this.errorCb(new Error(Pn)));
        }
        processRequests(c) {
          if (this.pendingRequest || this.queue.length === 0)
            return;
          const { id: t, timestamp: s } = this.queue.shift();
          t && this.success[t] || (this.anonId || this.fetchEventData(), i.v(this.anonId) || (this.anonId = i.u()), this.postEvent(s, { sdkIdentifier: "mapbox-gl-js", sdkVersion: O, skuId: Mi, skuToken: this.skuToken, userId: this.anonId }, (h) => {
            h ? this.errorCb(h) : t && (this.success[t] = !0);
          }, c));
        }
        remove() {
          this.errorCb = null;
        }
      }(), ln = qt.postMapLoadEvent.bind(qt), Di = new class extends ni {
        constructor() {
          super("style.load"), this.eventIdPerMapInstanceMap = /* @__PURE__ */ new Map(), this.mapInstanceIdMap = /* @__PURE__ */ new WeakMap();
        }
        getMapInstanceId(c) {
          let t = this.mapInstanceIdMap.get(c);
          return t || (t = i.u(), this.mapInstanceIdMap.set(c, t)), t;
        }
        getEventId(c) {
          const t = this.eventIdPerMapInstanceMap.get(c) || 0;
          return this.eventIdPerMapInstanceMap.set(c, t + 1), t;
        }
        postStyleLoadEvent(c, t) {
          const { map: s, style: h, importedStyles: _ } = t;
          if (!i.e.EVENTS_URL || !c && !i.e.ACCESS_TOKEN)
            return;
          const y = this.getMapInstanceId(s), T = { mapInstanceId: y, eventId: this.getEventId(y), style: h };
          _.length && (T.importedStyles = _), this.queueRequest({ timestamp: Date.now(), payload: T }, c);
        }
        processRequests(c) {
          if (this.pendingRequest || this.queue.length === 0)
            return;
          const { timestamp: t, payload: s } = this.queue.shift();
          this.postEvent(t, s, () => {
          }, c);
        }
      }(), xi = Di.postStyleLoadEvent.bind(Di), Cs = new class extends ni {
        constructor() {
          super("gljs.performance");
        }
        postPerformanceEvent(c, t) {
          i.e.EVENTS_URL && (c || i.e.ACCESS_TOKEN) && this.queueRequest({ timestamp: Date.now(), performanceData: t }, c);
        }
        processRequests(c) {
          if (this.pendingRequest || this.queue.length === 0)
            return;
          const { timestamp: t, performanceData: s } = this.queue.shift(), h = function(_) {
            const y = performance.getEntriesByType("resource"), T = performance.getEntriesByType("mark"), z = function(W) {
              const te = {};
              if (W) {
                for (const ee in W)
                  if (ee !== "other")
                    for (const se of W[ee]) {
                      const oe = `${ee}ResolveRangeMin`, he = `${ee}ResolveRangeMax`, _e = `${ee}RequestCount`, pe = `${ee}RequestCachedCount`;
                      te[oe] = Math.min(te[oe] || 1 / 0, se.startTime), te[he] = Math.max(te[he] || -1 / 0, se.responseEnd);
                      const Me = (xe) => {
                        te[xe] === void 0 && (te[xe] = 0), ++te[xe];
                      };
                      se.transferSize !== void 0 && se.transferSize === 0 && Me(pe), Me(_e);
                    }
              }
              return te;
            }(function(W, te) {
              const ee = {};
              if (W)
                for (const se of W) {
                  const oe = te(se);
                  ee[oe] === void 0 && (ee[oe] = []), ee[oe].push(se);
                }
              return ee;
            }(y, J)), R = window.devicePixelRatio, F = navigator.connection || navigator.mozConnection || navigator.webkitConnection, N = F ? F.effectiveType : void 0, G = { counters: [], metadata: [], attributes: [] }, Z = (W, te, ee) => {
              ee != null && W.push({ name: te, value: ee.toString() });
            };
            for (const W in z)
              Z(G.counters, W, z[W]);
            if (_.interactionRange[0] !== 1 / 0 && _.interactionRange[1] !== -1 / 0 && (Z(G.counters, "interactionRangeMin", _.interactionRange[0]), Z(G.counters, "interactionRangeMax", _.interactionRange[1])), T)
              for (const W of Object.keys(j)) {
                const te = j[W], ee = T.find((se) => se.name === te);
                ee && Z(G.counters, te, ee.startTime);
              }
            return Z(G.counters, "visibilityHidden", _.visibilityHidden), Z(G.attributes, "style", function(W) {
              if (W)
                for (const te of W) {
                  const ee = te.name.split("?")[0];
                  if (i.i(ee)) {
                    const se = ee.split("/").slice(-2);
                    if (se.length === 2)
                      return `mapbox://styles/${se[0]}/${se[1]}`;
                  }
                }
            }(y)), Z(G.attributes, "terrainEnabled", _.terrainEnabled ? "true" : "false"), Z(G.attributes, "fogEnabled", _.fogEnabled ? "true" : "false"), Z(G.attributes, "projection", _.projection), Z(G.attributes, "zoom", _.zoom), Z(G.metadata, "devicePixelRatio", R), Z(G.metadata, "connectionEffectiveType", N), Z(G.metadata, "navigatorUserAgent", navigator.userAgent), Z(G.metadata, "screenWidth", window.screen.width), Z(G.metadata, "screenHeight", window.screen.height), Z(G.metadata, "windowWidth", window.innerWidth), Z(G.metadata, "windowHeight", window.innerHeight), Z(G.metadata, "mapWidth", _.width / R), Z(G.metadata, "mapHeight", _.height / R), Z(G.metadata, "webglRenderer", _.renderer), Z(G.metadata, "webglVendor", _.vendor), Z(G.metadata, "sdkVersion", O), Z(G.metadata, "sdkIdentifier", "mapbox-gl-js"), G;
          }(s);
          for (const _ of h.metadata)
            ;
          for (const _ of h.counters)
            ;
          for (const _ of h.attributes)
            ;
          this.postEvent(t, h, () => {
          }, c);
        }
      }(), xs = Cs.postPerformanceEvent.bind(Cs), Is = new class extends ni {
        constructor() {
          super("map.auth"), this.success = {}, this.skuToken = "";
        }
        getSession(c, t, s, h) {
          if (!i.e.API_URL || !i.e.SESSION_PATH)
            return;
          const _ = Si(i.e.API_URL + i.e.SESSION_PATH);
          _.params.push(`sku=${t || ""}`), _.params.push(`access_token=${h || i.e.ACCESS_TOKEN || ""}`);
          const y = { url: Ji(_), headers: { "Content-Type": "text/plain" } };
          this.pendingRequest = i.g(y, (T) => {
            this.pendingRequest = null, s(T), this.saveEventData(), this.processRequests(h);
          });
        }
        getSessionAPI(c, t, s, h) {
          this.skuToken = t, this.errorCb = h, i.e.SESSION_PATH && i.e.API_URL && (s || i.e.ACCESS_TOKEN ? this.queueRequest({ id: c, timestamp: Date.now() }, s) : this.errorCb(new Error(Pn)));
        }
        processRequests(c) {
          if (this.pendingRequest || this.queue.length === 0)
            return;
          const { id: t, timestamp: s } = this.queue.shift();
          t && this.success[t] || this.getSession(s, this.skuToken, (h) => {
            h ? this.errorCb(h) : t && (this.success[t] = !0);
          }, c);
        }
        remove() {
          this.errorCb = null;
        }
      }(), De = Is.getSessionAPI.bind(Is), Vs = /* @__PURE__ */ new Set();
      function Us(c, t) {
        t ? Vs.add(c) : Vs.delete(c);
      }
      class Zr {
        constructor() {
          this._changed = !1, this._updatedLayers = {}, this._removedLayers = {}, this._updatedSourceCaches = {}, this._updatedPaintProps = /* @__PURE__ */ new Set(), this._updatedImages = /* @__PURE__ */ new Set();
        }
        isDirty() {
          return this._changed;
        }
        setDirty() {
          this._changed = !0;
        }
        getUpdatedSourceCaches() {
          return this._updatedSourceCaches;
        }
        updateSourceCache(t, s) {
          this._updatedSourceCaches[t] = s, this.setDirty();
        }
        discardSourceCacheUpdate(t) {
          delete this._updatedSourceCaches[t];
        }
        updateLayer(t) {
          const s = t.scope;
          this._updatedLayers[s] = this._updatedLayers[s] || /* @__PURE__ */ new Set(), this._updatedLayers[s].add(t.id), this.setDirty();
        }
        removeLayer(t) {
          const s = t.scope;
          this._removedLayers[s] = this._removedLayers[s] || {}, this._updatedLayers[s] = this._updatedLayers[s] || /* @__PURE__ */ new Set(), this._removedLayers[s][t.id] = t, this._updatedLayers[s].delete(t.id), this._updatedPaintProps.delete(t.fqid), this.setDirty();
        }
        getRemovedLayer(t) {
          return this._removedLayers[t.scope] ? this._removedLayers[t.scope][t.id] : null;
        }
        discardLayerRemoval(t) {
          this._removedLayers[t.scope] && delete this._removedLayers[t.scope][t.id];
        }
        getLayerUpdatesByScope() {
          const t = {};
          for (const s in this._updatedLayers)
            t[s] = t[s] || {}, t[s].updatedIds = Array.from(this._updatedLayers[s].values());
          for (const s in this._removedLayers)
            t[s] = t[s] || {}, t[s].removedIds = Object.keys(this._removedLayers[s]);
          return t;
        }
        getUpdatedPaintProperties() {
          return this._updatedPaintProps;
        }
        updatePaintProperties(t) {
          this._updatedPaintProps.add(t.fqid), this.setDirty();
        }
        getUpdatedImages() {
          return Array.from(this._updatedImages.values());
        }
        updateImage(t) {
          this._updatedImages.add(t), this.setDirty();
        }
        resetUpdatedImages() {
          this._updatedImages.clear();
        }
        reset() {
          this._changed = !1, this._updatedLayers = {}, this._removedLayers = {}, this._updatedSourceCaches = {}, this._updatedPaintProps.clear(), this._updatedImages.clear();
        }
      }
      function Et(c) {
        const { userImage: t } = c;
        return !!(t && t.render && t.render()) && (c.data.replace(new Uint8Array(t.data.buffer)), !0);
      }
      class Ws extends i.E {
        constructor(t) {
          super(), this.images = {}, this.updatedImages = {}, this.callbackDispatchedThisFrame = {}, this.loaded = {}, this.requestors = [], this.patterns = {}, this.atlasImage = {}, this.atlasTexture = {}, this.dirty = !0, this.spriteFormat = t, t !== "raster" && i.t() && (this.imageRasterizerDispatcher = new i.D(i.x(), this, "Image Rasterizer Worker", 1));
        }
        get imageRasterizer() {
          return this._imageRasterizer || (this._imageRasterizer = new i.I()), this._imageRasterizer;
        }
        createScope(t) {
          this.images[t] = {}, this.loaded[t] = !1, this.updatedImages[t] = {}, this.patterns[t] = {}, this.callbackDispatchedThisFrame[t] = {}, this.atlasImage[t] = new i.r({ width: 1, height: 1 });
        }
        isLoaded() {
          for (const t in this.loaded)
            if (!this.loaded[t])
              return !1;
          return !0;
        }
        setLoaded(t, s) {
          if (this.loaded[s] !== t && (this.loaded[s] = t, t)) {
            for (const { ids: h, callback: _ } of this.requestors)
              this._notify(h, s, _);
            this.requestors = [];
          }
        }
        hasImage(t, s) {
          return !!this.getImage(t, s);
        }
        getImage(t, s) {
          return this.images[s][t];
        }
        addImage(t, s, h) {
          this._validate(t, h) && (this.images[s][t] = h);
        }
        _validate(t, s) {
          let h = !0;
          return this._validateStretch(s.stretchX, s.data && s.data.width) || (this.fire(new i.y(new Error(`Image "${t}" has invalid "stretchX" value`))), h = !1), this._validateStretch(s.stretchY, s.data && s.data.height) || (this.fire(new i.y(new Error(`Image "${t}" has invalid "stretchY" value`))), h = !1), this._validateContent(s.content, s) || (this.fire(new i.y(new Error(`Image "${t}" has invalid "content" value`))), h = !1), h;
        }
        _validateStretch(t, s) {
          if (!t)
            return !0;
          let h = 0;
          for (const _ of t) {
            if (_[0] < h || _[1] < _[0] || s < _[1])
              return !1;
            h = _[1];
          }
          return !0;
        }
        _validateContent(t, s) {
          return t ? t.length !== 4 || !s.usvg && (t[0] < 0 || s.data.width < t[0] || t[1] < 0 || s.data.height < t[1] || t[2] < 0 || s.data.width < t[2] || t[3] < 0 || s.data.height < t[3]) ? !1 : !(t[2] < t[0] || t[3] < t[1]) : !0;
        }
        updateImage(t, s, h) {
          h.version = this.images[s][t].version + 1, this.images[s][t] = h, this.updatedImages[s][t] = !0, this.removeFromImageRasterizerCache(t, s);
        }
        removeFromImageRasterizerCache(t, s) {
          this.spriteFormat !== "raster" && (i.t() ? this.imageRasterizerDispatcher.getActor().send("removeRasterizedImages", { imageIds: [t], scope: s }) : this.imageRasterizer.removeImagesFromCacheByIds([t], s));
        }
        removeImage(t, s) {
          const h = this.images[s][t];
          delete this.images[s][t], delete this.patterns[s][t], this.removeFromImageRasterizerCache(t, s), h.userImage && h.userImage.onRemove && h.userImage.onRemove();
        }
        listImages(t) {
          return Object.keys(this.images[t]);
        }
        getImages(t, s, h) {
          let _ = !0;
          const y = !!this.loaded[s];
          if (!y)
            for (const T of t)
              this.images[s][T] || (_ = !1);
          y || _ ? this._notify(t, s, h) : this.requestors.push({ ids: t, scope: s, callback: h });
        }
        rasterizeImages({ scope: t, imageTasks: s }, h) {
          const _ = {};
          for (const y in s) {
            const T = s[y], z = this.getImage(T.id, t);
            z && (_[y] = { image: z, imageIdWithOptions: T });
          }
          i.t() ? this.imageRasterizerDispatcher.getActor().send("rasterizeImages", { imageTasks: _, scope: t }, h) : this.rasterizeImagesInMainThread({ imageTasks: _, scope: t }, h);
        }
        rasterizeImagesInMainThread(t, s) {
          const { imageTasks: h, scope: _ } = t, y = {};
          for (const T in h) {
            const { image: z, imageIdWithOptions: R } = h[T];
            y[T] = this.imageRasterizer.rasterize(R, z, _, "");
          }
          s(void 0, y);
        }
        getUpdatedImages(t) {
          return this.updatedImages[t];
        }
        _notify(t, s, h) {
          const _ = {};
          for (const y of t) {
            this.images[s][y] || this.fire(new i.z("styleimagemissing", { id: y }));
            const T = this.images[s][y];
            T ? _[y] = { data: T.usvg ? null : T.data.clone(), pixelRatio: T.pixelRatio, sdf: T.sdf, usvg: T.usvg, version: T.version, stretchX: T.stretchX, stretchY: T.stretchY, content: T.content, hasRenderCallback: !!(T.userImage && T.userImage.render) } : i.w(`Image "${y}" could not be loaded. Please make sure you have added the image with map.addImage() or a "sprite" property in your style. You can provide missing images by listening for the "styleimagemissing" map event.`);
          }
          h(null, _);
        }
        getPixelSize(t) {
          const { width: s, height: h } = this.atlasImage[t];
          return { width: s, height: h };
        }
        getPattern(t, s, h) {
          const _ = this.patterns[s][t], y = this.getImage(t, s);
          if (!y)
            return null;
          if (_ && _.position.version === y.version)
            return _.position;
          if (_)
            _.position.version = y.version;
          else {
            y.usvg && !y.data && (y.data = this.imageRasterizer.rasterize(i.A.from(t).getPrimary(), y, s, ""));
            const T = { w: y.data.width + 2 * i.B, h: y.data.height + 2 * i.B, x: 0, y: 0 }, z = new i.F(T, y, i.B);
            this.patterns[s][t] = { bin: T, position: z };
          }
          return this._updatePatternAtlas(s, h), this.patterns[s][t].position;
        }
        bind(t, s) {
          const h = t.gl;
          let _ = this.atlasTexture[s];
          _ ? this.dirty && (_.update(this.atlasImage[s]), this.dirty = !1) : (_ = new i.T(t, this.atlasImage[s], h.RGBA8), this.atlasTexture[s] = _), _.bind(h.LINEAR, h.CLAMP_TO_EDGE);
        }
        _updatePatternAtlas(t, s) {
          const h = [];
          for (const z in this.patterns[t])
            h.push(this.patterns[t][z].bin);
          const { w: _, h: y } = i.C(h), T = this.atlasImage[t];
          T.resize({ width: _ || 1, height: y || 1 });
          for (const z in this.patterns[t]) {
            const { bin: R, position: F } = this.patterns[t][z];
            let N = F.padding;
            const G = R.x + N, Z = R.y + N, W = this.images[t][z].data, te = W.width, ee = W.height;
            N = N > 1 ? N - 1 : N, i.r.copy(W, T, { x: 0, y: 0 }, { x: G, y: Z }, { width: te, height: ee }, s), i.r.copy(W, T, { x: 0, y: ee - N }, { x: G, y: Z - N }, { width: te, height: N }, s), i.r.copy(W, T, { x: 0, y: 0 }, { x: G, y: Z + ee }, { width: te, height: N }, s), i.r.copy(W, T, { x: te - N, y: 0 }, { x: G - N, y: Z }, { width: N, height: ee }, s), i.r.copy(W, T, { x: 0, y: 0 }, { x: G + te, y: Z }, { width: N, height: ee }, s), i.r.copy(W, T, { x: te - N, y: ee - N }, { x: G - N, y: Z - N }, { width: N, height: N }, s), i.r.copy(W, T, { x: 0, y: ee - N }, { x: G + te, y: Z - N }, { width: N, height: N }, s), i.r.copy(W, T, { x: 0, y: 0 }, { x: G + te, y: Z + ee }, { width: N, height: N }, s), i.r.copy(W, T, { x: te - N, y: 0 }, { x: G - N, y: Z + ee }, { width: N, height: N }, s);
          }
          this.dirty = !0;
        }
        beginFrame() {
          for (const t in this.images)
            this.callbackDispatchedThisFrame[t] = {};
        }
        dispatchRenderCallbacks(t, s) {
          for (const h of t) {
            if (this.callbackDispatchedThisFrame[s][h])
              continue;
            this.callbackDispatchedThisFrame[s][h] = !0;
            const _ = this.images[s][h];
            Et(_) && this.updateImage(h, s, _);
          }
        }
      }
      function $n(c) {
        const t = c.key, s = c.value, h = c.valueSpec || {}, _ = c.objectElementValidators || {}, y = c.style, T = c.styleSpec;
        let z = [];
        const R = i.H(s);
        if (R !== "object")
          return [new i.V(t, s, `object expected, ${R} found`)];
        for (const F in s) {
          const N = F.split(".")[0];
          let G;
          _[N] ? G = _[N] : h[N] ? G = mi : _["*"] ? G = _["*"] : h["*"] && (G = mi), G ? z = z.concat(G({ key: (t && `${t}.`) + F, value: s[F], valueSpec: h[N] || h["*"], style: y, styleSpec: T, object: s, objectKey: F }, s)) : z.push(new i.G(t, s[F], `unknown property "${F}"`));
        }
        for (const F in h)
          _[F] || h[F].required && h[F].default === void 0 && s[F] === void 0 && z.push(new i.V(t, s, `missing required property "${F}"`));
        return z;
      }
      function $s(c) {
        const t = c.value, s = c.valueSpec, h = c.style, _ = c.styleSpec, y = c.key, T = c.arrayElementValidator || mi;
        if (i.H(t) !== "array")
          return [new i.V(y, t, `array expected, ${i.H(t)} found`)];
        if (s.length && t.length !== s.length)
          return [new i.V(y, t, `array length ${s.length} expected, length ${t.length} found`)];
        if (s["min-length"] && t.length < s["min-length"])
          return [new i.V(y, t, `array length at least ${s["min-length"]} expected, length ${t.length} found`)];
        let z = { type: s.value, values: s.values, minimum: s.minimum, maximum: s.maximum, function: void 0 };
        _.$version < 7 && (z.function = s.function), i.H(s.value) === "object" && (z = s.value);
        let R = [];
        for (let F = 0; F < t.length; F++)
          R = R.concat(T({ array: t, arrayIndex: F, value: t[F], valueSpec: z, style: h, styleSpec: _, key: `${y}[${F}]` }, !0));
        return R;
      }
      function vi(c) {
        const t = c.key, s = c.value, h = c.valueSpec;
        let _ = i.H(s);
        if (_ === "number" && s != s && (_ = "NaN"), _ !== "number")
          return [new i.V(t, s, `number expected, ${_} found`)];
        if ("minimum" in h) {
          let y = h.minimum;
          if (i.H(h.minimum) === "array" && (y = h.minimum[c.arrayIndex]), s < y)
            return [new i.V(t, s, `${s} is less than the minimum value ${y}`)];
        }
        if ("maximum" in h) {
          let y = h.maximum;
          if (i.H(h.maximum) === "array" && (y = h.maximum[c.arrayIndex]), s > y)
            return [new i.V(t, s, `${s} is greater than the maximum value ${y}`)];
        }
        return [];
      }
      function kn(c) {
        const t = c.valueSpec, s = i.K(c.value.type);
        let h, _, y, T = {};
        const z = s !== "categorical" && c.value.property === void 0, R = !z, F = i.H(c.value.stops) === "array" && i.H(c.value.stops[0]) === "array" && i.H(c.value.stops[0][0]) === "object", N = $n({ key: c.key, value: c.value, valueSpec: c.styleSpec.function, style: c.style, styleSpec: c.styleSpec, objectElementValidators: { stops: function(W) {
          if (s === "identity")
            return [new i.V(W.key, W.value, 'identity function may not have a "stops" property')];
          let te = [];
          const ee = W.value;
          return te = te.concat($s({ key: W.key, value: ee, valueSpec: W.valueSpec, style: W.style, styleSpec: W.styleSpec, arrayElementValidator: G })), i.H(ee) === "array" && ee.length === 0 && te.push(new i.V(W.key, ee, "array must have at least one stop")), te;
        }, default: function(W) {
          return mi({ key: W.key, value: W.value, valueSpec: t, style: W.style, styleSpec: W.styleSpec });
        } } });
        return s === "identity" && z && N.push(new i.V(c.key, c.value, 'missing required property "property"')), s === "identity" || c.value.stops || N.push(new i.V(c.key, c.value, 'missing required property "stops"')), s === "exponential" && c.valueSpec.expression && !i.L(c.valueSpec) && N.push(new i.V(c.key, c.value, "exponential functions not supported")), c.styleSpec.$version >= 8 && (R && !i.M(c.valueSpec) ? N.push(new i.V(c.key, c.value, "property functions not supported")) : z && !i.N(c.valueSpec) && N.push(new i.V(c.key, c.value, "zoom functions not supported"))), s !== "categorical" && !F || c.value.property !== void 0 || N.push(new i.V(c.key, c.value, '"property" property is required')), N;
        function G(W) {
          let te = [];
          const ee = W.value, se = W.key;
          if (i.H(ee) !== "array")
            return [new i.V(se, ee, `array expected, ${i.H(ee)} found`)];
          if (ee.length !== 2)
            return [new i.V(se, ee, `array length 2 expected, length ${ee.length} found`)];
          if (F) {
            if (i.H(ee[0]) !== "object")
              return [new i.V(se, ee, `object expected, ${i.H(ee[0])} found`)];
            if (ee[0].zoom === void 0)
              return [new i.V(se, ee, "object stop key must have zoom")];
            if (ee[0].value === void 0)
              return [new i.V(se, ee, "object stop key must have value")];
            const oe = i.K(ee[0].zoom);
            if (typeof oe != "number")
              return [new i.V(se, ee[0].zoom, "stop zoom values must be numbers")];
            if (y && y > oe)
              return [new i.V(se, ee[0].zoom, "stop zoom values must appear in ascending order")];
            oe !== y && (y = oe, _ = void 0, T = {}), te = te.concat($n({ key: `${se}[0]`, value: ee[0], valueSpec: { zoom: {} }, style: W.style, styleSpec: W.styleSpec, objectElementValidators: { zoom: vi, value: Z } }));
          } else
            te = te.concat(Z({ key: `${se}[0]`, value: ee[0], valueSpec: {}, style: W.style, styleSpec: W.styleSpec }, ee));
          return i.O(i.Q(ee[1])) ? te.concat([new i.V(`${se}[1]`, ee[1], "expressions are not allowed in function stops.")]) : te.concat(mi({ key: `${se}[1]`, value: ee[1], valueSpec: t, style: W.style, styleSpec: W.styleSpec }));
        }
        function Z(W, te) {
          const ee = i.H(W.value), se = i.K(W.value), oe = W.value !== null ? W.value : te;
          if (h) {
            if (ee !== h)
              return [new i.V(W.key, oe, `${ee} stop domain type must match previous stop domain type ${h}`)];
          } else
            h = ee;
          if (ee !== "number" && ee !== "string" && ee !== "boolean" && typeof se != "number" && typeof se != "string" && typeof se != "boolean")
            return [new i.V(W.key, oe, "stop domain value must be a number, string, or boolean")];
          if (ee !== "number" && s !== "categorical") {
            let he = `number expected, ${ee} found`;
            return i.M(t) && s === void 0 && (he += '\nIf you intended to use a categorical function, specify `"type": "categorical"`.'), [new i.V(W.key, oe, he)];
          }
          return s !== "categorical" || ee !== "number" || typeof se == "number" && isFinite(se) && Math.floor(se) === se ? s !== "categorical" && ee === "number" && typeof se == "number" && typeof _ == "number" && _ !== void 0 && se < _ ? [new i.V(W.key, oe, "stop domain values must appear in ascending order")] : (_ = se, s === "categorical" && se in T ? [new i.V(W.key, oe, "stop domain values must be unique")] : (T[se] = !0, [])) : [new i.V(W.key, oe, `integer expected, found ${String(se)}`)];
        }
      }
      function Xs(c) {
        const t = (c.expressionContext === "property" ? i.S : i.U)(i.Q(c.value), c.valueSpec);
        if (t.result === "error")
          return t.value.map((h) => new i.V(`${c.key}${h.key}`, c.value, h.message));
        const s = t.value.expression || t.value._styleExpression.expression;
        if (c.expressionContext === "property" && c.propertyKey === "text-font" && !s.outputDefined())
          return [new i.V(c.key, c.value, `Invalid data expression for "${c.propertyKey}". Output values must be contained as literals within the expression.`)];
        if (c.expressionContext === "property" && c.propertyType === "layout" && !i.W(s))
          return [new i.V(c.key, c.value, '"feature-state" data expressions are not supported with layout properties.')];
        if (c.expressionContext === "filter")
          return Hr(s, c);
        if (c.expressionContext && c.expressionContext.indexOf("cluster") === 0) {
          if (!i.X(s, ["zoom", "feature-state"]))
            return [new i.V(c.key, c.value, '"zoom" and "feature-state" expressions are not supported with cluster properties.')];
          if (c.expressionContext === "cluster-initial" && !i.Y(s))
            return [new i.V(c.key, c.value, "Feature data expressions are not supported with initial expression part of cluster properties.")];
        }
        return [];
      }
      function Hr(c, t) {
        const s = /* @__PURE__ */ new Set(["zoom", "feature-state", "pitch", "distance-from-center"]);
        if (t.valueSpec && t.valueSpec.expression)
          for (const _ of t.valueSpec.expression.parameters)
            s.delete(_);
        if (s.size === 0)
          return [];
        const h = [];
        return c instanceof i.Z && s.has(c.name) ? [new i.V(t.key, t.value, `["${c.name}"] expression is not supported in a filter for a ${t.object.type} layer with id: ${t.object.id}`)] : (c.eachChild((_) => {
          h.push(...Hr(_, t));
        }), h);
      }
      function qr(c) {
        const t = c.key, s = c.value, h = c.valueSpec, _ = [];
        return Array.isArray(h.values) ? h.values.indexOf(i.K(s)) === -1 && _.push(new i.V(t, s, `expected one of [${h.values.join(", ")}], ${JSON.stringify(s)} found`)) : Object.keys(h.values).indexOf(i.K(s)) === -1 && _.push(new i.V(t, s, `expected one of [${Object.keys(h.values).join(", ")}], ${JSON.stringify(s)} found`)), _;
      }
      function Wr(c) {
        return i.$(i.Q(c.value)) ? Xs(i.J({}, c, { expressionContext: "filter", valueSpec: c.styleSpec[`filter_${c.layerType || "fill"}`] })) : si(c);
      }
      function si(c) {
        const t = c.value, s = c.key;
        if (i.H(t) !== "array")
          return [new i.V(s, t, `array expected, ${i.H(t)} found`)];
        const h = c.styleSpec;
        let _, y = [];
        if (t.length < 1)
          return [new i.V(s, t, "filter array must have at least 1 element")];
        switch (y = y.concat(qr({ key: `${s}[0]`, value: t[0], valueSpec: h.filter_operator, style: c.style, styleSpec: c.styleSpec })), i.K(t[0])) {
          case "<":
          case "<=":
          case ">":
          case ">=":
            t.length >= 2 && i.K(t[1]) === "$type" && y.push(new i.V(s, t, `"$type" cannot be use with operator "${t[0]}"`));
          case "==":
          case "!=":
            t.length !== 3 && y.push(new i.V(s, t, `filter array for operator "${t[0]}" must have 3 elements`));
          case "in":
          case "!in":
            t.length >= 2 && (_ = i.H(t[1]), _ !== "string" && y.push(new i.V(`${s}[1]`, t[1], `string expected, ${_} found`)));
            for (let T = 2; T < t.length; T++)
              _ = i.H(t[T]), i.K(t[1]) === "$type" ? y = y.concat(qr({ key: `${s}[${T}]`, value: t[T], valueSpec: h.geometry_type, style: c.style, styleSpec: c.styleSpec })) : _ !== "string" && _ !== "number" && _ !== "boolean" && y.push(new i.V(`${s}[${T}]`, t[T], `string, number, or boolean expected, ${_} found`));
            break;
          case "any":
          case "all":
          case "none":
            for (let T = 1; T < t.length; T++)
              y = y.concat(si({ key: `${s}[${T}]`, value: t[T], style: c.style, styleSpec: c.styleSpec }));
            break;
          case "has":
          case "!has":
            _ = i.H(t[1]), t.length !== 2 ? y.push(new i.V(s, t, `filter array for "${t[0]}" operator must have 2 elements`)) : _ !== "string" && y.push(new i.V(`${s}[1]`, t[1], `string expected, ${_} found`));
        }
        return y;
      }
      function fs(c, t) {
        const s = c.key, h = c.style, _ = c.layer, y = c.styleSpec, T = c.value, z = c.objectKey, R = y[`${t}_${c.layerType}`];
        if (!R)
          return [];
        const F = z.match(/^(.*)-use-theme$/);
        if (t === "paint" && F && R[F[1]])
          return mi({ key: s, value: T, valueSpec: { type: "string" }, style: h, styleSpec: y });
        const N = z.match(/^(.*)-transition$/);
        if (t === "paint" && N && R[N[1]] && R[N[1]].transition)
          return mi({ key: s, value: T, valueSpec: y.transition, style: h, styleSpec: y });
        const G = c.valueSpec || R[z];
        if (!G)
          return [new i.G(s, T, `unknown property "${z}"`)];
        let Z;
        if (i.H(T) === "string" && i.M(G) && !G.tokens && (Z = /^{([^}]+)}$/.exec(T))) {
          const te = `\`{ "type": "identity", "property": ${Z ? JSON.stringify(Z[1]) : '"_"'} }\``;
          return [new i.V(s, T, `"${z}" does not support interpolation syntax
Use an identity property function instead: ${te}.`)];
        }
        const W = [];
        if (c.layerType === "symbol")
          z !== "text-field" || !h || h.glyphs || h.imports || W.push(new i.V(s, T, 'use of "text-field" requires a style "glyphs" property')), z === "text-font" && i.a0(i.Q(T)) && i.K(T.type) === "identity" && W.push(new i.V(s, T, '"text-font" does not support identity functions'));
        else if (c.layerType === "model" && t === "paint" && _ && _.layout && _.layout.hasOwnProperty("model-id") && i.M(G) && (i.a1(G) || i.N(G))) {
          const te = i.S(i.Q(T), G), ee = te.value.expression || te.value._styleExpression.expression;
          ee && !i.X(ee, ["measure-light"]) && (z === "model-emissive-strength" && i.Y(ee) && i.W(ee) || W.push(new i.V(s, T, `${z} does not support measure-light expressions when the model layer source is vector tile or GeoJSON.`)));
        }
        return W.concat(mi({ key: c.key, value: T, valueSpec: G, style: h, styleSpec: y, expressionContext: "property", propertyType: t, propertyKey: z }));
      }
      function zn(c) {
        return fs(c, "paint");
      }
      function Rn(c) {
        return fs(c, "layout");
      }
      function An(c) {
        let t = [];
        const s = c.value, h = c.key, _ = c.style, y = c.styleSpec;
        s.type || s.ref || t.push(new i.V(h, s, 'either "type" or "ref" is required'));
        let T = i.K(s.type);
        const z = i.K(s.ref);
        if (s.id) {
          const R = i.K(s.id);
          for (let F = 0; F < c.arrayIndex; F++) {
            const N = _.layers[F];
            i.K(N.id) === R && t.push(new i.V(h, s.id, `duplicate layer id "${s.id}", previously used at line ${N.id.__line__}`));
          }
        }
        if ("ref" in s) {
          let R;
          ["type", "source", "source-layer", "filter", "layout"].forEach((F) => {
            F in s && t.push(new i.V(h, s[F], `"${F}" is prohibited for ref layers`));
          }), _.layers.forEach((F) => {
            i.K(F.id) === z && (R = F);
          }), R ? R.ref ? t.push(new i.V(h, s.ref, "ref cannot reference another ref layer")) : T = i.K(R.type) : typeof z == "string" && t.push(new i.V(h, s.ref, `ref layer "${z}" not found`));
        } else if (T !== "background" && T !== "sky" && T !== "slot")
          if (s.source) {
            const R = _.sources && _.sources[s.source], F = R && i.K(R.type);
            R ? F === "vector" && T === "raster" ? t.push(new i.V(h, s.source, `layer "${s.id}" requires a raster source`)) : F === "raster" && T !== "raster" ? t.push(new i.V(h, s.source, `layer "${s.id}" requires a vector source`)) : F !== "vector" || s["source-layer"] ? F === "raster-dem" && T !== "hillshade" ? t.push(new i.V(h, s.source, "raster-dem source can only be used with layer type 'hillshade'.")) : F !== "raster-array" || ["raster", "raster-particle"].includes(T) ? T !== "line" || !s.paint || !s.paint["line-gradient"] && !s.paint["line-trim-offset"] || F === "geojson" && R.lineMetrics ? T === "raster-particle" && F !== "raster-array" && t.push(new i.V(h, s.source, `layer "${s.id}" requires a 'raster-array' source.`)) : t.push(new i.V(h, s, `layer "${s.id}" specifies a line-gradient, which requires a GeoJSON source with \`lineMetrics\` enabled.`)) : t.push(new i.V(h, s.source, "raster-array source can only be used with layer type 'raster'.")) : t.push(new i.V(h, s, `layer "${s.id}" must specify a "source-layer"`)) : t.push(new i.V(h, s.source, `source "${s.source}" not found`));
          } else
            t.push(new i.V(h, s, 'missing required property "source"'));
        return t = t.concat($n({ key: h, value: s, valueSpec: y.layer, style: c.style, styleSpec: c.styleSpec, objectElementValidators: { "*": () => [], type: () => mi({ key: `${h}.type`, value: s.type, valueSpec: y.layer.type, style: c.style, styleSpec: c.styleSpec, object: s, objectKey: "type" }), filter: (R) => Wr(i.J({ layerType: T }, R)), layout: (R) => $n({ layer: s, key: R.key, value: R.value, valueSpec: {}, style: R.style, styleSpec: R.styleSpec, objectElementValidators: { "*": (F) => Rn(i.J({ layerType: T }, F)) } }), paint: (R) => $n({ layer: s, key: R.key, value: R.value, valueSpec: {}, style: R.style, styleSpec: R.styleSpec, objectElementValidators: { "*": (F) => zn(i.J({ layerType: T, layer: s }, F)) } }) } })), t;
      }
      function js(c) {
        const t = c.value, s = c.key, h = i.H(t);
        return h !== "string" ? [new i.V(s, t, `string expected, ${h} found`)] : [];
      }
      const yo = { promoteId: function({ key: c, value: t }) {
        if (i.H(t) === "string")
          return js({ key: c, value: t });
        {
          const s = [];
          for (const h in t)
            s.push(...js({ key: `${c}.${h}`, value: t[h] }));
          return s;
        }
      } };
      function xo(c) {
        const t = c.value, s = c.key, h = c.styleSpec, _ = c.style;
        if (!t.type)
          return [new i.V(s, t, '"type" is required')];
        const y = i.K(t.type);
        let T = [];
        switch (["vector", "raster", "raster-dem", "raster-array"].includes(y) && (t.url || t.tiles || T.push(new i.G(s, t, 'Either "url" or "tiles" is required.'))), y) {
          case "vector":
          case "raster":
          case "raster-dem":
          case "raster-array":
            return T = T.concat($n({ key: s, value: t, valueSpec: h[`source_${y.replace("-", "_")}`], style: c.style, styleSpec: h, objectElementValidators: yo })), T;
          case "geojson":
            if (T = $n({ key: s, value: t, valueSpec: h.source_geojson, style: _, styleSpec: h, objectElementValidators: yo }), t.cluster)
              for (const z in t.clusterProperties) {
                const [R, F] = t.clusterProperties[z], N = typeof R == "string" ? [R, ["accumulated"], ["get", z]] : R;
                T.push(...Xs({ key: `${s}.${z}.map`, value: F, expressionContext: "cluster-map" })), T.push(...Xs({ key: `${s}.${z}.reduce`, value: N, expressionContext: "cluster-reduce" }));
              }
            return T;
          case "video":
            return $n({ key: s, value: t, valueSpec: h.source_video, style: _, styleSpec: h });
          case "image":
            return $n({ key: s, value: t, valueSpec: h.source_image, style: _, styleSpec: h });
          case "canvas":
            return [new i.V(s, null, "Please use runtime APIs to add canvas sources, rather than including them in stylesheets.", "source.canvas")];
          default:
            return qr({ key: `${s}.type`, value: t.type, valueSpec: { values: vo(h) }, style: _, styleSpec: h });
        }
      }
      function vo(c) {
        return c.source.reduce((t, s) => {
          const h = c[s];
          return h.type.type === "enum" && (t = t.concat(Object.keys(h.type.values))), t;
        }, []);
      }
      function yr(c) {
        const t = c.value, s = c.styleSpec, h = s.light, _ = c.style;
        let y = [];
        const T = i.H(t);
        if (t === void 0)
          return y;
        if (T !== "object")
          return y = y.concat([new i.V("light", t, `object expected, ${T} found`)]), y;
        for (const z in t) {
          const R = z.match(/^(.*)-transition$/), F = z.match(/^(.*)-use-theme$/);
          y = y.concat(F && h[F[1]] ? mi({ key: z, value: t[z], valueSpec: { type: "string" }, style: _, styleSpec: s }) : R && h[R[1]] && h[R[1]].transition ? mi({ key: z, value: t[z], valueSpec: s.transition, style: _, styleSpec: s }) : h[z] ? mi({ key: z, value: t[z], valueSpec: h[z], style: _, styleSpec: s }) : [new i.V(z, t[z], `unknown property "${z}"`)]);
        }
        return y;
      }
      function Mr(c) {
        const t = c.value;
        let s = [];
        if (!t)
          return s;
        const h = i.H(t);
        if (h !== "object")
          return s = s.concat([new i.V("light-3d", t, `object expected, ${h} found`)]), s;
        const _ = c.styleSpec, y = _["light-3d"], T = c.key, z = c.style, R = c.style.lights;
        for (const G of ["type", "id"])
          if (!(G in t))
            return s = s.concat([new i.V("light-3d", t, `missing property ${G} on light`)]), s;
        if (t.type && R)
          for (let G = 0; G < c.arrayIndex; G++) {
            const Z = i.K(t.type), W = R[G];
            i.K(W.type) === Z && s.push(new i.V(T, t.id, `duplicate light type "${t.type}", previously defined at line ${W.id.__line__}`));
          }
        const F = `properties_light_${t.type}`;
        if (!(F in _))
          return s = s.concat([new i.V("light-3d", t, `Invalid light type ${t.type}`)]), s;
        const N = _[F];
        for (const G in t)
          if (G === "properties") {
            const Z = t[G], W = i.H(Z);
            if (W !== "object")
              return s = s.concat([new i.V("properties", Z, `object expected, ${W} found`)]), s;
            for (const te in Z)
              s = s.concat(N[te] ? mi({ key: te, value: Z[te], valueSpec: N[te], style: z, styleSpec: _ }) : [new i.G(c.key, Z[te], `unknown property "${te}"`)]);
          } else {
            const Z = G.match(/^(.*)-transition$/), W = G.match(/^(.*)-use-theme$/);
            s = s.concat(W && y[W[1]] ? mi({ key: G, value: t[G], valueSpec: { type: "string" }, style: z, styleSpec: _ }) : Z && y[Z[1]] && y[Z[1]].transition ? mi({ key: G, value: t[G], valueSpec: _.transition, style: z, styleSpec: _ }) : y[G] ? mi({ key: G, value: t[G], valueSpec: y[G], style: z, styleSpec: _ }) : [new i.G(G, t[G], `unknown property "${G}"`)]);
          }
        return s;
      }
      function io(c) {
        const t = c.value, s = c.key, h = c.style, _ = c.styleSpec, y = _.terrain;
        let T = [];
        const z = i.H(t);
        if (t === void 0 || z === "null")
          return T;
        if (z !== "object")
          return T = T.concat([new i.V("terrain", t, `object expected, ${z} found`)]), T;
        for (const R in t) {
          const F = R.match(/^(.*)-transition$/), N = R.match(/^(.*)-use-theme$/);
          T = T.concat(N && y[N[1]] ? mi({ key: R, value: t[R], valueSpec: { type: "string" }, style: h, styleSpec: _ }) : F && y[F[1]] && y[F[1]].transition ? mi({ key: R, value: t[R], valueSpec: _.transition, style: h, styleSpec: _ }) : y[R] ? mi({ key: R, value: t[R], valueSpec: y[R], style: h, styleSpec: _ }) : [new i.G(R, t[R], `unknown property "${R}"`)]);
        }
        if (t.source) {
          const R = h.sources && h.sources[t.source], F = R && i.K(R.type);
          R ? F !== "raster-dem" && T.push(new i.V(s, t.source, `terrain cannot be used with a source of type ${String(F)}, it only be used with a "raster-dem" source type`)) : T.push(new i.V(s, t.source, `source "${t.source}" not found`));
        } else
          T.push(new i.V(s, t, 'terrain is missing required property "source"'));
        return T;
      }
      function Ys(c) {
        const t = c.value, s = c.style, h = c.styleSpec, _ = h.fog;
        let y = [];
        const T = i.H(t);
        if (t === void 0)
          return y;
        if (T !== "object")
          return y = y.concat([new i.V("fog", t, `object expected, ${T} found`)]), y;
        for (const z in t) {
          const R = z.match(/^(.*)-transition$/), F = z.match(/^(.*)-use-theme$/);
          y = y.concat(F && _[F[1]] ? mi({ key: z, value: t[z], valueSpec: { type: "string" }, style: s, styleSpec: h }) : R && _[R[1]] && _[R[1]].transition ? mi({ key: z, value: t[z], valueSpec: h.transition, style: s, styleSpec: h }) : _[z] ? mi({ key: z, value: t[z], valueSpec: _[z], style: s, styleSpec: h }) : [new i.G(z, t[z], `unknown property "${z}"`)]);
        }
        return y;
      }
      const Sr = { "*": () => [], array: $s, boolean: function(c) {
        const t = c.value, s = c.key, h = i.H(t);
        return h !== "boolean" ? [new i.V(s, t, `boolean expected, ${h} found`)] : [];
      }, number: vi, color: function(c) {
        const t = c.key, s = c.value, h = i.H(s);
        return h !== "string" ? [new i.V(t, s, `color expected, ${h} found`)] : i._.parseCSSColor(s) === null ? [new i.V(t, s, `color expected, "${s}" found`)] : [];
      }, enum: qr, filter: Wr, function: kn, layer: An, object: $n, source: xo, model: i.a2, light: yr, "light-3d": Mr, terrain: io, fog: Ys, string: js, formatted: function(c) {
        return js(c).length === 0 ? [] : Xs(c);
      }, resolvedImage: function(c) {
        return js(c).length === 0 ? [] : Xs(c);
      }, projection: function(c) {
        const t = c.value, s = c.styleSpec, h = s.projection, _ = c.style;
        let y = [];
        const T = i.H(t);
        if (T === "object")
          for (const z in t)
            y = y.concat(mi({ key: z, value: t[z], valueSpec: h[z], style: _, styleSpec: s }));
        else
          T !== "string" && (y = y.concat([new i.V("projection", t, `object or string expected, ${T} found`)]));
        return y;
      }, import: function(c) {
        const { value: t, styleSpec: s } = c, { data: h, ..._ } = t;
        Object.defineProperty(_, "__line__", { value: t.__line__, enumerable: !1 });
        let y = $n(i.J({}, c, { value: _, valueSpec: s.import }));
        return i.K(_.id) === "" && y.push(new i.V(`${c.key}.id`, _, "import id can't be an empty string")), h && (y = y.concat(Vn(h, s, { key: `${c.key}.data` }))), y;
      } };
      function mi(c, t = !1) {
        const s = c.value, h = c.valueSpec, _ = c.styleSpec;
        if (h.expression && i.a0(i.K(s)))
          return kn(c);
        if (h.expression && i.O(i.Q(s)))
          return Xs(c);
        if (h.type && Sr[h.type]) {
          const y = Sr[h.type](c);
          return t === !0 && y.length > 0 && i.H(c.value) === "array" ? Xs(c) : y;
        }
        return $n(i.J({}, c, { valueSpec: h.type ? _[h.type] : h }));
      }
      function On(c) {
        const t = c.value, s = c.key, h = js(c);
        return h.length || (t.indexOf("{fontstack}") === -1 && h.push(new i.V(s, t, '"glyphs" url must include a "{fontstack}" token')), t.indexOf("{range}") === -1 && h.push(new i.V(s, t, '"glyphs" url must include a "{range}" token'))), h;
      }
      function Vn(c, t = i.a3, s = {}) {
        return mi({ key: s.key || "", value: c, valueSpec: t.$root, styleSpec: t, style: c, objectElementValidators: { glyphs: On, "*": () => [] } });
      }
      function Zi(c, t = i.a3) {
        return qe(Vn(c, t));
      }
      const Jn = (c) => qe(xo(c)), Fn = (c) => qe(yr(c)), Ls = (c) => qe(Mr(c)), zs = (c) => qe(io(c)), Vo = (c) => qe(Ys(c)), Ke = (c) => qe(function(t) {
        const s = t.value, h = t.style, _ = t.styleSpec, y = _.snow;
        let T = [];
        const z = i.H(s);
        if (s === void 0)
          return T;
        if (z !== "object")
          return T = T.concat([new i.V("snow", s, `object expected, ${z} found`)]), T;
        for (const R in s) {
          const F = R.match(/^(.*)-transition$/);
          T = T.concat(F && y[F[1]] && y[F[1]].transition ? mi({ key: R, value: s[R], valueSpec: _.transition, style: h, styleSpec: _ }) : y[R] ? mi({ key: R, value: s[R], valueSpec: y[R], style: h, styleSpec: _ }) : [new i.G(R, s[R], `unknown property "${R}"`)]);
        }
        return T;
      }(c)), re = (c) => qe(function(t) {
        const s = t.value, h = t.style, _ = t.styleSpec, y = _.rain;
        let T = [];
        const z = i.H(s);
        if (s === void 0)
          return T;
        if (z !== "object")
          return T = T.concat([new i.V("rain", s, `object expected, ${z} found`)]), T;
        for (const R in s) {
          const F = R.match(/^(.*)-transition$/);
          T = T.concat(F && y[F[1]] && y[F[1]].transition ? mi({ key: R, value: s[R], valueSpec: _.transition, style: h, styleSpec: _ }) : y[R] ? mi({ key: R, value: s[R], valueSpec: y[R], style: h, styleSpec: _ }) : [new i.G(R, s[R], `unknown property "${R}"`)]);
        }
        return T;
      }(c)), le = (c) => qe(An(c)), ge = (c) => qe(Wr(c)), Le = (c) => qe(zn(c)), Ce = (c) => qe(Rn(c)), Be = (c) => qe(i.a2(c));
      function qe(c) {
        return c.slice().sort((t, s) => t.line && s.line ? t.line - s.line : 0);
      }
      function Pe(c, t) {
        let s = !1;
        if (t && t.length)
          for (const h of t)
            h instanceof i.G ? i.w(h.message) : (c.fire(new i.y(new Error(h.message))), s = !0);
        return s;
      }
      let Ye;
      class Qe extends i.E {
        constructor(t, s = "flat") {
          super(), this._transitionable = new i.a4(Ye || (Ye = new i.a5({ anchor: new i.a6(i.a3.light.anchor), position: new i.a7(i.a3.light.position), color: new i.a6(i.a3.light.color), intensity: new i.a6(i.a3.light.intensity) }))), this.setLight(t, s), this._transitioning = this._transitionable.untransitioned();
        }
        getLight() {
          return this._transitionable.serialize();
        }
        setLight(t, s, h = {}) {
          this._validate(Fn, t, h) || (this._transitionable.setTransitionOrValue(t), this.id = s);
        }
        updateTransitions(t) {
          this._transitioning = this._transitionable.transitioned(t, this._transitioning);
        }
        hasTransition() {
          return this._transitioning.hasTransition();
        }
        recalculate(t) {
          this.properties = this._transitioning.possiblyEvaluate(t);
        }
        _validate(t, s, h) {
          return (!h || h.validate !== !1) && Pe(this, t.call(Zi, i.l({ value: s, style: { glyphs: !0, sprite: !0 }, styleSpec: i.a3 })));
        }
      }
      let it = class extends i.E {
        constructor(c, t, s, h) {
          super(), this.scope = s, this._transitionable = new i.a4(new i.a5({ source: new i.a6(i.a3.terrain.source), exaggeration: new i.a6(i.a3.terrain.exaggeration) }), s, h), this._transitionable.setTransitionOrValue(c, h), this._transitioning = this._transitionable.untransitioned(), this.drapeRenderMode = t;
        }
        get() {
          return this._transitionable.serialize();
        }
        set(c, t) {
          this._transitionable.setTransitionOrValue(c, t);
        }
        updateTransitions(c) {
          this._transitioning = this._transitionable.transitioned(c, this._transitioning);
        }
        hasTransition() {
          return this._transitioning.hasTransition();
        }
        recalculate(c) {
          this.properties = this._transitioning.possiblyEvaluate(c);
        }
        getExaggeration(c) {
          return this._transitioning.possiblyEvaluate(new i.a8(c)).get("exaggeration");
        }
        getAttenuationRange() {
          if (!this.isZoomDependent())
            return null;
          const c = this._transitionable._values.exaggeration;
          if (!c)
            return null;
          const t = c.value.expression;
          if (!t)
            return null;
          let s = -1, h = -1, _ = 1;
          for (const y of t.zoomStops)
            _ = t.evaluate(new i.a8(y)), _ > 0.01 ? (s = y, h = -1) : h = y;
          return _ < 0.01 && s > 0 && h > s ? [s, h] : null;
        }
        isZoomDependent() {
          const c = this._transitionable._values.exaggeration;
          return c != null && c.value != null && c.value.expression != null && c.value.expression instanceof i.a9;
        }
      };
      const mt = 45, Ct = 65, It = 0.05;
      function Kt(c, t, s, h) {
        const _ = i.ac(mt, Ct, s), [y, T] = di(c, h);
        let z = 1 - Math.min(1, Math.exp((t - y) / (T - y) * -6));
        return z *= z * z, z = Math.min(1, 1.00747 * z), z * _ * c.alpha;
      }
      function di(c, t) {
        const s = 0.5 / Math.tan(0.5 * t);
        return [c.range[0] + s, c.range[1] + s];
      }
      function li(c, t, s, h, _) {
        const y = i.ab.vec3.transformMat4([], [t, s, h], _.mercatorFogMatrix);
        return Kt(c, i.ab.vec3.length(y), _.pitch, _._fov);
      }
      function ri(c, t, s, h, _, y, T) {
        const z = [[s, h, 0], [_, h, 0], [_, y, 0], [s, y, 0]];
        let R = Number.MAX_VALUE, F = -Number.MAX_VALUE;
        for (const N of z) {
          const G = i.ab.vec3.transformMat4([], N, t), Z = i.ab.vec3.length(G);
          R = Math.min(R, Z), F = Math.max(F, Z);
        }
        return [Kt(c, R, T.pitch, T._fov), Kt(c, F, T.pitch, T._fov)];
      }
      class Ki extends i.E {
        constructor(t, s, h, _) {
          super();
          const y = new i.a5({ range: new i.a6(i.a3.fog.range), color: new i.a6(i.a3.fog.color), "color-use-theme": new i.a6({ type: "string", "property-type": "data-constant", default: "default" }), "high-color": new i.a6(i.a3.fog["high-color"]), "high-color-use-theme": new i.a6({ type: "string", "property-type": "data-constant", default: "default" }), "space-color": new i.a6(i.a3.fog["space-color"]), "space-color-use-theme": new i.a6({ type: "string", "property-type": "data-constant", default: "default" }), "horizon-blend": new i.a6(i.a3.fog["horizon-blend"]), "star-intensity": new i.a6(i.a3.fog["star-intensity"]), "vertical-range": new i.a6(i.a3.fog["vertical-range"]) });
          this._transitionable = new i.a4(y, h, new Map(_)), this.set(t, _), this._transitioning = this._transitionable.untransitioned(), this._transform = s, this.properties = new i.ad(y), this.scope = h;
        }
        get state() {
          const t = this._transform, s = t.projection.name === "globe", h = i.ae(t.zoom), _ = this.properties.get("range"), y = [0.5, 3];
          return { range: s ? [i.af(y[0], _[0], h), i.af(y[1], _[1], h)] : _, horizonBlend: this.properties.get("horizon-blend"), alpha: this.properties.get("color").a };
        }
        get() {
          return this._transitionable.serialize();
        }
        set(t, s, h = {}) {
          if (this._validate(Vo, t, h))
            return;
          const _ = i.l({}, t);
          for (const y of Object.keys(i.a3.fog))
            _[y] === void 0 && (_[y] = i.a3.fog[y].default);
          this._options = _, this._transitionable.setTransitionOrValue(this._options, s);
        }
        getOpacity(t) {
          if (!this._transform.projection.supportsFog)
            return 0;
          const s = this.properties && this.properties.get("color") || 1;
          return (this._transform.projection.name === "globe" ? 1 : i.ac(mt, Ct, t)) * s.a;
        }
        getOpacityAtLatLng(t, s) {
          return this._transform.projection.supportsFog ? function(h, _, y) {
            const T = i.aa.fromLngLat(_), z = y.elevation ? y.elevation.getAtPointOrZero(T) : 0;
            return li(h, T.x, T.y, z, y);
          }(this.state, t, s) : 0;
        }
        getOpacityForTile(t) {
          if (!this._transform.projection.supportsFog)
            return [1, 1];
          const s = this._transform.calculateFogTileMatrix(t.toUnwrapped());
          return ri(this.state, s, 0, 0, i.ag, i.ag, this._transform);
        }
        getOpacityForBounds(t, s, h, _, y) {
          return this._transform.projection.supportsFog ? ri(this.state, t, s, h, _, y, this._transform) : [1, 1];
        }
        getFovAdjustedRange(t) {
          return this._transform.projection.supportsFog ? di(this.state, t) : [0, 1];
        }
        isVisibleOnFrustum(t) {
          if (!this._transform.projection.supportsFog)
            return !1;
          const s = [4, 5, 6, 7];
          for (const h of s) {
            const _ = t.points[h];
            let y;
            if (_[2] >= 0)
              y = _;
            else {
              const T = t.points[h - 4];
              y = i.ah(T, _, T[2] / (T[2] - _[2]));
            }
            if (li(this.state, y[0], y[1], 0, this._transform) >= It)
              return !0;
          }
          return !1;
        }
        updateConfig(t) {
          this._transitionable.setTransitionOrValue(this._options, new Map(t));
        }
        updateTransitions(t) {
          this._transitioning = this._transitionable.transitioned(t, this._transitioning);
        }
        hasTransition() {
          return this._transitioning.hasTransition();
        }
        recalculate(t) {
          this.properties = this._transitioning.possiblyEvaluate(t);
        }
        _validate(t, s, h) {
          return (!h || h.validate !== !1) && Pe(this, t.call(Zi, i.l({ value: s, style: { glyphs: !0, sprite: !0 }, styleSpec: i.a3 })));
        }
      }
      let Ni, Ei, $i, Hi, Xn = class extends i.E {
        constructor(c, t, s, h) {
          super();
          const _ = Ni || (Ni = new i.a5({ density: new i.a6(i.a3.snow.density), intensity: new i.a6(i.a3.snow.intensity), color: new i.a6(i.a3.snow.color), opacity: new i.a6(i.a3.snow.opacity), vignette: new i.a6(i.a3.snow.vignette), "vignette-color": new i.a6(i.a3.snow["vignette-color"]), "center-thinning": new i.a6(i.a3.snow["center-thinning"]), direction: new i.a6(i.a3.snow.direction), "flake-size": new i.a6(i.a3.snow["flake-size"]) }));
          this._transitionable = new i.a4(_, s, new Map(h)), this.set(c, h), this._transitioning = this._transitionable.untransitioned(), this.properties = new i.ad(_), this.scope = s;
        }
        get state() {
          const c = this.properties.get("opacity"), t = this.properties.get("color"), s = this.properties.get("direction"), h = i.ai(s[0]), _ = -Math.max(i.ai(s[1]), 0.01), y = [Math.cos(h) * Math.cos(_), Math.sin(h) * Math.cos(_), Math.sin(_)], T = this.properties.get("vignette"), z = this.properties.get("vignette-color");
          return z.a = T, { density: this.properties.get("density"), intensity: this.properties.get("intensity"), color: new i.aj(t.r, t.g, t.b, t.a * c), direction: y, centerThinning: this.properties.get("center-thinning"), flakeSize: this.properties.get("flake-size"), vignetteColor: z };
        }
        get() {
          return this._transitionable.serialize();
        }
        set(c, t, s = {}) {
          if (this._validate(Ke, c, s))
            return;
          const h = i.l({}, c);
          for (const _ of Object.keys(i.a3.snow))
            h[_] === void 0 && (h[_] = i.a3.snow[_].default);
          this._options = h, this._transitionable.setTransitionOrValue(this._options, t);
        }
        updateConfig(c) {
          this._transitionable.setTransitionOrValue(this._options, new Map(c));
        }
        updateTransitions(c) {
          this._transitioning = this._transitionable.transitioned(c, this._transitioning);
        }
        hasTransition() {
          return this._transitioning.hasTransition();
        }
        recalculate(c) {
          this.properties = this._transitioning.possiblyEvaluate(c);
        }
        _validate(c, t, s) {
          return (!s || s.validate !== !1) && Pe(this, c.call(Zi, i.l({ value: t, style: { glyphs: !0, sprite: !0 }, styleSpec: i.a3 })));
        }
      }, Gs = class extends i.E {
        constructor(c, t, s, h) {
          super();
          const _ = Ei || (Ei = new i.a5({ density: new i.a6(i.a3.rain.density), intensity: new i.a6(i.a3.rain.intensity), color: new i.a6(i.a3.rain.color), opacity: new i.a6(i.a3.rain.opacity), vignette: new i.a6(i.a3.rain.vignette), "vignette-color": new i.a6(i.a3.rain["vignette-color"]), "center-thinning": new i.a6(i.a3.rain["center-thinning"]), direction: new i.a6(i.a3.rain.direction), "droplet-size": new i.a6(i.a3.rain["droplet-size"]), "distortion-strength": new i.a6(i.a3.rain["distortion-strength"]) }));
          this._transitionable = new i.a4(_, s, new Map(h)), this.set(c, h), this._transitioning = this._transitionable.untransitioned(), this.properties = new i.ad(_), this.scope = s;
        }
        get state() {
          const c = this.properties.get("opacity"), t = this.properties.get("color"), s = this.properties.get("direction"), h = i.ai(s[0]), _ = -Math.max(i.ai(s[1]), 0.01), y = [Math.cos(h) * Math.cos(_), Math.sin(h) * Math.cos(_), Math.sin(_)], T = this.properties.get("vignette-color");
          return T.a = this.properties.get("vignette"), { density: this.properties.get("density"), intensity: this.properties.get("intensity"), color: new i.aj(t.r, t.g, t.b, t.a * c), direction: y, centerThinning: this.properties.get("center-thinning"), dropletSize: this.properties.get("droplet-size"), distortionStrength: this.properties.get("distortion-strength"), vignetteColor: T };
        }
        get() {
          return this._transitionable.serialize();
        }
        set(c, t, s = {}) {
          if (this._validate(re, c, s))
            return;
          const h = i.l({}, c);
          for (const _ of Object.keys(i.a3.rain))
            h[_] === void 0 && (h[_] = i.a3.rain[_].default);
          this._options = h, this._transitionable.setTransitionOrValue(this._options, t);
        }
        updateConfig(c) {
          this._transitionable.setTransitionOrValue(this._options, new Map(c));
        }
        updateTransitions(c) {
          this._transitioning = this._transitionable.transitioned(c, this._transitioning);
        }
        hasTransition() {
          return this._transitioning.hasTransition();
        }
        recalculate(c) {
          this.properties = this._transitioning.possiblyEvaluate(c);
        }
        _validate(c, t, s) {
          return (!s || s.validate !== !1) && Pe(this, c.call(Zi, i.l({ value: t, style: { glyphs: !0, sprite: !0 }, styleSpec: i.a3 })));
        }
      };
      class ps extends i.E {
        constructor(t, s, h, _) {
          super(), this.scope = h, this._options = t, this.properties = new i.ad(s), this._transitionable = new i.a4(s, h, new Map(_)), this._transitionable.setTransitionOrValue(t.properties), this._transitioning = this._transitionable.untransitioned();
        }
        updateConfig(t) {
          this._transitionable.setTransitionOrValue(this._options.properties, new Map(t));
        }
        updateTransitions(t) {
          this._transitioning = this._transitionable.transitioned(t, this._transitioning);
        }
        hasTransition() {
          return this._transitioning.hasTransition();
        }
        recalculate(t) {
          this.properties = this._transitioning.possiblyEvaluate(t);
        }
        get() {
          return this._options.properties = this._transitionable.serialize(), this._options;
        }
        set(t, s) {
          this._options = t, this._transitionable.setTransitionOrValue(t.properties, s);
        }
        shadowsEnabled() {
          return !!this.properties && this.properties.get("cast-shadows") === !0;
        }
      }
      class vs {
        constructor(t, s, h, _) {
          this.screenBounds = t, this.cameraPoint = s, this._screenRaycastCache = {}, this._cameraRaycastCache = {}, this.isAboveHorizon = h, this.screenGeometry = this.bufferedScreenGeometry(0), this.screenGeometryMercator = this._bufferedScreenMercator(0, _);
        }
        static createFromScreenPoints(t, s) {
          let h, _;
          if (t instanceof i.P || typeof t[0] == "number") {
            const y = i.P.convert(t);
            h = [y], _ = s.isPointAboveHorizon(y);
          } else {
            const y = i.P.convert(t[0]), T = i.P.convert(t[1]);
            h = [y, T], _ = i.al(y, T).every((z) => s.isPointAboveHorizon(z));
          }
          return new vs(h, s.getCameraPoint(), _, s);
        }
        isPointQuery() {
          return this.screenBounds.length === 1;
        }
        bufferedScreenGeometry(t) {
          return i.al(this.screenBounds[0], this.screenBounds.length === 1 ? this.screenBounds[0] : this.screenBounds[1], t);
        }
        bufferedCameraGeometry(t) {
          const s = this.screenBounds[0], h = this.screenBounds.length === 1 ? this.screenBounds[0].add(new i.P(1, 1)) : this.screenBounds[1], _ = i.al(s, h, 0, !1);
          return this.cameraPoint.y > h.y && (this.cameraPoint.x > s.x && this.cameraPoint.x < h.x ? _.splice(3, 0, this.cameraPoint) : this.cameraPoint.x >= h.x ? _[2] = this.cameraPoint : this.cameraPoint.x <= s.x && (_[3] = this.cameraPoint)), i.am(_, t);
        }
        bufferedCameraGeometryGlobe(t) {
          const s = this.screenBounds[0], h = this.screenBounds.length === 1 ? this.screenBounds[0].add(new i.P(1, 1)) : this.screenBounds[1], _ = i.al(s, h, t), y = this.cameraPoint.clone();
          switch (3 * ((y.y > s.y) + (y.y > h.y)) + ((y.x > s.x) + (y.x > h.x))) {
            case 0:
              _[0] = y, _[4] = y.clone();
              break;
            case 1:
              _.splice(1, 0, y);
              break;
            case 2:
              _[1] = y;
              break;
            case 3:
              _.splice(4, 0, y);
              break;
            case 5:
              _.splice(2, 0, y);
              break;
            case 6:
              _[3] = y;
              break;
            case 7:
              _.splice(3, 0, y);
              break;
            case 8:
              _[2] = y;
          }
          return _;
        }
        containsTile(t, s, h, _ = 0) {
          const y = t.queryPadding / s._pixelsPerMercatorPixel + 1, T = h ? this._bufferedCameraMercator(y, s) : this._bufferedScreenMercator(y, s);
          let z = t.tileID.wrap + (T.unwrapped ? _ : 0);
          const R = T.polygon.map((se) => i.an(t.tileTransform, se, z));
          if (!i.ao(R, 0, 0, i.ag, i.ag))
            return;
          z = t.tileID.wrap + (this.screenGeometryMercator.unwrapped ? _ : 0);
          const F = this.screenGeometryMercator.polygon.map((se) => i.ap(t.tileTransform, se, z)), N = F.map((se) => new i.P(se[0], se[1])), G = s.getFreeCameraOptions().position || new i.aa(0, 0, 0), Z = i.ap(t.tileTransform, G, z), W = F.map((se) => {
            const oe = i.ab.vec3.sub(se, se, Z);
            return i.ab.vec3.normalize(oe, oe), new i.aq(Z, oe);
          }), te = i.ar(t, 1, s.zoom) * s._pixelsPerMercatorPixel;
          return { queryGeometry: this, tilespaceGeometry: N, tilespaceRays: W, bufferedTilespaceGeometry: R, bufferedTilespaceBounds: (ee = i.as(R), ee.min.x = i.aw(ee.min.x, 0, i.ag), ee.min.y = i.aw(ee.min.y, 0, i.ag), ee.max.x = i.aw(ee.max.x, 0, i.ag), ee.max.y = i.aw(ee.max.y, 0, i.ag), ee), tile: t, tileID: t.tileID, pixelToTileUnitsFactor: te };
          var ee;
        }
        _bufferedScreenMercator(t, s) {
          const h = oa(t);
          if (this._screenRaycastCache[h])
            return this._screenRaycastCache[h];
          {
            let _;
            return _ = s.projection.name === "globe" ? this._projectAndResample(this.bufferedScreenGeometry(t), s) : { polygon: this.bufferedScreenGeometry(t).map((y) => s.pointCoordinate3D(y)), unwrapped: !0 }, this._screenRaycastCache[h] = _, _;
          }
        }
        _bufferedCameraMercator(t, s) {
          const h = oa(t);
          if (this._cameraRaycastCache[h])
            return this._cameraRaycastCache[h];
          {
            let _;
            return _ = s.projection.name === "globe" ? this._projectAndResample(this.bufferedCameraGeometryGlobe(t), s) : { polygon: this.bufferedCameraGeometry(t).map((y) => s.pointCoordinate3D(y)), unwrapped: !0 }, this._cameraRaycastCache[h] = _, _;
          }
        }
        _projectAndResample(t, s) {
          const h = function(y, T) {
            const z = i.ab.mat4.multiply([], T.pixelMatrix, T.globeMatrix), R = [0, -i.ax, 0, 1], F = [0, i.ax, 0, 1], N = [0, 0, 0, 1];
            i.ab.vec4.transformMat4(R, R, z), i.ab.vec4.transformMat4(F, F, z), i.ab.vec4.transformMat4(N, N, z);
            const G = new i.P(R[0] / R[3], R[1] / R[3]), Z = new i.P(F[0] / F[3], F[1] / F[3]), W = i.au(y, G) && R[3] < N[3], te = i.au(y, Z) && F[3] < N[3];
            if (!W && !te)
              return null;
            const ee = function(we, ve, Ae) {
              for (let Oe = 1; Oe < we.length; Oe++) {
                const Xe = Er(ve.pointCoordinate3D(we[Oe - 1]).x), He = Er(ve.pointCoordinate3D(we[Oe]).x);
                if (Ae < 0) {
                  if (Xe < He)
                    return { idx: Oe, t: -Xe / (He - 1 - Xe) };
                } else if (He < Xe)
                  return { idx: Oe, t: (1 - Xe) / (He + 1 - Xe) };
              }
              return null;
            }(y, T, W ? -1 : 1);
            if (!ee)
              return null;
            const { idx: se, t: oe } = ee;
            let he = se > 1 ? ra(y.slice(0, se), T) : [], _e = se < y.length ? ra(y.slice(se), T) : [];
            he = he.map((we) => new i.P(Er(we.x), we.y)), _e = _e.map((we) => new i.P(Er(we.x), we.y));
            const pe = [...he];
            pe.length === 0 && pe.push(_e[_e.length - 1]);
            const Me = i.af(pe[pe.length - 1].y, (_e.length === 0 ? he[0] : _e[0]).y, oe);
            let xe;
            return xe = W ? [new i.P(0, Me), new i.P(0, 0), new i.P(1, 0), new i.P(1, Me)] : [new i.P(1, Me), new i.P(1, 1), new i.P(0, 1), new i.P(0, Me)], pe.push(...xe), _e.length === 0 ? pe.push(he[0]) : pe.push(..._e), { polygon: pe.map((we) => new i.aa(we.x, we.y)), unwrapped: !1 };
          }(t, s);
          if (h)
            return h;
          const _ = function(y, T) {
            let z = !1, R = -1 / 0, F = 0;
            for (let G = 0; G < y.length - 1; G++)
              y[G].x > R && (R = y[G].x, F = G);
            for (let G = 0; G < y.length - 1; G++) {
              const Z = (F + G) % (y.length - 1), W = y[Z], te = y[Z + 1];
              Math.abs(W.x - te.x) > 0.5 && (W.x < te.x ? (W.x += 1, Z === 0 && (y[y.length - 1].x += 1)) : (te.x += 1, Z + 1 === y.length - 1 && (y[0].x += 1)), z = !0);
            }
            const N = i.at(T.center.lng);
            return z && N < Math.abs(N - 1) && y.forEach((G) => {
              G.x -= 1;
            }), { polygon: y, unwrapped: z };
          }(ra(t, s).map((y) => new i.P(Er(y.x), y.y)), s);
          return { polygon: _.polygon.map((y) => new i.aa(y.x, y.y)), unwrapped: _.unwrapped };
        }
      }
      function ra(c, t) {
        return i.av(c, (s) => {
          const h = t.pointCoordinate3D(s);
          s.x = h.x, s.y = h.y;
        }, 1 / 256);
      }
      function Er(c) {
        return c < 0 ? 1 + c % 1 : c % 1;
      }
      function oa(c) {
        return 100 * c | 0;
      }
      function cl(c, t, s, h, _) {
        const y = function(z, R) {
          if (z)
            return _(z);
          if (R) {
            if (c.url && R.tiles && c.tiles && delete c.tiles, R.variants) {
              if (!Array.isArray(R.variants))
                return _(new Error("variants must be an array"));
              for (const N of R.variants) {
                if (N == null || typeof N != "object" || N.constructor !== Object)
                  return _(new Error("variant must be an object"));
                if (!Array.isArray(N.capabilities))
                  return _(new Error("capabilities must be an array"));
                if (N.capabilities.length === 1 && N.capabilities[0] === "meshopt") {
                  R = i.l(R, N);
                  break;
                }
              }
            }
            const F = i.ay(i.l({}, R, c), ["tilejson", "tiles", "minzoom", "maxzoom", "attribution", "mapbox_logo", "bounds", "scheme", "tileSize", "encoding", "vector_layers", "raster_layers", "worldview_options", "worldview_default", "worldview"]);
            F.tiles = t.canonicalizeTileset(F, c.url), _(null, F);
          }
        }, T = function(z, R, F) {
          if (!z)
            return null;
          if (!R && !F)
            return z;
          F = F || z.worldview_default;
          const N = Object.values(z.language || {});
          if (N.length === 0)
            return null;
          const G = Object.values(z.worldview || {});
          if (G.length === 0)
            return null;
          const Z = N.every((te) => te === R), W = G.every((te) => te === F);
          return Z && W ? z : R in (z.language_options || {}) || F in (z.worldview_options || {}) ? null : z.language_options && z.worldview_options ? z : null;
        }(c.data, s, h);
        return T ? i.q.frame(() => y(null, T)) : c.url ? i.n(t.transformRequest(t.normalizeSourceURL(c.url, null, s, h), i.R.Source), y) : i.q.frame(() => {
          const { data: z, ...R } = c;
          y(null, R);
        });
      }
      class Uo {
        constructor(t, s, h) {
          this.bounds = i.az.convert(this.validateBounds(t)), this.minzoom = s || 0, this.maxzoom = h || 24;
        }
        validateBounds(t) {
          return Array.isArray(t) && t.length === 4 ? [Math.max(-180, t[0]), Math.max(-90, t[1]), Math.min(180, t[2]), Math.min(90, t[3])] : [-180, -90, 180, 90];
        }
        contains(t) {
          const s = Math.pow(2, t.z), h = Math.floor(i.at(this.bounds.getWest()) * s), _ = Math.floor(i.aA(this.bounds.getNorth()) * s), y = Math.ceil(i.at(this.bounds.getEast()) * s), T = Math.ceil(i.aA(this.bounds.getSouth()) * s);
          return t.x >= h && t.x < y && t.y >= _ && t.y < T;
        }
      }
      class jo extends i.E {
        constructor(t, s, h, _) {
          if (super(), this.id = t, this.dispatcher = h, this.type = "vector", this.minzoom = 0, this.maxzoom = 22, this.scheme = "xyz", this.tileSize = 512, this.reparseOverscaled = !0, this.isTileClipped = !0, this._loaded = !1, i.l(this, i.ay(s, ["url", "scheme", "tileSize", "promoteId"])), this._options = i.l({ type: "vector" }, s), this._collectResourceTiming = !!s.collectResourceTiming, this.tileSize !== 512)
            throw new Error("vector tile sources must have a tileSize of 512");
          this.setEventedParent(_), this._tileWorkers = {}, this._deduped = new i.aB();
        }
        load(t) {
          this._loaded = !1, this.fire(new i.z("dataloading", { dataType: "source" }));
          const s = Array.isArray(this.map._language) ? this.map._language.join() : this.map._language, h = this.map.getWorldview();
          this._tileJSONRequest = cl(this._options, this.map._requestManager, s, h, (_, y) => {
            if (this._tileJSONRequest = null, this._loaded = !0, _)
              s && console.warn(`Ensure that your requested language string is a valid BCP-47 code or list of codes. Found: ${s}`), h && console.warn(`Requested worldview strings must be a valid ISO alpha-2 code. Found: ${h}`), this.fire(new i.y(_));
            else if (y) {
              if (i.l(this, y), this.hasWorldviews = !!y.worldview_options, y.worldview_default && (this.worldviewDefault = y.worldview_default), y.vector_layers) {
                this.vectorLayers = y.vector_layers, this.vectorLayerIds = [], this.localizableLayerIds = /* @__PURE__ */ new Set();
                for (const T of y.vector_layers)
                  this.vectorLayerIds.push(T.id), y.worldview && y.worldview[T.source] && this.localizableLayerIds.add(T.id);
              }
              y.bounds && (this.tileBounds = new Uo(y.bounds, this.minzoom, this.maxzoom)), an(y.tiles, this.map._requestManager._customAccessToken), this.fire(new i.z("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new i.z("data", { dataType: "source", sourceDataType: "content" }));
            }
            t && t(_);
          });
        }
        loaded() {
          return this._loaded;
        }
        hasTile(t) {
          return !this.tileBounds || this.tileBounds.contains(t.canonical);
        }
        onAdd(t) {
          this.map = t, this.load();
        }
        reload() {
          this.cancelTileJSONRequest();
          const t = i.aC(this.id, this.scope);
          this.load(() => this.map.style.clearSource(t));
        }
        setTiles(t) {
          return this._options.tiles = t, this.reload(), this;
        }
        setUrl(t) {
          return this.url = t, this._options.url = t, this.reload(), this;
        }
        onRemove(t) {
          this.cancelTileJSONRequest();
        }
        serialize() {
          return i.l({}, this._options);
        }
        loadTile(t, s) {
          const h = t.tileID.canonical.url(this.tiles, this.scheme), _ = this.map._requestManager.normalizeTileURL(h), y = this.map._requestManager.transformRequest(_, i.R.Tile), T = this.map.style ? this.map.style.getLut(this.scope) : null, z = T ? { image: T.image.clone() } : null, R = { request: y, data: void 0, uid: t.uid, tileID: t.tileID, tileZoom: t.tileZoom, zoom: t.tileID.overscaledZ, maxZoom: this.maxzoom, lut: z, tileSize: this.tileSize * t.tileID.overscaleFactor(), type: this.type, source: this.id, scope: this.scope, pixelRatio: i.q.devicePixelRatio, showCollisionBoxes: this.map.showCollisionBoxes, promoteId: this.promoteId, isSymbolTile: t.isSymbolTile, brightness: this.map.style && this.map.style.getBrightness() || 0, extraShadowCaster: t.isExtraShadowCaster, tessellationStep: this.map._tessellationStep, scaleFactor: this.map.getScaleFactor() };
          if (this.hasWorldviews && i.f(h) && (R.worldview = this.map.getWorldview() || this.worldviewDefault, R.localizableLayerIds = this.localizableLayerIds), R.request.collectResourceTiming = this._collectResourceTiming, t.actor && t.state !== "expired")
            t.state === "loading" ? t.reloadCallback = s : t.request = t.actor.send("reloadTile", R, F.bind(this));
          else if (t.actor = this._tileWorkers[_] = this._tileWorkers[_] || this.dispatcher.getActor(), this.dispatcher.ready)
            t.request = t.actor.send("loadTile", R, F.bind(this), void 0, !0);
          else {
            const N = i.aD.call({ deduped: this._deduped }, R, (G, Z) => {
              G || !Z ? F.call(this, G) : (R.data = { cacheControl: Z.cacheControl, expires: Z.expires, rawData: Z.rawData.slice(0) }, t.actor && t.actor.send("loadTile", R, F.bind(this), void 0, !0));
            }, !0);
            t.request = { cancel: N };
          }
          function F(N, G) {
            return delete t.request, t.aborted ? s(null) : N && N.status !== 404 ? s(N) : (G && G.resourceTiming && (t.resourceTiming = G.resourceTiming), this.map._refreshExpiredTiles && G && t.setExpiryData(G), t.loadVectorData(G, this.map.painter), i.aE(this.dispatcher), s(null), void (t.reloadCallback && (this.loadTile(t, t.reloadCallback), t.reloadCallback = null)));
          }
        }
        abortTile(t) {
          t.request && (t.request.cancel(), delete t.request), t.actor && t.actor.send("abortTile", { uid: t.uid, type: this.type, source: this.id, scope: this.scope });
        }
        unloadTile(t, s) {
          t.actor && t.actor.send("removeTile", { uid: t.uid, type: this.type, source: this.id, scope: this.scope }), t.destroy();
        }
        hasTransition() {
          return !1;
        }
        afterUpdate() {
          this._tileWorkers = {};
        }
        cancelTileJSONRequest() {
          this._tileJSONRequest && (this._tileJSONRequest.cancel(), this._tileJSONRequest = null);
        }
      }
      class tn extends i.E {
        constructor(t, s, h, _) {
          super(), this.id = t, this.dispatcher = h, this.setEventedParent(_), this.type = "raster", this.minzoom = 0, this.maxzoom = 22, this.roundZoom = !0, this.scheme = "xyz", this.tileSize = 512, this._loaded = !1, this._options = i.l({ type: "raster" }, s), i.l(this, i.ay(s, ["url", "scheme", "tileSize"]));
        }
        load(t) {
          this._loaded = !1, this.fire(new i.z("dataloading", { dataType: "source" })), this._tileJSONRequest = cl(this._options, this.map._requestManager, null, null, (s, h) => {
            this._tileJSONRequest = null, this._loaded = !0, s ? this.fire(new i.y(s)) : h && (i.l(this, h), h.raster_layers && (this.rasterLayers = h.raster_layers, this.rasterLayerIds = this.rasterLayers.map((_) => _.id)), h.bounds && (this.tileBounds = new Uo(h.bounds, this.minzoom, this.maxzoom)), an(h.tiles), this.fire(new i.z("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new i.z("data", { dataType: "source", sourceDataType: "content" }))), t && t(s);
          });
        }
        loaded() {
          return this._loaded;
        }
        onAdd(t) {
          this.map = t, this.load();
        }
        reload() {
          this.cancelTileJSONRequest();
          const t = i.aC(this.id, this.scope);
          this.load(() => this.map.style.clearSource(t));
        }
        setTiles(t) {
          return this._options.tiles = t, this.reload(), this;
        }
        setUrl(t) {
          return this.url = t, this._options.url = t, this.reload(), this;
        }
        onRemove(t) {
          this.cancelTileJSONRequest();
        }
        serialize() {
          return i.l({}, this._options);
        }
        hasTile(t) {
          return !this.tileBounds || this.tileBounds.contains(t.canonical);
        }
        loadTile(t, s) {
          const h = i.q.devicePixelRatio >= 2, _ = this.map._requestManager.normalizeTileURL(t.tileID.canonical.url(this.tiles, this.scheme), h, this.tileSize);
          t.request = i.o(this.map._requestManager.transformRequest(_, i.R.Tile), (y, T, z, R) => (delete t.request, t.aborted ? (t.state = "unloaded", s(null)) : y ? (t.state = "errored", s(y)) : T ? (this.map._refreshExpiredTiles && t.setExpiryData({ cacheControl: z, expires: R }), t.setTexture(T, this.map.painter), t.state = "loaded", i.aE(this.dispatcher), void s(null)) : s(null)));
        }
        abortTile(t, s) {
          t.request && (t.request.cancel(), delete t.request), s && s();
        }
        unloadTile(t, s) {
          t.texture && t.texture instanceof i.T ? (t.destroy(!0), t.texture && t.texture instanceof i.T && this.map.painter.saveTileTexture(t.texture)) : t.destroy(), s && s();
        }
        hasTransition() {
          return !1;
        }
        cancelTileJSONRequest() {
          this._tileJSONRequest && (this._tileJSONRequest.cancel(), this._tileJSONRequest = null);
        }
      }
      class xn extends tn {
        constructor(t, s, h, _) {
          super(t, s, h, _), this.type = "raster-array", this.maxzoom = 22, this._options = i.l({ type: "raster-array" }, s);
        }
        triggerRepaint(t) {
          const s = this.map.painter._terrain, h = this.map.style.getSourceCache(this.id);
          s && s.enabled && h && s._clearRenderCacheForTile(h.id, t.tileID), this.map.triggerRepaint();
        }
        loadTile(t, s) {
          const h = this.map._requestManager.normalizeTileURL(t.tileID.canonical.url(this.tiles, this.scheme), !1, this.tileSize), _ = this.map._requestManager.transformRequest(h, i.R.Tile);
          t.requestParams = _, t.actor || (t.actor = this.dispatcher.getActor()), t.request = t.fetchHeader(void 0, (y, T, z, R) => {
            if (delete t.request, t.aborted)
              return t.state = "unloaded", s(null);
            if (y)
              return y.code === 20 ? void 0 : (t.state = "errored", s(y));
            this.map._refreshExpiredTiles && t.setExpiryData({ cacheControl: z, expires: R }), t.state = "empty", s(null);
          });
        }
        unloadTile(t, s) {
          const h = t.texture;
          h && h instanceof i.T ? (t.destroy(!0), this.map.painter.saveTileTexture(h)) : (t.destroy(), t.flushQueues(), t._isHeaderLoaded = !1, delete t._mrt, delete t.textureDescriptor), t.fbo && (t.fbo.destroy(), delete t.fbo), delete t.request, delete t.requestParams, delete t.neighboringTiles, t.state = "unloaded";
        }
        prepareTile(t, s, h) {
          t._isHeaderLoaded && (t.state !== "empty" && (t.state = "reloading"), t.fetchBand(s, h, (_, y) => {
            if (_)
              return t.state = "errored", this.fire(new i.y(_)), void this.triggerRepaint(t);
            y && (t.setTexture(y, this.map.painter), t.state = "loaded", this.triggerRepaint(t));
          }));
        }
        getInitialBand(t) {
          if (!this.rasterLayers)
            return 0;
          const s = this.rasterLayers.find(({ id: y }) => y === t), h = s && s.fields, _ = h && h.bands && h.bands;
          return _ ? _[0] : 0;
        }
        getTextureDescriptor(t, s, h) {
          if (!t)
            return;
          const _ = s.sourceLayer || this.rasterLayerIds && this.rasterLayerIds[0];
          if (!_)
            return;
          let y = null;
          s instanceof i.aH ? y = s.paint.get("raster-array-band") : s instanceof i.aI && (y = s.paint.get("raster-particle-array-band"));
          const T = y || this.getInitialBand(_);
          if (T != null)
            if (t.textureDescriptor) {
              if (!t.updateNeeded(_, T) || h)
                return Object.assign({}, t.textureDescriptor, { texture: t.texture });
            } else
              this.prepareTile(t, _, T);
        }
      }
      const no = { vector: jo, raster: tn, "raster-dem": class extends tn {
        constructor(c, t, s, h) {
          super(c, t, s, h), this.type = "raster-dem", this.maxzoom = 22, this._options = i.l({ type: "raster-dem" }, t), this.encoding = t.encoding || "mapbox";
        }
        loadTile(c, t) {
          const s = this.map._requestManager.normalizeTileURL(c.tileID.canonical.url(this.tiles, this.scheme), !1, this.tileSize);
          function h(_, y) {
            _ && (c.state = "errored", t(_)), y && (c.dem = y, c.dem.onDeserialize(), c.needsHillshadePrepare = !0, c.needsDEMTextureUpload = !0, c.state = "loaded", t(null));
          }
          c.request = i.o(this.map._requestManager.transformRequest(s, i.R.Tile), (function(_, y, T, z) {
            if (delete c.request, c.aborted)
              c.state = "unloaded", t(null);
            else if (_)
              c.state = "errored", t(_);
            else if (y) {
              this.map._refreshExpiredTiles && c.setExpiryData({ cacheControl: T, expires: z });
              const R = ImageBitmap && y instanceof ImageBitmap && i.t(), F = 1 - (y.width - i.aF(y.width)) / 2;
              F < 1 || c.neighboringTiles || (c.neighboringTiles = this._getNeighboringTiles(c.tileID));
              const N = R ? y : i.q.getImageData(y, F), G = { uid: c.uid, coord: c.tileID, source: this.id, scope: this.scope, rawImageData: N, encoding: this.encoding, padding: F };
              c.actor && c.state !== "expired" || (c.actor = this.dispatcher.getActor(), c.actor.send("loadDEMTile", G, h.bind(this), void 0, !0));
            }
          }).bind(this));
        }
        _getNeighboringTiles(c) {
          const t = c.canonical, s = Math.pow(2, t.z), h = (t.x - 1 + s) % s, _ = t.x === 0 ? c.wrap - 1 : c.wrap, y = (t.x + 1 + s) % s, T = t.x + 1 === s ? c.wrap + 1 : c.wrap, z = {};
          return z[new i.aG(c.overscaledZ, _, t.z, h, t.y).key] = { backfilled: !1 }, z[new i.aG(c.overscaledZ, T, t.z, y, t.y).key] = { backfilled: !1 }, t.y > 0 && (z[new i.aG(c.overscaledZ, _, t.z, h, t.y - 1).key] = { backfilled: !1 }, z[new i.aG(c.overscaledZ, c.wrap, t.z, t.x, t.y - 1).key] = { backfilled: !1 }, z[new i.aG(c.overscaledZ, T, t.z, y, t.y - 1).key] = { backfilled: !1 }), t.y + 1 < s && (z[new i.aG(c.overscaledZ, _, t.z, h, t.y + 1).key] = { backfilled: !1 }, z[new i.aG(c.overscaledZ, c.wrap, t.z, t.x, t.y + 1).key] = { backfilled: !1 }, z[new i.aG(c.overscaledZ, T, t.z, y, t.y + 1).key] = { backfilled: !1 }), z;
        }
      }, "raster-array": xn, geojson: class extends i.E {
        constructor(c, t, s, h) {
          super(), this.id = c, this.type = "geojson", this.minzoom = 0, this.maxzoom = 18, this.tileSize = 512, this.isTileClipped = !0, this.reparseOverscaled = !0, this._loaded = !1, this.actor = s.getActor(), this.setEventedParent(h), this._data = t.data, this._options = i.l({}, t), this._collectResourceTiming = t.collectResourceTiming, t.maxzoom !== void 0 && (this.maxzoom = t.maxzoom), t.minzoom !== void 0 && (this.minzoom = t.minzoom), t.type && (this.type = t.type), t.attribution && (this.attribution = t.attribution), this.promoteId = t.promoteId;
          const _ = i.ag / this.tileSize;
          this.workerOptions = i.l({ source: this.id, scope: this.scope, cluster: t.cluster || !1, geojsonVtOptions: { buffer: (t.buffer !== void 0 ? t.buffer : 128) * _, tolerance: (t.tolerance !== void 0 ? t.tolerance : 0.375) * _, extent: i.ag, maxZoom: this.maxzoom, lineMetrics: t.lineMetrics || !1, generateId: t.generateId || !1 }, superclusterOptions: { maxZoom: t.clusterMaxZoom !== void 0 ? t.clusterMaxZoom : this.maxzoom - 1, minPoints: Math.max(2, t.clusterMinPoints || 2), extent: i.ag, radius: (t.clusterRadius !== void 0 ? t.clusterRadius : 50) * _, log: !1, generateId: t.generateId || !1 }, clusterProperties: t.clusterProperties, filter: t.filter, dynamic: t.dynamic }, t.workerOptions);
        }
        onAdd(c) {
          this.map = c, this.setData(this._data);
        }
        setData(c) {
          return this._data = c, this._updateWorkerData(), this;
        }
        updateData(c) {
          if (!this._options.dynamic)
            return this.fire(new i.y(new Error("Can't call updateData on a GeoJSON source with dynamic set to false.")));
          if (typeof c != "string" && (c.type === "Feature" && (c = { type: "FeatureCollection", features: [c] }), c.type !== "FeatureCollection"))
            return this.fire(new i.y(new Error("Data to update should be a feature or a feature collection.")));
          if (this._coalesce && typeof c != "string" && typeof this._data != "string" && this._data.type === "FeatureCollection") {
            const t = /* @__PURE__ */ new Map();
            for (const s of this._data.features)
              t.set(s.id, s);
            for (const s of c.features)
              t.set(s.id, s);
            this._data.features = [...t.values()];
          } else
            this._data = c;
          return this._updateWorkerData(!0), this;
        }
        getClusterExpansionZoom(c, t) {
          return this.actor.send("geojson.getClusterExpansionZoom", { clusterId: c, source: this.id, scope: this.scope }, t), this;
        }
        getClusterChildren(c, t) {
          return this.actor.send("geojson.getClusterChildren", { clusterId: c, source: this.id, scope: this.scope }, t), this;
        }
        getClusterLeaves(c, t, s, h) {
          return this.actor.send("geojson.getClusterLeaves", { source: this.id, scope: this.scope, clusterId: c, limit: t, offset: s }, h), this;
        }
        _updateWorkerData(c = !1) {
          if (this._pendingLoad)
            return void (this._coalesce = !0);
          this.fire(new i.z("dataloading", { dataType: "source" })), this._loaded = !1;
          const t = i.l({ append: c }, this.workerOptions);
          t.scope = this.scope;
          const s = this._data;
          typeof s == "string" ? (t.request = this.map._requestManager.transformRequest(i.q.resolveURL(s), i.R.Source), t.request.collectResourceTiming = this._collectResourceTiming) : t.data = JSON.stringify(s), this._pendingLoad = this.actor.send(`${this.type}.loadData`, t, (h, _) => {
            if (this._loaded = !0, this._pendingLoad = null, h)
              this.fire(new i.y(h));
            else {
              const y = { dataType: "source", sourceDataType: this._metadataFired ? "content" : "metadata" };
              this._collectResourceTiming && _ && _.resourceTiming && _.resourceTiming[this.id] && (y.resourceTiming = _.resourceTiming[this.id]), c && (this._partialReload = !0), this.fire(new i.z("data", y)), this._partialReload = !1, this._metadataFired = !0;
            }
            this._coalesce && (this._updateWorkerData(c), this._coalesce = !1);
          });
        }
        loaded() {
          return this._loaded;
        }
        loadTile(c, t) {
          const s = c.actor ? "reloadTile" : "loadTile";
          c.actor = this.actor;
          const h = this.map.style ? this.map.style.getLut(this.scope) : null, _ = h ? { image: h.image.clone() } : null, y = this._partialReload, T = { type: this.type, uid: c.uid, tileID: c.tileID, tileZoom: c.tileZoom, zoom: c.tileID.overscaledZ, maxZoom: this.maxzoom, tileSize: this.tileSize, source: this.id, lut: _, scope: this.scope, pixelRatio: i.q.devicePixelRatio, showCollisionBoxes: this.map.showCollisionBoxes, promoteId: this.promoteId, brightness: this.map.style && this.map.style.getBrightness() || 0, scaleFactor: this.map.getScaleFactor(), partial: y };
          c.request = this.actor.send(s, T, (z, R) => y && !R ? (c.state = "loaded", t(null)) : (delete c.request, c.destroy(), c.aborted ? t(null) : z ? t(z) : (c.loadVectorData(R, this.map.painter, s === "reloadTile"), t(null))), void 0, s === "loadTile");
        }
        abortTile(c) {
          c.request && (c.request.cancel(), delete c.request), c.aborted = !0;
        }
        unloadTile(c, t) {
          this.actor.send("removeTile", { uid: c.uid, type: this.type, source: this.id, scope: this.scope }), c.destroy();
        }
        onRemove(c) {
          this._pendingLoad && this._pendingLoad.cancel();
        }
        serialize() {
          return i.l({}, this._options, { type: this.type, data: this._data });
        }
        hasTransition() {
          return !1;
        }
      }, video: class extends i.aJ {
        constructor(c, t, s, h) {
          super(c, t, s, h), this.roundZoom = !0, this.type = "video", this.options = t;
        }
        load() {
          this._loaded = !1;
          const c = this.options;
          this.urls = [];
          for (const t of c.urls)
            this.urls.push(this.map._requestManager.transformRequest(t, i.R.Source).url);
          i.aK(this.urls, (t, s) => {
            this._loaded = !0, t ? this.fire(new i.y(t)) : s && (this.video = s, this.video.loop = !0, this.video.setAttribute("playsinline", ""), this.video.addEventListener("playing", () => {
              this.map.triggerRepaint();
            }), this.map && this.video.play(), this._finishLoading());
          });
        }
        pause() {
          this.video && this.video.pause();
        }
        play() {
          this.video && this.video.play();
        }
        seek(c) {
          if (this.video) {
            const t = this.video.seekable;
            c < t.start(0) || c > t.end(0) ? this.fire(new i.y(new i.V(`sources.${this.id}`, null, `Playback for this video can be set only between the ${t.start(0)} and ${t.end(0)}-second mark.`))) : this.video.currentTime = c;
          }
        }
        getVideo() {
          return this.video;
        }
        onAdd(c) {
          this.map || (this.map = c, this.load(), this.video && (this.video.play(), this.setCoordinates(this.coordinates)));
        }
        prepare() {
          if (Object.keys(this.tiles).length === 0 || this.video.readyState < 2)
            return;
          const c = this.map.painter.context, t = c.gl;
          this.texture ? this.video.paused || (this.texture.bind(t.LINEAR, t.CLAMP_TO_EDGE), t.texSubImage2D(t.TEXTURE_2D, 0, 0, 0, t.RGBA, t.UNSIGNED_BYTE, this.video)) : (this.texture = new i.T(c, this.video, t.RGBA8), this.texture.bind(t.LINEAR, t.CLAMP_TO_EDGE), this.width = this.video.videoWidth, this.height = this.video.videoHeight), this._prepareData(c);
        }
        serialize() {
          return { type: "video", urls: this.urls, coordinates: this.coordinates };
        }
        hasTransition() {
          return this.video && !this.video.paused;
        }
      }, image: i.aJ, model: class extends i.E {
        constructor(c, t, s, h) {
          super(), this.id = c, this.type = "model", this.models = [], this._loaded = !1, this._options = t;
        }
        load() {
          const c = [];
          for (const t in this._options.models) {
            const s = this._options.models[t], h = i.aM(this.map._requestManager.transformRequest(s.uri, i.R.Model).url).then((_) => {
              if (!_)
                return;
              const y = i.aN(_), T = new i.aO(t, s.position, s.orientation, y);
              T.computeBoundsAndApplyParent(), this.models.push(T);
            }).catch((_) => {
              this.fire(new i.y(new Error(`Could not load model ${t} from ${s.uri}: ${_.message}`)));
            });
            c.push(h);
          }
          return Promise.allSettled(c).then(() => {
            this._loaded = !0, this.fire(new i.z("data", { dataType: "source", sourceDataType: "metadata" }));
          }).catch((t) => {
            this.fire(new i.y(new Error(`Could not load models: ${t.message}`)));
          });
        }
        onAdd(c) {
          this.map = c, this.load();
        }
        hasTransition() {
          return !1;
        }
        loaded() {
          return this._loaded;
        }
        getModels() {
          return this.models;
        }
        loadTile(c, t) {
        }
        serialize() {
          return { type: "model" };
        }
      }, "batched-model": class extends i.E {
        constructor(c, t, s, h) {
          super(), this.type = "batched-model", this.id = c, this.tileSize = 512, this._options = t, this.tiles = this._options.tiles, this.maxzoom = t.maxzoom || 19, this.minzoom = t.minzoom || 0, this.roundZoom = !0, this.usedInConflation = !0, this.dispatcher = s, this.reparseOverscaled = !1, this.scheme = "xyz", this._loaded = !1, this.setEventedParent(h);
        }
        onAdd(c) {
          this.map = c, this.load();
        }
        load(c) {
          this._loaded = !1, this.fire(new i.z("dataloading", { dataType: "source" }));
          const t = Array.isArray(this.map._language) ? this.map._language.join() : this.map._language, s = this.map.getWorldview();
          this._tileJSONRequest = cl(this._options, this.map._requestManager, t, s, (h, _) => {
            this._tileJSONRequest = null, this._loaded = !0, h ? (t && console.warn(`Ensure that your requested language string is a valid BCP-47 code or list of codes. Found: ${t}`), s && s.length !== 2 && console.warn(`Requested worldview strings must be a valid ISO alpha-2 code. Found: ${s}`), this.fire(new i.y(h))) : _ && (i.l(this, _), _.bounds && (this.tileBounds = new Uo(_.bounds, this.minzoom, this.maxzoom)), an(_.tiles, this.map._requestManager._customAccessToken), this.fire(new i.z("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new i.z("data", { dataType: "source", sourceDataType: "content" }))), c && c(h);
          });
        }
        hasTransition() {
          return !1;
        }
        hasTile(c) {
          return !this.tileBounds || this.tileBounds.contains(c.canonical);
        }
        loaded() {
          return this._loaded;
        }
        loadTile(c, t) {
          const s = this.map._requestManager.normalizeTileURL(c.tileID.canonical.url(this.tiles, this.scheme)), h = { request: this.map._requestManager.transformRequest(s, i.R.Tile), data: void 0, uid: c.uid, tileID: c.tileID, tileZoom: c.tileZoom, zoom: c.tileID.overscaledZ, tileSize: this.tileSize * c.tileID.overscaleFactor(), type: this.type, source: this.id, scope: this.scope, showCollisionBoxes: this.map.showCollisionBoxes, isSymbolTile: c.isSymbolTile, brightness: this.map.style && this.map.style.getBrightness() || 0, lut: null, maxZoom: null, promoteId: null, pixelRatio: null, scaleFactor: null };
          if (c.actor && c.state !== "expired")
            if (c.state === "loading")
              c.reloadCallback = t;
            else {
              if (c.buckets) {
                const y = Object.values(c.buckets);
                for (const T of y)
                  T.dirty = !0;
                return void (c.state = "loaded");
              }
              c.request = c.actor.send("reloadTile", h, _.bind(this));
            }
          else
            c.actor = this.dispatcher.getActor(), c.request = c.actor.send("loadTile", h, _.bind(this), void 0, !0);
          function _(y, T) {
            return c.aborted ? t(null) : y && y.status !== 404 ? t(y) : (this.map._refreshExpiredTiles && T && c.setExpiryData(T), c.loadModelData(T, this.map.painter), c.state = "loaded", void t(null));
          }
        }
        serialize() {
          return i.l({}, this._options);
        }
      }, canvas: class extends i.aJ {
        constructor(c, t, s, h) {
          super(c, t, s, h), t.coordinates ? Array.isArray(t.coordinates) && t.coordinates.length === 4 && !t.coordinates.some((_) => !Array.isArray(_) || _.length !== 2 || _.some((y) => typeof y != "number")) || this.fire(new i.y(new i.V(`sources.${c}`, null, '"coordinates" property must be an array of 4 longitude/latitude array pairs'))) : this.fire(new i.y(new i.V(`sources.${c}`, null, 'missing required property "coordinates"'))), t.animate && typeof t.animate != "boolean" && this.fire(new i.y(new i.V(`sources.${c}`, null, 'optional "animate" property must be a boolean value'))), t.canvas ? typeof t.canvas == "string" || t.canvas instanceof HTMLCanvasElement || this.fire(new i.y(new i.V(`sources.${c}`, null, '"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))) : this.fire(new i.y(new i.V(`sources.${c}`, null, 'missing required property "canvas"'))), this.options = t, this.animate = t.animate === void 0 || t.animate;
        }
        load() {
          this._loaded = !0, this.canvas || (this.canvas = this.options.canvas instanceof HTMLCanvasElement ? this.options.canvas : document.getElementById(this.options.canvas)), this.width = this.canvas.width, this.height = this.canvas.height, this._hasInvalidDimensions() ? this.fire(new i.y(new Error("Canvas dimensions cannot be less than or equal to zero."))) : (this.play = function() {
            this._playing = !0, this.map.triggerRepaint();
          }, this.pause = function() {
            this._playing && (this.prepare(), this._playing = !1);
          }, this._finishLoading());
        }
        getCanvas() {
          return this.canvas;
        }
        onAdd(c) {
          this.map = c, this.load(), this.canvas && this.animate && this.play();
        }
        onRemove(c) {
          this.pause();
        }
        prepare() {
          let c = !1;
          if (this.canvas.width !== this.width && (this.width = this.canvas.width, c = !0), this.canvas.height !== this.height && (this.height = this.canvas.height, c = !0), this._hasInvalidDimensions() || Object.keys(this.tiles).length === 0)
            return;
          const t = this.map.painter.context;
          this.texture ? !c && !this._playing || this.texture instanceof i.aL || this.texture.update(this.canvas, { premultiply: !0 }) : this.texture = new i.T(t, this.canvas, t.gl.RGBA8, { premultiply: !0 }), this._prepareData(t);
        }
        serialize() {
          return { type: "canvas", coordinates: this.coordinates };
        }
        hasTransition() {
          return this._playing;
        }
        _hasInvalidDimensions() {
          for (const c of [this.canvas.width, this.canvas.height])
            if (isNaN(c) || c <= 0)
              return !0;
          return !1;
        }
      }, custom: class extends i.E {
        constructor(c, t, s, h) {
          super(), this.id = c, this.type = "custom", this._dataType = "raster", this._dispatcher = s, this._implementation = t, this.setEventedParent(h), this.scheme = "xyz", this.minzoom = 0, this.maxzoom = 22, this.tileSize = 512, this._loaded = !1, this.roundZoom = !0, this._implementation || this.fire(new i.y(new Error(`Missing implementation for ${this.id} custom source`))), this._implementation.loadTile || this.fire(new i.y(new Error(`Missing loadTile implementation for ${this.id} custom source`))), this._implementation.bounds && (this.tileBounds = new Uo(this._implementation.bounds, this.minzoom, this.maxzoom)), t.update = this._update.bind(this), t.clearTiles = this._clearTiles.bind(this), t.coveringTiles = this._coveringTiles.bind(this), i.l(this, i.ay(t, ["dataType", "scheme", "minzoom", "maxzoom", "tileSize", "attribution", "minTileCacheSize", "maxTileCacheSize"]));
        }
        serialize() {
          return i.ay(this, ["type", "scheme", "minzoom", "maxzoom", "tileSize", "attribution"]);
        }
        load() {
          this._loaded = !0, this.fire(new i.z("data", { dataType: "source", sourceDataType: "metadata" })), this.fire(new i.z("data", { dataType: "source", sourceDataType: "content" }));
        }
        loaded() {
          return this._loaded;
        }
        onAdd(c) {
          this.map = c, this._loaded = !1, this.fire(new i.z("dataloading", { dataType: "source" })), this._implementation.onAdd && this._implementation.onAdd(c), this.load();
        }
        onRemove(c) {
          this._implementation.onRemove && this._implementation.onRemove(c);
        }
        hasTile(c) {
          if (this._implementation.hasTile) {
            const { x: t, y: s, z: h } = c.canonical;
            return this._implementation.hasTile({ x: t, y: s, z: h });
          }
          return !this.tileBounds || this.tileBounds.contains(c.canonical);
        }
        loadTile(c, t) {
          const { x: s, y: h, z: _ } = c.tileID.canonical, y = new AbortController();
          c.request = Promise.resolve(this._implementation.loadTile({ x: s, y: h, z: _ }, { signal: y.signal })).then((function(T) {
            return delete c.request, c.aborted ? (c.state = "unloaded", t(null)) : T === void 0 ? (c.state = "errored", t(null)) : T === null ? (this.loadTileData(c, { width: this.tileSize, height: this.tileSize, data: null }), c.state = "loaded", t(null)) : function(z) {
              return z instanceof ImageData || z instanceof HTMLCanvasElement || z instanceof ImageBitmap || z instanceof HTMLImageElement;
            }(T) ? (this.loadTileData(c, T), c.state = "loaded", void t(null)) : (c.state = "errored", t(new Error(`Can't infer data type for ${this.id}, only raster data supported at the moment`)));
          }).bind(this)).catch((T) => {
            T.code !== 20 && (c.state = "errored", t(T));
          }), c.request.cancel = () => y.abort();
        }
        loadTileData(c, t) {
          c.setTexture(t, this.map.painter);
        }
        unloadTile(c, t) {
          if (c.texture && c.texture instanceof i.T ? (c.destroy(!0), c.texture && c.texture instanceof i.T && this.map.painter.saveTileTexture(c.texture)) : c.destroy(), this._implementation.unloadTile) {
            const { x: s, y: h, z: _ } = c.tileID.canonical;
            this._implementation.unloadTile({ x: s, y: h, z: _ });
          }
          t && t();
        }
        abortTile(c, t) {
          c.request && c.request.cancel && (c.request.cancel(), delete c.request), t && t();
        }
        hasTransition() {
          return !1;
        }
        _coveringTiles() {
          return this.map.transform.coveringTiles({ tileSize: this.tileSize, minzoom: this.minzoom, maxzoom: this.maxzoom, roundZoom: this.roundZoom }).map((c) => ({ x: c.canonical.x, y: c.canonical.y, z: c.canonical.z }));
        }
        _clearTiles() {
          const c = i.aC(this.id, this.scope);
          this.map.style.clearSource(c);
        }
        _update() {
          this.fire(new i.z("data", { dataType: "source", sourceDataType: "content" }));
        }
      } }, Go = function(c, t, s, h) {
        const _ = new no[t.type](c, t, s, h);
        if (_.id !== c)
          throw new Error(`Expected Source id to be ${c} instead of ${_.id}`);
        return i.aP(["load", "abort", "unload", "serialize", "prepare"], _), _;
      };
      function aa(c, t, s, h, _ = !1) {
        const y = t.sourceCache.transform, T = t.sourceCache.tilesIn(c, t.has3DLayers, _);
        T.sort(Hn);
        const z = [];
        for (const R of T) {
          const F = R.tile.queryRenderedFeatures(t, R, s, h, y, _);
          Object.keys(F).length && z.push({ wrappedTileID: R.tile.tileID.wrapped().key, queryResults: F });
        }
        return z.length === 0 ? {} : function(R) {
          const F = {}, N = {};
          for (const G of R) {
            const Z = G.queryResults, W = G.wrappedTileID, te = N[W] = N[W] || {};
            for (const ee in Z) {
              const se = Z[ee], oe = te[ee] = te[ee] || {}, he = F[ee] = F[ee] || [];
              for (const _e of se)
                oe[_e.featureIndex] || (oe[_e.featureIndex] = !0, he.push(_e));
            }
          }
          return F;
        }(z);
      }
      function Da(c, t, s, h, _) {
        const y = {}, T = h.queryRenderedSymbols(c), z = [];
        for (const R of Object.keys(T).map(Number))
          z.push(_[R]);
        z.sort(Hn);
        for (const R of z) {
          const F = R.featureIndex.lookupSymbolFeatures(T[R.bucketInstanceId], R.bucketIndex, R.sourceLayerIndex, t, s);
          for (const N in F) {
            const G = y[N] = y[N] || [], Z = F[N];
            Z.sort((W, te) => {
              const ee = R.featureSortOrder;
              if (ee) {
                const se = ee.indexOf(W.featureIndex);
                return ee.indexOf(te.featureIndex) - se;
              }
              return te.featureIndex - W.featureIndex;
            });
            for (const W of Z)
              G.push(W);
          }
        }
        return y;
      }
      function Vi(c, t) {
        const s = c.getRenderableIds().map((y) => c.getTileByID(y)), h = [], _ = {};
        for (let y = 0; y < s.length; y++) {
          const T = s[y], z = T.tileID.canonical.key;
          _[z] || (_[z] = !0, T.querySourceFeatures(h, t));
        }
        return h;
      }
      function Hn(c, t) {
        const s = c.tileID, h = t.tileID;
        return s.overscaledZ - h.overscaledZ || s.canonical.y - h.canonical.y || s.wrap - h.wrap || s.canonical.x - h.canonical.x;
      }
      function hl(c, t) {
        const s = {};
        if (!t)
          return s;
        for (const h of c) {
          const _ = h.layerIds.map((y) => t.getLayer(y)).filter(Boolean);
          if (_.length !== 0) {
            h.layers = _, h.stateDependentLayerIds && (h.stateDependentLayers = h.stateDependentLayerIds.map((y) => _.filter((T) => T.id === y)[0]));
            for (const y of _)
              s[y.fqid] = h;
          }
        }
        return s;
      }
      const Zs = 32, Qn = 33, Pr = new Uint16Array(8184);
      for (let c = 0; c < 2046; c++) {
        let t = c + 2, s = 0, h = 0, _ = 0, y = 0, T = 0, z = 0;
        for (1 & t ? _ = y = T = Zs : s = h = z = Zs; (t >>= 1) > 1; ) {
          const F = s + _ >> 1, N = h + y >> 1;
          1 & t ? (_ = s, y = h, s = T, h = z) : (s = _, h = y, _ = T, y = z), T = F, z = N;
        }
        const R = 4 * c;
        Pr[R + 0] = s, Pr[R + 1] = h, Pr[R + 2] = _, Pr[R + 3] = y;
      }
      const nr = new Uint16Array(2178), Ks = new Uint8Array(1089), Yn = new Uint16Array(1089);
      function $r(c) {
        return c === 0 ? -0.03125 : c === 32 ? 0.03125 : 0;
      }
      const Ar = (() => ({ type: 2, extent: i.ag, loadGeometry: () => [[new i.P(0, 0), new i.P(i.ag + 1, 0), new i.P(i.ag + 1, i.ag + 1), new i.P(0, i.ag + 1), new i.P(0, 0)]] }))();
      class Cr {
        constructor(t, s, h, _, y) {
          this.tileID = t, this.uid = i.aV(), this.uses = 0, this.tileSize = s, this.tileZoom = h, this.buckets = {}, this.expirationTime = null, this.queryPadding = 0, this.hasSymbolBuckets = !1, this.hasRTLText = !1, this.dependencies = {}, this.isRaster = y, _ && _.style && (this._lastUpdatedBrightness = _.style.getBrightness()), this.expiredRequestCount = 0, this.state = "loading", _ && _.transform && (this.projection = _.transform.projection);
        }
        registerFadeDuration(t) {
          const s = t + this.timeAdded;
          s < i.q.now() || this.fadeEndTime && s < this.fadeEndTime || (this.fadeEndTime = s);
        }
        wasRequested() {
          return this.state === "errored" || this.state === "loaded" || this.state === "reloading";
        }
        get tileTransform() {
          return this._tileTransform || (this._tileTransform = i.aQ(this.tileID.canonical, this.projection)), this._tileTransform;
        }
        loadVectorData(t, s, h) {
          if (this.unloadVectorData(), this.state = "loaded", t) {
            t.featureIndex && (this.latestFeatureIndex = t.featureIndex, t.rawTileData ? (this.latestRawTileData = t.rawTileData, this.latestFeatureIndex.rawTileData = t.rawTileData) : this.latestRawTileData && (this.latestFeatureIndex.rawTileData = this.latestRawTileData)), this.collisionBoxArray = t.collisionBoxArray, this.buckets = hl(t.buckets, s.style), this.hasSymbolBuckets = !1;
            for (const _ in this.buckets) {
              const y = this.buckets[_];
              if (y instanceof i.aX) {
                if (this.hasSymbolBuckets = !0, !h)
                  break;
                y.justReloaded = !0;
              }
            }
            if (this.hasRTLText = !1, this.hasSymbolBuckets)
              for (const _ in this.buckets) {
                const y = this.buckets[_];
                if (y instanceof i.aX && y.hasRTLText) {
                  this.hasRTLText = !0, i.aY();
                  break;
                }
              }
            this.queryPadding = 0;
            for (const _ in this.buckets) {
              const y = this.buckets[_], T = s.style.getOwnLayer(_);
              if (!T)
                continue;
              const z = T.queryRadius(y);
              this.queryPadding = Math.max(this.queryPadding, z);
            }
            t.imageAtlas && (this.imageAtlas = t.imageAtlas), t.glyphAtlasImage && (this.glyphAtlasImage = t.glyphAtlasImage), t.lineAtlas && (this.lineAtlas = t.lineAtlas), this._lastUpdatedBrightness = t.brightness;
          } else
            this.collisionBoxArray = new i.aW();
        }
        unloadVectorData() {
          if (this.hasData()) {
            for (const t in this.buckets)
              this.buckets[t].destroy();
            this.buckets = {}, this.imageAtlas && (this.imageAtlas = null), this.lineAtlas && (this.lineAtlas = null), this.imageAtlasTexture && this.imageAtlasTexture.destroy(), this.glyphAtlasTexture && this.glyphAtlasTexture.destroy(), this.lineAtlasTexture && this.lineAtlasTexture.destroy(), this._tileBoundsBuffer && (this._tileBoundsBuffer.destroy(), this._tileBoundsIndexBuffer.destroy(), this._tileBoundsSegments.destroy(), this._tileBoundsBuffer = null), this._tileDebugBuffer && (this._tileDebugBuffer.destroy(), this._tileDebugSegments.destroy(), this._tileDebugBuffer = null), this._tileDebugIndexBuffer && (this._tileDebugIndexBuffer.destroy(), this._tileDebugIndexBuffer = null), this._globeTileDebugBorderBuffer && (this._globeTileDebugBorderBuffer.destroy(), this._globeTileDebugBorderBuffer = null), this._tileDebugTextBuffer && (this._tileDebugTextBuffer.destroy(), this._tileDebugTextSegments.destroy(), this._tileDebugTextIndexBuffer.destroy(), this._tileDebugTextBuffer = null), this._globeTileDebugTextBuffer && (this._globeTileDebugTextBuffer.destroy(), this._globeTileDebugTextBuffer = null), this.latestFeatureIndex = null, this.state = "unloaded";
          }
        }
        loadModelData(t, s, h) {
          t && (t.resourceTiming && (this.resourceTiming = t.resourceTiming), this.buckets = { ...this.buckets, ...hl(t.buckets, s.style) }, t.featureIndex && (this.latestFeatureIndex = t.featureIndex));
        }
        getBucket(t) {
          return this.buckets[t.fqid];
        }
        upload(t) {
          for (const _ in this.buckets) {
            const y = this.buckets[_];
            y.uploadPending() && y.upload(t);
          }
          const s = t.gl, h = this.imageAtlas;
          if (h && !h.uploaded) {
            const _ = !!Object.keys(h.patternPositions).length;
            this.imageAtlasTexture = new i.T(t, h.image, s.RGBA8, { useMipmap: _ }), this.imageAtlas.uploaded = !0;
          }
          this.glyphAtlasImage && (this.glyphAtlasTexture = new i.T(t, this.glyphAtlasImage, s.R8), this.glyphAtlasImage = null), this.lineAtlas && !this.lineAtlas.uploaded && (this.lineAtlasTexture = new i.T(t, this.lineAtlas.image, s.R8), this.lineAtlas.uploaded = !0);
        }
        prepare(t, s, h) {
          if (this.imageAtlas && this.imageAtlasTexture && this.imageAtlas.patchUpdatedImages(t, this.imageAtlasTexture, h), !s || !this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData)
            return;
          const _ = s.style.getBrightness();
          (this._lastUpdatedBrightness || _) && (this._lastUpdatedBrightness && _ && Math.abs(this._lastUpdatedBrightness - _) < 1e-3 || (this.updateBuckets(s, this._lastUpdatedBrightness !== _), this._lastUpdatedBrightness = _));
        }
        queryRenderedFeatures(t, s, h, _, y, T) {
          if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData && !this.latestFeatureIndex.is3DTile)
            return {};
          const z = function(R, F) {
            const N = i.ab.mat4.fromScaling([], [0.5 * R.width, 0.5 * -R.height, 1]);
            return i.ab.mat4.translate(N, N, [1, -1, 0]), i.ab.mat4.multiply(N, N, R.calculateProjMatrix(F.toUnwrapped())), Float32Array.from(N);
          }(y, this.tileID);
          return this.latestFeatureIndex.query(t, { tilespaceGeometry: s, pixelPosMatrix: z, transform: _, availableImages: h, tileTransform: this.tileTransform });
        }
        querySourceFeatures(t, s) {
          const h = this.latestFeatureIndex;
          if (!h || !h.rawTileData)
            return;
          const _ = h.loadVTLayers(), y = s ? s.sourceLayer : "", T = _._geojsonTileLayer || _[y];
          if (!T)
            return;
          const z = i.aZ(s && s.filter), { z: R, x: F, y: N } = this.tileID.canonical, G = { z: R, x: F, y: N };
          for (let Z = 0; Z < T.length; Z++) {
            const W = T.feature(Z);
            if (z.needGeometry) {
              const se = i.a_(W, !0);
              if (!z.filter(new i.a8(this.tileID.overscaledZ), se, this.tileID.canonical))
                continue;
            } else if (!z.filter(new i.a8(this.tileID.overscaledZ), W))
              continue;
            const te = h.getId(W, y), ee = new i.a$(W, R, F, N, te);
            ee.tile = G, t.push(ee);
          }
        }
        hasData() {
          return this.state === "loaded" || this.state === "reloading" || this.state === "expired";
        }
        patternsLoaded() {
          return !!this.imageAtlas && !!Object.keys(this.imageAtlas.patternPositions).length;
        }
        setExpiryData(t) {
          const s = this.expirationTime;
          if (t.cacheControl) {
            const h = i.b0(t.cacheControl);
            h["max-age"] && (this.expirationTime = Date.now() + 1e3 * h["max-age"]);
          } else
            t.expires && (this.expirationTime = new Date(t.expires).getTime());
          if (this.expirationTime) {
            const h = Date.now();
            let _ = !1;
            if (this.expirationTime > h)
              _ = !1;
            else if (s)
              if (this.expirationTime < s)
                _ = !0;
              else {
                const y = this.expirationTime - s;
                y ? this.expirationTime = h + Math.max(y, 3e4) : _ = !0;
              }
            else
              _ = !0;
            _ ? (this.expiredRequestCount++, this.state = "expired") : this.expiredRequestCount = 0;
          }
        }
        getExpiryTimeout() {
          if (this.expirationTime)
            return this.expiredRequestCount ? 1e3 * (1 << Math.min(this.expiredRequestCount - 1, 31)) : Math.min(this.expirationTime - (/* @__PURE__ */ new Date()).getTime(), Math.pow(2, 31) - 1);
        }
        refreshFeatureState(t) {
          this.latestFeatureIndex && (this.latestFeatureIndex.rawTileData || this.latestFeatureIndex.is3DTile) && t && this.updateBuckets(t);
        }
        updateBuckets(t, s) {
          if (!this.latestFeatureIndex || !t.style)
            return;
          const h = this.latestFeatureIndex.loadVTLayers(), _ = t.style.listImages(), y = t.style.getBrightness();
          for (const T in this.buckets) {
            if (!t.style.hasLayer(T))
              continue;
            const z = this.buckets[T], R = z.layers[0], F = R.sourceLayer || "_geojsonTileLayer", N = h[F], G = t.style.getLayerSourceCache(R);
            let Z = {};
            G && (Z = G._state.getState(F, void 0));
            const W = this.imageAtlas && this.imageAtlas.patternPositions || {}, te = Object.keys(Z).length > 0 && !s;
            te && !z.stateDependentLayers.length && !s || z.update(Z, N, _, W, te ? z.stateDependentLayers : z.layers, s, y), (z instanceof i.b1 || z instanceof i.b2) && t._terrain && t._terrain.enabled && G && z.programConfigurations.needsUpload && t._terrain._clearRenderCacheForTile(G.id, this.tileID);
            const ee = t && t.style && t.style.getOwnLayer(T);
            ee && (this.queryPadding = Math.max(this.queryPadding, ee.queryRadius(z)));
          }
        }
        holdingForFade() {
          return this.symbolFadeHoldUntil !== void 0;
        }
        symbolFadeFinished() {
          return !this.symbolFadeHoldUntil || this.symbolFadeHoldUntil < i.q.now();
        }
        clearFadeHold() {
          this.symbolFadeHoldUntil = void 0;
        }
        setHoldDuration(t) {
          this.symbolFadeHoldUntil = i.q.now() + t;
        }
        setTexture(t, s) {
          const h = s.context, _ = h.gl;
          this.texture = this.texture || s.getTileTexture(t.width), this.texture && this.texture instanceof i.T ? this.texture.update(t) : (this.texture = new i.T(h, t, _.RGBA8, { useMipmap: !0 }), this.texture.bind(_.LINEAR, _.CLAMP_TO_EDGE));
        }
        setDependencies(t, s) {
          const h = {};
          for (const _ of s)
            h[_] = !0;
          this.dependencies[t] = h;
        }
        hasDependency(t, s) {
          for (const h of t) {
            const _ = this.dependencies[h];
            if (_) {
              for (const y of s)
                if (_[y])
                  return !0;
            }
          }
          return !1;
        }
        clearQueryDebugViz() {
        }
        _makeDebugTileBoundsBuffers(t, s) {
          if (!s || s.name === "mercator" || this._tileDebugBuffer)
            return;
          const h = i.b3(Ar, this.tileID.canonical, this.tileTransform)[0], _ = new i.b4(), y = new i.b5();
          for (let T = 0; T < h.length; T++) {
            const { x: z, y: R } = h[T];
            _.emplaceBack(z, R), y.emplaceBack(T);
          }
          y.emplaceBack(0), this._tileDebugIndexBuffer = t.createIndexBuffer(y), this._tileDebugBuffer = t.createVertexBuffer(_, i.b6.members), this._tileDebugSegments = i.b7.simpleSegment(0, 0, _.length, y.length);
        }
        _makeTileBoundsBuffers(t, s) {
          if (this._tileBoundsBuffer || !s || s.name === "mercator")
            return;
          const h = i.b3(Ar, this.tileID.canonical, this.tileTransform)[0];
          let _, y;
          if (this.isRaster) {
            const T = function(z, R) {
              const F = i.aQ(z, R), N = Math.pow(2, z.z);
              for (let se = 0; se < Qn; se++)
                for (let oe = 0; oe < Qn; oe++) {
                  const he = i.aR((z.x + (oe + $r(oe)) / Zs) / N), _e = i.aS((z.y + (se + $r(se)) / Zs) / N), pe = R.project(he, _e), Me = se * Qn + oe;
                  nr[2 * Me + 0] = Math.round((pe.x * F.scale - F.x) * i.ag), nr[2 * Me + 1] = Math.round((pe.y * F.scale - F.y) * i.ag);
                }
              Ks.fill(0), Yn.fill(0);
              for (let se = 2045; se >= 0; se--) {
                const oe = 4 * se, he = Pr[oe + 0], _e = Pr[oe + 1], pe = Pr[oe + 2], Me = Pr[oe + 3], xe = he + pe >> 1, we = _e + Me >> 1, ve = xe + we - _e, Ae = we + he - xe, Oe = _e * Qn + he, Xe = Me * Qn + pe, He = we * Qn + xe, ke = Math.hypot((nr[2 * Oe + 0] + nr[2 * Xe + 0]) / 2 - nr[2 * He + 0], (nr[2 * Oe + 1] + nr[2 * Xe + 1]) / 2 - nr[2 * He + 1]) >= 16;
                Ks[He] = Ks[He] || (ke ? 1 : 0), se < 1022 && (Ks[He] = Ks[He] || Ks[(_e + Ae >> 1) * Qn + (he + ve >> 1)] || Ks[(Me + Ae >> 1) * Qn + (pe + ve >> 1)]);
              }
              const G = new i.aT(), Z = new i.aU();
              let W = 0;
              function te(se, oe) {
                const he = oe * Qn + se;
                return Yn[he] === 0 && (G.emplaceBack(nr[2 * he + 0], nr[2 * he + 1], se * i.ag / Zs, oe * i.ag / Zs), Yn[he] = ++W), Yn[he] - 1;
              }
              function ee(se, oe, he, _e, pe, Me) {
                const xe = se + he >> 1, we = oe + _e >> 1;
                if (Math.abs(se - pe) + Math.abs(oe - Me) > 1 && Ks[we * Qn + xe])
                  ee(pe, Me, se, oe, xe, we), ee(he, _e, pe, Me, xe, we);
                else {
                  const ve = te(se, oe), Ae = te(he, _e), Oe = te(pe, Me);
                  Z.emplaceBack(ve, Ae, Oe);
                }
              }
              return ee(0, 0, Zs, Zs, Zs, 0), ee(Zs, Zs, 0, 0, 0, Zs), { vertices: G, indices: Z };
            }(this.tileID.canonical, s);
            _ = T.vertices, y = T.indices;
          } else {
            _ = new i.aT(), y = new i.aU();
            for (const { x: z, y: R } of h)
              _.emplaceBack(z, R, 0, 0);
            const T = i.b8(_.int16, void 0, 4);
            for (let z = 0; z < T.length; z += 3)
              y.emplaceBack(T[z], T[z + 1], T[z + 2]);
          }
          this._tileBoundsBuffer = t.createVertexBuffer(_, i.b9.members), this._tileBoundsIndexBuffer = t.createIndexBuffer(y), this._tileBoundsSegments = i.b7.simpleSegment(0, 0, _.length, y.length);
        }
        _makeGlobeTileDebugBuffers(t, s) {
          const h = s.projection;
          if (!h || h.name !== "globe" || s.freezeTileCoverage)
            return;
          const _ = this.tileID.canonical, y = i.ba(_, s), T = i.bb(y), z = i.ae(s.zoom);
          let R;
          z > 0 && (R = i.ab.mat4.invert(new Float64Array(16), s.globeMatrix)), this._makeGlobeTileDebugBorderBuffer(t, _, s, T, R, z), this._makeGlobeTileDebugTextBuffer(t, _, s, T, R, z);
        }
        _globePoint(t, s, h, _, y, T, z) {
          let R = i.bc(t, s, h);
          if (T) {
            const F = 1 << h.z, N = i.at(_.center.lng), G = i.aA(_.center.lat), Z = (h.x + 0.5) / F - N;
            let W = 0;
            Z > 0.5 ? W = -1 : Z < -0.5 && (W = 1);
            let te = (t / i.ag + h.x) / F + W, ee = (s / i.ag + h.y) / F;
            te = (te - N) * _._pixelsPerMercatorPixel + N, ee = (ee - G) * _._pixelsPerMercatorPixel + G;
            const se = [te * _.worldSize, ee * _.worldSize, 0];
            i.ab.vec3.transformMat4(se, se, T), R = i.bd(R, se, z);
          }
          return i.ab.vec3.transformMat4(R, R, y);
        }
        _makeGlobeTileDebugBorderBuffer(t, s, h, _, y, T) {
          const z = new i.b4(), R = new i.b5(), F = new i.be(), N = (Z, W, te, ee, se) => {
            const oe = (te - Z) / (se - 1), he = (ee - W) / (se - 1), _e = z.length;
            for (let pe = 0; pe < se; pe++) {
              const Me = Z + pe * oe, xe = W + pe * he;
              z.emplaceBack(Me, xe);
              const we = this._globePoint(Me, xe, s, h, _, y, T);
              F.emplaceBack(we[0], we[1], we[2]), R.emplaceBack(_e + pe);
            }
          }, G = i.ag;
          N(0, 0, G, 0, 16), N(G, 0, G, G, 16), N(G, G, 0, G, 16), N(0, G, 0, 0, 16), this._tileDebugIndexBuffer = t.createIndexBuffer(R), this._tileDebugBuffer = t.createVertexBuffer(z, i.b6.members), this._globeTileDebugBorderBuffer = t.createVertexBuffer(F, i.bf.members), this._tileDebugSegments = i.b7.simpleSegment(0, 0, z.length, R.length);
        }
        _makeGlobeTileDebugTextBuffer(t, s, h, _, y, T) {
          const z = i.ag / 4, R = new i.b4(), F = new i.aU(), N = new i.be(), G = 25;
          F.reserve(32), R.reserve(G), N.reserve(G);
          const Z = (W, te) => G * W + te;
          for (let W = 0; W < G; W++) {
            const te = W * z;
            for (let ee = 0; ee < G; ee++) {
              const se = ee * z;
              R.emplaceBack(se, te);
              const oe = this._globePoint(se, te, s, h, _, y, T);
              N.emplaceBack(oe[0], oe[1], oe[2]);
            }
          }
          for (let W = 0; W < 4; W++)
            for (let te = 0; te < 4; te++) {
              const ee = Z(W, te), se = Z(W, te + 1), oe = Z(W + 1, te), he = Z(W + 1, te + 1);
              F.emplaceBack(ee, se, oe), F.emplaceBack(oe, se, he);
            }
          this._tileDebugTextIndexBuffer = t.createIndexBuffer(F), this._tileDebugTextBuffer = t.createVertexBuffer(R, i.b6.members), this._globeTileDebugTextBuffer = t.createVertexBuffer(N, i.bf.members), this._tileDebugTextSegments = i.b7.simpleSegment(0, 0, G, 32);
        }
        destroy(t = !1) {
          for (const s in this.buckets)
            this.buckets[s].destroy();
          this.buckets = {}, this.imageAtlas && (this.imageAtlas = null), this.lineAtlas && (this.lineAtlas = null), this.imageAtlasTexture && (this.imageAtlasTexture.destroy(), delete this.imageAtlasTexture), this.glyphAtlasTexture && (this.glyphAtlasTexture.destroy(), delete this.glyphAtlasTexture), this.lineAtlasTexture && (this.lineAtlasTexture.destroy(), delete this.lineAtlasTexture), this._tileBoundsBuffer && (this._tileBoundsBuffer.destroy(), this._tileBoundsIndexBuffer.destroy(), this._tileBoundsSegments.destroy(), this._tileBoundsBuffer = null), this._tileDebugBuffer && (this._tileDebugBuffer.destroy(), this._tileDebugSegments.destroy(), this._tileDebugBuffer = null), this._tileDebugIndexBuffer && (this._tileDebugIndexBuffer.destroy(), this._tileDebugIndexBuffer = null), this._globeTileDebugBorderBuffer && (this._globeTileDebugBorderBuffer.destroy(), this._globeTileDebugBorderBuffer = null), this._tileDebugTextBuffer && (this._tileDebugTextBuffer.destroy(), this._tileDebugTextSegments.destroy(), this._tileDebugTextIndexBuffer.destroy(), this._tileDebugTextBuffer = null), this._globeTileDebugTextBuffer && (this._globeTileDebugTextBuffer.destroy(), this._globeTileDebugTextBuffer = null), !t && this.texture && this.texture instanceof i.T && (this.texture.destroy(), delete this.texture), this.hillshadeFBO && (this.hillshadeFBO.destroy(), delete this.hillshadeFBO), this.dem && delete this.dem, this.neighboringTiles && delete this.neighboringTiles, this.demTexture && (this.demTexture.destroy(), delete this.demTexture), this.rasterParticleState && (this.rasterParticleState.destroy(), delete this.rasterParticleState), this.latestFeatureIndex = null, this.state = "unloaded";
        }
      }
      i.bg.setPbf(i.bh);
      class ka extends Cr {
        constructor(t, s, h, _, y) {
          super(t, s, h, _, y), this._workQueue = [], this._fetchQueue = [], this._isHeaderLoaded = !1;
        }
        setTexture(t, s) {
          const h = s.context, _ = h.gl;
          this.texture = this.texture || s.getTileTexture(t.width), this.texture && this.texture instanceof i.T ? this.texture.update(t, { premultiply: !1 }) : this.texture = new i.T(h, t, _.RGBA8, { premultiply: !1 });
        }
        flushQueues() {
          for (; this._workQueue.length; )
            this._workQueue.pop()();
          for (; this._fetchQueue.length; )
            this._fetchQueue.pop()();
        }
        fetchHeader(t = 16384, s) {
          const h = this._mrt = new i.bg(30), _ = Object.assign({}, this.requestParams, { headers: { Range: "bytes=0-" + (t - 1) } });
          return this.entireBuffer = null, this.request = i.bi(_, (y, T, z, R) => {
            if (y)
              s(y);
            else
              try {
                const F = h.getHeaderLength(T);
                if (F > t)
                  return void (this.request = this.fetchHeader(F, s));
                h.parseHeader(T), this._isHeaderLoaded = !0;
                let N = 0;
                for (const G of Object.values(h.layers))
                  N = Math.max(N, G.dataIndex[G.dataIndex.length - 1].last_byte);
                T.byteLength >= N && (this.entireBuffer = T), s(null, this.entireBuffer || T, z, R);
              } catch (F) {
                s(F);
              }
          }), this.request;
        }
        fetchBand(t, s, h) {
          const _ = this._mrt;
          if (!this._isHeaderLoaded || !_)
            return void h(new Error("Tile header is not ready"));
          const y = this.actor;
          if (!y)
            return void h(new Error("Can't fetch tile band without an actor"));
          let T;
          const z = (G, Z) => {
            T.complete(G, Z), G ? h(G) : (this.updateTextureDescriptor(t, s), h(null, this.textureDescriptor && this.textureDescriptor.img));
          }, R = (G, Z) => {
            if (G)
              return h(G);
            const W = y.send("decodeRasterArray", { buffer: Z, task: T }, z, void 0, !0);
            this._workQueue.push(() => {
              W && W.cancel(), T.cancel();
            });
          }, F = _.getLayer(t);
          if (!F)
            return void h(new Error(`Unknown sourceLayer "${t}"`));
          if (F.hasDataForBand(s))
            return this.updateTextureDescriptor(t, s), void h(null, this.textureDescriptor ? this.textureDescriptor.img : null);
          const N = F.getDataRange([s]);
          if (T = _.createDecodingTask(N), !T || T.tasks.length)
            if (this.flushQueues(), this.entireBuffer)
              R(null, this.entireBuffer.slice(N.firstByte, N.lastByte + 1));
            else {
              const G = Object.assign({}, this.requestParams, { headers: { Range: `bytes=${N.firstByte}-${N.lastByte}` } }), Z = i.bi(G, R);
              this._fetchQueue.push(() => {
                Z.cancel(), T.cancel();
              });
            }
          else
            h(null);
        }
        updateNeeded(t, s) {
          return (!this.textureDescriptor || this.textureDescriptor.band !== s || this.textureDescriptor.layer !== t) && this.state !== "errored";
        }
        updateTextureDescriptor(t, s) {
          if (!this._mrt)
            return;
          const h = this._mrt.getLayer(t);
          if (!h || !h.hasBand(s) || !h.hasDataForBand(s))
            return;
          const { bytes: _, tileSize: y, buffer: T, offset: z, scale: R } = h.getBandView(s), F = y + 2 * T, N = { data: _, width: F, height: F }, G = this.texture;
          G && G instanceof i.T && G.update(N, { premultiply: !1 }), this.textureDescriptor = { layer: t, band: s, img: N, buffer: T, offset: z, tileSize: y, format: h.pixelFormat, mix: [R, 256 * R, 65536 * R, 16777216 * R] };
        }
      }
      class la {
        constructor(t, s) {
          this.max = t, this.onRemove = s, this.reset();
        }
        reset() {
          for (const t in this.data)
            for (const s of this.data[t])
              s.timeout && clearTimeout(s.timeout), this.onRemove(s.value);
          return this.data = {}, this.order = [], this;
        }
        add(t, s, h) {
          const _ = t.wrapped().key;
          this.data[_] === void 0 && (this.data[_] = []);
          const y = { value: s, timeout: void 0 };
          if (h !== void 0 && (y.timeout = setTimeout(() => {
            this.remove(t, y);
          }, h)), this.data[_].push(y), this.order.push(_), this.order.length > this.max) {
            const T = this._getAndRemoveByKey(this.order[0]);
            T && this.onRemove(T);
          }
          return this;
        }
        has(t) {
          return t.wrapped().key in this.data;
        }
        getAndRemove(t) {
          return this.has(t) ? this._getAndRemoveByKey(t.wrapped().key) : null;
        }
        _getAndRemoveByKey(t) {
          const s = this.data[t].shift();
          return s.timeout && clearTimeout(s.timeout), this.data[t].length === 0 && delete this.data[t], this.order.splice(this.order.indexOf(t), 1), s.value;
        }
        getByKey(t) {
          const s = this.data[t];
          return s ? s[0].value : null;
        }
        get(t) {
          return this.has(t) ? this.data[t.wrapped().key][0].value : null;
        }
        remove(t, s) {
          if (!this.has(t))
            return this;
          const h = t.wrapped().key, _ = s === void 0 ? 0 : this.data[h].indexOf(s), y = this.data[h][_];
          return this.data[h].splice(_, 1), y.timeout && clearTimeout(y.timeout), this.data[h].length === 0 && delete this.data[h], this.onRemove(y.value), this.order.splice(this.order.indexOf(h), 1), this;
        }
        setMaxSize(t) {
          for (this.max = t; this.order.length > this.max; ) {
            const s = this._getAndRemoveByKey(this.order[0]);
            s && this.onRemove(s);
          }
          return this;
        }
        filter(t) {
          const s = [];
          for (const h in this.data)
            for (const _ of this.data[h])
              t(_.value) || s.push(_);
          for (const h of s)
            this.remove(h.value.tileID, h);
        }
      }
      class Zo {
        constructor() {
          this.state = {}, this.stateChanges = {}, this.deletedStates = {};
        }
        updateState(t, s, h) {
          const _ = String(s);
          if (this.stateChanges[t] = this.stateChanges[t] || {}, this.stateChanges[t][_] = this.stateChanges[t][_] || {}, i.l(this.stateChanges[t][_], h), this.deletedStates[t] === null) {
            this.deletedStates[t] = {};
            for (const y in this.state[t])
              y !== _ && (this.deletedStates[t][y] = null);
          } else if (this.deletedStates[t] && this.deletedStates[t][_] === null) {
            this.deletedStates[t][_] = {};
            for (const y in this.state[t][_])
              h[y] || (this.deletedStates[t][_][y] = null);
          } else
            for (const y in h)
              this.deletedStates[t] && this.deletedStates[t][_] && this.deletedStates[t][_][y] === null && delete this.deletedStates[t][_][y];
        }
        removeFeatureState(t, s, h) {
          if (this.deletedStates[t] === null)
            return;
          const _ = String(s);
          if (this.deletedStates[t] = this.deletedStates[t] || {}, h && s !== void 0)
            this.deletedStates[t][_] !== null && (this.deletedStates[t][_] = this.deletedStates[t][_] || {}, this.deletedStates[t][_][h] = null);
          else if (s !== void 0)
            if (this.stateChanges[t] && this.stateChanges[t][_])
              for (h in this.deletedStates[t][_] = {}, this.stateChanges[t][_])
                this.deletedStates[t][_][h] = null;
            else
              this.deletedStates[t][_] = null;
          else
            this.deletedStates[t] = null;
        }
        getState(t, s) {
          const h = this.state[t] || {}, _ = this.stateChanges[t] || {}, y = this.deletedStates[t];
          if (y === null)
            return {};
          if (s !== void 0) {
            const z = String(s), R = i.l({}, h[z], _[z]);
            if (y) {
              const F = y[s];
              if (F === null)
                return {};
              for (const N in F)
                delete R[N];
            }
            return R;
          }
          const T = i.l({}, h, _);
          if (y)
            for (const z in y)
              delete T[z];
          return T;
        }
        initializeTileState(t, s) {
          t.refreshFeatureState(s);
        }
        coalesceChanges(t, s) {
          const h = {};
          for (const _ in this.stateChanges) {
            this.state[_] = this.state[_] || {};
            const y = {};
            for (const T in this.stateChanges[_])
              this.state[_][T] || (this.state[_][T] = {}), i.l(this.state[_][T], this.stateChanges[_][T]), y[T] = this.state[_][T];
            h[_] = y;
          }
          for (const _ in this.deletedStates) {
            this.state[_] = this.state[_] || {};
            const y = {};
            if (this.deletedStates[_] === null)
              for (const T in this.state[_])
                y[T] = {}, this.state[_][T] = {};
            else
              for (const T in this.deletedStates[_]) {
                if (this.deletedStates[_][T] === null)
                  this.state[_][T] = {};
                else if (this.state[_][T])
                  for (const z of Object.keys(this.deletedStates[_][T]))
                    delete this.state[_][T][z];
                y[T] = this.state[_][T];
              }
            h[_] = h[_] || {}, i.l(h[_], y);
          }
          if (this.stateChanges = {}, this.deletedStates = {}, Object.keys(h).length !== 0)
            for (const _ in t)
              t[_].refreshFeatureState(s);
        }
      }
      class sr extends i.E {
        constructor(t, s, h) {
          super(), this.id = t, this._onlySymbols = h, s.on("data", (_) => {
            _.dataType === "source" && _.sourceDataType === "metadata" && (this._sourceLoaded = !0), this._sourceLoaded && !this._paused && _.dataType === "source" && _.sourceDataType === "content" && (this.reload(), this.transform && this.update(this.transform));
          }), s.on("error", () => {
            this._sourceErrored = !0;
          }), this._source = s, this._tiles = {}, this._cache = new la(0, this._unloadTile.bind(this)), this._timers = {}, this._cacheTimers = {}, this._minTileCacheSize = s.minTileCacheSize, this._maxTileCacheSize = s.maxTileCacheSize, this._loadedParentTiles = {}, this.castsShadows = !1, this.tileCoverLift = 0, this._coveredTiles = {}, this._shadowCasterTiles = {}, this._state = new Zo(), this._isRaster = this._source.type === "raster" || this._source.type === "raster-dem" || this._source.type === "raster-array" || this._source.type === "custom" && this._source._dataType === "raster";
        }
        onAdd(t) {
          this.map = t, this._minTileCacheSize = this._minTileCacheSize === void 0 && t ? t._minTileCacheSize : this._minTileCacheSize, this._maxTileCacheSize = this._maxTileCacheSize === void 0 && t ? t._maxTileCacheSize : this._maxTileCacheSize;
        }
        loaded() {
          if (this._sourceErrored)
            return !0;
          if (!this._sourceLoaded || !this._source.loaded())
            return !1;
          for (const t in this._tiles) {
            const s = this._tiles[t];
            if (s.state !== "loaded" && s.state !== "errored")
              return !1;
          }
          return !0;
        }
        getSource() {
          return this._source;
        }
        pause() {
          this._paused = !0;
        }
        resume() {
          if (!this._paused)
            return;
          const t = this._shouldReloadOnResume;
          this._paused = !1, this._shouldReloadOnResume = !1, t && this.reload(), this.transform && this.update(this.transform);
        }
        _loadTile(t, s) {
          return t.isSymbolTile = this._onlySymbols, t.isExtraShadowCaster = this._shadowCasterTiles[t.tileID.key], this._source.loadTile(t, s);
        }
        _unloadTile(t) {
          if (this._source.unloadTile)
            return this._source.unloadTile(t);
        }
        _abortTile(t) {
          if (this._source.abortTile)
            return this._source.abortTile(t);
        }
        serialize() {
          return this._source.serialize();
        }
        prepare(t) {
          this._source.prepare && this._source.prepare(), this._state.coalesceChanges(this._tiles, this.map ? this.map.painter : null);
          for (const s in this._tiles) {
            const h = this._tiles[s];
            h.upload(t), h.prepare(this.map.style.imageManager, this.map ? this.map.painter : null, this._source.scope);
          }
        }
        getIds() {
          return i.bj(this._tiles).map((t) => t.tileID).sort(ca).map((t) => t.key);
        }
        getRenderableIds(t, s) {
          const h = [];
          for (const _ in this._tiles)
            this._isIdRenderable(+_, t, s) && h.push(this._tiles[_]);
          return t ? h.sort((_, y) => {
            const T = _.tileID, z = y.tileID, R = new i.P(T.canonical.x, T.canonical.y)._rotate(this.transform.angle), F = new i.P(z.canonical.x, z.canonical.y)._rotate(this.transform.angle);
            return T.overscaledZ - z.overscaledZ || F.y - R.y || F.x - R.x;
          }).map((_) => _.tileID.key) : h.map((_) => _.tileID).sort(ca).map((_) => _.key);
        }
        hasRenderableParent(t) {
          const s = this.findLoadedParent(t, 0);
          return !!s && this._isIdRenderable(s.tileID.key);
        }
        _isIdRenderable(t, s, h) {
          return this._tiles[t] && this._tiles[t].hasData() && !this._coveredTiles[t] && (s || !this._tiles[t].holdingForFade()) && (h || !this._shadowCasterTiles[t]);
        }
        reload() {
          if (this._paused)
            this._shouldReloadOnResume = !0;
          else {
            this._cache.reset();
            for (const t in this._tiles)
              this._tiles[t].state !== "errored" && this._reloadTile(+t, "reloading");
          }
        }
        _reloadTile(t, s) {
          const h = this._tiles[t];
          h && (h.state !== "loading" && (h.state = s), this._loadTile(h, this._tileLoaded.bind(this, h, t, s)));
        }
        _tileLoaded(t, s, h, _) {
          if (_)
            if (t.state = "errored", _.status !== 404)
              this._source.fire(new i.y(_, { tile: t }));
            else {
              if (this._source.fire(new i.z("data", { dataType: "source", sourceDataType: "error", sourceId: this._source.id, tile: t })), !(t.tileID.key in this._loadedParentTiles))
                return;
              if (this._source.type === "raster-dem" && this.usedForTerrain && this.map.painter.terrain) {
                const y = this.map.painter.terrain;
                this.update(this.transform, y.getScaledDemTileSize(), !0), y.resetTileLookupCache(this.id);
              } else
                this.update(this.transform);
            }
          else
            t.timeAdded = i.q.now(), h === "expired" && (t.refreshedUponExpiration = !0), this._setTileReloadTimer(s, t), this._source.type === "raster-dem" && t.dem && this._backfillDEM(t), this._state.initializeTileState(t, this.map ? this.map.painter : null), this._source.fire(new i.z("data", { dataType: "source", tile: t, coord: t.tileID, sourceCacheId: this.id }));
        }
        _backfillDEM(t) {
          const s = this.getRenderableIds();
          for (let _ = 0; _ < s.length; _++) {
            const y = s[_];
            if (t.neighboringTiles && t.neighboringTiles[y]) {
              const T = this.getTileByID(y);
              h(t, T), h(T, t);
            }
          }
          function h(_, y) {
            if (!_.dem || _.dem.borderReady)
              return;
            _.needsHillshadePrepare = !0, _.needsDEMTextureUpload = !0;
            let T = y.tileID.canonical.x - _.tileID.canonical.x;
            const z = y.tileID.canonical.y - _.tileID.canonical.y, R = Math.pow(2, _.tileID.canonical.z), F = y.tileID.key;
            T === 0 && z === 0 || Math.abs(z) > 1 || (Math.abs(T) > 1 && (Math.abs(T + R) === 1 ? T += R : Math.abs(T - R) === 1 && (T -= R)), y.dem && _.dem && (_.dem.backfillBorder(y.dem, T, z), _.neighboringTiles && _.neighboringTiles[F] && (_.neighboringTiles[F].backfilled = !0)));
          }
        }
        getTile(t) {
          return this.getTileByID(t.key);
        }
        getTileByID(t) {
          return this._tiles[t];
        }
        _retainLoadedChildren(t, s, h, _) {
          for (const y in this._tiles) {
            let T = this._tiles[y];
            if (_[y] || !T.hasData() || T.tileID.overscaledZ <= s || T.tileID.overscaledZ > h)
              continue;
            let z = T.tileID;
            for (; T && T.tileID.overscaledZ > s + 1; ) {
              const F = T.tileID.scaledTo(T.tileID.overscaledZ - 1);
              T = this._tiles[F.key], T && T.hasData() && (z = F);
            }
            let R = z;
            for (; R.overscaledZ > s; )
              if (R = R.scaledTo(R.overscaledZ - 1), t[R.key]) {
                _[z.key] = z;
                break;
              }
          }
        }
        findLoadedParent(t, s) {
          if (t.key in this._loadedParentTiles) {
            const h = this._loadedParentTiles[t.key];
            return h && h.tileID.overscaledZ >= s ? h : null;
          }
          for (let h = t.overscaledZ - 1; h >= s; h--) {
            const _ = t.scaledTo(h), y = this._getLoadedTile(_);
            if (y)
              return y;
          }
        }
        _getLoadedTile(t) {
          const s = this._tiles[t.key];
          return s && s.hasData() ? s : this._cache.getByKey(this._source.reparseOverscaled ? t.wrapped().key : t.canonical.key);
        }
        updateCacheSize(t, s) {
          s = s || this._source.tileSize;
          const h = Math.ceil(t.width / s) + 1, _ = Math.ceil(t.height / s) + 1, y = Math.floor(h * _ * 5), T = typeof this._minTileCacheSize == "number" ? Math.max(this._minTileCacheSize, y) : y, z = typeof this._maxTileCacheSize == "number" ? Math.min(this._maxTileCacheSize, T) : T;
          this._cache.setMaxSize(z);
        }
        handleWrapJump(t) {
          const s = Math.round((t - (this._prevLng === void 0 ? t : this._prevLng)) / 360);
          if (this._prevLng = t, s) {
            const h = {};
            for (const _ in this._tiles) {
              const y = this._tiles[_];
              y.tileID = y.tileID.unwrapTo(y.tileID.wrap + s), h[y.tileID.key] = y;
            }
            this._tiles = h;
            for (const _ in this._timers)
              clearTimeout(this._timers[_]), delete this._timers[_];
            for (const _ in this._tiles)
              this._setTileReloadTimer(+_, this._tiles[_]);
          }
        }
        update(t, s, h, _) {
          if (this.transform = t, !this._sourceLoaded || this._paused || this.transform.freezeTileCoverage || this.usedForTerrain && !h)
            return;
          this.updateCacheSize(t, s), this.transform.projection.name !== "globe" && this.handleWrapJump(this.transform.center.lng), this._shadowCasterTiles = {}, this._coveredTiles = {};
          const y = this._source.type === "batched-model";
          let T, z = this._source.maxzoom;
          const R = this.map && this.map.painter ? this.map.painter._terrain : null;
          if (R && R.sourceCache === this && R.attenuationRange()) {
            const G = R.attenuationRange()[0], Z = Math.floor(G) - Math.log2(R.getDemUpscale());
            z > Z && (z = Z);
          }
          if (this.used || this.usedForTerrain) {
            if (this._source.tileID)
              T = t.getVisibleUnwrappedCoordinates(this._source.tileID).map((G) => new i.aG(G.canonical.z, G.wrap, G.canonical.z, G.canonical.x, G.canonical.y));
            else if (this.tileCoverLift !== 0) {
              const G = t.clone();
              G.tileCoverLift = this.tileCoverLift, T = G.coveringTiles({ tileSize: s || this._source.tileSize, minzoom: this._source.minzoom, maxzoom: z, roundZoom: this._source.roundZoom && !h, reparseOverscaled: this._source.reparseOverscaled, isTerrainDEM: this.usedForTerrain, calculateQuadrantVisibility: y }), this._source.minzoom <= 1 && t.projection.name === "globe" && (T.push(new i.aG(1, 0, 1, 0, 0)), T.push(new i.aG(1, 0, 1, 1, 0)), T.push(new i.aG(1, 0, 1, 0, 1)), T.push(new i.aG(1, 0, 1, 1, 1)));
            } else if (T = t.coveringTiles({ tileSize: s || this._source.tileSize, minzoom: this._source.minzoom, maxzoom: z, roundZoom: this._source.roundZoom && !h, reparseOverscaled: this._source.reparseOverscaled, isTerrainDEM: this.usedForTerrain, calculateQuadrantVisibility: y }), this._source.hasTile) {
              const G = this._source.hasTile.bind(this._source);
              T = T.filter((Z) => G(Z));
            }
          } else
            T = [];
          if (T.length > 0 && this.castsShadows && _ && this.transform.projection.name !== "globe" && !this.usedForTerrain && !Ra(this._source.type)) {
            const G = t.coveringZoomLevel({ tileSize: s || this._source.tileSize, roundZoom: this._source.roundZoom && !h }), Z = Math.min(G, this._source.maxzoom);
            if (y) {
              const W = t.extendTileCover(T, Z);
              for (const te of W)
                T.push(te);
            } else {
              const W = t.extendTileCover(T, Z, _);
              for (const te of W)
                this._shadowCasterTiles[te.key] = !0, T.push(te);
            }
          }
          const F = this._updateRetainedTiles(T);
          if (Ra(this._source.type) && T.length !== 0) {
            const G = {}, Z = {}, W = Object.keys(F);
            for (const ee of W) {
              const se = F[ee], oe = this._tiles[ee];
              if (!oe || oe.fadeEndTime && oe.fadeEndTime <= i.q.now())
                continue;
              const he = this.findLoadedParent(se, Math.max(se.overscaledZ - sr.maxOverzooming, this._source.minzoom));
              he && (this._addTile(he.tileID), G[he.tileID.key] = he.tileID), Z[ee] = se;
            }
            const te = T[T.length - 1].overscaledZ;
            for (const ee in this._tiles) {
              const se = this._tiles[ee];
              if (F[ee] || !se.hasData())
                continue;
              let oe = se.tileID;
              for (; oe.overscaledZ > te; ) {
                oe = oe.scaledTo(oe.overscaledZ - 1);
                const he = this._tiles[oe.key];
                if (he && he.hasData() && Z[oe.key]) {
                  F[ee] = se.tileID;
                  break;
                }
              }
            }
            for (const ee in G)
              F[ee] || (this._coveredTiles[ee] = !0, F[ee] = G[ee]);
          }
          for (const G in F)
            this._tiles[G].clearFadeHold();
          const N = i.bk(this._tiles, F);
          for (const G of N) {
            const Z = this._tiles[G];
            Z.hasSymbolBuckets && !Z.holdingForFade() ? Z.setHoldDuration(this.map._fadeDuration) : Z.hasSymbolBuckets && !Z.symbolFadeFinished() || this._removeTile(+G);
          }
          this._updateLoadedParentTileCache(), this._onlySymbols && this._source.afterUpdate && this._source.afterUpdate();
        }
        releaseSymbolFadeTiles() {
          for (const t in this._tiles)
            this._tiles[t].holdingForFade() && this._removeTile(+t);
        }
        _updateRetainedTiles(t) {
          const s = {};
          if (t.length === 0)
            return s;
          const h = {}, _ = t.reduce((F, N) => Math.min(F, N.overscaledZ), 1 / 0), y = t[0].overscaledZ, T = Math.max(y - sr.maxOverzooming, this._source.minzoom), z = Math.max(y + sr.maxUnderzooming, this._source.minzoom), R = {};
          for (const F of t) {
            const N = this._addTile(F);
            s[F.key] = F, N.hasData() || _ < this._source.maxzoom && (R[F.key] = F);
          }
          this._retainLoadedChildren(R, _, z, s);
          for (const F of t) {
            let N = this._tiles[F.key];
            if (N.hasData())
              continue;
            if (F.canonical.z >= this._source.maxzoom) {
              const Z = F.children(this._source.maxzoom)[0], W = this.getTile(Z);
              if (W && W.hasData()) {
                s[Z.key] = Z;
                continue;
              }
            } else {
              const Z = F.children(this._source.maxzoom);
              if (s[Z[0].key] && s[Z[1].key] && s[Z[2].key] && s[Z[3].key])
                continue;
            }
            let G = N.wasRequested();
            for (let Z = F.overscaledZ - 1; Z >= T; --Z) {
              const W = F.scaledTo(Z);
              if (h[W.key] || (h[W.key] = !0, N = this.getTile(W), !N && G && (N = this._addTile(W)), N && (s[W.key] = W, G = N.wasRequested(), N.hasData())))
                break;
            }
          }
          return s;
        }
        _updateLoadedParentTileCache() {
          this._loadedParentTiles = {};
          for (const t in this._tiles) {
            const s = [];
            let h, _ = this._tiles[t].tileID;
            for (; _.overscaledZ > 0; ) {
              if (_.key in this._loadedParentTiles) {
                h = this._loadedParentTiles[_.key];
                break;
              }
              s.push(_.key);
              const y = _.scaledTo(_.overscaledZ - 1);
              if (h = this._getLoadedTile(y), h)
                break;
              _ = y;
            }
            for (const y of s)
              this._loadedParentTiles[y] = h;
          }
        }
        _addTile(t) {
          let s = this._tiles[t.key];
          if (s)
            return s.isExtraShadowCaster !== !0 || this._shadowCasterTiles[t.key] || this._reloadTile(t.key, "reloading"), s;
          s = this._cache.getAndRemove(t), s && (this._setTileReloadTimer(t.key, s), s.tileID = t, this._state.initializeTileState(s, this.map ? this.map.painter : null), this._cacheTimers[t.key] && (clearTimeout(this._cacheTimers[t.key]), delete this._cacheTimers[t.key], this._setTileReloadTimer(t.key, s)));
          const h = !!s;
          if (!h) {
            const _ = this.map ? this.map.painter : null, y = this._source.tileSize * t.overscaleFactor();
            s = this._source.type === "raster-array" ? new ka(t, y, this.transform.tileZoom, _, this._isRaster) : new Cr(t, y, this.transform.tileZoom, _, this._isRaster), this._loadTile(s, this._tileLoaded.bind(this, s, t.key, s.state));
          }
          return s ? (s.uses++, this._tiles[t.key] = s, h || this._source.fire(new i.z("dataloading", { tile: s, coord: s.tileID, dataType: "source" })), s) : null;
        }
        _setTileReloadTimer(t, s) {
          t in this._timers && (clearTimeout(this._timers[t]), delete this._timers[t]);
          const h = s.getExpiryTimeout();
          h && (this._timers[t] = setTimeout(() => {
            this._reloadTile(t, "expired"), delete this._timers[t];
          }, h));
        }
        _removeTile(t) {
          const s = this._tiles[t];
          s && (s.uses--, delete this._tiles[t], this._timers[t] && (clearTimeout(this._timers[t]), delete this._timers[t]), s.uses > 0 || (s.hasData() && s.state !== "reloading" || s.state === "empty" ? this._cache.add(s.tileID, s, s.getExpiryTimeout()) : (s.aborted = !0, this._abortTile(s), this._unloadTile(s))));
        }
        clearTiles() {
          this._shouldReloadOnResume = !1, this._paused = !1;
          for (const t in this._tiles)
            this._removeTile(+t);
          this._source._clear && this._source._clear(), this._cache.reset(), this.map && this.usedForTerrain && this.map.painter.terrain && this.map.painter.terrain.resetTileLookupCache(this.id);
        }
        tilesIn(t, s, h) {
          const _ = [], y = this.transform;
          if (!y)
            return _;
          const T = y.projection.name === "globe", z = i.at(y.center.lng);
          for (const R in this._tiles) {
            const F = this._tiles[R];
            if (h && F.clearQueryDebugViz(), F.holdingForFade())
              continue;
            let N;
            if (T) {
              const G = F.tileID.canonical;
              if (G.z === 0) {
                const Z = [Math.abs(i.aw(z, ...ki(G, -1)) - z), Math.abs(i.aw(z, ...ki(G, 1)) - z)];
                N = [0, 2 * Z.indexOf(Math.min(...Z)) - 1];
              } else {
                const Z = [Math.abs(i.aw(z, ...ki(G, -1)) - z), Math.abs(i.aw(z, ...ki(G, 0)) - z), Math.abs(i.aw(z, ...ki(G, 1)) - z)];
                N = [Z.indexOf(Math.min(...Z)) - 1];
              }
            } else
              N = [0];
            for (const G of N) {
              const Z = t.containsTile(F, y, s, G);
              Z && _.push(Z);
            }
          }
          return _;
        }
        getShadowCasterCoordinates() {
          return this._getRenderableCoordinates(!1, !0);
        }
        getVisibleCoordinates(t) {
          return this._getRenderableCoordinates(t);
        }
        _getRenderableCoordinates(t, s) {
          const h = this.getRenderableIds(t, s).map((y) => this._tiles[y].tileID), _ = this.transform.projection.name === "globe";
          for (const y of h)
            y.projMatrix = this.transform.calculateProjMatrix(y.toUnwrapped()), y.expandedProjMatrix = _ ? this.transform.calculateProjMatrix(y.toUnwrapped(), !1, !0) : y.projMatrix;
          return h;
        }
        sortCoordinatesByDistance(t) {
          const s = t.slice(), h = this.transform._camera.position, _ = this.transform._camera.forward(), y = {};
          for (const T of s) {
            const z = 1 / (1 << T.canonical.z);
            y[T.key] = ((T.canonical.x + 0.5) * z + T.wrap - h[0]) * _[0] + ((T.canonical.y + 0.5) * z - h[1]) * _[1] - h[2] * _[2];
          }
          return s.sort((T, z) => y[T.key] - y[z.key]), s;
        }
        hasTransition() {
          if (this._source.hasTransition())
            return !0;
          if (Ra(this._source.type))
            for (const t in this._tiles) {
              const s = this._tiles[t];
              if (s.fadeEndTime !== void 0 && s.fadeEndTime >= i.q.now())
                return !0;
            }
          return !1;
        }
        setFeatureState(t, s, h) {
          this._state.updateState(t = t || "_geojsonTileLayer", s, h);
        }
        removeFeatureState(t, s, h) {
          this._state.removeFeatureState(t = t || "_geojsonTileLayer", s, h);
        }
        getFeatureState(t, s) {
          return this._state.getState(t = t || "_geojsonTileLayer", s);
        }
        setDependencies(t, s, h) {
          const _ = this._tiles[t];
          _ && _.setDependencies(s, h);
        }
        reloadTilesForDependencies(t, s) {
          for (const h in this._tiles)
            this._tiles[h].hasDependency(t, s) && this._reloadTile(+h, "reloading");
          this._cache.filter((h) => !h.hasDependency(t, s));
        }
        _preloadTiles(t, s) {
          if (!this._sourceLoaded) {
            const R = () => {
              this._sourceLoaded && (this._source.off("data", R), this._preloadTiles(t, s));
            };
            return void this._source.on("data", R);
          }
          const h = /* @__PURE__ */ new Map(), _ = Array.isArray(t) ? t : [t], y = this.map.painter.terrain, T = this.usedForTerrain && y ? y.getScaledDemTileSize() : this._source.tileSize;
          for (const R of _) {
            const F = R.coveringTiles({ tileSize: T, minzoom: this._source.minzoom, maxzoom: this._source.maxzoom, roundZoom: this._source.roundZoom && !this.usedForTerrain, reparseOverscaled: this._source.reparseOverscaled, isTerrainDEM: this.usedForTerrain });
            for (const N of F)
              h.set(N.key, N);
            this.usedForTerrain && R.updateElevation(!1);
          }
          const z = Array.from(h.values());
          i.bl(z, (R, F) => {
            const N = new Cr(R, this._source.tileSize * R.overscaleFactor(), this.transform.tileZoom, this.map.painter, this._isRaster);
            this._loadTile(N, (G) => {
              this._source.type === "raster-dem" && N.dem && this._backfillDEM(N), F(G, N);
            });
          }, s);
        }
      }
      function ca(c, t) {
        const s = Math.abs(2 * c.wrap) - +(c.wrap < 0), h = Math.abs(2 * t.wrap) - +(t.wrap < 0);
        return c.overscaledZ - t.overscaledZ || h - s || t.canonical.y - c.canonical.y || t.canonical.x - c.canonical.x;
      }
      function Ra(c) {
        return c === "raster" || c === "image" || c === "video" || c === "custom";
      }
      function ki(c, t) {
        const s = 1 << c.z;
        return [c.x / s + t, (c.x + 1) / s + t];
      }
      sr.maxOverzooming = 10, sr.maxUnderzooming = 3;
      class Gl {
        constructor(t) {
          this.style = t, this.layersGotHidden = !1, this.layers = [];
        }
        processLayersChanged() {
          this.layers = [];
          const t = !1, s = !1;
          for (const h in this.style._mergedLayers) {
            const _ = this.style._mergedLayers[h];
            if (_.type === "fill-extrusion")
              this.layers.push({ layer: _, visible: t, visibilityChanged: s });
            else if (_.type === "model") {
              const y = this.style.getLayerSource(_);
              y && y.type === "batched-model" && this.layers.push({ layer: _, visible: t, visibilityChanged: s });
            }
          }
        }
        onNewFrame(t) {
          this.layersGotHidden = !1;
          for (const s of this.layers) {
            const h = s.layer;
            let _ = !1;
            h.type === "fill-extrusion" ? _ = !h.isHidden(t) && h.paint.get("fill-extrusion-opacity") > 0 : h.type === "model" && (_ = !h.isHidden(t) && h.paint.get("model-opacity").constantOr(1) > 0), this.layersGotHidden = this.layersGotHidden || !_ && s.visible, s.visible = _;
          }
        }
        updateZOffset(t, s) {
          this.currentBuildingBuckets = [];
          for (const _ of this.layers) {
            const y = _.layer, T = this.style.getLayerSourceCache(y);
            let z = 1;
            y.type === "fill-extrusion" && (z = _.visible ? y.paint.get("fill-extrusion-vertical-scale") : 0);
            let R = T ? T.getTile(s) : null;
            if (!R && T && s.canonical.z > T.getSource().minzoom) {
              let F = s.scaledTo(Math.min(T.getSource().maxzoom, s.overscaledZ - 1));
              for (; F.overscaledZ >= T.getSource().minzoom && (R = T.getTile(F), !R && F.overscaledZ !== 0); )
                F = F.scaledTo(F.overscaledZ - 1);
            }
            this.currentBuildingBuckets.push({ bucket: R ? R.getBucket(y) : null, tileID: R ? R.tileID : s, verticalScale: z });
          }
          t.hasAnyZOffset = !1;
          let h = !1;
          for (let _ = 0; _ < t.symbolInstances.length; _++) {
            const y = t.symbolInstances.get(_), T = y.zOffset, z = this._getHeightAtTileOffset(s, y.tileAnchorX, y.tileAnchorY);
            y.zOffset = z !== Number.NEGATIVE_INFINITY ? z : T, h || T === y.zOffset || (h = !0), t.hasAnyZOffset || y.zOffset === 0 || (t.hasAnyZOffset = !0);
          }
          h && (t.zOffsetBuffersNeedUpload = !0, t.zOffsetSortDirty = !0);
        }
        _mapCoordToOverlappingTile(t, s, h, _) {
          let y = s, T = h;
          if (t.canonical.z !== _.canonical.z) {
            const z = _.canonical, R = 1 / (1 << t.canonical.z - z.z);
            y = (s + t.canonical.x * i.ag) * R - z.x * i.ag | 0, T = (h + t.canonical.y * i.ag) * R - z.y * i.ag | 0;
          }
          return { tileX: y, tileY: T };
        }
        _getHeightAtTileOffset(t, s, h) {
          let _, y;
          for (let T = 0; T < this.layers.length; ++T) {
            if (this.layers[T].layer.type !== "fill-extrusion")
              continue;
            const { bucket: z, tileID: R, verticalScale: F } = this.currentBuildingBuckets[T];
            if (!z)
              continue;
            const { tileX: N, tileY: G } = this._mapCoordToOverlappingTile(t, s, h, R), Z = z.getHeightAtTileCoord(N, G);
            Z && Z.height !== void 0 && (Z.hidden ? _ = Z.height : y = Math.max(Z.height * F, y || 0));
          }
          if (y !== void 0)
            return y;
          for (let T = 0; T < this.layers.length; ++T) {
            const z = this.layers[T];
            if (z.layer.type !== "model" || !z.visible)
              continue;
            const { bucket: R, tileID: F } = this.currentBuildingBuckets[T];
            if (!R)
              continue;
            const { tileX: N, tileY: G } = this._mapCoordToOverlappingTile(t, s, h, F), Z = R.getHeightAtTileCoord(N, G);
            if (Z && !Z.hidden)
              return Z.height === void 0 && _ !== void 0 ? Math.min(Z.maxHeight, _) * Z.verticalScale : Z.height ? Z.height * Z.verticalScale : Number.NEGATIVE_INFINITY;
          }
          return this.layersGotHidden ? 0 : Number.NEGATIVE_INFINITY;
        }
      }
      function ei(c, t) {
        const s = {};
        for (const h in c)
          h !== "ref" && (s[h] = c[h]);
        return i.bm.forEach((h) => {
          h in t && (s[h] = t[h]);
        }), s;
      }
      function ul(c) {
        c = c.slice();
        const t = /* @__PURE__ */ Object.create(null);
        for (let s = 0; s < c.length; s++)
          t[c[s].id] = c[s];
        for (let s = 0; s < c.length; s++)
          "ref" in c[s] && (c[s] = ei(c[s], t[c[s].ref]));
        return c;
      }
      const Oi = { setStyle: "setStyle", addLayer: "addLayer", removeLayer: "removeLayer", setPaintProperty: "setPaintProperty", setLayoutProperty: "setLayoutProperty", setSlot: "setSlot", setFilter: "setFilter", addSource: "addSource", removeSource: "removeSource", setGeoJSONSourceData: "setGeoJSONSourceData", setLayerZoomRange: "setLayerZoomRange", setLayerProperty: "setLayerProperty", setCenter: "setCenter", setZoom: "setZoom", setBearing: "setBearing", setPitch: "setPitch", setSprite: "setSprite", setGlyphs: "setGlyphs", setTransition: "setTransition", setLight: "setLight", setTerrain: "setTerrain", setFog: "setFog", setSnow: "setSnow", setRain: "setRain", setCamera: "setCamera", setLights: "setLights", setProjection: "setProjection", addImport: "addImport", removeImport: "removeImport", updateImport: "updateImport" };
      function Bi(c, t, s) {
        s.push({ command: Oi.addSource, args: [c, t[c]] });
      }
      function ns(c, t, s) {
        t.push({ command: Oi.removeSource, args: [c] }), s[c] = !0;
      }
      function Cn(c, t, s, h) {
        ns(c, s, h), Bi(c, t, s);
      }
      function ha(c, t, s) {
        let h;
        for (h in c[s])
          if (c[s].hasOwnProperty(h) && h !== "data" && !i.bn(c[s][h], t[s][h]))
            return !1;
        for (h in t[s])
          if (t[s].hasOwnProperty(h) && h !== "data" && !i.bn(c[s][h], t[s][h]))
            return !1;
        return !0;
      }
      function Ot(c, t, s, h, _, y) {
        let T;
        for (T in t = t || {}, c = c || {})
          c.hasOwnProperty(T) && (i.bn(c[T], t[T]) || s.push({ command: y, args: [h, T, t[T], _] }));
        for (T in t)
          t.hasOwnProperty(T) && !c.hasOwnProperty(T) && (i.bn(c[T], t[T]) || s.push({ command: y, args: [h, T, t[T], _] }));
      }
      function Fi(c) {
        return c.id;
      }
      function Li(c, t) {
        return c[t.id] = t, c;
      }
      class ms {
        constructor(t, s) {
          this.reset(t, s);
        }
        reset(t, s) {
          this.points = t || [], this._distances = [0];
          for (let h = 1; h < this.points.length; h++)
            this._distances[h] = this._distances[h - 1] + this.points[h].dist(this.points[h - 1]);
          this.length = this._distances[this._distances.length - 1], this.padding = Math.min(s || 0, 0.5 * this.length), this.paddedLength = this.length - 2 * this.padding;
        }
        lerp(t) {
          if (this.points.length === 1)
            return this.points[0];
          t = i.aw(t, 0, 1);
          let s = 1, h = this._distances[s];
          const _ = t * this.paddedLength + this.padding;
          for (; h < _ && s < this._distances.length; )
            h = this._distances[++s];
          const y = s - 1, T = this._distances[y], z = h - T, R = z > 0 ? (_ - T) / z : 0;
          return this.points[y].mult(1 - R).add(this.points[s].mult(R));
        }
      }
      class bo {
        constructor(t, s, h) {
          const _ = this.boxCells = [], y = this.circleCells = [];
          this.xCellCount = Math.ceil(t / h), this.yCellCount = Math.ceil(s / h);
          for (let T = 0; T < this.xCellCount * this.yCellCount; T++)
            _.push([]), y.push([]);
          this.circleKeys = [], this.boxKeys = [], this.bboxes = [], this.circles = [], this.width = t, this.height = s, this.xScale = this.xCellCount / t, this.yScale = this.yCellCount / s, this.boxUid = 0, this.circleUid = 0;
        }
        keysLength() {
          return this.boxKeys.length + this.circleKeys.length;
        }
        insert(t, s, h, _, y) {
          this._forEachCell(s, h, _, y, this._insertBoxCell, this.boxUid++), this.boxKeys.push(t), this.bboxes.push(s), this.bboxes.push(h), this.bboxes.push(_), this.bboxes.push(y);
        }
        insertCircle(t, s, h, _) {
          this._forEachCell(s - _, h - _, s + _, h + _, this._insertCircleCell, this.circleUid++), this.circleKeys.push(t), this.circles.push(s), this.circles.push(h), this.circles.push(_);
        }
        _insertBoxCell(t, s, h, _, y, T) {
          this.boxCells[y].push(T);
        }
        _insertCircleCell(t, s, h, _, y, T) {
          this.circleCells[y].push(T);
        }
        _query(t, s, h, _, y, T) {
          if (h < 0 || t > this.width || _ < 0 || s > this.height)
            return !y && [];
          const z = [];
          if (t <= 0 && s <= 0 && this.width <= h && this.height <= _) {
            if (y)
              return !0;
            for (let R = 0; R < this.boxKeys.length; R++)
              z.push({ key: this.boxKeys[R], x1: this.bboxes[4 * R], y1: this.bboxes[4 * R + 1], x2: this.bboxes[4 * R + 2], y2: this.bboxes[4 * R + 3] });
            for (let R = 0; R < this.circleKeys.length; R++) {
              const F = this.circles[3 * R], N = this.circles[3 * R + 1], G = this.circles[3 * R + 2];
              z.push({ key: this.circleKeys[R], x1: F - G, y1: N - G, x2: F + G, y2: N + G });
            }
            return T ? z.filter(T) : z;
          }
          return this._forEachCell(t, s, h, _, this._queryCell, z, { hitTest: y, seenUids: { box: {}, circle: {} } }, T), y ? z.length > 0 : z;
        }
        _queryCircle(t, s, h, _, y) {
          const T = t - h, z = t + h, R = s - h, F = s + h;
          if (z < 0 || T > this.width || F < 0 || R > this.height)
            return !_ && [];
          const N = [];
          return this._forEachCell(T, R, z, F, this._queryCellCircle, N, { hitTest: _, circle: { x: t, y: s, radius: h }, seenUids: { box: {}, circle: {} } }, y), _ ? N.length > 0 : N;
        }
        query(t, s, h, _, y) {
          return this._query(t, s, h, _, !1, y);
        }
        hitTest(t, s, h, _, y) {
          return this._query(t, s, h, _, !0, y);
        }
        hitTestCircle(t, s, h, _) {
          return this._queryCircle(t, s, h, !0, _);
        }
        _queryCell(t, s, h, _, y, T, z, R) {
          const F = z.seenUids, N = this.boxCells[y];
          if (N !== null) {
            const Z = this.bboxes;
            for (const W of N)
              if (!F.box[W]) {
                F.box[W] = !0;
                const te = 4 * W;
                if (t <= Z[te + 2] && s <= Z[te + 3] && h >= Z[te + 0] && _ >= Z[te + 1] && (!R || R(this.boxKeys[W]))) {
                  if (z.hitTest)
                    return T.push(!0), !0;
                  T.push({ key: this.boxKeys[W], x1: Z[te], y1: Z[te + 1], x2: Z[te + 2], y2: Z[te + 3] });
                }
              }
          }
          const G = this.circleCells[y];
          if (G !== null) {
            const Z = this.circles;
            for (const W of G)
              if (!F.circle[W]) {
                F.circle[W] = !0;
                const te = 3 * W;
                if (this._circleAndRectCollide(Z[te], Z[te + 1], Z[te + 2], t, s, h, _) && (!R || R(this.circleKeys[W]))) {
                  if (z.hitTest)
                    return T.push(!0), !0;
                  {
                    const ee = Z[te], se = Z[te + 1], oe = Z[te + 2];
                    T.push({ key: this.circleKeys[W], x1: ee - oe, y1: se - oe, x2: ee + oe, y2: se + oe });
                  }
                }
              }
          }
        }
        _queryCellCircle(t, s, h, _, y, T, z, R) {
          const F = z.circle, N = z.seenUids, G = this.boxCells[y];
          if (G !== null) {
            const W = this.bboxes;
            for (const te of G)
              if (!N.box[te]) {
                N.box[te] = !0;
                const ee = 4 * te;
                if (this._circleAndRectCollide(F.x, F.y, F.radius, W[ee + 0], W[ee + 1], W[ee + 2], W[ee + 3]) && (!R || R(this.boxKeys[te])))
                  return T.push(!0), !0;
              }
          }
          const Z = this.circleCells[y];
          if (Z !== null) {
            const W = this.circles;
            for (const te of Z)
              if (!N.circle[te]) {
                N.circle[te] = !0;
                const ee = 3 * te;
                if (this._circlesCollide(W[ee], W[ee + 1], W[ee + 2], F.x, F.y, F.radius) && (!R || R(this.circleKeys[te])))
                  return T.push(!0), !0;
              }
          }
        }
        _forEachCell(t, s, h, _, y, T, z, R) {
          const F = this._convertToXCellCoord(t), N = this._convertToYCellCoord(s), G = this._convertToXCellCoord(h), Z = this._convertToYCellCoord(_);
          for (let W = F; W <= G; W++)
            for (let te = N; te <= Z; te++)
              if (y.call(this, t, s, h, _, this.xCellCount * te + W, T, z, R))
                return;
        }
        _convertToXCellCoord(t) {
          return Math.max(0, Math.min(this.xCellCount - 1, Math.floor(t * this.xScale)));
        }
        _convertToYCellCoord(t) {
          return Math.max(0, Math.min(this.yCellCount - 1, Math.floor(t * this.yScale)));
        }
        _circlesCollide(t, s, h, _, y, T) {
          const z = _ - t, R = y - s, F = h + T;
          return F * F > z * z + R * R;
        }
        _circleAndRectCollide(t, s, h, _, y, T, z) {
          const R = (T - _) / 2, F = Math.abs(t - (_ + R));
          if (F > R + h)
            return !1;
          const N = (z - y) / 2, G = Math.abs(s - (y + N));
          if (G > N + h)
            return !1;
          if (F <= R || G <= N)
            return !0;
          const Z = F - R, W = G - N;
          return Z * Z + W * W <= h * h;
        }
      }
      const Pi = { unknown: 0, flipRequired: 1, flipNotRequired: 2 }, _s = Math.tan(85 * Math.PI / 180);
      function Js(c, t, s, h, _, y, T) {
        const z = i.ab.mat4.create();
        if (s)
          if (y.name === "globe") {
            const R = i.bo(_, t);
            i.ab.mat4.multiply(z, z, R);
          } else {
            const R = i.ab.mat2.invert([], T);
            z[0] = R[0], z[1] = R[1], z[4] = R[2], z[5] = R[3], h || i.ab.mat4.rotateZ(z, z, _.angle);
          }
        else
          i.ab.mat4.multiply(z, _.labelPlaneMatrix, c);
        return z;
      }
      function Ho(c, t, s, h, _, y, T) {
        const z = Js(c, t, s, h, _, y, T);
        return y.name === "globe" && s || (z[2] = z[6] = z[10] = z[14] = 0), z;
      }
      function Ss(c, t, s, h, _, y, T) {
        if (s) {
          if (y.name === "globe") {
            const z = Js(c, t, s, h, _, y, T);
            return i.ab.mat4.invert(z, z), i.ab.mat4.multiply(z, c, z), z;
          }
          {
            const z = i.ab.mat4.clone(c), R = i.ab.mat4.identity([]);
            return R[0] = T[0], R[1] = T[1], R[4] = T[2], R[5] = T[3], i.ab.mat4.multiply(z, z, R), h || i.ab.mat4.rotateZ(z, z, -_.angle), z;
          }
        }
        return _.glCoordMatrix;
      }
      function un(c, t, s, h) {
        const _ = [c, t, s, 1];
        s ? i.ab.vec4.transformMat4(_, _, h) : wo(_, _, h);
        const y = _[3];
        return _[0] /= y, _[1] /= y, _[2] /= y, _;
      }
      function Bc(c, t) {
        return Math.min(0.5 + c / t * 0.5, 1.5);
      }
      function ua(c, t) {
        const s = c[0] / c[3], h = c[1] / c[3];
        return s >= -t[0] && s <= t[0] && h >= -t[1] && h <= t[1];
      }
      function Zl(c, t, s, h, _, y, T, z, R, F) {
        const N = s.transform, G = h ? c.textSizeData : c.iconSizeData, Z = i.bp(G, s.transform.zoom), W = N.projection.name === "globe", te = [256 / s.width * 2 + 1, 256 / s.height * 2 + 1], ee = h ? c.text.dynamicLayoutVertexArray : c.icon.dynamicLayoutVertexArray;
        ee.clear();
        let se = null;
        W && (se = h ? c.text.globeExtVertexArray : c.icon.globeExtVertexArray);
        const oe = c.lineVertexArray, he = h ? c.text.placedSymbolArray : c.icon.placedSymbolArray, _e = s.transform.width / s.transform.height;
        let pe, Me = !1;
        for (let xe = 0; xe < he.length; xe++) {
          const we = he.get(xe), { numGlyphs: ve, writingMode: Ae } = we;
          if (Ae !== i.bq.vertical || Me || pe === i.bq.horizontal || (Me = !0), pe = Ae, (we.hidden || Ae === i.bq.vertical) && !Me) {
            fa(ve, ee);
            continue;
          }
          Me = !1;
          const Oe = new i.P(we.tileAnchorX, we.tileAnchorY);
          let { x: Xe, y: He, z: ke } = N.projection.projectTilePoint(Oe.x, Oe.y, F.canonical);
          if (R) {
            const [nt, Lt, bt] = R(Oe);
            Xe += nt, He += Lt, ke += bt;
          }
          const Ne = [Xe, He, ke, 1];
          if (i.ab.vec4.transformMat4(Ne, Ne, t), !ua(Ne, te)) {
            fa(ve, ee);
            continue;
          }
          const st = Ne[3], ut = Bc(s.transform.getCameraToCenterDistance(N.projection), st), xt = i.br(G, Z, we), Ge = T ? xt / ut : xt * ut, lt = un(Xe, He, ke, _);
          if (lt[3] <= 0) {
            fa(ve, ee);
            continue;
          }
          let Je = {};
          const _t = T ? null : R, ct = dl(we, Ge, !1, z, t, _, y, c.glyphOffsetArray, oe, ee, se, lt, Oe, Je, _e, _t, N.projection, F, T);
          Me = ct.useVertical, _t && ct.needsFlipping && (Je = {}), (ct.notEnoughRoom || Me || ct.needsFlipping && dl(we, Ge, !0, z, t, _, y, c.glyphOffsetArray, oe, ee, se, lt, Oe, Je, _e, _t, N.projection, F, T).notEnoughRoom) && fa(ve, ee);
        }
        h ? (c.text.dynamicLayoutVertexBuffer.updateData(ee), se && c.text.globeExtVertexBuffer && c.text.globeExtVertexBuffer.updateData(se)) : (c.icon.dynamicLayoutVertexBuffer.updateData(ee), se && c.icon.globeExtVertexBuffer && c.icon.globeExtVertexBuffer.updateData(se));
      }
      function da(c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee) {
        const { lineStartIndex: se, glyphStartIndex: oe, segment: he } = z, _e = oe + z.numGlyphs, pe = se + z.lineLength, Me = t.getoffsetX(oe), xe = t.getoffsetX(_e - 1), we = ss(c * Me, s, h, _, y, T, he, se, pe, R, F, N, G, Z, !0, W, te, ee);
        if (!we)
          return null;
        const ve = ss(c * xe, s, h, _, y, T, he, se, pe, R, F, N, G, Z, !0, W, te, ee);
        return ve ? { first: we, last: ve } : null;
      }
      function nn(c, t, s, h) {
        return c === i.bq.horizontal && Math.abs(h) > Math.abs(s) ? { useVertical: !0 } : c === i.bq.vertical ? h > 0 ? { needsFlipping: !0 } : null : t !== Pi.unknown && function(_, y) {
          return _ === 0 || Math.abs(y / _) > _s;
        }(s, h) ? t === Pi.flipRequired ? { needsFlipping: !0 } : null : s < 0 ? { needsFlipping: !0 } : null;
      }
      function dl(c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe, he) {
        const _e = t / 24, pe = c.lineOffsetX * _e, Me = c.lineOffsetY * _e, { lineStartIndex: xe, glyphStartIndex: we, numGlyphs: ve, segment: Ae, writingMode: Oe, flipState: Xe } = c, He = xe + c.lineLength, ke = (Ne) => {
          if (N) {
            const [Ge, lt, Je] = Ne.up, _t = F.length;
            i.bs(N, _t + 0, Ge, lt, Je), i.bs(N, _t + 1, Ge, lt, Je), i.bs(N, _t + 2, Ge, lt, Je), i.bs(N, _t + 3, Ge, lt, Je);
          }
          const [st, ut, xt] = Ne.point;
          i.bt(F, st, ut, xt, Ne.angle);
        };
        if (ve > 1) {
          const Ne = da(_e, z, pe, Me, s, G, Z, c, R, y, W, ee, !1, se, oe, he);
          if (!Ne)
            return { notEnoughRoom: !0 };
          if (h && !s) {
            let [st, ut, xt] = Ne.first.point, [Ge, lt, Je] = Ne.last.point;
            [st, ut] = un(st, ut, xt, T), [Ge, lt] = un(Ge, lt, Je, T);
            const _t = nn(Oe, Xe, (Ge - st) * te, lt - ut);
            if (c.flipState = _t && _t.needsFlipping ? Pi.flipRequired : Pi.flipNotRequired, _t)
              return _t;
          }
          ke(Ne.first);
          for (let st = we + 1; st < we + ve - 1; st++) {
            const ut = ss(_e * z.getoffsetX(st), pe, Me, s, G, Z, Ae, xe, He, R, y, W, ee, !1, !1, se, oe, he);
            if (!ut)
              return F.length -= 4 * (st - we), { notEnoughRoom: !0 };
            ke(ut);
          }
          ke(Ne.last);
        } else {
          if (h && !s) {
            const st = un(Z.x, Z.y, 0, _), ut = xe + Ae + 1, xt = new i.P(R.getx(ut), R.gety(ut)), Ge = un(xt.x, xt.y, 0, _), lt = Ge[3] > 0 ? Ge : rr(Z, xt, st, 1, _, void 0, se, oe.canonical), Je = nn(Oe, Xe, (lt[0] - st[0]) * te, lt[1] - st[1]);
            if (c.flipState = Je && Je.needsFlipping ? Pi.flipRequired : Pi.flipNotRequired, Je)
              return Je;
          }
          const Ne = ss(_e * z.getoffsetX(we), pe, Me, s, G, Z, Ae, xe, He, R, y, W, ee, !1, !1, se, oe, he);
          if (!Ne)
            return { notEnoughRoom: !0 };
          ke(Ne);
        }
        return {};
      }
      function Dn(c, t, s, h, _) {
        const { x: y, y: T, z } = h.projectTilePoint(c.x, c.y, t);
        if (!_)
          return un(y, T, z, s);
        const [R, F, N] = _(c);
        return un(y + R, T + F, z + N, s);
      }
      function rr(c, t, s, h, _, y, T, z) {
        const R = Dn(c.sub(t)._unit()._add(c), z, _, T, y);
        return i.ab.vec3.sub(R, s, R), i.ab.vec3.normalize(R, R), i.ab.vec3.scaleAndAdd(R, s, R, h);
      }
      function ss(c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe) {
        const he = h ? c - t : c + t;
        let _e = he > 0 ? 1 : -1, pe = 0;
        h && (_e *= -1, pe = Math.PI), _e < 0 && (pe += Math.PI);
        let Me = z + T + (_e > 0 ? 0 : 1) | 0, xe = _, we = _, ve = 0, Ae = 0;
        const Oe = Math.abs(he), Xe = [], He = [];
        let ke = y, Ne = ke;
        const st = () => rr(Ne, ke, we, Oe - ve + 1, N, Z, ee, se.canonical);
        for (; ve + Ae <= Oe; ) {
          if (Me += _e, Me < z || Me >= R)
            return null;
          if (we = xe, Ne = ke, Xe.push(we), W && He.push(Ne), ke = new i.P(F.getx(Me), F.gety(Me)), xe = G[Me], !xe) {
            const Lt = Dn(ke, se.canonical, N, ee, Z);
            xe = Lt[3] > 0 ? G[Me] = Lt : st();
          }
          ve += Ae, Ae = i.ab.vec3.distance(we, xe);
        }
        te && Z && (G[Me] && (xe = st(), Ae = i.ab.vec3.distance(we, xe)), G[Me] = xe);
        const ut = (Oe - ve) / Ae, xt = ke.sub(Ne)._mult(ut)._add(Ne), Ge = i.ab.vec3.sub([], xe, we), lt = i.ab.vec3.scaleAndAdd([], we, Ge, ut);
        let Je = [0, 0, 1], _t = Ge[0], ct = Ge[1];
        if (oe && (Je = ee.upVector(se.canonical, xt.x, xt.y), Je[0] !== 0 || Je[1] !== 0 || Je[2] !== 1)) {
          const Lt = [Je[2], 0, -Je[0]], bt = i.ab.vec3.cross([], Je, Lt);
          i.ab.vec3.normalize(Lt, Lt), i.ab.vec3.normalize(bt, bt), _t = i.ab.vec3.dot(Ge, Lt), ct = i.ab.vec3.dot(Ge, bt);
        }
        if (s) {
          const Lt = i.ab.vec3.cross([], Je, Ge);
          i.ab.vec3.normalize(Lt, Lt), i.ab.vec3.scaleAndAdd(lt, lt, Lt, s * _e);
        }
        const nt = pe + Math.atan2(ct, _t);
        return Xe.push(lt), W && He.push(xt), { point: lt, angle: nt, path: Xe, tilePath: He, up: Je };
      }
      function fa(c, t) {
        const s = t.length, h = s + 4 * c;
        t.resize(h), t.float32.fill(-1 / 0, 4 * s, 4 * h);
      }
      function wo(c, t, s) {
        const h = t[0], _ = t[1];
        return c[0] = s[0] * h + s[4] * _ + s[12], c[1] = s[1] * h + s[5] * _ + s[13], c[3] = s[3] * h + s[7] * _ + s[15], c;
      }
      const vn = 100;
      class Ir {
        constructor(t, s, h = new bo(t.width + 200, t.height + 200, 25), _ = new bo(t.width + 200, t.height + 200, 25)) {
          this.transform = t, this.grid = h, this.ignoredGrid = _, this.pitchfactor = Math.cos(t._pitch) * t.cameraToCenterDistance, this.screenRightBoundary = t.width + vn, this.screenBottomBoundary = t.height + vn, this.gridRightBoundary = t.width + 200, this.gridBottomBoundary = t.height + 200, this.fogState = s;
        }
        placeCollisionBox(t, s, h, _, y, T, z, R) {
          let F = h.projectedAnchorX, N = h.projectedAnchorY, G = h.projectedAnchorZ;
          const Z = h.elevation, W = h.tileID, te = t.getProjection();
          if (Z && W) {
            const [xe, we, ve] = te.upVector(W.canonical, h.tileAnchorX, h.tileAnchorY), Ae = te.upVectorScale(W.canonical, this.transform.center.lat, this.transform.worldSize).metersToTile;
            F += xe * Z * Ae, N += we * Z * Ae, G += ve * Z * Ae;
          }
          const ee = this.projectAndGetPerspectiveRatio(z, F, N, G, h.tileID, te.name === "globe" || !!Z || this.transform.pitch > 0, te), se = T * ee.perspectiveRatio, oe = (h.x1 * s + _.x - h.padding) * se + ee.point.x, he = (h.y1 * s + _.y - h.padding) * se + ee.point.y, _e = (h.x2 * s + _.x + h.padding) * se + ee.point.x, pe = (h.y2 * s + _.y + h.padding) * se + ee.point.y, Me = ee.perspectiveRatio <= 0.55 || ee.occluded;
          return !this.isInsideGrid(oe, he, _e, pe) || !y && this.grid.hitTest(oe, he, _e, pe, R) || Me ? { box: [], offscreen: !1, occluded: ee.occluded } : { box: [oe, he, _e, pe], offscreen: this.isOffscreen(oe, he, _e, pe), occluded: !1 };
        }
        placeCollisionCircles(t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee) {
          const se = [], oe = this.transform.elevation, he = t.getProjection(), _e = oe ? oe.getAtTileOffsetFunc(ee, this.transform.center.lat, this.transform.worldSize, he) : null, pe = new i.P(h.tileAnchorX, h.tileAnchorY);
          let { x: Me, y: xe, z: we } = he.projectTilePoint(pe.x, pe.y, ee.canonical);
          if (_e) {
            const [xt, Ge, lt] = _e(pe);
            Me += xt, xe += Ge, we += lt;
          }
          const ve = he.name === "globe", Ae = this.projectAndGetPerspectiveRatio(z, Me, xe, we, ee, ve || !!oe || this.transform.pitch > 0, he), { perspectiveRatio: Oe } = Ae, Xe = (G ? T / Oe : T * Oe) / i.bw, He = un(Me, xe, we, R), ke = Ae.signedDistanceFromCamera > 0 ? da(Xe, y, h.lineOffsetX * Xe, h.lineOffsetY * Xe, !1, He, pe, h, _, R, {}, oe && !G ? _e : null, G && !!oe, he, ee, G) : null;
          let Ne = !1, st = !1, ut = !0;
          if (ke && !Ae.occluded) {
            const xt = 0.5 * W * Oe + te, Ge = new i.P(-100, -100), lt = new i.P(this.screenRightBoundary, this.screenBottomBoundary), Je = new ms(), { first: _t, last: ct } = ke, nt = _t.path.length;
            let Lt = [];
            for (let Bt = nt - 1; Bt >= 1; Bt--)
              Lt.push(_t.path[Bt]);
            for (let Bt = 1; Bt < ct.path.length; Bt++)
              Lt.push(ct.path[Bt]);
            const bt = 2.5 * xt;
            F && (Lt = Lt.map(([Bt, oi, $t], Xt) => (_e && !ve && ($t = _e(Xt < nt - 1 ? _t.tilePath[nt - 1 - Xt] : ct.tilePath[Xt - nt + 2])[2]), un(Bt, oi, $t, F))), Lt.some((Bt) => Bt[3] <= 0) && (Lt = []));
            let zt = [];
            if (Lt.length > 0) {
              let Bt = 1 / 0, oi = -1 / 0, $t = 1 / 0, Xt = -1 / 0;
              for (const ai of Lt)
                Bt = Math.min(Bt, ai[0]), $t = Math.min($t, ai[1]), oi = Math.max(oi, ai[0]), Xt = Math.max(Xt, ai[1]);
              oi >= Ge.x && Bt <= lt.x && Xt >= Ge.y && $t <= lt.y && (zt = [Lt.map((ai) => new i.P(ai[0], ai[1]))], (Bt < Ge.x || oi > lt.x || $t < Ge.y || Xt > lt.y) && (zt = i.bu(zt, Ge.x, Ge.y, lt.x, lt.y)));
            }
            for (const Bt of zt) {
              Je.reset(Bt, 0.25 * xt);
              let oi = 0;
              oi = Je.length <= 0.5 * xt ? 1 : Math.ceil(Je.paddedLength / bt) + 1;
              for (let $t = 0; $t < oi; $t++) {
                const Xt = $t / Math.max(oi - 1, 1), ai = Je.lerp(Xt), zi = ai.x + vn, wi = ai.y + vn;
                se.push(zi, wi, xt, 0);
                const mn = zi - xt, Mn = wi - xt, Xi = zi + xt, sn = wi + xt;
                if (ut = ut && this.isOffscreen(mn, Mn, Xi, sn), st = st || this.isInsideGrid(mn, Mn, Xi, sn), !s && this.grid.hitTestCircle(zi, wi, xt, Z) && (Ne = !0, !N))
                  return { circles: [], offscreen: !1, collisionDetected: Ne, occluded: !1 };
              }
            }
          }
          return { circles: !N && Ne || !st ? [] : se, offscreen: ut, collisionDetected: Ne, occluded: Ae.occluded };
        }
        queryRenderedSymbols(t) {
          if (t.length === 0 || this.grid.keysLength() === 0 && this.ignoredGrid.keysLength() === 0)
            return {};
          const s = [];
          let h = 1 / 0, _ = 1 / 0, y = -1 / 0, T = -1 / 0;
          for (const N of t) {
            const G = new i.P(N.x + vn, N.y + vn);
            h = Math.min(h, G.x), _ = Math.min(_, G.y), y = Math.max(y, G.x), T = Math.max(T, G.y), s.push(G);
          }
          const z = this.grid.query(h, _, y, T).concat(this.ignoredGrid.query(h, _, y, T)), R = {}, F = {};
          for (const N of z) {
            const G = N.key;
            if (R[G.bucketInstanceId] === void 0 && (R[G.bucketInstanceId] = {}), R[G.bucketInstanceId][G.featureIndex])
              continue;
            const Z = [new i.P(N.x1, N.y1), new i.P(N.x2, N.y1), new i.P(N.x2, N.y2), new i.P(N.x1, N.y2)];
            i.bv(s, Z) && (R[G.bucketInstanceId][G.featureIndex] = !0, F[G.bucketInstanceId] === void 0 && (F[G.bucketInstanceId] = []), F[G.bucketInstanceId].push(G.featureIndex));
          }
          return F;
        }
        insertCollisionBox(t, s, h, _, y) {
          (s ? this.ignoredGrid : this.grid).insert({ bucketInstanceId: h, featureIndex: _, collisionGroupID: y }, t[0], t[1], t[2], t[3]);
        }
        insertCollisionCircles(t, s, h, _, y) {
          const T = s ? this.ignoredGrid : this.grid, z = { bucketInstanceId: h, featureIndex: _, collisionGroupID: y };
          for (let R = 0; R < t.length; R += 4)
            T.insertCircle(z, t[R], t[R + 1], t[R + 2]);
        }
        projectAndGetPerspectiveRatio(t, s, h, _, y, T, z) {
          const R = [s, h, _, 1];
          let F = !1;
          _ || this.transform.pitch > 0 ? (i.ab.vec4.transformMat4(R, R, t), this.fogState && y && z.name !== "globe" && (F = function(Z, W, te, ee, se, oe) {
            const he = oe.calculateFogTileMatrix(se), _e = [W, te, ee];
            return i.ab.vec3.transformMat4(_e, _e, he), Kt(Z, i.ab.vec3.length(_e), oe.pitch, oe._fov);
          }(this.fogState, s, h, _, y.toUnwrapped(), this.transform) > 0.9)) : wo(R, R, t);
          const N = R[3];
          return { point: new i.P((R[0] / N + 1) / 2 * this.transform.width + vn, (-R[1] / N + 1) / 2 * this.transform.height + vn), perspectiveRatio: Math.min(0.5 + this.transform.getCameraToCenterDistance(z) / N * 0.5, 1.5), signedDistanceFromCamera: N, occluded: T && R[2] > N || F };
        }
        isOffscreen(t, s, h, _) {
          return h < vn || t >= this.screenRightBoundary || _ < vn || s > this.screenBottomBoundary;
        }
        isInsideGrid(t, s, h, _) {
          return h >= 0 && t < this.gridRightBoundary && _ >= 0 && s < this.gridBottomBoundary;
        }
        getViewportMatrix() {
          const t = i.ab.mat4.identity([]);
          return i.ab.mat4.translate(t, t, [-100, -100, 0]), t;
        }
      }
      function Lr(c, t, s) {
        const h = t.createTileMatrix(c, c.worldSize, s.toUnwrapped());
        return i.ab.mat4.multiply(new Float32Array(16), c.projMatrix, h);
      }
      function qn(c, t, s) {
        if (t.projection.name === s.projection.name)
          return c.projMatrix;
        const h = s.clone();
        return h.setProjection(t.projection), Lr(h, t.getProjection(), c);
      }
      function pa(c, t, s) {
        return t.name === s.projection.name ? c.projMatrix : Lr(s, t, c);
      }
      class zr {
        constructor(t, s, h, _) {
          this.opacity = t ? Math.max(0, Math.min(1, t.opacity + (t.placed ? s : -s))) : _ && h ? 1 : 0, this.placed = h;
        }
        isHidden() {
          return this.opacity === 0 && !this.placed;
        }
      }
      class Es {
        constructor(t, s, h, _, y, T = !1) {
          this.text = new zr(t ? t.text : null, s, h, y), this.icon = new zr(t ? t.icon : null, s, _, y), this.clipped = T;
        }
        isHidden() {
          return this.text.isHidden() && this.icon.isHidden();
        }
      }
      class Oa {
        constructor(t, s, h, _ = !1) {
          this.text = t, this.icon = s, this.skipFade = h, this.clipped = _;
        }
      }
      class qo {
        constructor() {
          this.invProjMatrix = i.ab.mat4.create(), this.viewportMatrix = i.ab.mat4.create(), this.circles = [];
        }
      }
      class Wo {
        constructor(t, s, h, _, y) {
          this.bucketInstanceId = t, this.featureIndex = s, this.sourceLayerIndex = h, this.bucketIndex = _, this.tileID = y;
        }
      }
      class so {
        constructor(t) {
          this.crossSourceCollisions = t, this.maxGroupID = 0, this.collisionGroups = {};
        }
        get(t) {
          if (this.crossSourceCollisions)
            return { ID: 0, predicate: null };
          if (!this.collisionGroups[t]) {
            const s = ++this.maxGroupID;
            this.collisionGroups[t] = { ID: s, predicate: (h) => h.collisionGroupID === s };
          }
          return this.collisionGroups[t];
        }
      }
      function Nc(c, t, s, h, _) {
        const { horizontalAlign: y, verticalAlign: T } = i.bD(c), z = -(y - 0.5) * t, R = -(T - 0.5) * s, F = i.bC(c, h);
        return new i.P(z + F[0] * _, R + F[1] * _);
      }
      function Fa(c, t, s, h, _) {
        const y = new i.P(c, t);
        return s && y._rotate(h ? _ : -_), y;
      }
      class or {
        constructor(t, s, h, _, y, T) {
          this.transform = t.clone(), this.projection = t.projection.name, this.collisionIndex = new Ir(this.transform, y), this.buildingIndex = T, this.placements = {}, this.opacities = {}, this.variableOffsets = {}, this.stale = !1, this.commitTime = 0, this.fadeDuration = s, this.retainedQueryData = {}, this.collisionGroups = new so(h), this.collisionCircleArrays = {}, this.prevPlacement = _, _ && (_.prevPlacement = void 0), this.placedOrientations = {};
        }
        getBucketParts(t, s, h, _, y = 1) {
          const T = h.getBucket(s), z = h.latestFeatureIndex;
          if (!T || !z || s.fqid !== T.layerIds[0])
            return;
          const R = T.layers[0].layout, F = T.layers[0].paint, N = h.collisionBoxArray, G = Math.pow(2, this.transform.zoom - h.tileID.overscaledZ), Z = h.tileSize / i.ag, W = h.tileID.toUnwrapped();
          this.transform.setProjection(T.projection);
          const te = (ee = h.tileID, se = T.getProjection(), oe = this.transform, se.name === this.projection ? oe.calculateProjMatrix(ee.toUnwrapped()) : Lr(oe, se, ee));
          var ee, se, oe;
          const he = R.get("text-pitch-alignment") === "map", _e = R.get("text-rotation-alignment") === "map";
          s.compileFilter(s.options);
          const pe = s.dynamicFilter(), Me = s.dynamicFilterNeedsFeature(), xe = this.transform.calculatePixelsToTileUnitsMatrix(h), we = Ho(te, h.tileID.canonical, he, _e, this.transform, T.getProjection(), xe);
          let ve = null;
          if (he) {
            const xt = Ss(te, h.tileID.canonical, he, _e, this.transform, T.getProjection(), xe);
            ve = i.ab.mat4.multiply([], this.transform.labelPlaneMatrix, xt);
          }
          let Ae = null;
          pe && h.latestFeatureIndex && (Ae = { unwrappedTileID: W, dynamicFilter: pe, dynamicFilterNeedsFeature: Me }), this.retainedQueryData[T.bucketInstanceId] = new Wo(T.bucketInstanceId, z, T.sourceLayerIndex, T.index, h.tileID);
          const [Oe, Xe] = T.layers[0].layout.get("text-size-scale-range"), He = i.aw(y, Oe, Xe), [ke, Ne] = R.get("icon-size-scale-range"), st = i.aw(y, ke, Ne), ut = { bucket: T, layout: R, paint: F, posMatrix: te, textLabelPlaneMatrix: we, labelToScreenMatrix: ve, clippingData: Ae, scale: G, textPixelRatio: Z, holdingForFade: h.holdingForFade(), collisionBoxArray: N, partiallyEvaluatedTextSize: i.bp(T.textSizeData, this.transform.zoom, He), partiallyEvaluatedIconSize: i.bp(T.iconSizeData, this.transform.zoom, st), collisionGroup: this.collisionGroups.get(T.sourceID), latestFeatureIndex: h.latestFeatureIndex };
          if (_)
            for (const xt of T.sortKeyRanges) {
              const { sortKey: Ge, symbolInstanceStart: lt, symbolInstanceEnd: Je } = xt;
              t.push({ sortKey: Ge, symbolInstanceStart: lt, symbolInstanceEnd: Je, parameters: ut });
            }
          else
            t.push({ symbolInstanceStart: 0, symbolInstanceEnd: T.symbolInstances.length, parameters: ut });
        }
        attemptAnchorPlacement(t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe, he) {
          const { textOffset0: _e, textOffset1: pe, crossTileID: Me } = Z, xe = [_e, pe], we = Nc(t, h, _, xe, y), ve = this.collisionIndex.placeCollisionBox(te, y, s, Fa(we.x, we.y, T, z, this.transform.angle), G, R, F, N.predicate);
          if (se) {
            const Ae = te.getSymbolInstanceIconSize(he, this.transform.zoom, Z.placedIconSymbolIndex);
            if (this.collisionIndex.placeCollisionBox(te, Ae, se, Fa(we.x, we.y, T, z, this.transform.angle), G, R, F, N.predicate).box.length === 0)
              return;
          }
          if (ve.box.length > 0) {
            let Ae;
            return this.prevPlacement && this.prevPlacement.variableOffsets[Me] && this.prevPlacement.placements[Me] && this.prevPlacement.placements[Me].text && (Ae = this.prevPlacement.variableOffsets[Me].anchor), this.variableOffsets[Me] = { textOffset: xe, width: h, height: _, anchor: t, textScale: y, prevAnchor: Ae }, this.markUsedJustification(te, t, Z, ee), te.allowVerticalPlacement && (this.markUsedOrientation(te, ee, Z), this.placedOrientations[Me] = ee), { shift: we, placedGlyphBoxes: ve };
          }
        }
        placeLayerBucketPart(t, s, h, _, y = 1) {
          const { bucket: T, layout: z, paint: R, posMatrix: F, textLabelPlaneMatrix: N, labelToScreenMatrix: G, clippingData: Z, textPixelRatio: W, holdingForFade: te, collisionBoxArray: ee, partiallyEvaluatedTextSize: se, partiallyEvaluatedIconSize: oe, collisionGroup: he, latestFeatureIndex: _e } = t.parameters, pe = z.get("text-optional"), Me = z.get("icon-optional"), xe = z.get("text-allow-overlap"), we = z.get("icon-allow-overlap"), ve = z.get("text-rotation-alignment") === "map", Ae = z.get("text-pitch-alignment") === "map", Oe = z.get("symbol-z-elevate"), Xe = R.get("symbol-z-offset"), He = z.get("symbol-elevation-reference") === "sea", [ke, Ne] = z.get("text-size-scale-range"), [st, ut] = z.get("icon-size-scale-range"), xt = i.aw(y, ke, Ne), Ge = i.aw(y, st, ut);
          this.transform.setProjection(T.projection);
          let lt = xe && (we || !T.hasIconData() || Me), Je = we && (xe || !T.hasTextData() || pe);
          const _t = !Xe.isConstant();
          !T.collisionArrays && ee && T.deserializeCollisionBoxes(ee), h && _ && T.updateCollisionDebugBuffers(this.transform.zoom, ee, xt, Ge);
          const ct = (nt, Lt, bt) => {
            const { crossTileID: zt, numVerticalGlyphVertices: Bt } = nt;
            let oi = null;
            if (Z && Z.dynamicFilterNeedsFeature || _t) {
              const dn = this.retainedQueryData[T.bucketInstanceId];
              oi = _e.loadFeature({ featureIndex: nt.featureIndex, bucketIndex: dn.bucketIndex, sourceLayerIndex: dn.sourceLayerIndex, layoutVertexArrayOffset: 0 });
            }
            if (Z && !(0, Z.dynamicFilter)({ zoom: this.transform.zoom, pitch: this.transform.pitch }, oi, this.retainedQueryData[T.bucketInstanceId].tileID.canonical, new i.P(nt.tileAnchorX, nt.tileAnchorY), this.transform.calculateDistanceTileData(Z.unwrappedTileID)))
              return this.placements[zt] = new Oa(!1, !1, !1, !0), void s.add(zt);
            const $t = Xe.evaluate(oi, {});
            if (s.has(zt))
              return;
            if (te)
              return void (this.placements[zt] = new Oa(!1, !1, !1));
            let Xt = !1, ai = !1, zi = !0, wi = !1, mn = !1, Mn = null, Xi = { box: null, offscreen: null, occluded: null }, sn = { box: null, offscreen: null, occluded: null }, _i = null, Jt = null, ji = null, Yi = 0, In = 0, Fs = 0;
            bt.textFeatureIndex ? Yi = bt.textFeatureIndex : nt.useRuntimeCollisionCircles && (Yi = nt.featureIndex), bt.verticalTextFeatureIndex && (In = bt.verticalTextFeatureIndex);
            const pr = (dn) => {
              dn.tileID = this.retainedQueryData[T.bucketInstanceId].tileID;
              const _n = this.transform.elevation;
              dn.elevation = He ? $t : $t + (_n ? _n.getAtTileOffset(dn.tileID, dn.tileAnchorX, dn.tileAnchorY) : 0), dn.elevation += nt.zOffset;
            }, ts = bt.textBox;
            if (ts) {
              pr(ts);
              const dn = (Ri) => {
                let Gn = i.bq.horizontal;
                if (T.allowVerticalPlacement && !Ri && this.prevPlacement) {
                  const Bs = this.prevPlacement.placedOrientations[zt];
                  Bs && (this.placedOrientations[zt] = Bs, Gn = Bs, this.markUsedOrientation(T, Gn, nt));
                }
                return Gn;
              }, _n = (Ri, Gn) => {
                if (T.allowVerticalPlacement && Bt > 0 && bt.verticalTextBox) {
                  for (const Bs of T.writingModes)
                    if (Bs === i.bq.vertical ? (Xi = Gn(), sn = Xi) : Xi = Ri(), Xi && Xi.box && Xi.box.length)
                      break;
                } else
                  Xi = Ri();
              };
              if (z.get("text-variable-anchor")) {
                let Ri = z.get("text-variable-anchor");
                if (this.prevPlacement && this.prevPlacement.variableOffsets[zt]) {
                  const cn = this.prevPlacement.variableOffsets[zt];
                  Ri.indexOf(cn.anchor) > 0 && (Ri = Ri.filter((er) => er !== cn.anchor), Ri.unshift(cn.anchor));
                }
                const Gn = (cn, er, eo) => {
                  const Br = T.getSymbolInstanceTextSize(se, nt, this.transform.zoom, Lt), Ma = (cn.x2 - cn.x1) * Br + 2 * cn.padding, mr = (cn.y2 - cn.y1) * Br + 2 * cn.padding, ko = nt.hasIconTextFit && !we ? er : null;
                  ko && pr(ko);
                  let Nr = { box: [], offscreen: !1, occluded: !1 };
                  const il = xe ? 2 * Ri.length : Ri.length;
                  for (let ia = 0; ia < il; ++ia) {
                    const Ll = this.attemptAnchorPlacement(Ri[ia % Ri.length], cn, Ma, mr, Br, ve, Ae, W, F, he, ia >= Ri.length, nt, Lt, T, eo, ko, se, oe);
                    if (Ll && (Nr = Ll.placedGlyphBoxes, Nr && Nr.box && Nr.box.length)) {
                      Xt = !0, Mn = Ll.shift;
                      break;
                    }
                  }
                  return Nr;
                };
                _n(() => Gn(ts, bt.iconBox, i.bq.horizontal), () => {
                  const cn = bt.verticalTextBox;
                  return cn && pr(cn), T.allowVerticalPlacement && !(Xi && Xi.box && Xi.box.length) && Bt > 0 && cn ? Gn(cn, bt.verticalIconBox, i.bq.vertical) : { box: null, offscreen: null, occluded: null };
                }), Xi && (Xt = Xi.box, zi = Xi.offscreen, wi = Xi.occluded);
                const Bs = dn(!(!Xi || !Xi.box));
                if (!Xt && this.prevPlacement) {
                  const cn = this.prevPlacement.variableOffsets[zt];
                  cn && (this.variableOffsets[zt] = cn, this.markUsedJustification(T, cn.anchor, nt, Bs));
                }
              } else {
                const Ri = (Gn, Bs) => {
                  const cn = T.getSymbolInstanceTextSize(se, nt, this.transform.zoom, Lt, y), er = this.collisionIndex.placeCollisionBox(T, cn, Gn, new i.P(0, 0), xe, W, F, he.predicate);
                  return er && er.box && er.box.length && (this.markUsedOrientation(T, Bs, nt), this.placedOrientations[zt] = Bs), er;
                };
                _n(() => Ri(ts, i.bq.horizontal), () => {
                  const Gn = bt.verticalTextBox;
                  return T.allowVerticalPlacement && Bt > 0 && Gn ? (pr(Gn), Ri(Gn, i.bq.vertical)) : { box: null, offscreen: null, occluded: null };
                }), dn(!!(Xi && Xi.box && Xi.box.length));
              }
            }
            if (_i = Xi, Xt = _i && _i.box && _i.box.length > 0, zi = _i && _i.offscreen, wi = _i && _i.occluded, nt.useRuntimeCollisionCircles) {
              const dn = T.text.placedSymbolArray.get(nt.centerJustifiedTextSymbolIndex >= 0 ? nt.centerJustifiedTextSymbolIndex : nt.verticalPlacedTextSymbolIndex), _n = i.br(T.textSizeData, se, dn), Ri = z.get("text-padding");
              Jt = this.collisionIndex.placeCollisionCircles(T, xe, dn, T.lineVertexArray, T.glyphOffsetArray, _n, F, N, G, h, Ae, he.predicate, nt.collisionCircleDiameter * _n / i.bw, Ri, this.retainedQueryData[T.bucketInstanceId].tileID), Xt = xe || Jt.circles.length > 0 && !Jt.collisionDetected, zi = zi && Jt.offscreen, wi = Jt.occluded;
            }
            if (bt.iconFeatureIndex && (Fs = bt.iconFeatureIndex), bt.iconBox) {
              const dn = (_n) => {
                pr(_n);
                const Ri = nt.hasIconTextFit && Mn ? Fa(Mn.x, Mn.y, ve, Ae, this.transform.angle) : new i.P(0, 0), Gn = T.getSymbolInstanceIconSize(oe, this.transform.zoom, nt.placedIconSymbolIndex);
                return this.collisionIndex.placeCollisionBox(T, Gn, _n, Ri, we, W, F, he.predicate);
              };
              sn && sn.box && sn.box.length && bt.verticalIconBox ? (ji = dn(bt.verticalIconBox), ai = ji.box.length > 0) : (ji = dn(bt.iconBox), ai = ji.box.length > 0), zi = zi && ji.offscreen, mn = ji.occluded;
            }
            const Ps = pe || nt.numHorizontalGlyphVertices === 0 && Bt === 0, Qs = Me || nt.numIconVertices === 0;
            if (Ps || Qs ? Qs ? Ps || (ai = ai && Xt) : Xt = ai && Xt : ai = Xt = ai && Xt, Xt && _i && _i.box && this.collisionIndex.insertCollisionBox(_i.box, z.get("text-ignore-placement"), T.bucketInstanceId, sn && sn.box && In ? In : Yi, he.ID), ai && ji && this.collisionIndex.insertCollisionBox(ji.box, z.get("icon-ignore-placement"), T.bucketInstanceId, Fs, he.ID), Jt && (Xt && this.collisionIndex.insertCollisionCircles(Jt.circles, z.get("text-ignore-placement"), T.bucketInstanceId, Yi, he.ID), h)) {
              const dn = T.bucketInstanceId;
              let _n = this.collisionCircleArrays[dn];
              _n === void 0 && (_n = this.collisionCircleArrays[dn] = new qo());
              for (let Ri = 0; Ri < Jt.circles.length; Ri += 4)
                _n.circles.push(Jt.circles[Ri + 0]), _n.circles.push(Jt.circles[Ri + 1]), _n.circles.push(Jt.circles[Ri + 2]), _n.circles.push(Jt.collisionDetected ? 1 : 0);
            }
            const jn = T.projection.name !== "globe";
            lt = lt && (jn || !wi), Je = Je && (jn || !mn), this.placements[zt] = new Oa(Xt || lt, ai || Je, zi || T.justReloaded), s.add(zt);
          };
          if (Oe && this.buildingIndex && (this.buildingIndex.updateZOffset(T, this.retainedQueryData[T.bucketInstanceId].tileID), T.updateZOffset()), T.sortFeaturesByY) {
            const nt = T.getSortedSymbolIndexes(this.transform.angle);
            for (let Lt = nt.length - 1; Lt >= 0; --Lt) {
              const bt = nt[Lt];
              ct(T.symbolInstances.get(bt), bt, T.collisionArrays[bt]);
            }
            T.hasAnyZOffset && i.w(`${T.layerIds[0]} layer symbol-z-elevate: symbols are not sorted by elevation if symbol-z-order is evaluated to viewport-y`);
          } else if (T.hasAnyZOffset) {
            const nt = T.getSortedIndexesByZOffset();
            for (let Lt = 0; Lt < nt.length; ++Lt) {
              const bt = nt[Lt];
              ct(T.symbolInstances.get(bt), bt, T.collisionArrays[bt]);
            }
          } else
            for (let nt = t.symbolInstanceStart; nt < t.symbolInstanceEnd; nt++)
              ct(T.symbolInstances.get(nt), nt, T.collisionArrays[nt]);
          if (h && T.bucketInstanceId in this.collisionCircleArrays) {
            const nt = this.collisionCircleArrays[T.bucketInstanceId];
            i.ab.mat4.invert(nt.invProjMatrix, F), nt.viewportMatrix = this.collisionIndex.getViewportMatrix();
          }
          T.justReloaded = !1;
        }
        markUsedJustification(t, s, h, _) {
          const { leftJustifiedTextSymbolIndex: y, centerJustifiedTextSymbolIndex: T, rightJustifiedTextSymbolIndex: z, verticalPlacedTextSymbolIndex: R, crossTileID: F } = h, N = i.bB(s), G = _ === i.bq.vertical ? R : N === "left" ? y : N === "center" ? T : N === "right" ? z : -1;
          y >= 0 && (t.text.placedSymbolArray.get(y).crossTileID = G >= 0 && y !== G ? 0 : F), T >= 0 && (t.text.placedSymbolArray.get(T).crossTileID = G >= 0 && T !== G ? 0 : F), z >= 0 && (t.text.placedSymbolArray.get(z).crossTileID = G >= 0 && z !== G ? 0 : F), R >= 0 && (t.text.placedSymbolArray.get(R).crossTileID = G >= 0 && R !== G ? 0 : F);
        }
        markUsedOrientation(t, s, h) {
          const _ = s === i.bq.horizontal || s === i.bq.horizontalOnly ? s : 0, y = s === i.bq.vertical ? s : 0, { leftJustifiedTextSymbolIndex: T, centerJustifiedTextSymbolIndex: z, rightJustifiedTextSymbolIndex: R, verticalPlacedTextSymbolIndex: F } = h, N = t.text.placedSymbolArray;
          T >= 0 && (N.get(T).placedOrientation = _), z >= 0 && (N.get(z).placedOrientation = _), R >= 0 && (N.get(R).placedOrientation = _), F >= 0 && (N.get(F).placedOrientation = y);
        }
        commit(t) {
          this.commitTime = t, this.zoomAtLastRecencyCheck = this.transform.zoom;
          const s = this.prevPlacement;
          let h = !1;
          this.prevZoomAdjustment = s ? s.zoomAdjustment(this.transform.zoom) : 0;
          const _ = s ? s.symbolFadeChange(t) : 1, y = s ? s.opacities : {}, T = s ? s.variableOffsets : {}, z = s ? s.placedOrientations : {};
          for (const R in this.placements) {
            const F = this.placements[R], N = y[R];
            N ? (this.opacities[R] = new Es(N, _, F.text, F.icon, null, F.clipped), h = h || F.text !== N.text.placed || F.icon !== N.icon.placed) : (this.opacities[R] = new Es(null, _, F.text, F.icon, F.skipFade, F.clipped), h = h || F.text || F.icon);
          }
          for (const R in y) {
            const F = y[R];
            if (!this.opacities[R]) {
              const N = new Es(F, _, !1, !1);
              N.isHidden() || (this.opacities[R] = N, h = h || F.text.placed || F.icon.placed);
            }
          }
          for (const R in T)
            this.variableOffsets[R] || !this.opacities[R] || this.opacities[R].isHidden() || (this.variableOffsets[R] = T[R]);
          for (const R in z)
            this.placedOrientations[R] || !this.opacities[R] || this.opacities[R].isHidden() || (this.placedOrientations[R] = z[R]);
          h ? this.lastPlacementChangeTime = t : typeof this.lastPlacementChangeTime != "number" && (this.lastPlacementChangeTime = s ? s.lastPlacementChangeTime : t);
        }
        updateLayerOpacities(t, s, h, _) {
          const y = /* @__PURE__ */ new Set();
          for (const T of s) {
            const z = T.getBucket(t);
            z && T.latestFeatureIndex && t.fqid === z.layerIds[0] && (this.updateBucketOpacities(z, y, T, T.collisionBoxArray, h, _, T.tileID, t.scope), z.layers[0].layout.get("symbol-z-elevate") && this.buildingIndex && (this.buildingIndex.updateZOffset(z, T.tileID), z.updateZOffset()));
          }
        }
        updateBucketOpacities(t, s, h, _, y, T, z, R) {
          t.hasTextData() && t.text.opacityVertexArray.clear(), t.hasIconData() && t.icon.opacityVertexArray.clear(), t.hasIconCollisionBoxData() && t.iconCollisionBox.collisionVertexArray.clear(), t.hasTextCollisionBoxData() && t.textCollisionBox.collisionVertexArray.clear();
          const F = t.layers[0].layout, N = t.layers[0].paint, G = !!t.layers[0].dynamicFilter(), Z = new Es(null, 0, !1, !1, !0), W = F.get("text-allow-overlap"), te = F.get("icon-allow-overlap"), ee = F.get("text-variable-anchor"), se = F.get("text-rotation-alignment") === "map", oe = F.get("text-pitch-alignment") === "map", he = N.get("symbol-z-offset"), _e = F.get("symbol-elevation-reference") === "sea", pe = !he.isConstant(), Me = new Es(null, 0, W && (te || !t.hasIconData() || F.get("icon-optional")), te && (W || !t.hasTextData() || F.get("text-optional")), !0);
          !t.collisionArrays && _ && (t.hasIconCollisionBoxData() || t.hasTextCollisionBoxData()) && t.deserializeCollisionBoxes(_);
          const xe = (ve, Ae, Oe) => {
            for (let Xe = 0; Xe < Ae / 4; Xe++)
              ve.opacityVertexArray.emplaceBack(Oe);
          };
          let we = 0;
          T && t.updateReplacement(z, T);
          for (let ve = 0; ve < t.symbolInstances.length; ve++) {
            const Ae = t.symbolInstances.get(ve), { numHorizontalGlyphVertices: Oe, numVerticalGlyphVertices: Xe, crossTileID: He, numIconVertices: ke, tileAnchorX: Ne, tileAnchorY: st } = Ae;
            let ut = null;
            const xt = this.retainedQueryData[t.bucketInstanceId];
            pe && Ae && xt && (ut = h.latestFeatureIndex.loadFeature({ featureIndex: Ae.featureIndex, bucketIndex: xt.bucketIndex, sourceLayerIndex: xt.sourceLayerIndex, layoutVertexArrayOffset: 0 }));
            const Ge = he.evaluate(ut, {}), lt = s.has(He);
            let Je = this.opacities[He];
            lt ? Je = Z : Je || (Je = Me, this.opacities[He] = Je), s.add(He);
            const _t = Oe > 0 || Xe > 0, ct = ke > 0, nt = this.placedOrientations[He], Lt = nt === i.bq.vertical, bt = nt === i.bq.horizontal || nt === i.bq.horizontalOnly;
            !_t && !ct || Je.isHidden() || we++;
            let zt = !1;
            if ((_t || ct) && T)
              for (const Bt of t.activeReplacements) {
                if (i.bx(Bt, y, i.by.Symbol, R) || Bt.min.x > Ne || Ne > Bt.max.x || Bt.min.y > st || st > Bt.max.y)
                  continue;
                const oi = i.bz(Ne, st, z.canonical, Bt.footprintTileId.canonical);
                if (zt = i.bA(oi, Bt.footprint), zt)
                  break;
              }
            if (_t) {
              const Bt = zt ? Ds : _l(Je.text);
              xe(t.text, Oe, Lt ? Ds : Bt), xe(t.text, Xe, bt ? Ds : Bt);
              const oi = Je.text.isHidden(), { leftJustifiedTextSymbolIndex: $t, centerJustifiedTextSymbolIndex: Xt, rightJustifiedTextSymbolIndex: ai, verticalPlacedTextSymbolIndex: zi } = Ae, wi = t.text.placedSymbolArray, mn = oi || Lt ? 1 : 0;
              $t >= 0 && (wi.get($t).hidden = mn), Xt >= 0 && (wi.get(Xt).hidden = mn), ai >= 0 && (wi.get(ai).hidden = mn), zi >= 0 && (wi.get(zi).hidden = oi || bt ? 1 : 0);
              const Mn = this.variableOffsets[He];
              Mn && this.markUsedJustification(t, Mn.anchor, Ae, nt);
              const Xi = this.placedOrientations[He];
              Xi && (this.markUsedJustification(t, "left", Ae, Xi), this.markUsedOrientation(t, Xi, Ae));
            }
            if (ct) {
              const Bt = zt ? Ds : _l(Je.icon), { placedIconSymbolIndex: oi, verticalPlacedIconSymbolIndex: $t } = Ae, Xt = t.icon.placedSymbolArray, ai = Je.icon.isHidden() ? 1 : 0;
              oi >= 0 && (xe(t.icon, ke, Lt ? Ds : Bt), Xt.get(oi).hidden = ai), $t >= 0 && (xe(t.icon, Ae.numVerticalIconVertices, bt ? Ds : Bt), Xt.get($t).hidden = ai);
            }
            if (t.hasIconCollisionBoxData() || t.hasTextCollisionBoxData()) {
              const Bt = t.collisionArrays[ve];
              if (Bt) {
                let oi = new i.P(0, 0), $t = !0;
                if (Bt.textBox || Bt.verticalTextBox) {
                  if (ee) {
                    const ai = this.variableOffsets[He];
                    ai ? (oi = Nc(ai.anchor, ai.width, ai.height, ai.textOffset, ai.textScale), se && oi._rotate(oe ? this.transform.angle : -this.transform.angle)) : $t = !1;
                  }
                  G && ($t = !Je.clipped), Bt.textBox && fl(t.textCollisionBox.collisionVertexArray, Je.text.placed, !$t || Lt, Ge, _e, oi.x, oi.y), Bt.verticalTextBox && fl(t.textCollisionBox.collisionVertexArray, Je.text.placed, !$t || bt, Ge, _e, oi.x, oi.y);
                }
                const Xt = $t && !!(!bt && Bt.verticalIconBox);
                Bt.iconBox && fl(t.iconCollisionBox.collisionVertexArray, Je.icon.placed, Xt, Ge, _e, Ae.hasIconTextFit ? oi.x : 0, Ae.hasIconTextFit ? oi.y : 0), Bt.verticalIconBox && fl(t.iconCollisionBox.collisionVertexArray, Je.icon.placed, !Xt, Ge, _e, Ae.hasIconTextFit ? oi.x : 0, Ae.hasIconTextFit ? oi.y : 0);
              }
            }
          }
          if (t.fullyClipped = we === 0, t.sortFeatures(this.transform.angle), this.retainedQueryData[t.bucketInstanceId] && (this.retainedQueryData[t.bucketInstanceId].featureSortOrder = t.featureSortOrder), t.hasTextData() && t.text.opacityVertexBuffer && t.text.opacityVertexBuffer.updateData(t.text.opacityVertexArray), t.hasIconData() && t.icon.opacityVertexBuffer && t.icon.opacityVertexBuffer.updateData(t.icon.opacityVertexArray), t.hasIconCollisionBoxData() && t.iconCollisionBox.collisionVertexBuffer && t.iconCollisionBox.collisionVertexBuffer.updateData(t.iconCollisionBox.collisionVertexArray), t.hasTextCollisionBoxData() && t.textCollisionBox.collisionVertexBuffer && t.textCollisionBox.collisionVertexBuffer.updateData(t.textCollisionBox.collisionVertexArray), t.bucketInstanceId in this.collisionCircleArrays) {
            const ve = this.collisionCircleArrays[t.bucketInstanceId];
            t.placementInvProjMatrix = ve.invProjMatrix, t.placementViewportMatrix = ve.viewportMatrix, t.collisionCircleArray = ve.circles, delete this.collisionCircleArrays[t.bucketInstanceId];
          }
        }
        symbolFadeChange(t) {
          return this.fadeDuration === 0 ? 1 : (t - this.commitTime) / this.fadeDuration + this.prevZoomAdjustment;
        }
        zoomAdjustment(t) {
          return Math.max(0, (this.transform.zoom - t) / 1.5);
        }
        hasTransitions(t) {
          return this.stale || t - this.lastPlacementChangeTime < this.fadeDuration;
        }
        stillRecent(t, s) {
          const h = this.zoomAtLastRecencyCheck === s ? 1 - this.zoomAdjustment(s) : 1;
          return this.zoomAtLastRecencyCheck = s, this.commitTime + this.fadeDuration * h > t;
        }
        setStale() {
          this.stale = !0;
        }
      }
      function fl(c, t, s, h, _, y, T) {
        c.emplaceBack(t ? 1 : 0, s ? 1 : 0, y || 0, T || 0, h, _ ? 1 : 0), c.emplaceBack(t ? 1 : 0, s ? 1 : 0, y || 0, T || 0, h, _ ? 1 : 0), c.emplaceBack(t ? 1 : 0, s ? 1 : 0, y || 0, T || 0, h, _ ? 1 : 0), c.emplaceBack(t ? 1 : 0, s ? 1 : 0, y || 0, T || 0, h, _ ? 1 : 0);
      }
      const pl = Math.pow(2, 25), Nh = Math.pow(2, 24), ml = Math.pow(2, 17), Vc = Math.pow(2, 16), Qu = Math.pow(2, 9), Ba = Math.pow(2, 8), Na = Math.pow(2, 1);
      function _l(c) {
        if (c.opacity === 0 && !c.placed)
          return 0;
        if (c.opacity === 1 && c.placed)
          return 4294967295;
        const t = c.placed ? 1 : 0, s = Math.floor(127 * c.opacity);
        return s * pl + t * Nh + s * ml + t * Vc + s * Qu + t * Ba + s * Na + t;
      }
      const Ds = 0;
      class Vh {
        constructor(t) {
          this._sortAcrossTiles = t.layout.get("symbol-z-order") !== "viewport-y" && t.layout.get("symbol-sort-key").constantOr(1) !== void 0, this._currentTileIndex = 0, this._currentPartIndex = 0, this._seenCrossTileIDs = /* @__PURE__ */ new Set(), this._bucketParts = [];
        }
        continuePlacement(t, s, h, _, y, T) {
          const z = this._bucketParts;
          for (; this._currentTileIndex < t.length; )
            if (s.getBucketParts(z, _, t[this._currentTileIndex], this._sortAcrossTiles, T), this._currentTileIndex++, y())
              return !0;
          for (this._sortAcrossTiles && (this._sortAcrossTiles = !1, z.sort((R, F) => R.sortKey - F.sortKey)); this._currentPartIndex < z.length; ) {
            const R = z[this._currentPartIndex];
            if (s.placeLayerBucketPart(R, this._seenCrossTileIDs, h, R.symbolInstanceStart === 0, T), this._currentPartIndex++, y())
              return !0;
          }
          return !1;
        }
      }
      class $o {
        constructor(t, s, h, _, y, T, z, R, F) {
          this.placement = new or(t, y, T, z, R, F), this._currentPlacementIndex = s.length - 1, this._forceFullPlacement = h, this._showCollisionBoxes = _, this._done = !1;
        }
        isDone() {
          return this._done;
        }
        continuePlacement(t, s, h, _, y) {
          const T = i.q.now(), z = () => {
            const R = i.q.now() - T;
            return !this._forceFullPlacement && R > 2;
          };
          for (; this._currentPlacementIndex >= 0; ) {
            const R = s[t[this._currentPlacementIndex]], F = this.placement.collisionIndex.transform.zoom;
            if (R.type === "symbol" && (!R.minzoom || R.minzoom <= F) && (!R.maxzoom || R.maxzoom > F)) {
              const N = R, G = N.layout.get("symbol-z-elevate"), Z = N.layout.get("symbol-sort-key").constantOr(1) !== void 0, W = N.layout.get("symbol-z-order"), te = W === "viewport-y" || W === "auto" && !(W !== "viewport-y" && Z), ee = N.layout.get("text-allow-overlap") || N.layout.get("icon-allow-overlap") || N.layout.get("text-ignore-placement") || N.layout.get("icon-ignore-placement"), se = te && ee, oe = this._inProgressLayer = this._inProgressLayer || new Vh(N), he = i.aC(R.source, R.scope);
              if (oe.continuePlacement(G || se ? _[he] : h[he], this.placement, this._showCollisionBoxes, R, z, y))
                return;
              delete this._inProgressLayer;
            }
            this._currentPlacementIndex--;
          }
          this._done = !0;
        }
        commit(t) {
          return this.placement.commit(t), this.placement;
        }
      }
      const rs = 512 / i.ag / 2;
      class Uh {
        constructor(t, s, h) {
          this.tileID = t, this.bucketInstanceId = h, this.index = new i.bE(s.length, 16, Int32Array), this.keys = [], this.crossTileIDs = [];
          const _ = t.canonical.x * i.ag, y = t.canonical.y * i.ag;
          for (let T = 0; T < s.length; T++) {
            const { key: z, crossTileID: R, tileAnchorX: F, tileAnchorY: N } = s.get(T), G = Math.floor((_ + F) * rs), Z = Math.floor((y + N) * rs);
            this.index.add(G, Z), this.keys.push(z), this.crossTileIDs.push(R);
          }
          this.index.finish();
        }
        findMatches(t, s, h) {
          const _ = this.tileID.canonical.z < s.canonical.z ? 1 : Math.pow(2, this.tileID.canonical.z - s.canonical.z), y = rs / Math.pow(2, s.canonical.z - this.tileID.canonical.z), T = s.canonical.x * i.ag, z = s.canonical.y * i.ag;
          for (let R = 0; R < t.length; R++) {
            const F = t.get(R);
            if (F.crossTileID)
              continue;
            const { key: N, tileAnchorX: G, tileAnchorY: Z } = F, W = Math.floor((T + G) * y), te = Math.floor((z + Z) * y), ee = this.index.range(W - _, te - _, W + _, te + _);
            for (const se of ee) {
              const oe = this.crossTileIDs[se];
              if (this.keys[se] === N && !h.has(oe)) {
                h.add(oe), F.crossTileID = oe;
                break;
              }
            }
          }
        }
      }
      class jh {
        constructor() {
          this.maxCrossTileID = 0;
        }
        generate() {
          return ++this.maxCrossTileID;
        }
      }
      class ed {
        constructor() {
          this.indexes = {}, this.usedCrossTileIDs = {}, this.lng = 0;
        }
        handleWrapJump(t) {
          const s = Math.round((t - this.lng) / 360);
          if (s !== 0)
            for (const h in this.indexes) {
              const _ = this.indexes[h], y = {};
              for (const T in _) {
                const z = _[T];
                z.tileID = z.tileID.unwrapTo(z.tileID.wrap + s), y[z.tileID.key] = z;
              }
              this.indexes[h] = y;
            }
          this.lng = t;
        }
        addBucket(t, s, h) {
          if (this.indexes[t.overscaledZ] && this.indexes[t.overscaledZ][t.key]) {
            if (this.indexes[t.overscaledZ][t.key].bucketInstanceId === s.bucketInstanceId)
              return !1;
            this.removeBucketCrossTileIDs(t.overscaledZ, this.indexes[t.overscaledZ][t.key]);
          }
          for (let y = 0; y < s.symbolInstances.length; y++)
            s.symbolInstances.get(y).crossTileID = 0;
          this.usedCrossTileIDs[t.overscaledZ] || (this.usedCrossTileIDs[t.overscaledZ] = /* @__PURE__ */ new Set());
          const _ = this.usedCrossTileIDs[t.overscaledZ];
          for (const y in this.indexes) {
            const T = this.indexes[y];
            if (Number(y) > t.overscaledZ)
              for (const z in T) {
                const R = T[z];
                R.tileID.isChildOf(t) && R.findMatches(s.symbolInstances, t, _);
              }
            else {
              const z = T[t.scaledTo(Number(y)).key];
              z && z.findMatches(s.symbolInstances, t, _);
            }
          }
          for (let y = 0; y < s.symbolInstances.length; y++) {
            const T = s.symbolInstances.get(y);
            T.crossTileID || (T.crossTileID = h.generate(), _.add(T.crossTileID));
          }
          return this.indexes[t.overscaledZ] === void 0 && (this.indexes[t.overscaledZ] = {}), this.indexes[t.overscaledZ][t.key] = new Uh(t, s.symbolInstances, s.bucketInstanceId), !0;
        }
        removeBucketCrossTileIDs(t, s) {
          for (const h of s.crossTileIDs)
            this.usedCrossTileIDs[t].delete(h);
        }
        removeStaleBuckets(t) {
          let s = !1;
          for (const h in this.indexes) {
            const _ = this.indexes[h];
            for (const y in _)
              t[_[y].bucketInstanceId] || (this.removeBucketCrossTileIDs(h, _[y]), delete _[y], s = !0);
          }
          return s;
        }
      }
      class Hl {
        constructor() {
          this.layerIndexes = {}, this.crossTileIDs = new jh(), this.maxBucketInstanceId = 0, this.bucketsInCurrentPlacement = {};
        }
        addLayer(t, s, h, _) {
          let y = this.layerIndexes[t.fqid];
          y === void 0 && (y = this.layerIndexes[t.fqid] = new ed());
          let T = !1;
          const z = {};
          _.name !== "globe" && y.handleWrapJump(h);
          for (const R of s) {
            const F = R.getBucket(t);
            F && t.fqid === F.layerIds[0] && (F.bucketInstanceId || (F.bucketInstanceId = ++this.maxBucketInstanceId), y.addBucket(R.tileID, F, this.crossTileIDs) && (T = !0), z[F.bucketInstanceId] = !0);
          }
          return y.removeStaleBuckets(z) && (T = !0), T;
        }
        pruneUnusedLayers(t) {
          const s = {};
          t.forEach((h) => {
            s[h] = !0;
          });
          for (const h in this.layerIndexes)
            s[h] || delete this.layerIndexes[h];
        }
      }
      const Xo = 771;
      class bi {
        constructor(t, s, h, _) {
          this.blendFunction = t, this.blendColor = s, this.mask = h, this.blendEquation = _;
        }
      }
      bi.Replace = [1, 0, 1, 0], bi.disabled = new bi(bi.Replace, i.aj.transparent, [!1, !1, !1, !1]), bi.unblended = new bi(bi.Replace, i.aj.transparent, [!0, !0, !0, !0]), bi.alphaBlended = new bi([1, Xo, 1, Xo], i.aj.transparent, [!0, !0, !0, !0]), bi.alphaBlendedNonPremultiplied = new bi([770, Xo, 770, Xo], i.aj.transparent, [!0, !0, !0, !0]), bi.multiply = new bi([774, 0, 774, 0], i.aj.transparent, [!0, !0, !0, !0]);
      class Wt {
        constructor(t, s, h) {
          this.func = t, this.mask = s, this.range = h;
        }
      }
      Wt.ReadOnly = !1, Wt.ReadWrite = !0, Wt.disabled = new Wt(519, Wt.ReadOnly, [0, 1]);
      const gl = 7680;
      class ci {
        constructor(t, s, h, _, y, T) {
          this.test = t, this.ref = s, this.mask = h, this.fail = _, this.depthFail = y, this.pass = T;
        }
      }
      ci.disabled = new ci({ func: 519, mask: 0 }, 0, 0, gl, gl, gl);
      const ar = 1029, lr = 2305;
      class ti {
        constructor(t, s, h) {
          this.enable = t, this.mode = s, this.frontFace = h;
        }
      }
      function Xr(c, t) {
        const s = i.bG(c, 3);
        i.ab.mat4.fromQuat(c, t), i.bI(c, 3, s);
      }
      function ql(c, t) {
        const s = i.ab.quat.identity([]);
        return i.ab.quat.rotateZ(s, s, -t), i.ab.quat.rotateX(s, s, -c), s;
      }
      function Yr(c, t) {
        const s = [c[0], c[1], 0], h = [t[0], t[1], 0];
        if (i.ab.vec3.length(s) >= 1e-15) {
          const T = i.ab.vec3.normalize([], s);
          i.ab.vec3.scale(h, T, i.ab.vec3.dot(h, T)), t[0] = h[0], t[1] = h[1];
        }
        const _ = i.ab.vec3.cross([], t, c);
        if (i.ab.vec3.len(_) < 1e-15)
          return null;
        const y = Math.atan2(-_[1], _[0]);
        return ql(Math.atan2(Math.sqrt(c[0] * c[0] + c[1] * c[1]), -c[2]), y);
      }
      ti.disabled = new ti(!1, ar, lr), ti.backCCW = new ti(!0, ar, lr), ti.backCW = new ti(!0, ar, 2304), ti.frontCW = new ti(!0, 1028, 2304), ti.frontCCW = new ti(!0, 1028, lr);
      class Va {
        constructor(t, s) {
          this.position = t, this.orientation = s;
        }
        get position() {
          return this._position;
        }
        set position(t) {
          if (t) {
            const s = t instanceof i.aa ? t : new i.aa(t[0], t[1], t[2]);
            this._renderWorldCopies && (s.x = i.bF(s.x, 0, 1)), this._position = s;
          } else
            this._position = null;
        }
        lookAtPoint(t, s) {
          if (this.orientation = null, !this.position)
            return;
          const h = this.position, _ = this._elevation ? this._elevation.getAtPointOrZero(i.aa.fromLngLat(t)) : 0, y = i.aa.fromLngLat(t, _), T = [y.x - h.x, y.y - h.y, y.z - h.z];
          s || (s = [0, 0, 1]), s[2] = Math.abs(s[2]), this.orientation = Yr(T, s);
        }
        setPitchBearing(t, s) {
          this.orientation = ql(i.ai(t), i.ai(-s));
        }
      }
      class To {
        constructor(t, s) {
          this._transform = i.ab.mat4.identity([]), this.orientation = s, this.position = t;
        }
        get mercatorPosition() {
          const t = this.position;
          return new i.aa(t[0], t[1], t[2]);
        }
        get position() {
          const t = i.bG(this._transform, 3);
          return [t[0], t[1], t[2]];
        }
        set position(t) {
          var s;
          t && i.bI(this._transform, 3, [(s = t)[0], s[1], s[2], 1]);
        }
        get orientation() {
          return this._orientation;
        }
        set orientation(t) {
          this._orientation = t || i.ab.quat.identity([]), t && Xr(this._transform, this._orientation);
        }
        getPitchBearing() {
          const t = this.forward(), s = this.right();
          return { bearing: Math.atan2(-s[1], s[0]), pitch: Math.atan2(Math.sqrt(t[0] * t[0] + t[1] * t[1]), -t[2]) };
        }
        setPitchBearing(t, s) {
          this._orientation = ql(t, s), Xr(this._transform, this._orientation);
        }
        forward() {
          const t = i.bG(this._transform, 2);
          return [-t[0], -t[1], -t[2]];
        }
        up() {
          const t = i.bG(this._transform, 1);
          return [-t[0], -t[1], -t[2]];
        }
        right() {
          const t = i.bG(this._transform, 0);
          return [t[0], t[1], t[2]];
        }
        getCameraToWorld(t, s) {
          const h = new Float64Array(16);
          return i.ab.mat4.invert(h, this.getWorldToCamera(t, s)), h;
        }
        getCameraToWorldMercator() {
          return this._transform;
        }
        getWorldToCameraPosition(t, s, h) {
          const _ = this.position;
          i.ab.vec3.scale(_, _, -t);
          const y = new Float64Array(16);
          return i.ab.mat4.fromScaling(y, [h, h, h]), i.ab.mat4.translate(y, y, _), y[10] *= s, y;
        }
        getWorldToCamera(t, s) {
          const h = new Float64Array(16), _ = new Float64Array(4), y = this.position;
          return i.ab.quat.conjugate(_, this._orientation), i.ab.vec3.scale(y, y, -t), i.ab.mat4.fromQuat(h, _), i.ab.mat4.translate(h, h, y), h[1] *= -1, h[5] *= -1, h[9] *= -1, h[13] *= -1, h[8] *= s, h[9] *= s, h[10] *= s, h[11] *= s, h;
        }
        getCameraToClipPerspective(t, s, h, _) {
          const y = new Float64Array(16);
          return i.ab.mat4.perspective(y, t, s, h, _), y;
        }
        getCameraToClipOrthographic(t, s, h, _, y, T) {
          const z = new Float64Array(16);
          return i.ab.mat4.ortho(z, t, s, h, _, y, T), z;
        }
        getDistanceToElevation(t, s = !1) {
          const h = t === 0 ? 0 : i.bH(t, s ? i.aS(this.position[1]) : this.position[1]), _ = this.forward();
          return (h - this.position[2]) / _[2];
        }
        clone() {
          return new To([...this.position], [...this.orientation]);
        }
      }
      const bs = { BaseColor: 5, MetallicRoughness: 6, Normal: 7, Occlusion: 8, Emission: 9, LUT: 10, ShadowMap0: 11 };
      class ks {
        constructor(t = 0, s = 0, h = 0, _ = 0) {
          if (isNaN(t) || t < 0 || isNaN(s) || s < 0 || isNaN(h) || h < 0 || isNaN(_) || _ < 0)
            throw new Error("Invalid value for edge-insets, top, bottom, left and right must all be numbers");
          this.top = t, this.bottom = s, this.left = h, this.right = _;
        }
        interpolate(t, s, h) {
          return s.top != null && t.top != null && (this.top = i.af(t.top, s.top, h)), s.bottom != null && t.bottom != null && (this.bottom = i.af(t.bottom, s.bottom, h)), s.left != null && t.left != null && (this.left = i.af(t.left, s.left, h)), s.right != null && t.right != null && (this.right = i.af(t.right, s.right, h)), this;
        }
        getCenter(t, s) {
          const h = i.aw((this.left + t - this.right) / 2, 0, t), _ = i.aw((this.top + s - this.bottom) / 2, 0, s);
          return new i.P(h, _);
        }
        equals(t) {
          return this.top === t.top && this.bottom === t.bottom && this.left === t.left && this.right === t.right;
        }
        clone() {
          return new ks(this.top, this.bottom, this.left, this.right);
        }
        toJSON() {
          return { top: this.top, bottom: this.bottom, left: this.left, right: this.right };
        }
      }
      const Wl = (c, t, s) => (1 - s) * c + s * t, Tt = (c) => c * c * c * c * c;
      class ma {
        constructor(t, s, h, _, y, T, z) {
          this.tileSize = 512, this._renderWorldCopies = y === void 0 || y, this._minZoom = t || 0, this._maxZoom = s || 22, this._minPitch = h ?? 0, this._maxPitch = _ ?? 60, this.setProjection(T), this.setMaxBounds(z), this.width = 0, this.height = 0, this._center = new i.bO(0, 0), this.zoom = 0, this.angle = 0, this._fov = 0.6435011087932844, this._pitch = 0, this._nearZ = 0, this._farZ = 0, this._unmodified = !0, this._edgeInsets = new ks(), this._projMatrixCache = {}, this._alignedProjMatrixCache = {}, this._fogTileMatrixCache = {}, this._expandedProjMatrixCache = {}, this._distanceTileDataCache = {}, this._camera = new To(), this._centerAltitude = 0, this._averageElevation = 0, this.cameraElevationReference = "ground", this._pixelsPerMercatorPixel = 1, this.globeRadius = 0, this.globeCenterInViewSpace = [0, 0, 0], this._tileCoverLift = 0, this.freezeTileCoverage = !1, this._horizonShift = 0.1, this._orthographicProjectionAtLowPitch = !1;
        }
        clone() {
          const t = new ma(this._minZoom, this._maxZoom, this._minPitch, this.maxPitch, this._renderWorldCopies, this.getProjection());
          return t._elevation = this._elevation, t._centerAltitude = this._centerAltitude, t._centerAltitudeValidForExaggeration = this._centerAltitudeValidForExaggeration, t.tileSize = this.tileSize, t.mercatorFromTransition = this.mercatorFromTransition, t.width = this.width, t.height = this.height, t.cameraElevationReference = this.cameraElevationReference, t._center = this._center, t._setZoom(this.zoom), t._seaLevelZoom = this._seaLevelZoom, t.angle = this.angle, t._fov = this._fov, t._pitch = this._pitch, t._nearZ = this._nearZ, t._farZ = this._farZ, t._averageElevation = this._averageElevation, t._orthographicProjectionAtLowPitch = this._orthographicProjectionAtLowPitch, t._unmodified = this._unmodified, t._edgeInsets = this._edgeInsets.clone(), t._camera = this._camera.clone(), t._calcMatrices(), t.freezeTileCoverage = this.freezeTileCoverage, t.frustumCorners = this.frustumCorners, t;
        }
        get isOrthographic() {
          return this.projection.name !== "globe" && this._orthographicProjectionAtLowPitch && this.pitch < 15;
        }
        get elevation() {
          return this._elevation;
        }
        set elevation(t) {
          this._elevation !== t && (this._elevation = t, this._updateCameraOnTerrain(), this._calcMatrices());
        }
        get depthOcclusionForSymbolsAndCircles() {
          return this.projection.name !== "globe" && !this.isOrthographic;
        }
        updateElevation(t, s = !1) {
          const h = this._elevation && this._elevation.exaggeration() !== this._centerAltitudeValidForExaggeration;
          (this._seaLevelZoom == null || h) && this._updateCameraOnTerrain(), (t || h) && this._constrainCamera(s), this._calcMatrices();
        }
        getProjection() {
          return i.ay(this.projection, ["name", "center", "parallels"]);
        }
        setProjection(t) {
          this.projectionOptions = t || { name: "mercator" };
          const s = this.projection ? this.getProjection() : void 0;
          this.projection = i.bP(this.projectionOptions);
          const h = this.getProjection(), _ = !i.bn(s, h);
          return _ && this._calcMatrices(), this.mercatorFromTransition = !1, _;
        }
        setOrthographicProjectionAtLowPitch(t) {
          return this._orthographicProjectionAtLowPitch !== t && (this._orthographicProjectionAtLowPitch = t, this._calcMatrices(), !0);
        }
        setMercatorFromTransition() {
          const t = this.projection.name;
          this.mercatorFromTransition = !0, this.projectionOptions = { name: "mercator" }, this.projection = i.bP({ name: "mercator" });
          const s = t !== this.projection.name;
          return s && this._calcMatrices(), s;
        }
        get minZoom() {
          return this._minZoom;
        }
        set minZoom(t) {
          this._minZoom !== t && (this._minZoom = t, this.zoom = Math.max(this.zoom, t));
        }
        get maxZoom() {
          return this._maxZoom;
        }
        set maxZoom(t) {
          this._maxZoom !== t && (this._maxZoom = t, this.zoom = Math.min(this.zoom, t));
        }
        get minPitch() {
          return this._minPitch;
        }
        set minPitch(t) {
          this._minPitch !== t && (this._minPitch = t, this.pitch = Math.max(this.pitch, t));
        }
        get maxPitch() {
          return this._maxPitch;
        }
        set maxPitch(t) {
          this._maxPitch !== t && (this._maxPitch = t, this.pitch = Math.min(this.pitch, t));
        }
        get renderWorldCopies() {
          return this._renderWorldCopies && this.projection.supportsWorldCopies === !0;
        }
        set renderWorldCopies(t) {
          t === void 0 ? t = !0 : t === null && (t = !1), this._renderWorldCopies = t;
        }
        get worldSize() {
          return this.tileSize * this.scale;
        }
        get cameraWorldSizeForFog() {
          const t = Math.max(this._camera.getDistanceToElevation(this._averageElevation), Number.EPSILON);
          return this._worldSizeFromZoom(this._zoomFromMercatorZ(t));
        }
        get cameraWorldSize() {
          const t = Math.max(this._camera.getDistanceToElevation(this._averageElevation, !0), Number.EPSILON);
          return this._worldSizeFromZoom(this._zoomFromMercatorZ(t));
        }
        get pixelsPerMeter() {
          return this.projection.pixelsPerMeter(this.center.lat, this.worldSize);
        }
        get cameraPixelsPerMeter() {
          return i.bH(1, this.center.lat) * this.cameraWorldSizeForFog;
        }
        get centerOffset() {
          return this.centerPoint._sub(this.size._div(2));
        }
        get size() {
          return new i.P(this.width, this.height);
        }
        get bearing() {
          return i.bF(this.rotation, -180, 180);
        }
        set bearing(t) {
          this.rotation = t;
        }
        get rotation() {
          return -this.angle / Math.PI * 180;
        }
        set rotation(t) {
          const s = -t * Math.PI / 180;
          this.angle !== s && (this._unmodified = !1, this.angle = s, this._calcMatrices(), this.rotationMatrix = i.ab.mat2.create(), i.ab.mat2.rotate(this.rotationMatrix, this.rotationMatrix, this.angle));
        }
        get pitch() {
          return this._pitch / Math.PI * 180;
        }
        set pitch(t) {
          const s = i.aw(t, this.minPitch, this.maxPitch) / 180 * Math.PI;
          this._pitch !== s && (this._unmodified = !1, this._pitch = s, this._calcMatrices());
        }
        get aspect() {
          return this.width / this.height;
        }
        get fov() {
          return this._fov / Math.PI * 180;
        }
        get fovX() {
          return this._fov;
        }
        get fovY() {
          const t = 1 / Math.tan(0.5 * this.fovX);
          return 2 * Math.atan(1 / this.aspect / t);
        }
        set fov(t) {
          t = Math.max(0.01, Math.min(60, t)), this._fov !== t && (this._unmodified = !1, this._fov = i.ai(t), this._calcMatrices());
        }
        get averageElevation() {
          return this._averageElevation;
        }
        set averageElevation(t) {
          this._averageElevation = t, this._calcFogMatrices(), this._distanceTileDataCache = {};
        }
        get zoom() {
          return this._zoom;
        }
        set zoom(t) {
          const s = Math.min(Math.max(t, this.minZoom), this.maxZoom);
          this._zoom !== s && (this._unmodified = !1, this._setZoom(s), this._updateSeaLevelZoom(), this._constrain(), this._calcMatrices());
        }
        _setZoom(t) {
          this._zoom = t, this.scale = this.zoomScale(t), this.tileZoom = Math.floor(t), this.zoomFraction = t - this.tileZoom;
        }
        get tileCoverLift() {
          return this._tileCoverLift;
        }
        set tileCoverLift(t) {
          this._tileCoverLift !== t && (this._tileCoverLift = t);
        }
        _updateCameraOnTerrain() {
          const t = this.elevation ? this.elevation.getAtPoint(this.locationCoordinate(this.center), Number.NEGATIVE_INFINITY) : Number.NEGATIVE_INFINITY, s = this.elevation && t === Number.NEGATIVE_INFINITY && this.elevation.visibleDemTiles.length > 0 && this.elevation.exaggeration() > 0 && this._centerAltitudeValidForExaggeration;
          if (!this._elevation || t === Number.NEGATIVE_INFINITY && (!s || !this._centerAltitude))
            return this._centerAltitude = 0, this._seaLevelZoom = null, void (this._centerAltitudeValidForExaggeration = void 0);
          const h = this._elevation;
          s || this._centerAltitude && this._centerAltitudeValidForExaggeration && h.exaggeration() && this._centerAltitudeValidForExaggeration !== h.exaggeration() ? (this._centerAltitude = this._centerAltitude / this._centerAltitudeValidForExaggeration * h.exaggeration(), this._centerAltitudeValidForExaggeration = h.exaggeration()) : (this._centerAltitude = t || 0, this._centerAltitudeValidForExaggeration = h.exaggeration()), this._updateSeaLevelZoom();
        }
        _updateSeaLevelZoom() {
          this._centerAltitudeValidForExaggeration !== void 0 && (this._seaLevelZoom = this._zoomFromMercatorZ((this.pixelsPerMeter * this._centerAltitude + this.cameraToCenterDistance) / this.worldSize));
        }
        sampleAverageElevation() {
          if (!this._elevation)
            return 0;
          const t = this._elevation, s = [[0.5, 0.2], [0.3, 0.5], [0.5, 0.5], [0.7, 0.5], [0.5, 0.8]], h = this.horizonLineFromTop();
          let _ = 0, y = 0;
          for (let T = 0; T < s.length; T++) {
            const z = new i.P(s[T][0] * this.width, h + s[T][1] * (this.height - h)), R = t.pointCoordinate(z);
            if (!R)
              continue;
            const F = 1 / Math.hypot(R[0] - this._camera.position[0], R[1] - this._camera.position[1]);
            _ += R[3] * F, y += F;
          }
          return y === 0 ? NaN : _ / y;
        }
        get center() {
          return this._center;
        }
        set center(t) {
          t.lat === this._center.lat && t.lng === this._center.lng || (this._unmodified = !1, this._center = t, this._terrainEnabled() && (this.cameraElevationReference === "ground" ? this._updateCameraOnTerrain() : this._updateZoomFromElevation()), this._constrain(), this._calcMatrices());
        }
        _updateZoomFromElevation() {
          if (this._seaLevelZoom == null || !this._elevation)
            return;
          const t = this._seaLevelZoom, s = this._elevation.getAtPointOrZero(this.locationCoordinate(this.center)), h = this.pixelsPerMeter / this.worldSize * s, _ = this._mercatorZfromZoom(t), y = this._mercatorZfromZoom(this._maxZoom), T = Math.max(_ - h, y);
          this._setZoom(this._zoomFromMercatorZ(T));
        }
        get padding() {
          return this._edgeInsets.toJSON();
        }
        set padding(t) {
          this._edgeInsets.equals(t) || (this._unmodified = !1, this._edgeInsets.interpolate(this._edgeInsets, t, 1), this._calcMatrices());
        }
        computeZoomRelativeTo(t) {
          const s = this.rayIntersectionCoordinate(this.pointRayIntersection(this.centerPoint, t.toAltitude()));
          let h;
          h = t.z < this._camera.position[2] ? [s.x, s.y, s.z] : [t.x, t.y, t.z];
          const _ = i.ab.vec3.length(i.ab.vec3.sub([], this._camera.position, h));
          return i.aw(this._zoomFromMercatorZ(_), this._minZoom, this._maxZoom);
        }
        setFreeCameraOptions(t) {
          if (!this.height || !t.position && !t.orientation)
            return;
          this._updateCameraState();
          let s = !1;
          if (t.orientation && !i.ab.quat.exactEquals(t.orientation, this._camera.orientation) && (s = this._setCameraOrientation(t.orientation)), t.position) {
            const h = [t.position.x, t.position.y, t.position.z];
            i.ab.vec3.exactEquals(h, this._camera.position) || (this._setCameraPosition(h), s = !0);
          }
          s && (this._updateStateFromCamera(), this.recenterOnTerrain());
        }
        getFreeCameraOptions() {
          this._updateCameraState();
          const t = this._camera.position, s = new Va();
          return s.position = new i.aa(t[0], t[1], t[2]), s.orientation = this._camera.orientation, s._elevation = this.elevation, s._renderWorldCopies = this.renderWorldCopies, s;
        }
        _setCameraOrientation(t) {
          if (!i.ab.quat.length(t))
            return !1;
          i.ab.quat.normalize(t, t);
          const s = i.ab.vec3.transformQuat([], [0, 0, -1], t), h = i.ab.vec3.transformQuat([], [0, -1, 0], t);
          if (h[2] < 0)
            return !1;
          const _ = Yr(s, h);
          return !!_ && (this._camera.orientation = _, !0);
        }
        _setCameraPosition(t) {
          const s = this.zoomScale(this.minZoom) * this.tileSize, h = this.zoomScale(this.maxZoom) * this.tileSize, _ = this.cameraToCenterDistance;
          t[2] = i.aw(t[2], _ / h, _ / s), this._camera.position = t;
        }
        get centerPoint() {
          return this._edgeInsets.getCenter(this.width, this.height);
        }
        get fovAboveCenter() {
          return this._fov * (0.5 + this.centerOffset.y / this.height);
        }
        isPaddingEqual(t) {
          return this._edgeInsets.equals(t);
        }
        interpolatePadding(t, s, h) {
          this._unmodified = !1, this._edgeInsets.interpolate(t, s, h), this._constrain(), this._calcMatrices();
        }
        coveringZoomLevel(t) {
          const s = (t.roundZoom ? Math.round : Math.floor)(this.zoom + this.scaleZoom(this.tileSize / t.tileSize));
          return Math.max(0, s);
        }
        getVisibleUnwrappedCoordinates(t) {
          const s = [new i.bQ(0, t)];
          if (this.renderWorldCopies) {
            const h = this.pointCoordinate(new i.P(0, 0)), _ = this.pointCoordinate(new i.P(this.width, 0)), y = this.pointCoordinate(new i.P(this.width, this.height)), T = this.pointCoordinate(new i.P(0, this.height)), z = Math.floor(Math.min(h.x, _.x, y.x, T.x)), R = Math.floor(Math.max(h.x, _.x, y.x, T.x)), F = 1;
            for (let N = z - F; N <= R + F; N++)
              N !== 0 && s.push(new i.bQ(N, t));
          }
          return s;
        }
        isLODDisabled(t) {
          return (!t || this.pitch <= 60) && this._edgeInsets.top <= this._edgeInsets.bottom && !this._elevation && !this.projection.isReprojectedInTileSpace;
        }
        extendTileCover(t, s, h) {
          let _ = [];
          const y = h !== void 0, T = !y;
          if (T && this.zoom < s || y && h[0] === 0 && h[1] === 0)
            return _;
          const z = /* @__PURE__ */ new Set(), R = (N, G, Z, W, te) => {
            const ee = i.c5(G, N, Z, W, te);
            z.has(ee) || (_.push(new i.aG(N, G, Z, W, te)), z.add(ee));
          };
          for (let N = 0; N < t.length; N++) {
            const G = t[N];
            if (T && G.canonical.z !== s)
              continue;
            const Z = G.canonical, W = G.overscaledZ, te = G.wrap, ee = 1 << Z.z, se = Z.x + 1 < ee, oe = Z.x > 0, he = Z.y + 1 < ee, _e = Z.y > 0, pe = G.wrap - (oe ? 0 : 1), Me = G.wrap + (se ? 0 : 1), xe = oe ? Z.x - 1 : ee - 1, we = se ? Z.x + 1 : 0;
            if (y)
              h[0] < 0 ? (R(W, Me, Z.z, we, Z.y), h[1] < 0 && he && (R(W, te, Z.z, Z.x, Z.y + 1), R(W, Me, Z.z, we, Z.y + 1)), h[1] > 0 && _e && (R(W, te, Z.z, Z.x, Z.y - 1), R(W, Me, Z.z, we, Z.y - 1))) : h[0] > 0 ? (R(W, pe, Z.z, xe, Z.y), h[1] < 0 && he && (R(W, te, Z.z, Z.x, Z.y + 1), R(W, pe, Z.z, xe, Z.y + 1)), h[1] > 0 && _e && (R(W, te, Z.z, Z.x, Z.y - 1), R(W, pe, Z.z, xe, Z.y - 1))) : h[1] < 0 && he ? R(W, te, Z.z, Z.x, Z.y + 1) : _e && R(W, te, Z.z, Z.x, Z.y - 1);
            else {
              const ve = G.visibleQuadrants;
              1 & ve && (R(W, pe, Z.z, xe, Z.y), _e && (R(W, te, Z.z, Z.x, Z.y - 1), R(W, pe, Z.z, xe, Z.y - 1))), 2 & ve && (R(W, Me, Z.z, we, Z.y), _e && (R(W, te, Z.z, Z.x, Z.y - 1), R(W, Me, Z.z, we, Z.y - 1))), 4 & ve && (R(W, pe, Z.z, xe, Z.y), he && (R(W, te, Z.z, Z.x, Z.y + 1), R(W, pe, Z.z, xe, Z.y + 1))), 8 & ve && (R(W, Me, Z.z, we, Z.y), he && (R(W, te, Z.z, Z.x, Z.y + 1), R(W, Me, Z.z, we, Z.y + 1)));
            }
          }
          const F = [];
          for (const N of _)
            _.some((G) => N.isChildOf(G)) || F.push(N);
          if (_ = F.filter((N) => !t.some((G) => !!(N.overscaledZ < s && G.isChildOf(N)) || N.equals(G) || N.isChildOf(G))), T) {
            const N = 1 << s, G = this.projection.name === "globe" ? this._camera.mercatorPosition : this.pointCoordinate(this.getCameraPoint()), Z = [N * G.x, N * G.y], W = 4, te = W * W;
            _ = _.filter((ee) => {
              const se = ee.canonical.x + 0.5 - Z[0], oe = ee.canonical.y + 0.5 - Z[1];
              return se * se + oe * oe < te;
            });
          }
          return _;
        }
        coveringTiles(t) {
          let s = this.coveringZoomLevel(t);
          const h = s, _ = this.elevation && this.elevation.exaggeration(), y = _ && !t.isTerrainDEM, T = this.projection.name === "mercator";
          if (t.minzoom !== void 0 && s < t.minzoom)
            return [];
          t.maxzoom !== void 0 && s > t.maxzoom && (s = t.maxzoom);
          const z = this.locationCoordinate(this.center), R = this.center.lat, F = 1 << s, N = [F * z.x, F * z.y, 0], G = this.projection.name === "globe", Z = !G, W = i.bR.fromInvProjectionMatrix(this.invProjMatrix, this.worldSize, s, Z), te = G ? this._camera.mercatorPosition : this.pointCoordinate(this.getCameraPoint()), ee = F * i.bH(1, this.center.lat), se = this._camera.position[2] / i.bH(1, this.center.lat), oe = [F * te.x, F * te.y, se * (Z ? 1 : ee)], he = G || _, _e = this.cameraToCenterDistance / t.tileSize * (t.roundZoom ? 1 : 0.502), pe = this.isLODDisabled(!0) ? s : 0;
          let Me;
          if (this._elevation && t.isTerrainDEM)
            Me = 1e4 * this._elevation.exaggeration();
          else if (this._elevation) {
            const Ge = this._elevation.getMinMaxForVisibleTiles();
            Me = Ge ? Ge.max : this._centerAltitude;
          } else
            Me = this._centerAltitude;
          const xe = t.isTerrainDEM ? -Me : this._elevation ? this._elevation.getMinElevationBelowMSL() : 0, we = this.projection.isReprojectedInTileSpace ? i.bS(this) : 1, ve = (Ge) => {
            const Je = new i.aa(Ge.x + 25e-6, Ge.y, Ge.z), _t = new i.aa(Ge.x, Ge.y + 25e-6, Ge.z), ct = Ge.toLngLat(), nt = Je.toLngLat(), Lt = _t.toLngLat(), bt = this.locationCoordinate(ct), zt = this.locationCoordinate(nt), Bt = this.locationCoordinate(Lt), oi = Math.hypot(zt.x - bt.x, zt.y - bt.y), $t = Math.hypot(Bt.x - bt.x, Bt.y - bt.y);
            return Math.sqrt(oi * $t) * we / 25e-6;
          }, Ae = (Ge) => {
            const lt = Me, Je = xe;
            return { aabb: i.bV(this, F, 0, 0, 0, Ge, Je, lt, this.projection), zoom: 0, x: 0, y: 0, minZ: Je, maxZ: lt, wrap: Ge, fullyVisible: !1 };
          }, Oe = [];
          let Xe = [];
          const He = s, ke = t.reparseOverscaled ? h : s, Ne = (se - this._centerAltitude) * ee, st = (Ge) => {
            if (!this._elevation || !Ge.tileID || !T)
              return;
            const lt = this._elevation.getMinMaxForTile(Ge.tileID), Je = Ge.aabb;
            lt ? (Je.min[2] = lt.min, Je.max[2] = lt.max, Je.center[2] = (Je.min[2] + Je.max[2]) / 2) : (Ge.shouldSplit = xt(Ge), Ge.shouldSplit || (Je.min[2] = Je.max[2] = Je.center[2] = this._centerAltitude));
          }, ut = (Ge, lt) => {
            if (0.707 * lt < Ge)
              return 1;
            const Je = lt / Ge;
            return Je / (1.4144271570014144 + (Math.pow(1.1, Je - 1.4144271570014144 + 1) - 1) / (1.1 - 1) - 1);
          }, xt = (Ge) => {
            if (Ge.zoom < pe)
              return !0;
            if (Ge.zoom === He)
              return !1;
            if (Ge.shouldSplit != null)
              return Ge.shouldSplit;
            const lt = Ge.aabb.distanceX(oe), Je = Ge.aabb.distanceY(oe);
            let _t = Ne, ct = 1;
            if (G) {
              _t = Ge.aabb.distanceZ(oe);
              const $t = Math.pow(2, Ge.zoom), Xt = i.aS((Ge.y + 1) / $t), ai = i.aS(Ge.y / $t), zi = Math.min(Math.max(R, Xt), ai), wi = i.c9(zi) / i.c9(R);
              if (ct = zi === R ? 1 / Math.max(1, this._mercatorScaleRatio - 0.3) : Math.min(1, wi / this._mercatorScaleRatio), this.zoom <= i.c6 && Ge.zoom === He - 1 && wi >= 0.9)
                return !0;
            } else if (y && (_t = Ge.aabb.distanceZ(oe) * ee), this.projection.isReprojectedInTileSpace && h <= 5) {
              const $t = Math.pow(2, Ge.zoom), Xt = ve(new i.aa((Ge.x + 0.5) / $t, (Ge.y + 0.5) / $t));
              ct = Xt > 0.85 ? 1 : Xt;
            }
            if (!T) {
              const $t = Math.sqrt(lt * lt + Je * Je + _t * _t);
              let Xt = (1 << He - Ge.zoom) * _e * ct;
              return Xt *= ut(Math.max(_t, Ne), $t), $t < Xt;
            }
            let nt = Number.MAX_VALUE, Lt = 0;
            const bt = Ge.aabb.getCorners(), zt = [];
            for (const $t of bt) {
              i.ab.vec3.sub(zt, $t, oe), G || (y ? zt[2] *= ee : zt[2] = Ne);
              const Xt = i.ab.vec3.dot(zt, this._camera.forward());
              Xt < nt && (nt = Xt, Lt = Math.abs(zt[2]));
            }
            let Bt = (1 << He - Ge.zoom) * _e * ct;
            if (Bt *= ut(Math.max(Lt, Ne), nt), nt < Bt)
              return !0;
            const oi = Ge.aabb.closestPoint(N);
            return oi[0] === N[0] && oi[1] === N[1];
          };
          if (this.renderWorldCopies)
            for (let Ge = 1; Ge <= 3; Ge++)
              Oe.push(Ae(-Ge)), Oe.push(Ae(Ge));
          for (Oe.push(Ae(0)); Oe.length > 0; ) {
            const Ge = Oe.pop(), lt = Ge.x, Je = Ge.y;
            let _t = Ge.fullyVisible;
            const ct = () => this.projection.name === "globe" && (Ge.y === 0 || Ge.y === (1 << Ge.zoom) - 1);
            if (!_t) {
              let nt = he ? Ge.aabb.intersects(W) : Ge.aabb.intersectsFlat(W);
              if (nt === 0 && ct()) {
                const Lt = new i.bT(Ge.zoom, lt, Je);
                nt = i.bU(this, F, Lt, !0).intersects(W);
              }
              if (nt === 0)
                continue;
              _t = nt === 2;
            }
            if (Ge.zoom !== He && xt(Ge))
              for (let nt = 0; nt < 4; nt++) {
                const Lt = (lt << 1) + nt % 2, bt = (Je << 1) + (nt >> 1), zt = { aabb: T ? Ge.aabb.quadrant(nt) : i.bV(this, F, Ge.zoom + 1, Lt, bt, Ge.wrap, Ge.minZ, Ge.maxZ, this.projection), zoom: Ge.zoom + 1, x: Lt, y: bt, wrap: Ge.wrap, fullyVisible: _t, tileID: void 0, shouldSplit: void 0, minZ: Ge.minZ, maxZ: Ge.maxZ };
                y && !G && (zt.tileID = new i.aG(Ge.zoom + 1 === He ? ke : Ge.zoom + 1, Ge.wrap, Ge.zoom + 1, Lt, bt), st(zt)), Oe.push(zt);
              }
            else {
              const nt = Ge.zoom === He ? ke : Ge.zoom;
              if (t.minzoom && t.minzoom > nt)
                continue;
              let Lt = 0;
              if (!_t) {
                let oi = he ? Ge.aabb.intersectsPrecise(W) : Ge.aabb.intersectsPreciseFlat(W);
                if (oi === 0 && ct()) {
                  const $t = new i.bT(Ge.zoom, lt, Je);
                  oi = i.bU(this, F, $t, !0).intersectsPrecise(W);
                }
                if (oi === 0)
                  continue;
                if (t.calculateQuadrantVisibility)
                  if (W.containsPoint(Ge.aabb.center))
                    Lt = 15;
                  else
                    for (let $t = 0; $t < 4; $t++)
                      Ge.aabb.quadrant($t).intersects(W) !== 0 && (Lt |= 1 << $t);
              }
              const bt = N[0] - (0.5 + lt + (Ge.wrap << Ge.zoom)) * (1 << s - Ge.zoom), zt = N[1] - 0.5 - Je, Bt = Ge.tileID ? Ge.tileID : new i.aG(nt, Ge.wrap, Ge.zoom, lt, Je);
              t.calculateQuadrantVisibility && (Bt.visibleQuadrants = Lt), Xe.push({ tileID: Bt, distanceSq: bt * bt + zt * zt });
            }
          }
          if (this.fogCullDistSq) {
            const Ge = this.fogCullDistSq, lt = this.horizonLineFromTop();
            Xe = Xe.filter((Je) => {
              const _t = [0, 0, 0, 1], ct = [i.ag, i.ag, 0, 1], nt = this.calculateFogTileMatrix(Je.tileID.toUnwrapped());
              i.ab.vec4.transformMat4(_t, _t, nt), i.ab.vec4.transformMat4(ct, ct, nt);
              const Lt = i.ab.vec4.min([], _t, ct), bt = i.ab.vec4.max([], _t, ct), zt = i.bW(Lt, bt);
              if (zt === 0)
                return !0;
              let Bt = !1;
              const oi = this._elevation;
              if (oi && zt > Ge && lt !== 0) {
                const $t = this.calculateProjMatrix(Je.tileID.toUnwrapped());
                let Xt;
                t.isTerrainDEM || (Xt = oi.getMinMaxForTile(Je.tileID)), Xt || (Xt = { min: xe, max: Me });
                const ai = i.c7(this.rotation), zi = [ai[0] * i.ag, ai[1] * i.ag, Xt.max];
                i.ab.vec3.transformMat4(zi, zi, $t), Bt = (1 - zi[1]) * this.height * 0.5 < lt;
              }
              return zt < Ge || Bt;
            });
          }
          return Xe.sort((Ge, lt) => Ge.distanceSq - lt.distanceSq).map((Ge) => Ge.tileID);
        }
        resize(t, s) {
          this.width = t, this.height = s, this.pixelsToGLUnits = [2 / t, -2 / s], this._constrain(), this._calcMatrices();
        }
        get unmodified() {
          return this._unmodified;
        }
        zoomScale(t) {
          return Math.pow(2, t);
        }
        scaleZoom(t) {
          return Math.log(t) / Math.LN2;
        }
        project(t) {
          const s = i.aw(t.lat, -i.bX, i.bX), h = this.projection.project(t.lng, s);
          return new i.P(h.x * this.worldSize, h.y * this.worldSize);
        }
        unproject(t) {
          return this.projection.unproject(t.x / this.worldSize, t.y / this.worldSize);
        }
        get point() {
          return this.project(this.center);
        }
        get pointMerc() {
          return this.point._div(this.worldSize);
        }
        get pixelsPerMeterRatio() {
          return this.pixelsPerMeter / i.bH(1, this.center.lat) / this.worldSize;
        }
        setLocationAtPoint(t, s) {
          let h, _;
          const y = this.centerPoint;
          if (this.projection.name === "globe") {
            const z = this.worldSize;
            h = (s.x - y.x) / z, _ = (s.y - y.y) / z;
          } else {
            const z = this.pointCoordinate(s), R = this.pointCoordinate(y);
            h = z.x - R.x, _ = z.y - R.y;
          }
          const T = this.locationCoordinate(t);
          this.setLocation(new i.aa(T.x - h, T.y - _));
        }
        setLocation(t) {
          this.center = this.coordinateLocation(t), this.projection.wrap && (this.center = this.center.wrap());
        }
        locationPoint(t) {
          return this.projection.locationPoint(this, t);
        }
        locationPoint3D(t) {
          return this.projection.locationPoint(this, t, !0);
        }
        pointLocation(t) {
          return this.coordinateLocation(this.pointCoordinate(t));
        }
        pointLocation3D(t) {
          return this.coordinateLocation(this.pointCoordinate3D(t));
        }
        locationCoordinate(t, s) {
          const h = s ? i.bH(s, t.lat) : void 0, _ = this.projection.project(t.lng, t.lat);
          return new i.aa(_.x, _.y, h);
        }
        coordinateLocation(t) {
          return this.projection.unproject(t.x, t.y);
        }
        pointRayIntersection(t, s) {
          const h = s ?? this._centerAltitude, _ = [t.x, t.y, 0, 1], y = [t.x, t.y, 1, 1];
          i.ab.vec4.transformMat4(_, _, this.pixelMatrixInverse), i.ab.vec4.transformMat4(y, y, this.pixelMatrixInverse);
          const T = y[3];
          i.ab.vec4.scale(_, _, 1 / _[3]), i.ab.vec4.scale(y, y, 1 / T);
          const z = _[2], R = y[2];
          return { p0: _, p1: y, t: z === R ? 0 : (h - z) / (R - z) };
        }
        screenPointToMercatorRay(t) {
          const s = [t.x, t.y, 0, 1], h = [t.x, t.y, 1, 1];
          return i.ab.vec4.transformMat4(s, s, this.pixelMatrixInverse), i.ab.vec4.transformMat4(h, h, this.pixelMatrixInverse), i.ab.vec4.scale(s, s, 1 / s[3]), i.ab.vec4.scale(h, h, 1 / h[3]), s[2] = i.bH(s[2], this._center.lat) * this.worldSize, h[2] = i.bH(h[2], this._center.lat) * this.worldSize, i.ab.vec4.scale(s, s, 1 / this.worldSize), i.ab.vec4.scale(h, h, 1 / this.worldSize), new i.aq([s[0], s[1], s[2]], i.ab.vec3.normalize([], i.ab.vec3.sub([], h, s)));
        }
        rayIntersectionCoordinate(t) {
          const { p0: s, p1: h, t: _ } = t, y = i.bH(s[2], this._center.lat), T = i.bH(h[2], this._center.lat);
          return new i.aa(i.af(s[0], h[0], _) / this.worldSize, i.af(s[1], h[1], _) / this.worldSize, i.af(y, T, _));
        }
        pointCoordinate(t, s = this._centerAltitude) {
          return this.projection.pointCoordinate(this, t.x, t.y, s);
        }
        pointCoordinate3D(t) {
          if (!this.elevation)
            return this.pointCoordinate(t);
          let s = this.projection.pointCoordinate3D(this, t.x, t.y);
          if (s)
            return new i.aa(s[0], s[1], s[2]);
          let h = 0, _ = this.horizonLineFromTop();
          if (t.y > _)
            return this.pointCoordinate(t);
          const y = 0.02 * _, T = t.clone();
          for (let z = 0; z < 10 && _ - h > y; z++) {
            T.y = i.af(h, _, 0.66);
            const R = this.projection.pointCoordinate3D(this, T.x, T.y);
            R ? (_ = T.y, s = R) : h = T.y;
          }
          return s ? new i.aa(s[0], s[1], s[2]) : this.pointCoordinate(t);
        }
        isPointAboveHorizon(t) {
          return this.projection.isPointAboveHorizon(this, t);
        }
        isPointOnSurface(t) {
          if (t.y < 0 || t.y > this.height || t.x < 0 || t.x > this.width)
            return !1;
          if (this.elevation || this.zoom >= i.bY)
            return !this.isPointAboveHorizon(t);
          const s = this.pointCoordinate(t);
          return s.y >= 0 && s.y <= 1;
        }
        _coordinatePoint(t, s) {
          const h = s && this.elevation ? this.elevation.getAtPointOrZero(t, this._centerAltitude) : this._centerAltitude, _ = [t.x * this.worldSize, t.y * this.worldSize, h + t.toAltitude(), 1];
          return i.ab.vec4.transformMat4(_, _, this.pixelMatrix), _[3] > 0 ? new i.P(_[0] / _[3], _[1] / _[3]) : new i.P(Number.MAX_VALUE, Number.MAX_VALUE);
        }
        _getBoundsNonRectangular() {
          const { top: t, left: s } = this._edgeInsets, h = this.height - this._edgeInsets.bottom, _ = this.width - this._edgeInsets.right, y = this.pointLocation3D(new i.P(s, t)), T = this.pointLocation3D(new i.P(_, t)), z = this.pointLocation3D(new i.P(_, h)), R = this.pointLocation3D(new i.P(s, h));
          let F = Math.min(y.lng, T.lng, z.lng, R.lng), N = Math.max(y.lng, T.lng, z.lng, R.lng), G = Math.min(y.lat, T.lat, z.lat, R.lat), Z = Math.max(y.lat, T.lat, z.lat, R.lat);
          const W = Math.pow(2, -this.zoom) / 16 * 270, te = this.projection.name === "globe" ? 1 : 4, ee = (se, oe, he, _e, pe) => {
            const Me = (se + he) / 2, xe = (oe + _e) / 2, we = new i.P(Me, xe), { lng: ve, lat: Ae } = this.pointLocation3D(we), Oe = Math.max(0, F - ve, G - Ae, ve - N, Ae - Z);
            F = Math.min(F, ve), N = Math.max(N, ve), G = Math.min(G, Ae), Z = Math.max(Z, Ae), (pe < te || Oe > W) && (ee(se, oe, Me, xe, pe + 1), ee(Me, xe, he, _e, pe + 1));
          };
          if (ee(s, t, _, t, 1), ee(_, t, _, h, 1), ee(_, h, s, h, 1), ee(s, h, s, t, 1), this.projection.name === "globe") {
            const [se, oe] = i.bZ(this);
            se ? (Z = 90, N = 180, F = -180) : oe && (G = -90, N = 180, F = -180);
          }
          return new i.az(new i.bO(F, G), new i.bO(N, Z));
        }
        _getBoundsRectangular(t, s) {
          const { top: h, left: _ } = this._edgeInsets, y = this.height - this._edgeInsets.bottom, T = this.width - this._edgeInsets.right, z = new i.P(_, h), R = new i.P(T, h), F = new i.P(T, y), N = new i.P(_, y);
          let G = this.pointCoordinate(z, t), Z = this.pointCoordinate(R, t);
          const W = this.pointCoordinate(F, s), te = this.pointCoordinate(N, s), ee = (se, oe) => (oe.y - se.y) / (oe.x - se.x);
          return G.y > 1 && Z.y >= 0 ? G = new i.aa((1 - te.y) / ee(te, G) + te.x, 1) : G.y < 0 && Z.y <= 1 && (G = new i.aa(-te.y / ee(te, G) + te.x, 0)), Z.y > 1 && G.y >= 0 ? Z = new i.aa((1 - W.y) / ee(W, Z) + W.x, 1) : Z.y < 0 && G.y <= 1 && (Z = new i.aa(-W.y / ee(W, Z) + W.x, 0)), new i.az().extend(this.coordinateLocation(G)).extend(this.coordinateLocation(Z)).extend(this.coordinateLocation(te)).extend(this.coordinateLocation(W));
        }
        _getBoundsRectangularTerrain() {
          const t = this.elevation;
          if (!t.visibleDemTiles.length || t.isUsingMockSource())
            return this._getBoundsRectangular(0, 0);
          const s = t.visibleDemTiles.reduce((h, _) => {
            if (_.dem) {
              const y = _.dem.tree;
              h.min = Math.min(h.min, y.minimums[0]), h.max = Math.max(h.max, y.maximums[0]);
            }
            return h;
          }, { min: Number.MAX_VALUE, max: 0 });
          return this._getBoundsRectangular(s.min * t.exaggeration(), s.max * t.exaggeration());
        }
        getBounds() {
          return this.projection.name === "mercator" || this.projection.name === "equirectangular" ? this._terrainEnabled() ? this._getBoundsRectangularTerrain() : this._getBoundsRectangular(0, 0) : this._getBoundsNonRectangular();
        }
        horizonLineFromTop(t = !0) {
          const s = this.height / 2 / Math.tan(this._fov / 2) / Math.tan(Math.max(this._pitch, 0.1)) - this.centerOffset.y, h = this.height / 2 - s * (1 - this._horizonShift);
          return t ? Math.max(0, h) : h;
        }
        getMaxBounds() {
          return this.maxBounds;
        }
        setMaxBounds(t) {
          this.maxBounds = t, this.minLat = -i.bX, this.maxLat = i.bX, this.minLng = -180, this.maxLng = 180, t && (this.minLat = t.getSouth(), this.maxLat = t.getNorth(), this.minLng = t.getWest(), this.maxLng = t.getEast(), this.maxLng < this.minLng && (this.maxLng += 360)), this.worldMinX = i.at(this.minLng) * this.tileSize, this.worldMaxX = i.at(this.maxLng) * this.tileSize, this.worldMinY = i.aA(this.maxLat) * this.tileSize, this.worldMaxY = i.aA(this.minLat) * this.tileSize, this._constrain();
        }
        calculatePosMatrix(t, s) {
          return this.projection.createTileMatrix(this, s, t);
        }
        calculateDistanceTileData(t) {
          const s = t.key, h = this._distanceTileDataCache;
          if (h[s])
            return h[s];
          const _ = t.canonical, y = 1 / this.height, T = this.cameraWorldSize, z = T / this.zoomScale(_.z), R = (_.x + Math.pow(2, _.z) * t.wrap) * z, F = _.y * z, N = this.point;
          N.x *= T / this.worldSize, N.y *= T / this.worldSize;
          const G = this.angle, Z = Math.sin(-G), W = -Math.cos(-G);
          return h[s] = { bearing: [Z, W], center: [(N.x - R) * y, (N.y - F) * y], scale: z / i.ag * y }, h[s];
        }
        calculateFogTileMatrix(t) {
          const s = t.key, h = this._fogTileMatrixCache;
          if (h[s])
            return h[s];
          const _ = this.projection.createTileMatrix(this, this.cameraWorldSizeForFog, t);
          return i.ab.mat4.multiply(_, this.worldToFogMatrix, _), h[s] = new Float32Array(_), h[s];
        }
        calculateProjMatrix(t, s = !1, h = !1) {
          const _ = t.key;
          let y;
          if (y = h ? this._expandedProjMatrixCache : s ? this._alignedProjMatrixCache : this._projMatrixCache, y[_])
            return y[_];
          const T = this.calculatePosMatrix(t, this.worldSize);
          let z;
          return z = this.projection.isReprojectedInTileSpace ? this.mercatorMatrix : h ? this.expandedFarZProjMatrix : s ? this.alignedProjMatrix : this.projMatrix, i.ab.mat4.multiply(T, z, T), y[_] = new Float32Array(T), y[_];
        }
        calculatePixelsToTileUnitsMatrix(t) {
          const s = t.tileID.key, h = this._pixelsToTileUnitsCache;
          if (h[s])
            return h[s];
          const _ = i.b_(t, this);
          return h[s] = _, h[s];
        }
        customLayerMatrix() {
          return this.mercatorMatrix.slice();
        }
        globeToMercatorMatrix() {
          if (this.projection.name === "globe") {
            const t = 1 / this.worldSize, s = i.ab.mat4.fromScaling([], [t, t, t]);
            return i.ab.mat4.multiply(s, s, this.globeMatrix), s;
          }
        }
        recenterOnTerrain() {
          if (!this._elevation || this.projection.name === "globe")
            return;
          const t = this._elevation;
          this._updateCameraState();
          const s = i.bH(1, this._center.lat) * this.worldSize, h = this._computeCameraPosition(s), _ = this._camera.forward(), y = i.bH(1, this._center.lat);
          h[2] /= y, _[2] /= y, i.ab.vec3.normalize(_, _);
          const T = t.raycast(h, _, t.exaggeration());
          if (T) {
            const z = i.ab.vec3.scaleAndAdd([], h, _, T), R = new i.aa(z[0], z[1], i.bH(z[2], i.aS(z[1]))), F = (R.z + i.ab.vec3.length([R.x - h[0], R.y - h[1], R.z - h[2] * y])) * this._pixelsPerMercatorPixel;
            this._seaLevelZoom = this._zoomFromMercatorZ(F), this._centerAltitude = R.toAltitude(), this._center = this.coordinateLocation(R), this._updateZoomFromElevation(), this._constrain(), this._calcMatrices();
          }
        }
        _constrainCamera(t = !1) {
          if (!this._elevation)
            return;
          const s = this._elevation, h = i.bH(1, this._center.lat) * this.worldSize, _ = this._computeCameraPosition(h), y = s.getAtPointOrZero(new i.aa(..._)), T = this.pixelsPerMeter / this.worldSize * y, z = this._minimumHeightOverTerrain(), R = _[2] - T;
          if (R <= z)
            if (R < 0 || t) {
              const F = this.locationCoordinate(this._center, this._centerAltitude), N = [_[0], _[1], F.z - _[2]], G = i.ab.vec3.length(N);
              N[2] -= (z - R) / this._pixelsPerMercatorPixel;
              const Z = i.ab.vec3.length(N);
              if (Z === 0)
                return;
              i.ab.vec3.scale(N, N, G / Z * this._pixelsPerMercatorPixel), this._camera.position = [_[0], _[1], F.z * this._pixelsPerMercatorPixel - N[2]], this._updateStateFromCamera();
            } else
              this._isCameraConstrained = !0;
        }
        _constrain() {
          if (!this.center || !this.width || !this.height || this._constraining)
            return;
          this._constraining = !0;
          const t = this.projection.name === "globe" || this.mercatorFromTransition;
          if (this.projection.isReprojectedInTileSpace || t) {
            const Z = this.center;
            return Z.lat = i.aw(Z.lat, this.minLat, this.maxLat), (this.maxBounds || !this.renderWorldCopies && !t) && (Z.lng = i.aw(Z.lng, this.minLng, this.maxLng)), this.center = Z, void (this._constraining = !1);
          }
          const s = this._unmodified, { x: h, y: _ } = this.point;
          let y = 0, T = h, z = _;
          const R = this.width / 2, F = this.height / 2, N = this.worldMinY * this.scale, G = this.worldMaxY * this.scale;
          if (_ - F < N && (z = N + F), _ + F > G && (z = G - F), G - N < this.height && (y = Math.max(y, this.height / (G - N)), z = (G + N) / 2), this.maxBounds || !this._renderWorldCopies || !this.projection.wrap) {
            const Z = this.worldMinX * this.scale, W = this.worldMaxX * this.scale, te = this.worldSize / 2 - (Z + W) / 2;
            T = (h + te + this.worldSize) % this.worldSize - te, T - R < Z && (T = Z + R), T + R > W && (T = W - R), W - Z < this.width && (y = Math.max(y, this.width / (W - Z)), T = (W + Z) / 2);
          }
          T === h && z === _ || (this.center = this.unproject(new i.P(T, z))), y && (this.zoom += this.scaleZoom(y)), this._constrainCamera(), this._unmodified = s, this._constraining = !1;
        }
        _minZoomForBounds() {
          let t = Math.max(0, this.scaleZoom(this.height / (this.worldMaxY - this.worldMinY)));
          return this.maxBounds && (t = Math.max(t, this.scaleZoom(this.width / (this.worldMaxX - this.worldMinX)))), t;
        }
        _maxCameraBoundsDistance() {
          return this._mercatorZfromZoom(this._minZoomForBounds());
        }
        _calcMatrices() {
          if (!this.height)
            return;
          const t = this.centerOffset, s = this.projection.name === "globe", h = this.pixelsPerMeter;
          this.projection.name === "globe" && (this._mercatorScaleRatio = i.bH(1, this.center.lat) / i.bH(1, i.c8));
          const _ = i.b$(this.projection, this.zoom, this.width, this.height, 1024);
          this._pixelsPerMercatorPixel = this.projection.pixelSpaceConversion(this.center.lat, this.worldSize, _), this.cameraToCenterDistance = 0.5 / Math.tan(0.5 * this._fov) * this.height * this._pixelsPerMercatorPixel, this._updateCameraState(), this._farZ = this.projection.farthestPixelDistance(this), this._nearZ = this.height / 50;
          const y = this.projection.zAxisUnit === "meters" ? h : 1, T = this._camera.getWorldToCamera(this.worldSize, y);
          let z;
          const R = this._camera.getCameraToClipPerspective(this._fov, this.width / this.height, this._nearZ, this._farZ);
          if (R[8] = 2 * -t.x / this.width, R[9] = 2 * t.y / this.height, this.isOrthographic) {
            let Ae = 0.5 * this.height / Math.tan(this._fov / 2) * 1 * Math.tan(0.5 * this._fov), Oe = Ae * this.aspect, Xe = -Oe, He = -Ae;
            Oe -= t.x, Xe -= t.x, Ae += t.y, He += t.y, z = this._camera.getCameraToClipOrthographic(Xe, Oe, He, Ae, this._nearZ, this._farZ), ((ke, Ne, st, ut) => {
              for (let xt = 0; xt < 16; xt++)
                ke[xt] = Wl(Ne[xt], st[xt], ut);
            })(z, z, R, Tt(this.pitch >= 15 ? 1 : this.pitch / 15));
          } else
            z = R;
          const F = i.ab.mat4.mul([], R, T);
          let N = i.ab.mat4.mul([], z, T);
          if (this.projection.isReprojectedInTileSpace) {
            const Ae = this.locationCoordinate(this.center), Oe = i.ab.mat4.identity([]);
            i.ab.mat4.translate(Oe, Oe, [Ae.x * this.worldSize, Ae.y * this.worldSize, 0]), i.ab.mat4.multiply(Oe, Oe, i.c0(this)), i.ab.mat4.translate(Oe, Oe, [-Ae.x * this.worldSize, -Ae.y * this.worldSize, 0]), i.ab.mat4.multiply(N, N, Oe), i.ab.mat4.multiply(F, F, Oe), this.inverseAdjustmentMatrix = i.c1(this);
          } else
            this.inverseAdjustmentMatrix = [1, 0, 0, 1];
          if (this.mercatorMatrix = i.ab.mat4.scale([], N, [this.worldSize, this.worldSize, this.worldSize / y, 1]), this.projMatrix = N, this.invProjMatrix = i.ab.mat4.invert(new Float64Array(16), this.projMatrix), s) {
            const Ae = this._camera.getCameraToClipPerspective(this._fov, this.width / this.height, this._nearZ, 1 / 0);
            Ae[8] = 2 * -t.x / this.width, Ae[9] = 2 * t.y / this.height, this.expandedFarZProjMatrix = i.ab.mat4.mul([], Ae, T);
          } else
            this.expandedFarZProjMatrix = this.projMatrix;
          const G = i.ab.mat4.invert([], z);
          this.frustumCorners = i.c2.fromInvProjectionMatrix(G, this.horizonLineFromTop(), this.height), this.cameraFrustum = i.bR.fromInvProjectionMatrix(this.invProjMatrix, this.worldSize, 0, !s);
          const Z = new Float32Array(16);
          i.ab.mat4.identity(Z), i.ab.mat4.scale(Z, Z, [1, -1, 1]), i.ab.mat4.rotateX(Z, Z, this._pitch), i.ab.mat4.rotateZ(Z, Z, this.angle);
          const W = i.ab.mat4.perspective(new Float32Array(16), this._fov, this.width / this.height, this._nearZ, this._farZ);
          this.starsProjMatrix = i.ab.mat4.clone(W);
          const te = (Math.PI / 2 - this._pitch) * (this.height / this._fov) * this._horizonShift;
          W[8] = 2 * -t.x / this.width, W[9] = 2 * (t.y + te) / this.height, this.skyboxMatrix = i.ab.mat4.multiply(Z, W, Z);
          const ee = this.point, se = ee.x, oe = ee.y, he = this.width % 2 / 2, _e = this.height % 2 / 2, pe = Math.cos(this.angle), Me = Math.sin(this.angle), xe = se - Math.round(se) + pe * he + Me * _e, we = oe - Math.round(oe) + pe * _e + Me * he, ve = new Float64Array(N);
          if (i.ab.mat4.translate(ve, ve, [xe > 0.5 ? xe - 1 : xe, we > 0.5 ? we - 1 : we, 0]), this.alignedProjMatrix = ve, N = i.ab.mat4.create(), i.ab.mat4.scale(N, N, [this.width / 2, -this.height / 2, 1]), i.ab.mat4.translate(N, N, [1, -1, 0]), this.labelPlaneMatrix = N, N = i.ab.mat4.create(), i.ab.mat4.scale(N, N, [1, -1, 1]), i.ab.mat4.translate(N, N, [-1, -1, 0]), i.ab.mat4.scale(N, N, [2 / this.width, 2 / this.height, 1]), this.glCoordMatrix = N, this.pixelMatrix = i.ab.mat4.multiply(new Float64Array(16), this.labelPlaneMatrix, F), this._calcFogMatrices(), this._distanceTileDataCache = {}, N = i.ab.mat4.invert(new Float64Array(16), this.pixelMatrix), !N)
            throw new Error("failed to invert matrix");
          if (this.pixelMatrixInverse = N, this.projection.name === "globe" || this.mercatorFromTransition) {
            this.globeMatrix = i.c3(this);
            const Ae = [this.globeMatrix[12], this.globeMatrix[13], this.globeMatrix[14]];
            this.globeCenterInViewSpace = i.ab.vec3.transformMat4(Ae, Ae, T), this.globeRadius = this.worldSize / 2 / Math.PI - 1;
          } else
            this.globeMatrix = N;
          this._projMatrixCache = {}, this._alignedProjMatrixCache = {}, this._pixelsToTileUnitsCache = {}, this._expandedProjMatrixCache = {};
        }
        _calcFogMatrices() {
          this._fogTileMatrixCache = {};
          const t = this.cameraWorldSizeForFog, s = this.cameraPixelsPerMeter, h = this._camera.position, _ = 1 / this.height / this._pixelsPerMercatorPixel, y = [t, t, s];
          i.ab.vec3.scale(y, y, _), i.ab.vec3.scale(h, h, -1), i.ab.vec3.multiply(h, h, y);
          const T = i.ab.mat4.create();
          i.ab.mat4.translate(T, T, h), i.ab.mat4.scale(T, T, y), this.mercatorFogMatrix = T, this.worldToFogMatrix = this._camera.getWorldToCameraPosition(t, s, _);
        }
        _computeCameraPosition(t) {
          const s = (t = t || this.pixelsPerMeter) / this.pixelsPerMeter, h = this._camera.forward(), _ = this.point, y = this._mercatorZfromZoom(this._seaLevelZoom ? this._seaLevelZoom : this._zoom) * s - t / this.worldSize * this._centerAltitude;
          return [_.x / this.worldSize - h[0] * y, _.y / this.worldSize - h[1] * y, t / this.worldSize * this._centerAltitude - h[2] * y];
        }
        _updateCameraState() {
          this.height && (this._camera.setPitchBearing(this._pitch, this.angle), this._camera.position = this._computeCameraPosition());
        }
        _translateCameraConstrained(t) {
          const s = this._maxCameraBoundsDistance() * Math.cos(this._pitch), h = this._camera.position[2], _ = t[2];
          let y = 1;
          this.projection.wrap && (this.center = this.center.wrap()), _ > 0 && (y = Math.min((s - h) / _, 1)), this._camera.position = i.ab.vec3.scaleAndAdd([], this._camera.position, t, y), this._updateStateFromCamera();
        }
        _updateStateFromCamera() {
          const t = this._camera.position, s = this._camera.forward(), { pitch: h, bearing: _ } = this._camera.getPitchBearing(), y = i.bH(this._centerAltitude, this.center.lat) * this._pixelsPerMercatorPixel, T = this._mercatorZfromZoom(this._maxZoom) * Math.cos(i.ai(this._maxPitch)), z = Math.max((t[2] - y) / Math.cos(h), T), R = this._zoomFromMercatorZ(z);
          i.ab.vec3.scaleAndAdd(t, t, s, z), this._pitch = i.aw(h, i.ai(this.minPitch), i.ai(this.maxPitch)), this.angle = i.bF(_, -Math.PI, Math.PI), this._setZoom(i.aw(R, this._minZoom, this._maxZoom)), this._updateSeaLevelZoom(), this._center = this.coordinateLocation(new i.aa(t[0], t[1], t[2])), this._unmodified = !1, this._constrain(), this._calcMatrices();
        }
        _worldSizeFromZoom(t) {
          return Math.pow(2, t) * this.tileSize;
        }
        _mercatorZfromZoom(t) {
          return this.cameraToCenterDistance / this._worldSizeFromZoom(t);
        }
        _minimumHeightOverTerrain() {
          const t = Math.min(this._seaLevelZoom != null ? this._seaLevelZoom : this._zoom, this._maxZoom) + 4;
          return this._mercatorZfromZoom(t);
        }
        _zoomFromMercatorZ(t) {
          return this.scaleZoom(this.cameraToCenterDistance / (t * this.tileSize));
        }
        zoomFromMercatorZAdjusted(t) {
          let s = 0, h = i.bY, _ = 0, y = 1 / 0;
          for (; h - s > 1e-6 && h > s; ) {
            const T = s + 0.5 * (h - s), z = this.tileSize * Math.pow(2, T), R = this.getCameraToCenterDistance(this.projection, T, z), F = this.scaleZoom(R / (t * this.tileSize)), N = Math.abs(T - F);
            N < y && (y = N, _ = T), T < F ? s = T : h = T;
          }
          return _;
        }
        _terrainEnabled() {
          return !(!this._elevation || !this.projection.supportsTerrain && (i.w("Terrain is not yet supported with alternate projections. Use mercator or globe to enable terrain."), 1));
        }
        anyCornerOffEdge(t, s) {
          const h = Math.min(t.x, s.x), _ = Math.max(t.x, s.x), y = Math.min(t.y, s.y), T = Math.max(t.y, s.y);
          if (y < this.horizonLineFromTop(!1))
            return !0;
          if (this.projection.name !== "mercator")
            return !1;
          const z = [new i.P(h, y), new i.P(_, T), new i.P(h, T), new i.P(_, y)], R = this.renderWorldCopies ? -3 : 0, F = this.renderWorldCopies ? 4 : 1;
          for (const N of z) {
            const G = this.pointRayIntersection(N);
            if (G.t < 0)
              return !0;
            const Z = this.rayIntersectionCoordinate(G);
            if (Z.x < R || Z.y < 0 || Z.x > F || Z.y > 1)
              return !0;
          }
          return !1;
        }
        isHorizonVisible() {
          return this.pitch + i.c4(this.fovAboveCenter) > 88 || this.anyCornerOffEdge(new i.P(0, 0), new i.P(this.width, this.height));
        }
        zoomDeltaToMovement(t, s) {
          const h = i.ab.vec3.length(i.ab.vec3.sub([], this._camera.position, t)), _ = this._zoomFromMercatorZ(h) + s;
          return h - this._mercatorZfromZoom(_);
        }
        getCameraPoint() {
          if (this.projection.name === "globe") {
            const t = function([s, h, _], y) {
              const T = [s, h, _, 1];
              i.ab.vec4.transformMat4(T, T, y);
              const z = T[3] = Math.max(T[3], 1e-6);
              return T[0] /= z, T[1] /= z, T[2] /= z, T;
            }([this.globeMatrix[12], this.globeMatrix[13], this.globeMatrix[14]], this.pixelMatrix);
            return new i.P(t[0], t[1]);
          }
          {
            const t = Math.tan(this._pitch) * (this.cameraToCenterDistance || 1);
            return this.centerPoint.add(new i.P(0, t));
          }
        }
        getCameraToCenterDistance(t, s = this.zoom, h = this.worldSize) {
          const _ = i.b$(t, s, this.width, this.height, 1024), y = t.pixelSpaceConversion(this.center.lat, h, _);
          let T = 0.5 / Math.tan(0.5 * this._fov) * this.height * y;
          return this.isOrthographic && (T = Wl(1, T, Tt(this.pitch >= 15 ? 1 : this.pitch / 15))), T;
        }
        getWorldToCameraMatrix() {
          const t = this._camera.getWorldToCamera(this.worldSize, this.projection.zAxisUnit === "meters" ? this.pixelsPerMeter : 1);
          return this.projection.name === "globe" && i.ab.mat4.multiply(t, t, this.globeMatrix), t;
        }
        getFrustum(t) {
          return i.bR.fromInvProjectionMatrix(this.invProjMatrix, this.worldSize, t, this.projection.zAxisUnit === "meters");
        }
      }
      const Mo = (c, t) => {
        if (t > 0 && c.terrain && i.w("Cutoff is currently disabled on terrain"), t <= 0 || c.terrain)
          return { shouldRenderCutoff: !1, uniformValues: { u_cutoff_params: [0, 0, 0, 1] } };
        const s = c.transform, h = Math.max(Math.abs(s._zoom - (c.minCutoffZoom - 1)), 1), _ = s.isLODDisabled(!1) ? i.ac(60, 45, s.pitch) : i.ac(30, 15, s.pitch), y = s._farZ - s._nearZ, T = t * s.height, z = ((1 - (R = _)) * s.cameraToCenterDistance + R * (s._farZ + T)) * h;
        var R;
        return { shouldRenderCutoff: _ < 1, uniformValues: { u_cutoff_params: [s._nearZ, s._farZ, (z - s._nearZ) / y, (z - T - s._nearZ) / y] } };
      }, gs = { cascadeCount: 2, normalOffset: 3, shadowMapResolution: 2048 };
      class Gh {
        constructor(t, s) {
          this.aabb = t, this.lastCascade = s;
        }
      }
      class Dr {
        add(t, s) {
          const h = this.receivers[t.key];
          h !== void 0 ? (h.aabb.min[0] = Math.min(h.aabb.min[0], s.min[0]), h.aabb.min[1] = Math.min(h.aabb.min[1], s.min[1]), h.aabb.min[2] = Math.min(h.aabb.min[2], s.min[2]), h.aabb.max[0] = Math.max(h.aabb.max[0], s.max[0]), h.aabb.max[1] = Math.max(h.aabb.max[1], s.max[1]), h.aabb.max[2] = Math.max(h.aabb.max[2], s.max[2])) : this.receivers[t.key] = new Gh(s, null);
        }
        clear() {
          this.receivers = {};
        }
        get(t) {
          return this.receivers[t.key];
        }
        computeRequiredCascades(t, s, h) {
          const _ = i.cd.fromPoints(t.points);
          let y = 0;
          for (const T in this.receivers) {
            const z = this.receivers[T];
            if (!z || !_.intersectsAabb(z.aabb))
              continue;
            z.aabb.min = _.closestPoint(z.aabb.min), z.aabb.max = _.closestPoint(z.aabb.max);
            const R = z.aabb.getCorners();
            for (let F = 0; F < h.length; F++) {
              let N = !0;
              for (const G of R) {
                const Z = [G[0] * s, G[1] * s, G[2]];
                if (i.ab.vec3.transformMat4(Z, Z, h[F].matrix), Z[0] < -1 || Z[0] > 1 || Z[1] < -1 || Z[1] > 1) {
                  N = !1;
                  break;
                }
              }
              if (z.lastCascade = F, y = Math.max(y, F), N)
                break;
            }
          }
          return y + 1;
        }
      }
      class So {
        constructor(t) {
          this.painter = t, this._enabled = !1, this._shadowLayerCount = 0, this._numCascadesToRender = 0, this._cascades = [], this._groundShadowTiles = [], this._receivers = new Dr(), this._depthMode = new Wt(t.context.gl.LEQUAL, Wt.ReadWrite, [0, 1]), this._uniformValues = { u_light_matrix_0: new Float32Array(16), u_light_matrix_1: new Float32Array(16), u_shadow_intensity: 0, u_fade_range: [0, 0], u_shadow_normal_offset: [1, 1, 1], u_shadow_texel_size: 1, u_shadow_map_resolution: 1, u_shadow_direction: [0, 0, 1], u_shadow_bias: [36e-5, 12e-4, 0.012], u_shadowmap_0: 0, u_shadowmap_1: 0 }, this._forceDisable = !1, this.useNormalOffset = !1, t.tp.registerParameter(this, ["Shadows"], "_forceDisable", { label: "forceDisable" }, () => {
            this.painter.style.map.triggerRepaint();
          }), t.tp.registerParameter(gs, ["Shadows"], "cascadeCount", { min: 1, max: 2, step: 1 }), t.tp.registerParameter(gs, ["Shadows"], "normalOffset", { min: 0, max: 10, step: 0.05 }), t.tp.registerParameter(gs, ["Shadows"], "shadowMapResolution", { min: 32, max: 2048, step: 32 }), t.tp.registerBinding(this, ["Shadows"], "_numCascadesToRender", { readonly: !0, label: "numCascadesToRender" });
        }
        destroy() {
          for (const t of this._cascades)
            t.texture.destroy(), t.framebuffer.destroy();
          this._cascades = [];
        }
        updateShadowParameters(t, s) {
          const h = this.painter;
          if (this._enabled = !1, this._shadowLayerCount = 0, this._receivers.clear(), !s || !s.properties)
            return;
          const _ = s.properties.get("shadow-intensity");
          if (!s.shadowsEnabled() || _ <= 0 || (this._shadowLayerCount = h.style.order.reduce((te, ee) => {
            const se = h.style._mergedLayers[ee];
            return te + (se.hasShadowPass() && !se.isHidden(t.zoom) ? 1 : 0);
          }, 0), this._enabled = this._shadowLayerCount > 0, !this.enabled))
            return;
          const y = h.context, T = gs.shadowMapResolution, z = gs.shadowMapResolution;
          if (this._cascades.length === 0 || gs.shadowMapResolution !== this._cascades[0].texture.size[0]) {
            this._cascades = [];
            for (let te = 0; te < gs.cascadeCount; ++te) {
              const ee = h._shadowMapDebug, se = y.gl, oe = y.createFramebuffer(T, z, ee, "texture"), he = new i.T(y, { width: T, height: z, data: null }, se.DEPTH_COMPONENT16);
              if (oe.depthAttachment.set(he.texture), ee) {
                const _e = new i.T(y, { width: T, height: z, data: null }, se.RGBA8);
                oe.colorAttachment.set(_e.texture);
              }
              this._cascades.push({ framebuffer: oe, texture: he, matrix: [], far: 0, boundingSphereRadius: 0, frustum: new i.bR(), scale: 0 });
            }
          }
          this.shadowDirection = Yo(s);
          let R = 0;
          if (t.elevation) {
            const te = t.elevation, ee = [1e4, -1e4];
            te.visibleDemTiles.filter((se) => se.dem).forEach((se) => {
              const oe = se.dem.tree;
              ee[0] = Math.min(ee[0], oe.minimums[0]), ee[1] = Math.max(ee[1], oe.maximums[0]);
            }), ee[0] !== 1e4 && (R = (ee[1] - ee[0]) * te.exaggeration());
          }
          const F = 1.5 * t.cameraToCenterDistance, N = 3 * F, G = new Float64Array(16);
          for (let te = 0; te < this._cascades.length; ++te) {
            const ee = this._cascades[te];
            let se = t.height / 50, oe = 1;
            gs.cascadeCount === 1 ? oe = N : te === 0 ? oe = F : (se = F, oe = N);
            const [he, _e] = Eo(t, this.shadowDirection, se, oe, gs.shadowMapResolution, R);
            ee.scale = t.scale, ee.matrix = he, ee.boundingSphereRadius = _e, i.ab.mat4.invert(G, ee.matrix), ee.frustum = i.bR.fromInvProjectionMatrix(G, 1, 0, !0), ee.far = oe;
          }
          const Z = this._cascades.length - 1;
          this._uniformValues.u_fade_range = [0.75 * this._cascades[Z].far, this._cascades[Z].far], this._uniformValues.u_shadow_intensity = _, this._uniformValues.u_shadow_direction = [this.shadowDirection[0], this.shadowDirection[1], this.shadowDirection[2]], this._uniformValues.u_shadow_texel_size = 1 / gs.shadowMapResolution, this._uniformValues.u_shadow_map_resolution = gs.shadowMapResolution, this._uniformValues.u_shadowmap_0 = bs.ShadowMap0, this._uniformValues.u_shadowmap_1 = bs.ShadowMap0 + 1, this._groundShadowTiles = h.transform.coveringTiles({ tileSize: 512, renderWorldCopies: !0 });
          const W = h.transform.elevation;
          for (const te of this._groundShadowTiles) {
            let ee = { min: 0, max: 0 };
            if (W) {
              const se = W.getMinMaxForTile(te);
              se && (ee = se);
            }
            this.addShadowReceiver(te.toUnwrapped(), ee.min, ee.max);
          }
        }
        get enabled() {
          return this._enabled && !this._forceDisable;
        }
        set enabled(t) {
          this._enabled = t;
        }
        drawShadowPass(t, s) {
          if (!this.enabled)
            return;
          const h = this.painter, _ = h.context;
          this._numCascadesToRender = this._receivers.computeRequiredCascades(h.transform.getFrustum(0), h.transform.worldSize, this._cascades), _.viewport.set([0, 0, gs.shadowMapResolution, gs.shadowMapResolution]);
          for (let y = 0; y < this._numCascadesToRender; ++y) {
            h.currentShadowCascade = y, _.bindFramebuffer.set(this._cascades[y].framebuffer.framebuffer), _.clear({ color: i.aj.white, depth: 1 });
            for (const T of t.order) {
              const z = t._mergedLayers[T];
              if (!z.hasShadowPass() || z.isHidden(h.transform.zoom))
                continue;
              const R = t.getLayerSourceCache(z), F = R ? s[R.id] : void 0;
              (z.type === "model" || F && F.length) && h.renderLayer(h, R, z, F);
            }
          }
          h.currentShadowCascade = 0;
        }
        drawGroundShadows() {
          if (!this.enabled)
            return;
          const t = this.painter, s = t.style, h = t.context, _ = s.directionalLight, y = s.ambientLight;
          if (!_ || !y)
            return;
          const T = [], z = Mo(t, t.longestCutoffRange);
          z.shouldRenderCutoff && T.push("RENDER_CUTOFF"), T.push("RENDER_SHADOWS", "DEPTH_TEXTURE"), this.useNormalOffset && T.push("NORMAL_OFFSET");
          const R = cr(s, _, y), F = new Wt(h.gl.LEQUAL, Wt.ReadOnly, t.depthRangeFor3D);
          for (const N of this._groundShadowTiles) {
            const G = N.toUnwrapped(), Z = t.isTileAffectedByFog(N), W = t.getOrCreateProgram("groundShadow", { defines: T, overrideFog: Z });
            this.setupShadows(G, W), t.uploadCommonUniforms(h, W, G, null, z);
            const te = { u_matrix: t.transform.calculateProjMatrix(G), u_ground_shadow_factor: R };
            W.draw(t, h.gl.TRIANGLES, F, ci.disabled, bi.multiply, ti.disabled, te, "ground_shadow", t.tileExtentBuffer, t.quadTriangleIndexBuffer, t.tileExtentSegments, {}, t.transform.zoom, null, null);
          }
        }
        getShadowPassColorMode() {
          return this.painter._shadowMapDebug ? bi.unblended : bi.disabled;
        }
        getShadowPassDepthMode() {
          return this._depthMode;
        }
        getShadowCastingLayerCount() {
          return this._shadowLayerCount;
        }
        calculateShadowPassMatrixFromTile(t) {
          const s = this.painter.transform, h = s.calculatePosMatrix(t, s.worldSize);
          return i.ab.mat4.multiply(h, this._cascades[this.painter.currentShadowCascade].matrix, h), Float32Array.from(h);
        }
        calculateShadowPassMatrixFromMatrix(t) {
          return i.ab.mat4.multiply(t, this._cascades[this.painter.currentShadowCascade].matrix, t), Float32Array.from(t);
        }
        setupShadows(t, s, h, _ = 0) {
          if (!this.enabled)
            return;
          const y = this.painter.transform, T = this.painter.context, z = T.gl, R = this._uniformValues, F = new Float64Array(16), N = y.calculatePosMatrix(t, y.worldSize);
          for (let G = 0; G < this._cascades.length; G++)
            i.ab.mat4.multiply(F, this._cascades[G].matrix, N), R[G === 0 ? "u_light_matrix_0" : "u_light_matrix_1"] = Float32Array.from(F), T.activeTexture.set(z.TEXTURE0 + bs.ShadowMap0 + G), this._cascades[G].texture.bind(z.NEAREST, z.CLAMP_TO_EDGE);
          if (this.useNormalOffset = !!h, this.useNormalOffset) {
            const G = i.cc(t.canonical), Z = 2 / y.tileSize * i.ag / gs.shadowMapResolution, W = Z * this._cascades[0].boundingSphereRadius, te = Z * this._cascades[this._cascades.length - 1].boundingSphereRadius, ee = (h === "vector-tile" ? 1 : 3) / Math.pow(2, _ - t.canonical.z - (1 - y.zoom + Math.floor(y.zoom)));
            R.u_shadow_normal_offset = [G, W * ee, te * ee], R.u_shadow_bias = [6e-5, 12e-4, 0.012];
          } else
            R.u_shadow_bias = [36e-5, 12e-4, 0.012];
          s.setShadowUniformValues(T, R);
        }
        setupShadowsFromMatrix(t, s, h = !1) {
          if (!this.enabled)
            return;
          const _ = this.painter.context, y = _.gl, T = this._uniformValues, z = new Float64Array(16);
          for (let R = 0; R < gs.cascadeCount; R++)
            i.ab.mat4.multiply(z, this._cascades[R].matrix, t), T[R === 0 ? "u_light_matrix_0" : "u_light_matrix_1"] = Float32Array.from(z), _.activeTexture.set(y.TEXTURE0 + bs.ShadowMap0 + R), this._cascades[R].texture.bind(y.NEAREST, y.CLAMP_TO_EDGE);
          if (this.useNormalOffset = h, h) {
            const R = gs.normalOffset;
            T.u_shadow_normal_offset = [1, R, R], T.u_shadow_bias = [6e-5, 12e-4, 0.012];
          } else
            T.u_shadow_bias = [36e-5, 12e-4, 0.012];
          s.setShadowUniformValues(_, T);
        }
        getShadowUniformValues() {
          return this._uniformValues;
        }
        getCurrentCascadeFrustum() {
          return this._cascades[this.painter.currentShadowCascade].frustum;
        }
        computeSimplifiedTileShadowVolume(t, s, h, _) {
          if (_[2] >= 0)
            return {};
          const y = function(R, F, N) {
            const G = N / (1 << R.canonical.z);
            return new i.cd([R.canonical.x * G + R.wrap * N, R.canonical.y * G + R.wrap * N, 0], [(R.canonical.x + 1) * G + R.wrap * N, (R.canonical.y + 1) * G + R.wrap * N, F]);
          }(t, s, h).getCorners(), T = s / -_[2];
          _[0] < 0 ? (i.ab.vec3.add(y[0], y[0], [_[0] * T, 0, 0]), i.ab.vec3.add(y[3], y[3], [_[0] * T, 0, 0])) : _[0] > 0 && (i.ab.vec3.add(y[1], y[1], [_[0] * T, 0, 0]), i.ab.vec3.add(y[2], y[2], [_[0] * T, 0, 0])), _[1] < 0 ? (i.ab.vec3.add(y[0], y[0], [0, _[1] * T, 0]), i.ab.vec3.add(y[1], y[1], [0, _[1] * T, 0])) : _[1] > 0 && (i.ab.vec3.add(y[2], y[2], [0, _[1] * T, 0]), i.ab.vec3.add(y[3], y[3], [0, _[1] * T, 0]));
          const z = {};
          return z.vertices = y, z.planes = [Kr(y[1], y[0], y[4]), Kr(y[2], y[1], y[5]), Kr(y[3], y[2], y[6]), Kr(y[0], y[3], y[7])], z;
        }
        addShadowReceiver(t, s, h) {
          this._receivers.add(t, i.cd.fromTileIdAndHeight(t, s, h));
        }
        getMaxCascadeForTile(t) {
          const s = this._receivers.get(t);
          return s && s.lastCascade ? s.lastCascade : 0;
        }
      }
      function Kr(c, t, s) {
        const h = i.ab.vec3.sub([], s, t), _ = i.ab.vec3.sub([], c, t), y = i.ab.vec3.cross([], h, _), T = i.ab.vec3.length(y);
        return T === 0 ? [0, 0, 1, 0] : (i.ab.vec3.scale(y, y, 1 / T), [y[0], y[1], y[2], -i.ab.vec3.dot(y, t)]);
      }
      function Yo(c) {
        const t = c.properties.get("direction"), s = i.cb(t.x, t.y, t.z);
        s[2] = i.aw(s[2], 0, 75);
        const h = i.ce([s[0], s[1], s[2]]);
        return i.ab.vec3.fromValues(h.x, h.y, h.z);
      }
      function cr(c, t, s) {
        const h = t.properties.get("color-use-theme") === "none", _ = t.properties.get("color"), y = t.properties.get("intensity"), T = t.properties.get("direction"), z = [T.x, T.y, T.z], R = s.properties.get("color-use-theme") === "none", F = s.properties.get("color"), N = s.properties.get("intensity"), G = Math.max(i.ab.vec3.dot([0, 0, 1], z), 0), Z = [0, 0, 0];
        i.ab.vec3.scale(Z, F.toRenderColor(R ? null : c.getLut(t.scope)).toArray01Linear().slice(0, 3), N);
        const W = [0, 0, 0];
        return i.ab.vec3.scale(W, _.toRenderColor(h ? null : c.getLut(s.scope)).toArray01Linear().slice(0, 3), G * y), i.cf([Z[0] > 0 ? Z[0] / (Z[0] + W[0]) : 0, Z[1] > 0 ? Z[1] / (Z[1] + W[1]) : 0, Z[2] > 0 ? Z[2] / (Z[2] + W[2]) : 0]);
      }
      function Eo(c, t, s, h, _, y) {
        const T = c.zoom, z = c.scale, R = c.worldSize, F = 1 / R, N = c.aspect, G = Math.sqrt(1 + N * N) * Math.tan(0.5 * c.fovX), Z = G * G, W = h - s, te = h + s;
        let ee, se;
        Z > W / te ? (ee = h, se = h * G) : (ee = 0.5 * te * (1 + Z), se = 0.5 * Math.sqrt(W * W + 2 * (h * h + s * s) * Z + te * te * Z * Z));
        const oe = c.projection.pixelsPerMeter(c.center.lat, R), he = c._camera.getCameraToWorldMercator(), _e = [0, 0, -ee * F];
        i.ab.vec3.transformMat4(_e, _e, he);
        let pe = se * F;
        const Me = c._edgeInsets;
        if (!(Me.left === 0 && Me.top === 0 && Me.right === 0 && Me.bottom === 0 || Me.left === Me.right && Me.top === Me.bottom)) {
          const _t = c._camera.getWorldToCamera(c.worldSize, c.projection.zAxisUnit === "meters" ? oe : 1), ct = c._camera.getCameraToClipPerspective(c._fov, c.width / c.height, s, h);
          ct[8] = 2 * -c.centerOffset.x / c.width, ct[9] = 2 * c.centerOffset.y / c.height;
          const nt = new Float64Array(16);
          i.ab.mat4.mul(nt, ct, _t);
          const Lt = new Float64Array(16);
          i.ab.mat4.invert(Lt, nt);
          const bt = i.bR.fromInvProjectionMatrix(Lt, R, T, !0);
          for (const zt of bt.points) {
            const Bt = ((xe = zt)[0] /= z, xe[1] /= z, xe[2] = i.bH(xe[2], c._center.lat), xe);
            pe = Math.max(pe, i.ab.vec3.len(i.ab.vec3.subtract([], _e, Bt)));
          }
        }
        var xe;
        pe *= _ / (_ - 1);
        const we = Math.acos(t[2]), ve = Math.atan2(-t[0], -t[1]), Ae = new To();
        Ae.position = _e, Ae.setPitchBearing(we, ve);
        const Oe = Ae.getWorldToCamera(R, oe), Xe = pe * R, He = Math.min(c._mercatorZfromZoom(17) * R * -2, -2 * Xe), ke = Ae.getCameraToClipOrthographic(-Xe, Xe, -Xe, Xe, He, (Xe + y * oe) / t[2]), Ne = new Float64Array(16);
        i.ab.mat4.multiply(Ne, ke, Oe);
        const st = i.ab.vec3.fromValues(Math.floor(1e6 * _e[0]) / 1e6 * R, Math.floor(1e6 * _e[1]) / 1e6 * R, 0), ut = 0.5 * _, xt = [0, 0, 0];
        i.ab.vec3.transformMat4(xt, st, Ne), i.ab.vec3.scale(xt, xt, ut);
        const Ge = [Math.floor(xt[0]), Math.floor(xt[1]), Math.floor(xt[2])], lt = [0, 0, 0];
        i.ab.vec3.sub(lt, xt, Ge), i.ab.vec3.scale(lt, lt, -1 / ut);
        const Je = new Float64Array(16);
        return i.ab.mat4.identity(Je), i.ab.mat4.translate(Je, Je, lt), i.ab.mat4.multiply(Ne, Je, Ne), [Ne, Xe];
      }
      class Zh extends i.E {
        constructor(t) {
          super(), this.requestManager = t, this.models = { "": {} }, this.numModelsLoading = {};
        }
        loadModel(t, s) {
          return i.aM(this.requestManager.transformRequest(s, i.R.Model).url).then((h) => {
            if (!h)
              return;
            const _ = i.aN(h), y = new i.aO(t, void 0, void 0, _);
            return y.computeBoundsAndApplyParent(), y;
          }).catch((h) => {
            if (h && h.status === 404)
              return null;
            this.fire(new i.y(new Error(`Could not load model ${t} from ${s}: ${h.message}`)));
          });
        }
        load(t, s) {
          this.models[s] || (this.models[s] = {});
          const h = Object.keys(t);
          this.numModelsLoading[s] = (this.numModelsLoading[s] || 0) + h.length;
          const _ = [];
          for (const y of h)
            _.push(this.loadModel(y, t[y]));
          Promise.allSettled(_).then((y) => {
            for (let T = 0; T < y.length; T++) {
              const { status: z, value: R } = y[T];
              z === "fulfilled" && R && (this.models[s][h[T]] = { model: R, numReferences: 1 });
            }
            this.numModelsLoading[s] -= h.length, this.fire(new i.z("data", { dataType: "style" }));
          }).catch((y) => {
            this.fire(new i.y(new Error(`Could not load models: ${y.message}`)));
          });
        }
        isLoaded() {
          for (const t in this.numModelsLoading)
            if (this.numModelsLoading[t] > 0)
              return !1;
          return !0;
        }
        hasModel(t, s) {
          return !!this.getModel(t, s);
        }
        getModel(t, s) {
          return this.models[s] || (this.models[s] = {}), this.models[s][t] ? this.models[s][t].model : void 0;
        }
        addModel(t, s, h) {
          this.models[h] || (this.models[h] = {}), this.hasModel(t, h) && this.models[h][t].numReferences++, this.load({ [t]: this.requestManager.normalizeModelURL(s) }, h);
        }
        addModels(t, s) {
          this.models[s] || (this.models[s] = {});
          const h = {};
          for (const _ in t)
            this.models[s][_] = {}, h[_] = this.requestManager.normalizeModelURL(t[_]);
          this.load(h, s);
        }
        addModelsFromBucket(t, s) {
          this.models[s] || (this.models[s] = {});
          const h = {};
          for (const _ of t)
            this.hasModel(_, s) ? this.models[s][_].numReferences++ : h[_] = this.requestManager.normalizeModelURL(_);
          this.load(h, s);
        }
        removeModel(t, s) {
          if (this.models[s] && this.models[s][t] && (this.models[s][t].numReferences--, this.models[s][t].numReferences === 0)) {
            const h = this.models[s][t].model;
            delete this.models[s][t], h.destroy();
          }
        }
        listModels(t) {
          return this.models[t] || (this.models[t] = {}), Object.keys(this.models[t]);
        }
        upload(t, s) {
          this.models[s] || (this.models[s] = {});
          for (const h in this.models[s])
            this.models[s][h].model && this.models[s][h].model.upload(t.context);
        }
      }
      const Uc = new i.a5({ data: new i.a6(i.a3.colorTheme.data) }), Ua = { "mbx-indoor-active-floorplans": { default: ["literal", []] }, "mbx-indoor-underground": { default: ["literal", !1] }, "mbx-indoor-loaded-levels": { default: ["literal", []] }, "mbx-indoor-level-height": { default: ["literal", {}] }, "mbx-indoor-level-base": { default: ["literal", {}] }, "mbx-indoor-level-selected": { default: ["literal", {}] }, "mbx-indoor-level-overlapped": { default: ["literal", {}] } };
      function $l(c) {
        return c = c || {}, Object.assign(c, Ua);
      }
      class yl extends i.E {
        constructor(t) {
          super(), this.mergeFloors = !0, this._scope = void 0, this._queryFeatureSetId = void 0, this._buildingEntryFeatureSetId = void 0, this._selectedFloorplan = void 0, this._indoorData = void 0, this._selectedLevel = void 0, this._floorplanStates = {}, i.aP(["_onLoad", "_onMove", "_checkFloorplanVisible"], this), this._map = t, this._checkFloorplanVisible(!0), this._map.on("load", this._onLoad), this._map.on("move", this._onMove);
        }
        destroy() {
          this._map.indoor.off("load", this._onLoad), this._map.indoor.off("move", this._onMove), this._map = void 0;
        }
        _onLoad() {
          this._map.style.forEachFragmentStyle((t) => {
            t.stylesheet.indoor && (this._queryFeatureSetId ? this.fire(new i.y(new Error("Multiple indoor map styles detected, simultaneous usage is not allowed currently."))) : (this._queryFeatureSetId = t.stylesheet.indoor.floorplanFeaturesetId, this._buildingEntryFeatureSetId = t.stylesheet.indoor.buildingFeaturesetId, this._scope = t.scope));
          }), this._queryFeatureSetId && this._buildingEntryFeatureSetId && this._map.addInteraction("mbx-indoor-buildingclick", { type: "click", target: { featuresetId: this._buildingEntryFeatureSetId, importId: this._scope }, handler: (t) => (t.feature && t.feature.properties.floorplan && this.selectFloorplan(t.feature.properties.floorplan), !0) }), this._checkFloorplanVisible(!0);
        }
        _onMove() {
          this._checkFloorplanVisible(!1);
        }
        _checkFloorplanVisible(t) {
          if (!this._queryFeatureSetId || !this._map.isStyleLoaded() || this._map.transform.zoom < 13)
            return;
          this._indoorData && !function(T, z) {
            const [R, F] = T, { center: N, radius: G } = z, [Z, W] = N, te = Math.abs(R - Z);
            return Math.sqrt((te > 180 ? 360 - te : te) ** 2 + (F - W) ** 2) <= G;
          }([this._map.getCenter().lng, this._map.getCenter().lat], this._indoorData.circumCircle) && (this._indoorData = void 0, this._selectedFloorplan = void 0, this._map.setConfigProperty(this._scope, "mbx-indoor-underground", !1), this._map.setConfigProperty(this._scope, "mbx-indoor-active-floorplans", ["literal", []]), this.fire(new i.z("floorplangone")));
          const s = { target: { featuresetId: this._queryFeatureSetId, importId: this._scope } }, h = new i.P(this._map.transform.width / 2, this._map.transform.height / 2), _ = [new i.P(0, 0), new i.P(this._map.transform.width, this._map.transform.height)], y = this._map.queryRenderedFeatures(t ? _ : h, s);
          y.length > 0 && (this._selectedFloorplan && y[0].properties.id === this._selectedFloorplan.properties.id || (this._selectedFloorplan = y[0], this._floorplanSelected(!1)));
        }
        _floorplanSelected(t) {
          this._indoorData = JSON.parse(this._selectedFloorplan.properties["indoor-data"]), this._indoorData.id = this._selectedFloorplan.properties.id, this._indoorData.circumCircle = function(y) {
            const [[T, z], [R, F]] = y, N = (R - T + 360) % 360, G = N > 180 ? 360 - N : N;
            return { center: [(T + G / 2 + 360) % 360, (z + F) / 2], radius: Math.sqrt(G ** 2 + (F - z) ** 2) / 2 };
          }(this._indoorData.extent), this._floorplanStates[this._indoorData.id] || (this._floorplanStates[this._indoorData.id] = {});
          const s = this._floorplanStates[this._indoorData.id].selectedBuilding, h = this._floorplanStates[this._indoorData.id].selectedLevel;
          let _;
          if (this._map.setConfigProperty(this._scope, "mbx-indoor-active-floorplans", this._indoorData.floorplanIDs), this._selectedLevel)
            for (const y of this._indoorData.levels)
              y.id === this._selectedLevel.id && (_ = y.id);
          if (this.fire(new i.z("floorplanselected", { buildings: this._indoorData.buildings, levels: this._indoorData.levels, selectedLevelId: _ })), s) {
            const y = this._indoorData.buildings.find((T) => T.id === s);
            this._buildingSelected(y, !1);
          } else
            this._indoorData.buildings.length > 0 && this._buildingSelected(this._indoorData.buildings[0], !1);
          if (h) {
            const y = this._indoorData.levels.find((T) => T.id === h);
            this._updateLevels(y, t);
          } else
            t && this._indoorData["default-levels"].length > 0 && this.selectLevel(this._indoorData["default-levels"][0]);
        }
        _buildingSelected(t, s) {
          s && t && t.extent && this._map.fitBounds(t.extent, { pitch: this._map.getPitch(), bearing: this._map.getBearing() }), this._floorplanStates[this._indoorData.id].selectedBuilding = t ? t.id : void 0;
          const h = this._indoorData.levels.filter((_) => t.levels.includes(_.id));
          this.fire(new i.z("buildingselected", { buildingId: t.id, levels: h }));
        }
        _levelSelected(t) {
          if (t === "overview")
            this._updateLevels(void 0, !0);
          else {
            const s = this._indoorData.levels.find((h) => h.id === t);
            this._updateLevels(s, !0);
          }
          this.fire(new i.z("levelselected", { levelId: t === "overview" ? void 0 : t }));
        }
        _updateLevels(t, s) {
          if (!t)
            return this._map.setConfigProperty(this._scope, "mbx-indoor-loaded-levels", ["literal", []]), this._map.setConfigProperty(this._scope, "mbx-indoor-underground", !1), this._floorplanStates[this._indoorData.id].selectedLevel = void 0, void (s && this._indoorData.extent && this._map.fitBounds(this._indoorData.extent, { pitch: this._map.getPitch(), bearing: this._map.getBearing() }));
          function h(F) {
            const N = F.indexOf("/floor/");
            if (N === -1)
              return F;
            const G = N + 7, Z = F.indexOf("/", G);
            return Z === -1 ? F.slice(G) : F.slice(G, Z);
          }
          this._selectedLevel = t, this._floorplanStates[this._indoorData.id].selectedLevel = t ? t.id : void 0;
          const _ = [], y = {}, T = {}, z = {}, R = {};
          for (const F of this._indoorData.levels)
            if (_.push(F.id), y[F.id] = F.height, T[F.id] = F.base, t) {
              if (this.mergeFloors) {
                const N = h(t.id), G = h(F.id);
                z[F.id] = G === N ? "true" : "false";
              } else
                z[F.id] = F.id === t.id ? "true" : "false";
              R[F.id] = F.base < t.base ? "true" : "false";
            } else
              R[F.id] = !0;
          if (this._map.setConfigProperty(this._scope, "mbx-indoor-loaded-levels", ["literal", _]), this._map.setConfigProperty(this._scope, "mbx-indoor-level-height", ["literal", y]), this._map.setConfigProperty(this._scope, "mbx-indoor-level-base", ["literal", T]), this._map.setConfigProperty(this._scope, "mbx-indoor-level-selected", ["literal", z]), this._map.setConfigProperty(this._scope, "mbx-indoor-level-overlapped", ["literal", R]), t && (this._map.setConfigProperty(this._scope, "mbx-indoor-underground", !!t.isUnderground), s && t.extent)) {
            const F = this._map.cameraForBounds(t.extent, { pitch: this._map.getPitch(), bearing: this._map.getBearing() }), N = this._map.getZoom(), G = F.zoom ? Math.abs(N - F.zoom) : 0;
            this._map.fitBounds(t.extent, G >= 1 ? { pitch: this._map.getPitch(), bearing: this._map.getBearing() } : { pitch: this._map.getPitch(), bearing: this._map.getBearing(), zoom: N });
          }
        }
        selectFloorplan(t) {
          const s = { target: { featuresetId: this._queryFeatureSetId, importId: this._scope } }, h = [new i.P(0, 0), new i.P(this._map.transform.width, this._map.transform.height)], _ = this._map.queryRenderedFeatures(h, s);
          if (_.length > 0) {
            for (const y of _)
              if (JSON.parse(y.properties["indoor-data"]).floorplanIDs.includes(t)) {
                this._selectedFloorplan = y, this._floorplanSelected(!0);
                break;
              }
          }
        }
        selectBuilding(t) {
          const s = this._indoorData.buildings.find((h) => h.id === t);
          this._buildingSelected(s, !0);
        }
        selectLevel(t) {
          this._levelSelected(t);
        }
      }
      function _a(c) {
        if (!c.metadata || !c.metadata.content_area)
          return;
        const t = i.q.devicePixelRatio, { left: s, top: h, width: _, height: y } = c.metadata.content_area, T = s * t, z = h * t;
        return [T, z, T + _ * t, z + y * t];
      }
      function ga(c) {
        if (c)
          return c.map(([t, s]) => [t * i.q.devicePixelRatio, s * i.q.devicePixelRatio]);
      }
      const Po = (c, t) => Pe(c, t && t.filter((s) => s.identifier !== "source.canvas")), Hh = i.ay(Oi, ["addLayer", "removeLayer", "setLights", "setPaintProperty", "setLayoutProperty", "setSlot", "setFilter", "addSource", "removeSource", "setLayerZoomRange", "setLight", "setTransition", "setGeoJSONSourceData", "setTerrain", "setFog", "setSnow", "setRain", "setProjection", "setCamera", "addImport", "removeImport", "updateImport"]), td = i.ay(Oi, ["setCenter", "setZoom", "setBearing", "setPitch"]), ja = /* @__PURE__ */ new Set(["background", "sky", "slot", "custom"]), jc = { version: 8, layers: [], sources: {} }, Gc = { duration: 300, delay: 0 };
      class hr extends i.E {
        constructor(t, s = {}) {
          super(), this.map = t, this.scope = s.scope || "", this.globalId = null, this.fragments = [], this.importDepth = s.importDepth || 0, this.importsCache = s.importsCache || /* @__PURE__ */ new Map(), this.resolvedImports = s.resolvedImports || /* @__PURE__ */ new Set(), this.transition = i.l({}, Gc), this._buildingIndex = new Gl(this), this.crossTileSymbolIndex = new Hl(), this._mergedOrder = [], this._drapedFirstOrder = [], this._mergedLayers = {}, this._mergedSourceCaches = {}, this._mergedOtherSourceCaches = {}, this._mergedSymbolSourceCaches = {}, this._clipLayerPresent = !1, this._has3DLayers = !1, this._hasCircleLayers = !1, this._hasSymbolLayers = !1, this._changes = s.styleChanges || new Zr(), this.dispatcher = s.dispatcher ? s.dispatcher : new i.D(i.ci(), this), s.imageManager ? this.imageManager = s.imageManager : (this.imageManager = new Ws(this.map._spriteFormat), this.imageManager.setEventedParent(this)), this.imageManager.createScope(this.scope), this.glyphManager = s.glyphManager ? s.glyphManager : new i.cj(t._requestManager, s.localFontFamily ? i.ck.all : s.localIdeographFontFamily ? i.ck.ideographs : i.ck.none, s.localFontFamily || s.localIdeographFontFamily), s.modelManager ? this.modelManager = s.modelManager : (this.modelManager = new Zh(t._requestManager), this.modelManager.setEventedParent(this)), this._layers = {}, this._sourceCaches = {}, this._otherSourceCaches = {}, this._symbolSourceCaches = {}, this._loaded = !1, this._precompileDone = !1, this._shouldPrecompile = !1, this._availableImages = [], this._order = [], this._markersNeedUpdate = !1, this.options = s.configOptions ? s.configOptions : /* @__PURE__ */ new Map(), this._configDependentLayers = s.configDependentLayers ? s.configDependentLayers : /* @__PURE__ */ new Set(), this._config = s.config, this._styleColorTheme = { lut: null, lutLoading: !1, lutLoadingCorrelationID: 0, colorTheme: null, colorThemeOverride: s.colorThemeOverride }, this._styleColorThemeForScope = {}, this._initialConfig = s.initialConfig, this.dispatcher.broadcast("setReferrer", i.cl());
          const h = this;
          this._rtlTextPluginCallback = hr.registerForPluginStateChange((_) => {
            h.dispatcher.broadcast("syncRTLPluginState", { pluginStatus: _.pluginStatus, pluginURL: _.pluginURL }, (y, T) => {
              if (i.cm(y), T && T.every((z) => z))
                for (const z in h._sourceCaches) {
                  const R = h._sourceCaches[z], F = R.getSource().type;
                  F !== "vector" && F !== "geojson" || R.reload();
                }
            });
          }), this.on("data", (_) => {
            if (_.dataType !== "source" || _.sourceDataType !== "metadata")
              return;
            const y = this.getOwnSource(_.sourceId);
            if (y && y.vectorLayerIds)
              for (const T in this._layers) {
                const z = this._layers[T];
                z.source === y.id && this._validateLayer(z);
              }
          });
        }
        load(t) {
          return t ? (typeof t == "string" ? this.loadURL(t) : this.loadJSON(t), this) : this;
        }
        _getGlobalId(t) {
          if (!t)
            return null;
          if (typeof t == "string") {
            if (i.f(t))
              return t;
            const s = i.cn(t);
            if (!s.startsWith("http"))
              try {
                return new URL(s, location.href).toString();
              } catch {
                return s;
              }
            return s;
          }
          return `json://${i.co(JSON.stringify(t))}`;
        }
        _diffStyle(t, s, h) {
          this.globalId = this._getGlobalId(t);
          const _ = (y, T) => {
            try {
              T(null, this.setState(y, h));
            } catch (z) {
              T(z, !1);
            }
          };
          if (typeof t == "string") {
            const y = this.map._requestManager.normalizeStyleURL(t), T = this.map._requestManager.transformRequest(y, i.R.Style);
            i.n(T, (z, R) => {
              z ? this.fire(new i.y(z)) : R && _(R, s);
            });
          } else
            typeof t == "object" && _(t, s);
        }
        loadURL(t, s = {}) {
          this.fire(new i.z("dataloading", { dataType: "style" }));
          const h = typeof s.validate == "boolean" ? s.validate : !i.f(t);
          this.globalId = this._getGlobalId(t), t = this.map._requestManager.normalizeStyleURL(t, s.accessToken), this.resolvedImports.add(t);
          const _ = this.importsCache.get(t);
          if (_)
            return this._load(_, h);
          const y = this.map._requestManager.transformRequest(t, i.R.Style);
          this._request = i.n(y, (T, z) => {
            if (this._request = null, T)
              this.fire(new i.y(T));
            else if (z)
              return this.importsCache.set(t, z), this._load(z, h);
          });
        }
        loadJSON(t, s = {}) {
          this.fire(new i.z("dataloading", { dataType: "style" })), this.globalId = this._getGlobalId(t), this._request = i.q.frame(() => {
            this._request = null, this._load(t, s.validate !== !1);
          });
        }
        loadEmpty() {
          this.fire(new i.z("dataloading", { dataType: "style" })), this._load(jc, !1);
        }
        _loadImports(t, s, h) {
          if (this.importDepth >= 4)
            return i.w("Style doesn't support nesting deeper than 5"), Promise.resolve();
          const _ = [];
          for (const y of t) {
            const T = this._createFragmentStyle(y), z = new Promise((N) => {
              T.once("style.import.load", N), T.once("error", N);
            }).then(() => this.mergeAll());
            if (_.push(z), this.resolvedImports.has(y.url)) {
              T.loadEmpty();
              continue;
            }
            const R = y.data || this.importsCache.get(y.url);
            R ? (T.loadJSON(R, { validate: s }), this._isInternalStyle(R) && (T.globalId = null)) : y.url ? T.loadURL(y.url, { validate: s }) : T.loadEmpty();
            const F = { style: T, id: y.id, config: y.config };
            if (h) {
              const N = this.fragments.findIndex(({ id: G }) => G === h);
              this.fragments = this.fragments.slice(0, N).concat(F).concat(this.fragments.slice(N));
            } else
              this.fragments.push(F);
          }
          return Promise.allSettled(_);
        }
        getImportGlobalIds(t = this, s = /* @__PURE__ */ new Set()) {
          for (const h of t.fragments)
            h.style.globalId && s.add(h.style.globalId), this.getImportGlobalIds(h.style, s);
          return [...s.values()];
        }
        _createFragmentStyle(t) {
          const s = this.scope ? i.aC(t.id, this.scope) : t.id;
          let h;
          const _ = this._initialConfig && this._initialConfig[s];
          (t.config || _) && (h = i.l({}, t.config, _));
          const y = new hr(this.map, { scope: s, styleChanges: this._changes, importDepth: this.importDepth + 1, importsCache: this.importsCache, resolvedImports: new Set(this.resolvedImports), dispatcher: this.dispatcher, imageManager: this.imageManager, glyphManager: this.glyphManager, modelManager: this.modelManager, config: h, configOptions: this.options, colorThemeOverride: t["color-theme"], configDependentLayers: this._configDependentLayers });
          return y.setEventedParent(this.map, { style: y }), y;
        }
        _reloadImports() {
          this.mergeAll(), this._updateMapProjection(), this.updateConfigDependencies(), this.map._triggerCameraUpdate(this.camera), this.dispatcher.broadcast("setLayers", { layers: this._serializeLayers(this._order), scope: this.scope, options: this.options }), this._shouldPrecompile = this.map._precompilePrograms && this.isRootStyle();
        }
        _isInternalStyle(t) {
          return this.isRootStyle() && (t.fragment || !!t.schema && t.fragment !== !1);
        }
        _load(t, s) {
          const h = t.indoor ? $l(t.schema) : t.schema;
          if (this._isInternalStyle(t)) {
            const T = i.l({}, jc, { imports: [{ id: "basemap", data: t, url: "" }] });
            return void this._load(T, s);
          }
          if (this.updateConfig(this._config, h), s && Po(this, Zi(t)))
            return;
          this._loaded = !0, this.stylesheet = i.cp(t);
          const _ = () => {
            for (const F in t.sources)
              this.addSource(F, t.sources[F], { validate: !1, isInitialLoad: !0 });
            t.sprite ? this._loadIconset(t.sprite) : (this.imageManager.setLoaded(!0, this.scope), this.dispatcher.broadcast("spriteLoaded", { scope: this.scope, isLoaded: !0 })), this.glyphManager.setURL(t.glyphs, this.scope);
            const T = ul(this.stylesheet.layers);
            if (this._order = T.map((F) => F.id), this.stylesheet.light && i.w("The `light` root property is deprecated, prefer using `lights` with `flat` light type instead."), this.stylesheet.lights)
              if (this.stylesheet.lights.length === 1 && this.stylesheet.lights[0].type === "flat") {
                const F = this.stylesheet.lights[0];
                this.light = new Qe(F.properties, F.id);
              } else
                this.setLights(this.stylesheet.lights);
            this.light || (this.light = new Qe(this.stylesheet.light)), this._layers = {};
            for (const F of T) {
              const N = i.cu(F, this.scope, this._styleColorTheme.lut, this.options);
              N.configDependencies.size !== 0 && this._configDependentLayers.add(N.fqid), N.setEventedParent(this, { layer: { id: N.id } }), this._layers[N.id] = N;
              const G = this.getOwnLayerSourceCache(N), Z = !!this.directionalLight && this.directionalLight.shadowsEnabled();
              G && N.canCastShadows() && Z && (G.castsShadows = !0);
            }
            this.stylesheet.featuresets && this.setFeaturesetSelectors(this.stylesheet.featuresets), this.stylesheet.models && this.modelManager.addModels(this.stylesheet.models, this.scope);
            const z = this.stylesheet.terrain;
            z && (this.checkCanvasFingerprintNoise(), this.disableElevatedTerrain || this.terrainSetForDrapingOnly() || this._createTerrain(z, 1)), this.stylesheet.fog && this._createFog(this.stylesheet.fog), this.stylesheet.snow && this._createSnow(this.stylesheet.snow), this.stylesheet.rain && this._createRain(this.stylesheet.rain), this.stylesheet.transition && this.setTransition(this.stylesheet.transition), this.fire(new i.z("data", { dataType: "style" }));
            const R = this.isRootStyle();
            t.imports ? this._loadImports(t.imports, s).then(() => {
              this._reloadImports(), this.fire(new i.z(R ? "style.load" : "style.import.load"));
            }) : (this._reloadImports(), this.fire(new i.z(R ? "style.load" : "style.import.load")));
          };
          this._styleColorTheme.colorTheme = this.stylesheet["color-theme"];
          const y = this._styleColorTheme.colorThemeOverride ? this._styleColorTheme.colorThemeOverride : this._styleColorTheme.colorTheme;
          if (y) {
            const T = this._evaluateColorThemeData(y);
            this._loadColorTheme(T).then(() => {
              _();
            }).catch((z) => {
              i.w(`Couldn't load color theme from the stylesheet: ${z}`), _();
            });
          } else
            this._styleColorTheme.lut = null, _();
        }
        isRootStyle() {
          return this.importDepth === 0;
        }
        mergeAll() {
          let t, s, h, _, y, T, z, R, F, N;
          const G = {};
          this.terrain && this.terrain.scope !== this.scope && delete this.terrain, this.forEachFragmentStyle((Z) => {
            if (Z.stylesheet) {
              if (Z.light != null && (t = Z.light), Z.stylesheet.lights)
                for (const W of Z.stylesheet.lights)
                  W.type === "ambient" && Z.ambientLight != null && (s = Z.ambientLight), W.type === "directional" && Z.directionalLight != null && (h = Z.directionalLight);
              _ = this._prioritizeTerrain(_, Z.terrain, Z.stylesheet.terrain), Z.stylesheet.fog && Z.fog != null && (y = Z.fog), Z.stylesheet.snow && Z.snow != null && (T = Z.snow), Z.stylesheet.rain && Z.rain != null && (z = Z.rain), Z.stylesheet.camera != null && (N = Z.stylesheet.camera), Z.stylesheet.projection != null && (R = Z.stylesheet.projection), Z.stylesheet.transition != null && (F = Z.stylesheet.transition), G[Z.scope] = Z._styleColorTheme;
            }
          }), this.light = t, this.ambientLight = s, this.directionalLight = h, this.fog = y, this.snow = T, this.rain = z, this._styleColorThemeForScope = G, _ === null ? delete this.terrain : this.terrain = _, this.camera = N || { "camera-projection": "perspective" }, this.projection = R || { name: "mercator" }, this.transition = i.l({}, Gc, F), this.mergeSources(), this.mergeLayers();
        }
        forEachFragmentStyle(t) {
          const s = (h) => {
            for (const _ of h.fragments)
              s(_.style);
            t(h);
          };
          s(this);
        }
        _prioritizeTerrain(t, s, h) {
          const _ = t && t.drapeRenderMode === 0;
          return h === null ? s && s.drapeRenderMode === 0 ? s : _ ? t : null : s != null && (!t || _ || s && s.drapeRenderMode === 1) ? s : t;
        }
        mergeTerrain() {
          let t;
          this.terrain && this.terrain.scope !== this.scope && delete this.terrain, this.forEachFragmentStyle((s) => {
            t = this._prioritizeTerrain(t, s.terrain, s.stylesheet.terrain);
          }), t === null ? delete this.terrain : this.terrain = t;
        }
        mergeProjection() {
          let t;
          this.forEachFragmentStyle((s) => {
            s.stylesheet.projection != null && (t = s.stylesheet.projection);
          }), this.projection = t || { name: "mercator" };
        }
        mergeSources() {
          const t = {}, s = {}, h = {};
          this.forEachFragmentStyle((_) => {
            for (const y in _._sourceCaches) {
              const T = i.aC(y, _.scope);
              t[T] = _._sourceCaches[y];
            }
            for (const y in _._otherSourceCaches) {
              const T = i.aC(y, _.scope);
              s[T] = _._otherSourceCaches[y];
            }
            for (const y in _._symbolSourceCaches) {
              const T = i.aC(y, _.scope);
              h[T] = _._symbolSourceCaches[y];
            }
          }), this._mergedSourceCaches = t, this._mergedOtherSourceCaches = s, this._mergedSymbolSourceCaches = h;
        }
        mergeLayers() {
          const t = {}, s = [], h = {};
          this._mergedSlots = [], this._has3DLayers = !1, this._hasCircleLayers = !1, this._hasSymbolLayers = !1, this.forEachFragmentStyle((y) => {
            for (const T of y._order) {
              const z = y._layers[T];
              if (z.type === "slot") {
                const R = i.cq(T);
                if (t[R])
                  continue;
                t[R] = [];
              }
              z.slot && t[z.slot] ? t[z.slot].push(z) : s.push(z);
            }
          }), this._mergedOrder = [];
          const _ = (y = []) => {
            for (const T of y)
              if (T.type === "slot") {
                const z = i.cq(T.id);
                t[z] && _(t[z]), this._mergedSlots.push(z);
              } else {
                const z = i.aC(T.id, T.scope);
                this._mergedOrder.push(z), h[z] = T, T.is3D() && (this._has3DLayers = !0), T.type === "circle" && (this._hasCircleLayers = !0), T.type === "symbol" && (this._hasSymbolLayers = !0), T.type === "clip" && (this._clipLayerPresent = !0);
              }
          };
          _(s), this._mergedOrder.sort((y, T) => {
            const z = h[y], R = h[T];
            return z.hasInitialOcclusionOpacityProperties ? R.is3D() ? 1 : 0 : z.is3D() && R.hasInitialOcclusionOpacityProperties ? -1 : 0;
          }), this._mergedLayers = h, this.updateDrapeFirstLayers(), this._buildingIndex.processLayersChanged();
        }
        terrainSetForDrapingOnly() {
          return !!this.terrain && this.terrain.drapeRenderMode === 0;
        }
        getCamera() {
          return this.stylesheet.camera;
        }
        setCamera(t) {
          return this.stylesheet.camera = i.l({}, this.stylesheet.camera, t), this.camera = this.stylesheet.camera, this;
        }
        _evaluateColorThemeData(t) {
          return t.data ? function(s, h, _) {
            const y = i.l({}, h);
            for (const z of Object.keys(i.a3.colorTheme))
              y[z] === void 0 && (y[z] = i.a3.colorTheme[z].default);
            const T = new i.a4(Uc, s, new Map(_));
            return T.setTransitionOrValue(y, _), T.untransitioned().possiblyEvaluate(new i.a8(0));
          }(this.scope, t, this.options).get("data") : null;
        }
        _loadColorTheme(t) {
          this._styleColorTheme.lutLoading = !0, this._styleColorTheme.lutLoadingCorrelationID += 1;
          const s = this._styleColorTheme.lutLoadingCorrelationID;
          return new Promise((h, _) => {
            const y = "data:image/png;base64,";
            if (!t || t.length === 0)
              return this._styleColorTheme.lut = null, this._styleColorTheme.lutLoading = !1, void h();
            let T = t;
            T.startsWith(y) || (T = y + T);
            const z = "mapbox-reserved-lut", R = new Image();
            R.src = T, R.onerror = () => {
              this._styleColorTheme.lutLoading = !1, _(new Error("Failed to load image data"));
            }, R.onload = () => {
              if (this._styleColorTheme.lutLoadingCorrelationID !== s)
                return void h();
              this._styleColorTheme.lutLoading = !1;
              const { width: F, height: N, data: G } = i.q.getImageData(R);
              if (N > 32)
                return void _(new Error("The height of the image must be less than or equal to 32 pixels."));
              if (F !== N * N)
                return void _(new Error("The width of the image must be equal to the height squared."));
              this.getImage(z) && this.removeImage(z), this.addImage(z, { data: new i.r({ width: F, height: N }, G), pixelRatio: 1, sdf: !1, usvg: !1, version: 0 });
              const Z = this.imageManager.getImage(z, this.scope);
              Z ? (this._styleColorTheme.lut = { image: Z.data, data: t }, h()) : _(new Error("Missing LUT image."));
            };
          });
        }
        getLut(t) {
          const s = this._styleColorThemeForScope[t];
          return s ? s.lut : null;
        }
        setProjection(t) {
          t ? this.stylesheet.projection = t : delete this.stylesheet.projection, this.mergeProjection(), this._updateMapProjection();
        }
        applyProjectionUpdate() {
          this._loaded && (this.dispatcher.broadcast("setProjection", this.map.transform.projectionOptions), this.map.transform.projection.requiresDraping ? (this.getTerrain() || this.stylesheet.terrain) && !this.disableElevatedTerrain || this.setTerrainForDraping() : this.terrainSetForDrapingOnly() && this.setTerrain(null, 0));
        }
        _updateMapProjection() {
          this.isRootStyle() && (this.map._useExplicitProjection ? this.applyProjectionUpdate() : this.map._prioritizeAndUpdateProjection(null, this.projection));
        }
        _loadSprite(t) {
          this._spriteRequest = function(s, h, _) {
            let y, T, z;
            const R = i.q.devicePixelRatio > 1 ? "@2x" : "";
            let F = i.n(h.transformRequest(h.normalizeSpriteURL(s, R, ".json"), i.R.SpriteJSON), (Z, W) => {
              F = null, z || (z = Z, y = W, G());
            }), N = i.o(h.transformRequest(h.normalizeSpriteURL(s, R, ".png"), i.R.SpriteImage), (Z, W) => {
              N = null, z || (z = Z, T = W, G());
            });
            function G() {
              if (z)
                _(z);
              else if (y && T) {
                const Z = i.q.getImageData(T), W = {};
                for (const te in y) {
                  const { width: ee, height: se, x: oe, y: he, sdf: _e, pixelRatio: pe, stretchX: Me, stretchY: xe, content: we } = y[te], ve = new i.r({ width: ee, height: se });
                  i.r.copy(Z, ve, { x: oe, y: he }, { x: 0, y: 0 }, { width: ee, height: se }, null), W[te] = { data: ve, pixelRatio: pe, sdf: _e, stretchX: Me, stretchY: xe, content: we, usvg: !1 };
                }
                _(null, W);
              }
            }
            return { cancel() {
              F && (F.cancel(), F = null), N && (N.cancel(), N = null);
            } };
          }(t, this.map._requestManager, (s, h) => {
            if (this._spriteRequest = null, s)
              this.fire(new i.y(s));
            else if (h)
              for (const _ in h)
                this.imageManager.addImage(_, this.scope, h[_]);
            this.imageManager.setLoaded(!0, this.scope), this._availableImages = this.imageManager.listImages(this.scope), this.dispatcher.broadcast("setImages", { scope: this.scope, images: this._availableImages }), this.dispatcher.broadcast("spriteLoaded", { scope: this.scope, isLoaded: !0 }), this.fire(new i.z("data", { dataType: "style" }));
          });
        }
        _loadIconset(t) {
          if (!i.f(t) && this.map._spriteFormat !== "icon_set" || this.map._spriteFormat === "raster")
            return void this._loadSprite(t);
          const s = this.map._spriteFormat === "auto";
          var h, _;
          this._spriteRequest = (_ = (y, T) => {
            if (this._spriteRequest = null, y)
              s ? this._loadSprite(t) : this.fire(new i.y(y));
            else if (T)
              for (const z in T)
                this.imageManager.addImage(z, this.scope, T[z]);
            this.imageManager.setLoaded(!0, this.scope), this._availableImages = this.imageManager.listImages(this.scope), this.dispatcher.broadcast("setImages", { scope: this.scope, images: this._availableImages }), this.dispatcher.broadcast("spriteLoaded", { scope: this.scope, isLoaded: !0 }), this.fire(new i.z("data", { dataType: "style" }));
          }, i.bi((h = this.map._requestManager).transformRequest(h.normalizeIconsetURL(t), i.R.Iconset), (y, T) => {
            if (y)
              return void _(y);
            const z = {}, R = i.cg(new i.bh(T));
            for (const F of R.icons) {
              const N = { version: 1, pixelRatio: i.q.devicePixelRatio, content: _a(F), stretchX: F.metadata ? ga(F.metadata.stretch_x_areas) : void 0, stretchY: F.metadata ? ga(F.metadata.stretch_y_areas) : void 0, sdf: !1, usvg: !0, icon: F };
              z[F.name] = N;
            }
            _(null, z);
          }));
        }
        _validateLayer(t) {
          const s = this.getOwnSource(t.source);
          if (!s)
            return;
          const h = t.sourceLayer;
          h && (s.type === "geojson" || s.vectorLayerIds && s.vectorLayerIds.indexOf(h) === -1) && this.fire(new i.y(new Error(`Source layer "${h}" does not exist on source "${s.id}" as specified by style layer "${t.id}"`)));
        }
        loaded() {
          if (!this._loaded || Object.keys(this._changes.getUpdatedSourceCaches()).length)
            return !1;
          for (const t in this._sourceCaches)
            if (!this._sourceCaches[t].loaded())
              return !1;
          if (!this.imageManager.isLoaded() || !this.modelManager.isLoaded() || this._styleColorTheme.lutLoading)
            return !1;
          for (const { style: t } of this.fragments)
            if (!t.loaded())
              return !1;
          return !0;
        }
        _serializeImports() {
          if (this.stylesheet.imports)
            return this.stylesheet.imports.map((t, s) => {
              const h = this.fragments[s];
              return h && h.style && (t.data = h.style.serialize()), t;
            });
        }
        _serializeSources() {
          const t = {};
          for (const s in this._sourceCaches) {
            const h = this._sourceCaches[s].getSource();
            t[h.id] || (t[h.id] = h.serialize());
          }
          return t;
        }
        _serializeLayers(t) {
          const s = [];
          for (const h of t) {
            const _ = this._layers[h];
            _ && _.type !== "custom" && s.push(_.serialize());
          }
          return s;
        }
        hasLightTransitions() {
          return !(!this.light || !this.light.hasTransition()) || !(!this.ambientLight || !this.ambientLight.hasTransition()) || !(!this.directionalLight || !this.directionalLight.hasTransition());
        }
        hasFogTransition() {
          return !!this.fog && this.fog.hasTransition();
        }
        hasSnowTransition() {
          return !!this.snow && this.snow.hasTransition();
        }
        hasRainTransition() {
          return !!this.rain && this.rain.hasTransition();
        }
        hasTransitions() {
          if (this.hasLightTransitions() || this.hasFogTransition() || this.hasSnowTransition() || this.hasRainTransition())
            return !0;
          for (const t in this._sourceCaches)
            if (this._sourceCaches[t].hasTransition())
              return !0;
          for (const t in this._layers)
            if (this._layers[t].hasTransition())
              return !0;
          return !1;
        }
        get order() {
          return this.terrain ? this._drapedFirstOrder : this._mergedOrder;
        }
        _getOrder(t) {
          return t ? this.order : this._mergedOrder;
        }
        isLayerDraped(t) {
          return !!this.terrain && t.isDraped(this.getLayerSourceCache(t));
        }
        _checkLoaded() {
          if (!this._loaded)
            throw new Error("Style is not done loading");
        }
        _checkLayer(t) {
          const s = this.getOwnLayer(t);
          if (s)
            return s;
          this.fire(new i.y(new Error(`The layer '${t}' does not exist in the map's style.`)));
        }
        _checkSource(t) {
          const s = this.getOwnSource(t);
          if (s)
            return s;
          this.fire(new i.y(new Error(`The source '${t}' does not exist in the map's style.`)));
        }
        precompilePrograms(t, s) {
          const h = this.map.painter;
          if (h)
            for (let _ = t.minzoom || 0; _ < (t.maxzoom || 25.5); _++) {
              const y = t.getProgramIds();
              if (y)
                for (const T of y) {
                  const z = t.getDefaultProgramParams(T, s.zoom, this._styleColorTheme.lut);
                  z && (h.style = this, this.fog && (h._fogVisible = !0, z.overrideFog = !0, h.getOrCreateProgram(T, z)), h._fogVisible = !1, z.overrideFog = !1, h.getOrCreateProgram(T, z), (this.stylesheet.terrain || this.stylesheet.projection && this.stylesheet.projection.name === "globe") && (z.overrideRtt = !0, h.getOrCreateProgram(T, z)));
                }
            }
        }
        update(t) {
          if (!this._loaded)
            return;
          this.ambientLight && this.ambientLight.recalculate(t), this.directionalLight && this.directionalLight.recalculate(t);
          const s = this.calculateLightsBrightness();
          t.brightness = s || 0, s !== this._brightness && (this._brightness = s, this.dispatcher.broadcast("setBrightness", s));
          const h = this._changes.isDirty();
          let _ = !1;
          if (this._changes.isDirty()) {
            const T = this._changes.getLayerUpdatesByScope();
            for (const z in T) {
              const { updatedIds: R, removedIds: F } = T[z];
              (R || F) && (this._updateWorkerLayers(z, R, F), _ = !0);
            }
            this.updateSourceCaches(), this._updateTilesForChangedImages(), this.updateLayers(t), this.light && this.light.updateTransitions(t), this.ambientLight && this.ambientLight.updateTransitions(t), this.directionalLight && this.directionalLight.updateTransitions(t), this.fog && this.fog.updateTransitions(t), this.snow && this.snow.updateTransitions(t), this.rain && this.rain.updateTransitions(t), this._changes.reset();
          }
          const y = {};
          for (const T in this._mergedSourceCaches) {
            const z = this._mergedSourceCaches[T];
            y[T] = z.used, z.used = !1, z.tileCoverLift = 0;
          }
          for (const T of this._mergedOrder) {
            const z = this._mergedLayers[T];
            if (z.recalculate(t, this._availableImages), !z.isHidden(t.zoom)) {
              const R = this.getLayerSourceCache(z);
              R && (R.used = !0, R.tileCoverLift = Math.max(R.tileCoverLift, z.tileCoverLift()));
            }
            !this._precompileDone && this._shouldPrecompile && ("requestIdleCallback" in window ? requestIdleCallback(() => {
              this.precompilePrograms(z, t);
            }) : this.precompilePrograms(z, t));
          }
          this._shouldPrecompile && (this._precompileDone = !0), this.terrain && _ && this.mergeLayers();
          for (const T in y) {
            const z = this._mergedSourceCaches[T];
            y[T] !== z.used && z.getSource().fire(new i.z("data", { sourceDataType: "visibility", dataType: "source", sourceId: z.getSource().id }));
          }
          this.light && this.light.recalculate(t), this.terrain && this.terrain.recalculate(t), this.fog && this.fog.recalculate(t), this.snow && this.snow.recalculate(t), this.rain && this.rain.recalculate(t), this.z = t.zoom, this._markersNeedUpdate && (this._updateMarkersOpacity(), this._markersNeedUpdate = !1), h && this.fire(new i.z("data", { dataType: "style" }));
        }
        _updateTilesForChangedImages() {
          const t = this._changes.getUpdatedImages();
          if (t.length) {
            for (const s in this._sourceCaches)
              this._sourceCaches[s].reloadTilesForDependencies(["icons", "patterns"], t);
            this._changes.resetUpdatedImages();
          }
        }
        _updateWorkerLayers(t, s, h) {
          const _ = this.getFragmentStyle(t);
          _ && this.dispatcher.broadcast("updateLayers", { layers: s ? _._serializeLayers(s) : [], scope: t, removedIds: h || [], options: _.options });
        }
        setState(t, s) {
          if (this._checkLoaded(), Po(this, Zi(t)))
            return !1;
          (t = i.cp(t)).layers = ul(t.layers);
          const h = function(T, z) {
            if (!T)
              return [{ command: Oi.setStyle, args: [z] }];
            let R = [];
            try {
              if (!i.bn(T.version, z.version))
                return [{ command: Oi.setStyle, args: [z] }];
              if (i.bn(T.center, z.center) || R.push({ command: Oi.setCenter, args: [z.center] }), i.bn(T.zoom, z.zoom) || R.push({ command: Oi.setZoom, args: [z.zoom] }), i.bn(T.bearing, z.bearing) || R.push({ command: Oi.setBearing, args: [z.bearing] }), i.bn(T.pitch, z.pitch) || R.push({ command: Oi.setPitch, args: [z.pitch] }), i.bn(T.sprite, z.sprite) || R.push({ command: Oi.setSprite, args: [z.sprite] }), i.bn(T.glyphs, z.glyphs) || R.push({ command: Oi.setGlyphs, args: [z.glyphs] }), i.bn(T.imports, z.imports) || function(W = [], te = [], ee) {
                te = te || [];
                const se = (W = W || []).map(Fi), oe = te.map(Fi), he = W.reduce(Li, {}), _e = te.reduce(Li, {}), pe = se.slice();
                let Me, xe, we, ve;
                for (Me = 0, xe = 0; Me < se.length; Me++)
                  we = se[Me], _e.hasOwnProperty(we) ? xe++ : (ee.push({ command: Oi.removeImport, args: [we] }), pe.splice(pe.indexOf(we, xe), 1));
                for (Me = 0, xe = 0; Me < oe.length; Me++)
                  we = oe[oe.length - 1 - Me], pe[pe.length - 1 - Me] !== we && (he.hasOwnProperty(we) ? (ee.push({ command: Oi.removeImport, args: [we] }), pe.splice(pe.lastIndexOf(we, pe.length - xe), 1)) : xe++, ve = pe[pe.length - Me], ee.push({ command: Oi.addImport, args: [_e[we], ve] }), pe.splice(pe.length - Me, 0, we));
                for (const Ae of te) {
                  const Oe = he[Ae.id];
                  Oe && !i.bn(Oe, Ae) && ee.push({ command: Oi.updateImport, args: [Ae.id, Ae] });
                }
              }(T.imports, z.imports, R), i.bn(T.transition, z.transition) || R.push({ command: Oi.setTransition, args: [z.transition] }), i.bn(T.light, z.light) || R.push({ command: Oi.setLight, args: [z.light] }), i.bn(T.fog, z.fog) || R.push({ command: Oi.setFog, args: [z.fog] }), i.bn(T.snow, z.snow) || R.push({ command: Oi.setSnow, args: [z.snow] }), i.bn(T.rain, z.rain) || R.push({ command: Oi.setRain, args: [z.rain] }), i.bn(T.projection, z.projection) || R.push({ command: Oi.setProjection, args: [z.projection] }), i.bn(T.lights, z.lights) || R.push({ command: Oi.setLights, args: [z.lights] }), i.bn(T.camera, z.camera) || R.push({ command: Oi.setCamera, args: [z.camera] }), !i.bn(T["color-theme"], z["color-theme"]))
                return [{ command: Oi.setStyle, args: [z] }];
              const F = {}, N = [];
              (function(W, te, ee, se) {
                let oe;
                for (oe in te = te || {}, W = W || {})
                  W.hasOwnProperty(oe) && (te.hasOwnProperty(oe) || ns(oe, ee, se));
                for (oe in te) {
                  if (!te.hasOwnProperty(oe))
                    continue;
                  const he = te[oe];
                  W.hasOwnProperty(oe) ? i.bn(W[oe], he) || (W[oe].type === "geojson" && he.type === "geojson" && ha(W, te, oe) ? ee.push({ command: Oi.setGeoJSONSourceData, args: [oe, he.data] }) : Cn(oe, te, ee, se)) : Bi(oe, te, ee);
                }
              })(T.sources, z.sources, N, F);
              const G = [];
              T.layers && T.layers.forEach((W) => {
                W.source && F[W.source] ? R.push({ command: Oi.removeLayer, args: [W.id] }) : G.push(W);
              });
              let Z = T.terrain;
              Z && F[Z.source] && (R.push({ command: Oi.setTerrain, args: [void 0] }), Z = void 0), R = R.concat(N), i.bn(Z, z.terrain) || R.push({ command: Oi.setTerrain, args: [z.terrain] }), function(W, te, ee) {
                te = te || [];
                const se = (W = W || []).map(Fi), oe = te.map(Fi), he = W.reduce(Li, {}), _e = te.reduce(Li, {}), pe = se.slice(), Me = /* @__PURE__ */ Object.create(null);
                let xe, we, ve, Ae, Oe, Xe, He;
                for (xe = 0, we = 0; xe < se.length; xe++)
                  ve = se[xe], _e.hasOwnProperty(ve) ? we++ : (ee.push({ command: Oi.removeLayer, args: [ve] }), pe.splice(pe.indexOf(ve, we), 1));
                for (xe = 0, we = 0; xe < oe.length; xe++)
                  ve = oe[oe.length - 1 - xe], pe[pe.length - 1 - xe] !== ve && (he.hasOwnProperty(ve) ? (ee.push({ command: Oi.removeLayer, args: [ve] }), pe.splice(pe.lastIndexOf(ve, pe.length - we), 1)) : we++, Xe = pe[pe.length - xe], ee.push({ command: Oi.addLayer, args: [_e[ve], Xe] }), pe.splice(pe.length - xe, 0, ve), Me[ve] = !0);
                for (xe = 0; xe < oe.length; xe++)
                  if (ve = oe[xe], Ae = he[ve], Oe = _e[ve], !Me[ve] && !i.bn(Ae, Oe))
                    if (i.bn(Ae.source, Oe.source) && i.bn(Ae["source-layer"], Oe["source-layer"]) && i.bn(Ae.type, Oe.type)) {
                      for (He in Ot(Ae.layout, Oe.layout, ee, ve, null, Oi.setLayoutProperty), Ot(Ae.paint, Oe.paint, ee, ve, null, Oi.setPaintProperty), i.bn(Ae.slot, Oe.slot) || ee.push({ command: Oi.setSlot, args: [ve, Oe.slot] }), i.bn(Ae.filter, Oe.filter) || ee.push({ command: Oi.setFilter, args: [ve, Oe.filter] }), i.bn(Ae.minzoom, Oe.minzoom) && i.bn(Ae.maxzoom, Oe.maxzoom) || ee.push({ command: Oi.setLayerZoomRange, args: [ve, Oe.minzoom, Oe.maxzoom] }), Ae)
                        Ae.hasOwnProperty(He) && He !== "layout" && He !== "paint" && He !== "filter" && He !== "metadata" && He !== "minzoom" && He !== "maxzoom" && He !== "slot" && (He.indexOf("paint.") === 0 ? Ot(Ae[He], Oe[He], ee, ve, He.slice(6), Oi.setPaintProperty) : i.bn(Ae[He], Oe[He]) || ee.push({ command: Oi.setLayerProperty, args: [ve, He, Oe[He]] }));
                      for (He in Oe)
                        Oe.hasOwnProperty(He) && !Ae.hasOwnProperty(He) && He !== "layout" && He !== "paint" && He !== "filter" && He !== "metadata" && He !== "minzoom" && He !== "maxzoom" && He !== "slot" && (He.indexOf("paint.") === 0 ? Ot(Ae[He], Oe[He], ee, ve, He.slice(6), Oi.setPaintProperty) : i.bn(Ae[He], Oe[He]) || ee.push({ command: Oi.setLayerProperty, args: [ve, He, Oe[He]] }));
                    } else
                      ee.push({ command: Oi.removeLayer, args: [ve] }), Xe = pe[pe.lastIndexOf(ve) + 1], ee.push({ command: Oi.addLayer, args: [Oe, Xe] });
              }(G, z.layers, R);
            } catch (F) {
              console.warn("Unable to compute style diff:", F), R = [{ command: Oi.setStyle, args: [z] }];
            }
            return R;
          }(this.serialize(), t).filter((T) => !(T.command in td));
          if (h.length === 0)
            return !1;
          const _ = h.filter((T) => !(T.command in Hh));
          if (_.length > 0)
            throw new Error(`Unimplemented: ${_.map((T) => T.command).join(", ")}.`);
          const y = [];
          return h.forEach((T) => {
            y.push(this[T.command].apply(this, T.args));
          }), s && Promise.all(y).then(s), this.stylesheet = t, this.mergeAll(), this.dispatcher.broadcast("setLayers", { layers: this._serializeLayers(this._order), scope: this.scope, options: this.options }), !0;
        }
        addImage(t, s) {
          return this.getImage(t) ? this.fire(new i.y(new Error("An image with this name already exists."))) : (this.imageManager.addImage(t, this.scope, s), this._afterImageUpdated(t), this);
        }
        updateImage(t, s, h = !1) {
          this.imageManager.updateImage(t, this.scope, s), h && this._afterImageUpdated(t);
        }
        getImage(t) {
          return this.imageManager.getImage(t, this.scope);
        }
        removeImage(t) {
          return this.getImage(t) ? (this.imageManager.removeImage(t, this.scope), this._afterImageUpdated(t), this) : this.fire(new i.y(new Error("No image with this name exists.")));
        }
        _afterImageUpdated(t) {
          this._availableImages = this.imageManager.listImages(this.scope), this._changes.updateImage(t), this.dispatcher.broadcast("setImages", { scope: this.scope, images: this._availableImages }), this.fire(new i.z("data", { dataType: "style" }));
        }
        listImages() {
          return this._checkLoaded(), this._availableImages.slice();
        }
        addModel(t, s, h = {}) {
          return this._checkLoaded(), this._validate(Be, `models.${t}`, s, null, h) || (this.modelManager.addModel(t, s, this.scope), this._changes.setDirty()), this;
        }
        hasModel(t) {
          return this.modelManager.hasModel(t, this.scope);
        }
        removeModel(t) {
          return this.hasModel(t) ? (this.modelManager.removeModel(t, this.scope), this) : this.fire(new i.y(new Error("No model with this ID exists.")));
        }
        listModels() {
          return this._checkLoaded(), this.modelManager.listModels(this.scope);
        }
        addSource(t, s, h = {}) {
          if (this._checkLoaded(), this.getOwnSource(t) !== void 0)
            throw new Error(`There is already a source with ID "${t}".`);
          if (!s.type)
            throw new Error(`The type property must be defined, but only the following properties were given: ${Object.keys(s).join(", ")}.`);
          if (["vector", "raster", "geojson", "video", "image"].indexOf(s.type) >= 0 && this._validate(Jn, `sources.${t}`, s, null, h))
            return;
          this.map && this.map._collectResourceTiming && (s.collectResourceTiming = !0);
          const _ = Go(t, s, this.dispatcher, this);
          _.scope = this.scope, _.setEventedParent(this, () => ({ isSourceLoaded: this._isSourceCacheLoaded(_.id), source: _.serialize(), sourceId: _.id }));
          const y = (T) => {
            const z = (T ? "symbol:" : "other:") + _.id, R = i.aC(z, this.scope), F = this._sourceCaches[z] = new sr(R, _, T);
            (T ? this._symbolSourceCaches : this._otherSourceCaches)[_.id] = F, F.onAdd(this.map);
          };
          y(!1), s.type !== "vector" && s.type !== "geojson" || y(!0), _.onAdd && _.onAdd(this.map), h.isInitialLoad || (this.mergeSources(), this._changes.setDirty());
        }
        removeSource(t) {
          this._checkLoaded();
          const s = this.getOwnSource(t);
          if (!s)
            throw new Error("There is no source with this ID");
          for (const _ in this._layers)
            if (this._layers[_].source === t)
              return this.fire(new i.y(new Error(`Source "${t}" cannot be removed while layer "${_}" is using it.`)));
          if (this.terrain && this.terrain.scope === this.scope && this.terrain.get().source === t)
            return this.fire(new i.y(new Error(`Source "${t}" cannot be removed while terrain is using it.`)));
          const h = this.getOwnSourceCaches(t);
          for (const _ of h) {
            const y = i.cq(_.id);
            delete this._sourceCaches[y], this._changes.discardSourceCacheUpdate(_.id), _.fire(new i.z("data", { sourceDataType: "metadata", dataType: "source", sourceId: _.getSource().id })), _.setEventedParent(null), _.clearTiles();
          }
          return delete this._otherSourceCaches[t], delete this._symbolSourceCaches[t], this.mergeSources(), s.setEventedParent(null), s.onRemove && s.onRemove(this.map), this._changes.setDirty(), this;
        }
        setGeoJSONSourceData(t, s) {
          this._checkLoaded(), this.getOwnSource(t).setData(s), this._changes.setDirty();
        }
        getOwnSource(t) {
          const s = this.getOwnSourceCache(t);
          return s && s.getSource();
        }
        getOwnSources() {
          const t = [];
          for (const s in this._otherSourceCaches) {
            const h = this.getOwnSourceCache(s);
            h && t.push(h.getSource());
          }
          return t;
        }
        areTilesLoaded() {
          const t = this._mergedSourceCaches;
          for (const s in t) {
            const h = t[s]._tiles;
            for (const _ in h) {
              const y = h[_];
              if (y.state !== "loaded" && y.state !== "errored")
                return !1;
            }
          }
          return !0;
        }
        setLights(t) {
          if (this._checkLoaded(), !t)
            return delete this.ambientLight, void delete this.directionalLight;
          const s = this._getTransitionParameters();
          for (const _ of t) {
            if (this._validate(Ls, "lights", _))
              return;
            switch (_.type) {
              case "ambient":
                if (this.ambientLight) {
                  const y = this.ambientLight;
                  y.set(_), y.updateTransitions(s);
                } else
                  this.ambientLight = new ps(_, $i || ($i = new i.a5({ color: new i.a6(i.a3.properties_light_ambient.color), "color-use-theme": new i.a6({ type: "string", default: "default", "property-type": "data-constant" }), intensity: new i.a6(i.a3.properties_light_ambient.intensity) })), this.scope, this.options);
                break;
              case "directional":
                if (this.directionalLight) {
                  const y = this.directionalLight;
                  y.set(_), y.updateTransitions(s);
                } else
                  this.directionalLight = new ps(_, Hi || (Hi = new i.a5({ direction: new i.ak(i.a3.properties_light_directional.direction), color: new i.a6(i.a3.properties_light_directional.color), "color-use-theme": new i.a6({ type: "string", default: "default", "property-type": "data-constant" }), intensity: new i.a6(i.a3.properties_light_directional.intensity), "cast-shadows": new i.a6(i.a3.properties_light_directional["cast-shadows"]), "shadow-quality": new i.a6(i.a3.properties_light_directional["shadow-quality"]), "shadow-intensity": new i.a6(i.a3.properties_light_directional["shadow-intensity"]) })), this.scope, this.options);
            }
          }
          const h = new i.a8(this.z || 0, s);
          this.ambientLight && this.ambientLight.recalculate(h), this.directionalLight && this.directionalLight.recalculate(h), this._brightness = this.calculateLightsBrightness(), this.dispatcher.broadcast("setBrightness", this._brightness);
        }
        calculateLightsBrightness() {
          const t = this.directionalLight, s = this.ambientLight;
          if (!t || !s)
            return;
          const h = (Z) => 0.2126 * (Z[0] <= 0.03928 ? Z[0] / 12.92 : Math.pow((Z[0] + 0.055) / 1.055, 2.4)) + 0.7152 * (Z[1] <= 0.03928 ? Z[1] / 12.92 : Math.pow((Z[1] + 0.055) / 1.055, 2.4)) + 0.0722 * (Z[2] <= 0.03928 ? Z[2] / 12.92 : Math.pow((Z[2] + 0.055) / 1.055, 2.4)), _ = t.properties.get("color").toRenderColor(null).toArray01(), y = t.properties.get("intensity"), T = t.properties.get("direction"), z = 1 - i.cb(T.x, T.y, T.z)[2] / 90, R = h(_) * y * z, F = s.properties.get("color").toRenderColor(null).toArray01(), N = s.properties.get("intensity"), G = h(F) * N;
          return Number(((R + G) / 2).toFixed(6));
        }
        getBrightness() {
          return this._brightness;
        }
        getLights() {
          if (!this.enable3dLights())
            return null;
          const t = [];
          return this.directionalLight && t.push(this.directionalLight.get()), this.ambientLight && t.push(this.ambientLight.get()), t;
        }
        enable3dLights() {
          return !!this.ambientLight && !!this.directionalLight;
        }
        getFragmentStyle(t) {
          if (!t)
            return this;
          if (i.cr(t)) {
            const s = i.cs(t), h = this.fragments.find(({ id: y }) => y === s);
            if (!h)
              throw new Error(`Style import '${t}' not found`);
            const _ = i.cq(t);
            return h.style.getFragmentStyle(_);
          }
          {
            const s = this.fragments.find(({ id: h }) => h === t);
            if (!s)
              throw new Error(`Style import '${t}' not found`);
            return s.style;
          }
        }
        setFeaturesetSelectors(t) {
          if (!t)
            return;
          const s = {}, h = (_, y = "") => `${_}::${y}`;
          this.featuresetSelectors = {};
          for (const _ in t) {
            const y = this.featuresetSelectors[_] = [];
            for (const T of t[_].selectors) {
              if (T.featureNamespace) {
                const R = this.getOwnLayer(T.layer);
                if (!R) {
                  i.w(`Layer is undefined for selector: ${T.layer}`);
                  continue;
                }
                const F = h(R.source, R.sourceLayer);
                if (F in s && s[F] !== T.featureNamespace) {
                  i.w(`"featureNamespace ${T.featureNamespace} of featureset ${_}'s selector is not associated to the same source, skip this selector`);
                  continue;
                }
                s[F] = T.featureNamespace;
              }
              let z;
              if (T.properties)
                for (const R in T.properties) {
                  const F = i.U(T.properties[R]);
                  F.result === "success" && (z = z || {}, z[R] = F.value);
                }
              y.push({ layerId: T.layer, namespace: T.featureNamespace, properties: z });
            }
          }
        }
        getFeaturesetDescriptors(t) {
          const s = this.getFragmentStyle(t);
          if (!s || !s.stylesheet.featuresets)
            return [];
          const h = [];
          for (const _ in s.stylesheet.featuresets)
            h.push({ featuresetId: _, importId: s.scope ? s.scope : void 0 });
          return h;
        }
        getFeaturesetLayers(t, s) {
          const h = this.getFragmentStyle(s), _ = h.stylesheet.featuresets;
          if (!_ || !_[t])
            return this.fire(new i.y(new Error(`The featureset '${t}' does not exist in the map's style and cannot be queried.`))), [];
          const y = [];
          for (const T of _[t].selectors) {
            const z = h.getOwnLayer(T.layer);
            z && y.push(z);
          }
          return y;
        }
        getConfigProperty(t, s) {
          const h = this.getFragmentStyle(t);
          if (!h)
            return null;
          const _ = i.aC(s, h.scope), y = h.options.get(_), T = y ? y.value || y.default : null;
          return T ? T.serialize() : null;
        }
        setConfigProperty(t, s, h) {
          const _ = this.getFragmentStyle(t);
          if (!_)
            return;
          const y = _.stylesheet.indoor ? $l(_.stylesheet.schema) : _.stylesheet.schema;
          if (!y || !y[s])
            return;
          const T = i.U(h);
          if (T.result !== "success")
            return void Po(this, T.value);
          const z = T.value.expression, R = i.aC(s, _.scope), F = _.options.get(R);
          if (!F)
            return;
          let N;
          const { minValue: G, maxValue: Z, stepValue: W, type: te, values: ee } = y[s], se = i.U(y[s].default);
          se.result === "success" && (N = se.value.expression), N ? (this.options.set(R, { ...F, value: z, default: N, minValue: G, maxValue: Z, stepValue: W, type: te, values: ee }), this.updateConfigDependencies(s)) : this.fire(new i.y(new Error(`No schema defined for the config option "${s}" in the "${t}" fragment.`)));
        }
        getConfig(t) {
          const s = this.getFragmentStyle(t);
          if (!s)
            return null;
          const h = s.stylesheet.schema;
          if (!h)
            return null;
          const _ = {};
          for (const y in h) {
            const T = i.aC(y, s.scope), z = s.options.get(T), R = z ? z.value || z.default : null;
            _[y] = R ? R.serialize() : null;
          }
          return _;
        }
        setConfig(t, s) {
          const h = this.getFragmentStyle(t);
          h && (h.updateConfig(s, h.stylesheet.schema), this.updateConfigDependencies());
        }
        getSchema(t) {
          const s = this.getFragmentStyle(t);
          return s ? s.stylesheet.schema : null;
        }
        setSchema(t, s) {
          const h = this.getFragmentStyle(t);
          h && (h.stylesheet.schema = s, h.updateConfig(h._config, s), this.updateConfigDependencies());
        }
        updateConfig(t, s) {
          if (this._config = t, t || s)
            if (s)
              for (const h in s) {
                let _, y;
                const T = i.U(s[h].default);
                if (T.result === "success" && (_ = T.value.expression), t && t[h] !== void 0) {
                  const Z = i.U(t[h]);
                  Z.result === "success" && (y = Z.value.expression);
                }
                const { minValue: z, maxValue: R, stepValue: F, type: N, values: G } = s[h];
                if (_) {
                  const Z = i.aC(h, this.scope);
                  this.options.set(Z, { default: _, value: y, minValue: z, maxValue: R, stepValue: F, type: N, values: G });
                } else
                  this.fire(new i.y(new Error(`No schema defined for config option "${h}".`)));
              }
            else
              this.fire(new i.y(new Error("Attempting to set config for a style without schema.")));
        }
        updateConfigDependencies(t) {
          for (const s of this._configDependentLayers) {
            const h = this.getLayer(s);
            if (h) {
              if (t && !h.configDependencies.has(t))
                continue;
              h.possiblyEvaluateVisibility(), this._updateLayer(h);
            }
          }
          this.ambientLight && this.ambientLight.updateConfig(this.options), this.directionalLight && this.directionalLight.updateConfig(this.options), this.fog && this.fog.updateConfig(this.options), this.snow && this.snow.updateConfig(this.options), this.rain && this.rain.updateConfig(this.options), this.forEachFragmentStyle((s) => {
            const h = s._styleColorTheme.colorThemeOverride ? s._styleColorTheme.colorThemeOverride : s._styleColorTheme.colorTheme;
            if (h) {
              const _ = s._evaluateColorThemeData(h);
              (!s._styleColorTheme.lut && _ !== "" || s._styleColorTheme.lut && _ !== s._styleColorTheme.lut.data) && s.setColorTheme(h);
            }
          }), this._changes.setDirty();
        }
        addLayer(t, s, h = {}) {
          this._checkLoaded();
          const _ = t.id;
          if (this._layers[_])
            return void this.fire(new i.y(new Error(`Layer with id "${_}" already exists on this map`)));
          let y;
          if (t.type === "custom") {
            if (Po(this, i.ct(t)))
              return;
            y = i.cu(t, this.scope, this._styleColorTheme.lut, this.options);
          } else {
            if (typeof t.source == "object" && (this.addSource(_, t.source), t = i.cp(t), t = i.l(t, { source: _ })), this._validate(le, `layers.${_}`, t, { arrayIndex: -1 }, h))
              return;
            y = i.cu(t, this.scope, this._styleColorTheme.lut, this.options), this._validateLayer(y), y.setEventedParent(this, { layer: { id: _ } });
          }
          y.configDependencies.size !== 0 && this._configDependentLayers.add(y.fqid);
          let T = this._order.length;
          if (s) {
            const N = this._order.indexOf(s);
            if (N === -1)
              return void this.fire(new i.y(new Error(`Layer with id "${s}" does not exist on this map.`)));
            y.slot === this._layers[s].slot ? T = N : i.w(`Layer with id "${s}" has a different slot. Layers can only be rearranged within the same slot.`);
          }
          this._order.splice(T, 0, _), this._layerOrderChanged = !0, this._layers[_] = y;
          const z = this.getOwnLayerSourceCache(y), R = !!this.directionalLight && this.directionalLight.shadowsEnabled();
          z && y.canCastShadows() && R && (z.castsShadows = !0);
          const F = this._changes.getRemovedLayer(y);
          if (F && y.source && z && y.type !== "custom") {
            this._changes.discardLayerRemoval(y);
            const N = i.aC(y.source, y.scope);
            F.type !== y.type ? this._changes.updateSourceCache(N, "clear") : (this._changes.updateSourceCache(N, "reload"), z.pause());
          }
          this._updateLayer(y), y.onAdd && y.onAdd(this.map), y.scope = this.scope, this.mergeLayers();
        }
        moveLayer(t, s) {
          this._checkLoaded();
          const h = this._checkLayer(t);
          if (!h || t === s)
            return;
          const _ = this._order.indexOf(t);
          this._order.splice(_, 1);
          let y = this._order.length;
          if (s) {
            const T = this._order.indexOf(s);
            if (T === -1)
              return void this.fire(new i.y(new Error(`Layer with id "${s}" does not exist on this map.`)));
            h.slot === this._layers[s].slot ? y = T : i.w(`Layer with id "${s}" has a different slot. Layers can only be rearranged within the same slot.`);
          }
          this._order.splice(y, 0, t), this._changes.setDirty(), this._layerOrderChanged = !0, this.mergeLayers();
        }
        removeLayer(t) {
          this._checkLoaded();
          const s = this._checkLayer(t);
          if (!s)
            return;
          s.setEventedParent(null);
          const h = this._order.indexOf(t);
          this._order.splice(h, 1), delete this._layers[t], this._changes.setDirty(), this._layerOrderChanged = !0, this._configDependentLayers.delete(s.fqid), this._changes.removeLayer(s);
          const _ = this.getOwnLayerSourceCache(s);
          if (_ && _.castsShadows) {
            let y = !1;
            for (const T in this._layers)
              if (this._layers[T].source === s.source && this._layers[T].canCastShadows()) {
                y = !0;
                break;
              }
            _.castsShadows = y;
          }
          s.onRemove && s.onRemove(this.map), this.mergeLayers();
        }
        getOwnLayer(t) {
          return this._layers[t];
        }
        hasLayer(t) {
          return t in this._mergedLayers;
        }
        hasLayerType(t) {
          for (const s in this._layers)
            if (this._layers[s].type === t)
              return !0;
          return !1;
        }
        setLayerZoomRange(t, s, h) {
          this._checkLoaded();
          const _ = this._checkLayer(t);
          _ && (_.minzoom === s && _.maxzoom === h || (s != null && (_.minzoom = s), h != null && (_.maxzoom = h), this._updateLayer(_)));
        }
        getSlots() {
          return this._checkLoaded(), this._mergedSlots;
        }
        setSlot(t, s) {
          this._checkLoaded();
          const h = this._checkLayer(t);
          h && h.slot !== s && (h.slot = s, this._updateLayer(h));
        }
        setFilter(t, s, h = {}) {
          this._checkLoaded();
          const _ = this._checkLayer(t);
          if (_ && !i.bn(_.filter, s))
            return s == null ? (_.filter = void 0, void this._updateLayer(_)) : void (this._validate(ge, `layers.${_.id}.filter`, s, { layerType: _.type }, h) || (_.filter = i.cp(s), this._updateLayer(_)));
        }
        getFilter(t) {
          const s = this._checkLayer(t);
          if (s)
            return i.cp(s.filter);
        }
        setLayoutProperty(t, s, h, _ = {}) {
          this._checkLoaded();
          const y = this._checkLayer(t);
          if (y && !i.bn(y.getLayoutProperty(s), h)) {
            if (h != null && (!_ || _.validate !== !1) && Po(y, Ce.call(Zi, { key: `layers.${t}.layout.${s}`, layerType: y.type, objectKey: s, value: h, styleSpec: i.a3, style: { glyphs: !0, sprite: !0 } })))
              return;
            y.setLayoutProperty(s, h), y.configDependencies.size !== 0 && this._configDependentLayers.add(y.fqid), this._updateLayer(y);
          }
        }
        getLayoutProperty(t, s) {
          const h = this._checkLayer(t);
          if (h)
            return h.getLayoutProperty(s);
        }
        setPaintProperty(t, s, h, _ = {}) {
          this._checkLoaded();
          const y = this._checkLayer(t);
          if (!y || i.bn(y.getPaintProperty(s), h) || h != null && (!_ || _.validate !== !1) && Po(y, Le.call(Zi, { key: `layers.${t}.paint.${s}`, layerType: y.type, objectKey: s, value: h, styleSpec: i.a3 })))
            return;
          const T = y.setPaintProperty(s, h);
          y.configDependencies.size !== 0 && this._configDependentLayers.add(y.fqid), T && this._updateLayer(y), this._changes.updatePaintProperties(y);
        }
        getPaintProperty(t, s) {
          const h = this._checkLayer(t);
          if (h)
            return h.getPaintProperty(s);
        }
        setFeatureState(t, s) {
          if (this._checkLoaded(), "target" in t) {
            if ("featuresetId" in t.target) {
              const { featuresetId: R, importId: F } = t.target, N = this.getFragmentStyle(F), G = N.getFeaturesetLayers(R);
              for (const { source: Z, sourceLayer: W } of G)
                N.setFeatureState({ id: t.id, source: Z, sourceLayer: W }, s);
            } else if ("layerId" in t.target) {
              const { layerId: R } = t.target, F = this.getLayer(R);
              this.setFeatureState({ id: t.id, source: F.source, sourceLayer: F.sourceLayer }, s);
            }
            return;
          }
          const h = t.source, _ = t.sourceLayer, y = this._checkSource(h);
          if (!y)
            return;
          const T = y.type;
          if (T === "geojson" && _)
            return void this.fire(new i.y(new Error("GeoJSON sources cannot have a sourceLayer parameter.")));
          if (T === "vector" && !_)
            return void this.fire(new i.y(new Error("The sourceLayer parameter must be provided for vector source types.")));
          t.id === void 0 && this.fire(new i.y(new Error("The feature id parameter must be provided.")));
          const z = this.getOwnSourceCaches(h);
          for (const R of z)
            R.setFeatureState(_, t.id, s);
        }
        removeFeatureState(t, s) {
          if (this._checkLoaded(), "target" in t) {
            if ("featuresetId" in t.target) {
              const { featuresetId: R, importId: F } = t.target, N = this.getFragmentStyle(F), G = N.getFeaturesetLayers(R);
              for (const { source: Z, sourceLayer: W } of G)
                N.removeFeatureState({ id: t.id, source: Z, sourceLayer: W }, s);
            } else if ("layerId" in t.target) {
              const { layerId: R } = t.target, F = this.getLayer(R);
              this.removeFeatureState({ id: t.id, source: F.source, sourceLayer: F.sourceLayer }, s);
            }
            return;
          }
          const h = t.source, _ = this._checkSource(h);
          if (!_)
            return;
          const y = _.type, T = y === "vector" ? t.sourceLayer : void 0;
          if (y === "vector" && !T)
            return void this.fire(new i.y(new Error("The sourceLayer parameter must be provided for vector source types.")));
          if (s && typeof t.id != "string" && typeof t.id != "number")
            return void this.fire(new i.y(new Error("A feature id is required to remove its specific state property.")));
          const z = this.getOwnSourceCaches(h);
          for (const R of z)
            R.removeFeatureState(T, t.id, s);
        }
        getFeatureState(t) {
          if (this._checkLoaded(), "target" in t) {
            let y;
            if ("featuresetId" in t.target) {
              const { featuresetId: T, importId: z } = t.target, R = this.getFragmentStyle(z), F = R.getFeaturesetLayers(T);
              for (const { source: N, sourceLayer: G } of F) {
                const Z = R.getFeatureState({ id: t.id, source: N, sourceLayer: G });
                if (Z && !y)
                  y = Z;
                else if (!i.bn(y, Z))
                  return void this.fire(new i.y(new Error("The same feature id exists in multiple sources in the featureset, but their feature states are not consistent through the sources.")));
              }
            } else if ("layerId" in t.target) {
              const { layerId: T } = t.target, z = this.getLayer(T);
              y = this.getFeatureState({ id: t.id, source: z.source, sourceLayer: z.sourceLayer });
            }
            return y;
          }
          const s = t.source, h = t.sourceLayer, _ = this._checkSource(s);
          if (_) {
            if (_.type !== "vector" || h)
              return t.id === void 0 && this.fire(new i.y(new Error("The feature id parameter must be provided."))), this.getOwnSourceCaches(s)[0].getFeatureState(h, t.id);
            this.fire(new i.y(new Error("The sourceLayer parameter must be provided for vector source types.")));
          }
        }
        setTransition(t) {
          return this.stylesheet.transition = i.l({}, this.stylesheet.transition, t), this.transition = this.stylesheet.transition, this;
        }
        getTransition() {
          return i.l({}, this.stylesheet.transition);
        }
        serialize() {
          this._checkLoaded();
          const t = this.getTerrain(), s = t && this.terrain && this.terrain.scope === this.scope ? t : this.stylesheet.terrain;
          return i.cv({ version: this.stylesheet.version, name: this.stylesheet.name, metadata: this.stylesheet.metadata, fragment: this.stylesheet.fragment, imports: this._serializeImports(), schema: this.stylesheet.schema, camera: this.stylesheet.camera, light: this.stylesheet.light, lights: this.stylesheet.lights, terrain: s, fog: this.stylesheet.fog, snow: this.stylesheet.snow, rain: this.stylesheet.rain, center: this.stylesheet.center, "color-theme": this.stylesheet["color-theme"], zoom: this.stylesheet.zoom, bearing: this.stylesheet.bearing, pitch: this.stylesheet.pitch, sprite: this.stylesheet.sprite, glyphs: this.stylesheet.glyphs, transition: this.stylesheet.transition, projection: this.stylesheet.projection, sources: this._serializeSources(), layers: this._serializeLayers(this._order) }, (h) => h !== void 0);
        }
        _updateFilteredLayers(t) {
          for (const s of Object.values(this._mergedLayers))
            t(s) && this._updateLayer(s);
        }
        _updateLayer(t) {
          this._changes.updateLayer(t);
          const s = this.getLayerSourceCache(t), h = i.aC(t.source, t.scope), _ = this._changes.getUpdatedSourceCaches();
          t.source && !_[h] && s && s.getSource().type !== "raster" && (this._changes.updateSourceCache(h, "reload"), s.pause()), t.invalidateCompiledFilter();
        }
        _flattenAndSortRenderedFeatures(t) {
          const s = (z) => this._mergedLayers[z].is3D(), h = this.order, _ = {}, y = [];
          for (let z = h.length - 1; z >= 0; z--) {
            const R = h[z];
            if (s(R)) {
              _[R] = z;
              for (const F of t) {
                const N = F[R];
                if (N)
                  for (const G of N)
                    y.push(G);
              }
            }
          }
          y.sort((z, R) => R.intersectionZ - z.intersectionZ);
          const T = [];
          for (let z = h.length - 1; z >= 0; z--) {
            const R = h[z];
            if (s(R))
              for (let F = y.length - 1; F >= 0; F--) {
                const N = y[F].feature;
                if (N.layer && _[N.layer.id] < z)
                  break;
                T.push(N), y.pop();
              }
            else
              for (const F of t) {
                const N = F[R];
                if (N)
                  for (const G of N)
                    T.push(G.feature);
              }
          }
          return T;
        }
        queryRenderedFeatures(t, s, h) {
          let _;
          s && !Array.isArray(s) && s.filter && (this._validate(ge, "queryRenderedFeatures.filter", s.filter, null, s), _ = i.aZ(s.filter));
          const y = {}, T = (N) => {
            if (ja.has(N.type))
              return;
            const G = this.getOwnLayerSourceCache(N), Z = y[G.id] = y[G.id] || { sourceCache: G, layers: {}, has3DLayers: !1 };
            N.is3D() && (Z.has3DLayers = !0), Z.layers[N.fqid] = Z.layers[N.fqid] || { styleLayer: N, targets: [] }, Z.layers[N.fqid].targets.push({ filter: _ });
          };
          if (s && s.layers) {
            if (!Array.isArray(s.layers))
              return this.fire(new i.y(new Error("parameters.layers must be an Array."))), [];
            for (const N of s.layers) {
              const G = this._layers[N];
              if (!G)
                return this.fire(new i.y(new Error(`The layer '${N}' does not exist in the map's style and cannot be queried for features.`))), [];
              T(G);
            }
          } else
            for (const N in this._layers)
              T(this._layers[N]);
          const z = this._queryRenderedFeatures(t, y, h), R = this._flattenAndSortRenderedFeatures(z), F = [];
          for (const N of R)
            i.cs(N.layer.id) === this.scope && F.push(N);
          return F;
        }
        queryRenderedFeatureset(t, s, h) {
          let _;
          s && !Array.isArray(s) && s.filter && (this._validate(ge, "queryRenderedFeatures.filter", s.filter, null, s), _ = i.aZ(s.filter));
          const y = "mock", T = [];
          if (s && s.target)
            T.push({ ...s, targetId: y, filter: _ });
          else {
            const F = this.getFeaturesetDescriptors();
            for (const N of F)
              T.push({ targetId: y, filter: _, target: N });
            for (const { style: N } of this.fragments) {
              const G = N.getFeaturesetDescriptors();
              for (const Z of G)
                T.push({ targetId: y, filter: _, target: Z });
            }
          }
          const z = this.queryRenderedTargets(t, T, h), R = [];
          for (const F of z)
            for (const N of F.variants[y])
              R.push(new i.cw(F, N));
          return R;
        }
        queryRenderedTargets(t, s, h) {
          const _ = {}, y = (z, R, F, N) => {
            const G = _[R.id] = _[R.id] || { sourceCache: R, layers: {}, has3DLayers: !1 };
            G.layers[z.fqid] = G.layers[z.fqid] || { styleLayer: z, targets: [] }, z.is3D() && (G.has3DLayers = !0), G.layers[z.fqid].targets.push(N ? { ...F, namespace: N.namespace, properties: N.properties } : F);
          };
          for (const z of s)
            if ("featuresetId" in z.target) {
              const { featuresetId: R, importId: F } = z.target, N = this.getFragmentStyle(F), G = N.featuresetSelectors[R];
              if (!G) {
                this.fire(new i.y(new Error(`The featureset '${R}' does not exist in the map's style and cannot be queried for features.`)));
                continue;
              }
              for (const Z of G) {
                const W = N.getOwnLayer(Z.layerId);
                W && !ja.has(W.type) && y(W, N.getOwnLayerSourceCache(W), z, Z);
              }
            } else if ("layerId" in z.target) {
              const { layerId: R } = z.target, F = this.getLayer(R);
              if (!F || ja.has(F.type))
                continue;
              y(F, this.getLayerSourceCache(F), z);
            }
          const T = this._queryRenderedFeatures(t, _, h);
          return this._flattenAndSortRenderedFeatures(T);
        }
        _queryRenderedFeatures(t, s, h) {
          const _ = [], y = !!this.map._showQueryGeometry, T = vs.createFromScreenPoints(t, h);
          for (const z in s) {
            const R = aa(T, s[z], this._availableImages, h, y);
            Object.keys(R).length && _.push(R);
          }
          if (this.placement)
            for (const z in s) {
              if (!s[z].sourceCache._onlySymbols)
                continue;
              const R = Da(T.screenGeometry, s[z], this._availableImages, this.placement.collisionIndex, this.placement.retainedQueryData);
              Object.keys(R).length && _.push(R);
            }
          return _;
        }
        querySourceFeatures(t, s) {
          const h = s && s.filter;
          h && this._validate(ge, "querySourceFeatures.filter", h, null, s);
          let _ = [];
          const y = this.getOwnSourceCaches(t);
          for (const T of y)
            _ = _.concat(Vi(T, s));
          return _;
        }
        addSourceType(t, s, h) {
          return hr.getSourceType(t) ? h(new Error(`A source type called "${t}" already exists.`)) : (hr.setSourceType(t, s), s.workerSourceURL ? void this.dispatcher.broadcast("loadWorkerSource", { name: t, url: s.workerSourceURL }, h) : h(null, null));
        }
        getFlatLight() {
          return this.light.getLight();
        }
        setFlatLight(t, s, h = {}) {
          this._checkLoaded();
          const _ = this.light.getLight();
          let y = !1;
          for (const z in t)
            if (!i.bn(t[z], _[z])) {
              y = !0;
              break;
            }
          if (!y)
            return;
          const T = this._getTransitionParameters();
          this.light.setLight(t, s, h), this.light.updateTransitions(T);
        }
        getTerrain() {
          return this.terrain && this.terrain.drapeRenderMode === 1 ? this.terrain.get() : null;
        }
        setTerrainForDraping() {
          this.setTerrain({ source: "", exaggeration: 0 }, 0);
        }
        checkCanvasFingerprintNoise() {
          this.disableElevatedTerrain === void 0 && (this.disableElevatedTerrain = i.q.hasCanvasFingerprintNoise(), this.disableElevatedTerrain && i.w("Terrain and hillshade are disabled because of Canvas2D limitations when fingerprinting protection is enabled (e.g. in private browsing mode)."));
        }
        setTerrain(t, s = 1) {
          if (this._checkLoaded(), !t)
            return this.terrainSetForDrapingOnly() || (delete this.terrain, this.map.transform.projection.requiresDraping && this.setTerrainForDraping()), s === 0 && delete this.terrain, t === null ? this.stylesheet.terrain = null : delete this.stylesheet.terrain, this._force3DLayerUpdate(), void (this._markersNeedUpdate = !0);
          this.checkCanvasFingerprintNoise();
          let h = t;
          const _ = t.source == null;
          if (s === 1) {
            if (this.disableElevatedTerrain)
              return;
            if (typeof h.source == "object") {
              const z = "terrain-dem-src";
              this.addSource(z, h.source), h = i.cp(h), h = i.l(h, { source: z });
            }
            const y = i.l({}, h), T = {};
            if (this.terrain && _) {
              y.source = this.terrain.get().source;
              const z = this.terrain ? this.getFragmentStyle(this.terrain.scope) : null;
              z && (T.style = z.serialize());
            }
            if (this._validate(zs, "terrain", y, T))
              return;
          }
          if (!this.terrain || this.terrain.scope !== this.scope && !_ || this.terrain && s !== this.terrain.drapeRenderMode) {
            if (!h)
              return;
            this._createTerrain(h, s), this.fire(new i.z("data", { dataType: "style" }));
          } else {
            const y = this.terrain, T = y.get();
            for (const z of Object.keys(i.a3.terrain))
              !h.hasOwnProperty(z) && i.a3.terrain[z].default && (h[z] = i.a3.terrain[z].default);
            for (const z in t)
              if (!i.bn(t[z], T[z])) {
                y.set(t, this.options), this.stylesheet.terrain = t;
                const R = this._getTransitionParameters({ duration: 0 });
                y.updateTransitions(R), this.fire(new i.z("data", { dataType: "style" }));
                break;
              }
          }
          this.mergeTerrain(), this.updateDrapeFirstLayers(), this._markersNeedUpdate = !0;
        }
        _createFog(t) {
          const s = this.fog = new Ki(t, this.map.transform, this.scope, this.options);
          this.stylesheet.fog = s.get();
          const h = this._getTransitionParameters({ duration: 0 });
          s.updateTransitions(h);
        }
        _createSnow(t) {
          const s = this.snow = new Xn(t, this.map.transform, this.scope, this.options);
          this.stylesheet.snow = s.get();
          const h = this._getTransitionParameters({ duration: 0 });
          s.updateTransitions(h);
        }
        _createRain(t) {
          const s = this.rain = new Gs(t, this.map.transform, this.scope, this.options);
          this.stylesheet.rain = s.get();
          const h = this._getTransitionParameters({ duration: 0 });
          s.updateTransitions(h);
        }
        _updateMarkersOpacity() {
          this.map._markers.length !== 0 && this.map._requestDomTask(() => {
            for (const t of this.map._markers)
              t._evaluateOpacity();
          });
        }
        getFog() {
          return this.fog ? this.fog.get() : null;
        }
        setFog(t) {
          if (this._checkLoaded(), !t)
            return delete this.fog, delete this.stylesheet.fog, void (this._markersNeedUpdate = !0);
          if (this.fog) {
            const s = this.fog;
            if (!i.bn(s.get(), t)) {
              s.set(t, this.options), this.stylesheet.fog = s.get();
              const h = this._getTransitionParameters({ duration: 0 });
              s.updateTransitions(h);
            }
          } else
            this._createFog(t);
          this._markersNeedUpdate = !0;
        }
        getSnow() {
          return this.snow ? this.snow.get() : null;
        }
        setSnow(t) {
          if (this._checkLoaded(), !t)
            return delete this.snow, void delete this.stylesheet.snow;
          if (this.snow) {
            const s = this.snow;
            if (!i.bn(s.get(), t)) {
              s.set(t, this.options), this.stylesheet.snow = s.get();
              const h = this._getTransitionParameters({ duration: 0 });
              s.updateTransitions(h);
            }
          } else
            this._createSnow(t);
          this._markersNeedUpdate = !0;
        }
        getRain() {
          return this.rain ? this.rain.get() : null;
        }
        setRain(t) {
          if (this._checkLoaded(), !t)
            return delete this.rain, void delete this.stylesheet.rain;
          if (this.rain) {
            const s = this.rain;
            if (!i.bn(s.get(), t)) {
              s.set(t, this.options), this.stylesheet.rain = s.get();
              const h = this._getTransitionParameters({ duration: 0 });
              s.updateTransitions(h);
            }
          } else
            this._createRain(t);
          this._markersNeedUpdate = !0;
        }
        _reloadColorTheme() {
          const t = () => {
            for (const _ in this._layers)
              this._layers[_].lut = this._styleColorTheme.lut;
            for (const _ in this._sourceCaches)
              this._sourceCaches[_].clearTiles();
          }, s = this._styleColorTheme.colorThemeOverride ? this._styleColorTheme.colorThemeOverride : this._styleColorTheme.colorTheme;
          if (!s)
            return this._styleColorTheme.lut = null, void t();
          const h = this._evaluateColorThemeData(s);
          this._loadColorTheme(h).then(() => {
            this.fire(new i.z("colorthemeset")), t();
          }).catch((_) => {
            i.w(`Couldn't set color theme: ${_}`);
          });
        }
        setColorTheme(t) {
          this._checkLoaded(), this._styleColorTheme.colorThemeOverride && i.w("Note: setColorTheme is called on a style with a color-theme override, the passed color-theme won't be visible."), this._styleColorTheme.colorTheme = t, this._reloadColorTheme();
        }
        setImportColorTheme(t, s) {
          const h = this.getFragmentStyle(t);
          h && (h._styleColorTheme.colorThemeOverride = s, h._reloadColorTheme());
        }
        _getTransitionParameters(t) {
          return { now: i.q.now(), transition: i.l(this.transition, t) };
        }
        updateDrapeFirstLayers() {
          if (!this.terrain)
            return;
          const t = [], s = [];
          for (const h of this._mergedOrder)
            this.isLayerDraped(this._mergedLayers[h]) ? t.push(h) : s.push(h);
          this._drapedFirstOrder = [], this._drapedFirstOrder.push(...t), this._drapedFirstOrder.push(...s);
        }
        _createTerrain(t, s) {
          const h = this.terrain = new it(t, s, this.scope, this.options);
          s === 1 && (this.stylesheet.terrain = t), this.mergeTerrain(), this.updateDrapeFirstLayers(), this._force3DLayerUpdate();
          const _ = this._getTransitionParameters({ duration: 0 });
          h.updateTransitions(_);
        }
        _force3DLayerUpdate() {
          for (const t in this._layers) {
            const s = this._layers[t];
            s.type === "fill-extrusion" && this._updateLayer(s);
          }
        }
        _forceSymbolLayerUpdate() {
          for (const t in this._layers) {
            const s = this._layers[t];
            s.type === "symbol" && this._updateLayer(s);
          }
        }
        _validate(t, s, h, _, y = {}) {
          if (y && y.validate === !1)
            return !1;
          const T = i.l({}, this.serialize());
          return Po(this, t.call(Zi, i.l({ key: s, style: T, value: h, styleSpec: i.a3 }, _)));
        }
        _remove() {
          this._request && (this._request.cancel(), this._request = null), this._spriteRequest && (this._spriteRequest.cancel(), this._spriteRequest = null), i.cx.off("pluginStateChange", this._rtlTextPluginCallback);
          for (const t in this._mergedLayers)
            this._mergedLayers[t].setEventedParent(null);
          for (const t in this._mergedSourceCaches)
            this._mergedSourceCaches[t].clearTiles(), this._mergedSourceCaches[t].setEventedParent(null);
          this.setEventedParent(null), delete this.fog, delete this.snow, delete this.rain, delete this.terrain, delete this.ambientLight, delete this.directionalLight, this.isRootStyle() && (this.imageManager.setEventedParent(null), this.modelManager.setEventedParent(null), this.dispatcher.remove());
        }
        clearSource(t) {
          const s = this.getSourceCaches(t);
          for (const h of s)
            h.clearTiles();
        }
        clearSources() {
          for (const t in this._mergedSourceCaches)
            this._mergedSourceCaches[t].clearTiles();
        }
        reloadSource(t) {
          const s = this.getSourceCaches(t);
          for (const h of s)
            h.resume(), h.reload();
        }
        reloadSources() {
          for (const t of this.getSources())
            t.reload && t.reload();
        }
        updateSources(t) {
          let s;
          this.directionalLight && (s = Yo(this.directionalLight));
          for (const h in this._mergedSourceCaches)
            this._mergedSourceCaches[h].update(t, void 0, void 0, s);
        }
        _generateCollisionBoxes() {
          for (const t in this._sourceCaches) {
            const s = this._sourceCaches[t];
            s.resume(), s.reload();
          }
        }
        _updatePlacement(t, s, h, _, y, T, z = !1) {
          let R = !1, F = !1;
          const N = {}, G = {};
          for (const Z of this._mergedOrder) {
            const W = this._mergedLayers[Z];
            if (W.type !== "symbol")
              continue;
            const te = i.aC(W.source, W.scope);
            let ee = N[te];
            if (!ee) {
              const oe = this.getLayerSourceCache(W);
              if (!oe)
                continue;
              const he = oe.getRenderableIds(!0).map((_e) => oe.getTileByID(_e));
              G[te] = he.slice(), ee = N[te] = he.sort((_e, pe) => pe.tileID.overscaledZ - _e.tileID.overscaledZ || (_e.tileID.isLessThan(pe.tileID) ? -1 : 1));
            }
            const se = this.crossTileSymbolIndex.addLayer(W, ee, s.center.lng, s.projection);
            R = R || se;
          }
          if (this.crossTileSymbolIndex.pruneUnusedLayers(this._mergedOrder), z = z || this._layerOrderChanged || _ === 0, this._layerOrderChanged && this.fire(new i.z("neworder")), (z || !this.pauseablePlacement || this.pauseablePlacement.isDone() && !this.placement.stillRecent(i.q.now(), s.zoom)) && (this.pauseablePlacement = new $o(s, this._mergedOrder, z, h, _, y, this.placement, this.fog && s.projection.supportsFog ? this.fog.state : null, this._buildingIndex), this._layerOrderChanged = !1), this.pauseablePlacement.isDone() ? this.placement.setStale() : (this.pauseablePlacement.continuePlacement(this._mergedOrder, this._mergedLayers, N, G, this.map.painter.scaleFactor), this.pauseablePlacement.isDone() && (this.placement = this.pauseablePlacement.commit(i.q.now()), F = !0), R && this.pauseablePlacement.placement.setStale()), F || R) {
            this._buildingIndex.onNewFrame(s.zoom);
            for (let Z = 0; Z < this._mergedOrder.length; Z++) {
              const W = this._mergedLayers[this._mergedOrder[Z]];
              if (W.type !== "symbol")
                continue;
              const te = this.isLayerClipped(W);
              this.placement.updateLayerOpacities(W, N[i.aC(W.source, W.scope)], Z, te ? T : null);
            }
          }
          return { needsRerender: !this.pauseablePlacement.isDone() || this.placement.hasTransitions(i.q.now()) };
        }
        _releaseSymbolFadeTiles() {
          for (const t in this._sourceCaches)
            this._sourceCaches[t].releaseSymbolFadeTiles();
        }
        addImport(t, s) {
          this._checkLoaded();
          const h = this.stylesheet.imports = this.stylesheet.imports || [];
          if (h.findIndex(({ id: y }) => y === t.id) !== -1)
            return void this.fire(new i.y(new Error(`Import with id '${t.id}' already exists in the map's style.`)));
          if (!s)
            return h.push(t), this._loadImports([t], !0);
          const _ = h.findIndex(({ id: y }) => y === s);
          return _ === -1 && this.fire(new i.y(new Error(`Import with id "${s}" does not exist on this map.`))), this.stylesheet.imports = h.slice(0, _).concat(t).concat(h.slice(_)), this._loadImports([t], !0, s);
        }
        updateImport(t, s) {
          this._checkLoaded();
          const h = this.stylesheet.imports || [], _ = this.getImportIndex(t);
          return _ === -1 ? this : typeof s == "string" ? (this.setImportUrl(t, s), this) : (s.url && s.url !== h[_].url && this.setImportUrl(t, s.url), i.bn(s.config, h[_].config) || this.setImportConfig(t, s.config), i.bn(s.data, h[_].data) || this.setImportData(t, s.data), this);
        }
        moveImport(t, s) {
          this._checkLoaded();
          let h = this.stylesheet.imports || [];
          const _ = this.getImportIndex(t);
          if (_ === -1)
            return this;
          const y = this.getImportIndex(s);
          if (y === -1)
            return this;
          const T = h[_], z = this.fragments[_];
          return h = h.filter(({ id: R }) => R !== t), this.fragments = this.fragments.filter(({ id: R }) => R !== t), this.stylesheet.imports = h.slice(0, y).concat(T).concat(h.slice(y)), this.fragments = this.fragments.slice(0, y).concat(z).concat(this.fragments.slice(y)), this.mergeLayers(), this;
        }
        setImportUrl(t, s) {
          this._checkLoaded();
          const h = this.stylesheet.imports || [], _ = this.getImportIndex(t);
          if (_ === -1)
            return this;
          h[_].url = s;
          const y = this.fragments[_];
          return y.style = this._createFragmentStyle(h[_]), y.style.on("style.import.load", () => this.mergeAll()), y.style.loadURL(s), this;
        }
        setImportData(t, s) {
          this._checkLoaded();
          const h = this.getImportIndex(t), _ = this.stylesheet.imports || [];
          return h === -1 ? this : s ? (this.fragments[h].style.setState(s), this._reloadImports(), this) : (delete _[h].data, this.setImportUrl(t, _[h].url));
        }
        setImportConfig(t, s) {
          this._checkLoaded();
          const h = this.getImportIndex(t), _ = this.stylesheet.imports || [];
          if (h === -1)
            return this;
          s ? _[h].config = s : delete _[h].config;
          const y = this.fragments[h], T = y.style.stylesheet && y.style.stylesheet.schema;
          return y.config = s, y.style.updateConfig(s, T), this.updateConfigDependencies(), this;
        }
        removeImport(t) {
          this._checkLoaded();
          const s = this.stylesheet.imports || [], h = this.getImportIndex(t);
          h !== -1 && (s.splice(h, 1), this.fragments[h].style._remove(), this.fragments.splice(h, 1), this._reloadImports());
        }
        getImportIndex(t) {
          const s = (this.stylesheet.imports || []).findIndex((h) => h.id === t);
          return s === -1 && this.fire(new i.y(new Error(`Import '${t}' does not exist in the map's style and cannot be updated.`))), s;
        }
        getLayer(t) {
          return this._mergedLayers[t];
        }
        getSources() {
          const t = [];
          for (const s in this._mergedOtherSourceCaches) {
            const h = this._mergedOtherSourceCaches[s];
            h && t.push(h.getSource());
          }
          return t;
        }
        getSource(t, s) {
          const h = this.getSourceCache(t, s);
          return h && h.getSource();
        }
        getLayerSource(t) {
          const s = this.getLayerSourceCache(t);
          return s && s.getSource();
        }
        getSourceCache(t, s) {
          const h = i.aC(t, s);
          return this._mergedOtherSourceCaches[h];
        }
        getLayerSourceCache(t) {
          const s = i.aC(t.source, t.scope);
          return t.type === "symbol" ? this._mergedSymbolSourceCaches[s] : this._mergedOtherSourceCaches[s];
        }
        getSourceCaches(t) {
          if (t == null)
            return Object.values(this._mergedSourceCaches);
          const s = [];
          return this._mergedOtherSourceCaches[t] && s.push(this._mergedOtherSourceCaches[t]), this._mergedSymbolSourceCaches[t] && s.push(this._mergedSymbolSourceCaches[t]), s;
        }
        updateSourceCaches() {
          const t = this._changes.getUpdatedSourceCaches();
          for (const s in t) {
            const h = t[s];
            h === "reload" ? this.reloadSource(s) : h === "clear" && this.clearSource(s);
          }
        }
        updateLayers(t) {
          const s = this._changes.getUpdatedPaintProperties();
          for (const h of s) {
            const _ = this.getLayer(h);
            _ && _.updateTransitions(t);
          }
        }
        getImages(t, s, h) {
          this.imageManager.getImages(s.icons, s.scope, h), this._updateTilesForChangedImages();
          const _ = (y) => {
            y && y.setDependencies(s.tileID.key, s.type, s.icons);
          };
          _(this._otherSourceCaches[s.source]), _(this._symbolSourceCaches[s.source]);
        }
        rasterizeImages(t, s, h) {
          this.imageManager.rasterizeImages(s, h);
        }
        getGlyphs(t, s, h) {
          this.glyphManager.getGlyphs(s.stacks, s.scope, h);
        }
        getResource(t, s, h) {
          return i.cy(s, h);
        }
        getOwnSourceCache(t) {
          return this._otherSourceCaches[t];
        }
        getOwnLayerSourceCache(t) {
          return t.type === "symbol" ? this._symbolSourceCaches[t.source] : this._otherSourceCaches[t.source];
        }
        getOwnSourceCaches(t) {
          const s = [];
          return this._otherSourceCaches[t] && s.push(this._otherSourceCaches[t]), this._symbolSourceCaches[t] && s.push(this._symbolSourceCaches[t]), s;
        }
        _isSourceCacheLoaded(t) {
          const s = this.getOwnSourceCaches(t);
          return s.length === 0 ? (this.fire(new i.y(new Error(`There is no source with ID '${t}'`))), !1) : s.every((h) => h.loaded());
        }
        has3DLayers() {
          return this._has3DLayers;
        }
        hasSymbolLayers() {
          return this._hasSymbolLayers;
        }
        hasCircleLayers() {
          return this._hasCircleLayers;
        }
        isLayerClipped(t, s) {
          if (!this._clipLayerPresent && t.type !== "fill-extrusion")
            return !1;
          const h = t.type === "fill-extrusion" && t.sourceLayer === "building";
          if (t.is3D()) {
            if (h || s && s.type === "batched-model" || t.type === "model")
              return !0;
          } else if (t.type === "symbol")
            return !0;
          return !1;
        }
        _clearWorkerCaches() {
          this.dispatcher.broadcast("clearCaches");
        }
        destroy() {
          this._clearWorkerCaches(), this.fragments.forEach((t) => {
            t.style._remove();
          }), this.terrainSetForDrapingOnly() && (delete this.terrain, delete this.stylesheet.terrain);
        }
      }
      hr.getSourceType = function(c) {
        return no[c];
      }, hr.setSourceType = function(c, t) {
        no[c] = t;
      }, hr.registerForPluginStateChange = i.ch;
      var Zc = `
#define EPSILON 0.0000001
#define PI 3.141592653589793
#ifdef RENDER_CUTOFF
float cutoff_opacity(vec4 cutoff_params,float depth) {float near=cutoff_params.x;float far=cutoff_params.y;float cutoffStart=cutoff_params.z;float cutoffEnd=cutoff_params.w;float linearDepth=(depth-near)/(far-near);return clamp((linearDepth-cutoffStart)/(cutoffEnd-cutoffStart),0.0,1.0);}
#endif`, Hc = `
out vec4 glFragColor;highp float unpack_depth(highp vec4 rgba_depth)
{const highp vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(rgba_depth,bit_shift)*2.0-1.0;}highp vec4 pack_depth(highp float ndc_z) {highp float depth=ndc_z*0.5+0.5;const highp vec4 bit_shift=vec4(255.0*255.0*255.0,255.0*255.0,255.0,1.0);const highp vec4 bit_mask =vec4(0.0,1.0/255.0,1.0/255.0,1.0/255.0);highp vec4 res=fract(depth*bit_shift);res-=res.xxyz*bit_mask;return res;}
#ifdef INDICATOR_CUTOUT
uniform vec3 u_indicator_cutout_centers;uniform vec4 u_indicator_cutout_params;
#endif
vec4 applyCutout(vec4 color,float height) {
#ifdef INDICATOR_CUTOUT
float verticalFadeRange=u_indicator_cutout_centers.z*0.25;float holeMinOpacity=mix(1.0,u_indicator_cutout_params.x,smoothstep(u_indicator_cutout_centers.z,u_indicator_cutout_centers.z+verticalFadeRange,height));float holeRadius=max(u_indicator_cutout_params.y,0.0);float holeAspectRatio=u_indicator_cutout_params.z;float fadeStart=u_indicator_cutout_params.w;float distA=distance(vec2(gl_FragCoord.x,gl_FragCoord.y*holeAspectRatio),vec2(u_indicator_cutout_centers[0],u_indicator_cutout_centers[1]*holeAspectRatio));return color*min(smoothstep(fadeStart,holeRadius,distA)+holeMinOpacity,1.0);
#else
return color;
#endif
}
#ifdef DEBUG_WIREFRAME
#define HANDLE_WIREFRAME_DEBUG \\
glFragColor=vec4(0.7,0.0,0.0,0.7); \\
gl_FragDepth=gl_FragCoord.z-0.0001;
#else
#define HANDLE_WIREFRAME_DEBUG
#endif
#ifdef RENDER_CUTOFF
uniform highp vec4 u_cutoff_params;in float v_cutoff_opacity;
#endif
vec4 textureLodCustom(sampler2D image,highp vec2 pos,highp vec2 lod_coord) {highp vec2 size=vec2(textureSize(image,0));highp vec2 dx=dFdx(lod_coord.xy*size);highp vec2 dy=dFdy(lod_coord.xy*size);highp float delta_max_sqr=max(dot(dx,dx),dot(dy,dy));highp float lod=0.5*log2(delta_max_sqr);return textureLod(image,pos,lod);}vec4 applyLUT(highp sampler3D lut,vec4 col) {vec3 size=vec3(textureSize(lut,0));vec3 uvw=(col.rbg*float(size-1.0)+0.5)/size;return vec4(texture(lut,uvw).rgb,col.a);}vec3 applyLUT(highp sampler3D lut,vec3 col) {return applyLUT(lut,vec4(col,1.0)).rgb;}`, xr = `
#define EXTENT 8192.0
#define RAD_TO_DEG 180.0/PI
#define DEG_TO_RAD PI/180.0
#define GLOBE_RADIUS EXTENT/PI/2.0
float wrap(float n,float min,float max) {float d=max-min;float w=mod(mod(n-min,d)+d,d)+min;return (w==min) ? max : w;}
#ifdef PROJECTION_GLOBE_VIEW
vec3 mercator_tile_position(mat4 matrix,vec2 tile_anchor,vec3 tile_id,vec2 mercator_center) {
#ifndef PROJECTED_POS_ON_VIEWPORT
float tiles=tile_id.z;vec2 mercator=(tile_anchor/EXTENT+tile_id.xy)/tiles;mercator-=mercator_center;mercator.x=wrap(mercator.x,-0.5,0.5);vec4 mercator_tile=vec4(mercator.xy*EXTENT,EXTENT/(2.0*PI),1.0);mercator_tile=matrix*mercator_tile;return mercator_tile.xyz;
#else
return vec3(0.0);
#endif
}vec3 mix_globe_mercator(vec3 globe,vec3 mercator,float t) {return mix(globe,mercator,t);}mat3 globe_mercator_surface_vectors(vec3 pos_normal,vec3 up_dir,float zoom_transition) {vec3 normal=zoom_transition==0.0 ? pos_normal : normalize(mix(pos_normal,up_dir,zoom_transition));vec3 xAxis=normalize(vec3(normal.z,0.0,-normal.x));vec3 yAxis=normalize(cross(normal,xAxis));return mat3(xAxis,yAxis,normal);}
#endif
vec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(
unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0
);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const vec2 units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (units_to_pixels*pos+offset)/pattern_size;}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {return get_pattern_pos(pixel_coord_upper,pixel_coord_lower,pattern_size,vec2(tile_units_to_pixels),pos);}float mercatorXfromLng(float lng) {return (180.0+lng)/360.0;}float mercatorYfromLat(float lat) {return (180.0-(RAD_TO_DEG*log(tan(PI/4.0+lat/2.0*DEG_TO_RAD))))/360.0;}vec3 latLngToECEF(vec2 latLng) {latLng=DEG_TO_RAD*latLng;float cosLat=cos(latLng[0]);float sinLat=sin(latLng[0]);float cosLng=cos(latLng[1]);float sinLng=sin(latLng[1]);float sx=cosLat*sinLng*GLOBE_RADIUS;float sy=-sinLat*GLOBE_RADIUS;float sz=cosLat*cosLng*GLOBE_RADIUS;return vec3(sx,sy,sz);}
#ifdef RENDER_CUTOFF
uniform vec4 u_cutoff_params;out float v_cutoff_opacity;
#endif
const vec4 AWAY=vec4(-1000.0,-1000.0,-1000.0,1);const float skirtOffset=24575.0;vec3 decomposeToPosAndSkirt(vec2 posWithComposedSkirt)
{float skirt=float(posWithComposedSkirt.x >=skirtOffset);vec2 pos=posWithComposedSkirt-vec2(skirt*skirtOffset,0.0);return vec3(pos,skirt);}`, Ko = "in highp vec3 a_pos_3f;uniform lowp mat4 u_matrix;out highp vec3 v_uv;void main() {const mat3 half_neg_pi_around_x=mat3(1.0,0.0, 0.0,0.0,0.0,-1.0,0.0,1.0, 0.0);v_uv=half_neg_pi_around_x*a_pos_3f;vec4 pos=u_matrix*vec4(a_pos_3f,1.0);gl_Position=pos.xyww;}", Xl = `
#define ELEVATION_SCALE 7.0
#define ELEVATION_OFFSET 450.0
#ifdef PROJECTION_GLOBE_VIEW
uniform vec3 u_tile_tl_up;uniform vec3 u_tile_tr_up;uniform vec3 u_tile_br_up;uniform vec3 u_tile_bl_up;uniform float u_tile_up_scale;vec3 elevationVector(vec2 pos) {vec2 uv=pos/EXTENT;vec3 up=normalize(mix(
mix(u_tile_tl_up,u_tile_tr_up,uv.xxx),mix(u_tile_bl_up,u_tile_br_up,uv.xxx),uv.yyy));return up*u_tile_up_scale;}
#else
vec3 elevationVector(vec2 pos) { return vec3(0,0,1); }
#endif
#ifdef TERRAIN
uniform highp sampler2D u_dem;uniform highp sampler2D u_dem_prev;uniform vec2 u_dem_tl;uniform vec2 u_dem_tl_prev;uniform float u_dem_scale;uniform float u_dem_scale_prev;uniform float u_dem_size;uniform float u_dem_lerp;uniform float u_exaggeration;uniform float u_meter_to_dem;uniform mat4 u_label_plane_matrix_inv;vec4 tileUvToDemSample(vec2 uv,float dem_size,float dem_scale,vec2 dem_tl) {vec2 pos=dem_size*(uv*dem_scale+dem_tl)+1.0;vec2 f=fract(pos);return vec4((pos-f+0.5)/(dem_size+2.0),f);}float currentElevation(vec2 apos) {
#ifdef TERRAIN_DEM_FLOAT_FORMAT
vec2 pos=(u_dem_size*(apos/8192.0*u_dem_scale+u_dem_tl)+1.5)/(u_dem_size+2.0);return u_exaggeration*texture(u_dem,pos).r;
#else
float dd=1.0/(u_dem_size+2.0);vec4 r=tileUvToDemSample(apos/8192.0,u_dem_size,u_dem_scale,u_dem_tl);vec2 pos=r.xy;vec2 f=r.zw;float tl=texture(u_dem,pos).r;float tr=texture(u_dem,pos+vec2(dd,0)).r;float bl=texture(u_dem,pos+vec2(0,dd)).r;float br=texture(u_dem,pos+vec2(dd,dd)).r;return u_exaggeration*mix(mix(tl,tr,f.x),mix(bl,br,f.x),f.y);
#endif
}float prevElevation(vec2 apos) {
#ifdef TERRAIN_DEM_FLOAT_FORMAT
vec2 pos=(u_dem_size*(apos/8192.0*u_dem_scale_prev+u_dem_tl_prev)+1.5)/(u_dem_size+2.0);return u_exaggeration*texture(u_dem_prev,pos).r;
#else
float dd=1.0/(u_dem_size+2.0);vec4 r=tileUvToDemSample(apos/8192.0,u_dem_size,u_dem_scale_prev,u_dem_tl_prev);vec2 pos=r.xy;vec2 f=r.zw;float tl=texture(u_dem_prev,pos).r;float tr=texture(u_dem_prev,pos+vec2(dd,0)).r;float bl=texture(u_dem_prev,pos+vec2(0,dd)).r;float br=texture(u_dem_prev,pos+vec2(dd,dd)).r;return u_exaggeration*mix(mix(tl,tr,f.x),mix(bl,br,f.x),f.y);
#endif
}
#ifdef TERRAIN_VERTEX_MORPHING
float elevation(vec2 apos) {
#ifdef ZERO_EXAGGERATION
return 0.0;
#endif
float nextElevation=currentElevation(apos);float prevElevation=prevElevation(apos);return mix(prevElevation,nextElevation,u_dem_lerp);}
#else
float elevation(vec2 apos) {
#ifdef ZERO_EXAGGERATION
return 0.0;
#endif
return currentElevation(apos);}
#endif
vec4 fourSample(vec2 pos,vec2 off) {float tl=texture(u_dem,pos).r;float tr=texture(u_dem,pos+vec2(off.x,0.0)).r;float bl=texture(u_dem,pos+vec2(0.0,off.y)).r;float br=texture(u_dem,pos+off).r;return vec4(tl,tr,bl,br);}float flatElevation(vec2 pack) {vec2 apos=floor(pack/8.0);vec2 span=10.0*(pack-apos*8.0);vec2 uvTex=(apos-vec2(1.0,1.0))/8190.0;float size=u_dem_size+2.0;float dd=1.0/size;vec2 pos=u_dem_size*(uvTex*u_dem_scale+u_dem_tl)+1.0;vec2 f=fract(pos);pos=(pos-f+0.5)*dd;vec4 h=fourSample(pos,vec2(dd));float z=mix(mix(h.x,h.y,f.x),mix(h.z,h.w,f.x),f.y);vec2 w=floor(0.5*(span*u_meter_to_dem-1.0));vec2 d=dd*w;h=fourSample(pos-d,2.0*d+vec2(dd));vec4 diff=abs(h.xzxy-h.ywzw);vec2 slope=min(vec2(0.25),u_meter_to_dem*0.5*(diff.xz+diff.yw)/(2.0*w+vec2(1.0)));vec2 fix=slope*span;float base=z+max(fix.x,fix.y);return u_exaggeration*base;}float elevationFromUint16(float word) {return u_exaggeration*(word/ELEVATION_SCALE-ELEVATION_OFFSET);}
#else
float elevation(vec2 pos) { return 0.0; }
#endif
#ifdef DEPTH_OCCLUSION
uniform highp sampler2D u_depth;uniform highp vec2 u_depth_size_inv;uniform highp vec2 u_depth_range_unpack;uniform highp float u_occluder_half_size;uniform highp float u_occlusion_depth_offset;
#ifdef DEPTH_D24
float unpack_depth(float depth) {return depth*u_depth_range_unpack.x+u_depth_range_unpack.y;}vec4 unpack_depth4(vec4 depth) {return depth*u_depth_range_unpack.x+vec4(u_depth_range_unpack.y);}
#else
highp float unpack_depth_rgba(vec4 rgba_depth)
{const highp vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(rgba_depth,bit_shift)*2.0-1.0;}
#endif
bool isOccluded(vec4 frag) {vec3 coord=frag.xyz/frag.w;
#ifdef DEPTH_D24
float depth=unpack_depth(texture(u_depth,(coord.xy+1.0)*0.5).r);
#else
float depth=unpack_depth_rgba(texture(u_depth,(coord.xy+1.0)*0.5));
#endif
return coord.z+u_occlusion_depth_offset > depth;}highp vec4 getCornerDepths(vec2 coord) {highp vec3 df=vec3(u_occluder_half_size*u_depth_size_inv,0.0);highp vec2 uv=0.5*coord.xy+0.5;
#ifdef DEPTH_D24
highp vec4 depth=vec4(
texture(u_depth,uv-df.xz).r,texture(u_depth,uv+df.xz).r,texture(u_depth,uv-df.zy).r,texture(u_depth,uv+df.zy).r
);depth=unpack_depth4(depth);
#else
highp vec4 depth=vec4(
unpack_depth_rgba(texture(u_depth,uv-df.xz)),unpack_depth_rgba(texture(u_depth,uv+df.xz)),unpack_depth_rgba(texture(u_depth,uv-df.zy)),unpack_depth_rgba(texture(u_depth,uv+df.zy))
);
#endif
return depth;}highp float occlusionFadeMultiSample(vec4 frag) {highp vec3 coord=frag.xyz/frag.w;highp vec2 uv=0.5*coord.xy+0.5;int NX=3;int NY=4;highp vec2 df=u_occluder_half_size*u_depth_size_inv;highp vec2 oneStep=2.0*u_occluder_half_size*u_depth_size_inv/vec2(NX-1,NY-1);highp float res=0.0;for (int y=0; y < NY;++y) {for (int x=0; x < NX;++x) {
#ifdef DEPTH_D24
highp float depth=unpack_depth(texture(u_depth,uv-df+vec2(float(x)*oneStep.x,float(y)*oneStep.y)).r);
#else
highp float depth=unpack_depth_rgba(texture(u_depth,uv-df+vec2(float(x)*oneStep.x,float(y)*oneStep.y)));
#endif
res+=1.0-clamp(300.0*(coord.z+u_occlusion_depth_offset-depth),0.0,1.0);}}res=clamp(2.0*res/float(NX*NY)-0.5,0.0,1.0);return res;}highp float occlusionFade(vec4 frag) {highp vec3 coord=frag.xyz/frag.w;highp vec4 depth=getCornerDepths(coord.xy);return dot(vec4(0.25),vec4(1.0)-clamp(300.0*(vec4(coord.z+u_occlusion_depth_offset)-depth),0.0,1.0));}
#else
bool isOccluded(vec4 frag) { return false; }highp float occlusionFade(vec4 frag) { return 1.0; }highp float occlusionFadeMultiSample(vec4 frag) { return 1.0; }
#endif//DEPTH_OCCLUSION`, Jr = `#ifdef FOG
uniform mediump vec4 u_fog_color;uniform mediump vec2 u_fog_range;uniform mediump float u_fog_horizon_blend;uniform mediump mat4 u_fog_matrix;out vec3 v_fog_pos;float fog_range(float depth) {return (depth-u_fog_range[0])/(u_fog_range[1]-u_fog_range[0]);}float fog_horizon_blending(vec3 camera_dir) {float t=max(0.0,camera_dir.z/u_fog_horizon_blend);return u_fog_color.a*exp(-3.0*t*t);}float fog_opacity(float t) {const float decay=6.0;float falloff=1.0-min(1.0,exp(-decay*t));falloff*=falloff*falloff;return u_fog_color.a*min(1.0,1.00747*falloff);}vec3 fog_position(vec3 pos) {return (u_fog_matrix*vec4(pos,1.0)).xyz;}vec3 fog_position(vec2 pos) {return fog_position(vec3(pos,0.0));}float fog(vec3 pos) {float depth=length(pos);float opacity=fog_opacity(fog_range(depth));return opacity*fog_horizon_blending(pos/depth);}
#endif`, Yl = `highp vec3 hash(highp vec2 p) {highp vec3 p3=fract(p.xyx*vec3(443.8975,397.2973,491.1871));p3+=dot(p3,p3.yxz+19.19);return fract((p3.xxy+p3.yzz)*p3.zyx);}vec3 dither(vec3 color,highp vec2 seed) {vec3 rnd=hash(seed)+hash(seed+0.59374)-0.5;return color+rnd/255.0;}
#ifdef FOG
uniform mediump vec4 u_fog_color;uniform mediump vec2 u_fog_range;uniform mediump float u_fog_horizon_blend;uniform mediump vec2 u_fog_vertical_limit;uniform mediump float u_fog_temporal_offset;in vec3 v_fog_pos;uniform highp vec3 u_frustum_tl;uniform highp vec3 u_frustum_tr;uniform highp vec3 u_frustum_br;uniform highp vec3 u_frustum_bl;uniform highp vec3 u_globe_pos;uniform highp float u_globe_radius;uniform highp vec2 u_viewport;uniform float u_globe_transition;uniform int u_is_globe;float fog_range(float depth) {return (depth-u_fog_range[0])/(u_fog_range[1]-u_fog_range[0]);}float fog_horizon_blending(vec3 camera_dir) {float t=max(0.0,camera_dir.z/u_fog_horizon_blend);return u_fog_color.a*exp(-3.0*t*t);}float fog_opacity(float t) {const float decay=6.0;float falloff=1.0-min(1.0,exp(-decay*t));falloff*=falloff*falloff;return u_fog_color.a*min(1.0,1.00747*falloff);}float globe_glow_progress() {highp vec2 uv=gl_FragCoord.xy/u_viewport;highp vec3 ray_dir=mix(
mix(u_frustum_tl,u_frustum_tr,uv.x),mix(u_frustum_bl,u_frustum_br,uv.x),1.0-uv.y);highp vec3 dir=normalize(ray_dir);highp vec3 closest_point=dot(u_globe_pos,dir)*dir;highp float sdf=length(closest_point-u_globe_pos)/u_globe_radius;return sdf+PI*0.5;}float fog_opacity(vec3 pos) {float depth=length(pos);return fog_opacity(fog_range(depth));}vec3 fog_apply(vec3 color,vec3 pos,float opacity_limit) {float depth=length(pos);float opacity;if (u_is_globe==1) {float glow_progress=globe_glow_progress();float t=mix(glow_progress,depth,u_globe_transition);opacity=fog_opacity(fog_range(t));} else {opacity=fog_opacity(fog_range(depth));opacity*=fog_horizon_blending(pos/depth);}return mix(color,u_fog_color.rgb,min(opacity,opacity_limit));}vec3 fog_apply(vec3 color,vec3 pos) {return fog_apply(color,pos,1.0);}vec4 fog_apply_from_vert(vec4 color,float fog_opac) {float alpha=EPSILON+color.a;color.rgb=mix(color.rgb/alpha,u_fog_color.rgb,fog_opac)*alpha;return color;}vec3 fog_apply_sky_gradient(vec3 camera_ray,vec3 sky_color) {float horizon_blend=fog_horizon_blending(normalize(camera_ray));return mix(sky_color,u_fog_color.rgb,horizon_blend);}vec4 fog_apply_premultiplied(vec4 color,vec3 pos) {float alpha=EPSILON+color.a;color.rgb=fog_apply(color.rgb/alpha,pos)*alpha;return color;}vec4 fog_apply_premultiplied(vec4 color,vec3 pos,float heightMeters) {float verticalProgress=(u_fog_vertical_limit.x > 0.0 || u_fog_vertical_limit.y > 0.0) ? smoothstep(u_fog_vertical_limit.x,u_fog_vertical_limit.y,heightMeters) : 0.0;float opacityLimit=1.0-smoothstep(0.9,1.0,fog_opacity(pos));return mix(fog_apply_premultiplied(color,pos),color,min(verticalProgress,opacityLimit));}vec3 fog_dither(vec3 color) {
#ifdef FOG_DITHERING
vec2 dither_seed=gl_FragCoord.xy+u_fog_temporal_offset;return dither(color,dither_seed);
#else
return color;
#endif
}vec4 fog_dither(vec4 color) {return vec4(fog_dither(color.rgb),color.a);}
#endif`, Kl = `#ifdef RASTER_ARRAY
uniform highp sampler2D u_image0;uniform sampler2D u_image1;const vec4 NODATA=vec4(1);ivec4 _raTexLinearCoord(highp vec2 texCoord,highp vec2 texResolution,out highp vec2 fxy) {texCoord=texCoord*texResolution-0.5;fxy=fract(texCoord);texCoord-=fxy;return ivec4(texCoord.xxyy+vec2(1.5,0.5).xyxy);}vec2 _raTexLinearMix(highp vec2 fxy,highp vec4 colorMix,highp float colorOffset,highp vec4 t00,highp vec4 t10,highp vec4 t01,highp vec4 t11) {vec2 c00=t00==NODATA ? vec2(0) : vec2(colorOffset+dot(t00,colorMix),1);vec2 c10=t10==NODATA ? vec2(0) : vec2(colorOffset+dot(t10,colorMix),1);vec2 c01=t01==NODATA ? vec2(0) : vec2(colorOffset+dot(t01,colorMix),1);vec2 c11=t11==NODATA ? vec2(0) : vec2(colorOffset+dot(t11,colorMix),1);return mix(mix(c01,c11,fxy.x),mix(c00,c10,fxy.x),fxy.y);}vec2 raTexture2D_image0_linear(highp vec2 texCoord,highp vec2 texResolution,highp vec4 colorMix,highp float colorOffset) {vec2 fxy;ivec4 c=_raTexLinearCoord(texCoord,texResolution,fxy);return _raTexLinearMix(fxy,colorMix,colorOffset,texelFetch(u_image0,c.yz,0),texelFetch(u_image0,c.xz,0),texelFetch(u_image0,c.yw,0),texelFetch(u_image0,c.xw,0)
);}vec2 raTexture2D_image1_linear(highp vec2 texCoord,highp vec2 texResolution,highp vec4 colorMix,highp float colorOffset) {vec2 fxy;ivec4 c=_raTexLinearCoord(texCoord,texResolution,fxy);return _raTexLinearMix(fxy,colorMix,colorOffset,texelFetch(u_image1,c.yz,0),texelFetch(u_image1,c.xz,0),texelFetch(u_image1,c.yw,0),texelFetch(u_image1,c.xw,0)
);}vec2 raTexture2D_image0_nearest(highp vec2 texCoord,highp vec2 texResolution,highp vec4 colorMix,highp float colorOffset) {vec4 t=texelFetch(u_image0,ivec2(texCoord*texResolution),0);return t==NODATA ? vec2(0) : vec2(colorOffset+dot(t,colorMix),1);}vec2 raTexture2D_image1_nearest(highp vec2 texCoord,highp vec2 texResolution,highp vec4 colorMix,highp float colorOffset) {vec4 t=texelFetch(u_image1,ivec2(texCoord*texResolution),0);return t==NODATA ? vec2(0) : vec2(colorOffset+dot(t,colorMix),1);}
#endif`, ya = `#ifdef RASTER_ARRAY
uniform sampler2D u_velocity;uniform mediump vec2 u_velocity_res;uniform mediump float u_max_speed;const vec4 NO_DATA=vec4(1);const vec2 INVALID_VELOCITY=vec2(-1);uniform highp vec2 u_uv_offset;uniform highp float u_data_offset;uniform highp vec2 u_data_scale;ivec4 rasterArrayLinearCoord(highp vec2 texCoord,highp vec2 texResolution,out highp vec2 fxy) {texCoord=texCoord*texResolution-0.5;fxy=fract(texCoord);texCoord-=fxy;return ivec4(texCoord.xxyy+vec2(1.5,0.5).xyxy);}highp vec2 lookup_velocity(highp vec2 uv) {uv=u_uv_offset.x+u_uv_offset.y*uv;highp vec2 fxy;ivec4 c=rasterArrayLinearCoord(uv,u_velocity_res,fxy);highp vec4 tl=texelFetch(u_velocity,c.yz,0);highp vec4 tr=texelFetch(u_velocity,c.xz,0);highp vec4 bl=texelFetch(u_velocity,c.yw,0);highp vec4 br=texelFetch(u_velocity,c.xw,0);if (tl==NO_DATA) {return INVALID_VELOCITY;}if (tr==NO_DATA) {return INVALID_VELOCITY;}if (bl==NO_DATA) {return INVALID_VELOCITY;}if (br==NO_DATA) {return INVALID_VELOCITY;}highp vec4 t=mix(mix(bl,br,fxy.x),mix(tl,tr,fxy.x),fxy.y);highp vec2 velocity=u_data_offset+vec2(dot(t.rg,u_data_scale),dot(t.ba,u_data_scale));velocity.y=-velocity.y;velocity/=max(u_max_speed,length(velocity));return velocity;}
#endif
uniform highp float u_particle_pos_scale;uniform highp vec2 u_particle_pos_offset;highp vec4 pack_pos_to_rgba(highp vec2 p) {highp vec2 v=(p+u_particle_pos_offset)/u_particle_pos_scale;highp vec4 r=vec4(v.x,fract(v.x*255.0),v.y,fract(v.y*255.0));return vec4(r.x-r.y/255.0,r.y,r.z-r.w/255.0,r.w);}highp vec2 unpack_pos_from_rgba(highp vec4 v) {v=floor(v*255.0+0.5)/255.0;highp vec2 p=vec2(v.x+(v.y/255.0),v.z+(v.w/255.0));return u_particle_pos_scale*p-u_particle_pos_offset;}`, ro = `#ifdef RENDER_SHADOWS
uniform mediump vec3 u_shadow_direction;uniform highp vec3 u_shadow_normal_offset;vec3 shadow_normal_offset(vec3 normal) {float tileInMeters=u_shadow_normal_offset[0];vec3 n=vec3(-normal.xy,tileInMeters*normal.z);float dotScale=min(1.0-dot(normal,u_shadow_direction),1.0)*0.5+0.5;return n*dotScale;}vec3 shadow_normal_offset_model(vec3 normal) {vec3 transformed_normal=vec3(-normal.xy,normal.z);float NDotL=dot(normalize(transformed_normal),u_shadow_direction);float dotScale=min(1.0-NDotL,1.0)*0.5+0.5;return normal*dotScale;}float shadow_normal_offset_multiplier0() {return u_shadow_normal_offset[1];}float shadow_normal_offset_multiplier1() {return u_shadow_normal_offset[2];}
#endif//RENDER_SHADOWS`, xl = `#ifdef RENDER_SHADOWS
#ifdef DEPTH_TEXTURE
uniform highp sampler2D u_shadowmap_0;uniform highp sampler2D u_shadowmap_1;
#else
uniform sampler2D u_shadowmap_0;uniform sampler2D u_shadowmap_1;
#endif
uniform float u_shadow_intensity;uniform float u_shadow_map_resolution;uniform float u_shadow_texel_size;uniform highp vec3 u_shadow_normal_offset;uniform vec2 u_fade_range;uniform mediump vec3 u_shadow_direction;uniform highp vec3 u_shadow_bias;highp float shadow_sample_1(highp vec2 uv,highp float compare) {highp float shadow_depth;
#ifdef DEPTH_TEXTURE
shadow_depth=texture(u_shadowmap_1,uv).r;
#else
shadow_depth=unpack_depth(texture(u_shadowmap_1,uv))*0.5+0.5;
#endif
return step(shadow_depth,compare);}highp float shadow_sample_0(highp vec2 uv,highp float compare) {highp float shadow_depth;
#ifdef DEPTH_TEXTURE
shadow_depth=texture(u_shadowmap_0,uv).r;
#else
shadow_depth=unpack_depth(texture(u_shadowmap_0,uv))*0.5+0.5;
#endif
return step(shadow_depth,compare);}float shadow_occlusion_1(highp vec4 pos,highp float bias) {highp vec2 uv=pos.xy;return shadow_sample_1(uv,pos.z-bias);}float shadow_occlusion_0(highp vec4 pos,highp float bias) {highp float compare0=pos.z-bias;
#ifdef TEXTURE_GATHER
highp vec2 uv=pos.xy;highp vec4 samples=textureGather(u_shadowmap_0,uv,0);lowp vec4 stepSamples=step(samples,vec4(compare0));
#else
highp vec2 uv00=pos.xy-vec2(0.5*u_shadow_texel_size);highp vec2 uv10=uv00+vec2(u_shadow_texel_size,0.0);highp vec2 uv01=uv00+vec2(0.0,u_shadow_texel_size);highp vec2 uv11=uv01+vec2(u_shadow_texel_size,0.0);lowp vec4 stepSamples=vec4(
shadow_sample_0(uv01,compare0),shadow_sample_0(uv11,compare0),shadow_sample_0(uv10,compare0),shadow_sample_0(uv00,compare0)
);
#endif
vec2 f=fract(pos.xy*u_shadow_map_resolution-vec2(0.5));lowp vec2 lerpx=mix(stepSamples.wx,stepSamples.zy,f.xx);return mix(lerpx.x,lerpx.y,f.y);}float shadow_occlusion(highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth,highp float bias) {
#ifdef SHADOWS_SINGLE_CASCADE
light_view_pos0.xyz/=light_view_pos0.w;vec2 abs_bounds=abs(light_view_pos0.xy);if (abs_bounds.x >=1.0 || abs_bounds.y >=1.0) {return 0.0;}light_view_pos0.xyz=light_view_pos0.xyz*0.5+0.5;return shadow_occlusion_0(light_view_pos0,bias);
#else
light_view_pos0.xyz/=light_view_pos0.w;light_view_pos1.xyz/=light_view_pos1.w;vec4 uv=vec4(light_view_pos0.xy,light_view_pos1.xy);vec4 abs_bounds=abs(uv);if (abs_bounds.x < 1.0 && abs_bounds.y < 1.0) {light_view_pos0.xyz=light_view_pos0.xyz*0.5+0.5;return shadow_occlusion_0(light_view_pos0,bias);}if (abs_bounds.z >=1.0 || abs_bounds.w >=1.0) {return 0.0;}light_view_pos1.xyz=light_view_pos1.xyz*0.5+0.5;float occlusion1=shadow_occlusion_1(light_view_pos1,bias);return mix(occlusion1,0.0,smoothstep(u_fade_range.x,u_fade_range.y,view_depth));
#endif
}highp float calculate_shadow_bias(float NDotL) {
#ifdef NORMAL_OFFSET
return 0.5*u_shadow_bias.x;
#else
return 0.5*(u_shadow_bias.x+clamp(u_shadow_bias.y*tan(acos(NDotL)),0.0,u_shadow_bias.z));
#endif
}float shadowed_light_factor_normal(vec3 N,highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth) {float NDotL=dot(N,u_shadow_direction);float bias=calculate_shadow_bias(NDotL);float occlusion=shadow_occlusion(light_view_pos0,light_view_pos1,view_depth,bias);return mix(0.0,(1.0-(u_shadow_intensity*occlusion))*NDotL,step(0.0,NDotL));}float shadowed_light_factor_normal_opacity(vec3 N,highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth,float shadow_opacity) {float NDotL=dot(N,u_shadow_direction);float bias=calculate_shadow_bias(NDotL);float occlusion=shadow_occlusion(light_view_pos0,light_view_pos1,view_depth,bias)*shadow_opacity;return mix(0.0,(1.0-(u_shadow_intensity*occlusion))*NDotL,step(0.0,NDotL));}float shadowed_light_factor_normal_unbiased(vec3 N,highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth) {float NDotL=dot(N,u_shadow_direction);float bias=0.0;float occlusion=shadow_occlusion(light_view_pos0,light_view_pos1,view_depth,bias);return mix(0.0,(1.0-(u_shadow_intensity*occlusion))*NDotL,step(0.0,NDotL));}highp vec2 compute_receiver_plane_depth_bias(highp vec3 pos_dx,highp vec3 pos_dy)
{highp vec2 biasUV=vec2(
pos_dy.y*pos_dx.z-pos_dx.y*pos_dy.z,pos_dx.x*pos_dy.z-pos_dy.x*pos_dx.z);biasUV*=1.0/((pos_dx.x*pos_dy.y)-(pos_dx.y*pos_dy.x));return biasUV;}float shadowed_light_factor_plane_bias(highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth) {highp vec3 light_view_pos0_xyz=light_view_pos0.xyz/light_view_pos0.w*0.5+0.5;highp vec3 light_view_pos0_ddx=dFdx(light_view_pos0_xyz);highp vec3 light_view_pos0_ddy=dFdy(light_view_pos0_xyz);highp vec2 plane_depth_bias=compute_receiver_plane_depth_bias(light_view_pos0_ddx,light_view_pos0_ddy);highp float bias=dot(vec2(u_shadow_texel_size,u_shadow_texel_size),plane_depth_bias)+0.0001;float occlusion=shadow_occlusion(light_view_pos0,light_view_pos1,view_depth,bias);return 1.0-(u_shadow_intensity*occlusion);}float shadowed_light_factor(highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth) {float bias=0.0;float occlusion=shadow_occlusion(light_view_pos0,light_view_pos1,view_depth,bias);return 1.0-(u_shadow_intensity*occlusion);}float shadow_occlusion(float ndotl,highp vec4 light_view_pos0,highp vec4 light_view_pos1,float view_depth) {float bias=calculate_shadow_bias(ndotl);return shadow_occlusion(light_view_pos0,light_view_pos1,view_depth,bias);}
#endif`;
      const kr = [];
      ao(Zc, kr), ao(xr, kr), ao(Hc, kr);
      const oo = { "_prelude_fog.vertex.glsl": Jr, "_prelude_terrain.vertex.glsl": Xl, "_prelude_shadow.vertex.glsl": ro, "_prelude_fog.fragment.glsl": Yl, "_prelude_shadow.fragment.glsl": xl, "_prelude_lighting.glsl": `
#ifdef LIGHTING_3D_MODE
uniform mediump vec3 u_lighting_ambient_color;uniform mediump vec3 u_lighting_directional_dir;uniform mediump vec3 u_lighting_directional_color;uniform mediump vec3 u_ground_radiance;float calculate_ambient_directional_factor(vec3 normal) {float NdotL=dot(normal,u_lighting_directional_dir);const float factor_reduction_max=0.3;float dir_luminance=dot(u_lighting_directional_color,vec3(0.2126,0.7152,0.0722));float directional_factor_min=1.0-factor_reduction_max*min(dir_luminance,1.0);float ambient_directional_factor=mix(directional_factor_min,1.0,min((NdotL+1.0),1.0));const float vertical_factor_min=0.92;float vertical_factor=mix(vertical_factor_min,1.0,normal.z*0.5+0.5);return vertical_factor*ambient_directional_factor;}vec3 linearProduct(vec3 srgbIn,vec3 k) {return srgbIn*pow(k,vec3(1./2.2));}vec3 apply_lighting(vec3 color,vec3 normal,float dir_factor) {float ambient_directional_factor=calculate_ambient_directional_factor(normal);vec3 ambient_contrib=ambient_directional_factor*u_lighting_ambient_color;vec3 directional_contrib=u_lighting_directional_color*dir_factor;return linearProduct(color,ambient_contrib+directional_contrib);}vec4 apply_lighting(vec4 color,vec3 normal,float dir_factor) {return vec4(apply_lighting(color.rgb,normal,dir_factor),color.a);}vec3 apply_lighting(vec3 color,vec3 normal) {float dir_factor=max(dot(normal,u_lighting_directional_dir),0.0);return apply_lighting(color.rgb,normal,dir_factor);}vec4 apply_lighting(vec4 color,vec3 normal) {float dir_factor=max(dot(normal,u_lighting_directional_dir),0.0);return vec4(apply_lighting(color.rgb,normal,dir_factor),color.a);}vec3 apply_lighting_ground(vec3 color) {return color*u_ground_radiance;}vec4 apply_lighting_ground(vec4 color) {return vec4(apply_lighting_ground(color.rgb),color.a);}float calculate_NdotL(vec3 normal) {const float ext=0.70710678118;return (clamp(dot(normal,u_lighting_directional_dir),-ext,1.0)+ext)/(1.0+ext);}vec4 apply_lighting_with_emission_ground(vec4 color,float emissive_strength) {return mix(apply_lighting_ground(color),color,emissive_strength);}vec3 compute_flood_lighting(vec3 flood_light_color,float fully_occluded_factor,float occlusion,vec3 ground_shadow_factor) {vec3 fully_occluded_color=flood_light_color*mix(ground_shadow_factor,vec3(1.0),fully_occluded_factor);float occlusion_ramp=smoothstep(0.0,0.2,1.0-occlusion);return mix(fully_occluded_color,flood_light_color,occlusion_ramp);}vec3 compute_emissive_draped(vec3 unlit_color,float fully_occluded_factor,float occlusion,vec3 ground_shadow_factor) {vec3 fully_occluded_color=unlit_color*mix(ground_shadow_factor,vec3(1.0),fully_occluded_factor);return mix(fully_occluded_color,unlit_color,1.0-occlusion);}
#endif//LIGHTING_3D_MODE`, "_prelude_raster_array.glsl": Kl, "_prelude_raster_particle.glsl": ya }, Jo = {};
      Ti("", Xl), Ti(Yl, Jr), Ti(xl, ro), Ti(Kl, ""), Ti(ya, "");
      const Jl = Ti(Hc, xr), Qr = Zc;
      var vl = { background: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform vec4 u_color;uniform float u_opacity;
#ifdef LIGHTING_3D_MODE
in vec4 v_color;
#endif
void main() {vec4 out_color;
#ifdef LIGHTING_3D_MODE
out_color=v_color;
#else
out_color=u_color;
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
glFragColor=out_color*u_opacity;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_lighting.glsl"
in vec2 a_pos;uniform mat4 u_matrix;
#ifdef LIGHTING_3D_MODE
uniform mediump vec4 u_color;out vec4 v_color;uniform float u_emissive_strength;
#endif
void main() {gl_Position=u_matrix*vec4(a_pos,0,1);
#ifdef LIGHTING_3D_MODE
v_color=apply_lighting_with_emission_ground(u_color,u_emissive_strength);
#endif
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
}`), backgroundPattern: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform vec2 u_pattern_tl;uniform vec2 u_pattern_br;uniform vec2 u_texsize;uniform float u_opacity;uniform float u_emissive_strength;uniform sampler2D u_image;in highp vec2 v_pos;void main() {highp vec2 imagecoord=mod(v_pos,1.0);highp vec2 pos=mix(u_pattern_tl/u_texsize,u_pattern_br/u_texsize,imagecoord);vec4 out_color=textureLodCustom(u_image,pos,v_pos);
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
glFragColor=out_color*u_opacity;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
uniform mat4 u_matrix;uniform vec2 u_pattern_size;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec2 u_pattern_units_to_pixels;in vec2 a_pos;out highp vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_pattern_size,u_pattern_units_to_pixels,a_pos);
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
}`), circle: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
in vec3 v_data;in float v_visibility;
#pragma mapbox: define highp vec4 color
#pragma mapbox: define mediump float radius
#pragma mapbox: define lowp float blur
#pragma mapbox: define lowp float opacity
#pragma mapbox: define highp vec4 stroke_color
#pragma mapbox: define mediump float stroke_width
#pragma mapbox: define lowp float stroke_opacity
uniform float u_emissive_strength;void main() {
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize mediump float radius
#pragma mapbox: initialize lowp float blur
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize highp vec4 stroke_color
#pragma mapbox: initialize mediump float stroke_width
#pragma mapbox: initialize lowp float stroke_opacity
vec2 extrude=v_data.xy;float blur_positive=blur < 0.0 ? 0.0 : 1.0;lowp float antialiasblur=v_data.z;float extrude_length=length(extrude)+antialiasblur*(1.0-blur_positive);float antialiased_blur=-max(abs(blur),antialiasblur);float opacity_t=smoothstep((1.0-blur_positive)*antialiased_blur,blur_positive*antialiased_blur,extrude_length-1.0)-smoothstep(0.0,antialiasblur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(
antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width)
);vec4 out_color=mix(color*opacity,stroke_color*stroke_opacity,color_t);
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#endif
#ifdef FOG
out_color=fog_apply_premultiplied(out_color,v_fog_pos);
#endif
glFragColor=out_color*(v_visibility*opacity_t);
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
#define NUM_VISIBILITY_RINGS 2
#define INV_SQRT2 0.70710678
#define ELEVATION_BIAS 0.0001
#define NUM_SAMPLES_PER_RING 16
uniform mat4 u_matrix;uniform mat2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;in vec2 a_pos;
#ifdef PROJECTION_GLOBE_VIEW
in vec3 a_pos_3;in vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;
#endif
out vec3 v_data;out float v_visibility;
#pragma mapbox: define highp vec4 color
#pragma mapbox: define mediump float radius
#pragma mapbox: define lowp float blur
#pragma mapbox: define lowp float opacity
#pragma mapbox: define highp vec4 stroke_color
#pragma mapbox: define mediump float stroke_width
#pragma mapbox: define lowp float stroke_opacity
vec2 calc_offset(vec2 extrusion,float radius,float stroke_width, float view_scale) {return extrusion*(radius+stroke_width)*u_extrude_scale*view_scale;}float cantilevered_elevation(vec2 pos,float radius,float stroke_width,float view_scale) {vec2 c1=pos+calc_offset(vec2(-1,-1),radius,stroke_width,view_scale);vec2 c2=pos+calc_offset(vec2(1,-1),radius,stroke_width,view_scale);vec2 c3=pos+calc_offset(vec2(1,1),radius,stroke_width,view_scale);vec2 c4=pos+calc_offset(vec2(-1,1),radius,stroke_width,view_scale);float h1=elevation(c1)+ELEVATION_BIAS;float h2=elevation(c2)+ELEVATION_BIAS;float h3=elevation(c3)+ELEVATION_BIAS;float h4=elevation(c4)+ELEVATION_BIAS;return max(h4,max(h3,max(h1,h2)));}float circle_elevation(vec2 pos) {
#if defined(TERRAIN)
return elevation(pos)+ELEVATION_BIAS;
#else
return 0.0;
#endif
}vec4 project_vertex(vec2 extrusion,vec4 world_center,vec4 projected_center,float radius,float stroke_width, float view_scale,mat3 surface_vectors) {vec2 sample_offset=calc_offset(extrusion,radius,stroke_width,view_scale);
#ifdef PITCH_WITH_MAP
#ifdef PROJECTION_GLOBE_VIEW
return u_matrix*( world_center+vec4(sample_offset.x*surface_vectors[0]+sample_offset.y*surface_vectors[1],0) );
#else
return u_matrix*( world_center+vec4(sample_offset,0,0) );
#endif
#else
return projected_center+vec4(sample_offset,0,0);
#endif
}float get_sample_step() {
#ifdef PITCH_WITH_MAP
return 2.0*PI/float(NUM_SAMPLES_PER_RING);
#else
return PI/float(NUM_SAMPLES_PER_RING);
#endif
}void main(void) {
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize mediump float radius
#pragma mapbox: initialize lowp float blur
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize highp vec4 stroke_color
#pragma mapbox: initialize mediump float stroke_width
#pragma mapbox: initialize lowp float stroke_opacity
vec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);vec4 world_center;mat3 surface_vectors;
#ifdef PROJECTION_GLOBE_VIEW
vec3 pos_normal_3=a_pos_normal_3/16384.0;surface_vectors=globe_mercator_surface_vectors(pos_normal_3,u_up_dir,u_zoom_transition);vec3 surface_extrusion=extrude.x*surface_vectors[0]+extrude.y*surface_vectors[1];vec3 globe_elevation=elevationVector(circle_center)*circle_elevation(circle_center);vec3 globe_pos=a_pos_3+surface_extrusion+globe_elevation;vec3 mercator_elevation=u_up_dir*u_tile_up_scale*circle_elevation(circle_center);vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,circle_center,u_tile_id,u_merc_center)+surface_extrusion+mercator_elevation;vec3 pos=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);world_center=vec4(pos,1);
#else 
surface_vectors=mat3(1.0);float height=circle_elevation(circle_center);world_center=vec4(circle_center,height,1);
#endif
vec4 projected_center=u_matrix*world_center;float view_scale=0.0;
#ifdef PITCH_WITH_MAP
#ifdef SCALE_WITH_MAP
view_scale=1.0;
#else
view_scale=projected_center.w/u_camera_to_center_distance;
#endif
#else
#ifdef SCALE_WITH_MAP
view_scale=u_camera_to_center_distance;
#else
view_scale=projected_center.w;
#endif
#endif
gl_Position=project_vertex(extrude,world_center,projected_center,radius,stroke_width,view_scale,surface_vectors);float visibility=0.0;
#ifdef TERRAIN
float step=get_sample_step();vec4 occlusion_world_center;vec4 occlusion_projected_center;
#ifdef PITCH_WITH_MAP
float cantilevered_height=cantilevered_elevation(circle_center,radius,stroke_width,view_scale);occlusion_world_center=vec4(circle_center,cantilevered_height,1);occlusion_projected_center=u_matrix*occlusion_world_center;
#else
occlusion_world_center=world_center;occlusion_projected_center=projected_center;
#endif
for(int ring=0; ring < NUM_VISIBILITY_RINGS; ring++) {float scale=(float(ring)+1.0)/float(NUM_VISIBILITY_RINGS);for(int i=0; i < NUM_SAMPLES_PER_RING; i++) {vec2 extrusion=vec2(cos(step*float(i)),-sin(step*float(i)))*scale;vec4 frag_pos=project_vertex(extrusion,occlusion_world_center,occlusion_projected_center,radius,stroke_width,view_scale,surface_vectors);visibility+=float(!isOccluded(frag_pos));}}visibility/=float(NUM_VISIBILITY_RINGS)*float(NUM_SAMPLES_PER_RING);
#else
visibility=1.0;
#endif
#ifdef PROJECTION_GLOBE_VIEW
visibility=1.0;
#endif
v_visibility=visibility;lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);
#ifdef FOG
v_fog_pos=fog_position(world_center.xyz);
#endif
}`), clippingMask: Ti("void main() {glFragColor=vec4(1.0);}", "in vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"), heatmap: Ti(`#include "_prelude_fog.fragment.glsl"
uniform highp float u_intensity;in vec2 v_extrude;
#pragma mapbox: define highp float weight
#define GAUSS_COEF 0.3989422804014327
void main() {
#pragma mapbox: initialize highp float weight
float d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);glFragColor=vec4(val,1.0,1.0,1.0);
#ifdef FOG
if (u_is_globe==0) {glFragColor.r*=pow(1.0-fog_opacity(v_fog_pos),2.0);}
#endif
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_terrain.vertex.glsl"
#include "_prelude_fog.vertex.glsl"
uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;in vec2 a_pos;
#ifdef PROJECTION_GLOBE_VIEW
in vec3 a_pos_3;in vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;
#endif
out vec2 v_extrude;
#pragma mapbox: define highp float weight
#pragma mapbox: define mediump float radius
const highp float ZERO=1.0/255.0/16.0;
#define GAUSS_COEF 0.3989422804014327
void main(void) {
#pragma mapbox: initialize highp float weight
#pragma mapbox: initialize mediump float radius
vec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec2 tilePos=floor(a_pos*0.5);vec3 pos;
#ifdef PROJECTION_GLOBE_VIEW
vec3 pos_normal_3=a_pos_normal_3/16384.0;mat3 surface_vectors=globe_mercator_surface_vectors(pos_normal_3,u_up_dir,u_zoom_transition);vec3 surface_extrusion=extrude.x*surface_vectors[0]+extrude.y*surface_vectors[1];vec3 globe_elevation=elevationVector(tilePos)*elevation(tilePos);vec3 globe_pos=a_pos_3+surface_extrusion+globe_elevation;vec3 mercator_elevation=u_up_dir*u_tile_up_scale*elevation(tilePos);vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,tilePos,u_tile_id,u_merc_center)+surface_extrusion+mercator_elevation;pos=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);
#else
pos=vec3(tilePos+extrude,elevation(tilePos));
#endif
gl_Position=u_matrix*vec4(pos,1);
#ifdef FOG
v_fog_pos=fog_position(pos);
#endif
}`), heatmapTexture: Ti(`uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;in vec2 v_pos;void main() {float t=texture(u_image,v_pos).r;vec4 color=texture(u_color_ramp,vec2(t,0.5));glFragColor=color*u_opacity;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(0.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, "in vec2 a_pos;out vec2 v_pos;void main() {gl_Position=vec4(a_pos,0,1);v_pos=a_pos*0.5+0.5;}"), collisionBox: Ti("in float v_placed;in float v_notUsed;void main() {vec4 red =vec4(1.0,0.0,0.0,1.0);vec4 blue=vec4(0.0,0.0,1.0,0.5);glFragColor =mix(red,blue,step(0.5,v_placed))*0.5;glFragColor*=mix(1.0,0.1,step(0.5,v_notUsed));}", `#include "_prelude_terrain.vertex.glsl"
in vec3 a_pos;in vec2 a_anchor_pos;in vec2 a_extrude;in vec2 a_placed;in vec2 a_shift;in vec2 a_elevation_from_sea;in float a_size_scale;in vec2 a_padding;in float a_auto_z_offset;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;out float v_placed;out float v_notUsed;void main() {float feature_elevation=a_elevation_from_sea.x+a_auto_z_offset;float terrain_elevation=(a_elevation_from_sea.y==1.0 ? 0.0 : elevation(a_anchor_pos));vec4 projectedPoint=u_matrix*vec4(a_pos+elevationVector(a_anchor_pos)*(feature_elevation+terrain_elevation),1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(
0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,1.5);gl_Position=projectedPoint;gl_Position.xy+=(a_extrude*a_size_scale+a_shift+a_padding)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}`), collisionCircle: Ti("in float v_radius;in vec2 v_extrude;in float v_perspective_ratio;in float v_collision;void main() {float alpha=0.5*min(v_perspective_ratio,1.0);float stroke_radius=0.9*max(v_perspective_ratio,1.0);float distance_to_center=length(v_extrude);float distance_to_edge=abs(distance_to_center-v_radius);float opacity_t=smoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color=mix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);glFragColor=color*alpha*opacity_t;}", `in vec2 a_pos_2f;in float a_radius;in vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;out float v_radius;out vec2 v_extrude;out float v_perspective_ratio;out float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart=u_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  =u_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/=rayStart.w;rayEnd.xyz  /=rayEnd.w;highp float t=(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos=a_pos_2f;float radius=a_radius;float collision=a_flags.x;float vertexIdx=a_flags.y;vec2 quadVertexOffset=vec2(
mix(-1.0,1.0,float(vertexIdx >=2.0)),mix(-1.0,1.0,float(vertexIdx >=1.0 && vertexIdx <=2.0)));vec2 quadVertexExtent=quadVertexOffset*radius;vec3 tilePos=toTilePosition(quadCenterPos);vec4 clipPos=u_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance=clipPos.w;highp float collision_perspective_ratio=clamp(
0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor=1.2;v_radius=radius;v_extrude=quadVertexExtent*padding_factor;v_perspective_ratio=collision_perspective_ratio;v_collision=collision;gl_Position=vec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}`), debug: Ti("uniform highp vec4 u_color;uniform sampler2D u_overlay;in vec2 v_uv;void main() {vec4 overlay_color=texture(u_overlay,v_uv);glFragColor=mix(u_color,overlay_color,overlay_color.a);}", `#include "_prelude_terrain.vertex.glsl"
in vec2 a_pos;
#ifdef PROJECTION_GLOBE_VIEW
in vec3 a_pos_3;
#endif
out vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {float h=elevation(a_pos);v_uv=a_pos/8192.0;
#ifdef PROJECTION_GLOBE_VIEW
gl_Position=u_matrix*vec4(a_pos_3+elevationVector(a_pos)*h,1);
#else
gl_Position=u_matrix*vec4(a_pos*u_overlay_scale,h,1);
#endif
}`), fill: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_shadow.fragment.glsl"
#pragma mapbox: define highp vec4 color
#pragma mapbox: define lowp float opacity
uniform float u_emissive_strength;
#ifdef RENDER_SHADOWS
uniform vec3 u_ground_shadow_factor;in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in highp float v_depth;
#endif
#ifdef INDICATOR_CUTOUT
in highp float v_z_offset;
#endif
void main() {
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize lowp float opacity
vec4 out_color=color;
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#ifdef RENDER_SHADOWS
float light=shadowed_light_factor(v_pos_light_view_0,v_pos_light_view_1,v_depth);out_color.rgb*=mix(u_ground_shadow_factor,vec3(1.0),light);
#endif
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
out_color*=opacity;
#ifdef INDICATOR_CUTOUT
out_color=applyCutout(out_color,v_z_offset);
#endif
glFragColor=out_color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
in vec2 a_pos;
#ifdef ELEVATED_ROADS
in float a_road_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out highp float v_depth;
#endif
#ifdef INDICATOR_CUTOUT
out highp float v_z_offset;
#endif
uniform mat4 u_matrix;
#pragma mapbox: define highp vec4 color
#pragma mapbox: define lowp float opacity
#pragma mapbox: define highp float z_offset
void main() {
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize highp float z_offset
#ifdef ELEVATED_ROADS
z_offset+=a_road_z_offset;
#endif
float hidden=float(opacity==0.0);gl_Position=mix(u_matrix*vec4(a_pos,z_offset,1),AWAY,hidden);
#ifdef RENDER_SHADOWS
vec3 shd_pos0=vec3(a_pos,z_offset);vec3 shd_pos1=vec3(a_pos,z_offset);
#ifdef NORMAL_OFFSET
vec3 offset=shadow_normal_offset(vec3(0.0,0.0,1.0));shd_pos0+=offset*shadow_normal_offset_multiplier0();shd_pos1+=offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);v_depth=gl_Position.w;
#endif
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
#ifdef INDICATOR_CUTOUT
v_z_offset=z_offset;
#endif
}`), fillOutline: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_shadow.fragment.glsl"
in highp vec2 v_pos;uniform float u_emissive_strength;
#ifdef RENDER_SHADOWS
uniform vec3 u_ground_shadow_factor;in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in highp float v_depth;
#endif
#pragma mapbox: define highp vec4 outline_color
#pragma mapbox: define lowp float opacity
void main() {
#pragma mapbox: initialize highp vec4 outline_color
#pragma mapbox: initialize lowp float opacity
float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);vec4 out_color=outline_color;
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#ifdef RENDER_SHADOWS
float light=shadowed_light_factor(v_pos_light_view_0,v_pos_light_view_1,v_depth);out_color.rgb*=mix(u_ground_shadow_factor,vec3(1.0),light);
#endif
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
glFragColor=out_color*(alpha*opacity);
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
in vec2 a_pos;
#ifdef ELEVATED_ROADS
in float a_road_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out highp float v_depth;
#endif
uniform mat4 u_matrix;uniform vec2 u_world;out highp vec2 v_pos;
#pragma mapbox: define highp vec4 outline_color
#pragma mapbox: define lowp float opacity
#pragma mapbox: define highp float z_offset
void main() {
#pragma mapbox: initialize highp vec4 outline_color
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize highp float z_offset
#ifdef ELEVATED_ROADS
z_offset+=a_road_z_offset;
#endif
float hidden=float(opacity==0.0);gl_Position=mix(u_matrix*vec4(a_pos,z_offset,1),AWAY,hidden);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;
#ifdef RENDER_SHADOWS
vec3 shd_pos0=vec3(a_pos,z_offset);vec3 shd_pos1=vec3(a_pos,z_offset);
#ifdef NORMAL_OFFSET
vec3 offset=shadow_normal_offset(vec3(0.0,0.0,1.0));shd_pos0+=offset*shadow_normal_offset_multiplier0();shd_pos1+=offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);v_depth=gl_Position.w;
#endif
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
}`), fillOutlinePattern: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_shadow.fragment.glsl"
uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_emissive_strength;
#ifdef RENDER_SHADOWS
uniform vec3 u_ground_shadow_factor;in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in highp float v_depth;
#endif
in highp vec2 v_pos;in highp vec2 v_pos_world;
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp vec4 pattern
void main() {
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize mediump vec4 pattern
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;highp vec2 imagecoord=mod(v_pos,1.0);highp vec2 pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,imagecoord);highp vec2 lod_pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,v_pos);float dist=length(v_pos_world-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);vec4 out_color=textureLodCustom(u_image,pos,lod_pos);
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#ifdef RENDER_SHADOWS
float light=shadowed_light_factor(v_pos_light_view_0,v_pos_light_view_1,v_depth);out_color.rgb*=mix(u_ground_shadow_factor,vec3(1.0),light);
#endif
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
glFragColor=out_color*(alpha*opacity);
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_tile_units_to_pixels;in vec2 a_pos;
#ifdef ELEVATED_ROADS
in float a_road_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out highp float v_depth;
#endif
out highp vec2 v_pos;out highp vec2 v_pos_world;
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp vec4 pattern
#pragma mapbox: define lowp float pixel_ratio
#pragma mapbox: define highp float z_offset
void main() {
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize mediump vec4 pattern
#pragma mapbox: initialize lowp float pixel_ratio
#pragma mapbox: initialize highp float z_offset
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;
#ifdef ELEVATED_ROADS
z_offset+=a_road_z_offset;
#endif
float hidden=float(opacity==0.0);gl_Position=mix(u_matrix*vec4(a_pos,z_offset,1),AWAY,hidden);vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,display_size,u_tile_units_to_pixels,a_pos);v_pos_world=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;
#ifdef RENDER_SHADOWS
vec3 shd_pos0=vec3(a_pos,z_offset);vec3 shd_pos1=vec3(a_pos,z_offset);
#ifdef NORMAL_OFFSET
vec3 offset=shadow_normal_offset(vec3(0.0,0.0,1.0));shd_pos0+=offset*shadow_normal_offset_multiplier0();shd_pos1+=offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);v_depth=gl_Position.w;
#endif
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
}`), fillPattern: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_shadow.fragment.glsl"
uniform vec2 u_texsize;uniform sampler2D u_image;in highp vec2 v_pos;uniform float u_emissive_strength;
#ifdef RENDER_SHADOWS
uniform vec3 u_ground_shadow_factor;in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in highp float v_depth;
#endif
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp vec4 pattern
void main() {
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize mediump vec4 pattern
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;highp vec2 imagecoord=mod(v_pos,1.0);highp vec2 pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,imagecoord);highp vec2 lod_pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,v_pos);vec4 out_color=textureLodCustom(u_image,pos,lod_pos);
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#ifdef RENDER_SHADOWS
float light=shadowed_light_factor(v_pos_light_view_0,v_pos_light_view_1,v_depth);out_color.rgb*=mix(u_ground_shadow_factor,vec3(1.0),light);
#endif
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
glFragColor=out_color*opacity;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_tile_units_to_pixels;in vec2 a_pos;
#ifdef ELEVATED_ROADS
in float a_road_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out highp float v_depth;
#endif
out highp vec2 v_pos;
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp vec4 pattern
#pragma mapbox: define lowp float pixel_ratio
#pragma mapbox: define highp float z_offset
void main() {
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize mediump vec4 pattern
#pragma mapbox: initialize lowp float pixel_ratio
#pragma mapbox: initialize highp float z_offset
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;
#ifdef ELEVATED_ROADS
z_offset+=a_road_z_offset;
#endif
float hidden=float(opacity==0.0);gl_Position=mix(u_matrix*vec4(a_pos,z_offset,1),AWAY,hidden);v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,display_size,u_tile_units_to_pixels,a_pos);
#ifdef RENDER_SHADOWS
vec3 shd_pos0=vec3(a_pos,z_offset);vec3 shd_pos1=vec3(a_pos,z_offset);
#ifdef NORMAL_OFFSET
vec3 offset=shadow_normal_offset(vec3(0.0,0.0,1.0));shd_pos0+=offset*shadow_normal_offset_multiplier0();shd_pos1+=offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);v_depth=gl_Position.w;
#endif
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
}`), fillExtrusion: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_shadow.fragment.glsl"
#include "_prelude_lighting.glsl"
in vec4 v_color;in vec4 v_flat;
#ifdef RENDER_SHADOWS
in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;
#endif
uniform lowp float u_opacity;
#ifdef FAUX_AO
uniform lowp vec2 u_ao;in vec2 v_ao;
#endif
#if defined(ZERO_ROOF_RADIUS) && !defined(LIGHTING_3D_MODE)
in vec4 v_roof_color;
#endif
#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS) || defined(LIGHTING_3D_MODE)
in highp vec3 v_normal;
#endif
uniform vec3 u_flood_light_color;uniform highp float u_vertical_scale;uniform float u_flood_light_intensity;uniform vec3 u_ground_shadow_factor;
#if defined(LIGHTING_3D_MODE) && defined(FLOOD_LIGHT)
in float v_flood_radius;in float v_has_floodlight;
#endif
in float v_height;
#pragma mapbox: define highp float emissive_strength
void main() {
#pragma mapbox: initialize highp float emissive_strength
#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS) || defined(LIGHTING_3D_MODE)
vec3 normal=normalize(v_normal);
#endif
float z;vec4 color=v_color;
#ifdef ZERO_ROOF_RADIUS
z=float(normal.z > 0.00001);
#ifdef LIGHTING_3D_MODE
normal=mix(normal,vec3(0.0,0.0,1.0),z);
#else
color=mix(v_color,v_roof_color,z);
#endif
#endif
float h=max(0.0,v_height);float ao_shade=1.0;
#ifdef FAUX_AO
float intensity=u_ao[0];float h_floors=h/(u_ao[1]*u_vertical_scale);float y_shade=1.0-0.9*intensity*min(v_ao.y,1.0);ao_shade=(1.0-0.08*intensity)*(y_shade+(1.0-y_shade)*(1.0-pow(1.0-min(h_floors/16.0,1.0),16.0)))+0.08*intensity*min(h_floors/160.0,1.0);float concave=v_ao.x*v_ao.x;
#ifdef ZERO_ROOF_RADIUS
concave*=(1.0-z);
#endif
float x_shade=mix(1.0,mix(0.6,0.75,min(h_floors/30.0,1.0)),intensity)+0.1*intensity*min(h,1.0);ao_shade*=mix(1.0,x_shade*x_shade*x_shade,concave);
#ifdef LIGHTING_3D_MODE
#ifdef FLOOD_LIGHT
color.rgb*=mix(ao_shade,1.0,v_has_floodlight);
#else
color.rgb*=ao_shade;
#endif
#else
color.rgb*=ao_shade;
#endif
#endif
#ifdef LIGHTING_3D_MODE
float flood_radiance=0.0;
#ifdef FLOOD_LIGHT
flood_radiance=(1.0-min(h/v_flood_radius,1.0))*u_flood_light_intensity*v_has_floodlight;
#endif
#ifdef RENDER_SHADOWS
#ifdef FLOOD_LIGHT
float ndotl_unclamped=dot(normal,u_shadow_direction);float ndotl=max(0.0,ndotl_unclamped);float occlusion=ndotl_unclamped < 0.0 ? 1.0 : shadow_occlusion(ndotl,v_pos_light_view_0,v_pos_light_view_1,1.0/gl_FragCoord.w);vec3 litColor=apply_lighting(color.rgb,normal,(1.0-u_shadow_intensity*occlusion)*ndotl);vec3 floodLitColor=compute_flood_lighting(u_flood_light_color*u_opacity,1.0-u_shadow_intensity,occlusion,u_ground_shadow_factor);color.rgb=mix(litColor,floodLitColor,flood_radiance);
#else
float shadowed_lighting_factor;
#ifdef RENDER_CUTOFF
shadowed_lighting_factor=shadowed_light_factor_normal_opacity(normal,v_pos_light_view_0,v_pos_light_view_1,1.0/gl_FragCoord.w,v_cutoff_opacity);if (v_cutoff_opacity==0.0) {discard;}
#else
shadowed_lighting_factor=shadowed_light_factor_normal(normal,v_pos_light_view_0,v_pos_light_view_1,1.0/gl_FragCoord.w);
#endif
color.rgb=apply_lighting(color.rgb,normal,shadowed_lighting_factor);
#endif
#else
color.rgb=apply_lighting(color.rgb,normal);
#ifdef FLOOD_LIGHT
color.rgb=mix(color.rgb,u_flood_light_color*u_opacity,flood_radiance);
#endif
#endif
color.rgb=mix(color.rgb,v_flat.rgb,emissive_strength);color*=u_opacity;
#endif
#ifdef FOG
color=fog_dither(fog_apply_premultiplied(color,v_fog_pos,h));
#endif
#ifdef INDICATOR_CUTOUT
color=applyCutout(color,h);
#endif
glFragColor=color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
#include "_prelude_lighting.glsl"
uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform float u_edge_radius;uniform float u_width_scale;in vec4 a_pos_normal_ed;in vec2 a_centroid_pos;
#ifdef RENDER_WALL_MODE
in vec3 a_join_normal_inside;
#endif
#ifdef PROJECTION_GLOBE_VIEW
in vec3 a_pos_3;in vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;uniform float u_height_lift;
#endif
#ifdef TERRAIN
uniform int u_height_type;uniform int u_base_type;
#endif
uniform highp float u_vertical_scale;out vec4 v_color;out vec4 v_flat;
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;
#endif
#if defined(ZERO_ROOF_RADIUS) && !defined(LIGHTING_3D_MODE)
out vec4 v_roof_color;
#endif
#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS) || defined(LIGHTING_3D_MODE)
out highp vec3 v_normal;
#endif
#ifdef FAUX_AO
uniform lowp vec2 u_ao;out vec2 v_ao;
#endif
#if defined(LIGHTING_3D_MODE) && defined(FLOOD_LIGHT)
out float v_flood_radius;out float v_has_floodlight;
#endif
out float v_height;vec3 linearTosRGB(vec3 color) {return pow(color,vec3(1./2.2));}vec3 sRGBToLinear(vec3 srgbIn) {return pow(srgbIn,vec3(2.2));}
#pragma mapbox: define highp float base
#pragma mapbox: define highp float height
#pragma mapbox: define highp vec4 color
#pragma mapbox: define highp float flood_light_wall_radius
#pragma mapbox: define highp float line_width
#pragma mapbox: define highp float emissive_strength
void main() {
#pragma mapbox: initialize highp float base
#pragma mapbox: initialize highp float height
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize highp float flood_light_wall_radius
#pragma mapbox: initialize highp float line_width
#pragma mapbox: initialize highp float emissive_strength
base*=u_vertical_scale;height*=u_vertical_scale;vec4 pos_nx=floor(a_pos_normal_ed*0.5);vec4 top_up_ny_start=a_pos_normal_ed-2.0*pos_nx;vec3 top_up_ny=top_up_ny_start.xyz;float x_normal=pos_nx.z/8192.0;vec3 normal=top_up_ny.y==1.0 ? vec3(0.0,0.0,1.0) : normalize(vec3(x_normal,(2.0*top_up_ny.z-1.0)*(1.0-abs(x_normal)),0.0));
#if defined(ZERO_ROOF_RADIUS) || defined(RENDER_SHADOWS) || defined(LIGHTING_3D_MODE)
v_normal=normal;
#endif
base=max(0.0,base);float attr_height=height;height=max(0.0,top_up_ny.y==0.0 && top_up_ny.x==1.0 ? height-u_edge_radius : height);float t=top_up_ny.x;vec2 centroid_pos=vec2(0.0);
#if defined(HAS_CENTROID) || defined(TERRAIN)
centroid_pos=a_centroid_pos;
#endif
float ele=0.0;float h=0.0;float c_ele=0.0;vec3 pos;
#ifdef TERRAIN
bool is_flat_height=centroid_pos.x !=0.0 && u_height_type==1;bool is_flat_base=centroid_pos.x !=0.0 && u_base_type==1;ele=elevation(pos_nx.xy);c_ele=is_flat_height || is_flat_base ? (centroid_pos.y==0.0 ? elevationFromUint16(centroid_pos.x) : flatElevation(centroid_pos)) : ele;float h_height=is_flat_height ? max(c_ele+height,ele+base+2.0) : ele+height;float h_base=is_flat_base ? max(c_ele+base,ele+base) : ele+(base==0.0 ?-5.0 : base);h=t > 0.0 ? max(h_base,h_height) : h_base;pos=vec3(pos_nx.xy,h);
#else
h=t > 0.0 ? height : base;pos=vec3(pos_nx.xy,h);
#endif
#ifdef PROJECTION_GLOBE_VIEW
float lift=float((t+base) > 0.0)*u_height_lift;h+=lift;vec3 globe_normal=normalize(mix(a_pos_normal_3/16384.0,u_up_dir,u_zoom_transition));vec3 globe_pos=a_pos_3+globe_normal*(u_tile_up_scale*h);vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,pos.xy,u_tile_id,u_merc_center)+u_up_dir*u_tile_up_scale*pos.z;pos=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);
#endif
float cutoff=1.0;vec3 scaled_pos=pos;
#ifdef RENDER_CUTOFF
vec3 centroid_random=vec3(centroid_pos.xy,centroid_pos.x+centroid_pos.y+1.0);vec3 ground_pos=centroid_pos.x==0.0 ? pos.xyz : (centroid_random/8.0);vec4 ground=u_matrix*vec4(ground_pos.xy,ele,1.0);cutoff=cutoff_opacity(u_cutoff_params,ground.z);if (centroid_pos.y !=0.0 && centroid_pos.x !=0.0) {vec3 g=floor(ground_pos);vec3 mod_=centroid_random-g*8.0;float seed=min(1.0,0.1*(min(3.5,max(mod_.x+mod_.y,0.2*attr_height))*0.35+mod_.z));if (cutoff < 0.8-seed) {cutoff=0.0;}}float cutoff_scale=cutoff;v_cutoff_opacity=cutoff;scaled_pos.z=mix(c_ele,h,cutoff_scale);
#endif
float hidden=float((centroid_pos.x==0.0 && centroid_pos.y==1.0) || (cutoff==0.0 && centroid_pos.x !=0.0) || (color.a==0.0));
#ifdef RENDER_WALL_MODE
vec2 wall_offset=u_width_scale*line_width*(a_join_normal_inside.xy/EXTENT);scaled_pos.xy+=(1.0-a_join_normal_inside.z)*wall_offset*0.5;scaled_pos.xy-=a_join_normal_inside.z*wall_offset*0.5;
#endif
gl_Position=mix(u_matrix*vec4(scaled_pos,1),AWAY,hidden);h=h-ele;v_height=h;
#ifdef RENDER_SHADOWS
vec3 shd_pos0=pos;vec3 shd_pos1=pos;
#ifdef NORMAL_OFFSET
vec3 offset=shadow_normal_offset(normal);shd_pos0+=offset*shadow_normal_offset_multiplier0();shd_pos1+=offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);
#endif
float NdotL=0.0;float colorvalue=0.0;
#ifndef LIGHTING_3D_MODE
colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;NdotL=clamp(dot(normal,u_lightpos),0.0,1.0);NdotL=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),NdotL);if (normal.y !=0.0) {float r=0.84;r=mix(0.7,0.98,1.0-u_lightintensity);NdotL*=(
(1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),r,1.0)));}
#endif
#ifdef FAUX_AO
float concave=pos_nx.w-floor(pos_nx.w*0.5)*2.0;float start=top_up_ny_start.w;float y_ground=1.0-clamp(t+base,0.0,1.0);float top_height=height;
#ifdef TERRAIN
top_height=mix(max(c_ele+height,ele+base+2.0),ele+height,float(centroid_pos.x==0.0))-ele;y_ground+=y_ground*5.0/max(3.0,top_height);
#endif
v_ao=vec2(mix(concave,-concave,start),y_ground);NdotL*=(1.0+0.05*(1.0-top_up_ny.y)*u_ao[0]);
#ifdef PROJECTION_GLOBE_VIEW
top_height+=u_height_lift;
#endif
gl_Position.z-=(0.0000006*(min(top_height,500.)+2.0*min(base,500.0)+60.0*concave+3.0*start))*gl_Position.w;
#endif
#ifdef LIGHTING_3D_MODE
#ifdef FLOOD_LIGHT
float is_wall=1.0-float(t > 0.0 && top_up_ny.y > 0.0);v_has_floodlight=float(flood_light_wall_radius > 0.0 && is_wall > 0.0);v_flood_radius=flood_light_wall_radius*u_vertical_scale;
#endif
v_color=vec4(color.rgb,1.0);float ndotl=calculate_NdotL(normal);v_flat.rgb=sRGBToLinear(color.rgb);v_flat.rgb=v_flat.rgb*(ndotl+(1.0-min(ndotl*57.29,1.0))*emissive_strength);v_flat=vec4(linearTosRGB(v_flat.rgb),1.0);
#else
v_color=vec4(0.0,0.0,0.0,1.0);v_color.rgb+=clamp(color.rgb*NdotL*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_color*=u_opacity;
#endif
#if defined(ZERO_ROOF_RADIUS) && !defined(LIGHTING_3D_MODE)
float roofNdotL=clamp(u_lightpos.z,0.0,1.0);roofNdotL=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),roofNdotL);v_roof_color=vec4(0.0,0.0,0.0,1.0);v_roof_color.rgb+=clamp(color.rgb*roofNdotL*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_roof_color*=u_opacity;
#endif
#ifdef FOG
v_fog_pos=fog_position(pos);
#endif
}`), fillExtrusionDepth: Ti(`in highp float v_depth;void main() {
#ifndef DEPTH_TEXTURE
glFragColor=pack_depth(v_depth);
#endif
}`, `#include "_prelude_terrain.vertex.glsl"
uniform mat4 u_matrix;uniform float u_edge_radius;uniform float u_width_scale;uniform float u_vertical_scale;
#ifdef TERRAIN
uniform int u_height_type;uniform int u_base_type;
#endif
in vec4 a_pos_normal_ed;in vec2 a_centroid_pos;
#ifdef RENDER_WALL_MODE
in vec3 a_join_normal_inside;
#endif
#pragma mapbox: define highp float base
#pragma mapbox: define highp float height
#pragma mapbox: define highp float line_width
#pragma mapbox: define highp vec4 color
out highp float v_depth;void main() {
#pragma mapbox: initialize highp float base
#pragma mapbox: initialize highp float height
#pragma mapbox: initialize highp float line_width
#pragma mapbox: initialize highp vec4 color
base*=u_vertical_scale;height*=u_vertical_scale;vec3 pos_nx=floor(a_pos_normal_ed.xyz*0.5);mediump vec3 top_up_ny=a_pos_normal_ed.xyz-2.0*pos_nx;base=max(0.0,base);height=max(0.0,top_up_ny.y==0.0 && top_up_ny.x==1.0 ? height-u_edge_radius : height);float t=top_up_ny.x;vec2 centroid_pos=vec2(0.0);
#if defined(HAS_CENTROID) || defined(TERRAIN)
centroid_pos=a_centroid_pos;
#endif
vec3 pos;
#ifdef TERRAIN
bool is_flat_height=centroid_pos.x !=0.0 && u_height_type==1;bool is_flat_base=centroid_pos.x !=0.0 && u_base_type==1;float ele=elevation(pos_nx.xy);float c_ele=is_flat_height || is_flat_base ? (centroid_pos.y==0.0 ? elevationFromUint16(centroid_pos.x) : flatElevation(centroid_pos)) : ele;float h_height=is_flat_height ? max(c_ele+height,ele+base+2.0) : ele+height;float h_base=is_flat_base ? max(c_ele+base,ele+base) : ele+(base==0.0 ?-5.0 : base);float h=t > 0.0 ? max(h_base,h_height) : h_base;pos=vec3(pos_nx.xy,h);
#else
pos=vec3(pos_nx.xy,t > 0.0 ? height : base);
#endif
#ifdef RENDER_WALL_MODE
vec2 wall_offset=u_width_scale*line_width*(a_join_normal_inside.xy/EXTENT);pos.xy+=(1.0-a_join_normal_inside.z)*wall_offset*0.5;pos.xy-=a_join_normal_inside.z*wall_offset*0.5;
#endif
float hidden=float((centroid_pos.x==0.0 && centroid_pos.y==1.0) || (color.a==0.0));gl_Position=mix(u_matrix*vec4(pos,1),AWAY,hidden);v_depth=gl_Position.z/gl_Position.w;}`), fillExtrusionPattern: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform vec2 u_texsize;uniform sampler2D u_image;
#ifdef FAUX_AO
uniform lowp vec2 u_ao;in vec3 v_ao;
#endif
#ifdef LIGHTING_3D_MODE
in vec3 v_normal;
#endif
in highp vec2 v_pos;in vec4 v_lighting;uniform lowp float u_opacity;
#pragma mapbox: define highp float base
#pragma mapbox: define highp float height
#pragma mapbox: define mediump vec4 pattern
#pragma mapbox: define highp float pixel_ratio
void main() {
#pragma mapbox: initialize highp float base
#pragma mapbox: initialize highp float height
#pragma mapbox: initialize mediump vec4 pattern
#pragma mapbox: initialize highp float pixel_ratio
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;highp vec2 imagecoord=mod(v_pos,1.0);highp vec2 pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,imagecoord);highp vec2 lod_pos=mix(pattern_tl/u_texsize,pattern_br/u_texsize,v_pos);vec4 out_color=textureLodCustom(u_image,pos,lod_pos);
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting(out_color,normalize(v_normal))*u_opacity;
#else
out_color=out_color*v_lighting;
#endif
#ifdef FAUX_AO
float intensity=u_ao[0];float h=max(0.0,v_ao.z);float h_floors=h/u_ao[1];float y_shade=1.0-0.9*intensity*min(v_ao.y,1.0);float shade=(1.0-0.08*intensity)*(y_shade+(1.0-y_shade)*(1.0-pow(1.0-min(h_floors/16.0,1.0),16.0)))+0.08*intensity*min(h_floors/160.0,1.0);float concave=v_ao.x*v_ao.x;float x_shade=mix(1.0,mix(0.6,0.75,min(h_floors/30.0,1.0)),intensity)+0.1*intensity*min(h,1.0);shade*=mix(1.0,x_shade*x_shade*x_shade,concave);out_color.rgb=out_color.rgb*shade;
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
#ifdef INDICATOR_CUTOUT
out_color=applyCutout(out_color,height);
#endif
glFragColor=out_color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
#include "_prelude_lighting.glsl"
uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform float u_tile_units_to_pixels;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform float u_width_scale;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;in vec4 a_pos_normal_ed;in vec2 a_centroid_pos;
#ifdef RENDER_WALL_MODE
in vec3 a_join_normal_inside;
#endif
#ifdef PROJECTION_GLOBE_VIEW
in vec3 a_pos_3;in vec3 a_pos_normal_3;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_tile_id;uniform float u_zoom_transition;uniform vec3 u_up_dir;uniform float u_height_lift;
#endif
#ifdef TERRAIN
uniform int u_height_type;uniform int u_base_type;
#endif
out highp vec2 v_pos;out vec4 v_lighting;
#ifdef FAUX_AO
uniform lowp vec2 u_ao;out vec3 v_ao;
#endif
#ifdef LIGHTING_3D_MODE
out vec3 v_normal;
#endif
#pragma mapbox: define highp float base
#pragma mapbox: define highp float height
#pragma mapbox: define highp vec4 color
#pragma mapbox: define mediump vec4 pattern
#pragma mapbox: define highp float pixel_ratio
#pragma mapbox: define highp float line_width
void main() {
#pragma mapbox: initialize highp float base
#pragma mapbox: initialize highp float height
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize mediump vec4 pattern
#pragma mapbox: initialize highp float pixel_ratio
#pragma mapbox: initialize highp float line_width
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec4 pos_nx=floor(a_pos_normal_ed*0.5);mediump vec4 top_up_ny_start=a_pos_normal_ed-2.0*pos_nx;mediump vec3 top_up_ny=top_up_ny_start.xyz;float x_normal=pos_nx.z/8192.0;vec3 normal=top_up_ny.y==1.0 ? vec3(0.0,0.0,1.0) : normalize(vec3(x_normal,(2.0*top_up_ny.z-1.0)*(1.0-abs(x_normal)),0.0));float edgedistance=a_pos_normal_ed.w;vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;base=max(0.0,base);height=max(0.0,height);float t=top_up_ny.x;float z=t > 0.0 ? height : base;vec2 centroid_pos=vec2(0.0);
#if defined(HAS_CENTROID) || defined(TERRAIN)
centroid_pos=a_centroid_pos;
#endif
float ele=0.0;float h=z;vec3 p;float c_ele;
#ifdef TERRAIN
bool is_flat_height=centroid_pos.x !=0.0 && u_height_type==1;bool is_flat_base=centroid_pos.x !=0.0 && u_base_type==1;ele=elevation(pos_nx.xy);c_ele=is_flat_height || is_flat_base ? (centroid_pos.y==0.0 ? elevationFromUint16(centroid_pos.x) : flatElevation(centroid_pos)) : ele;float h_height=is_flat_height ? max(c_ele+height,ele+base+2.0) : ele+height;float h_base=is_flat_base ? max(c_ele+base,ele+base) : ele+(base==0.0 ?-5.0 : base);h=t > 0.0 ? max(h_base,h_height) : h_base;p=vec3(pos_nx.xy,h);
#else
p=vec3(pos_nx.xy,z);
#endif
#ifdef PROJECTION_GLOBE_VIEW
float lift=float((t+base) > 0.0)*u_height_lift;h+=lift;vec3 globe_normal=normalize(mix(a_pos_normal_3/16384.0,u_up_dir,u_zoom_transition));vec3 globe_pos=a_pos_3+globe_normal*(u_tile_up_scale*(p.z+lift));vec3 merc_pos=mercator_tile_position(u_inv_rot_matrix,p.xy,u_tile_id,u_merc_center)+u_up_dir*u_tile_up_scale*p.z;p=mix_globe_mercator(globe_pos,merc_pos,u_zoom_transition);
#endif
#ifdef RENDER_WALL_MODE
vec2 wall_offset=u_width_scale*line_width*(a_join_normal_inside.xy/EXTENT);p.xy+=(1.0-a_join_normal_inside.z)*wall_offset*0.5;p.xy-=a_join_normal_inside.z*wall_offset*0.5;
#endif
float hidden=float((centroid_pos.x==0.0 && centroid_pos.y==1.0) || (color.a==0.0));gl_Position=mix(u_matrix*vec4(p,1),AWAY,hidden);vec2 pos=normal.z==1.0
? pos_nx.xy
: vec2(edgedistance,z*u_height_factor);v_pos=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,display_size,u_tile_units_to_pixels,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float NdotL=0.0;
#ifdef LIGHTING_3D_MODE
NdotL=calculate_NdotL(normal);
#else
NdotL=clamp(dot(normal,u_lightpos),0.0,1.0);NdotL=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),NdotL);
#endif
if (normal.y !=0.0) {float r=0.84;
#ifndef LIGHTING_3D_MODE
r=mix(0.7,0.98,1.0-u_lightintensity);
#endif
NdotL*=(
(1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),r,1.0)));}
#ifdef FAUX_AO
float concave=pos_nx.w-floor(pos_nx.w*0.5)*2.0;float start=top_up_ny_start.w;float y_ground=1.0-clamp(t+base,0.0,1.0);float top_height=height;
#ifdef TERRAIN
top_height=mix(max(c_ele+height,ele+base+2.0),ele+height,float(centroid_pos.x==0.0))-ele;y_ground+=y_ground*5.0/max(3.0,top_height);
#endif
v_ao=vec3(mix(concave,-concave,start),y_ground,h-ele);NdotL*=(1.0+0.05*(1.0-top_up_ny.y)*u_ao[0]);
#ifdef PROJECTION_GLOBE_VIEW
top_height+=u_height_lift;
#endif
gl_Position.z-=(0.0000006*(min(top_height,500.)+2.0*min(base,500.0)+60.0*concave+3.0*start))*gl_Position.w;
#endif
#ifdef LIGHTING_3D_MODE
v_normal=normal;
#else
v_lighting.rgb+=clamp(NdotL*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;
#endif 
#ifdef FOG
v_fog_pos=fog_position(p);
#endif
}`), groundShadow: Ti(`#include "_prelude_shadow.fragment.glsl"
precision highp float;uniform vec3 u_ground_shadow_factor;in vec4 v_pos_light_view_0;in vec4 v_pos_light_view_1;
#ifdef FOG
in float v_fog_opacity;
#endif
void main() {float light=shadowed_light_factor_plane_bias(v_pos_light_view_0,v_pos_light_view_1,1.0/gl_FragCoord.w);vec3 shadow=mix(u_ground_shadow_factor,vec3(1.0),light);
#ifdef RENDER_CUTOFF
shadow=mix(vec3(1.0),shadow,cutoff_opacity(u_cutoff_params,1.0/gl_FragCoord.w));
#endif
#ifdef FOG
shadow=mix(shadow,vec3(1.0),v_fog_opacity);
#endif
#ifdef INDICATOR_CUTOUT
shadow=mix(shadow,vec3(1.0),1.0-applyCutout(vec4(1.0),0.0).r);
#endif
glFragColor=vec4(shadow,1.0);}`, `#include "_prelude_fog.vertex.glsl"
uniform mat4 u_matrix;uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;in vec2 a_pos;out vec4 v_pos_light_view_0;out vec4 v_pos_light_view_1;
#ifdef FOG
out float v_fog_opacity;
#endif
void main() {gl_Position=u_matrix*vec4(a_pos,0.0,1.0);v_pos_light_view_0=u_light_matrix_0*vec4(a_pos,0.0,1.0);v_pos_light_view_1=u_light_matrix_1*vec4(a_pos,0.0,1.0);
#ifdef FOG
v_fog_pos=fog_position(a_pos);v_fog_opacity=fog(v_fog_pos);
#endif
}`), fillExtrusionGroundEffect: Ti(`uniform highp float u_ao_pass;uniform highp float u_opacity;uniform highp float u_flood_light_intensity;uniform highp vec3 u_flood_light_color;uniform highp float u_attenuation;uniform sampler2D u_fb;uniform float u_fb_size;
#ifdef SDF_SUBPASS
in highp vec2 v_pos;in highp vec4 v_line_segment;in highp float v_flood_light_radius_tile;in highp vec2 v_ao;float line_df(highp vec2 a,highp vec2 b,highp vec2 p) {highp vec2 ba=b-a;highp vec2 pa=p-a;highp float r=clamp(dot(pa,ba)/dot(ba,ba),0.0,1.0);return length(pa-r*ba);}
#ifdef FOG
in highp float v_fog;
#endif
#endif
void main() {
#ifdef CLEAR_SUBPASS
vec4 color=vec4(1.0);
#ifdef CLEAR_FROM_TEXTURE
color=texture(u_fb,gl_FragCoord.xy/vec2(u_fb_size));
#endif
glFragColor=color;
#else
#ifdef SDF_SUBPASS
highp float d=line_df(v_line_segment.xy,v_line_segment.zw,v_pos);highp float effect_radius=mix(v_flood_light_radius_tile,v_ao.y,u_ao_pass);d/=effect_radius;d=min(d,1.0);d=1.0-pow(1.0-d,u_attenuation);highp float effect_intensity=mix(u_flood_light_intensity,v_ao.x,u_ao_pass);highp float fog=1.0;
#ifdef FOG
fog=v_fog;
#endif
#ifdef RENDER_CUTOFF
fog*=v_cutoff_opacity;
#endif
glFragColor=vec4(vec3(0.0),mix(1.0,d,effect_intensity*u_opacity*fog));
#else
vec4 color=mix(vec4(u_flood_light_color,1.0),vec4(vec3(0.0),1.0),u_ao_pass);
#ifdef OVERDRAW_INSPECTOR
color=vec4(1.0);
#endif
glFragColor=color;
#endif
HANDLE_WIREFRAME_DEBUG;
#endif
}`, `#include "_prelude_fog.vertex.glsl"
in highp vec4 a_pos_end;in highp float a_angular_offset_factor;in highp float a_hidden_by_landmark;
#ifdef SDF_SUBPASS
out highp vec2 v_pos;out highp vec4 v_line_segment;out highp float v_flood_light_radius_tile;out highp vec2 v_ao;
#ifdef FOG
out highp float v_fog;
#endif
#endif
uniform highp float u_flood_light_intensity;uniform highp mat4 u_matrix;uniform highp float u_ao_pass;uniform highp float u_meter_to_tile;uniform highp float u_edge_radius;uniform highp float u_dynamic_offset;uniform highp vec2 u_ao;
#pragma mapbox: define highp float flood_light_ground_radius
const float TANGENT_CUTOFF=4.0;const float NORM=32767.0;void main() {
#pragma mapbox: initialize highp float flood_light_ground_radius
vec2 p=a_pos_end.xy;vec2 q=floor(a_pos_end.zw*0.5);vec2 start_bottom=a_pos_end.zw-q*2.0;float fl_ground_radius=flood_light_ground_radius;fl_ground_radius=abs(flood_light_ground_radius);float direction=flood_light_ground_radius < 0.0 ?-1.0 : 1.0;float flood_radius_tile=fl_ground_radius*u_meter_to_tile;vec2 v=normalize(q-p);float ao_radius=u_ao.y/3.5;float effect_radius=mix(flood_radius_tile,ao_radius,u_ao_pass)+u_edge_radius;float angular_offset_factor=a_angular_offset_factor/NORM*TANGENT_CUTOFF;float angular_offset=direction*angular_offset_factor*effect_radius;float top=1.0-start_bottom.y;float side=(0.5-start_bottom.x)*2.0;vec2 extrusion_parallel=v*side*mix(u_dynamic_offset,angular_offset,top);vec2 perp=vec2(v.y,-v.x);vec2 extrusion_perp=direction*perp*effect_radius*top;vec3 pos=vec3(mix(q,p,start_bottom.x),0.0);pos.xy+=extrusion_parallel+extrusion_perp;
#ifdef SDF_SUBPASS
v_pos=pos.xy;v_line_segment=vec4(p,q)+perp.xyxy*u_edge_radius;v_flood_light_radius_tile=flood_radius_tile;v_ao=vec2(u_ao.x,ao_radius);
#ifdef FOG
v_fog_pos=fog_position(pos);v_fog=1.0-fog(v_fog_pos);
#endif
#endif
float hidden_by_landmark=0.0;
#ifdef HAS_CENTROID
hidden_by_landmark=a_hidden_by_landmark;
#endif
float isFloodlit=float(fl_ground_radius > 0.0 && u_flood_light_intensity > 0.0);float hidden=mix(1.0-isFloodlit,isFloodlit,u_ao_pass);hidden+=hidden_by_landmark;gl_Position=mix(u_matrix*vec4(pos,1.0),AWAY,float(hidden > 0.0));
#ifdef RENDER_CUTOFF
v_cutoff_opacity=cutoff_opacity(u_cutoff_params,gl_Position.z);
#endif
}`), hillshadePrepare: Ti(`precision highp float;uniform sampler2D u_image;in vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;float getElevation(vec2 coord) {return texture(u_image,coord).r/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y));float b=getElevation(v_pos+vec2(0,-epsilon.y));float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y));float d=getElevation(v_pos+vec2(-epsilon.x,0));float e=getElevation(v_pos+vec2(epsilon.x,0));float f=getElevation(v_pos+vec2(-epsilon.x,epsilon.y));float g=getElevation(v_pos+vec2(0,epsilon.y));float h=getElevation(v_pos+vec2(epsilon.x,epsilon.y));float exaggerationFactor=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;float exaggeration=u_zoom < 15.0 ? (u_zoom-15.0)*exaggerationFactor : 0.0;vec2 deriv=vec2(
(c+e+e+h)-(a+d+d+f),(f+g+g+h)-(a+b+b+c)
)/pow(2.0,exaggeration+(19.2562-u_zoom));glFragColor=clamp(vec4(
deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);}`, "uniform mat4 u_matrix;uniform vec2 u_dimension;in vec2 a_pos;in vec2 a_texture_pos;out vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"), hillshade: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform sampler2D u_image;in vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;uniform float u_emissive_strength;void main() {vec4 pixel=texture(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);glFragColor=accent_color*(1.0-shade_color.a)+shade_color;
#ifdef LIGHTING_3D_MODE
glFragColor=apply_lighting_with_emission_ground(glFragColor,u_emissive_strength);
#endif
#ifdef FOG
glFragColor=fog_dither(fog_apply_premultiplied(glFragColor,v_fog_pos));
#endif
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
uniform mat4 u_matrix;in vec2 a_pos;in vec2 a_texture_pos;out vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
}`), line: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_shadow.fragment.glsl"
uniform lowp float u_device_pixel_ratio;uniform highp float u_width_scale;uniform highp float u_floor_width_scale;uniform float u_alpha_discard_threshold;uniform highp vec2 u_trim_offset;uniform highp vec2 u_trim_fade_range;uniform lowp vec4 u_trim_color;in vec2 v_width2;in vec2 v_normal;in float v_gamma_scale;in highp vec4 v_uv;
#ifdef ELEVATED_ROADS
in highp float v_road_z_offset;
#endif
#ifdef RENDER_LINE_DASH
uniform sampler2D u_dash_image;in vec2 v_tex;
#endif
#ifdef RENDER_LINE_GRADIENT
uniform sampler2D u_gradient_image;
#endif
#ifdef INDICATOR_CUTOUT
in highp float v_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform vec3 u_ground_shadow_factor;in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in highp float v_depth;
#endif
float luminance(vec3 c) {return (c.r+c.r+c.b+c.g+c.g+c.g)*0.1667;}uniform float u_emissive_strength;
#pragma mapbox: define highp vec4 color
#pragma mapbox: define lowp float floorwidth
#pragma mapbox: define lowp vec4 dash
#pragma mapbox: define lowp float blur
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp float border_width
#pragma mapbox: define lowp vec4 border_color
float linearstep(float edge0,float edge1,float x) {return  clamp((x-edge0)/(edge1-edge0),0.0,1.0);}void main() {
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize lowp float floorwidth
#pragma mapbox: initialize lowp vec4 dash
#pragma mapbox: initialize lowp float blur
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize lowp float border_width
#pragma mapbox: initialize lowp vec4 border_color
float dist=length(v_normal)*v_width2.s;float blur2=(u_width_scale*blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);
#ifdef RENDER_LINE_DASH
float sdfdist=texture(u_dash_image,v_tex).r;float sdfgamma=1.0/(2.0*u_device_pixel_ratio)/dash.z;float scaled_floorwidth=(floorwidth*u_floor_width_scale);alpha*=linearstep(0.5-sdfgamma/scaled_floorwidth,0.5+sdfgamma/scaled_floorwidth,sdfdist);
#endif
highp vec4 out_color;
#ifdef RENDER_LINE_GRADIENT
out_color=texture(u_gradient_image,v_uv.xy);
#else
out_color=color;
#endif
float trim_alpha=1.0;
#ifdef RENDER_LINE_TRIM_OFFSET
highp float start=v_uv[2];highp float end=v_uv[3];highp float trim_start=u_trim_offset[0];highp float trim_end=u_trim_offset[1];highp float line_progress=(start+(v_uv.x)*(end-start));if (trim_end > trim_start) {highp float start_transition=max(0.0,min(1.0,(line_progress-trim_start)/max(u_trim_fade_range[0],1.0e-9)));highp float end_transition=max(0.0,min(1.0,(trim_end-line_progress)/max(u_trim_fade_range[1],1.0e-9)));highp float transition_factor=min(start_transition,end_transition);out_color=mix(out_color,u_trim_color,transition_factor);trim_alpha=1.0-transition_factor;}
#endif
if (u_alpha_discard_threshold !=0.0) {if (alpha < u_alpha_discard_threshold) {discard;}}
#ifdef RENDER_LINE_BORDER
float edgeBlur=((border_width*u_width_scale)+1.0/u_device_pixel_ratio);float alpha2=clamp(min(dist-(v_width2.t-edgeBlur),v_width2.s-dist)/edgeBlur,0.0,1.0);if (alpha2 < 1.) {float smoothAlpha=smoothstep(0.6,1.0,alpha2);if (border_color.a==0.0) {float Y=(out_color.a > 0.01) ? luminance(out_color.rgb/out_color.a) : 1.;float adjustment=(Y > 0.) ? 0.5/Y : 0.45;if (out_color.a > 0.25 && Y < 0.25) {vec3 borderColor=(Y > 0.) ? out_color.rgb : vec3(1,1,1)*out_color.a;out_color.rgb=out_color.rgb+borderColor*(adjustment*(1.0-smoothAlpha));} else {out_color.rgb*=(0.6 +0.4*smoothAlpha);}} else {out_color=mix(border_color*trim_alpha,out_color,smoothAlpha);}}
#endif
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,u_emissive_strength);
#ifdef RENDER_SHADOWS
float light=shadowed_light_factor(v_pos_light_view_0,v_pos_light_view_1,v_depth);
#ifdef ELEVATED_ROADS
out_color.rgb*=mix(v_road_z_offset > 0.0 ? u_ground_shadow_factor : vec3(1.0),vec3(1.0),light);
#else
out_color.rgb*=mix(u_ground_shadow_factor,vec3(1.0),light);
#endif
#endif
#endif
#ifdef FOG
out_color=fog_dither(fog_apply_premultiplied(out_color,v_fog_pos));
#endif
out_color*=(alpha*opacity);
#ifdef INDICATOR_CUTOUT
out_color=applyCutout(out_color,v_z_offset);
#endif
glFragColor=out_color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
#define EXTRUDE_SCALE 0.015873016
in vec2 a_pos_normal;in vec4 a_data;
#if defined(ELEVATED) || defined(ELEVATED_ROADS) || defined(VARIABLE_LINE_WIDTH)
in vec2 a_z_offset_width;
#endif
#if defined(RENDER_LINE_GRADIENT) || defined(RENDER_LINE_TRIM_OFFSET)
in highp vec4 a_packed;
#endif
#ifdef RENDER_LINE_DASH
in float a_linesofar;
#endif
uniform mat4 u_matrix;uniform mat2 u_pixels_to_tile_units;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;uniform float u_width_scale;uniform highp float u_floor_width_scale;
#ifdef ELEVATED
uniform lowp float u_zbias_factor;uniform lowp float u_tile_to_meter;float sample_elevation(vec2 apos) {
#ifdef ELEVATION_REFERENCE_SEA
return 0.0;
#else
return elevation(apos);
#endif
}
#endif
out vec2 v_normal;out vec2 v_width2;out float v_gamma_scale;out highp vec4 v_uv;
#ifdef ELEVATED_ROADS
out highp float v_road_z_offset;
#endif
#ifdef RENDER_LINE_DASH
uniform vec2 u_texsize;uniform float u_tile_units_to_pixels;out vec2 v_tex;
#endif
#ifdef RENDER_LINE_GRADIENT
uniform float u_image_height;
#endif
#ifdef INDICATOR_CUTOUT
out highp float v_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out highp float v_depth;
#endif
#pragma mapbox: define highp vec4 color
#pragma mapbox: define lowp float floorwidth
#pragma mapbox: define lowp vec4 dash
#pragma mapbox: define lowp float blur
#pragma mapbox: define lowp float opacity
#pragma mapbox: define mediump float gapwidth
#pragma mapbox: define lowp float offset
#pragma mapbox: define mediump float width
#pragma mapbox: define lowp float border_width
#pragma mapbox: define lowp vec4 border_color
void main() {
#pragma mapbox: initialize highp vec4 color
#pragma mapbox: initialize lowp float floorwidth
#pragma mapbox: initialize lowp vec4 dash
#pragma mapbox: initialize lowp float blur
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize mediump float gapwidth
#pragma mapbox: initialize lowp float offset
#pragma mapbox: initialize mediump float width
#pragma mapbox: initialize lowp float border_width
#pragma mapbox: initialize lowp vec4 border_color
float a_z_offset;
#if defined(ELEVATED) || defined(ELEVATED_ROADS)
a_z_offset=a_z_offset_width.x;
#endif
float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth;
#ifdef VARIABLE_LINE_WIDTH
halfwidth=(u_width_scale*a_z_offset_width.y)/2.0;
#else
halfwidth=(u_width_scale*width)/2.0;
#endif
offset=-1.0*offset*u_width_scale;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*EXTRUDE_SCALE;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*EXTRUDE_SCALE*normal.y*mat2(t,-u,u,t);float hidden=float(opacity==0.0);vec2 extrude=dist*u_pixels_to_tile_units;vec4 projected_extrude=u_matrix*vec4(extrude,0.0,0.0);vec2 projected_extrude_xy=projected_extrude.xy;
#ifdef ELEVATED_ROADS
v_road_z_offset=a_z_offset;gl_Position=u_matrix*vec4(pos+offset2*u_pixels_to_tile_units,a_z_offset+0.01*step(0.01,a_z_offset),1.0)+projected_extrude;
#else
#ifdef ELEVATED
vec2 offsetTile=offset2*u_pixels_to_tile_units;vec2 offset_pos=pos+offsetTile;float ele=0.0;
#ifdef CROSS_SLOPE_VERTICAL
float top=a_pos_normal.y-2.0*floor(a_pos_normal.y*0.5);float line_height=2.0*u_tile_to_meter*outset*top*u_pixels_to_tile_units[1][1]+a_z_offset;ele=sample_elevation(offset_pos)+line_height;projected_extrude=vec4(0);
#else
#ifdef CROSS_SLOPE_HORIZONTAL
float ele0=sample_elevation(offset_pos);float ele1=max(sample_elevation(offset_pos+extrude),sample_elevation(offset_pos+extrude/2.0));float ele2=max(sample_elevation(offset_pos-extrude),sample_elevation(offset_pos-extrude/2.0));float ele_max=max(ele0,max(ele1,ele2));ele=ele_max+a_z_offset;
#else
float ele0=sample_elevation(offset_pos);float ele1=max(sample_elevation(offset_pos+extrude),sample_elevation(offset_pos+extrude/2.0));float ele2=max(sample_elevation(offset_pos-extrude),sample_elevation(offset_pos-extrude/2.0));float ele_max=max(ele0,0.5*(ele1+ele2));ele=ele_max-ele0+ele1+a_z_offset;
#endif
#endif
gl_Position=u_matrix*vec4(offset_pos,ele,1.0)+projected_extrude;float z=clamp(gl_Position.z/gl_Position.w,0.5,1.0);float zbias=max(0.00005,(pow(z,0.8)-z)*u_zbias_factor*u_exaggeration);gl_Position.z-=(gl_Position.w*zbias);gl_Position=mix(gl_Position,AWAY,hidden);
#else
gl_Position=mix(u_matrix*vec4(pos+offset2*u_pixels_to_tile_units,0.0,1.0)+projected_extrude,AWAY,hidden);
#endif
#endif
#ifdef ELEVATED_ROADS
#ifdef RENDER_SHADOWS
vec3 shd_pos=vec3(pos+(offset2+dist)*u_pixels_to_tile_units,a_z_offset);vec3 shd_pos0=shd_pos;vec3 shd_pos1=shd_pos;
#ifdef NORMAL_OFFSET
vec3 shd_pos_offset=shadow_normal_offset(vec3(0.0,0.0,1.0));shd_pos0+=shd_pos_offset*shadow_normal_offset_multiplier0();shd_pos1+=shd_pos_offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);v_depth=gl_Position.w;
#endif
#endif
#ifndef RENDER_TO_TEXTURE
float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude_xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=mix(extrude_length_without_perspective/extrude_length_with_perspective,1.0,step(0.01,blur));
#else
v_gamma_scale=1.0;
#endif
#if defined(RENDER_LINE_GRADIENT) || defined(RENDER_LINE_TRIM_OFFSET)
float a_uv_x=a_packed[0];float a_split_index=a_packed[1];highp float a_clip_start=a_packed[2];highp float a_clip_end=a_packed[3];
#ifdef RENDER_LINE_GRADIENT
highp float texel_height=1.0/u_image_height;highp float half_texel_height=0.5*texel_height;v_uv=vec4(a_uv_x,a_split_index*texel_height-half_texel_height,a_clip_start,a_clip_end);
#else
v_uv=vec4(a_uv_x,0.0,a_clip_start,a_clip_end);
#endif
#endif
#ifdef RENDER_LINE_DASH
float scale=dash.z==0.0 ? 0.0 : u_tile_units_to_pixels/dash.z;float height=dash.y;v_tex=vec2(a_linesofar*scale/(floorwidth*u_floor_width_scale),(-normal.y*height+dash.x+0.5)/u_texsize.y);
#endif
v_width2=vec2(outset,inset);
#ifdef FOG
v_fog_pos=fog_position(pos);
#endif
#ifdef INDICATOR_CUTOUT
v_z_offset=a_z_offset;
#endif
}`), linePattern: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_shadow.fragment.glsl"
uniform highp float u_device_pixel_ratio;uniform highp float u_width_scale;uniform highp float u_alpha_discard_threshold;uniform highp vec2 u_texsize;uniform highp float u_tile_units_to_pixels;uniform highp vec2 u_trim_offset;uniform highp vec2 u_trim_fade_range;uniform lowp vec4 u_trim_color;uniform sampler2D u_image;in vec2 v_normal;in vec2 v_width2;in highp float v_linesofar;in float v_gamma_scale;in float v_width;
#ifdef RENDER_LINE_TRIM_OFFSET
in highp vec4 v_uv;
#endif
#ifdef ELEVATED_ROADS
in highp float v_road_z_offset;
#endif
#ifdef LINE_JOIN_NONE
in vec2 v_pattern_data;
#endif
#ifdef INDICATOR_CUTOUT
in highp float v_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform vec3 u_ground_shadow_factor;in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in highp float v_depth;
#endif
uniform float u_emissive_strength;
#pragma mapbox: define mediump vec4 pattern
#pragma mapbox: define mediump float pixel_ratio
#pragma mapbox: define mediump float blur
#pragma mapbox: define mediump float opacity
void main() {
#pragma mapbox: initialize mediump vec4 pattern
#pragma mapbox: initialize mediump float pixel_ratio
#pragma mapbox: initialize mediump float blur
#pragma mapbox: initialize mediump float opacity
vec2 pattern_tl=pattern.xy;vec2 pattern_br=pattern.zw;vec2 display_size=(pattern_br-pattern_tl)/pixel_ratio;highp float pattern_size=display_size.x/u_tile_units_to_pixels;float aspect=display_size.y/v_width;float dist=length(v_normal)*v_width2.s;float blur2=(u_width_scale*blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);highp float pattern_x=v_linesofar/pattern_size*aspect;highp float x=mod(pattern_x,1.0);highp float y=0.5*v_normal.y+0.5;vec2 texel_size=1.0/u_texsize;highp vec2 pos=mix(pattern_tl*texel_size-texel_size,pattern_br*texel_size+texel_size,vec2(x,y));highp vec2 lod_pos=mix(pattern_tl*texel_size-texel_size,pattern_br*texel_size+texel_size,vec2(pattern_x,y));vec4 color=textureLodCustom(u_image,pos,lod_pos);
#ifdef RENDER_LINE_TRIM_OFFSET
highp float start=v_uv[2];highp float end=v_uv[3];highp float trim_start=u_trim_offset[0];highp float trim_end=u_trim_offset[1];highp float line_progress=(start+(v_uv.x)*(end-start));if (trim_end > trim_start) {highp float start_transition=max(0.0,min(1.0,(line_progress-trim_start)/max(u_trim_fade_range[0],1.0e-9)));highp float end_transition=max(0.0,min(1.0,(trim_end-line_progress)/max(u_trim_fade_range[1],1.0e-9)));highp float transition_factor=min(start_transition,end_transition);color=mix(color,color.a*u_trim_color,transition_factor);}
#endif
#ifdef LINE_JOIN_NONE
highp float pattern_len=pattern_size/aspect;highp float segment_phase=pattern_len-mod(v_linesofar-v_pattern_data.x+pattern_len,pattern_len);highp float visible_start=segment_phase-step(pattern_len*0.5,segment_phase)*pattern_len;highp float visible_end=floor((v_pattern_data.y-segment_phase)/pattern_len)*pattern_len+segment_phase;visible_end+=step(pattern_len*0.5,v_pattern_data.y-visible_end)*pattern_len;if (v_pattern_data.x < visible_start || v_pattern_data.x >=visible_end) {color=vec4(0.0);}
#endif
#ifdef LIGHTING_3D_MODE
color=apply_lighting_with_emission_ground(color,u_emissive_strength);
#ifdef RENDER_SHADOWS
float light=shadowed_light_factor(v_pos_light_view_0,v_pos_light_view_1,v_depth);
#ifdef ELEVATED_ROADS
color.rgb*=mix(v_road_z_offset > 0.0 ? u_ground_shadow_factor : vec3(1.0),vec3(1.0),light);
#else
color.rgb*=mix(u_ground_shadow_factor,vec3(1.0),light);
#endif
#endif
#endif
#ifdef FOG
color=fog_dither(fog_apply_premultiplied(color,v_fog_pos));
#endif
color*=(alpha*opacity);if (u_alpha_discard_threshold !=0.0) {if (color.a < u_alpha_discard_threshold) {discard;}}
#ifdef INDICATOR_CUTOUT
color=applyCutout(color,v_z_offset);
#endif
glFragColor=color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
#define scale 0.015873016
in vec2 a_pos_normal;in vec4 a_data;
#if defined(ELEVATED) || defined(ELEVATED_ROADS)
in vec2 a_z_offset_width;
#endif
#ifdef RENDER_LINE_TRIM_OFFSET
in highp vec4 a_packed;
#endif
in highp float a_linesofar;
#ifdef LINE_JOIN_NONE
in highp vec3 a_pattern_data;out vec2 v_pattern_data;
#endif
#ifdef INDICATOR_CUTOUT
out highp float v_z_offset;
#endif
uniform mat4 u_matrix;uniform float u_tile_units_to_pixels;uniform vec2 u_units_to_pixels;uniform mat2 u_pixels_to_tile_units;uniform float u_device_pixel_ratio;uniform float u_width_scale;uniform float u_floor_width_scale;
#ifdef ELEVATED
uniform lowp float u_zbias_factor;uniform lowp float u_tile_to_meter;float sample_elevation(vec2 apos) {
#ifdef ELEVATION_REFERENCE_SEA
return 0.0;
#else
return elevation(apos);
#endif
}
#endif
out vec2 v_normal;out vec2 v_width2;out highp float v_linesofar;out float v_gamma_scale;out float v_width;
#ifdef RENDER_LINE_TRIM_OFFSET
out highp vec4 v_uv;
#endif
#ifdef ELEVATED_ROADS
out highp float v_road_z_offset;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out highp float v_depth;
#endif
#pragma mapbox: define mediump float blur
#pragma mapbox: define mediump float opacity
#pragma mapbox: define mediump float offset
#pragma mapbox: define mediump float gapwidth
#pragma mapbox: define mediump float width
#pragma mapbox: define mediump float floorwidth
#pragma mapbox: define mediump vec4 pattern
#pragma mapbox: define mediump float pixel_ratio
void main() {
#pragma mapbox: initialize mediump float blur
#pragma mapbox: initialize mediump float opacity
#pragma mapbox: initialize mediump float offset
#pragma mapbox: initialize mediump float gapwidth
#pragma mapbox: initialize mediump float width
#pragma mapbox: initialize mediump float floorwidth
#pragma mapbox: initialize mediump vec4 pattern
#pragma mapbox: initialize mediump float pixel_ratio
float a_z_offset;
#if defined(ELEVATED) || defined(ELEVATED_ROADS)
a_z_offset=a_z_offset_width.x;
#endif
float ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;vec2 pos=floor(a_pos_normal*0.5);vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=(u_width_scale*width)/2.0;offset=-1.0*offset*u_width_scale;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);vec2 dist=outset*a_extrude*scale;float u=0.5*a_direction;float t=1.0-abs(u);vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);float hidden=float(opacity==0.0);vec2 extrude=dist*u_pixels_to_tile_units;vec4 projected_extrude=u_matrix*vec4(extrude,0.0,0.0);vec2 projected_extrude_xy=projected_extrude.xy;
#ifdef ELEVATED_ROADS
v_road_z_offset=a_z_offset;gl_Position=u_matrix*vec4(pos+offset2*u_pixels_to_tile_units,a_z_offset+0.01*step(0.01,a_z_offset),1.0)+projected_extrude;
#else
#ifdef ELEVATED
vec2 offsetTile=offset2*u_pixels_to_tile_units;vec2 offset_pos=pos+offsetTile;float ele=0.0;
#ifdef CROSS_SLOPE_VERTICAL
float top=a_pos_normal.y-2.0*floor(a_pos_normal.y*0.5);float line_height=2.0*u_tile_to_meter*outset*top*u_pixels_to_tile_units[1][1]+a_z_offset;ele=sample_elevation(offset_pos)+line_height;projected_extrude=vec4(0);
#else
#ifdef CROSS_SLOPE_HORIZONTAL
float ele0=sample_elevation(offset_pos);float ele1=max(sample_elevation(offset_pos+extrude),sample_elevation(offset_pos+extrude/2.0));float ele2=max(sample_elevation(offset_pos-extrude),sample_elevation(offset_pos-extrude/2.0));float ele_max=max(ele0,max(ele1,ele2));ele=ele_max+a_z_offset;
#else
float ele0=sample_elevation(offset_pos);float ele1=max(sample_elevation(offset_pos+extrude),sample_elevation(offset_pos+extrude/2.0));float ele2=max(sample_elevation(offset_pos-extrude),sample_elevation(offset_pos-extrude/2.0));float ele_max=max(ele0,0.5*(ele1+ele2));ele=ele_max-ele0+ele1+a_z_offset;
#endif
#endif
gl_Position=u_matrix*vec4(offset_pos,ele,1.0)+projected_extrude;float z=clamp(gl_Position.z/gl_Position.w,0.5,1.0);float zbias=max(0.00005,(pow(z,0.8)-z)*u_zbias_factor*u_exaggeration);gl_Position.z-=(gl_Position.w*zbias);gl_Position=mix(gl_Position,AWAY,hidden);
#else
gl_Position=mix(u_matrix*vec4(pos+offset2*u_pixels_to_tile_units,0.0,1.0)+projected_extrude,AWAY,hidden);
#endif
#endif
#ifdef ELEVATED_ROADS
#ifdef RENDER_SHADOWS
vec3 shd_pos=vec3(pos+(offset2+dist)*u_pixels_to_tile_units,a_z_offset);vec3 shd_pos0=shd_pos;vec3 shd_pos1=shd_pos;
#ifdef NORMAL_OFFSET
vec3 shd_pos_offset=shadow_normal_offset(vec3(0.0,0.0,1.0));shd_pos0+=shd_pos_offset*shadow_normal_offset_multiplier0();shd_pos1+=shd_pos_offset*shadow_normal_offset_multiplier1();
#endif
v_pos_light_view_0=u_light_matrix_0*vec4(shd_pos0,1);v_pos_light_view_1=u_light_matrix_1*vec4(shd_pos1,1);v_depth=gl_Position.w;
#endif
#endif
#ifndef RENDER_TO_TEXTURE
float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude_xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=mix(extrude_length_without_perspective/extrude_length_with_perspective,1.0,step(0.01,blur));
#else
v_gamma_scale=1.0;
#endif
#ifdef RENDER_LINE_TRIM_OFFSET
float a_uv_x=a_packed[0];highp float a_clip_start=a_packed[2];highp float a_clip_end=a_packed[3];v_uv=vec4(a_uv_x,0.0,a_clip_start,a_clip_end);
#endif
v_linesofar=a_linesofar;v_width2=vec2(outset,inset);v_width=(floorwidth*u_floor_width_scale);
#ifdef LINE_JOIN_NONE
v_width=(floorwidth*u_floor_width_scale)+ANTIALIASING;mediump float pixels_to_tile_units=1.0/u_tile_units_to_pixels;mediump float pixel_ratio_inverse=1.0/pixel_ratio;mediump float aspect=v_width/((pattern.w-pattern.y)*pixel_ratio_inverse);highp float subt_multiple=(pattern.z-pattern.x)*pixel_ratio_inverse*pixels_to_tile_units*aspect*32.0;highp float subt=floor(a_pattern_data.z/subt_multiple)*subt_multiple;float offset_sign=(fract(a_pattern_data.x)-0.5)*4.0;float line_progress_offset=offset_sign*v_width*0.5*pixels_to_tile_units;v_linesofar=(a_pattern_data.z-subt)+a_linesofar+line_progress_offset;v_pattern_data=vec2(a_pattern_data.x+line_progress_offset,a_pattern_data.y);
#endif
#ifdef FOG
v_fog_pos=fog_position(pos);
#endif
#ifdef INDICATOR_CUTOUT
v_z_offset=a_z_offset;
#endif
}`), raster: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
#include "_prelude_raster_array.glsl"
uniform float u_fade_t;uniform float u_opacity;uniform highp float u_raster_elevation;uniform highp float u_zoom_transition;in vec2 v_pos0;in vec2 v_pos1;in float v_depth;
#ifdef PROJECTION_GLOBE_VIEW
in float v_split_fade;
#endif
uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;uniform float u_emissive_strength;
#ifndef RASTER_ARRAY
uniform highp sampler2D u_image0;uniform sampler2D u_image1;
#endif
#ifdef RASTER_COLOR
uniform sampler2D u_color_ramp;uniform highp vec4 u_colorization_mix;uniform highp float u_colorization_offset;uniform vec2 u_texture_res;
#endif
void main() {vec4 color0,color1,color;vec2 value;
#ifdef RASTER_COLOR
#ifdef RASTER_ARRAY
#ifdef RASTER_ARRAY_LINEAR
value=mix(
raTexture2D_image0_linear(v_pos0,u_texture_res,u_colorization_mix,u_colorization_offset),raTexture2D_image1_linear(v_pos1,u_texture_res,u_colorization_mix,u_colorization_offset),u_fade_t
);
#else
value=mix(
raTexture2D_image0_nearest(v_pos0,u_texture_res,u_colorization_mix,u_colorization_offset),raTexture2D_image1_nearest(v_pos1,u_texture_res,u_colorization_mix,u_colorization_offset),u_fade_t
);
#endif
if (value.y > 0.0) value.x/=value.y;
#else
color=mix(texture(u_image0,v_pos0),texture(u_image1,v_pos1),u_fade_t);value=vec2(u_colorization_offset+dot(color.rgb,u_colorization_mix.rgb),color.a);
#endif
color=texture(u_color_ramp,vec2(value.x,0.5));if (color.a > 0.0) color.rgb/=color.a;color.a*=value.y;
#else
color0=texture(u_image0,v_pos0);color1=texture(u_image1,v_pos1);if (color0.a > 0.0) color0.rgb/=color0.a;if (color1.a > 0.0) color1.rgb/=color1.a;color=mix(color0,color1,u_fade_t);
#endif
color.a*=u_opacity;
#ifdef GLOBE_POLES
color.a*=1.0-smoothstep(0.0,0.05,u_zoom_transition);
#endif
vec3 rgb=color.rgb;rgb=vec3(
dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);vec3 out_color=mix(u_high_vec,u_low_vec,rgb);
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(vec4(out_color,1.0),u_emissive_strength).rgb;
#endif
#ifdef FOG
highp float fog_limit_high_meters=1000000.0;highp float fog_limit_low_meters=600000.0;float fog_limit=1.0-smoothstep(fog_limit_low_meters,fog_limit_high_meters,u_raster_elevation);out_color=fog_dither(fog_apply(out_color,v_fog_pos,fog_limit));
#endif
glFragColor=vec4(out_color*color.a,color.a);
#ifdef PROJECTION_GLOBE_VIEW
glFragColor*=mix(1.0,1.0-smoothstep(0.0,0.05,u_zoom_transition),smoothstep(0.8,0.9,v_split_fade));
#endif
#ifdef RENDER_CUTOFF
glFragColor=glFragColor*cutoff_opacity(u_cutoff_params,v_depth);
#endif
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
uniform mat4 u_matrix;uniform mat4 u_normalize_matrix;uniform mat4 u_globe_matrix;uniform mat4 u_merc_matrix;uniform mat3 u_grid_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform vec2 u_perspective_transform;uniform vec2 u_texture_offset;uniform float u_raster_elevation;uniform float u_zoom_transition;uniform vec2 u_merc_center;
#define GLOBE_UPSCALE GLOBE_RADIUS/6371008.8
#ifdef GLOBE_POLES
in vec3 a_globe_pos;in vec2 a_uv;
#else
in vec2 a_pos;in vec2 a_texture_pos;
#endif
out vec2 v_pos0;out vec2 v_pos1;out float v_depth;
#ifdef PROJECTION_GLOBE_VIEW
out float v_split_fade;
#endif
void main() {vec2 uv;
#ifdef GLOBE_POLES
vec3 globe_pos=a_globe_pos;globe_pos+=normalize(globe_pos)*u_raster_elevation*GLOBE_UPSCALE;gl_Position=u_matrix*u_globe_matrix*vec4(globe_pos   ,1.0);uv=a_uv;
#ifdef FOG
v_fog_pos=fog_position((u_normalize_matrix*vec4(a_globe_pos,1.0)).xyz);
#endif
#else
float w=1.0+dot(a_texture_pos,u_perspective_transform);uv=a_texture_pos/8192.0;
#ifdef PROJECTION_GLOBE_VIEW
vec3 decomposed_pos_and_skirt=decomposeToPosAndSkirt(a_pos);vec3 latLng=u_grid_matrix*vec3(decomposed_pos_and_skirt.xy,1.0);vec3 globe_pos=latLngToECEF(latLng.xy);globe_pos+=normalize(globe_pos)*u_raster_elevation*GLOBE_UPSCALE;vec4 globe_world_pos=u_globe_matrix*vec4(globe_pos,1.0);vec4 merc_world_pos=vec4(0.0);float mercatorY=mercatorYfromLat(latLng[0]);float mercatorX=mercatorXfromLng(latLng[1]);    
v_split_fade=0.0;if (u_zoom_transition > 0.0) {vec2 merc_pos=vec2(mercatorX,mercatorY);merc_world_pos=vec4(merc_pos,u_raster_elevation,1.0);merc_world_pos.xy-=u_merc_center;merc_world_pos.x=wrap(merc_world_pos.x,-0.5,0.5);merc_world_pos=u_merc_matrix*merc_world_pos;float opposite_merc_center=mod(u_merc_center.x+0.5,1.0);float dist_from_poles=(abs(mercatorY-0.5)*2.0);float range=0.1;v_split_fade=abs(opposite_merc_center-mercatorX);v_split_fade=clamp(1.0-v_split_fade,0.0,1.0);v_split_fade=max(smoothstep(1.0-range,1.0,dist_from_poles),max(smoothstep(1.0-range,1.0,v_split_fade),smoothstep(1.0-range,1.0,1.0-v_split_fade)));}float tiles=u_grid_matrix[0][2];if (tiles > 0.0) {float idx=u_grid_matrix[1][2];float idy=u_grid_matrix[2][2];float uvY=mercatorY*tiles-idy;float uvX=mercatorX*tiles-idx;uv=vec2(uvX,uvY);}vec4 interpolated_pos=vec4(mix(globe_world_pos.xyz,merc_world_pos.xyz,u_zoom_transition)*w,w);gl_Position=u_matrix*interpolated_pos;
#ifdef FOG
v_fog_pos=fog_position((u_normalize_matrix*vec4(globe_pos,1.0)).xyz);
#endif
#else
gl_Position=u_matrix*vec4(a_pos*w,u_raster_elevation*w,w);
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
#endif
#endif
v_pos0=uv;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;v_pos0=u_texture_offset.x+u_texture_offset.y*v_pos0;v_pos1=u_texture_offset.x+u_texture_offset.y*v_pos1;
#ifdef RENDER_CUTOFF
v_depth=gl_Position.z;
#endif
}`), rasterParticle: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform float u_fade_t;uniform float u_opacity;uniform highp float u_raster_elevation;in vec2 v_pos0;in vec2 v_pos1;uniform sampler2D u_image0;uniform sampler2D u_image1;void main() {vec4 color0,color1,color;color0=texture(u_image0,v_pos0);color1=texture(u_image1,v_pos1);if (color0.a > 0.0) color0.rgb/=color0.a;if (color1.a > 0.0) color1.rgb/=color1.a;color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 out_color=color.rgb;
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(vec4(out_color,1.0),0.0).rgb;
#endif
#ifdef FOG
highp float fog_limit_high_meters=1000000.0;highp float fog_limit_low_meters=600000.0;float fog_limit=1.0-smoothstep(fog_limit_low_meters,fog_limit_high_meters,u_raster_elevation);out_color=fog_dither(fog_apply(out_color,v_fog_pos,fog_limit));
#endif
glFragColor=vec4(out_color*color.a,color.a);
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
uniform mat4 u_matrix;uniform mat4 u_normalize_matrix;uniform mat4 u_globe_matrix;uniform mat4 u_merc_matrix;uniform mat3 u_grid_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_raster_elevation;uniform float u_zoom_transition;uniform vec2 u_merc_center;
#define GLOBE_UPSCALE GLOBE_RADIUS/6371008.8
in vec2 a_pos;in vec2 a_texture_pos;out vec2 v_pos0;out vec2 v_pos1;void main() {float w=1.0;vec2 uv;
#ifdef PROJECTION_GLOBE_VIEW
vec3 decomposed_pos_and_skirt=decomposeToPosAndSkirt(a_pos);vec3 latLng=u_grid_matrix*vec3(decomposed_pos_and_skirt.xy,1.0);float mercatorY=mercatorYfromLat(latLng[0]);float mercatorX=mercatorXfromLng(latLng[1]);float tiles=u_grid_matrix[0][2];float idx=u_grid_matrix[1][2];float idy=u_grid_matrix[2][2];float uvX=mercatorX*tiles-idx;float uvY=mercatorY*tiles-idy;uv=vec2(uvX,uvY);vec3 globe_pos=latLngToECEF(latLng.xy);globe_pos+=normalize(globe_pos)*u_raster_elevation*GLOBE_UPSCALE;vec4 globe_world_pos=u_globe_matrix*vec4(globe_pos,1.0);vec4 merc_world_pos=vec4(0.0);if (u_zoom_transition > 0.0) {vec2 merc_pos=vec2(mercatorX,mercatorY);merc_world_pos=vec4(merc_pos,u_raster_elevation,1.0);merc_world_pos.xy-=u_merc_center;merc_world_pos.x=wrap(merc_world_pos.x,-0.5,0.5);merc_world_pos=u_merc_matrix*merc_world_pos;}vec4 interpolated_pos=vec4(mix(globe_world_pos.xyz,merc_world_pos.xyz,u_zoom_transition)*w,w);gl_Position=u_matrix*interpolated_pos;
#ifdef FOG
v_fog_pos=fog_position((u_normalize_matrix*vec4(globe_pos,1.0)).xyz);
#endif
#else
uv=a_texture_pos/8192.0;gl_Position=u_matrix*vec4(a_pos*w,u_raster_elevation*w,w);
#ifdef FOG
v_fog_pos=fog_position(a_pos);
#endif
#endif
v_pos0=uv;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}`), rasterParticleDraw: Ti("uniform sampler2D u_color_ramp;in float v_particle_speed;void main() {glFragColor=texture(u_color_ramp,vec2(v_particle_speed,0.5));}", `#include "_prelude_raster_particle.glsl"
in float a_index;uniform sampler2D u_particle_texture;uniform float u_particle_texture_side_len;uniform vec2 u_tile_offset;out float v_particle_speed;void main() {ivec2 pixel_coord=ivec2(
mod(a_index,u_particle_texture_side_len),a_index/u_particle_texture_side_len);vec4 pixel=texelFetch(u_particle_texture,pixel_coord,0);vec2 pos=unpack_pos_from_rgba(pixel)+u_tile_offset;vec2 tex_coord=fract(pos);vec2 velocity=lookup_velocity(tex_coord);if (velocity==INVALID_VELOCITY) {gl_Position=AWAY;v_particle_speed=0.0;} else {gl_Position=vec4(2.0*pos-1.0,0,1);v_particle_speed=length(velocity);}gl_PointSize=1.0;}`), rasterParticleTexture: Ti("uniform sampler2D u_texture;uniform float u_opacity;in vec2 v_tex_pos;void main() {vec4 color=texture(u_texture,v_tex_pos);glFragColor=vec4(floor(255.0*color*u_opacity)/255.0);}", "in vec2 a_pos;out vec2 v_tex_pos;void main() {vec2 uv=0.5*a_pos+vec2(0.5);v_tex_pos=uv;gl_Position=vec4(a_pos,0.0,1.0);}"), rasterParticleUpdate: Ti(`#include "_prelude_raster_particle.glsl"
uniform sampler2D u_particle_texture;uniform mediump float u_particle_texture_side_len;uniform mediump float u_speed_factor;uniform highp float u_reset_rate;uniform highp float u_rand_seed;in highp vec2 v_tex_coord;vec2 linearstep(vec2 edge0,vec2 edge1,vec2 x) {return  clamp((x-edge0)/(edge1-edge0),vec2(0),vec2(1));}const highp vec3 rand_constants=vec3(12.9898,78.233,4375.85453);highp float rand(const highp vec2 co) {highp float t=dot(rand_constants.xy,co);return fract(sin(t)*(rand_constants.z+t));}void main() {ivec2 pixel_coord=ivec2(v_tex_coord*u_particle_texture_side_len);highp vec4 pixel=texelFetch(u_particle_texture,pixel_coord,0);highp vec2 pos=unpack_pos_from_rgba(pixel);highp vec2 velocity=lookup_velocity(clamp(pos,0.0,1.0));highp vec2 dp=velocity==INVALID_VELOCITY ? vec2(0) : velocity*u_speed_factor;pos=pos+dp;highp vec2 seed=(pos+v_tex_coord)*u_rand_seed;highp vec2 random_pos=vec2(rand(seed+1.3),rand(seed+2.1));highp vec2 persist_rate=pow(
linearstep(vec2(-u_particle_pos_offset),vec2(0),pos)*linearstep(vec2(1.0+u_particle_pos_offset),vec2(1),pos),vec2(4)
);highp vec2 per_frame_persist=pow(persist_rate,abs(dp)/u_particle_pos_offset);highp float drop_rate=1.0-per_frame_persist.x*per_frame_persist.y;drop_rate=any(greaterThanEqual(abs(pos-0.5),vec2(0.5+u_particle_pos_offset))) ? 1.0 : drop_rate;highp float drop=step(1.0-drop_rate-u_reset_rate,rand(seed));highp vec2 next_pos=mix(pos,random_pos,drop);glFragColor=pack_pos_to_rgba(next_pos);}`, "in vec2 a_pos;out vec2 v_tex_coord;void main() {v_tex_coord=0.5*(a_pos+vec2(1.0));gl_Position=vec4(a_pos,0.0,1.0);}"), symbol: Ti(`#include "_prelude_lighting.glsl"
#define SDF_PX 8.0
#define SDF 1.0
#define ICON 0.0
uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;uniform bool u_is_halo;uniform lowp float u_scale_factor;
#ifdef ICON_TRANSITION
uniform float u_icon_transition;
#endif
#ifdef COLOR_ADJUSTMENT
uniform mat4 u_color_adj_mat;
#endif
#ifdef INDICATOR_CUTOUT
in highp float v_z_offset;
#endif
in vec2 v_tex_a;
#ifdef ICON_TRANSITION
in vec2 v_tex_b;
#endif
in float v_draw_halo;in vec3 v_gamma_scale_size_fade_opacity;
#ifdef RENDER_TEXT_AND_SYMBOL
in float is_sdf;in vec2 v_tex_a_icon;
#endif
#pragma mapbox: define highp vec4 fill_color
#pragma mapbox: define highp vec4 halo_color
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp float halo_width
#pragma mapbox: define lowp float halo_blur
#pragma mapbox: define lowp float emissive_strength
void main() {
#pragma mapbox: initialize highp vec4 fill_color
#pragma mapbox: initialize highp vec4 halo_color
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize lowp float halo_width
#pragma mapbox: initialize lowp float halo_blur
#pragma mapbox: initialize lowp float emissive_strength
vec4 out_color;float fade_opacity=v_gamma_scale_size_fade_opacity[2];
#ifdef RENDER_TEXT_AND_SYMBOL
if (is_sdf==ICON) {vec2 tex_icon=v_tex_a_icon;lowp float alpha=opacity*fade_opacity;glFragColor=texture(u_texture_icon,tex_icon)*alpha;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
return;}
#endif
#ifdef RENDER_SDF
float EDGE_GAMMA=0.105/u_device_pixel_ratio;float gamma_scale=v_gamma_scale_size_fade_opacity.x;float size=v_gamma_scale_size_fade_opacity.y;float fontScale=u_is_text ? size/24.0 : size;out_color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;bool draw_halo=v_draw_halo > 0.0;if (draw_halo) {out_color=halo_color;gamma=(halo_blur*u_scale_factor*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width*u_scale_factor/fontScale)/SDF_PX;}lowp float dist=texture(u_texture,v_tex_a).r;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);out_color*=alpha;
#else
#ifdef ICON_TRANSITION
vec4 a=texture(u_texture,v_tex_a)*(1.0-u_icon_transition);vec4 b=texture(u_texture,v_tex_b)*u_icon_transition;out_color=(a+b);
#else
out_color=texture(u_texture,v_tex_a);
#endif
#ifdef COLOR_ADJUSTMENT
out_color=u_color_adj_mat*out_color;
#endif
#endif
out_color*=opacity*fade_opacity;
#ifdef LIGHTING_3D_MODE
out_color=apply_lighting_with_emission_ground(out_color,emissive_strength);
#endif
#ifdef INDICATOR_CUTOUT
out_color=applyCutout(out_color,v_z_offset);
#endif
glFragColor=out_color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_terrain.vertex.glsl"
in vec4 a_pos_offset;in vec4 a_tex_size;in vec4 a_pixeloffset;in vec4 a_projected_pos;in float a_fade_opacity;
#ifdef Z_OFFSET
in float a_auto_z_offset;
#endif
#ifdef PROJECTION_GLOBE_VIEW
in vec3 a_globe_anchor;in vec3 a_globe_normal;
#endif
#ifdef ICON_TRANSITION
in vec2 a_texb;
#endif
#ifdef OCCLUSION_QUERIES
in float a_occlusion_query_opacity;
#endif
#ifdef INDICATOR_CUTOUT
out highp float v_z_offset;
#endif
uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_elevation_from_sea;uniform bool u_pitch_with_map;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec3 u_up_vector;uniform vec2 u_texsize_icon;uniform bool u_is_halo;
#ifdef PROJECTION_GLOBE_VIEW
uniform vec3 u_tile_id;uniform mat4 u_inv_rot_matrix;uniform vec2 u_merc_center;uniform vec3 u_camera_forward;uniform float u_zoom_transition;uniform vec3 u_ecef_origin;uniform mat4 u_tile_matrix;
#endif
out vec2 v_tex_a;
#ifdef ICON_TRANSITION
out vec2 v_tex_b;
#endif
out float v_draw_halo;out vec3 v_gamma_scale_size_fade_opacity;
#ifdef RENDER_TEXT_AND_SYMBOL
out float is_sdf;out vec2 v_tex_a_icon;
#endif
#pragma mapbox: define highp vec4 fill_color
#pragma mapbox: define highp vec4 halo_color
#pragma mapbox: define lowp float opacity
#pragma mapbox: define lowp float halo_width
#pragma mapbox: define lowp float halo_blur
#pragma mapbox: define lowp float emissive_strength
#pragma mapbox: define lowp float occlusion_opacity
#pragma mapbox: define lowp float z_offset
void main() {
#pragma mapbox: initialize highp vec4 fill_color
#pragma mapbox: initialize highp vec4 halo_color
#pragma mapbox: initialize lowp float opacity
#pragma mapbox: initialize lowp float halo_width
#pragma mapbox: initialize lowp float halo_blur
#pragma mapbox: initialize lowp float emissive_strength
#pragma mapbox: initialize lowp float occlusion_opacity
#pragma mapbox: initialize lowp float z_offset
vec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_tex_size.xy;vec2 a_size=a_tex_size.zw;float a_size_min=floor(a_size[0]*0.5);vec2 a_pxoffset=a_pixeloffset.xy;vec2 a_min_font_scale=a_pixeloffset.zw/256.0;highp float segment_angle=-a_projected_pos[3];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size_min/128.0;} else {size=u_size;}vec2 tile_anchor=a_pos;float e=u_elevation_from_sea ? z_offset : z_offset+elevation(tile_anchor);
#ifdef Z_OFFSET
e+=a_auto_z_offset;
#endif
vec3 h=elevationVector(tile_anchor)*e;float globe_occlusion_fade;vec3 world_pos;vec3 mercator_pos;vec3 world_pos_globe;
#ifdef PROJECTION_GLOBE_VIEW
mercator_pos=mercator_tile_position(u_inv_rot_matrix,tile_anchor,u_tile_id,u_merc_center);world_pos_globe=a_globe_anchor+h;world_pos=mix_globe_mercator(world_pos_globe,mercator_pos,u_zoom_transition);vec4 ecef_point=u_tile_matrix*vec4(world_pos,1.0);vec3 origin_to_point=ecef_point.xyz-u_ecef_origin;globe_occlusion_fade=dot(origin_to_point,u_camera_forward) >=0.0 ? 0.0 : 1.0;
#else
world_pos=vec3(tile_anchor,0)+h;globe_occlusion_fade=1.0;
#endif
vec4 projected_point=u_matrix*vec4(world_pos,1);highp float camera_to_anchor_distance=projected_point.w;highp float distance_ratio=u_pitch_with_map ?
camera_to_anchor_distance/u_camera_to_center_distance :
u_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(
0.5+0.5*distance_ratio,0.0,1.5);size*=perspective_ratio;float font_scale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetprojected_point;vec2 a;
#ifdef PROJECTION_GLOBE_VIEW
vec3 displacement=vec3(a_globe_normal.z,0,-a_globe_normal.x);offsetprojected_point=u_matrix*vec4(a_globe_anchor+displacement,1);vec4 projected_point_globe=u_matrix*vec4(world_pos_globe,1);a=projected_point_globe.xy/projected_point_globe.w;
#else
offsetprojected_point=u_matrix*vec4(tile_anchor+vec2(1,0),0,1);a=projected_point.xy/projected_point.w;
#endif
vec2 b=offsetprojected_point.xy/offsetprojected_point.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}vec4 projected_pos;
#ifdef PROJECTION_GLOBE_VIEW
vec3 proj_pos=mix_globe_mercator(a_projected_pos.xyz+h,mercator_pos,u_zoom_transition);projected_pos=u_label_plane_matrix*vec4(proj_pos,1.0);
#else
projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,h.z,1.0);
#endif
highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);float z=0.0;vec2 offset=rotation_matrix*(a_offset/32.0*max(a_min_font_scale,font_scale)+a_pxoffset/16.0);
#ifdef TERRAIN
#ifdef PITCH_WITH_MAP_TERRAIN
vec4 tile_pos=u_label_plane_matrix_inv*vec4(a_projected_pos.xy+offset,0.0,1.0);z=elevation(tile_pos.xy);
#endif
#endif
#ifdef Z_OFFSET
z+=u_pitch_with_map ? a_auto_z_offset+(u_elevation_from_sea ? z_offset : z_offset) : 0.0;
#else
z+=u_pitch_with_map ? (u_elevation_from_sea ? z_offset : z_offset) : 0.0;
#endif
float occlusion_fade=globe_occlusion_fade;float projection_transition_fade=1.0;
#if defined(PROJECTED_POS_ON_VIEWPORT) && defined(PROJECTION_GLOBE_VIEW)
projection_transition_fade=1.0-step(EPSILON,u_zoom_transition);
#endif
vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(occlusion_fade,fade_opacity[0]+fade_change));float out_fade_opacity=interpolated_fade_opacity*projection_transition_fade;
#ifdef DEPTH_OCCLUSION
float depth_occlusion=occlusionFadeMultiSample(projected_point);float depth_occlusion_multplier=mix(occlusion_opacity,1.0,depth_occlusion);out_fade_opacity*=depth_occlusion_multplier;
#endif
#ifdef OCCLUSION_QUERIES
float occludedFadeMultiplier=mix(occlusion_opacity,1.0,a_occlusion_query_opacity);out_fade_opacity*=occludedFadeMultiplier;
#endif
float alpha=opacity*out_fade_opacity;float hidden=float(alpha==0.0 || projected_point.w <=0.0 || occlusion_fade==0.0);
#ifdef PROJECTION_GLOBE_VIEW
vec3 xAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,u_up_vector)) : vec3(1,0,0);vec3 yAxis=u_pitch_with_map ? normalize(cross(a_globe_normal,xAxis)) : vec3(0,1,0);gl_Position=mix(u_coord_matrix*vec4(projected_pos.xyz/projected_pos.w+xAxis*offset.x+yAxis*offset.y,1.0),AWAY,hidden);
#else
gl_Position=mix(u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+offset,z,1.0),AWAY,hidden);
#endif
float gamma_scale=gl_Position.w;v_draw_halo=(u_is_halo && float(gl_InstanceID)==0.0) ? 1.0 : 0.0;v_gamma_scale_size_fade_opacity=vec3(gamma_scale,size,out_fade_opacity);v_tex_a=a_tex/u_texsize;
#ifdef RENDER_TEXT_AND_SYMBOL
is_sdf=a_size[0]-2.0*a_size_min;v_tex_a_icon=a_tex/u_texsize_icon;
#endif
#ifdef ICON_TRANSITION
v_tex_b=a_texb/u_texsize;
#endif
#ifdef INDICATOR_CUTOUT
v_z_offset=e;
#endif
}`), terrainRaster: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_shadow.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform sampler2D u_image0;in vec2 v_pos0;
#ifdef FOG
in float v_fog_opacity;
#endif
#ifdef RENDER_SHADOWS
in vec4 v_pos_light_view_0;in vec4 v_pos_light_view_1;
#endif
uniform vec3 u_ground_shadow_factor;void main() {vec4 image_color=texture(u_image0,v_pos0);vec4 color;
#ifdef LIGHTING_3D_MODE
const vec3 normal=vec3(0.0,0.0,1.0);
#ifdef RENDER_SHADOWS
float cutoffOpacity=1.0;
#ifdef RENDER_CUTOFF
cutoffOpacity=cutoff_opacity(u_cutoff_params,1.0/gl_FragCoord.w);
#endif
#ifdef LIGHTING_3D_ALPHA_EMISSIVENESS
vec3 unlit_base=image_color.rgb*(1.0-image_color.a);vec3 emissive_base=image_color.rgb*image_color.a;float ndotl=u_shadow_direction.z;float occlusion=ndotl < 0.0 ? 1.0 : shadow_occlusion(v_pos_light_view_0,v_pos_light_view_1,1.0/gl_FragCoord.w,0.0);ndotl=max(0.0,ndotl);vec3 lit=apply_lighting(unlit_base,normal,mix(1.0,(1.0-(u_shadow_intensity*occlusion))*ndotl,cutoffOpacity));vec3 emissive=compute_emissive_draped(emissive_base,1.0-u_shadow_intensity,occlusion,u_ground_shadow_factor);color.rgb=lit+emissive;color.a=1.0;
#else
float lighting_factor=shadowed_light_factor_normal_unbiased(normal,v_pos_light_view_0,v_pos_light_view_1,1.0/gl_FragCoord.w);color=apply_lighting(image_color,normal,mix(1.0,lighting_factor,cutoffOpacity));
#endif
#else
float lighting_factor=u_lighting_directional_dir.z;color=apply_lighting(image_color,normal,lighting_factor);
#ifdef LIGHTING_3D_ALPHA_EMISSIVENESS
color.rgb=mix(color.rgb,image_color.rgb,image_color.a);color.a=1.0;
#endif
#endif
#else
color=image_color;
#endif
#ifdef FOG
#ifdef ZERO_EXAGGERATION
color=fog_dither(fog_apply_premultiplied(color,v_fog_pos));
#else
color=fog_dither(fog_apply_from_vert(color,v_fog_opacity));
#endif
#endif
glFragColor=color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
uniform mat4 u_matrix;uniform float u_skirt_height;in vec2 a_pos;out vec2 v_pos0;
#ifdef FOG
out float v_fog_opacity;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out vec4 v_pos_light_view_0;out vec4 v_pos_light_view_1;out float v_depth;
#endif
void main() {vec3 decomposedPosAndSkirt=decomposeToPosAndSkirt(a_pos);float skirt=decomposedPosAndSkirt.z;vec2 decodedPos=decomposedPosAndSkirt.xy;float elevation=elevation(decodedPos)-skirt*u_skirt_height;v_pos0=decodedPos/8192.0;gl_Position=u_matrix*vec4(decodedPos,elevation,1.0);
#ifdef FOG
#ifdef ZERO_EXAGGERATION
v_fog_pos=fog_position(decodedPos);
#else
v_fog_opacity=fog(fog_position(vec3(decodedPos,elevation)));
#endif
#endif
#ifdef RENDER_SHADOWS
vec3 pos=vec3(decodedPos,elevation);v_pos_light_view_0=u_light_matrix_0*vec4(pos,1.);v_pos_light_view_1=u_light_matrix_1*vec4(pos,1.);
#endif
}`), terrainDepth: Ti("precision highp float;in float v_depth;void main() {glFragColor=pack_depth(v_depth);}", `#include "_prelude_terrain.vertex.glsl"
uniform mat4 u_matrix;in vec2 a_pos;out float v_depth;void main() {float elevation=elevation(a_pos);gl_Position=u_matrix*vec4(a_pos,elevation,1.0);v_depth=gl_Position.z/gl_Position.w;}`), skybox: Ti(`#include "_prelude_fog.fragment.glsl"
in lowp vec3 v_uv;uniform lowp samplerCube u_cubemap;uniform lowp float u_opacity;uniform highp float u_temporal_offset;uniform highp vec3 u_sun_direction;float sun_disk(highp vec3 ray_direction,highp vec3 sun_direction) {highp float cos_angle=dot(normalize(ray_direction),sun_direction);const highp float cos_sun_angular_diameter=0.99996192306;const highp float smoothstep_delta=1e-5;return smoothstep(
cos_sun_angular_diameter-smoothstep_delta,cos_sun_angular_diameter+smoothstep_delta,cos_angle);}float map(float value,float start,float end,float new_start,float new_end) {return ((value-start)*(new_end-new_start))/(end-start)+new_start;}void main() {vec3 uv=v_uv;const float y_bias=0.015;uv.y+=y_bias;uv.y=pow(abs(uv.y),1.0/5.0);uv.y=map(uv.y,0.0,1.0,-1.0,1.0);vec3 sky_color=texture(u_cubemap,uv).rgb;
#ifdef FOG
sky_color=fog_apply_sky_gradient(v_uv.xzy,sky_color);
#endif
sky_color.rgb=dither(sky_color.rgb,gl_FragCoord.xy+u_temporal_offset);sky_color+=0.1*sun_disk(v_uv,u_sun_direction);glFragColor=vec4(sky_color*u_opacity,u_opacity);
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
}`, Ko), skyboxGradient: Ti(`#include "_prelude_fog.fragment.glsl"
in highp vec3 v_uv;uniform lowp sampler2D u_color_ramp;uniform highp vec3 u_center_direction;uniform lowp float u_radius;uniform lowp float u_opacity;uniform highp float u_temporal_offset;void main() {float progress=acos(dot(normalize(v_uv),u_center_direction))/u_radius;vec4 color=texture(u_color_ramp,vec2(progress,0.5));
#ifdef FOG
color.rgb=fog_apply_sky_gradient(v_uv.xzy,color.rgb/color.a)*color.a;
#endif
color*=u_opacity;color.rgb=dither(color.rgb,gl_FragCoord.xy+u_temporal_offset);glFragColor=color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
}`, Ko), skyboxCapture: Ti(`
in highp vec3 v_position;uniform highp float u_sun_intensity;uniform highp float u_luminance;uniform lowp vec3 u_sun_direction;uniform highp vec4 u_color_tint_r;uniform highp vec4 u_color_tint_m;precision highp float;
#define BETA_R                  vec3(5.5e-6,13.0e-6,22.4e-6)
#define BETA_M                  vec3(21e-6,21e-6,21e-6)
#define MIE_G                   0.76
#define DENSITY_HEIGHT_SCALE_R  8000.0
#define DENSITY_HEIGHT_SCALE_M  1200.0
#define PLANET_RADIUS           6360e3
#define ATMOSPHERE_RADIUS       6420e3
#define SAMPLE_STEPS            10
#define DENSITY_STEPS           4
float ray_sphere_exit(vec3 orig,vec3 dir,float radius) {float a=dot(dir,dir);float b=2.0*dot(dir,orig);float c=dot(orig,orig)-radius*radius;float d=sqrt(b*b-4.0*a*c);return (-b+d)/(2.0*a);}vec3 extinction(vec2 density) {return exp(-vec3(BETA_R*u_color_tint_r.a*density.x+BETA_M*u_color_tint_m.a*density.y));}vec2 local_density(vec3 point) {float height=max(length(point)-PLANET_RADIUS,0.0);float exp_r=exp(-height/DENSITY_HEIGHT_SCALE_R);float exp_m=exp(-height/DENSITY_HEIGHT_SCALE_M);return vec2(exp_r,exp_m);}float phase_ray(float cos_angle) {return (3.0/(16.0*PI))*(1.0+cos_angle*cos_angle);}float phase_mie(float cos_angle) {return (3.0/(8.0*PI))*((1.0-MIE_G*MIE_G)*(1.0+cos_angle*cos_angle))/((2.0+MIE_G*MIE_G)*pow(1.0+MIE_G*MIE_G-2.0*MIE_G*cos_angle,1.5));}vec2 density_to_atmosphere(vec3 point,vec3 light_dir) {float ray_len=ray_sphere_exit(point,light_dir,ATMOSPHERE_RADIUS);float step_len=ray_len/float(DENSITY_STEPS);vec2 density_point_to_atmosphere=vec2(0.0);for (int i=0; i < DENSITY_STEPS;++i) {vec3 point_on_ray=point+light_dir*((float(i)+0.5)*step_len);density_point_to_atmosphere+=local_density(point_on_ray)*step_len;;}return density_point_to_atmosphere;}vec3 atmosphere(vec3 ray_dir,vec3 sun_direction,float sun_intensity) {vec2 density_orig_to_point=vec2(0.0);vec3 scatter_r=vec3(0.0);vec3 scatter_m=vec3(0.0);vec3 origin=vec3(0.0,PLANET_RADIUS,0.0);float ray_len=ray_sphere_exit(origin,ray_dir,ATMOSPHERE_RADIUS);float step_len=ray_len/float(SAMPLE_STEPS);for (int i=0; i < SAMPLE_STEPS;++i) {vec3 point_on_ray=origin+ray_dir*((float(i)+0.5)*step_len);vec2 density=local_density(point_on_ray)*step_len;density_orig_to_point+=density;vec2 density_point_to_atmosphere=density_to_atmosphere(point_on_ray,sun_direction);vec2 density_orig_to_atmosphere=density_orig_to_point+density_point_to_atmosphere;vec3 extinction=extinction(density_orig_to_atmosphere);scatter_r+=density.x*extinction;scatter_m+=density.y*extinction;}float cos_angle=dot(ray_dir,sun_direction);float phase_r=phase_ray(cos_angle);float phase_m=phase_mie(cos_angle);vec3 beta_r=BETA_R*u_color_tint_r.rgb*u_color_tint_r.a;vec3 beta_m=BETA_M*u_color_tint_m.rgb*u_color_tint_m.a;return (scatter_r*phase_r*beta_r+scatter_m*phase_m*beta_m)*sun_intensity;}const float A=0.15;const float B=0.50;const float C=0.10;const float D=0.20;const float E=0.02;const float F=0.30;vec3 uncharted2_tonemap(vec3 x) {return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;}void main() {vec3 ray_direction=v_position;ray_direction.y=pow(ray_direction.y,5.0);const float y_bias=0.015;ray_direction.y+=y_bias;vec3 color=atmosphere(normalize(ray_direction),u_sun_direction,u_sun_intensity);float white_scale=1.0748724675633854;color=uncharted2_tonemap((log2(2.0/pow(u_luminance,4.0)))*color)*white_scale;glFragColor=vec4(color,1.0);}`, "in highp vec3 a_pos_3f;uniform mat3 u_matrix_3f;out highp vec3 v_position;float map(float value,float start,float end,float new_start,float new_end) {return ((value-start)*(new_end-new_start))/(end-start)+new_start;}void main() {vec4 pos=vec4(u_matrix_3f*a_pos_3f,1.0);v_position=pos.xyz;v_position.y*=-1.0;v_position.y=map(v_position.y,-1.0,1.0,0.0,1.0);gl_Position=vec4(a_pos_3f.xy,0.0,1.0);}"), globeRaster: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform sampler2D u_image0;uniform float u_far_z_cutoff;in vec2 v_pos0;
#ifndef FOG
uniform highp vec3 u_frustum_tl;uniform highp vec3 u_frustum_tr;uniform highp vec3 u_frustum_br;uniform highp vec3 u_frustum_bl;uniform highp vec3 u_globe_pos;uniform highp float u_globe_radius;uniform vec2 u_viewport;
#endif
void main() {vec4 color;
#ifdef CUSTOM_ANTIALIASING
vec2 uv=gl_FragCoord.xy/u_viewport;highp vec3 ray_dir=mix(
mix(u_frustum_tl,u_frustum_tr,uv.x),mix(u_frustum_bl,u_frustum_br,uv.x),1.0-uv.y);vec3 dir=normalize(ray_dir);vec3 closest_point=dot(u_globe_pos,dir)*dir;float norm_dist_from_center=1.0-length(closest_point-u_globe_pos)/u_globe_radius;const float antialias_pixel=2.0;float antialias_factor=antialias_pixel*fwidth(norm_dist_from_center);float antialias=smoothstep(0.0,antialias_factor,norm_dist_from_center);vec4 raster=texture(u_image0,v_pos0);
#ifdef LIGHTING_3D_MODE
#ifdef LIGHTING_3D_ALPHA_EMISSIVENESS
raster=apply_lighting_with_emission_ground(raster,raster.a);color=vec4(raster.rgb*antialias,antialias);
#else
raster=apply_lighting_ground(raster);color=vec4(raster.rgb*antialias,raster.a*antialias);
#endif
#else
color=vec4(raster.rgb*antialias,raster.a*antialias);
#endif
#else
color=texture(u_image0,v_pos0);
#ifdef LIGHTING_3D_MODE
#ifdef LIGHTING_3D_ALPHA_EMISSIVENESS
color=apply_lighting_with_emission_ground(color,color.a);color.a=1.0;
#else
color=apply_lighting_ground(color);
#endif
#endif
#endif
#ifdef FOG
color=fog_dither(fog_apply_premultiplied(color,v_fog_pos));
#endif
color*=1.0-step(u_far_z_cutoff,1.0/gl_FragCoord.w);glFragColor=color;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_terrain.vertex.glsl"
uniform mat4 u_proj_matrix;uniform mat4 u_normalize_matrix;uniform mat4 u_globe_matrix;uniform mat4 u_merc_matrix;uniform float u_zoom_transition;uniform vec2 u_merc_center;uniform mat3 u_grid_matrix;uniform float u_skirt_height;
#ifdef GLOBE_POLES
in vec3 a_globe_pos;in vec2 a_uv;
#else
in vec2 a_pos;
#endif
out vec2 v_pos0;void main() {
#ifdef GLOBE_POLES
vec3 globe_pos=a_globe_pos;vec2 uv=a_uv;
#else
float tiles=u_grid_matrix[0][2];float idx=u_grid_matrix[1][2];float idy=u_grid_matrix[2][2];vec3 decomposed_pos_and_skirt=decomposeToPosAndSkirt(a_pos);vec3 latLng=u_grid_matrix*vec3(decomposed_pos_and_skirt.xy,1.0);float mercatorY=mercatorYfromLat(latLng[0]);float uvY=mercatorY*tiles-idy;float mercatorX=mercatorXfromLng(latLng[1]);float uvX=mercatorX*tiles-idx;vec3 globe_pos=latLngToECEF(latLng.xy);vec2 merc_pos=vec2(mercatorX,mercatorY);vec2 uv=vec2(uvX,uvY);
#endif
v_pos0=uv;vec2 tile_pos=uv*EXTENT;vec3 globe_derived_up_vector=normalize(globe_pos)*u_tile_up_scale;
#ifdef GLOBE_POLES
vec3 up_vector=globe_derived_up_vector;
#else
vec3 up_vector=elevationVector(tile_pos);
#endif
float height=elevation(tile_pos);globe_pos+=up_vector*height;
#ifndef GLOBE_POLES
globe_pos-=globe_derived_up_vector*u_skirt_height*decomposed_pos_and_skirt.z;
#endif
#ifdef GLOBE_POLES
vec4 interpolated_pos=u_globe_matrix*vec4(globe_pos,1.0);
#else
vec4 globe_world_pos=u_globe_matrix*vec4(globe_pos,1.0);vec4 merc_world_pos=vec4(0.0);if (u_zoom_transition > 0.0) {merc_world_pos=vec4(merc_pos,height-u_skirt_height*decomposed_pos_and_skirt.z,1.0);merc_world_pos.xy-=u_merc_center;merc_world_pos.x=wrap(merc_world_pos.x,-0.5,0.5);merc_world_pos=u_merc_matrix*merc_world_pos;}vec4 interpolated_pos=vec4(mix(globe_world_pos.xyz,merc_world_pos.xyz,u_zoom_transition),1.0);
#endif
gl_Position=u_proj_matrix*interpolated_pos;
#ifdef FOG
v_fog_pos=fog_position((u_normalize_matrix*vec4(globe_pos,1.0)).xyz);
#endif
}`), globeAtmosphere: Ti(`#include "_prelude_fog.fragment.glsl"
uniform float u_transition;uniform highp float u_fadeout_range;uniform highp float u_temporal_offset;uniform vec4 u_color;uniform vec4 u_high_color;uniform vec4 u_space_color;uniform float u_horizon_angle;in highp vec3 v_ray_dir;in highp vec3 v_horizon_dir;void main() {highp vec3 dir=normalize(v_ray_dir);float globe_pos_dot_dir;
#ifdef PROJECTION_GLOBE_VIEW
globe_pos_dot_dir=dot(u_globe_pos,dir);highp vec3 closest_point_forward=abs(globe_pos_dot_dir)*dir;float norm_dist_from_center=length(closest_point_forward-u_globe_pos)/u_globe_radius;if (norm_dist_from_center < 0.98) {
#ifdef ALPHA_PASS
glFragColor=vec4(0,0,0,0);return;
#else
#ifdef NATIVE
glFragColor=vec4(1,1,1,1);
#else
glFragColor=vec4(0,0,0,1);
#endif
return;
#endif
}
#endif
highp vec3 horizon_dir=normalize(v_horizon_dir);float horizon_angle_mercator=dir.y < horizon_dir.y ?
0.0 : max(acos(clamp(dot(dir,horizon_dir),-1.0,1.0)),0.0);float horizon_angle;
#ifdef PROJECTION_GLOBE_VIEW
highp vec3 closest_point=globe_pos_dot_dir*dir;highp float closest_point_to_center=length(closest_point-u_globe_pos);highp float theta=asin(clamp(closest_point_to_center/length(u_globe_pos),-1.0,1.0));horizon_angle=globe_pos_dot_dir < 0.0 ?
PI-theta-u_horizon_angle : theta-u_horizon_angle;float angle_t=pow(u_transition,10.0);horizon_angle=mix(horizon_angle,horizon_angle_mercator,angle_t);
#else
horizon_angle=horizon_angle_mercator;
#endif
horizon_angle/=PI;float t=exp(-horizon_angle/u_fadeout_range);float alpha_0=u_color.a;float alpha_1=u_high_color.a;float alpha_2=u_space_color.a;vec3 color_stop_0=u_color.rgb;vec3 color_stop_1=u_high_color.rgb;vec3 color_stop_2=u_space_color.rgb;
#ifdef ALPHA_PASS
float a0=mix(alpha_2,1.0,alpha_1);float a1=mix(a0,1.0,alpha_0);float a2=mix(a0,a1,t);float a =mix(alpha_2,a2,t);glFragColor=vec4(1.0,1.0,1.0,a);
#else
vec3 c0=mix(color_stop_2,color_stop_1,alpha_1);vec3 c1=mix(c0,color_stop_0,alpha_0);vec3 c2=mix(c0,c1,t);vec3 c=c2;
#ifndef NATIVE
c=dither(c,gl_FragCoord.xy+u_temporal_offset);
#endif
glFragColor=vec4(c*t,t);
#endif
}`, `in vec3 a_pos;in vec2 a_uv;uniform vec3 u_frustum_tl;uniform vec3 u_frustum_tr;uniform vec3 u_frustum_br;uniform vec3 u_frustum_bl;uniform float u_horizon;out highp vec3 v_ray_dir;out highp vec3 v_horizon_dir;void main() {v_ray_dir=mix(
mix(u_frustum_tl,u_frustum_tr,a_uv.x),mix(u_frustum_bl,u_frustum_br,a_uv.x),a_uv.y);v_horizon_dir=mix(
mix(u_frustum_tl,u_frustum_bl,u_horizon),mix(u_frustum_tr,u_frustum_br,u_horizon),a_uv.x);gl_Position=vec4(a_pos,1.0);}`), model: Ti(`#include "_prelude_fog.fragment.glsl"
#include "_prelude_shadow.fragment.glsl"
#include "_prelude_lighting.glsl"
uniform float u_opacity;uniform vec3 u_lightcolor;uniform vec3 u_lightpos;uniform float u_lightintensity;uniform vec4 u_baseColorFactor;uniform vec4 u_emissiveFactor;uniform float u_metallicFactor;uniform float u_roughnessFactor;uniform float u_emissive_strength;in highp vec4 v_position_height;in lowp vec4 v_color_mix;
#ifdef RENDER_SHADOWS
in highp vec4 v_pos_light_view_0;in highp vec4 v_pos_light_view_1;in float v_depth_shadows;
#endif
#ifdef OCCLUSION_TEXTURE_TRANSFORM
uniform vec4 u_occlusionTextureTransform;
#endif
#pragma mapbox: define-attribute highp vec3 normal_3f
#pragma mapbox: define-attribute highp vec3 color_3f
#pragma mapbox: define-attribute highp vec4 color_4f
#pragma mapbox: define-attribute highp vec2 uv_2f
#pragma mapbox: initialize-attribute highp vec3 normal_3f
#pragma mapbox: initialize-attribute highp vec3 color_3f
#pragma mapbox: initialize-attribute highp vec4 color_4f
#pragma mapbox: initialize-attribute highp vec2 uv_2f
#ifdef HAS_ATTRIBUTE_a_pbr
in lowp vec4 v_roughness_metallic_emissive_alpha;in mediump vec4 v_height_based_emission_params;
#endif
#ifdef HAS_TEXTURE_u_baseColorTexture
uniform sampler2D u_baseColorTexture;uniform bool u_baseTextureIsAlpha;uniform bool u_alphaMask;uniform float u_alphaCutoff;
#endif
#ifdef HAS_TEXTURE_u_metallicRoughnessTexture
uniform sampler2D u_metallicRoughnessTexture;
#endif
#ifdef HAS_TEXTURE_u_occlusionTexture
uniform sampler2D u_occlusionTexture;uniform float u_aoIntensity;
#endif
#ifdef HAS_TEXTURE_u_normalTexture
uniform sampler2D u_normalTexture;
#endif
#ifdef HAS_TEXTURE_u_emissionTexture
uniform sampler2D u_emissionTexture;
#endif
#ifdef APPLY_LUT_ON_GPU
uniform highp sampler3D u_lutTexture;
#endif
#ifdef TERRAIN_FRAGMENT_OCCLUSION
in highp float v_depth;uniform highp sampler2D u_depthTexture;uniform highp vec2 u_inv_depth_size;uniform highp vec2 u_depth_range_unpack;
#ifdef DEPTH_D24
highp float unpack_depth(highp float depth) {return  depth*u_depth_range_unpack.x+u_depth_range_unpack.y;}
#else
highp float unpack_depth_rgba(highp vec4 rgba_depth)
{const highp vec4 bit_shift=vec4(1.0/(255.0*255.0*255.0),1.0/(255.0*255.0),1.0/255.0,1.0);return dot(rgba_depth,bit_shift)*2.0-1.0;}
#endif
bool isOccluded() {highp vec2 coord=gl_FragCoord.xy*u_inv_depth_size;
#ifdef DEPTH_D24
highp float depth=unpack_depth(texture(u_depthTexture,coord).r);
#else
highp float depth=unpack_depth_rgba(texture(u_depthTexture,coord));
#endif
return v_depth > depth+0.0005;}
#endif
#define saturate(_x) clamp(_x,0.,1.)
vec3 linearTosRGB(vec3 color) {return pow(color,vec3(1./2.2));}vec3 sRGBToLinear(vec3 srgbIn) {return pow(srgbIn,vec3(2.2));}float calculate_NdotL(vec3 normal,vec3 lightDir) {const float ext=0.70710678118;return (clamp(dot(normal,lightDir),-ext,1.0)+ext)/(1.0+ext);}vec3 getDiffuseShadedColor(vec3 albedo,vec3 normal,vec3 lightDir,vec3 lightColor)
{
#ifdef LIGHTING_3D_MODE
vec3 transformed_normal=vec3(-normal.xy,normal.z);float lighting_factor;
#ifdef RENDER_SHADOWS
lighting_factor=shadowed_light_factor_normal(transformed_normal,v_pos_light_view_0,v_pos_light_view_1,v_depth_shadows);
#else
lighting_factor=saturate(dot(transformed_normal,u_lighting_directional_dir));
#endif
return apply_lighting(albedo,transformed_normal,lighting_factor);
#else
vec3 n=normal;float colorvalue=((albedo.x*0.2126)+(albedo.y*0.7152))+(albedo.z*0.0722);vec3 c=vec3(0.03,0.03,0.03);float directional=clamp(dot(n,vec3(lightDir)),0.0,1.0);directional=mix(1.0-u_lightintensity,max((1.0-colorvalue)+u_lightintensity,1.0),directional);vec3 c3=c+clamp((albedo*directional)*lightColor,mix(vec3(0.0),vec3(0.3),vec3(1.0)-lightColor),vec3(1.0));return c3;
#endif
}vec4 getBaseColor() {vec4 albedo=u_baseColorFactor;
#ifdef HAS_ATTRIBUTE_a_color_3f
albedo*=vec4(color_3f,1.0);
#endif
#ifdef HAS_ATTRIBUTE_a_pbr
#else
#ifdef HAS_ATTRIBUTE_a_color_4f
albedo*=color_4f;
#endif
#endif
#if defined (HAS_TEXTURE_u_baseColorTexture) && defined (HAS_ATTRIBUTE_a_uv_2f)
vec4 texColor=texture(u_baseColorTexture,uv_2f);if(u_alphaMask) {if (texColor.w < u_alphaCutoff) {discard;}}
#ifdef UNPREMULT_TEXTURE_IN_SHADER
if(texColor.w > 0.0) {texColor.rgb/=texColor.w;}texColor.w=1.0;
#endif
if(u_baseTextureIsAlpha) {if (texColor.r < 0.5) {discard;}} else {texColor.rgb=sRGBToLinear(texColor.rgb);albedo*=texColor;}
#endif
vec4 color=vec4(mix(albedo.rgb,v_color_mix.rgb,v_color_mix.a),albedo.a);
#ifdef APPLY_LUT_ON_GPU
color=applyLUT(u_lutTexture,color);
#endif
return color;}highp mat3 cotangentFrame(highp vec3 N,highp vec3 p,highp vec2 uv ) {
#ifdef HAS_TEXTURE_u_normalTexture
highp vec3 dp1=vec3(dFdx(p.x),dFdx(p.y),dFdx(p.z));highp vec3 dp2=vec3(dFdy(p.x),dFdy(p.y),dFdy(p.z));highp vec2 duv1=vec2(dFdx(uv.x),dFdx(uv.y));highp vec2 duv2=vec2(dFdy(uv.x),dFdy(uv.y));highp vec3 dp2perp=cross( dp2,N );highp vec3 dp1perp=cross( N,dp1 );highp vec3 T=dp2perp*duv1.x+dp1perp*duv2.x;highp vec3 B=dp2perp*duv1.y+dp1perp*duv2.y;highp float lengthT=dot(T,T);highp float lengthB=dot(B,B);highp float maxLength=max(lengthT,lengthB);highp float invmax=inversesqrt( maxLength );highp mat3 res=mat3( T*invmax,B*invmax,N );return res;
#else
return mat3(1.0);
#endif
}highp vec3 getNormal(){highp vec3 n;
#ifdef HAS_ATTRIBUTE_a_normal_3f
n=normalize(normal_3f);
#else
highp vec3 fdx=vec3(dFdx(v_position_height.x),dFdx(v_position_height.y),dFdx(v_position_height.z));highp vec3 fdy=vec3(dFdy(v_position_height.x),dFdy(v_position_height.y),dFdy(v_position_height.z));n=normalize(cross(fdx,fdy))*-1.0;
#endif
#if defined(HAS_TEXTURE_u_normalTexture) && defined(HAS_ATTRIBUTE_a_uv_2f)
vec3 nMap=texture( u_normalTexture,uv_2f).xyz;nMap=normalize(2.0*nMap-vec3(1.0));highp vec3 v=normalize(-v_position_height.xyz);highp mat3 TBN=cotangentFrame(n,v,uv_2f);n=normalize(TBN*nMap);
#endif
return n;}struct Material {float perceptualRoughness;float alphaRoughness;float metallic;vec3 f90;vec4 baseColor;vec3 diffuseColor;vec3 specularColor;highp vec3 normal;};Material getPBRMaterial() {Material mat;mat.baseColor=getBaseColor();mat.perceptualRoughness=u_roughnessFactor;mat.metallic=u_metallicFactor;
#ifdef HAS_ATTRIBUTE_a_pbr
mat.perceptualRoughness=v_roughness_metallic_emissive_alpha.x;mat.metallic=v_roughness_metallic_emissive_alpha.y;mat.baseColor.w*=v_roughness_metallic_emissive_alpha.w;
#endif
#if defined(HAS_TEXTURE_u_metallicRoughnessTexture) && defined(HAS_ATTRIBUTE_a_uv_2f) 
vec4 mrSample=texture(u_metallicRoughnessTexture,uv_2f);mat.perceptualRoughness*=mrSample.g;mat.metallic*=mrSample.b;
#endif
const float c_minRoughness=0.04;mat.perceptualRoughness=clamp(mat.perceptualRoughness,c_minRoughness,1.0);mat.metallic=saturate(mat.metallic);mat.alphaRoughness=mat.perceptualRoughness*mat.perceptualRoughness;const vec3 f0=vec3(0.04);mat.diffuseColor=mat.baseColor.rgb*(vec3(1.0)-f0);mat.diffuseColor*=1.0-mat.metallic;mat.specularColor=mix(f0,mat.baseColor.rgb,mat.metallic);highp float reflectance=max(max(mat.specularColor.r,mat.specularColor.g),mat.specularColor.b);highp float reflectance90=saturate(reflectance*25.0);mat.f90=vec3(reflectance90);mat.normal=getNormal();return mat;}float V_GGX(float NdotL,float NdotV,float roughness)
{float a2=roughness*roughness;float GGXV=NdotL*sqrt(NdotV*NdotV*(1.0-a2)+a2);float GGXL=NdotV*sqrt(NdotL*NdotL*(1.0-a2)+a2);return 0.5/(GGXV+GGXL);}float V_GGXFast(float NdotL,float NdotV,float roughness) {float a=roughness;float GGXV=NdotL*(NdotV*(1.0-a)+a);float GGXL=NdotV*(NdotL*(1.0-a)+a);return 0.5/(GGXV+GGXL);}vec3 F_Schlick(vec3 specularColor,vec3 f90,float VdotH)
{return specularColor+(f90-specularColor)*pow(clamp(1.0-VdotH,0.0,1.0),5.0);}vec3 F_SchlickFast(vec3 specularColor,float VdotH)
{float x=1.0-VdotH;float x4=x*x*x*x;return specularColor+(1.0-specularColor)*x4*x;}float D_GGX(highp float NdotH,float alphaRoughness)
{highp float a4=alphaRoughness*alphaRoughness;highp float f=(NdotH*a4-NdotH)*NdotH+1.0;return a4/(PI*f*f);}vec3 diffuseBurley(Material mat,float LdotH,float NdotL,float NdotV)
{float f90=2.0*LdotH*LdotH*mat.alphaRoughness-0.5;return (mat.diffuseColor/PI)*(1.0+f90*pow((1.0-NdotL),5.0))*(1.0+f90*pow((1.0-NdotV),5.0));}vec3 diffuseLambertian(Material mat)
{
#ifdef LIGHTING_3D_MODE
return mat.diffuseColor;
#else
return mat.diffuseColor/PI;
#endif
}vec3 EnvBRDFApprox(vec3 specularColor,float roughness,highp float NdotV)
{vec4 c0=vec4(-1,-0.0275,-0.572,0.022);vec4 c1=vec4(1,0.0425,1.04,-0.04);highp vec4 r=roughness*c0+c1;highp float a004=min(r.x*r.x,exp2(-9.28*NdotV))*r.x+r.y;vec2 AB=vec2(-1.04,1.04)*a004+r.zw;return specularColor*AB.x+AB.y;}vec3 computeIndirectLightContribution(Material mat,float NdotV,vec3 normal)
{vec3 env_light=vec3(0.65,0.65,0.65);
#ifdef LIGHTING_3D_MODE
float ambient_factor=calculate_ambient_directional_factor(normal);env_light=u_lighting_ambient_color*ambient_factor;
#endif
vec3 envBRDF=EnvBRDFApprox(mat.specularColor,mat.perceptualRoughness,NdotV);vec3 indirectSpecular= envBRDF*env_light;vec3 indirectDiffuse=mat.diffuseColor*env_light;return indirectSpecular+indirectDiffuse;}vec3 computeLightContribution(Material mat,vec3 lightPosition,vec3 lightColor)
{highp vec3 n=mat.normal;highp vec3 v=normalize(-v_position_height.xyz);highp vec3 l=normalize(lightPosition);highp vec3 h=normalize(v+l);float NdotV=clamp(abs(dot(n,v)),0.001,1.0);float NdotL=saturate(dot(n,l));highp float NdotH=saturate(dot(n,h));float VdotH=saturate(dot(v,h));vec3 f=F_SchlickFast(mat.specularColor,VdotH);float g=V_GGXFast(NdotL,NdotV,mat.alphaRoughness);float d=D_GGX(NdotH,mat.alphaRoughness);vec3 diffuseTerm=(1.0-f)*diffuseLambertian(mat);vec3 specularTerm=f*g*d;vec3 transformed_normal=vec3(-n.xy,n.z);float lighting_factor;
#ifdef RENDER_SHADOWS
lighting_factor=shadowed_light_factor_normal(transformed_normal,v_pos_light_view_0,v_pos_light_view_1,v_depth_shadows);
#else
lighting_factor=NdotL;
#endif
vec3 directLightColor=(specularTerm+diffuseTerm)*lighting_factor*lightColor;vec3 indirectLightColor=computeIndirectLightContribution(mat,NdotV,transformed_normal);vec3 color=(saturate(directLightColor)+indirectLightColor);float intensityFactor=1.0;
#if !defined(LIGHTING_3D_MODE)
const vec3 luminosityFactor=vec3(0.2126,0.7152,0.0722);float luminance=dot(diffuseTerm,luminosityFactor);intensityFactor=mix((1.0-u_lightintensity),max((1.0-luminance+u_lightintensity),1.0),NdotL);
#endif
color*=intensityFactor;return color;}void main() {
#ifdef TERRAIN_FRAGMENT_OCCLUSION
if (isOccluded()) {discard;}
#endif
vec3 lightDir=u_lightpos;vec3 lightColor=u_lightcolor;
#ifdef LIGHTING_3D_MODE
lightDir=u_lighting_directional_dir;lightDir.xy=-lightDir.xy;lightColor=u_lighting_directional_color;
#endif
vec4 finalColor;
#ifdef DIFFUSE_SHADED
vec3 N=getNormal();vec3 baseColor=getBaseColor().rgb;vec3 diffuse=getDiffuseShadedColor(baseColor,N,lightDir,lightColor);
#ifdef HAS_TEXTURE_u_occlusionTexture
float ao=(texture(u_occlusionTexture,uv_2f).r-1.0)*u_aoIntensity+1.0;diffuse*=ao;
#endif
finalColor=vec4(mix(diffuse,baseColor,u_emissive_strength),1.0)*u_opacity;
#else
Material mat=getPBRMaterial();vec3 color=computeLightContribution(mat,lightDir,lightColor);float ao=1.0;
#if defined (HAS_TEXTURE_u_occlusionTexture) && defined(HAS_ATTRIBUTE_a_uv_2f)
#ifdef OCCLUSION_TEXTURE_TRANSFORM
vec2 uv=uv_2f.xy*u_occlusionTextureTransform.zw+u_occlusionTextureTransform.xy;
#else
vec2 uv=uv_2f;
#endif
ao=(texture(u_occlusionTexture,uv).x-1.0)*u_aoIntensity+1.0;color*=ao;
#endif
vec4 emissive=u_emissiveFactor;
#if defined(HAS_TEXTURE_u_emissionTexture) && defined(HAS_ATTRIBUTE_a_uv_2f)
emissive.rgb*=sRGBToLinear(texture(u_emissionTexture,uv_2f).rgb);
#endif
#ifdef APPLY_LUT_ON_GPU
float emissiveFactorLength=max(length(u_emissiveFactor.rgb),0.001);emissive.rgb=sRGBToLinear(applyLUT(u_lutTexture,linearTosRGB(emissive.rgb/emissiveFactorLength).rbg))*emissiveFactorLength;
#endif
color+=emissive.rgb;float opacity=mat.baseColor.w*u_opacity;
#ifdef HAS_ATTRIBUTE_a_pbr
float resEmission=v_roughness_metallic_emissive_alpha.z;resEmission*=v_height_based_emission_params.z+v_height_based_emission_params.w*pow(clamp(v_height_based_emission_params.x,0.0,1.0),v_height_based_emission_params.y);vec3 color_mix=v_color_mix.rgb;
#ifdef APPLY_LUT_ON_GPU
color_mix=applyLUT(u_lutTexture,color_mix);
#endif
color=mix(color,color_mix,min(1.0,resEmission));
#ifdef HAS_ATTRIBUTE_a_color_4f
float distance=length(vec2(1.3*max(0.0,abs(color_4f.x)-color_4f.z),color_4f.y));distance+= mix(0.5,0.0,clamp(resEmission-1.0,0.0,1.0));opacity*=v_roughness_metallic_emissive_alpha.w*saturate(1.0-distance*distance);
#endif
#endif
vec3 unlitColor=mat.baseColor.rgb*ao+emissive.rgb;color=mix(color,unlitColor,u_emissive_strength);color=linearTosRGB(color);color*=opacity;finalColor=vec4(color,opacity);
#endif
#ifdef FOG
finalColor=fog_dither(fog_apply_premultiplied(finalColor,v_fog_pos,v_position_height.w));
#endif
#ifdef RENDER_CUTOFF
finalColor*=v_cutoff_opacity;
#endif
#ifdef INDICATOR_CUTOUT
finalColor=applyCutout(finalColor,v_position_height.w);
#endif
glFragColor=finalColor;
#ifdef OVERDRAW_INSPECTOR
glFragColor=vec4(1.0);
#endif
HANDLE_WIREFRAME_DEBUG;}`, `#include "_prelude_fog.vertex.glsl"
#include "_prelude_shadow.vertex.glsl"
in vec3 a_pos_3f;
#pragma mapbox: define-attribute highp vec3 normal_3f
#pragma mapbox: define-attribute highp vec2 uv_2f
#pragma mapbox: define-attribute highp vec3 color_3f
#pragma mapbox: define-attribute highp vec4 color_4f
#pragma mapbox: define-attribute-vertex-shader-only highp vec4 pbr
#pragma mapbox: define-attribute-vertex-shader-only highp vec3 heightBasedEmissiveStrength
uniform mat4 u_matrix;uniform mat4 u_node_matrix;uniform mat4 u_lighting_matrix;uniform vec3 u_camera_pos;uniform vec4 u_color_mix;
#ifdef INSTANCED_ARRAYS
in vec4 a_normal_matrix0;in vec4 a_normal_matrix1;in vec4 a_normal_matrix2;in vec4 a_normal_matrix3;
#else
uniform highp mat4 u_normal_matrix;
#endif
#ifdef RENDER_SHADOWS
uniform mat4 u_light_matrix_0;uniform mat4 u_light_matrix_1;out highp vec4 v_pos_light_view_0;out highp vec4 v_pos_light_view_1;out float v_depth_shadows;
#endif
out vec4 v_position_height;out lowp vec4 v_color_mix;
#ifdef TERRAIN_FRAGMENT_OCCLUSION
out highp float v_depth;
#endif
#ifdef HAS_ATTRIBUTE_a_pbr
out lowp vec4 v_roughness_metallic_emissive_alpha;out mediump vec4 v_height_based_emission_params;
#endif
vec3 sRGBToLinear(vec3 srgbIn) {return pow(srgbIn,vec3(2.2));}void main() {
#pragma mapbox: initialize-attribute highp vec3 normal_3f
#pragma mapbox: initialize-attribute highp vec2 uv_2f
#pragma mapbox: initialize-attribute highp vec3 color_3f
#pragma mapbox: initialize-attribute highp vec4 color_4f
#pragma mapbox: initialize-attribute-custom highp vec4 pbr
#pragma mapbox: initialize-attribute-custom highp vec3 heightBasedEmissiveStrength
highp mat4 normal_matrix;
#ifdef INSTANCED_ARRAYS
normal_matrix=mat4(a_normal_matrix0,a_normal_matrix1,a_normal_matrix2,a_normal_matrix3);
#else
normal_matrix=u_normal_matrix;
#endif
vec3 local_pos;mat3 rs;
#ifdef MODEL_POSITION_ON_GPU
vec3 pos_color=normal_matrix[0].xyz;vec4 translate=normal_matrix[1];vec3 pos_a=floor(pos_color);vec3 rgb=1.05*(pos_color-pos_a);float hidden=float(pos_a.x > EXTENT);float color_mix=pos_a.z/100.0;v_color_mix=vec4(sRGBToLinear(rgb),color_mix);float meter_to_tile=normal_matrix[0].w;vec4 pos=vec4(pos_a.xy,translate.z,1.0);rs[0].x=normal_matrix[1].w;rs[0].yz=normal_matrix[2].xy;rs[1].xy=normal_matrix[2].zw;rs[1].z=normal_matrix[3].x;rs[2].xyz=normal_matrix[3].yzw;vec4 pos_node=u_lighting_matrix*vec4(a_pos_3f,1.0);vec3 rotated_pos_node=rs*pos_node.xyz;vec3 pos_model_tile=(rotated_pos_node+vec3(translate.xy,0.0))*vec3(meter_to_tile,meter_to_tile,1.0);pos.xyz+=pos_model_tile;local_pos=pos.xyz;gl_Position=mix(u_matrix*pos,AWAY,hidden);pos.z*=meter_to_tile;v_position_height.xyz=pos.xyz-u_camera_pos;
#else
local_pos=a_pos_3f;gl_Position=u_matrix*vec4(a_pos_3f,1);v_position_height.xyz=vec3(u_lighting_matrix*vec4(a_pos_3f,1));v_color_mix=vec4(sRGBToLinear(u_color_mix.rgb),u_color_mix.a);
#endif
v_position_height.w=a_pos_3f.z;
#ifdef HAS_ATTRIBUTE_a_pbr
vec4 albedo_c=decode_color(pbr.xy);vec2 e_r_m=unpack_float(pbr.z);vec2 r_m= unpack_float(e_r_m.y*16.0);r_m.r=r_m.r*16.0;v_color_mix=vec4(albedo_c.rgb,1.0);v_roughness_metallic_emissive_alpha=vec4(vec3(r_m,e_r_m.x)/255.0,albedo_c.a);v_roughness_metallic_emissive_alpha.z*=2.0;float heightBasedRelativeIntepolation=a_pos_3f.z*heightBasedEmissiveStrength.x+heightBasedEmissiveStrength.y;v_height_based_emission_params.x=heightBasedRelativeIntepolation;v_height_based_emission_params.y=heightBasedEmissiveStrength.z;vec2 emissionMultiplierValues=unpack_float(pbr.w)/256.0;v_height_based_emission_params.z=emissionMultiplierValues.x;v_height_based_emission_params.w=emissionMultiplierValues.y-emissionMultiplierValues.x;
#endif
#ifdef FOG
v_fog_pos=fog_position(local_pos);
#endif
#ifdef RENDER_CUTOFF
v_cutoff_opacity=cutoff_opacity(u_cutoff_params,gl_Position.z);
#endif
#ifdef TERRAIN_FRAGMENT_OCCLUSION
v_depth=gl_Position.z/gl_Position.w;
#endif
#ifdef HAS_ATTRIBUTE_a_normal_3f
#ifdef MODEL_POSITION_ON_GPU
float x_squared_scale=dot(rs[0],rs[0]);float y_squared_scale=dot(rs[1],rs[1]);float z_squared_scale=dot(rs[2],rs[2]);vec3 squared_scale=vec3(x_squared_scale,y_squared_scale,z_squared_scale);normal_3f=rs*((u_lighting_matrix*vec4(normal_3f,0.0)).xyz/squared_scale);normal_3f=normalize(normal_3f);
#else
normal_3f=vec3(normal_matrix*vec4(normal_3f,0));
#endif
#endif
#ifdef HAS_ATTRIBUTE_a_pbr
#ifdef HAS_ATTRIBUTE_a_color_4f
v_roughness_metallic_emissive_alpha.w=clamp(color_4f.a*v_roughness_metallic_emissive_alpha.w*(v_roughness_metallic_emissive_alpha.z-1.0),0.0,1.0);
#endif
#endif
#ifdef RENDER_SHADOWS
vec4 shadow_pos=u_node_matrix*vec4(local_pos,1.0);
#ifdef NORMAL_OFFSET
#ifdef HAS_ATTRIBUTE_a_normal_3f
#ifdef MODEL_POSITION_ON_GPU
vec3 offset=shadow_normal_offset(vec3(-normal_3f.xy,normal_3f.z));shadow_pos.xyz+=offset*shadow_normal_offset_multiplier0();
#else
vec3 offset=shadow_normal_offset_model(normal_3f);shadow_pos.xyz+=offset*shadow_normal_offset_multiplier0();
#endif
#endif
#endif
v_pos_light_view_0=u_light_matrix_0*shadow_pos;v_pos_light_view_1=u_light_matrix_1*shadow_pos;v_depth_shadows=gl_Position.w;
#endif
}`), modelDepth: Ti(`in highp float v_depth;void main() {
#ifndef DEPTH_TEXTURE
glFragColor=pack_depth(v_depth);
#endif
}`, `in vec3 a_pos_3f;uniform mat4 u_matrix;out highp float v_depth;
#ifdef MODEL_POSITION_ON_GPU
#ifdef INSTANCED_ARRAYS
in vec4 a_normal_matrix0;in vec4 a_normal_matrix1;in vec4 a_normal_matrix2;in vec4 a_normal_matrix3;
#else
uniform highp mat4 u_instance;
#endif
uniform highp mat4 u_node_matrix;
#endif
void main() {
#ifdef MODEL_POSITION_ON_GPU
highp mat4 instance;
#ifdef INSTANCED_ARRAYS
instance=mat4(a_normal_matrix0,a_normal_matrix1,a_normal_matrix2,a_normal_matrix3);
#else
instance=u_instance;
#endif
vec3 pos_color=instance[0].xyz;vec4 translate=instance[1];vec3 pos_a=floor(pos_color);float hidden=float(pos_a.x > EXTENT);float meter_to_tile=instance[0].w;vec4 pos=vec4(pos_a.xy,translate.z,1.0);mat3 rs;rs[0].x=instance[1].w;rs[0].yz=instance[2].xy;rs[1].xy=instance[2].zw;rs[1].z=instance[3].x;rs[2].xyz=instance[3].yzw;vec4 pos_node=u_node_matrix*vec4(a_pos_3f,1.0);vec3 rotated_pos_node=rs*pos_node.xyz;vec3 pos_model_tile=(rotated_pos_node+vec3(translate.xy,0.0))*vec3(meter_to_tile,meter_to_tile,1.0);pos.xyz+=pos_model_tile;gl_Position=mix(u_matrix*pos,AWAY,hidden);
#else
gl_Position=u_matrix*vec4(a_pos_3f,1);
#endif
v_depth=gl_Position.z/gl_Position.w;}`), stars: Ti(`in highp vec2 v_uv;in mediump float v_intensity;float shapeCircle(in vec2 uv)
{float beginFade=0.6;float lengthFromCenter=length(v_uv);return 1.0-clamp((lengthFromCenter-beginFade)/(1.0-beginFade),0.0,1.0);}void main() {float alpha=shapeCircle(v_uv);vec3 color=vec3(1.0,1.0,1.0);alpha*=v_intensity;glFragColor=vec4(color*alpha,alpha);HANDLE_WIREFRAME_DEBUG;}`, `
in vec3 a_pos_3f;in vec2 a_uv;in float a_size_scale;in float a_fade_opacity;uniform mat4 u_matrix;uniform vec3 u_up;uniform vec3 u_right;uniform float u_intensity_multiplier;out highp vec2 v_uv;out mediump float v_intensity;void main() {v_uv=a_uv;v_intensity=a_fade_opacity*u_intensity_multiplier;vec3 pos=a_pos_3f;pos+=a_uv.x*u_right*a_size_scale;pos+=a_uv.y*u_up*a_size_scale;gl_Position=u_matrix*vec4(pos,1.0);}`), snowParticle: Ti("in highp vec2 uv;in highp float alphaMultiplier;uniform vec4 u_particleColor;uniform vec2 u_simpleShapeParameters;void main() {float t=clamp((length(uv)-u_simpleShapeParameters.x)/(1.0-u_simpleShapeParameters.x),0.0,1.0);float alpha=1.0-pow(t,pow(10.0,u_simpleShapeParameters.y));alpha*=alphaMultiplier;alpha*=u_particleColor.a;vec3 color=u_particleColor.rgb*alpha;glFragColor=vec4(color,alpha) ;HANDLE_WIREFRAME_DEBUG;}", `
in highp vec3 a_pos_3f;in highp vec2 a_uv;in highp vec4 a_snowParticleData;in highp vec4 a_snowParticleDataHorizontalOscillation;uniform mat4 u_modelview;uniform mat4 u_projection;uniform vec3 u_cam_pos;uniform vec2 u_screenSize;uniform float u_time;uniform float u_boxSize;uniform float u_velocityConeAperture; 
uniform float u_velocity;uniform vec3 u_direction;uniform float u_horizontalOscillationRadius; 
uniform float u_horizontalOscillationRate; 
uniform float u_billboardSize;uniform vec2 u_thinningCenterPos;uniform vec3 u_thinningShape;uniform float u_thinningAffectedRatio;uniform float u_thinningParticleOffset;out highp vec2 uv;out highp float alphaMultiplier;void main() {vec3 pos=a_pos_3f;float halfBoxSize=0.5*u_boxSize;pos.xyz*=halfBoxSize;pos+=u_cam_pos;float velocityConeApertureRad=radians(u_velocityConeAperture*0.5);float coneAnglePichRad=velocityConeApertureRad*a_snowParticleData.z;float coneAngleHeadingRad=a_snowParticleData.w*radians(360.0);vec3 localZ=normalize(u_direction);vec3 localX=normalize(cross(localZ,vec3(1,0,0)));vec3 localY=normalize(cross(localZ,localX));vec3 direction;direction.x=cos(coneAngleHeadingRad)*sin(coneAnglePichRad);direction.y=sin(coneAngleHeadingRad)*sin(coneAnglePichRad);direction.z=cos(coneAnglePichRad);direction=normalize(direction);vec3 simPosLocal=vec3(0,0,0);float velocityScale=(1.0+3.0*a_snowParticleData.y)*u_velocity;simPosLocal+=direction*velocityScale*u_time;float horizontalOscillationRadius=u_horizontalOscillationRadius*a_snowParticleDataHorizontalOscillation.x;float horizontalOscillationAngle=u_horizontalOscillationRate*u_time*(-1.0+2.0*a_snowParticleDataHorizontalOscillation.y);simPosLocal.xy+=horizontalOscillationRadius*vec2(cos(horizontalOscillationAngle),sin(horizontalOscillationAngle));vec3 simPos=localX*simPosLocal.x+
localY*simPosLocal.y+localZ*simPosLocal.z;pos+=simPos;pos=fract((pos+vec3(halfBoxSize))/vec3(u_boxSize))*u_boxSize-vec3(halfBoxSize);float clipZ=-u_cam_pos.z+pos.z;vec4 posView=u_modelview*vec4(pos,1.0);float size=u_billboardSize;alphaMultiplier=1.0;vec4 posScreen=u_projection*posView;posScreen/=posScreen.w;posScreen.xy=vec2(0.5)+posScreen.xy*0.5;posScreen.xy*=u_screenSize;vec2 thinningCenterPos=u_thinningCenterPos.xy;thinningCenterPos.y=u_screenSize.y-thinningCenterPos.y;float screenDist=length((thinningCenterPos-posScreen.xy)/(0.5*u_screenSize));screenDist+=a_snowParticleData.x*u_thinningParticleOffset;float scaleFactorMode=0.0;float thinningShapeDist=u_thinningShape.x+u_thinningShape.y;if (screenDist < thinningShapeDist) {float thinningFadeRatio=clamp((screenDist-u_thinningShape.x)/u_thinningShape.y,0.0,1.0);thinningFadeRatio=pow(thinningFadeRatio,u_thinningShape.z);if (a_snowParticleData.x < u_thinningAffectedRatio) {scaleFactorMode=1.0-thinningFadeRatio;alphaMultiplier=thinningFadeRatio;}}vec4 posScreen1=u_projection*vec4(posView.x-size,posView.yzw);posScreen1/=posScreen1.w;vec4 posScreen2=u_projection*vec4(posView.x+size,posView.yzw);posScreen2/=posScreen2.w;posScreen1.xy=vec2(0.5)+posScreen1.xy*0.5;posScreen1.xy*=u_screenSize;posScreen2.xy=vec2(0.5)+posScreen2.xy*0.5;posScreen2.xy*=u_screenSize;float screenLength=length(posScreen1.xy-posScreen2.xy);float screenEpsilon=3.0;float scaleFactor=1.0;if (screenLength < screenEpsilon) {scaleFactor=screenEpsilon/max(screenLength,0.01);scaleFactor=mix(scaleFactor,1.0,scaleFactorMode);}float screenEpsilon2=15.0;if (screenLength > screenEpsilon2) {scaleFactor=screenEpsilon2/max(screenLength,0.01);}size*=scaleFactor;vec2 right=size*vec2(1,0);vec2 up=size*vec2(0,1);posView.xy+=right*a_uv.x;posView.xy+=up*a_uv.y;uv=a_uv;gl_Position=u_projection*posView;}`), rainParticle: Ti("in highp vec2 uv;in highp float particleRandomValue;uniform sampler2D u_texScreen;uniform float u_distortionStrength;uniform vec4 u_color;uniform vec2 u_thinningCenterPos;uniform vec3 u_thinningShape;uniform float u_thinningAffectedRatio;uniform float u_thinningParticleOffset;uniform float u_shapeDirectionalPower;uniform float u_mode;void main() {vec2 st=uv*0.5+vec2(0.5);vec2 uvm=uv;uvm.y=-1.0+2.0*pow(st.y,u_shapeDirectionalPower);float shape=clamp(1.0-length(uvm),0.0,1.0);float alpha=abs(shape)*u_color.a;vec2 screenSize=vec2(textureSize(u_texScreen,0));vec2 thinningCenterPos=u_thinningCenterPos.xy;thinningCenterPos.y=screenSize.y-thinningCenterPos.y;float screenDist=length((thinningCenterPos-gl_FragCoord.xy)/(0.5*screenSize));screenDist+=(0.5+0.5*particleRandomValue)*u_thinningParticleOffset;float thinningShapeDist=u_thinningShape.x+u_thinningShape.y;float thinningAlpha=1.0;if (screenDist < thinningShapeDist) {float thinningFadeRatio=clamp((screenDist-u_thinningShape.x)/u_thinningShape.y,0.0,1.0);thinningFadeRatio=pow(thinningFadeRatio,u_thinningShape.z);thinningAlpha*=thinningFadeRatio;}vec2 offsetXY=normalize(uvm)*abs(shape);vec2 stScreen=(gl_FragCoord.xy+offsetXY*u_distortionStrength*thinningAlpha)/screenSize;vec3 colorScreen=texture(u_texScreen,stScreen).rgb;alpha*=thinningAlpha;glFragColor=mix(vec4(colorScreen,1.0),vec4(u_color.rgb*alpha,alpha),u_mode);HANDLE_WIREFRAME_DEBUG;}", `
in highp vec3 a_pos_3f;in highp vec2 a_uv;in highp vec4 a_rainParticleData;uniform mat4 u_modelview;uniform mat4 u_projection;uniform vec3 u_cam_pos;uniform float u_time;uniform float u_boxSize;uniform float u_velocityConeAperture; 
uniform float u_velocity; 
uniform vec2 u_rainDropletSize;uniform vec3 u_rainDirection;out highp vec2 uv;out highp float particleRandomValue;void main() {vec3 pos=a_pos_3f;float halfBoxSize=0.5*u_boxSize;pos*=halfBoxSize; 
pos+=u_cam_pos;float velocityConeApertureRad=radians(u_velocityConeAperture*0.5);float coneAnglePichRad=velocityConeApertureRad*a_rainParticleData.z;float coneAngleHeadingRad=a_rainParticleData.w*radians(360.0);vec3 localZ=normalize(u_rainDirection);vec3 localX=normalize(cross(localZ,vec3(1,0,0)));vec3 localY=normalize(cross(localZ,localX));vec3 directionLocal;directionLocal.x=cos(coneAngleHeadingRad)*sin(coneAnglePichRad);directionLocal.y=sin(coneAngleHeadingRad)*sin(coneAnglePichRad);directionLocal.z=cos(coneAnglePichRad);directionLocal=normalize(directionLocal);vec3 directionWorld=localX*directionLocal.x+localY*directionLocal.y+localZ*directionLocal.z;float velocityScale=(1.0+3.0*a_rainParticleData.y)*u_velocity;vec3 simPosLocal=vec3(0,0,0);simPosLocal+=directionLocal*velocityScale*u_time;vec3 simPos=localX*simPosLocal.x+
localY*simPosLocal.y+localZ*simPosLocal.z;pos+=simPos;pos=fract((pos+vec3(halfBoxSize))/vec3(u_boxSize))*u_boxSize-vec3(halfBoxSize);vec4 posView=u_modelview*vec4(pos,1.0);vec3 directionView=normalize((u_modelview*vec4(directionWorld,0.0)).xyz);vec3 side=cross(directionView,normalize(posView.xyz));posView.xyz+=side*a_uv.x*u_rainDropletSize.x;posView.xyz+=directionView*a_uv.y*u_rainDropletSize.y;uv=a_uv;particleRandomValue=a_rainParticleData.x;gl_Position=u_projection*posView;}`), vignette: Ti("uniform vec3 u_vignetteShape;uniform vec4 u_vignetteColor;in vec2 st;void main() {float screenDist=length(st);float alpha=clamp((screenDist-u_vignetteShape.x)/u_vignetteShape.y,0.0,1.0);alpha=pow(alpha,u_vignetteShape.z)*u_vignetteColor.a;vec3 color=u_vignetteColor.rgb;glFragColor=vec4(color*alpha,alpha) ;}", "in vec2 a_pos_2f;out vec2 st;void main() {st=a_pos_2f;gl_Position=vec4(a_pos_2f,0,1);}"), occlusion: Ti("uniform vec4 u_color;void main() {glFragColor=u_color;}", `#include "_prelude_terrain.vertex.glsl"
in highp vec2 a_offset_xy;uniform highp vec3 u_anchorPos;uniform mat4 u_matrix;uniform vec2 u_screenSizePx;uniform vec2 u_occluderSizePx;void main() {vec3 world_pos=u_anchorPos;
#ifdef TERRAIN
float e=elevation(world_pos.xy);world_pos.z+=e;
#endif
vec4 projected_point=u_matrix*vec4(world_pos,1.0);projected_point.xy+=projected_point.w*a_offset_xy*0.5*u_occluderSizePx/u_screenSizePx;gl_Position=projected_point;}`) };
      function ao(c, t) {
        const s = c.replace(/\s*\/\/[^\n]*\n/g, `
`).split(`
`);
        for (let h of s)
          if (h = h.trim(), h[0] === "#" && h.includes("if") && !h.includes("endif")) {
            h = h.replace("#", "").replace(/ifdef|ifndef|elif|if/g, "").replace(/!|defined|\(|\)|\|\||&&/g, "").replace(/\s+/g, " ").trim();
            const _ = h.split(" ");
            for (const y of _)
              t.includes(y) || t.push(y);
          }
      }
      function Ti(c, t) {
        const s = /#include\s+"([^"]+)"/g, h = /#pragma mapbox: ([\w\-]+) ([\w]+) ([\w]+) ([\w]+)/g;
        let _ = t.match(/(attribute(\S*)|(^\s*|;)in) (highp |mediump |lowp )?([\w]+) ([\w]+)/gm);
        _ && (_ = _.map((F) => {
          const N = F.split(" ");
          return N[N.length - 1];
        }), _ = [...new Set(_)]);
        const y = {}, T = [], z = [];
        if (c = c.replace(s, (F, N) => (z.push(N), "")), (t = t.replace(s, (F, N) => (T.push(N), ""))).includes("flat out"))
          return void console.error('The usage of "flat" qualifier is disallowed, see: https://bugs.webkit.org/show_bug.cgi?id=268071');
        let R = [...kr];
        ao(c, R), ao(t, R);
        for (const F of [...T, ...z])
          oo[F] || console.error(`Undefined include: ${F}`), Jo[F] || (Jo[F] = [], ao(oo[F], Jo[F])), R = [...R, ...Jo[F]];
        return { fragmentSource: c = c.replace(h, (F, N, G, Z, W) => (y[W] = !0, N === "define" ? `
#ifndef HAS_UNIFORM_u_${W}
in ${G} ${Z} ${W};
#else
uniform ${G} ${Z} u_${W};
#endif
` : N === "initialize" ? `
#ifdef HAS_UNIFORM_u_${W}
    ${G} ${Z} ${W} = u_${W};
#endif
` : N === "define-attribute" ? `
#ifdef HAS_ATTRIBUTE_a_${W}
    in ${G} ${Z} ${W};
#endif
` : N === "initialize-attribute" ? "" : void 0)), vertexSource: t = t.replace(h, (F, N, G, Z, W) => {
          const te = Z === "float" ? "vec2" : Z, ee = W.match(/color/) ? "color" : te;
          return N === "define-attribute-vertex-shader-only" ? `
#ifdef HAS_ATTRIBUTE_a_${W}
in ${G} ${Z} a_${W};
#endif
` : y[W] ? N === "define" ? `
#ifndef HAS_UNIFORM_u_${W}
uniform lowp float u_${W}_t;
in ${G} ${te} a_${W};
out ${G} ${Z} ${W};
#else
uniform ${G} ${Z} u_${W};
#endif
` : N === "initialize" ? ee === "vec4" ? `
#ifndef HAS_UNIFORM_u_${W}
    ${W} = a_${W};
#else
    ${G} ${Z} ${W} = u_${W};
#endif
` : `
#ifndef HAS_UNIFORM_u_${W}
    ${W} = unpack_mix_${ee}(a_${W}, u_${W}_t);
#else
    ${G} ${Z} ${W} = u_${W};
#endif
` : N === "define-attribute" ? `
#ifdef HAS_ATTRIBUTE_a_${W}
    in ${G} ${Z} a_${W};
    out ${G} ${Z} ${W};
#endif
` : N === "initialize-attribute" ? `
#ifdef HAS_ATTRIBUTE_a_${W}
    ${W} = a_${W};
#endif
` : void 0 : N === "define" ? `
#ifndef HAS_UNIFORM_u_${W}
uniform lowp float u_${W}_t;
in ${G} ${te} a_${W};
#else
uniform ${G} ${Z} u_${W};
#endif
` : N === "define-instanced" ? ee === "mat4" ? `
#ifdef INSTANCED_ARRAYS
in vec4 a_${W}0;
in vec4 a_${W}1;
in vec4 a_${W}2;
in vec4 a_${W}3;
#else
uniform ${G} ${Z} u_${W};
#endif
` : `
#ifdef INSTANCED_ARRAYS
in ${G} ${te} a_${W};
#else
uniform ${G} ${Z} u_${W};
#endif
` : N === "initialize-attribute-custom" ? `
#ifdef HAS_ATTRIBUTE_a_${W}
    ${G} ${Z} ${W} = a_${W};
#endif
` : ee === "vec4" ? `
#ifndef HAS_UNIFORM_u_${W}
    ${G} ${Z} ${W} = a_${W};
#else
    ${G} ${Z} ${W} = u_${W};
#endif
` : `
#ifndef HAS_UNIFORM_u_${W}
    ${G} ${Z} ${W} = unpack_mix_${ee}(a_${W}, u_${W}_t);
#else
    ${G} ${Z} ${W} = u_${W};
#endif
`;
        }), staticAttributes: _, usedDefines: R, vertexIncludes: T, fragmentIncludes: z };
      }
      class qh {
        constructor() {
          this.boundProgram = null, this.boundLayoutVertexBuffer = null, this.boundPaintVertexBuffers = [], this.boundIndexBuffer = null, this.boundVertexOffset = null, this.boundDynamicVertexBuffers = [], this.vao = null;
        }
        bind(t, s, h, _, y, T, z, R) {
          this.context = t;
          let F = this.boundPaintVertexBuffers.length !== _.length;
          for (let G = 0; !F && G < _.length; G++)
            this.boundPaintVertexBuffers[G] !== _[G] && (F = !0);
          let N = this.boundDynamicVertexBuffers.length !== z.length;
          for (let G = 0; !N && G < z.length; G++)
            this.boundDynamicVertexBuffers[G] !== z[G] && (N = !0);
          if (!this.vao || this.boundProgram !== s || this.boundLayoutVertexBuffer !== h || F || N || this.boundIndexBuffer !== y || this.boundVertexOffset !== T)
            this.freshBind(s, h, _, y, T, z, R);
          else {
            t.bindVertexArrayOES.set(this.vao);
            for (const G of z)
              G && (G.bind(), R && G.instanceCount && G.setVertexAttribDivisor(t.gl, s, R));
            y && y.dynamicDraw && y.bind();
          }
        }
        freshBind(t, s, h, _, y, T, z) {
          const R = t.numAttributes, F = this.context, N = F.gl;
          this.vao && this.destroy(), this.vao = F.gl.createVertexArray(), F.bindVertexArrayOES.set(this.vao), this.boundProgram = t, this.boundLayoutVertexBuffer = s, this.boundPaintVertexBuffers = h, this.boundIndexBuffer = _, this.boundVertexOffset = y, this.boundDynamicVertexBuffers = T, s.enableAttributes(N, t), s.bind(), s.setVertexAttribPointers(N, t, y);
          for (const G of h)
            G.enableAttributes(N, t), G.bind(), G.setVertexAttribPointers(N, t, y);
          for (const G of T)
            G && (G.enableAttributes(N, t), G.bind(), G.setVertexAttribPointers(N, t, y), z && G.instanceCount && G.setVertexAttribDivisor(N, t, z));
          _ && _.bind(), F.currentNumAttributes = R;
        }
        destroy() {
          this.vao && (this.context.gl.deleteVertexArray(this.vao), this.vao = null);
        }
      }
      function bl(c, t) {
        const s = Math.pow(2, t.canonical.z), h = t.canonical.y;
        return [new i.aa(0, h / s).toLngLat().lat, new i.aa(0, (h + 1) / s).toLngLat().lat];
      }
      function Ga(c, t, s, h, _, y, T) {
        const z = c.context, R = z.gl, F = s.hillshadeFBO;
        if (!F)
          return;
        c.prepareDrawTile();
        const N = c.isTileAffectedByFog(t), G = c.getOrCreateProgram("hillshade", { overrideFog: N });
        z.activeTexture.set(R.TEXTURE0), R.bindTexture(R.TEXTURE_2D, F.colorAttachment.get());
        const Z = ((se, oe, he, _e) => {
          const pe = he.paint.get("hillshade-shadow-color"), Me = he.paint.get("hillshade-shadow-color-use-theme").constantOr("default") === "none", xe = he.paint.get("hillshade-highlight-color"), we = he.paint.get("hillshade-highlight-color-use-theme").constantOr("default") === "none", ve = he.paint.get("hillshade-accent-color"), Ae = he.paint.get("hillshade-accent-color-use-theme").constantOr("default") === "none", Oe = he.paint.get("hillshade-emissive-strength");
          let Xe = i.ai(he.paint.get("hillshade-illumination-direction"));
          if (he.paint.get("hillshade-illumination-anchor") === "viewport")
            Xe -= se.transform.angle;
          else if (se.style && se.style.enable3dLights() && se.style.directionalLight) {
            const ke = se.style.directionalLight.properties.get("direction"), Ne = i.cb(ke.x, ke.y, ke.z);
            Xe = i.ai(Ne[1]);
          }
          const He = !se.options.moving;
          return { u_matrix: _e || se.transform.calculateProjMatrix(oe.tileID.toUnwrapped(), He), u_image: 0, u_latrange: bl(0, oe.tileID), u_light: [he.paint.get("hillshade-exaggeration"), Xe], u_shadow: pe.toRenderColor(Me ? null : he.lut), u_highlight: xe.toRenderColor(we ? null : he.lut), u_emissive_strength: Oe, u_accent: ve.toRenderColor(Ae ? null : he.lut) };
        })(c, s, h, c.terrain ? t.projMatrix : null);
        c.uploadCommonUniforms(z, G, t.toUnwrapped());
        const { tileBoundsBuffer: W, tileBoundsIndexBuffer: te, tileBoundsSegments: ee } = c.getTileBoundsBuffers(s);
        G.draw(c, R.TRIANGLES, _, y, T, ti.disabled, Z, h.id, W, te, ee);
      }
      function Qo(c, t, s) {
        if (!t.needsDEMTextureUpload)
          return;
        const h = c.context, _ = h.gl;
        h.pixelStoreUnpackPremultiplyAlpha.set(!1), t.demTexture = t.demTexture || c.getTileTexture(s.stride);
        const y = s.getPixels();
        t.demTexture ? t.demTexture.update(y, { premultiply: !1 }) : t.demTexture = new i.T(h, y, _.R32F, { premultiply: !1 }), t.needsDEMTextureUpload = !1;
      }
      function qc(c, t, s) {
        const h = c.context, _ = h.gl;
        if (!t.dem)
          return;
        const y = t.dem;
        if (h.activeTexture.set(_.TEXTURE1), Qo(c, t, y), !t.demTexture)
          return;
        t.demTexture.bind(_.NEAREST, _.CLAMP_TO_EDGE);
        const T = y.dim;
        h.activeTexture.set(_.TEXTURE0);
        let z = t.hillshadeFBO;
        if (!z) {
          const Z = new i.T(h, { width: T, height: T, data: null }, _.RGBA8);
          Z.bind(_.LINEAR, _.CLAMP_TO_EDGE), z = t.hillshadeFBO = h.createFramebuffer(T, T, !0, "renderbuffer"), z.colorAttachment.set(Z.texture);
        }
        h.bindFramebuffer.set(z.framebuffer), h.viewport.set([0, 0, T, T]);
        const { tileBoundsBuffer: R, tileBoundsIndexBuffer: F, tileBoundsSegments: N } = c.getMercatorTileBoundsBuffers(), G = [];
        c.linearFloatFilteringSupported() && G.push("TERRAIN_DEM_FLOAT_FORMAT"), c.getOrCreateProgram("hillshadePrepare", { defines: G }).draw(c, _.TRIANGLES, Wt.disabled, ci.disabled, bi.unblended, ti.disabled, ((Z, W) => {
          const te = W.stride, ee = i.ab.mat4.create();
          return i.ab.mat4.ortho(ee, 0, i.ag, -i.ag, 0, 0, 1), i.ab.mat4.translate(ee, ee, [0, -i.ag, 0]), { u_matrix: ee, u_image: 1, u_dimension: [te, te], u_zoom: Z.overscaledZ };
        })(t.tileID, y), s.id, R, F, N), t.needsHillshadePrepare = !1;
      }
      class gn {
        constructor(t) {
          this.gl = t.gl, this.default = this.getDefault(), this.current = this.default, this.dirty = !1;
        }
        get() {
          return this.current;
        }
        set(t) {
        }
        getDefault() {
          return this.default;
        }
        setDefault() {
          this.set(this.default);
        }
      }
      class Wh extends gn {
        getDefault() {
          return i.aj.transparent;
        }
        set(t) {
          const s = this.current;
          (t.r !== s.r || t.g !== s.g || t.b !== s.b || t.a !== s.a || this.dirty) && (this.gl.clearColor(t.r, t.g, t.b, t.a), this.current = t, this.dirty = !1);
        }
      }
      class $h extends gn {
        getDefault() {
          return 1;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.clearDepth(t), this.current = t, this.dirty = !1);
        }
      }
      class Ql extends gn {
        getDefault() {
          return 0;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.clearStencil(t), this.current = t, this.dirty = !1);
        }
      }
      class ec extends gn {
        getDefault() {
          return [!0, !0, !0, !0];
        }
        set(t) {
          const s = this.current;
          (t[0] !== s[0] || t[1] !== s[1] || t[2] !== s[2] || t[3] !== s[3] || this.dirty) && (this.gl.colorMask(t[0], t[1], t[2], t[3]), this.current = t, this.dirty = !1);
        }
      }
      class tc extends gn {
        getDefault() {
          return !0;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.depthMask(t), this.current = t, this.dirty = !1);
        }
      }
      class Wc extends gn {
        getDefault() {
          return 255;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.stencilMask(t), this.current = t, this.dirty = !1);
        }
      }
      class $c extends gn {
        getDefault() {
          return { func: this.gl.ALWAYS, ref: 0, mask: 255 };
        }
        set(t) {
          const s = this.current;
          (t.func !== s.func || t.ref !== s.ref || t.mask !== s.mask || this.dirty) && (this.gl.stencilFunc(t.func, t.ref, t.mask), this.current = t, this.dirty = !1);
        }
      }
      class Xc extends gn {
        getDefault() {
          const t = this.gl;
          return [t.KEEP, t.KEEP, t.KEEP];
        }
        set(t) {
          const s = this.current;
          (t[0] !== s[0] || t[1] !== s[1] || t[2] !== s[2] || this.dirty) && (this.gl.stencilOp(t[0], t[1], t[2]), this.current = t, this.dirty = !1);
        }
      }
      class id extends gn {
        getDefault() {
          return !1;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          t ? s.enable(s.STENCIL_TEST) : s.disable(s.STENCIL_TEST), this.current = t, this.dirty = !1;
        }
      }
      class p extends gn {
        getDefault() {
          return [0, 1];
        }
        set(t) {
          const s = this.current;
          (t[0] !== s[0] || t[1] !== s[1] || this.dirty) && (this.gl.depthRange(t[0], t[1]), this.current = t, this.dirty = !1);
        }
      }
      class A extends gn {
        getDefault() {
          return !1;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          t ? s.enable(s.DEPTH_TEST) : s.disable(s.DEPTH_TEST), this.current = t, this.dirty = !1;
        }
      }
      class B extends gn {
        getDefault() {
          return this.gl.LESS;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.depthFunc(t), this.current = t, this.dirty = !1);
        }
      }
      class X extends gn {
        getDefault() {
          return !1;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          t ? s.enable(s.BLEND) : s.disable(s.BLEND), this.current = t, this.dirty = !1;
        }
      }
      class ne extends gn {
        getDefault() {
          const t = this.gl;
          return [t.ONE, t.ZERO, t.ONE, t.ZERO];
        }
        set(t) {
          const s = this.current;
          (t[0] !== s[0] || t[1] !== s[1] || t[2] !== s[2] || t[3] !== s[3] || this.dirty) && (this.gl.blendFuncSeparate(t[0], t[1], t[2], t[3]), this.current = t, this.dirty = !1);
        }
      }
      class ye extends gn {
        getDefault() {
          return i.aj.transparent;
        }
        set(t) {
          const s = this.current;
          (t.r !== s.r || t.g !== s.g || t.b !== s.b || t.a !== s.a || this.dirty) && (this.gl.blendColor(t.r, t.g, t.b, t.a), this.current = t, this.dirty = !1);
        }
      }
      class We extends gn {
        getDefault() {
          return this.gl.FUNC_ADD;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.blendEquationSeparate(t, t), this.current = t, this.dirty = !1);
        }
      }
      class at extends gn {
        getDefault() {
          return !1;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          t ? s.enable(s.CULL_FACE) : s.disable(s.CULL_FACE), this.current = t, this.dirty = !1;
        }
      }
      class ft extends gn {
        getDefault() {
          return this.gl.BACK;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.cullFace(t), this.current = t, this.dirty = !1);
        }
      }
      class Rt extends gn {
        getDefault() {
          return this.gl.CCW;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.frontFace(t), this.current = t, this.dirty = !1);
        }
      }
      let ii = class extends gn {
        getDefault() {
          return null;
        }
        set(c) {
          (c !== this.current || this.dirty) && (this.gl.useProgram(c), this.current = c, this.dirty = !1);
        }
      };
      class Ci extends gn {
        getDefault() {
          return this.gl.TEXTURE0;
        }
        set(t) {
          (t !== this.current || this.dirty) && (this.gl.activeTexture(t), this.current = t, this.dirty = !1);
        }
      }
      class Wi extends gn {
        getDefault() {
          const t = this.gl;
          return [0, 0, t.drawingBufferWidth, t.drawingBufferHeight];
        }
        set(t) {
          const s = this.current;
          (t[0] !== s[0] || t[1] !== s[1] || t[2] !== s[2] || t[3] !== s[3] || this.dirty) && (this.gl.viewport(t[0], t[1], t[2], t[3]), this.current = t, this.dirty = !1);
        }
      }
      class Hs extends gn {
        getDefault() {
          return null;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.bindFramebuffer(s.FRAMEBUFFER, t), this.current = t, this.dirty = !1;
        }
      }
      class ws extends gn {
        getDefault() {
          return null;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.bindRenderbuffer(s.RENDERBUFFER, t), this.current = t, this.dirty = !1;
        }
      }
      class Rs extends gn {
        getDefault() {
          return null;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.bindTexture(s.TEXTURE_2D, t), this.current = t, this.dirty = !1;
        }
      }
      class ur extends gn {
        getDefault() {
          return null;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.bindBuffer(s.ARRAY_BUFFER, t), this.current = t, this.dirty = !1;
        }
      }
      class Za extends gn {
        getDefault() {
          return null;
        }
        set(t) {
          const s = this.gl;
          s.bindBuffer(s.ELEMENT_ARRAY_BUFFER, t), this.current = t, this.dirty = !1;
        }
      }
      class nd extends gn {
        getDefault() {
          return null;
        }
        set(t) {
          this.gl && (t !== this.current || this.dirty) && (this.gl.bindVertexArray(t), this.current = t, this.dirty = !1);
        }
      }
      class sd extends gn {
        getDefault() {
          return 4;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.pixelStorei(s.UNPACK_ALIGNMENT, t), this.current = t, this.dirty = !1;
        }
      }
      class rd extends gn {
        getDefault() {
          return !1;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL, t), this.current = t, this.dirty = !1;
        }
      }
      class Xh extends gn {
        getDefault() {
          return !1;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          const s = this.gl;
          s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL, t), this.current = t, this.dirty = !1;
        }
      }
      class wl extends gn {
        constructor(t, s) {
          super(t), this.context = t, this.parent = s;
        }
        getDefault() {
          return null;
        }
      }
      class ic extends wl {
        setDirty() {
          this.dirty = !0;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          this.context.bindFramebuffer.set(this.parent);
          const s = this.gl;
          s.framebufferTexture2D(s.FRAMEBUFFER, s.COLOR_ATTACHMENT0, s.TEXTURE_2D, t, 0), this.current = t, this.dirty = !1;
        }
      }
      class es extends wl {
        attachment() {
          return this.gl.DEPTH_ATTACHMENT;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          this.context.bindFramebuffer.set(this.parent);
          const s = this.gl;
          s.framebufferRenderbuffer(s.FRAMEBUFFER, this.attachment(), s.RENDERBUFFER, t), this.current = t, this.dirty = !1;
        }
      }
      class Ao extends wl {
        attachment() {
          return this.gl.DEPTH_ATTACHMENT;
        }
        set(t) {
          if (t === this.current && !this.dirty)
            return;
          this.context.bindFramebuffer.set(this.parent);
          const s = this.gl;
          s.framebufferTexture2D(s.FRAMEBUFFER, this.attachment(), s.TEXTURE_2D, t, 0), this.current = t, this.dirty = !1;
        }
      }
      class Yh extends es {
        attachment() {
          return this.gl.DEPTH_STENCIL_ATTACHMENT;
        }
      }
      const Kh = (c, t, s) => ({ u_matrix: c, u_image0: 0, u_skirt_height: t, u_ground_shadow_factor: s }), Yc = (c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee) => ({ u_proj_matrix: Float32Array.from(c), u_globe_matrix: t, u_normalize_matrix: Float32Array.from(h), u_merc_matrix: s, u_zoom_transition: _, u_merc_center: y, u_image0: 0, u_frustum_tl: T, u_frustum_tr: z, u_frustum_br: R, u_frustum_bl: F, u_globe_pos: N, u_globe_radius: G, u_viewport: Z, u_grid_matrix: ee ? Float32Array.from(ee) : new Float32Array(9), u_skirt_height: W, u_far_z_cutoff: te });
      function Ha(c, t) {
        return c != null && t != null && !(!c.hasData() || !t.hasData()) && c.demTexture != null && t.demTexture != null && c.tileID.key !== t.tileID.key;
      }
      const vr = new class {
        constructor() {
          this.operations = {};
        }
        newMorphing(c, t, s, h, _) {
          if (c in this.operations) {
            const y = this.operations[c];
            y.to.tileID.key !== s.tileID.key && (y.queued = s);
          } else
            this.operations[c] = { startTime: h, phase: 0, duration: _, from: t, to: s, queued: null };
        }
        getMorphValuesForProxy(c) {
          if (!(c in this.operations))
            return null;
          const t = this.operations[c];
          return { from: t.from, to: t.to, phase: t.phase };
        }
        update(c) {
          for (const t in this.operations) {
            const s = this.operations[t];
            for (s.phase = (c - s.startTime) / s.duration; s.phase >= 1 || !this._validOp(s); )
              if (!this._nextOp(s, c)) {
                delete this.operations[t];
                break;
              }
          }
        }
        _nextOp(c, t) {
          return !!c.queued && (c.from = c.to, c.to = c.queued, c.queued = null, c.phase = 0, c.startTime = t, !0);
        }
        _validOp(c) {
          return c.from.hasData() && c.to.hasData();
        }
      }(), Kc = { 0: null, 1: "TERRAIN_VERTEX_MORPHING" };
      function xa(c, t, s) {
        if (t === 0)
          return 0;
        const h = t < 1 && s === 514 ? 0.25 / t : 1;
        return 6 * Math.pow(1.5, 22 - c) * Math.max(t, 1) * h;
      }
      function od(c, t) {
        const s = 1 << c.z;
        return !t && (c.x === 0 || c.x === s - 1) || c.y === 0 || c.y === s - 1;
      }
      const nc = (c) => ({ u_matrix: c });
      function Jh(c, t, s, h, _) {
        if (_ > 0) {
          const y = i.q.now(), T = (y - c.timeAdded) / _, z = t ? (y - t.timeAdded) / _ : -1, R = s.getSource(), F = h.coveringZoomLevel({ tileSize: R.tileSize, roundZoom: R.roundZoom }), N = !t || Math.abs(t.tileID.overscaledZ - F) > Math.abs(c.tileID.overscaledZ - F), G = N && c.refreshedUponExpiration ? 1 : i.aw(N ? T : 1 - z, 0, 1);
          return c.refreshedUponExpiration && T >= 1 && (c.refreshedUponExpiration = !1), t ? { opacity: 1, mix: 1 - G } : { opacity: G, mix: 0 };
        }
        return { opacity: 1, mix: 0 };
      }
      class qf extends sr {
        constructor(t) {
          const s = { type: "raster-dem", maxzoom: t.transform.maxZoom }, h = new i.D(i.ci(), null), _ = Go("mock-dem", s, h, t.style);
          super("mock-dem", _, !1), _.setEventedParent(this), this._sourceLoaded = !0;
        }
        _loadTile(t, s) {
          t.state = "loaded", s(null);
        }
      }
      class ad extends sr {
        constructor(t) {
          const s = Go("proxy", { type: "geojson", maxzoom: t.transform.maxZoom }, new i.D(i.ci(), null), t.style);
          super("proxy", s, !1), s.setEventedParent(this), this.map = this.getSource().map = t, this.used = this._sourceLoaded = !0, this.renderCache = [], this.renderCachePool = [], this.proxyCachedFBO = {};
        }
        update(t, s, h) {
          if (t.freezeTileCoverage)
            return;
          this.transform = t;
          const _ = t.coveringTiles({ tileSize: this._source.tileSize, minzoom: this._source.minzoom, maxzoom: this._source.maxzoom, roundZoom: this._source.roundZoom, reparseOverscaled: this._source.reparseOverscaled }).reduce((y, T) => {
            if (y[T.key] = "", !this._tiles[T.key]) {
              const z = new Cr(T, this._source.tileSize * T.overscaleFactor(), t.tileZoom);
              z.state = "loaded", this._tiles[T.key] = z;
            }
            return y;
          }, {});
          for (const y in this._tiles)
            y in _ || (this.freeFBO(y), this._tiles[y].unloadVectorData(), delete this._tiles[y]);
        }
        freeFBO(t) {
          const s = this.proxyCachedFBO[t];
          if (s !== void 0) {
            const h = Object.values(s);
            this.renderCachePool.push(...h), delete this.proxyCachedFBO[t];
          }
        }
        deallocRenderCache() {
          this.renderCache.forEach((t) => t.fb.destroy()), this.renderCache = [], this.renderCachePool = [], this.proxyCachedFBO = {};
        }
      }
      class Qh extends i.aG {
        constructor(t, s, h) {
          super(t.overscaledZ, t.wrap, t.canonical.z, t.canonical.x, t.canonical.y), this.proxyTileKey = s, this.projMatrix = h;
        }
      }
      class Wf extends i.cJ {
        constructor(t, s) {
          super(), this._debugParams = { sortTilesHiZFirst: !0, disableRenderCache: !1 }, t.tp.registerParameter(this._debugParams, ["Terrain"], "sortTilesHiZFirst", {}, () => {
            this._style.map.triggerRepaint();
          }), t.tp.registerParameter(this._debugParams, ["Terrain"], "disableRenderCache", {}, () => {
            this._style.map.triggerRepaint();
          }), t.tp.registerButton(["Terrain"], "Invalidate Render Cache", () => {
            this.invalidateRenderCache = !0, this._style.map.triggerRepaint();
          }), this.painter = t, this.terrainTileForTile = {}, this.prevTerrainTileForTile = {};
          const [h, _, y] = function(R) {
            const F = new i.b4(), N = new i.aU(), G = 131;
            F.reserve(17161), N.reserve(33800);
            const Z = i.ag / 128, W = i.ag + Z / 2, te = W + Z;
            for (let se = -Z; se < te; se += Z)
              for (let oe = -Z; oe < te; oe += Z) {
                const he = oe < 0 || oe > W || se < 0 || se > W ? 24575 : 0, _e = i.aw(Math.round(oe), 0, i.ag), pe = i.aw(Math.round(se), 0, i.ag);
                F.emplaceBack(_e + he, pe);
              }
            const ee = (se, oe) => {
              const he = oe * G + se;
              N.emplaceBack(he + 1, he, he + G), N.emplaceBack(he + G, he + G + 1, he + 1);
            };
            for (let se = 1; se < 129; se++)
              for (let oe = 1; oe < 129; oe++)
                ee(oe, se);
            return [0, 129].forEach((se) => {
              for (let oe = 0; oe < 130; oe++)
                ee(oe, se), ee(se, oe);
            }), [F, N, 32768];
          }(), T = t.context;
          this.gridBuffer = T.createVertexBuffer(h, i.b6.members), this.gridIndexBuffer = T.createIndexBuffer(_), this.gridSegments = i.b7.simpleSegment(0, 0, h.length, _.length), this.gridNoSkirtSegments = i.b7.simpleSegment(0, 0, h.length, y), this.proxyCoords = [], this.proxiedCoords = {}, this._visibleDemTiles = [], this._drapedRenderBatches = [], this._sourceTilesOverlap = {}, this.proxySourceCache = new ad(s.map), this.orthoMatrix = i.ab.mat4.create(), i.ab.mat4.ortho(this.orthoMatrix, this.painter.transform.projection.name === "globe" ? 0.015 : 0, i.ag, 0, i.ag, 0, 1);
          const z = T.gl;
          this._overlapStencilMode = new ci({ func: z.GEQUAL, mask: 255 }, 0, 255, z.KEEP, z.KEEP, z.REPLACE), this._previousZoom = t.transform.zoom, this.pool = [], this._findCoveringTileCache = {}, this._tilesDirty = {}, this.style = s, this._useVertexMorphing = !0, this._exaggeration = 1, this._mockSourceCache = new qf(s.map), this._pendingGroundEffectLayers = [];
        }
        set style(t) {
          t.on("data", this._onStyleDataEvent.bind(this)), this._style = t, this._style.map.on("moveend", () => {
            this._clearLineLayersFromRenderCache();
          });
        }
        update(t, s, h) {
          if (t && t.terrain) {
            this._style !== t && (this.style = t, this._evaluationZoom = void 0);
            const _ = t.terrain.properties, y = t.terrain.drapeRenderMode === 0, T = t.terrain.isZoomDependent();
            this._previousUpdateTimestamp = this.enabled ? this._updateTimestamp : void 0, this._updateTimestamp = i.q.now();
            const z = t.terrain && t.terrain.scope, R = _.get("source"), F = y ? this._mockSourceCache : t.getSourceCache(R, z);
            if (!F)
              return void i.w(`Couldn't find terrain source "${R}".`);
            if (this.sourceCache = F, this._attenuationRange = t.terrain.getAttenuationRange(), this._exaggeration = T ? this.calculateExaggeration(s) : _.get("exaggeration"), !s.projection.requiresDraping && T && this._exaggeration === 0)
              return void this._disable();
            this.enabled = !0;
            const N = () => {
              this.sourceCache.used && i.w(`Raster DEM source '${this.sourceCache.id}' is used both for terrain and as layer source.
This leads to lower resolution of hillshade. For full hillshade resolution but higher memory consumption, define another raster DEM source.`);
              const G = this.getScaledDemTileSize();
              this.sourceCache.update(s, G, !0), this.resetTileLookupCache(this.sourceCache.id);
            };
            this.sourceCache.usedForTerrain || (this.resetTileLookupCache(this.sourceCache.id), this.sourceCache.usedForTerrain = !0, N(), this._initializing = !0), N(), s.updateElevation(!0, h), this.resetTileLookupCache(this.proxySourceCache.id), this.proxySourceCache.update(s), this._emptyDEMTextureDirty = !0, this._previousZoom = s.zoom;
          } else
            this._disable();
        }
        calculateExaggeration(t) {
          if (this._attenuationRange && t.zoom >= Math.ceil(this._attenuationRange[1]))
            return this._style.terrain.getExaggeration(t.zoom);
          const s = this._previousCameraAltitude, h = t.getFreeCameraOptions().position.z / t.pixelsPerMeter * t.worldSize;
          this._previousCameraAltitude = h;
          const _ = s != null ? h - s : Number.MAX_VALUE;
          if (Math.abs(_) < 2)
            return this._exaggeration;
          const y = t.zoom, T = this._style.terrain;
          if (!this._previousUpdateTimestamp)
            return T.getExaggeration(y);
          let z = y - this._previousZoom;
          const R = this._previousUpdateTimestamp;
          let F = y;
          this._evaluationZoom != null && (F = this._evaluationZoom, Math.abs(y - F) > 0.5 && (z = 0.5 * (y - F + z)), z * _ < 0 && (F += z)), this._evaluationZoom = F;
          const N = T.getExaggeration(F), G = N === T.getExaggeration(Math.max(0, F - 0.1));
          if (G && Math.abs(N - this._exaggeration) < 0.01)
            return N;
          let Z = Math.min(0.1, 375e-5 * (this._updateTimestamp - R));
          return (G || N < 0.1 || Math.abs(z) < 1e-4) && (Z = Math.min(0.2, 4 * Z)), i.af(this._exaggeration, N, Z);
        }
        resetTileLookupCache(t) {
          this._findCoveringTileCache[t] = {};
        }
        attenuationRange() {
          return this._attenuationRange;
        }
        getDemUpscale() {
          return this.proxySourceCache.getSource().tileSize / 128;
        }
        getScaledDemTileSize() {
          return this.sourceCache.getSource().tileSize / 128 * this.proxySourceCache.getSource().tileSize;
        }
        _onStyleDataEvent(t) {
          t.coord && t.dataType === "source" ? this._clearRenderCacheForTile(t.sourceCacheId, t.coord) : t.dataType === "style" && (this.invalidateRenderCache = !0, this._evaluationZoom = void 0, this._previousUpdateTimestamp = void 0, this._previousCameraAltitude = void 0);
        }
        _disable() {
          if (this.enabled && (this.enabled = !1, this._emptyDEMTextureDirty = !0, this._sharedDepthStencil = void 0, this._evaluationZoom = void 0, this._previousUpdateTimestamp = void 0, this.proxySourceCache.deallocRenderCache(), this._style))
            for (const t in this._style._mergedSourceCaches)
              this._style._mergedSourceCaches[t].usedForTerrain = !1;
        }
        destroy() {
          this._disable(), this._emptyDEMTexture && this._emptyDEMTexture.destroy(), this.pool.forEach((t) => t.fb.destroy()), this.pool = [], this.framebufferCopyTexture && this.framebufferCopyTexture.destroy();
        }
        _source() {
          return this.enabled ? this.sourceCache : null;
        }
        isUsingMockSource() {
          return this.sourceCache === this._mockSourceCache;
        }
        exaggeration() {
          return this.enabled ? this._exaggeration : 0;
        }
        get visibleDemTiles() {
          return this._visibleDemTiles;
        }
        get drapeBufferSize() {
          const t = 2 * this.proxySourceCache.getSource().tileSize;
          return [t, t];
        }
        set useVertexMorphing(t) {
          this._useVertexMorphing = t;
        }
        updateTileBinding(t) {
          if (!this.enabled)
            return;
          this.prevTerrainTileForTile = this.terrainTileForTile;
          const s = this.proxySourceCache, h = this.painter.transform;
          this._initializing && (this._initializing = h._centerAltitude === 0 && this.getAtPointOrZero(i.aa.fromLngLat(h.center), -1) === -1, this._emptyDEMTextureDirty = !this._initializing);
          const _ = this.proxyCoords = s.getIds().map((R) => {
            const F = s.getTileByID(R).tileID;
            return F.projMatrix = h.calculateProjMatrix(F.toUnwrapped()), F;
          });
          (function(R, F) {
            const N = F.transform.pointCoordinate(F.transform.getCameraPoint()), G = new i.P(N.x, N.y);
            R.sort((Z, W) => {
              if (W.overscaledZ - Z.overscaledZ)
                return W.overscaledZ - Z.overscaledZ;
              const te = new i.P(Z.canonical.x + (1 << Z.canonical.z) * Z.wrap, Z.canonical.y), ee = new i.P(W.canonical.x + (1 << W.canonical.z) * W.wrap, W.canonical.y), se = G.mult(1 << Z.canonical.z);
              return se.x -= 0.5, se.y -= 0.5, se.distSqr(te) - se.distSqr(ee);
            });
          })(_, this.painter);
          const y = this.proxyToSource || {};
          this.proxyToSource = {}, _.forEach((R) => {
            this.proxyToSource[R.key] = {};
          }), this.terrainTileForTile = {};
          const T = this._style._mergedSourceCaches;
          for (const R in T) {
            const F = T[R];
            if (!F.used || (F !== this.sourceCache && this.resetTileLookupCache(F.id), this._setupProxiedCoordsForOrtho(F, t[R], y), F.usedForTerrain))
              continue;
            const N = t[R];
            F.getSource().reparseOverscaled && this._assignTerrainTiles(N);
          }
          this.proxiedCoords[s.id] = _.map((R) => new Qh(R, R.key, this.orthoMatrix)), this._assignTerrainTiles(_), this._prepareDEMTextures(), this._setupDrapedRenderBatches(), this._initFBOPool(), this._setupRenderCache(y), this.renderingToTexture = !1;
          const z = {};
          this._visibleDemTiles = [];
          for (const R of this.proxyCoords) {
            const F = this.terrainTileForTile[R.key];
            if (!F)
              continue;
            const N = F.tileID.key;
            N in z || (this._visibleDemTiles.push(F), z[N] = N);
          }
        }
        _assignTerrainTiles(t) {
          this._initializing || t.forEach((s) => {
            if (this.terrainTileForTile[s.key])
              return;
            const h = this._findTileCoveringTileID(s, this.sourceCache);
            h && (this.terrainTileForTile[s.key] = h);
          });
        }
        _prepareDEMTextures() {
          const t = this.painter.context, s = t.gl;
          for (const h in this.terrainTileForTile) {
            const _ = this.terrainTileForTile[h], y = _.dem;
            !y || _.demTexture && !_.needsDEMTextureUpload || (t.activeTexture.set(s.TEXTURE1), Qo(this.painter, _, y));
          }
        }
        _prepareDemTileUniforms(t, s, h, _) {
          if (!s || s.demTexture == null)
            return !1;
          const y = t.tileID.canonical, T = Math.pow(2, s.tileID.canonical.z - y.z), z = _ || "";
          return h[`u_dem_tl${z}`] = [y.x * T % 1, y.y * T % 1], h[`u_dem_scale${z}`] = T, !0;
        }
        get emptyDEMTexture() {
          return !this._emptyDEMTextureDirty && this._emptyDEMTexture ? this._emptyDEMTexture : this._updateEmptyDEMTexture();
        }
        _getLoadedAreaMinimum() {
          if (!this.enabled)
            return 0;
          let t = 0;
          const s = this._visibleDemTiles.reduce((h, _) => {
            if (!_.dem)
              return h;
            const y = _.dem.tree.minimums[0];
            return y > 0 && t++, h + y;
          }, 0);
          return t ? s / t : 0;
        }
        _updateEmptyDEMTexture() {
          const t = this.painter.context, s = t.gl;
          t.activeTexture.set(s.TEXTURE2);
          const h = this._getLoadedAreaMinimum(), _ = new i.cK({ width: 1, height: 1 }, new Float32Array([h]));
          this._emptyDEMTextureDirty = !1;
          let y = this._emptyDEMTexture;
          return y ? y.update(_, { premultiply: !1 }) : y = this._emptyDEMTexture = new i.T(t, _, s.R32F, { premultiply: !1 }), y;
        }
        setupElevationDraw(t, s, h) {
          const _ = this.painter.context, y = _.gl, T = { u_dem: 2, u_dem_prev: 4, u_dem_tl: [0, 0], u_dem_tl_prev: [0, 0], u_dem_scale: 0, u_dem_scale_prev: 0, u_dem_size: 0, u_dem_lerp: 1, u_depth: 3, u_depth_size_inv: [0, 0], u_depth_range_unpack: [0, 1], u_occluder_half_size: 16, u_occlusion_depth_offset: -1e-4, u_exaggeration: 0 };
          T.u_exaggeration = this.exaggeration();
          let z = null, R = null, F = 1;
          if (h && h.morphing && this._useVertexMorphing) {
            const W = h.morphing.srcDemTile, te = h.morphing.dstDemTile;
            F = h.morphing.phase, W && te && (this._prepareDemTileUniforms(t, W, T, "_prev") && (R = W), this._prepareDemTileUniforms(t, te, T) && (z = te));
          }
          const N = (W) => W && W.demTexture && this.painter.linearFloatFilteringSupported() ? y.LINEAR : y.NEAREST;
          let G = null;
          var Z;
          if (this.enabled ? R && z ? (G = z.demTexture, _.activeTexture.set(y.TEXTURE4), R.demTexture.bind(N(R), y.CLAMP_TO_EDGE), T.u_dem_lerp = F) : (z = this.terrainTileForTile[t.tileID.key], G = this._prepareDemTileUniforms(t, z, T) ? z.demTexture : this.emptyDEMTexture) : G = this.emptyDEMTexture, _.activeTexture.set(y.TEXTURE2), G && (T.u_dem_size = (Z = G).size[0] === 1 ? 1 : Z.size[0] - 2, G.bind(N(z), y.CLAMP_TO_EDGE)), this.painter.setupDepthForOcclusion(h && h.useDepthForOcclusion, s, T), h && h.useMeterToDem && z) {
            const W = (1 << z.tileID.canonical.z) * i.bH(1, this.painter.transform.center.lat) * this.sourceCache.getSource().tileSize;
            T.u_meter_to_dem = W;
          }
          if (h && h.labelPlaneMatrixInv && (T.u_label_plane_matrix_inv = h.labelPlaneMatrixInv), s.setTerrainUniformValues(_, T), this.painter.transform.projection.name === "globe") {
            const W = this.globeUniformValues(this.painter.transform, t.tileID.canonical, h && h.useDenormalizedUpVectorScale);
            s.setGlobeUniformValues(_, W);
          }
        }
        globeUniformValues(t, s, h) {
          const _ = t.projection;
          return { u_tile_tl_up: _.upVector(s, 0, 0), u_tile_tr_up: _.upVector(s, i.ag, 0), u_tile_br_up: _.upVector(s, i.ag, i.ag), u_tile_bl_up: _.upVector(s, 0, i.ag), u_tile_up_scale: h ? i.cL(1) : _.upVectorScale(s, t.center.lat, t.worldSize).metersToTile };
        }
        renderToBackBuffer(t) {
          const s = this.painter, h = this.painter.context;
          t.length !== 0 && (h.bindFramebuffer.set(null), h.viewport.set([0, 0, s.width, s.height]), s.gpuTimingDeferredRenderStart(), this.renderingToTexture = !1, function(_, y, T, z, R) {
            if (_.transform.projection.name === "globe")
              (function(F, N, G, Z, W) {
                const te = F.context, ee = te.gl;
                let se, oe;
                const he = F.transform, _e = i.cC(F, te, he), pe = (ke, Ne) => {
                  if (oe === Ne)
                    return;
                  const st = [Kc[Ne], "PROJECTION_GLOBE_VIEW"];
                  _e && st.push("CUSTOM_ANTIALIASING");
                  const ut = F.isTileAffectedByFog(ke);
                  se = F.getOrCreateProgram("globeRaster", { defines: st, overrideFog: ut }), oe = Ne;
                }, Me = F.colorModeForRenderPass(), xe = new Wt(ee.LEQUAL, Wt.ReadWrite, F.depthRangeFor3D);
                vr.update(W);
                const we = i.cD(he), ve = [i.at(he.center.lng), i.aA(he.center.lat)], Ae = F.globeSharedBuffers, Oe = [he.width * i.q.devicePixelRatio, he.height * i.q.devicePixelRatio], Xe = Float32Array.from(he.globeMatrix), He = { useDenormalizedUpVectorScale: !0 };
                {
                  const ke = F.transform, Ne = xa(ke.zoom, N.exaggeration(), N.sourceCache._source.tileSize);
                  oe = -1;
                  const st = ee.TRIANGLES;
                  for (const ut of Z) {
                    const xt = G.getTile(ut), Ge = ci.disabled, lt = N.prevTerrainTileForTile[ut.key], Je = N.terrainTileForTile[ut.key];
                    Ha(lt, Je) && vr.newMorphing(ut.key, lt, Je, W, 250), te.activeTexture.set(ee.TEXTURE0), xt.texture && xt.texture.bind(ee.LINEAR, ee.CLAMP_TO_EDGE);
                    const _t = vr.getMorphValuesForProxy(ut.key), ct = _t ? 1 : 0;
                    _t && i.J(He, { morphing: { srcDemTile: _t.from, dstDemTile: _t.to, phase: i.cB(_t.phase) } });
                    const nt = i.cE(ut.canonical), Lt = i.cF(nt.getCenter().lat), bt = i.cG(ut.canonical, nt, Lt, ke.worldSize / ke._pixelsPerMercatorPixel), zt = i.bb(i.cH(ut.canonical)), Bt = Yc(ke.expandedFarZProjMatrix, Xe, we, zt, i.ae(ke.zoom), ve, ke.frustumCorners.TL, ke.frustumCorners.TR, ke.frustumCorners.BR, ke.frustumCorners.BL, ke.globeCenterInViewSpace, ke.globeRadius, Oe, Ne, ke._farZ, bt);
                    if (pe(ut, ct), se && (N.setupElevationDraw(xt, se, He), F.uploadCommonUniforms(te, se, ut.toUnwrapped()), Ae)) {
                      const [oi, $t, Xt] = Ae.getGridBuffers(Lt, Ne !== 0);
                      se.draw(F, st, xe, Ge, Me, ti.backCCW, Bt, "globe_raster", oi, $t, Xt);
                    }
                  }
                }
                if (Ae && (F.renderDefaultNorthPole || F.renderDefaultSouthPole)) {
                  const ke = ["GLOBE_POLES", "PROJECTION_GLOBE_VIEW"];
                  _e && ke.push("CUSTOM_ANTIALIASING"), se = F.getOrCreateProgram("globeRaster", { defines: ke });
                  for (const Ne of Z) {
                    const { x: st, y: ut, z: xt } = Ne.canonical, Ge = ut === 0, lt = ut === (1 << xt) - 1, [Je, _t, ct, nt] = Ae.getPoleBuffers(xt, !1);
                    if (nt && (Ge || lt)) {
                      const Lt = G.getTile(Ne);
                      te.activeTexture.set(ee.TEXTURE0), Lt.texture && Lt.texture.bind(ee.LINEAR, ee.CLAMP_TO_EDGE);
                      let bt = i.cI(xt, st, he);
                      const zt = i.bb(i.cH(Ne.canonical)), Bt = (oi, $t) => oi.draw(F, ee.TRIANGLES, xe, ci.disabled, Me, ti.disabled, Yc(he.expandedFarZProjMatrix, bt, bt, zt, 0, ve, he.frustumCorners.TL, he.frustumCorners.TR, he.frustumCorners.BR, he.frustumCorners.BL, he.globeCenterInViewSpace, he.globeRadius, Oe, 0, he._farZ), "globe_pole_raster", $t, ct, nt);
                      N.setupElevationDraw(Lt, se, He), F.uploadCommonUniforms(te, se, Ne.toUnwrapped()), Ge && F.renderDefaultNorthPole && Bt(se, Je), lt && F.renderDefaultSouthPole && (bt = i.ab.mat4.scale(i.ab.mat4.create(), bt, [1, -1, 1]), Bt(se, _t));
                    }
                  }
                }
              })(_, y, T, z, R);
            else {
              const F = _.context, N = F.gl;
              let G, Z;
              const W = _.shadowRenderer, te = Mo(_, _.longestCutoffRange), ee = (Me) => {
                if (Z === Me)
                  return;
                const xe = [];
                xe.push(Kc[Me]), te.shouldRenderCutoff && xe.push("RENDER_CUTOFF"), W && (xe.push("RENDER_SHADOWS", "DEPTH_TEXTURE"), W.useNormalOffset && xe.push("NORMAL_OFFSET")), G = _.getOrCreateProgram("terrainRaster", { defines: xe }), Z = Me;
              }, se = _.colorModeForRenderPass(), oe = new Wt(N.LEQUAL, Wt.ReadWrite, _.depthRangeFor3D);
              vr.update(R);
              const he = _.transform, _e = xa(he.zoom, y.exaggeration(), y.sourceCache._source.tileSize);
              let pe = [0, 0, 0];
              if (W) {
                const Me = _.style.directionalLight, xe = _.style.ambientLight;
                Me && xe && (pe = cr(_.style, Me, xe));
              }
              {
                Z = -1;
                const Me = N.TRIANGLES, [xe, we] = [y.gridIndexBuffer, y.gridSegments];
                for (const ve of z) {
                  const Ae = T.getTile(ve), Oe = ci.disabled, Xe = y.prevTerrainTileForTile[ve.key], He = y.terrainTileForTile[ve.key];
                  Ha(Xe, He) && vr.newMorphing(ve.key, Xe, He, R, 250), F.activeTexture.set(N.TEXTURE0), Ae.texture && Ae.texture.bind(N.LINEAR, N.CLAMP_TO_EDGE);
                  const ke = vr.getMorphValuesForProxy(ve.key), Ne = ke ? 1 : 0;
                  let st;
                  ke && (st = { morphing: { srcDemTile: ke.from, dstDemTile: ke.to, phase: i.cB(ke.phase) } });
                  const ut = Kh(ve.projMatrix, od(ve.canonical, he.renderWorldCopies) ? _e / 10 : _e, pe);
                  if (ee(Ne), !G)
                    continue;
                  y.setupElevationDraw(Ae, G, st);
                  const xt = ve.toUnwrapped();
                  W && W.setupShadows(xt, G), _.uploadCommonUniforms(F, G, xt, null, te), G.draw(_, Me, oe, Oe, se, ti.backCCW, ut, "terrain_raster", y.gridBuffer, xe, we);
                }
              }
            }
          }(s, this, this.proxySourceCache, t, this._updateTimestamp), this.renderingToTexture = !0, s.gpuTimingDeferredRenderEnd(), t.splice(0, t.length));
        }
        renderBatch(t) {
          if (this._drapedRenderBatches.length === 0)
            return t + 1;
          this.renderingToTexture = !0;
          const s = this.painter, h = this.painter.context, _ = this.proxySourceCache, y = this.proxiedCoords[_.id], T = this._drapedRenderBatches.shift(), z = s.style.order, R = [];
          let F = 0;
          for (const N of y) {
            const G = _.getTileByID(N.proxyTileKey), Z = _.proxyCachedFBO[N.key] ? _.proxyCachedFBO[N.key][t] : void 0, W = Z !== void 0 ? _.renderCache[Z] : this.pool[F++], te = Z !== void 0;
            if (G.texture = W.tex, te && !W.dirty) {
              R.push(G.tileID);
              continue;
            }
            let ee;
            h.bindFramebuffer.set(W.fb.framebuffer), this.renderedToTile = !1, W.dirty && (h.clear({ color: i.aj.transparent, stencil: 0 }), W.dirty = !1);
            for (let se = T.start; se <= T.end; ++se) {
              const oe = s.style._mergedLayers[z[se]];
              if (oe.isHidden(s.transform.zoom))
                continue;
              const he = s.style.getLayerSourceCache(oe), _e = he ? this.proxyToSource[N.key][he.id] : [N];
              if (!_e)
                continue;
              const pe = _e;
              h.viewport.set([0, 0, W.fb.width, W.fb.height]), ee !== (he ? he.id : null) && (this._setupStencil(W, _e, oe, he), ee = he ? he.id : null), s.renderLayer(s, he, oe, pe);
            }
            if (this._drapedRenderBatches.length === 0)
              for (const se of this._pendingGroundEffectLayers) {
                const oe = s.style._mergedLayers[z[se]];
                if (oe.isHidden(s.transform.zoom))
                  continue;
                const he = s.style.getLayerSourceCache(oe), _e = he ? this.proxyToSource[N.key][he.id] : [N];
                if (!_e)
                  continue;
                const pe = _e;
                h.viewport.set([0, 0, W.fb.width, W.fb.height]), ee !== (he ? he.id : null) && (this._setupStencil(W, _e, oe, he), ee = he ? he.id : null), s.renderLayer(s, he, oe, pe);
              }
            this.renderedToTile ? (W.dirty = !0, R.push(G.tileID)) : te || --F, F === 5 && (F = 0, this.renderToBackBuffer(R));
          }
          return this.renderToBackBuffer(R), this.renderingToTexture = !1, h.bindFramebuffer.set(null), h.viewport.set([0, 0, s.width, s.height]), T.end + 1;
        }
        postRender() {
        }
        isLayerOrderingCorrect(t) {
          const s = t.order.length;
          let h = -1, _ = s;
          for (let y = 0; y < s; ++y)
            this._style.isLayerDraped(t._mergedLayers[t.order[y]]) ? h = Math.max(h, y) : _ = Math.min(_, y);
          return _ > h;
        }
        getMinElevationBelowMSL() {
          let t = 0;
          return this._visibleDemTiles.filter((s) => s.dem).forEach((s) => {
            t = Math.min(t, s.dem.tree.minimums[0]);
          }), t === 0 ? t : (t - 30) * this._exaggeration;
        }
        raycast(t, s, h) {
          if (!this._visibleDemTiles)
            return null;
          const _ = this._visibleDemTiles.filter((y) => y.dem).map((y) => {
            const T = y.tileID, z = 1 << T.overscaledZ, { x: R, y: F } = T.canonical, N = R / z, G = (R + 1) / z, Z = F / z, W = (F + 1) / z;
            return { minx: N, miny: Z, maxx: G, maxy: W, t: y.dem.tree.raycastRoot(N, Z, G, W, t, s, h), tile: y };
          });
          _.sort((y, T) => (y.t !== null ? y.t : Number.MAX_VALUE) - (T.t !== null ? T.t : Number.MAX_VALUE));
          for (const y of _) {
            if (y.t == null)
              return null;
            const T = y.tile.dem.tree.raycast(y.minx, y.miny, y.maxx, y.maxy, t, s, h);
            if (T != null)
              return T;
          }
          return null;
        }
        _createFBO() {
          const t = this.painter.context, s = t.gl, h = this.drapeBufferSize;
          t.activeTexture.set(s.TEXTURE0);
          const _ = new i.T(t, { width: h[0], height: h[1], data: null }, s.RGBA8);
          _.bind(s.LINEAR, s.CLAMP_TO_EDGE);
          const y = t.createFramebuffer(h[0], h[1], !0, null);
          return y.colorAttachment.set(_.texture), y.depthAttachment = new Yh(t, y.framebuffer), this._sharedDepthStencil === void 0 ? (this._sharedDepthStencil = t.createRenderbuffer(t.gl.DEPTH_STENCIL, h[0], h[1]), this._stencilRef = 0, y.depthAttachment.set(this._sharedDepthStencil), t.clear({ stencil: 0 })) : y.depthAttachment.set(this._sharedDepthStencil), t.extTextureFilterAnisotropic && s.texParameterf(s.TEXTURE_2D, t.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, t.extTextureFilterAnisotropicMax), { fb: y, tex: _, dirty: !1 };
        }
        _initFBOPool() {
          for (; this.pool.length < Math.min(5, this.proxyCoords.length); )
            this.pool.push(this._createFBO());
        }
        _shouldDisableRenderCache() {
          if (this._debugParams.disableRenderCache || this._style.hasLightTransitions())
            return !0;
          for (const t in this._style._mergedSourceCaches)
            if (this._style._mergedSourceCaches[t].hasTransition())
              return !0;
          return this._style.order.some((t) => {
            const s = this._style._mergedLayers[t], h = s.isHidden(this.painter.transform.zoom);
            return s.type === "hillshade" || s.type === "custom" ? !h && s.shouldRedrape() : !h && s.hasTransition();
          });
        }
        _clearLineLayersFromRenderCache() {
          let t = !1;
          for (const h of this._style.getSources())
            if (h instanceof jo) {
              t = !0;
              break;
            }
          if (!t)
            return;
          const s = {};
          for (let h = 0; h < this._style.order.length; ++h) {
            const _ = this._style._mergedLayers[this._style.order[h]], y = this._style.getLayerSourceCache(_);
            if (y && !s[y.id] && !_.isHidden(this.painter.transform.zoom) && _.type === "line" && _.widthExpression() instanceof i.a9) {
              s[y.id] = !0;
              for (const T of this.proxyCoords) {
                const z = this.proxyToSource[T.key][y.id];
                if (z)
                  for (const R of z)
                    this._clearRenderCacheForTile(y.id, R);
              }
            }
          }
        }
        _clearRasterLayersFromRenderCache() {
          let t = !1;
          for (const h in this._style._mergedSourceCaches)
            if (this._style._mergedSourceCaches[h]._source instanceof tn) {
              t = !0;
              break;
            }
          if (!t)
            return;
          const s = {};
          for (let h = 0; h < this._style.order.length; ++h) {
            const _ = this._style._mergedLayers[this._style.order[h]], y = this._style.getLayerSourceCache(_);
            if (!y || s[y.id] || _.isHidden(this.painter.transform.zoom) || _.type !== "raster")
              continue;
            const T = _.paint.get("raster-fade-duration");
            for (const z of this.proxyCoords) {
              const R = this.proxyToSource[z.key][y.id];
              if (R)
                for (const F of R) {
                  const N = Jh(y.getTile(F), y.findLoadedParent(F, 0), y, this.painter.transform, T);
                  (N.opacity !== 1 || N.mix !== 0) && this._clearRenderCacheForTile(y.id, F);
                }
            }
          }
        }
        _setupDrapedRenderBatches() {
          this._style.updateDrapeFirstLayers();
          const t = this._style.order, s = t.length;
          if (s === 0)
            return;
          const h = [];
          this._pendingGroundEffectLayers = [];
          let _, y = 0, T = this._style._mergedLayers[t[y]];
          for (; !this._style.isLayerDraped(T) && T.isHidden(this.painter.transform.zoom) && ++y < s; )
            T = this._style._mergedLayers[t[y]];
          for (; y < s; ++y) {
            const z = this._style._mergedLayers[t[y]];
            z.isHidden(this.painter.transform.zoom) || (this._style.isLayerDraped(z) ? _ === void 0 && (_ = y) : (z.type === "fill-extrusion" && this._pendingGroundEffectLayers.push(y), _ !== void 0 && (h.push({ start: _, end: y - 1 }), _ = void 0)));
          }
          if (_ !== void 0 && h.push({ start: _, end: y - 1 }), h.length !== 0) {
            const z = h[h.length - 1];
            this._pendingGroundEffectLayers.every((R) => R > z.end) || i.w("fill-extrusion with flood lighting and/or ground ambient occlusion should be moved to be on top of all draped layers.");
          }
          this._drapedRenderBatches = h;
        }
        _setupRenderCache(t) {
          const s = this.proxySourceCache;
          if (this._shouldDisableRenderCache() || this.invalidateRenderCache) {
            if (this.invalidateRenderCache = !1, s.renderCache.length > s.renderCachePool.length) {
              const T = Object.values(s.proxyCachedFBO);
              s.proxyCachedFBO = {};
              for (let z = 0; z < T.length; ++z) {
                const R = Object.values(T[z]);
                s.renderCachePool.push(...R);
              }
            }
            return;
          }
          this._clearRasterLayersFromRenderCache();
          const h = this.proxyCoords, _ = this._tilesDirty;
          for (let T = h.length - 1; T >= 0; T--) {
            const z = h[T];
            if (s.getTileByID(z.key), s.proxyCachedFBO[z.key] !== void 0) {
              const R = t[z.key], F = this.proxyToSource[z.key];
              let N = 0;
              for (const G in F) {
                const Z = F[G], W = R[G];
                if (!W || W.length !== Z.length || Z.some((te, ee) => te !== W[ee] || _[G] && _[G].hasOwnProperty(te.key))) {
                  N = -1;
                  break;
                }
                ++N;
              }
              for (const G in s.proxyCachedFBO[z.key])
                s.renderCache[s.proxyCachedFBO[z.key][G]].dirty = N < 0 || N !== Object.values(R).length;
            }
          }
          const y = [...this._drapedRenderBatches];
          y.sort((T, z) => z.end - z.start - (T.end - T.start));
          for (const T of y)
            for (const z of h) {
              if (s.proxyCachedFBO[z.key])
                continue;
              let R = s.renderCachePool.pop();
              R === void 0 && s.renderCache.length < 50 && (R = s.renderCache.length, s.renderCache.push(this._createFBO())), R !== void 0 && (s.proxyCachedFBO[z.key] = {}, s.proxyCachedFBO[z.key][T.start] = R, s.renderCache[R].dirty = !0);
            }
          this._tilesDirty = {};
        }
        _setupStencil(t, s, h, _) {
          if (!_ || !this._sourceTilesOverlap[_.id])
            return void (this._overlapStencilType && (this._overlapStencilType = !1));
          const y = this.painter.context, T = y.gl;
          if (s.length <= 1)
            return void (this._overlapStencilType = !1);
          let z;
          if (h.isTileClipped())
            z = s.length, this._overlapStencilMode.test = { func: T.EQUAL, mask: 255 }, this._overlapStencilType = "Clip";
          else {
            if (!(s[0].overscaledZ > s[s.length - 1].overscaledZ))
              return void (this._overlapStencilType = !1);
            z = 1, this._overlapStencilMode.test = { func: T.GREATER, mask: 255 }, this._overlapStencilType = "Mask";
          }
          this._stencilRef + z > 255 && (y.clear({ stencil: 0 }), this._stencilRef = 0), this._stencilRef += z, this._overlapStencilMode.ref = this._stencilRef, h.isTileClipped() && this._renderTileClippingMasks(s, this._overlapStencilMode.ref);
        }
        clipOrMaskOverlapStencilType() {
          return this._overlapStencilType === "Clip" || this._overlapStencilType === "Mask";
        }
        stencilModeForRTTOverlap(t) {
          return this.renderingToTexture && this._overlapStencilType ? (this._overlapStencilType === "Clip" && (this._overlapStencilMode.ref = this.painter._tileClippingMaskIDs[t.key]), this._overlapStencilMode) : ci.disabled;
        }
        _renderTileClippingMasks(t, s) {
          const h = this.painter, _ = this.painter.context, y = _.gl;
          h._tileClippingMaskIDs = {}, _.setColorMode(bi.disabled), _.setDepthMode(Wt.disabled);
          const T = h.getOrCreateProgram("clippingMask");
          for (const z of t) {
            const R = h._tileClippingMaskIDs[z.key] = --s;
            T.draw(h, y.TRIANGLES, Wt.disabled, new ci({ func: y.ALWAYS, mask: 0 }, R, 255, y.KEEP, y.KEEP, y.REPLACE), bi.disabled, ti.disabled, nc(z.projMatrix), "$clipping", h.tileExtentBuffer, h.quadTriangleIndexBuffer, h.tileExtentSegments);
          }
        }
        pointCoordinate(t) {
          const s = this.painter.transform;
          if (t.x < 0 || t.x > s.width || t.y < 0 || t.y > s.height)
            return null;
          const h = [t.x, t.y, 1, 1];
          i.ab.vec4.transformMat4(h, h, s.pixelMatrixInverse), i.ab.vec4.scale(h, h, 1 / h[3]), h[0] /= s.worldSize, h[1] /= s.worldSize;
          const _ = s._camera.position, y = i.bH(1, s.center.lat), T = [_[0], _[1], _[2] / y, 0], z = i.ab.vec3.subtract([], h.slice(0, 3), T);
          i.ab.vec3.normalize(z, z);
          const R = this.raycast(T, z, this._exaggeration);
          return R !== null && R ? (i.ab.vec3.scaleAndAdd(T, T, z, R), T[3] = T[2], T[2] *= y, T) : null;
        }
        _setupProxiedCoordsForOrtho(t, s, h) {
          if (t.getSource() instanceof i.aJ)
            return this._setupProxiedCoordsForImageSource(t, s, h);
          this._findCoveringTileCache[t.id] = this._findCoveringTileCache[t.id] || {};
          const _ = this.proxiedCoords[t.id] = [], y = this.proxyCoords;
          for (let R = 0; R < y.length; R++) {
            const F = y[R], N = this._findTileCoveringTileID(F, t);
            if (N) {
              const G = this._createProxiedId(F, N, h[F.key] && h[F.key][t.id]);
              _.push(G), this.proxyToSource[F.key][t.id] = [G];
            }
          }
          let T = !1;
          const z = /* @__PURE__ */ new Set();
          for (let R = 0; R < s.length; R++) {
            const F = t.getTile(s[R]);
            if (!F || !F.hasData())
              continue;
            const N = this._findTileCoveringTileID(F.tileID, this.proxySourceCache);
            if (N && N.tileID.canonical.z !== F.tileID.canonical.z) {
              const G = this.proxyToSource[N.tileID.key][t.id], Z = this._createProxiedId(N.tileID, F, h[N.tileID.key] && h[N.tileID.key][t.id]);
              G ? G.splice(G.length - 1, 0, Z) : this.proxyToSource[N.tileID.key][t.id] = [Z];
              const W = this.proxyToSource[N.tileID.key][t.id];
              z.has(W) || z.add(W), _.push(Z), T = !0;
            }
          }
          if (this._sourceTilesOverlap[t.id] = T, T && this._debugParams.sortTilesHiZFirst)
            for (const R of z)
              R.sort((F, N) => N.overscaledZ - F.overscaledZ);
        }
        _setupProxiedCoordsForImageSource(t, s, h) {
          if (!t.getSource().loaded())
            return;
          const _ = this.proxiedCoords[t.id] = [], y = this.proxyCoords, T = t.getSource(), z = T.tileID;
          if (!z)
            return;
          const R = new i.P(z.x, z.y)._div(1 << z.z), F = T.coordinates.map(i.aa.fromLngLat).reduce((G, Z) => (G.min.x = Math.min(G.min.x, Z.x - R.x), G.min.y = Math.min(G.min.y, Z.y - R.y), G.max.x = Math.max(G.max.x, Z.x - R.x), G.max.y = Math.max(G.max.y, Z.y - R.y), G), { min: new i.P(Number.MAX_VALUE, Number.MAX_VALUE), max: new i.P(-Number.MAX_VALUE, -Number.MAX_VALUE) }), N = (G, Z) => {
            const W = G.wrap + G.canonical.x / (1 << G.canonical.z), te = G.canonical.y / (1 << G.canonical.z), ee = i.ag / (1 << G.canonical.z), se = Z.wrap + Z.canonical.x / (1 << Z.canonical.z), oe = Z.canonical.y / (1 << Z.canonical.z);
            return W + ee < se + F.min.x || W > se + F.max.x || te + ee < oe + F.min.y || te > oe + F.max.y;
          };
          for (let G = 0; G < y.length; G++) {
            const Z = y[G];
            for (let W = 0; W < s.length; W++) {
              const te = t.getTile(s[W]);
              if (!te || !te.hasData() || N(Z, te.tileID))
                continue;
              const ee = this._createProxiedId(Z, te, h[Z.key] && h[Z.key][t.id]), se = this.proxyToSource[Z.key][t.id];
              se ? se.push(ee) : this.proxyToSource[Z.key][t.id] = [ee], _.push(ee);
            }
          }
        }
        _createProxiedId(t, s, h) {
          let _ = this.orthoMatrix;
          if (h) {
            const y = h.find((T) => T.key === s.tileID.key);
            if (y)
              return y;
          }
          if (s.tileID.key !== t.key) {
            const y = t.canonical.z - s.tileID.canonical.z;
            let T, z, R;
            _ = i.ab.mat4.create();
            const F = s.tileID.wrap - t.wrap << t.overscaledZ;
            y > 0 ? (T = i.ag >> y, z = T * ((s.tileID.canonical.x << y) - t.canonical.x + F), R = T * ((s.tileID.canonical.y << y) - t.canonical.y)) : (T = i.ag << -y, z = i.ag * (s.tileID.canonical.x - (t.canonical.x + F << -y)), R = i.ag * (s.tileID.canonical.y - (t.canonical.y << -y))), i.ab.mat4.ortho(_, 0, T, 0, T, 0, 1), i.ab.mat4.translate(_, _, [z, R, 0]);
          }
          return new Qh(s.tileID, t.key, _);
        }
        _findTileCoveringTileID(t, s) {
          let h = s.getTile(t);
          if (h && h.hasData())
            return h;
          const _ = this._findCoveringTileCache[s.id], y = _[t.key];
          if (h = y ? s.getTileByID(y) : null, h && h.hasData() || y === null)
            return h;
          let T = h ? h.tileID : t, z = T.overscaledZ;
          const R = s.getSource().minzoom, F = [];
          if (!y) {
            const G = s.getSource().maxzoom;
            if (t.canonical.z >= G) {
              const Z = t.canonical.z - G;
              s.getSource().reparseOverscaled ? (z = Math.max(t.canonical.z + 2, s.transform.tileZoom), T = new i.aG(z, t.wrap, G, t.canonical.x >> Z, t.canonical.y >> Z)) : Z !== 0 && (z = G, T = new i.aG(z, t.wrap, G, t.canonical.x >> Z, t.canonical.y >> Z));
            }
            T.key !== t.key && (F.push(T.key), h = s.getTile(T));
          }
          const N = (G) => {
            F.forEach((Z) => {
              _[Z] = G;
            }), F.length = 0;
          };
          for (z -= 1; z >= R && (!h || !h.hasData()); z--) {
            h && N(h.tileID.key);
            const G = T.calculateScaledKey(z);
            if (h = s.getTileByID(G), h && h.hasData())
              break;
            const Z = _[G];
            if (Z === null)
              break;
            Z === void 0 ? F.push(G) : h = s.getTileByID(Z);
          }
          return N(h ? h.tileID.key : null), h && h.hasData() ? h : null;
        }
        findDEMTileFor(t) {
          return this.enabled ? this._findTileCoveringTileID(t, this.sourceCache) : null;
        }
        prepareDrawTile() {
          this.renderedToTile = !0;
        }
        _clearRenderCacheForTile(t, s) {
          let h = this._tilesDirty[t];
          h || (h = this._tilesDirty[t] = {}), h[s.key] = !0;
        }
      }
      function $f(c, t, s) {
        const h = function(z, R, F) {
          const N = i.ab.vec3.dot(R, z), G = i.ab.vec3.dot(F, [0.2126, 0.7152, 0.0722]), Z = (te, ee, se) => (1 - se) * te + se * ee, W = Z(1 - 0.3 * Math.min(G, 1), 1, Math.min(N + 1, 1));
          return Z(0.92, 1, Math.asin(i.aw(R[2], -1, 1)) / Math.PI + 0.5) * W;
        }(c, [0, 0, 1], t), _ = [0, 0, 0];
        i.ab.vec3.scale(_, s.slice(0, 3), h);
        const y = [0, 0, 0];
        i.ab.vec3.scale(y, t.slice(0, 3), c[2]);
        const T = [0, 0, 0];
        return i.ab.vec3.add(T, _, y), i.cf(T);
      }
      const Jc = ["fill", "fillOutline", "fillPattern", "line", "linePattern", "background", "backgroundPattern", "hillshade", "raster"], Jm = ["stars", "rainParticle", "snowParticle", "fillExtrusion", "fillExtrusionGroundEffect", "model", "symbol"];
      class Xf {
        static cacheKey(t, s, h, _) {
          let y = `${s}${_ ? _.cacheKey : ""}`;
          for (const T of h)
            t.usedDefines.includes(T) && (y += `/${T}`);
          return y;
        }
        constructor(t, s, h, _, y, T) {
          const z = t.gl;
          this.program = z.createProgram(), this.configuration = _, this.name = s, this.fixedDefines = [...T];
          const R = _ ? _.getBinderAttributes() : [], F = (h.staticAttributes || []).concat(R);
          let N = _ ? _.defines() : [];
          N = N.concat(T.map((se) => `#define ${se}`));
          const G = `#version 300 es
`;
          let Z = G + N.concat("precision mediump float;", Qr, Jl.fragmentSource).join(`
`);
          for (const se of h.fragmentIncludes)
            Z += `
${oo[se]}`;
          Z += `
${h.fragmentSource}`;
          let W = G + N.concat("precision highp float;", Qr, Jl.vertexSource).join(`
`);
          for (const se of h.vertexIncludes)
            W += `
${oo[se]}`;
          this.forceManualRenderingForInstanceIDShaders = t.forceManualRenderingForInstanceIDShaders && h.vertexSource.indexOf("gl_InstanceID") !== -1, this.forceManualRenderingForInstanceIDShaders && (W += `
uniform int u_instanceID;
`), W += `
${h.vertexSource}`, this.forceManualRenderingForInstanceIDShaders && (W = W.replaceAll("gl_InstanceID", "u_instanceID"));
          const te = z.createShader(z.FRAGMENT_SHADER);
          if (z.isContextLost())
            return void (this.failedToCreate = !0);
          z.shaderSource(te, Z), z.compileShader(te), z.attachShader(this.program, te);
          const ee = z.createShader(z.VERTEX_SHADER);
          if (z.isContextLost())
            this.failedToCreate = !0;
          else {
            z.shaderSource(ee, W), z.compileShader(ee), z.attachShader(this.program, ee), this.attributes = {}, this.numAttributes = F.length;
            for (let se = 0; se < this.numAttributes; se++)
              if (F[se]) {
                const oe = F[se].startsWith("a_") ? F[se] : `a_${F[se]}`;
                z.bindAttribLocation(this.program, se, oe), this.attributes[oe] = se;
              }
            z.linkProgram(this.program), z.deleteShader(ee), z.deleteShader(te), this.fixedUniforms = y(t), this.binderUniforms = _ ? _.getUniforms(t) : [], this.forceManualRenderingForInstanceIDShaders && (this.instancingUniforms = ((se) => ({ u_instanceID: new i.bN(se) }))(t)), (T.includes("TERRAIN") || s.indexOf("symbol") !== -1 || s.indexOf("circle") !== -1) && (this.terrainUniforms = ((se) => ({ u_dem: new i.bN(se), u_dem_prev: new i.bN(se), u_dem_tl: new i.bK(se), u_dem_scale: new i.bM(se), u_dem_tl_prev: new i.bK(se), u_dem_scale_prev: new i.bM(se), u_dem_size: new i.bM(se), u_dem_lerp: new i.bM(se), u_exaggeration: new i.bM(se), u_depth: new i.bN(se), u_depth_size_inv: new i.bK(se), u_depth_range_unpack: new i.bK(se), u_occluder_half_size: new i.bM(se), u_occlusion_depth_offset: new i.bM(se), u_meter_to_dem: new i.bM(se), u_label_plane_matrix_inv: new i.bJ(se) }))(t)), T.includes("GLOBE") && (this.globeUniforms = ((se) => ({ u_tile_tl_up: new i.bL(se), u_tile_tr_up: new i.bL(se), u_tile_br_up: new i.bL(se), u_tile_bl_up: new i.bL(se), u_tile_up_scale: new i.bM(se) }))(t)), T.includes("FOG") && (this.fogUniforms = ((se) => ({ u_fog_matrix: new i.bJ(se), u_fog_range: new i.bK(se), u_fog_color: new i.ca(se), u_fog_horizon_blend: new i.bM(se), u_fog_vertical_limit: new i.bK(se), u_fog_temporal_offset: new i.bM(se), u_frustum_tl: new i.bL(se), u_frustum_tr: new i.bL(se), u_frustum_br: new i.bL(se), u_frustum_bl: new i.bL(se), u_globe_pos: new i.bL(se), u_globe_radius: new i.bM(se), u_globe_transition: new i.bM(se), u_is_globe: new i.bN(se), u_viewport: new i.bK(se) }))(t)), T.includes("RENDER_CUTOFF") && (this.cutoffUniforms = ((se) => ({ u_cutoff_params: new i.ca(se) }))(t)), T.includes("LIGHTING_3D_MODE") && (this.lightsUniforms = ((se) => ({ u_lighting_ambient_color: new i.bL(se), u_lighting_directional_dir: new i.bL(se), u_lighting_directional_color: new i.bL(se), u_ground_radiance: new i.bL(se) }))(t)), T.includes("RENDER_SHADOWS") && (this.shadowUniforms = ((se) => ({ u_light_matrix_0: new i.bJ(se), u_light_matrix_1: new i.bJ(se), u_fade_range: new i.bK(se), u_shadow_normal_offset: new i.bL(se), u_shadow_intensity: new i.bM(se), u_shadow_texel_size: new i.bM(se), u_shadow_map_resolution: new i.bM(se), u_shadow_direction: new i.bL(se), u_shadow_bias: new i.bL(se), u_shadowmap_0: new i.bN(se), u_shadowmap_1: new i.bN(se) }))(t));
          }
        }
        setTerrainUniformValues(t, s) {
          if (!this.terrainUniforms)
            return;
          const h = this.terrainUniforms;
          if (!this.failedToCreate) {
            t.program.set(this.program);
            for (const _ in s)
              h[_] && h[_].set(this.program, _, s[_]);
          }
        }
        setGlobeUniformValues(t, s) {
          if (!this.globeUniforms)
            return;
          const h = this.globeUniforms;
          if (!this.failedToCreate) {
            t.program.set(this.program);
            for (const _ in s)
              h[_] && h[_].set(this.program, _, s[_]);
          }
        }
        setFogUniformValues(t, s) {
          if (!this.fogUniforms)
            return;
          const h = this.fogUniforms;
          if (!this.failedToCreate) {
            t.program.set(this.program);
            for (const _ in s)
              h[_].set(this.program, _, s[_]);
          }
        }
        setCutoffUniformValues(t, s) {
          if (!this.cutoffUniforms)
            return;
          const h = this.cutoffUniforms;
          if (!this.failedToCreate) {
            t.program.set(this.program);
            for (const _ in s)
              h[_].set(this.program, _, s[_]);
          }
        }
        setLightsUniformValues(t, s) {
          if (!this.lightsUniforms)
            return;
          const h = this.lightsUniforms;
          if (!this.failedToCreate) {
            t.program.set(this.program);
            for (const _ in s)
              h[_].set(this.program, _, s[_]);
          }
        }
        setShadowUniformValues(t, s) {
          if (this.failedToCreate || !this.shadowUniforms)
            return;
          const h = this.shadowUniforms;
          t.program.set(this.program);
          for (const _ in s)
            h[_].set(this.program, _, s[_]);
        }
        _drawDebugWireframe(t, s, h, _, y, T, z, R, F, N) {
          const G = t.options.wireframe;
          if (G.terrain === !1 && G.layers2D === !1 && G.layers3D === !1)
            return;
          const Z = t.context;
          if (!(() => !(!G.terrain || this.name !== "terrainRaster" && this.name !== "globeRaster") || !(!G.layers2D || t._terrain && t._terrain.renderingToTexture || !Jc.includes(this.name)) || !(!G.layers3D || !Jm.includes(this.name)))())
            return;
          const W = Z.gl, te = t.wireframeDebugCache.getLinesFromTrianglesBuffer(t.frameCounter, y, Z);
          if (!te)
            return;
          const ee = [...this.fixedDefines];
          ee.push("DEBUG_WIREFRAME");
          const se = t.getOrCreateProgram(this.name, { config: this.configuration, defines: ee });
          Z.program.set(se.program);
          const oe = (pe, Me, xe) => {
            if (Me[pe] && xe[pe])
              for (const we in Me[pe])
                xe[pe][we] && xe[pe][we].set(xe.program, we, Me[pe][we].current);
          };
          F && F.setUniforms(se.program, Z, se.binderUniforms, z, { zoom: R }), oe("fixedUniforms", this, se), oe("terrainUniforms", this, se), oe("globeUniforms", this, se), oe("fogUniforms", this, se), oe("lightsUniforms", this, se), oe("shadowUniforms", this, se), te.bind(), Z.setColorMode(new bi([W.ONE, W.ONE_MINUS_SRC_ALPHA, W.ZERO, W.ONE], i.aj.transparent, [!0, !0, !0, !1])), Z.setDepthMode(new Wt(s.func === W.LESS ? W.LEQUAL : s.func, Wt.ReadOnly, s.range)), Z.setStencilMode(ci.disabled);
          const he = 3 * T.primitiveLength * 2, _e = 3 * T.primitiveOffset * 2 * 2;
          if (this.forceManualRenderingForInstanceIDShaders) {
            const pe = N || 1;
            for (let Me = 0; Me < pe; ++Me)
              se.instancingUniforms.u_instanceID.set(this.program, "u_instanceID", Me), W.drawElements(W.LINES, he, W.UNSIGNED_SHORT, _e);
          } else
            N && N > 1 ? W.drawElementsInstanced(W.LINES, he, W.UNSIGNED_SHORT, _e, N) : W.drawElements(W.LINES, he, W.UNSIGNED_SHORT, _e);
          y.bind(), Z.program.set(this.program), Z.setDepthMode(s), Z.setStencilMode(h), Z.setColorMode(_);
        }
        checkUniforms(t, s, h) {
          if (this.fixedDefines.includes(s)) {
            for (const _ of Object.keys(h))
              if (!h[_].initialized)
                throw new Error(`Program '${this.name}', from draw '${t}': uniform ${_} not set but required by ${s} being defined`);
          }
        }
        draw(t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se) {
          const oe = t.context, he = oe.gl;
          if (this.failedToCreate)
            return;
          oe.program.set(this.program), oe.setDepthMode(h), oe.setStencilMode(_), oe.setColorMode(y), oe.setCullFace(T);
          for (const Me of Object.keys(this.fixedUniforms))
            this.fixedUniforms[Me].set(this.program, Me, z[Me]);
          te && te.setUniforms(this.program, oe, this.binderUniforms, Z, { zoom: W });
          const _e = { [he.POINTS]: 1, [he.LINES]: 2, [he.TRIANGLES]: 3, [he.LINE_STRIP]: 1 }[s];
          this.checkUniforms(R, "RENDER_SHADOWS", this.shadowUniforms);
          const pe = se && se > 0 ? 1 : void 0;
          for (const Me of G.get()) {
            const xe = Me.vaos || (Me.vaos = {});
            if ((xe[R] || (xe[R] = new qh())).bind(oe, this, F, te ? te.getPaintVertexBuffers() : [], N, Me.vertexOffset, ee || [], pe), this.forceManualRenderingForInstanceIDShaders) {
              const we = se || 1;
              for (let ve = 0; ve < we; ++ve)
                this.instancingUniforms.u_instanceID.set(this.program, "u_instanceID", ve), N ? he.drawElements(s, Me.primitiveLength * _e, he.UNSIGNED_SHORT, Me.primitiveOffset * _e * 2) : he.drawArrays(s, Me.vertexOffset, Me.vertexLength);
            } else
              se && se > 1 ? he.drawElementsInstanced(s, Me.primitiveLength * _e, he.UNSIGNED_SHORT, Me.primitiveOffset * _e * 2, se) : N ? he.drawElements(s, Me.primitiveLength * _e, he.UNSIGNED_SHORT, Me.primitiveOffset * _e * 2) : he.drawArrays(s, Me.vertexOffset, Me.vertexLength);
            s === he.TRIANGLES && N && this._drawDebugWireframe(t, h, _, y, N, Me, Z, W, te, se);
          }
        }
      }
      function ld(c, t) {
        const s = Math.pow(2, t.tileID.overscaledZ), h = t.tileSize * Math.pow(2, c.transform.tileZoom) / s, _ = h * (t.tileID.canonical.x + t.tileID.wrap * s), y = h * t.tileID.canonical.y;
        return { u_image: 0, u_texsize: t.imageAtlasTexture ? t.imageAtlasTexture.size : [0, 0], u_tile_units_to_pixels: 1 / i.ar(t, 1, c.transform.tileZoom), u_pixel_coord_upper: [_ >> 16, y >> 16], u_pixel_coord_lower: [65535 & _, 65535 & y] };
      }
      const eu = { terrain: 0, flat: 1 }, cd = i.ab.mat4.create(), tu = (c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe) => {
        const he = t.style.light, _e = he.properties.get("position"), pe = [_e.x, _e.y, _e.z], Me = i.ab.mat3.create();
        he.properties.get("anchor") === "viewport" && (i.ab.mat3.fromRotation(Me, -t.transform.angle), i.ab.vec3.transformMat3(pe, pe, Me));
        const xe = he.properties.get("color"), we = t.transform, ve = { u_matrix: c, u_lightpos: pe, u_lightintensity: he.properties.get("intensity"), u_lightcolor: [xe.r, xe.g, xe.b], u_vertical_gradient: +s, u_opacity: h, u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_inv_rot_matrix: cd, u_merc_center: [0, 0], u_up_dir: [0, 0, 0], u_height_lift: 0, u_height_type: eu[F], u_base_type: eu[N], u_ao: _, u_edge_radius: y, u_width_scale: T, u_flood_light_color: te, u_vertical_scale: ee, u_flood_light_intensity: se, u_ground_shadow_factor: oe };
        return we.projection.name === "globe" && (ve.u_tile_id = [z.canonical.x, z.canonical.y, 1 << z.canonical.z], ve.u_zoom_transition = G, ve.u_inv_rot_matrix = W, ve.u_merc_center = Z, ve.u_up_dir = we.projection.upVector(new i.bT(0, 0, 0), Z[0] * i.ag, Z[1] * i.ag), ve.u_height_lift = R), ve;
      }, Qc = (c, t, s, h, _, y) => ({ u_matrix: c, u_edge_radius: t, u_width_scale: s, u_vertical_scale: h, u_height_type: eu[_], u_base_type: eu[y] }), hd = (c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se) => {
        const oe = tu(c, t, s, h, _, y, T, z, F, N, G, Z, W, te, ee, se, 1, [0, 0, 0]), he = { u_height_factor: -Math.pow(2, z.overscaledZ) / R.tileSize / 8 };
        return i.l(oe, ld(t, R), he);
      }, sc = (c, t) => ({ u_matrix: c, u_emissive_strength: t }), ud = (c, t, s, h) => i.l(sc(c, t), ld(s, h)), iu = (c, t, s) => ({ u_matrix: c, u_world: s, u_emissive_strength: t }), nu = (c, t, s, h, _) => i.l(ud(c, t, s, h), { u_world: _ }), dd = (c, t, s, h) => {
        const _ = i.ag / s.tileSize;
        return { u_matrix: c, u_camera_to_center_distance: t.getCameraToCenterDistance(h), u_extrude_scale: [t.pixelsToGLUnits[0] / _, t.pixelsToGLUnits[1] / _] };
      }, fd = (c, t, s = 1) => ({ u_matrix: c, u_color: t.toRenderColor(null), u_overlay: 0, u_overlay_scale: s }), Qm = i.ab.mat4.create(), rc = (c, t, s, h, _, y, T) => {
        const z = c.transform, R = z.projection.name === "globe", F = R ? i.cN(z.zoom, t.canonical) * z._pixelsPerMercatorPixel : i.ar(s, 1, y), N = { u_matrix: t.projMatrix, u_extrude_scale: F, u_intensity: T, u_inv_rot_matrix: Qm, u_merc_center: [0, 0], u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_up_dir: [0, 0, 0] };
        if (R) {
          N.u_inv_rot_matrix = h, N.u_merc_center = _, N.u_tile_id = [t.canonical.x, t.canonical.y, 1 << t.canonical.z], N.u_zoom_transition = i.ae(z.zoom);
          const G = _[0] * i.ag, Z = _[1] * i.ag;
          N.u_up_dir = z.projection.upVector(new i.bT(0, 0, 0), G, Z);
        }
        return N;
      };
      function eh(c, [t, s, h, _], [y, T]) {
        if (y === T)
          return [0, 0, 0, 0];
        const z = 255 * (c - 1) / (c * (T - y));
        return [t * z, s * z, h * z, _ * z];
      }
      function Ft(c, t, [s, h]) {
        return s === h ? 0 : 0.5 / c + (t - s) * (c - 1) / (c * (h - s));
      }
      const pd = (c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe, he, _e, pe) => ({ u_matrix: c, u_normalize_matrix: t, u_globe_matrix: s, u_merc_matrix: h, u_grid_matrix: _, u_tl_parent: y, u_scale_parent: F, u_fade_t: N.mix, u_opacity: N.opacity * G.paint.get("raster-opacity"), u_image0: 0, u_image1: 1, u_brightness_low: G.paint.get("raster-brightness-min"), u_brightness_high: G.paint.get("raster-brightness-max"), u_saturation_factor: i.cO(G.paint.get("raster-saturation")), u_contrast_factor: i.cP(G.paint.get("raster-contrast")), u_spin_weights: Yf(G.paint.get("raster-hue-rotate")), u_perspective_transform: Z, u_raster_elevation: W, u_zoom_transition: T, u_merc_center: z, u_cutoff_params: R, u_colorization_mix: eh(i.cQ, ee, oe), u_colorization_offset: Ft(i.cQ, se, oe), u_color_ramp: te, u_texture_offset: [_e / (he + 2 * _e), he / (he + 2 * _e)], u_texture_res: [he + 2 * _e, he + 2 * _e], u_emissive_strength: pe });
      function Yf(c) {
        c *= Math.PI / 180;
        const t = Math.sin(c), s = Math.cos(c);
        return [(2 * s + 1) / 3, (-Math.sqrt(3) * t - s + 1) / 3, (Math.sqrt(3) * t - s + 1) / 3];
      }
      const lo = 0.05, Tl = (c, t, s, h, _, y, T, z, R, F, N, G) => ({ u_matrix: c, u_normalize_matrix: t, u_globe_matrix: s, u_merc_matrix: h, u_grid_matrix: _, u_tl_parent: y, u_scale_parent: F, u_fade_t: N.mix, u_opacity: N.opacity, u_image0: 0, u_image1: 1, u_raster_elevation: G, u_zoom_transition: T, u_merc_center: z, u_cutoff_params: R }), Zt = (c, t, s, h, _, y, T, z, R, F) => ({ u_particle_texture: c, u_particle_texture_side_len: t, u_tile_offset: s, u_velocity: h, u_color_ramp: y, u_velocity_res: _, u_max_speed: T, u_uv_offset: z, u_data_scale: [255 * R[0], 255 * R[1]], u_data_offset: F, u_particle_pos_scale: 1.1, u_particle_pos_offset: [lo, lo] }), md = (c, t, s, h, _, y, T, z, R, F) => ({ u_particle_texture: c, u_particle_texture_side_len: t, u_velocity: s, u_velocity_res: h, u_max_speed: _, u_speed_factor: y, u_reset_rate: T, u_rand_seed: Math.random(), u_uv_offset: z, u_data_scale: [255 * R[0], 255 * R[1]], u_data_offset: F, u_particle_pos_scale: 1.1, u_particle_pos_offset: [lo, lo] }), Kf = i.ab.mat4.create(), Jf = (c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe, he, _e, pe, Me) => {
        const xe = _.transform, we = { u_is_size_zoom_constant: +(c === "constant" || c === "source"), u_is_size_feature_constant: +(c === "constant" || c === "camera"), u_size_t: t ? t.uSizeT : 0, u_size: t ? t.uSize : 0, u_camera_to_center_distance: xe.getCameraToCenterDistance(he), u_rotate_symbol: +s, u_aspect_ratio: xe.width / xe.height, u_fade_change: _.options.fadeDuration ? _.symbolFadeChange : 1, u_matrix: y, u_label_plane_matrix: T, u_coord_matrix: z, u_is_text: +F, u_elevation_from_sea: R ? 1 : 0, u_pitch_with_map: +h, u_texsize: N, u_texsize_icon: G, u_texture: 0, u_texture_icon: 1, u_tile_id: [0, 0, 0], u_zoom_transition: 0, u_inv_rot_matrix: Kf, u_merc_center: [0, 0], u_camera_forward: [0, 0, 0], u_ecef_origin: [0, 0, 0], u_tile_matrix: Kf, u_up_vector: [0, -1, 0], u_color_adj_mat: _e, u_icon_transition: pe || 0, u_gamma_scale: h ? _.transform.getCameraToCenterDistance(he) * Math.cos(_.terrain ? 0 : _.transform._pitch) : 1, u_device_pixel_ratio: i.q.devicePixelRatio, u_is_halo: +Z, u_scale_factor: Me || 1 };
        return he.name === "globe" && (we.u_tile_id = [W.canonical.x, W.canonical.y, 1 << W.canonical.z], we.u_zoom_transition = te, we.u_inv_rot_matrix = se, we.u_merc_center = ee, we.u_camera_forward = xe._camera.forward(), we.u_ecef_origin = i.cR(xe.globeMatrix, W.toUnwrapped()), we.u_tile_matrix = Float32Array.from(xe.globeMatrix), we.u_up_vector = oe), we;
      }, su = (c, t, s, h) => ({ u_matrix: c, u_emissive_strength: t, u_opacity: s, u_color: h }), _d = (c, t, s, h, _, y, T, z, R) => i.l(function(F, N, G, Z, W, te) {
        const { width: ee, height: se } = Z.imageManager.getPixelSize(N), oe = Math.pow(2, te.tileID.overscaledZ), he = te.tileSize * Math.pow(2, Z.transform.tileZoom) / oe, _e = he * (te.tileID.canonical.x + te.tileID.wrap * oe), pe = he * te.tileID.canonical.y;
        return { u_image: 0, u_pattern_tl: G.tl, u_pattern_br: G.br, u_texsize: [ee, se], u_pattern_size: G.displaySize, u_pattern_units_to_pixels: W ? [Z.transform.width, -1 * Z.transform.height] : [1 / i.ar(te, 1, Z.transform.tileZoom), 1 / i.ar(te, 1, Z.transform.tileZoom)], u_pixel_coord_upper: [_e >> 16, pe >> 16], u_pixel_coord_lower: [65535 & _e, 65535 & pe] };
      }(0, y, T, h, z, R), { u_matrix: c, u_emissive_strength: t, u_opacity: s }), ru = new Float32Array(i.ab.mat4.identity([])), gd = (c, t, s, h, _, y, T, z, R, F, N, G, Z, W = [0, 0, 0], te) => {
        const ee = _.style.light, se = ee.properties.get("position"), oe = [-se.x, -se.y, se.z], he = i.ab.mat3.create();
        ee.properties.get("anchor") === "viewport" && (i.ab.mat3.fromRotation(he, -_.transform.angle), i.ab.vec3.transformMat3(oe, oe, he));
        const _e = N.alphaMode === "MASK", pe = ee.properties.get("color").toRenderColor(null), Me = Z.paint.get("model-ambient-occlusion-intensity"), xe = Z.paint.get("model-color").constantOr(i.aj.white).toRenderColor(null), we = Z.paint.get("model-color-mix-intensity").constantOr(0);
        return { u_matrix: c, u_lighting_matrix: t, u_normal_matrix: s, u_node_matrix: h || ru, u_lightpos: oe, u_lightintensity: ee.properties.get("intensity"), u_lightcolor: [pe.r, pe.g, pe.b], u_camera_pos: W, u_opacity: y, u_baseTextureIsAlpha: 0, u_alphaMask: +_e, u_alphaCutoff: N.alphaCutoff, u_baseColorFactor: [T.r, T.g, T.b, T.a], u_emissiveFactor: [z[0], z[1], z[2], 1], u_metallicFactor: R, u_roughnessFactor: F, u_baseColorTexture: bs.BaseColor, u_metallicRoughnessTexture: bs.MetallicRoughness, u_normalTexture: bs.Normal, u_occlusionTexture: bs.Occlusion, u_emissionTexture: bs.Emission, u_lutTexture: bs.LUT, u_color_mix: [xe.r, xe.g, xe.b, we], u_aoIntensity: Me, u_emissive_strength: G, u_occlusionTextureTransform: te || [0, 0, 0, 0] };
      }, Qf = (c, t = ru, s = ru) => ({ u_matrix: c, u_instance: t, u_node_matrix: s }), yd = { fillExtrusion: (c) => ({ u_matrix: new i.bJ(c), u_lightpos: new i.bL(c), u_lightintensity: new i.bM(c), u_lightcolor: new i.bL(c), u_vertical_gradient: new i.bM(c), u_opacity: new i.bM(c), u_edge_radius: new i.bM(c), u_width_scale: new i.bM(c), u_ao: new i.bK(c), u_height_type: new i.bN(c), u_base_type: new i.bN(c), u_tile_id: new i.bL(c), u_zoom_transition: new i.bM(c), u_inv_rot_matrix: new i.bJ(c), u_merc_center: new i.bK(c), u_up_dir: new i.bL(c), u_height_lift: new i.bM(c), u_flood_light_color: new i.bL(c), u_vertical_scale: new i.bM(c), u_flood_light_intensity: new i.bM(c), u_ground_shadow_factor: new i.bL(c) }), fillExtrusionDepth: (c) => ({ u_matrix: new i.bJ(c), u_edge_radius: new i.bM(c), u_width_scale: new i.bM(c), u_vertical_scale: new i.bM(c), u_height_type: new i.bN(c), u_base_type: new i.bN(c) }), fillExtrusionPattern: (c) => ({ u_matrix: new i.bJ(c), u_lightpos: new i.bL(c), u_lightintensity: new i.bM(c), u_lightcolor: new i.bL(c), u_vertical_gradient: new i.bM(c), u_height_factor: new i.bM(c), u_edge_radius: new i.bM(c), u_width_scale: new i.bM(c), u_ao: new i.bK(c), u_height_type: new i.bN(c), u_base_type: new i.bN(c), u_tile_id: new i.bL(c), u_zoom_transition: new i.bM(c), u_inv_rot_matrix: new i.bJ(c), u_merc_center: new i.bK(c), u_up_dir: new i.bL(c), u_height_lift: new i.bM(c), u_image: new i.bN(c), u_texsize: new i.bK(c), u_pixel_coord_upper: new i.bK(c), u_pixel_coord_lower: new i.bK(c), u_tile_units_to_pixels: new i.bM(c), u_opacity: new i.bM(c) }), fillExtrusionGroundEffect: (c) => ({ u_matrix: new i.bJ(c), u_opacity: new i.bM(c), u_ao_pass: new i.bM(c), u_meter_to_tile: new i.bM(c), u_ao: new i.bK(c), u_flood_light_intensity: new i.bM(c), u_flood_light_color: new i.bL(c), u_attenuation: new i.bM(c), u_edge_radius: new i.bM(c), u_fb: new i.bN(c), u_fb_size: new i.bM(c), u_dynamic_offset: new i.bM(c) }), fill: (c) => ({ u_matrix: new i.bJ(c), u_emissive_strength: new i.bM(c) }), fillPattern: (c) => ({ u_matrix: new i.bJ(c), u_emissive_strength: new i.bM(c), u_image: new i.bN(c), u_texsize: new i.bK(c), u_pixel_coord_upper: new i.bK(c), u_pixel_coord_lower: new i.bK(c), u_tile_units_to_pixels: new i.bM(c) }), fillOutline: (c) => ({ u_matrix: new i.bJ(c), u_emissive_strength: new i.bM(c), u_world: new i.bK(c) }), fillOutlinePattern: (c) => ({ u_matrix: new i.bJ(c), u_emissive_strength: new i.bM(c), u_world: new i.bK(c), u_image: new i.bN(c), u_texsize: new i.bK(c), u_pixel_coord_upper: new i.bK(c), u_pixel_coord_lower: new i.bK(c), u_tile_units_to_pixels: new i.bM(c) }), circle: i.cS, collisionBox: (c) => ({ u_matrix: new i.bJ(c), u_camera_to_center_distance: new i.bM(c), u_extrude_scale: new i.bK(c) }), collisionCircle: (c) => ({ u_matrix: new i.bJ(c), u_inv_matrix: new i.bJ(c), u_camera_to_center_distance: new i.bM(c), u_viewport_size: new i.bK(c) }), debug: (c) => ({ u_color: new i.cz(c), u_matrix: new i.bJ(c), u_overlay: new i.bN(c), u_overlay_scale: new i.bM(c) }), clippingMask: (c) => ({ u_matrix: new i.bJ(c) }), heatmap: (c) => ({ u_extrude_scale: new i.bM(c), u_intensity: new i.bM(c), u_matrix: new i.bJ(c), u_inv_rot_matrix: new i.bJ(c), u_merc_center: new i.bK(c), u_tile_id: new i.bL(c), u_zoom_transition: new i.bM(c), u_up_dir: new i.bL(c) }), heatmapTexture: (c) => ({ u_image: new i.bN(c), u_color_ramp: new i.bN(c), u_opacity: new i.bM(c) }), hillshade: (c) => ({ u_matrix: new i.bJ(c), u_image: new i.bN(c), u_latrange: new i.bK(c), u_light: new i.bK(c), u_shadow: new i.cz(c), u_highlight: new i.cz(c), u_emissive_strength: new i.bM(c), u_accent: new i.cz(c) }), hillshadePrepare: (c) => ({ u_matrix: new i.bJ(c), u_image: new i.bN(c), u_dimension: new i.bK(c), u_zoom: new i.bM(c) }), line: i.cT, linePattern: i.cU, raster: (c) => ({ u_matrix: new i.bJ(c), u_normalize_matrix: new i.bJ(c), u_globe_matrix: new i.bJ(c), u_merc_matrix: new i.bJ(c), u_grid_matrix: new i.cA(c), u_tl_parent: new i.bK(c), u_scale_parent: new i.bM(c), u_fade_t: new i.bM(c), u_opacity: new i.bM(c), u_image0: new i.bN(c), u_image1: new i.bN(c), u_brightness_low: new i.bM(c), u_brightness_high: new i.bM(c), u_saturation_factor: new i.bM(c), u_contrast_factor: new i.bM(c), u_spin_weights: new i.bL(c), u_perspective_transform: new i.bK(c), u_raster_elevation: new i.bM(c), u_zoom_transition: new i.bM(c), u_merc_center: new i.bK(c), u_cutoff_params: new i.ca(c), u_colorization_mix: new i.ca(c), u_colorization_offset: new i.bM(c), u_color_ramp: new i.bN(c), u_texture_offset: new i.bK(c), u_texture_res: new i.bK(c), u_emissive_strength: new i.bM(c) }), rasterParticle: (c) => ({ u_matrix: new i.bJ(c), u_normalize_matrix: new i.bJ(c), u_globe_matrix: new i.bJ(c), u_merc_matrix: new i.bJ(c), u_grid_matrix: new i.cA(c), u_tl_parent: new i.bK(c), u_scale_parent: new i.bM(c), u_fade_t: new i.bM(c), u_opacity: new i.bM(c), u_image0: new i.bN(c), u_image1: new i.bN(c), u_raster_elevation: new i.bM(c), u_zoom_transition: new i.bM(c), u_merc_center: new i.bK(c), u_cutoff_params: new i.ca(c) }), rasterParticleTexture: (c) => ({ u_texture: new i.bN(c), u_opacity: new i.bM(c) }), rasterParticleDraw: (c) => ({ u_particle_texture: new i.bN(c), u_particle_texture_side_len: new i.bM(c), u_tile_offset: new i.bK(c), u_velocity: new i.bN(c), u_color_ramp: new i.bN(c), u_velocity_res: new i.bK(c), u_max_speed: new i.bM(c), u_uv_offset: new i.bK(c), u_data_scale: new i.bK(c), u_data_offset: new i.bM(c), u_particle_pos_scale: new i.bM(c), u_particle_pos_offset: new i.bK(c) }), rasterParticleUpdate: (c) => ({ u_particle_texture: new i.bN(c), u_particle_texture_side_len: new i.bM(c), u_velocity: new i.bN(c), u_velocity_res: new i.bK(c), u_max_speed: new i.bM(c), u_speed_factor: new i.bM(c), u_reset_rate: new i.bM(c), u_rand_seed: new i.bM(c), u_uv_offset: new i.bK(c), u_data_scale: new i.bK(c), u_data_offset: new i.bM(c), u_particle_pos_scale: new i.bM(c), u_particle_pos_offset: new i.bK(c) }), symbol: (c) => ({ u_is_size_zoom_constant: new i.bN(c), u_is_size_feature_constant: new i.bN(c), u_size_t: new i.bM(c), u_size: new i.bM(c), u_camera_to_center_distance: new i.bM(c), u_rotate_symbol: new i.bN(c), u_aspect_ratio: new i.bM(c), u_fade_change: new i.bM(c), u_matrix: new i.bJ(c), u_label_plane_matrix: new i.bJ(c), u_coord_matrix: new i.bJ(c), u_is_text: new i.bN(c), u_elevation_from_sea: new i.bN(c), u_pitch_with_map: new i.bN(c), u_texsize: new i.bK(c), u_texsize_icon: new i.bK(c), u_texture: new i.bN(c), u_texture_icon: new i.bN(c), u_gamma_scale: new i.bM(c), u_device_pixel_ratio: new i.bM(c), u_tile_id: new i.bL(c), u_zoom_transition: new i.bM(c), u_inv_rot_matrix: new i.bJ(c), u_merc_center: new i.bK(c), u_camera_forward: new i.bL(c), u_tile_matrix: new i.bJ(c), u_up_vector: new i.bL(c), u_ecef_origin: new i.bL(c), u_is_halo: new i.bN(c), u_icon_transition: new i.bM(c), u_color_adj_mat: new i.bJ(c), u_scale_factor: new i.bM(c) }), background: (c) => ({ u_matrix: new i.bJ(c), u_emissive_strength: new i.bM(c), u_opacity: new i.bM(c), u_color: new i.cz(c) }), backgroundPattern: (c) => ({ u_matrix: new i.bJ(c), u_emissive_strength: new i.bM(c), u_opacity: new i.bM(c), u_image: new i.bN(c), u_pattern_tl: new i.bK(c), u_pattern_br: new i.bK(c), u_texsize: new i.bK(c), u_pattern_size: new i.bK(c), u_pixel_coord_upper: new i.bK(c), u_pixel_coord_lower: new i.bK(c), u_pattern_units_to_pixels: new i.bK(c) }), terrainRaster: (c) => ({ u_matrix: new i.bJ(c), u_image0: new i.bN(c), u_skirt_height: new i.bM(c), u_ground_shadow_factor: new i.bL(c) }), skybox: (c) => ({ u_matrix: new i.bJ(c), u_sun_direction: new i.bL(c), u_cubemap: new i.bN(c), u_opacity: new i.bM(c), u_temporal_offset: new i.bM(c) }), skyboxGradient: (c) => ({ u_matrix: new i.bJ(c), u_color_ramp: new i.bN(c), u_center_direction: new i.bL(c), u_radius: new i.bM(c), u_opacity: new i.bM(c), u_temporal_offset: new i.bM(c) }), skyboxCapture: (c) => ({ u_matrix_3f: new i.cA(c), u_sun_direction: new i.bL(c), u_sun_intensity: new i.bM(c), u_color_tint_r: new i.ca(c), u_color_tint_m: new i.ca(c), u_luminance: new i.bM(c) }), globeRaster: (c) => ({ u_proj_matrix: new i.bJ(c), u_globe_matrix: new i.bJ(c), u_normalize_matrix: new i.bJ(c), u_merc_matrix: new i.bJ(c), u_zoom_transition: new i.bM(c), u_merc_center: new i.bK(c), u_image0: new i.bN(c), u_grid_matrix: new i.cA(c), u_skirt_height: new i.bM(c), u_far_z_cutoff: new i.bM(c), u_frustum_tl: new i.bL(c), u_frustum_tr: new i.bL(c), u_frustum_br: new i.bL(c), u_frustum_bl: new i.bL(c), u_globe_pos: new i.bL(c), u_globe_radius: new i.bM(c), u_viewport: new i.bK(c) }), globeAtmosphere: (c) => ({ u_frustum_tl: new i.bL(c), u_frustum_tr: new i.bL(c), u_frustum_br: new i.bL(c), u_frustum_bl: new i.bL(c), u_horizon: new i.bM(c), u_transition: new i.bM(c), u_fadeout_range: new i.bM(c), u_color: new i.ca(c), u_high_color: new i.ca(c), u_space_color: new i.ca(c), u_temporal_offset: new i.bM(c), u_horizon_angle: new i.bM(c) }), model: (c) => ({ u_matrix: new i.bJ(c), u_lighting_matrix: new i.bJ(c), u_normal_matrix: new i.bJ(c), u_node_matrix: new i.bJ(c), u_lightpos: new i.bL(c), u_lightintensity: new i.bM(c), u_lightcolor: new i.bL(c), u_camera_pos: new i.bL(c), u_opacity: new i.bM(c), u_baseColorFactor: new i.ca(c), u_emissiveFactor: new i.ca(c), u_metallicFactor: new i.bM(c), u_roughnessFactor: new i.bM(c), u_baseTextureIsAlpha: new i.bN(c), u_alphaMask: new i.bN(c), u_alphaCutoff: new i.bM(c), u_baseColorTexture: new i.bN(c), u_metallicRoughnessTexture: new i.bN(c), u_normalTexture: new i.bN(c), u_occlusionTexture: new i.bN(c), u_emissionTexture: new i.bN(c), u_lutTexture: new i.bN(c), u_color_mix: new i.ca(c), u_aoIntensity: new i.bM(c), u_emissive_strength: new i.bM(c), u_occlusionTextureTransform: new i.ca(c) }), modelDepth: (c) => ({ u_matrix: new i.bJ(c), u_instance: new i.bJ(c), u_node_matrix: new i.bJ(c) }), groundShadow: (c) => ({ u_matrix: new i.bJ(c), u_ground_shadow_factor: new i.bL(c) }), stars: (c) => ({ u_matrix: new i.bJ(c), u_up: new i.bL(c), u_right: new i.bL(c), u_intensity_multiplier: new i.bM(c) }), snowParticle: (c) => ({ u_modelview: new i.bJ(c), u_projection: new i.bJ(c), u_time: new i.bM(c), u_cam_pos: new i.bL(c), u_velocityConeAperture: new i.bM(c), u_velocity: new i.bM(c), u_horizontalOscillationRadius: new i.bM(c), u_horizontalOscillationRate: new i.bM(c), u_boxSize: new i.bM(c), u_billboardSize: new i.bM(c), u_simpleShapeParameters: new i.bK(c), u_screenSize: new i.bK(c), u_thinningCenterPos: new i.bK(c), u_thinningShape: new i.bL(c), u_thinningAffectedRatio: new i.bM(c), u_thinningParticleOffset: new i.bM(c), u_particleColor: new i.ca(c), u_direction: new i.bL(c) }), rainParticle: (c) => ({ u_modelview: new i.bJ(c), u_projection: new i.bJ(c), u_time: new i.bM(c), u_cam_pos: new i.bL(c), u_texScreen: new i.bN(c), u_velocityConeAperture: new i.bM(c), u_velocity: new i.bM(c), u_boxSize: new i.bM(c), u_rainDropletSize: new i.bK(c), u_distortionStrength: new i.bM(c), u_rainDirection: new i.bL(c), u_color: new i.ca(c), u_screenSize: new i.bK(c), u_thinningCenterPos: new i.bK(c), u_thinningShape: new i.bL(c), u_thinningAffectedRatio: new i.bM(c), u_thinningParticleOffset: new i.bM(c), u_shapeDirectionalPower: new i.bM(c), u_shapeNormalPower: new i.bM(c), u_mode: new i.bM(c) }), vignette: (c) => ({ u_vignetteShape: new i.bL(c), u_vignetteColor: new i.ca(c) }), occlusion: (c) => ({ u_matrix: new i.bJ(c), u_anchorPos: new i.bL(c), u_screenSizePx: new i.bK(c), u_occluderSizePx: new i.bK(c), u_color: new i.ca(c) }) };
      class ea {
        constructor(t, s, h, _) {
          this.id = ea.uniqueIdxCounter, ea.uniqueIdxCounter++, this.context = t;
          const y = t.gl;
          this.buffer = y.createBuffer(), this.dynamicDraw = !!h, this.context.unbindVAO(), t.bindElementBuffer.set(this.buffer), y.bufferData(y.ELEMENT_ARRAY_BUFFER, s.arrayBuffer, this.dynamicDraw ? y.DYNAMIC_DRAW : y.STATIC_DRAW), this.dynamicDraw || _ || s.destroy();
        }
        bind() {
          this.context.bindElementBuffer.set(this.buffer);
        }
        updateData(t) {
          this.id = ea.uniqueIdxCounter, ea.uniqueIdxCounter++;
          const s = this.context.gl;
          this.context.unbindVAO(), this.bind(), s.bufferSubData(s.ELEMENT_ARRAY_BUFFER, 0, t.arrayBuffer);
        }
        destroy() {
          this.buffer && (this.context.gl.deleteBuffer(this.buffer), delete this.buffer);
        }
      }
      ea.uniqueIdxCounter = 0;
      const xd = { Int8: "BYTE", Uint8: "UNSIGNED_BYTE", Int16: "SHORT", Uint16: "UNSIGNED_SHORT", Int32: "INT", Uint32: "UNSIGNED_INT", Float32: "FLOAT" };
      class vd {
        constructor(t, s, h, _, y, T) {
          this.length = s.length, this.attributes = h, this.itemSize = s.bytesPerElement, this.dynamicDraw = _, this.instanceCount = T, this.context = t;
          const z = t.gl;
          this.buffer = z.createBuffer(), t.bindVertexBuffer.set(this.buffer), z.bufferData(z.ARRAY_BUFFER, s.arrayBuffer, this.dynamicDraw ? z.DYNAMIC_DRAW : z.STATIC_DRAW), this.dynamicDraw || y || s.destroy();
        }
        bind() {
          this.context.bindVertexBuffer.set(this.buffer);
        }
        updateData(t) {
          const s = this.context.gl;
          this.bind(), s.bufferSubData(s.ARRAY_BUFFER, 0, t.arrayBuffer);
        }
        enableAttributes(t, s) {
          for (let h = 0; h < this.attributes.length; h++) {
            const _ = s.attributes[this.attributes[h].name];
            _ !== void 0 && t.enableVertexAttribArray(_);
          }
        }
        setVertexAttribPointers(t, s, h) {
          for (let _ = 0; _ < this.attributes.length; _++) {
            const y = this.attributes[_], T = s.attributes[y.name];
            T !== void 0 && t.vertexAttribPointer(T, y.components, t[xd[y.type]], !1, this.itemSize, y.offset + this.itemSize * (h || 0));
          }
        }
        setVertexAttribDivisor(t, s, h) {
          for (let _ = 0; _ < this.attributes.length; _++) {
            const y = s.attributes[this.attributes[_].name];
            y !== void 0 && this.instanceCount && this.instanceCount > 0 && t.vertexAttribDivisor(y, h);
          }
        }
        destroy() {
          this.buffer && (this.context.gl.deleteBuffer(this.buffer), delete this.buffer);
        }
      }
      class br {
        constructor(t, s, h, _, y) {
          this.context = t, this.width = s, this.height = h;
          const T = this.framebuffer = t.gl.createFramebuffer();
          _ && (this.colorAttachment = new ic(t, T)), y && (this.depthAttachmentType = y, this.depthAttachment = y === "renderbuffer" ? new es(t, T) : new Ao(t, T));
        }
        destroy() {
          const t = this.context.gl;
          if (this.colorAttachment) {
            const s = this.colorAttachment.get();
            s && t.deleteTexture(s);
          }
          if (this.depthAttachment && this.depthAttachmentType)
            if (this.depthAttachmentType === "renderbuffer") {
              const s = this.depthAttachment.get();
              s && t.deleteRenderbuffer(s);
            } else {
              const s = this.depthAttachment.get();
              s && t.deleteTexture(s);
            }
          t.deleteFramebuffer(this.framebuffer);
        }
      }
      class qa {
        constructor(t, s) {
          this.gl = t, this.clearColor = new Wh(this), this.clearDepth = new $h(this), this.clearStencil = new Ql(this), this.colorMask = new ec(this), this.depthMask = new tc(this), this.stencilMask = new Wc(this), this.stencilFunc = new $c(this), this.stencilOp = new Xc(this), this.stencilTest = new id(this), this.depthRange = new p(this), this.depthTest = new A(this), this.depthFunc = new B(this), this.blend = new X(this), this.blendFunc = new ne(this), this.blendColor = new ye(this), this.blendEquation = new We(this), this.cullFace = new at(this), this.cullFaceSide = new ft(this), this.frontFace = new Rt(this), this.program = new ii(this), this.activeTexture = new Ci(this), this.viewport = new Wi(this), this.bindFramebuffer = new Hs(this), this.bindRenderbuffer = new ws(this), this.bindTexture = new Rs(this), this.bindVertexBuffer = new ur(this), this.bindElementBuffer = new Za(this), this.bindVertexArrayOES = new nd(this), this.pixelStoreUnpack = new sd(this), this.pixelStoreUnpackPremultiplyAlpha = new rd(this), this.pixelStoreUnpackFlipY = new Xh(this), this.options = s ? { ...s } : {}, this.options.extTextureFilterAnisotropicForceOff || (this.extTextureFilterAnisotropic = t.getExtension("EXT_texture_filter_anisotropic") || t.getExtension("MOZ_EXT_texture_filter_anisotropic") || t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"), this.extTextureFilterAnisotropic && (this.extTextureFilterAnisotropicMax = t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT))), this.extDebugRendererInfo = t.getExtension("WEBGL_debug_renderer_info"), this.extDebugRendererInfo && (this.renderer = t.getParameter(this.extDebugRendererInfo.UNMASKED_RENDERER_WEBGL), this.vendor = t.getParameter(this.extDebugRendererInfo.UNMASKED_VENDOR_WEBGL)), this.forceManualRenderingForInstanceIDShaders = s && !!s.forceManualRenderingForInstanceIDShaders || this.renderer && this.renderer.indexOf("PowerVR") !== -1, this.options.extTextureFloatLinearForceOff || (this.extTextureFloatLinear = t.getExtension("OES_texture_float_linear")), this.extRenderToTextureHalfFloat = t.getExtension("EXT_color_buffer_half_float"), this.extTimerQuery = t.getExtension("EXT_disjoint_timer_query_webgl2"), this.maxTextureSize = t.getParameter(t.MAX_TEXTURE_SIZE), this.maxPointSize = t.getParameter(t.ALIASED_POINT_SIZE_RANGE)[1];
        }
        setDefault() {
          this.unbindVAO(), this.clearColor.setDefault(), this.clearDepth.setDefault(), this.clearStencil.setDefault(), this.colorMask.setDefault(), this.depthMask.setDefault(), this.stencilMask.setDefault(), this.stencilFunc.setDefault(), this.stencilOp.setDefault(), this.stencilTest.setDefault(), this.depthRange.setDefault(), this.depthTest.setDefault(), this.depthFunc.setDefault(), this.blend.setDefault(), this.blendFunc.setDefault(), this.blendColor.setDefault(), this.blendEquation.setDefault(), this.cullFace.setDefault(), this.cullFaceSide.setDefault(), this.frontFace.setDefault(), this.program.setDefault(), this.activeTexture.setDefault(), this.bindFramebuffer.setDefault(), this.pixelStoreUnpack.setDefault(), this.pixelStoreUnpackPremultiplyAlpha.setDefault(), this.pixelStoreUnpackFlipY.setDefault();
        }
        setDirty() {
          this.clearColor.dirty = !0, this.clearDepth.dirty = !0, this.clearStencil.dirty = !0, this.colorMask.dirty = !0, this.depthMask.dirty = !0, this.stencilMask.dirty = !0, this.stencilFunc.dirty = !0, this.stencilOp.dirty = !0, this.stencilTest.dirty = !0, this.depthRange.dirty = !0, this.depthTest.dirty = !0, this.depthFunc.dirty = !0, this.blend.dirty = !0, this.blendFunc.dirty = !0, this.blendColor.dirty = !0, this.blendEquation.dirty = !0, this.cullFace.dirty = !0, this.cullFaceSide.dirty = !0, this.frontFace.dirty = !0, this.program.dirty = !0, this.activeTexture.dirty = !0, this.viewport.dirty = !0, this.bindFramebuffer.dirty = !0, this.bindRenderbuffer.dirty = !0, this.bindTexture.dirty = !0, this.bindVertexBuffer.dirty = !0, this.bindElementBuffer.dirty = !0, this.bindVertexArrayOES.dirty = !0, this.pixelStoreUnpack.dirty = !0, this.pixelStoreUnpackPremultiplyAlpha.dirty = !0, this.pixelStoreUnpackFlipY.dirty = !0;
        }
        createIndexBuffer(t, s, h) {
          return new ea(this, t, s, h);
        }
        createVertexBuffer(t, s, h, _, y) {
          return new vd(this, t, s, h, _, y);
        }
        createRenderbuffer(t, s, h) {
          const _ = this.gl, y = _.createRenderbuffer();
          return this.bindRenderbuffer.set(y), _.renderbufferStorage(_.RENDERBUFFER, t, s, h), this.bindRenderbuffer.set(null), y;
        }
        createFramebuffer(t, s, h, _) {
          return new br(this, t, s, h, _);
        }
        clear({ color: t, depth: s, stencil: h, colorMask: _ }) {
          const y = this.gl;
          let T = 0;
          t && (T |= y.COLOR_BUFFER_BIT, this.clearColor.set(t), this.colorMask.set(_ || [!0, !0, !0, !0])), s !== void 0 && (T |= y.DEPTH_BUFFER_BIT, this.depthRange.set([0, 1]), this.clearDepth.set(s), this.depthMask.set(!0)), h !== void 0 && (T |= y.STENCIL_BUFFER_BIT, this.clearStencil.set(h), this.stencilMask.set(255)), y.clear(T);
        }
        setCullFace(t) {
          t.enable === !1 ? this.cullFace.set(!1) : (this.cullFace.set(!0), this.cullFaceSide.set(t.mode), this.frontFace.set(t.frontFace));
        }
        setDepthMode(t) {
          t.func !== this.gl.ALWAYS || t.mask ? (this.depthTest.set(!0), this.depthFunc.set(t.func), this.depthMask.set(t.mask), this.depthRange.set(t.range)) : this.depthTest.set(!1);
        }
        setStencilMode(t) {
          t.test.func !== this.gl.ALWAYS || t.mask ? (this.stencilTest.set(!0), this.stencilMask.set(t.mask), this.stencilOp.set([t.fail, t.depthFail, t.pass]), this.stencilFunc.set({ func: t.test.func, ref: t.ref, mask: t.test.mask })) : this.stencilTest.set(!1);
        }
        setColorMode(t) {
          i.bn(t.blendFunction, bi.Replace) ? this.blend.set(!1) : (this.blend.set(!0), this.blendFunc.set(t.blendFunction), this.blendColor.set(t.blendColor), t.blendEquation ? this.blendEquation.set(t.blendEquation) : this.blendEquation.setDefault()), this.colorMask.set(t.mask);
        }
        unbindVAO() {
          this.bindVertexArrayOES.set(null);
        }
      }
      let th;
      function ou(c, t, s, h, _, y, T) {
        const z = c.context, R = z.gl, F = c.transform, N = c.getOrCreateProgram("collisionBox"), G = [];
        let Z = 0, W = 0;
        for (let pe = 0; pe < h.length; pe++) {
          const Me = h[pe], xe = t.getTile(Me), we = xe.getBucket(s);
          if (!we)
            continue;
          const ve = qn(Me, we, F);
          let Ae = ve;
          _[0] === 0 && _[1] === 0 || (Ae = c.translatePosMatrix(ve, xe, _, y));
          const Oe = T ? we.textCollisionBox : we.iconCollisionBox, Xe = we.collisionCircleArray;
          if (Xe.length > 0) {
            const He = i.ab.mat4.create(), ke = Ae;
            i.ab.mat4.mul(He, we.placementInvProjMatrix, F.glCoordMatrix), i.ab.mat4.mul(He, He, we.placementViewportMatrix), G.push({ circleArray: Xe, circleOffset: W, transform: ke, invTransform: He, projection: we.getProjection() }), Z += Xe.length / 4, W = Z;
          }
          Oe && (c.terrain && c.terrain.setupElevationDraw(xe, N), N.draw(c, R.LINES, Wt.disabled, ci.disabled, c.colorModeForRenderPass(), ti.disabled, dd(Ae, F, xe, we.getProjection()), s.id, Oe.layoutVertexBuffer, Oe.indexBuffer, Oe.segments, null, F.zoom, null, [Oe.collisionVertexBuffer, Oe.collisionVertexBufferExt]));
        }
        if (!T || !G.length)
          return;
        const te = c.getOrCreateProgram("collisionCircle"), ee = new i.cV();
        ee.resize(4 * Z), ee._trim();
        let se = 0;
        for (const pe of G)
          for (let Me = 0; Me < pe.circleArray.length / 4; Me++) {
            const xe = 4 * Me, we = pe.circleArray[xe + 0], ve = pe.circleArray[xe + 1], Ae = pe.circleArray[xe + 2], Oe = pe.circleArray[xe + 3];
            ee.emplace(se++, we, ve, Ae, Oe, 0), ee.emplace(se++, we, ve, Ae, Oe, 1), ee.emplace(se++, we, ve, Ae, Oe, 2), ee.emplace(se++, we, ve, Ae, Oe, 3);
          }
        (!th || th.length < 2 * Z) && (th = function(pe) {
          const Me = 2 * pe, xe = new i.aU();
          xe.resize(Me), xe._trim();
          for (let we = 0; we < Me; we++) {
            const ve = 6 * we;
            xe.uint16[ve + 0] = 4 * we + 0, xe.uint16[ve + 1] = 4 * we + 1, xe.uint16[ve + 2] = 4 * we + 2, xe.uint16[ve + 3] = 4 * we + 2, xe.uint16[ve + 4] = 4 * we + 3, xe.uint16[ve + 5] = 4 * we + 0;
          }
          return xe;
        }(Z));
        const oe = z.createIndexBuffer(th, !0), he = z.createVertexBuffer(ee, i.cW.members, !0);
        for (const pe of G) {
          const Me = { u_matrix: pe.transform, u_inv_matrix: pe.invTransform, u_camera_to_center_distance: (_e = F).getCameraToCenterDistance(pe.projection), u_viewport_size: [_e.width, _e.height] };
          te.draw(c, R.TRIANGLES, Wt.disabled, ci.disabled, c.colorModeForRenderPass(), ti.disabled, Me, s.id, he, oe, i.b7.simpleSegment(0, 2 * pe.circleOffset, pe.circleArray.length, pe.circleArray.length / 2), null, F.zoom);
        }
        var _e;
        he.destroy(), oe.destroy();
      }
      const oc = i.ab.mat4.create();
      function au(c) {
        const t = c._camera.getWorldToCamera(c.worldSize, 1), s = i.ab.mat4.multiply([], t, c.globeMatrix);
        i.ab.mat4.invert(s, s);
        const h = [0, 0, 0], _ = [0, 1, 0, 0];
        return i.ab.vec4.transformMat4(_, _, s), h[0] = _[0], h[1] = _[1], h[2] = _[2], i.ab.vec3.normalize(h, h), h;
      }
      function ep({ width: c, height: t, anchor: s, textOffset: h, textScale: _ }, y) {
        const { horizontalAlign: T, verticalAlign: z } = i.bD(s), R = -(T - 0.5) * c, F = -(z - 0.5) * t, N = i.bC(s, h);
        return new i.P((R / _ + N[0]) * y, (F / _ + N[1]) * y);
      }
      function co(c, t, s, h, _, y, T, z, R, F, N) {
        const G = c.text.placedSymbolArray, Z = c.text.dynamicLayoutVertexArray, W = c.icon.dynamicLayoutVertexArray, te = {}, ee = c.getProjection(), se = pa(z, ee, y), oe = y.elevation, he = ee.upVectorScale(z.canonical, y.center.lat, y.worldSize).metersToTile;
        Z.clear();
        for (let _e = 0; _e < G.length; _e++) {
          const pe = G.get(_e), { tileAnchorX: Me, tileAnchorY: xe, numGlyphs: we } = pe, ve = pe.hidden || !pe.crossTileID || c.allowVerticalPlacement && !pe.placedOrientation ? null : h[pe.crossTileID];
          if (ve) {
            let Ae = 0, Oe = 0, Xe = 0;
            if (oe) {
              const Je = oe ? oe.getAtTileOffset(z, Me, xe) : 0, [_t, ct, nt] = ee.upVector(z.canonical, Me, xe);
              Ae = Je * _t * he, Oe = Je * ct * he, Xe = Je * nt * he;
            }
            let [He, ke, Ne, st] = un(pe.projectedAnchorX + Ae, pe.projectedAnchorY + Oe, pe.projectedAnchorZ + Xe, s ? se : T);
            const ut = Bc(y.getCameraToCenterDistance(ee), st);
            let xt = _.evaluateSizeForFeature(c.textSizeData, F, pe) * ut / i.bw;
            s && (xt *= c.tilePixelRatio / R);
            const Ge = ep(ve, xt);
            s ? ({ x: He, y: ke, z: Ne } = ee.projectTilePoint(Me + Ge.x, xe + Ge.y, z.canonical), [He, ke, Ne] = un(He + Ae, ke + Oe, Ne + Xe, T)) : (t && Ge._rotate(-y.angle), He += Ge.x, ke += Ge.y, Ne = 0);
            const lt = c.allowVerticalPlacement && pe.placedOrientation === i.bq.vertical ? Math.PI / 2 : 0;
            for (let Je = 0; Je < we; Je++)
              i.bt(Z, He, ke, Ne, lt);
            N && pe.associatedIconIndex >= 0 && (te[pe.associatedIconIndex] = { x: He, y: ke, z: Ne, angle: lt });
          } else
            fa(we, Z);
        }
        if (N) {
          W.clear();
          const _e = c.icon.placedSymbolArray;
          for (let pe = 0; pe < _e.length; pe++) {
            const Me = _e.get(pe), { numGlyphs: xe } = Me, we = te[pe];
            if (Me.hidden || !we)
              fa(xe, W);
            else {
              const { x: ve, y: Ae, z: Oe, angle: Xe } = we;
              for (let He = 0; He < xe; He++)
                i.bt(W, ve, Ae, Oe, Xe);
            }
          }
          c.icon.dynamicLayoutVertexBuffer.updateData(W);
        }
        c.text.dynamicLayoutVertexBuffer.updateData(Z);
      }
      function Tn(c, t, s, h, _, y, T = {}) {
        const z = s.paint.get("icon-translate"), R = s.paint.get("text-translate"), F = s.paint.get("icon-translate-anchor"), N = s.paint.get("text-translate-anchor"), G = s.layout.get("icon-rotation-alignment"), Z = s.layout.get("text-rotation-alignment"), W = s.layout.get("icon-pitch-alignment"), te = s.layout.get("text-pitch-alignment"), ee = s.layout.get("icon-keep-upright"), se = s.layout.get("text-keep-upright"), oe = s.paint.get("icon-color-saturation"), he = s.paint.get("icon-color-contrast"), _e = s.paint.get("icon-color-brightness-min"), pe = s.paint.get("icon-color-brightness-max"), Me = s.layout.get("symbol-elevation-reference") === "sea", xe = c.context, we = xe.gl, ve = c.transform, Ae = G === "map", Oe = Z === "map", Xe = W === "map", He = te === "map", ke = s.layout.get("symbol-sort-key").constantOr(1) !== void 0;
        let Ne = !1;
        const st = c.depthModeForSublayer(0, Wt.ReadOnly), ut = [i.at(ve.center.lng), i.aA(ve.center.lat)], xt = s.layout.get("text-variable-anchor"), Ge = ve.projection.name === "globe", lt = [], Je = [0, -1, 0];
        for (const _t of h) {
          const ct = t.getTile(_t), nt = ct.getBucket(s);
          if (!nt || nt.projection.name === "mercator" && Ge || nt.fullyClipped)
            continue;
          const Lt = nt.projection.name === "globe", bt = Lt ? i.ae(ve.zoom) : 0, zt = pa(_t, nt.getProjection(), ve), Bt = ve.calculatePixelsToTileUnitsMatrix(ct), oi = xt && nt.hasTextData(), $t = nt.hasIconTextFit() && oi && nt.hasIconData(), Xt = nt.getProjection().createInversionMatrix(ve, _t.canonical), ai = (ji) => {
            ve.depthOcclusionForSymbolsAndCircles && (s.hasInitialOcclusionOpacityProperties || c.terrain) && (ji.push("DEPTH_D24"), ji.push("DEPTH_OCCLUSION"));
          }, zi = () => {
            const ji = Ae && s.layout.get("symbol-placement") !== "point", Yi = [];
            ai(Yi);
            const In = ji || $t, Fs = s.paint.get("icon-image-cross-fade").constantOr(0);
            c.terrainRenderModeElevated() && Xe && Yi.push("PITCH_WITH_MAP_TERRAIN"), Lt && (Yi.push("PROJECTION_GLOBE_VIEW"), In && Yi.push("PROJECTED_POS_ON_VIEWPORT")), Fs > 0 && Yi.push("ICON_TRANSITION"), nt.icon.zOffsetVertexBuffer && Yi.push("Z_OFFSET"), oe === 0 && he === 0 && _e === 0 && pe === 1 || Yi.push("COLOR_ADJUSTMENT"), nt.sdfIcons && Yi.push("RENDER_SDF");
            const pr = nt.icon.programConfigurations.get(s.id), ts = c.getOrCreateProgram("symbol", { config: pr, defines: Yi }), Ps = ct.imageAtlasTexture ? ct.imageAtlasTexture.size : [0, 0], Qs = nt.iconSizeData, jn = i.bp(Qs, ve.zoom), dn = Xe || ve.pitch !== 0, _n = Js(zt, ct.tileID.canonical, Xe, Ae, ve, nt.getProjection(), Bt), Ri = Ss(zt, ct.tileID.canonical, Xe, Ae, ve, nt.getProjection(), Bt), Gn = c.translatePosMatrix(Ri, ct, z, F, !0), Bs = c.translatePosMatrix(zt, ct, z, F), cn = In ? oc : _n, er = Ae && !Xe && !ji;
            let eo = Je;
            !Ge && !ve.mercatorFromTransition || Ae || (eo = au(ve));
            const Br = Lt ? eo : Je, Ma = s.getColorAdjustmentMatrix(oe, he, _e, pe), mr = Jf(Qs.kind, jn, er, Xe, c, Bs, cn, Gn, Me, !1, Ps, [0, 0], !0, _t, bt, ut, Xt, Br, nt.getProjection(), Ma, Fs), ko = ct.imageAtlasTexture ? ct.imageAtlasTexture : null, Nr = s.layout.get("icon-size").constantOr(0) !== 1 || nt.iconsNeedLinear, il = nt.sdfIcons || c.options.rotating || c.options.zooming || Nr || dn ? we.LINEAR : we.NEAREST, ia = nt.sdfIcons && s.paint.get("icon-halo-width").constantOr(1) !== 0, Ll = c.terrain && Xe && ji ? i.ab.mat4.invert(i.ab.mat4.create(), _n) : oc;
            if (ji && nt.icon) {
              const yh = ve.elevation, Pu = yh ? yh.getAtTileOffsetFunc(_t, ve.center.lat, ve.worldSize, nt.getProjection()) : null, Au = Ho(zt, ct.tileID.canonical, Xe, Ae, ve, nt.getProjection(), Bt);
              Zl(nt, zt, c, !1, Au, Ri, Xe, ee, Pu, _t);
            }
            return { program: ts, buffers: nt.icon, uniformValues: mr, atlasTexture: ko, atlasTextureIcon: null, atlasInterpolation: il, atlasInterpolationIcon: null, isSDF: nt.sdfIcons, hasHalo: ia, tile: ct, labelPlaneMatrixInv: Ll };
          }, wi = () => {
            const ji = Oe && s.layout.get("symbol-placement") !== "point", Yi = [], In = ji || xt || $t;
            c.terrainRenderModeElevated() && He && Yi.push("PITCH_WITH_MAP_TERRAIN"), Lt && (Yi.push("PROJECTION_GLOBE_VIEW"), In && Yi.push("PROJECTED_POS_ON_VIEWPORT")), nt.text.zOffsetVertexBuffer && Yi.push("Z_OFFSET"), nt.iconsInText && Yi.push("RENDER_TEXT_AND_SYMBOL"), Yi.push("RENDER_SDF"), ai(Yi);
            const Fs = nt.text.programConfigurations.get(s.id), pr = c.getOrCreateProgram("symbol", { config: Fs, defines: Yi });
            let ts, Ps = [0, 0], Qs = null;
            const jn = nt.textSizeData;
            nt.iconsInText && (Ps = ct.imageAtlasTexture ? ct.imageAtlasTexture.size : [0, 0], Qs = ct.imageAtlasTexture ? ct.imageAtlasTexture : null, ts = He || ve.pitch !== 0 || c.options.rotating || c.options.zooming || jn.kind === "composite" || jn.kind === "camera" ? we.LINEAR : we.NEAREST);
            const dn = ct.glyphAtlasTexture ? ct.glyphAtlasTexture.size : [0, 0], _n = s.layout.get("text-size-scale-range"), Ri = i.aw(c.scaleFactor, _n[0], _n[1]), Gn = i.bp(jn, ve.zoom, Ri), Bs = Js(zt, ct.tileID.canonical, He, Oe, ve, nt.getProjection(), Bt), cn = Ss(zt, ct.tileID.canonical, He, Oe, ve, nt.getProjection(), Bt), er = c.translatePosMatrix(cn, ct, R, N, !0), eo = c.translatePosMatrix(zt, ct, R, N), Br = In ? oc : Bs, Ma = Oe && !He && !ji;
            let mr = Je;
            !Ge && !ve.mercatorFromTransition || Oe || (mr = au(ve));
            const ko = Jf(jn.kind, Gn, Ma, He, c, eo, Br, er, Me, !0, dn, Ps, !0, _t, bt, ut, Xt, Lt ? mr : Je, nt.getProjection(), null, null, Ri), Nr = ct.glyphAtlasTexture ? ct.glyphAtlasTexture : null, il = we.LINEAR, ia = s.paint.get("text-halo-width").constantOr(1) !== 0, Ll = c.terrain && He && ji ? i.ab.mat4.invert(i.ab.mat4.create(), Bs) : oc;
            if (ji && nt.text) {
              const yh = ve.elevation, Pu = yh ? yh.getAtTileOffsetFunc(_t, ve.center.lat, ve.worldSize, nt.getProjection()) : null, Au = Ho(zt, ct.tileID.canonical, He, Oe, ve, nt.getProjection(), Bt);
              Zl(nt, zt, c, !0, Au, cn, He, se, Pu, _t);
            }
            return { program: pr, buffers: nt.text, uniformValues: ko, atlasTexture: Nr, atlasTextureIcon: Qs, atlasInterpolation: il, atlasInterpolationIcon: ts, isSDF: !0, hasHalo: ia, tile: ct, labelPlaneMatrixInv: Ll };
          }, mn = nt.icon.segments.get().length, Mn = nt.text.segments.get().length, Xi = mn && !T.onlyText ? zi() : null, sn = Mn && !T.onlyIcons ? wi() : null, _i = s.paint.get("icon-opacity").constantOr(1), Jt = s.paint.get("text-opacity").constantOr(1);
          if (ke && nt.canOverlap) {
            Ne = !0;
            const ji = _i && !T.onlyText ? nt.icon.segments.get() : [], Yi = Jt && !T.onlyIcons ? nt.text.segments.get() : [];
            for (const In of ji)
              lt.push({ segments: new i.b7([In]), sortKey: In.sortKey, state: Xi });
            for (const In of Yi)
              lt.push({ segments: new i.b7([In]), sortKey: In.sortKey, state: sn });
          } else
            T.onlyText || lt.push({ segments: _i ? nt.icon.segments : new i.b7([]), sortKey: 0, state: Xi }), T.onlyIcons || lt.push({ segments: Jt ? nt.text.segments : new i.b7([]), sortKey: 0, state: sn });
        }
        Ne && lt.sort((_t, ct) => _t.sortKey - ct.sortKey);
        for (const _t of lt) {
          const ct = _t.state;
          if (ct)
            if (c.terrain ? c.terrain.setupElevationDraw(ct.tile, ct.program, { useDepthForOcclusion: ve.depthOcclusionForSymbolsAndCircles, labelPlaneMatrixInv: ct.labelPlaneMatrixInv }) : c.setupDepthForOcclusion(ve.depthOcclusionForSymbolsAndCircles, ct.program), xe.activeTexture.set(we.TEXTURE0), ct.atlasTexture && ct.atlasTexture.bind(ct.atlasInterpolation, we.CLAMP_TO_EDGE, !0), ct.atlasTextureIcon && (xe.activeTexture.set(we.TEXTURE1), ct.atlasTextureIcon && ct.atlasTextureIcon.bind(ct.atlasInterpolationIcon, we.CLAMP_TO_EDGE, !0)), c.uploadCommonLightUniforms(c.context, ct.program), ct.hasHalo) {
              const nt = ct.uniformValues;
              nt.u_is_halo = 1, ac(ct.buffers, _t.segments, s, c, ct.program, st, _, y, nt, 2), nt.u_is_halo = 0;
            } else {
              if (ct.isSDF) {
                const nt = ct.uniformValues;
                ct.hasHalo && (nt.u_is_halo = 1, ac(ct.buffers, _t.segments, s, c, ct.program, st, _, y, nt, 1)), nt.u_is_halo = 0;
              }
              ac(ct.buffers, _t.segments, s, c, ct.program, st, _, y, ct.uniformValues, 1);
            }
        }
      }
      function ac(c, t, s, h, _, y, T, z, R, F) {
        const N = [c.dynamicLayoutVertexBuffer, c.opacityVertexBuffer, c.iconTransitioningVertexBuffer, c.globeExtVertexBuffer, c.zOffsetVertexBuffer];
        _.draw(h, h.context.gl.TRIANGLES, y, T, z, ti.disabled, R, s.id, c.layoutVertexBuffer, c.indexBuffer, t, s.paint, h.transform.zoom, c.programConfigurations.get(s.id), N, F);
      }
      function lu(c, t, s, h, _, y, T) {
        const z = c.context.gl, R = s.paint.get("fill-pattern"), F = s.is3D(), N = F ? c.stencilModeFor3D() : ci.disabled, G = R && R.constantOr(1);
        let Z, W, te, ee, se;
        T ? (W = G && !s.getPaintProperty("fill-outline-color") ? "fillOutlinePattern" : "fillOutline", Z = z.LINES) : (W = G ? "fillPattern" : "fill", Z = z.TRIANGLES);
        for (const oe of h) {
          const he = t.getTile(oe);
          if (G && !he.patternsLoaded())
            continue;
          const _e = he.getBucket(s);
          if (!_e)
            continue;
          c.prepareDrawTile();
          const pe = _e.programConfigurations.get(s.id), Me = c.isTileAffectedByFog(oe), xe = c.getOrCreateProgram(W, { config: pe, overrideFog: Me });
          G && (c.context.activeTexture.set(z.TEXTURE0), he.imageAtlasTexture && he.imageAtlasTexture.bind(z.LINEAR, z.CLAMP_TO_EDGE), pe.updatePaintBuffers());
          const we = R.constantOr(null);
          if (we && he.imageAtlas) {
            const Oe = he.imageAtlas, Xe = i.A.from(we), He = Oe.patternPositions[Xe.getSerializedPrimary()];
            He && pe.setConstantPatternPositions(He);
          }
          const ve = c.translatePosMatrix(oe.projMatrix, he, s.paint.get("fill-translate"), s.paint.get("fill-translate-anchor")), Ae = s.paint.get("fill-emissive-strength");
          if (T) {
            ee = _e.indexBuffer2, se = _e.segments2;
            const Oe = c.terrain && c.terrain.renderingToTexture ? c.terrain.drapeBufferSize : [z.drawingBufferWidth, z.drawingBufferHeight];
            te = W === "fillOutlinePattern" && G ? nu(ve, Ae, c, he, Oe) : iu(ve, Ae, Oe);
          } else
            ee = _e.indexBuffer, se = _e.segments, te = G ? ud(ve, Ae, c, he) : sc(ve, Ae);
          c.uploadCommonUniforms(c.context, xe, oe.toUnwrapped()), xe.draw(c, Z, _, F ? N : c.stencilModeForClipping(oe), y, ti.disabled, te, s.id, _e.layoutVertexBuffer, ee, se, s.paint, c.transform.zoom, pe, void 0);
        }
      }
      function ih(c, t, s, h, _, y, T, z) {
        s.resetLayerRenderingStats(c);
        const R = c.context, F = R.gl, N = c.transform, G = s.paint.get("fill-extrusion-pattern"), Z = G.constantOr(1), W = s.paint.get("fill-extrusion-opacity"), te = c.style.enable3dLights(), ee = s.paint.get(te && !Z ? "fill-extrusion-ambient-occlusion-wall-radius" : "fill-extrusion-ambient-occlusion-radius"), se = [s.paint.get("fill-extrusion-ambient-occlusion-intensity"), ee], oe = s.layout.get("fill-extrusion-edge-radius"), he = oe > 0 && !s.paint.get("fill-extrusion-rounded-roof"), _e = he ? 0 : oe, pe = N.projection.name === "globe" ? i.d3() : 0, Me = N.projection.name === "globe", xe = Me ? i.ae(N.zoom) : 0, we = [i.at(N.center.lng), i.aA(N.center.lat)], ve = s.paint.get("fill-extrusion-flood-light-color-use-theme").constantOr("default") === "none", Ae = s.paint.get("fill-extrusion-flood-light-color").toRenderColor(ve ? null : s.lut).toArray01().slice(0, 3), Oe = s.paint.get("fill-extrusion-flood-light-intensity"), Xe = s.paint.get("fill-extrusion-vertical-scale"), He = s.paint.get("fill-extrusion-line-width").constantOr(1) !== 0, ke = s.paint.get("fill-extrusion-height-alignment"), Ne = s.paint.get("fill-extrusion-base-alignment"), st = Mo(c, s.paint.get("fill-extrusion-cutoff-fade-range")), ut = [];
        let xt;
        Me && ut.push("PROJECTION_GLOBE_VIEW"), se[0] > 0 && ut.push("FAUX_AO"), he && ut.push("ZERO_ROOF_RADIUS"), z && ut.push("HAS_CENTROID"), Oe > 0 && ut.push("FLOOD_LIGHT"), st.shouldRenderCutoff && ut.push("RENDER_CUTOFF"), He && ut.push("RENDER_WALL_MODE");
        const Ge = c.renderPass === "shadow", lt = c.shadowRenderer, Je = Ge && !!lt;
        c.shadowRenderer && (c.shadowRenderer.useNormalOffset = !0);
        let _t = [0, 0, 0];
        if (lt) {
          const Lt = c.style.directionalLight, bt = c.style.ambientLight;
          Lt && bt && (_t = cr(c.style, Lt, bt)), Ge || (ut.push("RENDER_SHADOWS", "DEPTH_TEXTURE"), lt.useNormalOffset && ut.push("NORMAL_OFFSET")), xt = ut.concat(["SHADOWS_SINGLE_CASCADE"]);
        }
        const ct = Je ? "fillExtrusionDepth" : Z ? "fillExtrusionPattern" : "fillExtrusion", nt = s.getLayerRenderingStats();
        for (const Lt of h) {
          const bt = t.getTile(Lt), zt = bt.getBucket(s);
          if (!zt || zt.projection.name !== N.projection.name)
            continue;
          let Bt = !1;
          lt && (Bt = lt.getMaxCascadeForTile(Lt.toUnwrapped()) === 0);
          const oi = c.isTileAffectedByFog(Lt), $t = zt.programConfigurations.get(s.id), Xt = c.getOrCreateProgram(ct, { config: $t, defines: Bt ? xt : ut, overrideFog: oi });
          if (c.terrain && c.terrain.setupElevationDraw(bt, Xt, { useMeterToDem: !0 }), !zt.centroidVertexBuffer) {
            const sn = Xt.attributes.a_centroid_pos;
            sn !== void 0 && F.vertexAttrib2f(sn, 0, 0);
          }
          !Ge && lt && lt.setupShadows(bt.tileID.toUnwrapped(), Xt, "vector-tile", bt.tileID.overscaledZ), Z && (c.context.activeTexture.set(F.TEXTURE0), bt.imageAtlasTexture && bt.imageAtlasTexture.bind(F.LINEAR, F.CLAMP_TO_EDGE), $t.updatePaintBuffers());
          const ai = G.constantOr(null);
          if (ai && bt.imageAtlas) {
            const sn = bt.imageAtlas, _i = i.A.from(ai), Jt = sn.patternPositions[_i.getSerializedPrimary()];
            Jt && $t.setConstantPatternPositions(Jt);
          }
          const zi = s.paint.get("fill-extrusion-vertical-gradient"), wi = 1 / zt.tileToMeter;
          let mn;
          if (Ge && lt) {
            if (yt(bt.tileID, zt, c))
              continue;
            const sn = lt.calculateShadowPassMatrixFromTile(bt.tileID.toUnwrapped());
            mn = Qc(sn, _e, wi, Xe, ke, Ne);
          } else {
            const sn = c.translatePosMatrix(Lt.expandedProjMatrix, bt, s.paint.get("fill-extrusion-translate"), s.paint.get("fill-extrusion-translate-anchor")), _i = N.projection.createInversionMatrix(N, Lt.canonical);
            mn = Z ? hd(sn, c, zi, W, se, _e, wi, Lt, bt, pe, ke, Ne, xe, we, _i, Ae, Xe) : tu(sn, c, zi, W, se, _e, wi, Lt, pe, ke, Ne, xe, we, _i, Ae, Xe, Oe, _t);
          }
          c.uploadCommonUniforms(R, Xt, Lt.toUnwrapped(), null, st);
          let Mn = zt.segments;
          if (N.projection.name === "mercator" && !Ge && (Mn = zt.getVisibleSegments(bt.tileID, c.terrain, c.transform.getFrustum(0)), !Mn.get().length))
            continue;
          if (nt)
            if (Ge)
              for (const sn of Mn.get())
                nt.numRenderedVerticesInShadowPass += sn.primitiveLength;
            else
              for (const sn of Mn.get())
                nt.numRenderedVerticesInTransparentPass += sn.primitiveLength;
          const Xi = [];
          (c.terrain || z) && Xi.push(zt.centroidVertexBuffer), Me && Xi.push(zt.layoutVertexExtBuffer), He && Xi.push(zt.wallVertexBuffer), Xt.draw(c, R.gl.TRIANGLES, _, y, T, ti.backCCW, mn, s.id, zt.layoutVertexBuffer, zt.indexBuffer, Mn, s.paint, c.transform.zoom, $t, Xi);
        }
        c.shadowRenderer && (c.shadowRenderer.useNormalOffset = !1);
      }
      function Ml(c, t, s, h, _, y, T, z, R, F, N, G, Z, W, te, ee, se, oe, he) {
        const _e = c.context, pe = _e.gl, Me = c.transform, xe = c.transform.zoom, we = [], ve = Mo(c, s.paint.get("fill-extrusion-cutoff-fade-range"));
        F === "clear" ? (we.push("CLEAR_SUBPASS"), he && (we.push("CLEAR_FROM_TEXTURE"), _e.activeTexture.set(pe.TEXTURE0), he.bind(pe.LINEAR, pe.CLAMP_TO_EDGE))) : F === "sdf" && we.push("SDF_SUBPASS"), se && we.push("HAS_CENTROID"), ve.shouldRenderCutoff && we.push("RENDER_CUTOFF");
        const Ae = s.layout.get("fill-extrusion-edge-radius"), Oe = (Xe, He, ke, Ne, st) => {
          const ut = He.programConfigurations.get(s.id), xt = c.isTileAffectedByFog(Xe), Ge = c.getOrCreateProgram("fillExtrusionGroundEffect", { config: ut, defines: we, overrideFog: xt }), lt = ((_t, ct, nt, Lt, bt, zt, Bt, oi, $t, Xt, ai) => ({ u_matrix: ct, u_opacity: nt, u_ao_pass: Lt ? 1 : 0, u_meter_to_tile: bt, u_ao: zt, u_flood_light_intensity: Bt, u_flood_light_color: oi, u_attenuation: $t, u_edge_radius: Xt, u_fb: 0, u_fb_size: ai, u_dynamic_offset: 1 }))(0, Ne, N, R, st, [G, Z * st], W, te, ee, xe >= 17 ? 0 : Ae * st, he ? he.size[0] : 0), Je = [];
          se && Je.push(He.hiddenByLandmarkVertexBuffer), c.uploadCommonUniforms(_e, Ge, Xe.toUnwrapped(), null, ve), Ge.draw(c, _e.gl.TRIANGLES, _, y, T, z, lt, s.id, He.vertexBuffer, He.indexBuffer, ke, s.paint, xe, ut, Je);
        };
        for (const Xe of h) {
          const He = t.getTile(Xe), ke = He.getBucket(s);
          if (!ke || ke.projection.name !== Me.projection.name || !ke.groundEffect || ke.groundEffect && !ke.groundEffect.hasData())
            continue;
          const Ne = ke.groundEffect, st = 1 / ke.tileToMeter;
          {
            const ut = c.translatePosMatrix(Xe.projMatrix, He, s.paint.get("fill-extrusion-translate"), s.paint.get("fill-extrusion-translate-anchor")), xt = Ne.getDefaultSegment();
            Oe(Xe, Ne, xt, ut, st);
          }
          if (oe)
            for (let ut = 0; ut < 4; ut++) {
              const xt = i.d4[ut](Xe), Ge = t.getTile(xt);
              if (!Ge)
                continue;
              const lt = Ge.getBucket(s);
              if (!lt || lt.projection.name !== Me.projection.name || !lt.groundEffect || lt.groundEffect && !lt.groundEffect.hasData())
                continue;
              const Je = lt.groundEffect;
              let _t, ct;
              ut === 0 ? (_t = [-i.ag, 0, 0], ct = 1) : ut === 1 ? (_t = [i.ag, 0, 0], ct = 0) : ut === 2 ? (_t = [0, -i.ag, 0], ct = 3) : (_t = [0, i.ag, 0], ct = 2);
              const nt = Je.regionSegments[ct];
              if (!nt)
                continue;
              const Lt = new Float32Array(16);
              i.ab.mat4.translate(Lt, Xe.projMatrix, _t), Oe(Xe, Je, nt, c.translatePosMatrix(Lt, He, s.paint.get("fill-extrusion-translate"), s.paint.get("fill-extrusion-translate-anchor")), st);
            }
        }
      }
      function tp(c, t, s, h, _, y, T) {
        h.centroidVertexArray.length === 0 && h.createCentroidsBuffer();
        const z = y ? y.findDEMTileFor(s) : null;
        if (!(z && z.dem || T))
          return;
        y && z && z.dem && h.selfDEMTileTimestamp !== z.dem._timestamp && (h.borderDoneWithNeighborZ = [-1, -1, -1, -1], h.selfDEMTileTimestamp = z.dem._timestamp);
        const R = (oe) => new i.P(Math.ceil((oe + i.d7) * i.d8), 0), F = (oe) => {
          const he = t.getSource().minzoom, _e = (Me) => {
            const xe = t.getTileByID(Me);
            if (xe && xe.hasData())
              return xe.getBucket(_);
          }, pe = [0, -1, 1];
          for (const Me of pe) {
            if (oe.overscaledZ + Me < he)
              continue;
            const xe = _e(oe.calculateScaledKey(oe.overscaledZ + Me));
            if (xe)
              return xe;
          }
        }, N = [0, 0, 0], G = (oe, he) => (N[0] = Math.min(oe.min.y, he.min.y), N[1] = Math.max(oe.max.y, he.max.y), N[2] = i.ag - he.min.x > oe.max.x ? he.min.x - i.ag : oe.max.x, N), Z = (oe, he) => (N[0] = Math.min(oe.min.x, he.min.x), N[1] = Math.max(oe.max.x, he.max.x), N[2] = i.ag - he.min.y > oe.max.y ? he.min.y - i.ag : oe.max.y, N), W = [(oe, he) => G(oe, he), (oe, he) => G(he, oe), (oe, he) => Z(oe, he), (oe, he) => Z(he, oe)], te = (oe, he, _e, pe, Me, xe, we) => {
          if (!y)
            return 0;
          const ve = [[xe ? _e : oe, xe ? oe : _e, 0], [xe ? _e : he, xe ? he : _e, 0]], Ae = we < 0 ? i.ag + we : we, Oe = [xe ? Ae : (oe + he) / 2, xe ? (oe + he) / 2 : Ae, 0];
          return _e === 0 && we < 0 || _e !== 0 && we > 0 ? y.getForTilePoints(Me, [Oe], !0, pe) : ve.push(Oe), y.getForTilePoints(s, ve, !0, z), Math.max(ve[0][2], ve[1][2], Oe[2]) / y.exaggeration();
        };
        for (let oe = 0; oe < 4; oe++) {
          const he = h.borderFeatureIndices[oe];
          if (he.length === 0)
            continue;
          const _e = i.d4[oe](s), pe = F(_e);
          if (!(pe && pe instanceof i.d5))
            continue;
          const Me = y ? y.findDEMTileFor(_e) : null;
          if (!(Me && Me.dem || T) || (y && Me && Me.dem && h.borderDEMTileTimestamp[oe] !== Me.dem._timestamp && (h.borderDoneWithNeighborZ[oe] = -1, h.borderDEMTileTimestamp[oe] = Me.dem._timestamp), h.borderDoneWithNeighborZ[oe] === pe.canonical.z))
            continue;
          pe.centroidVertexArray.length === 0 && pe.createCentroidsBuffer();
          const xe = (oe < 2 ? 1 : 5) - oe, we = pe.borderDoneWithNeighborZ[xe] !== h.canonical.z, ve = pe.borderFeatureIndices[xe];
          let Ae = 0;
          if (h.canonical.z !== pe.canonical.z) {
            for (const Oe of he)
              h.showCentroid(h.featuresOnBorder[Oe]);
            if (we)
              for (const Oe of ve)
                pe.showCentroid(pe.featuresOnBorder[Oe]);
            h.borderDoneWithNeighborZ[oe] = pe.canonical.z, pe.borderDoneWithNeighborZ[xe] = h.canonical.z;
          }
          for (const Oe of he) {
            const Xe = h.featuresOnBorder[Oe], He = h.centroidData[Xe.centroidDataIndex], ke = Xe.borders[oe];
            let Ne;
            for (; Ae < ve.length; ) {
              Ne = pe.featuresOnBorder[ve[Ae]];
              const st = Ne.borders[xe];
              if (st[1] > ke[0] + 3 || st[0] > ke[0] - 3)
                break;
              pe.showCentroid(Ne), Ae++;
            }
            if (Ne && Ae < ve.length) {
              const st = Ae;
              let ut = 0;
              for (; !(Ne.borders[xe][0] > ke[1] - 3) && (ut++, ++Ae !== ve.length); )
                Ne = pe.featuresOnBorder[ve[Ae]];
              Ne = pe.featuresOnBorder[ve[st]];
              let xt = !1;
              if (ut >= 1) {
                const Je = Ne.borders[xe];
                Math.abs(ke[0] - Je[0]) < 3 && Math.abs(ke[1] - Je[1]) < 3 && (ut = 1, xt = !0, Ae = st + 1);
              } else if (ut === 0) {
                h.showCentroid(Xe);
                continue;
              }
              const Ge = pe.centroidData[Ne.centroidDataIndex];
              T && xt && (((ee = He).flags | (se = Ge).flags) & i.d6 ? (ee.flags |= i.d6, se.flags |= i.d6) : (ee.flags &= ~i.d6, se.flags &= ~i.d6));
              const lt = Xe.intersectsCount() > 1 || Ne.intersectsCount() > 1;
              if (ut > 1)
                Ae = st, He.centroidXY = Ge.centroidXY = new i.P(0, 0);
              else if (Me && Me.dem && !lt) {
                const Je = W[oe](He, Ge), _t = oe % 2 ? i.ag - 1 : 0, ct = te(Je[0], Math.min(i.ag - 1, Je[1]), _t, Me, _e, oe < 2, Je[2]);
                He.centroidXY = Ge.centroidXY = R(ct);
              } else
                lt ? He.centroidXY = Ge.centroidXY = new i.P(0, 0) : (He.centroidXY = h.encodeBorderCentroid(Xe), Ge.centroidXY = pe.encodeBorderCentroid(Ne));
              h.writeCentroidToBuffer(He), pe.writeCentroidToBuffer(Ge);
            } else
              h.showCentroid(Xe);
          }
          h.borderDoneWithNeighborZ[oe] = pe.canonical.z, pe.borderDoneWithNeighborZ[xe] = h.canonical.z;
        }
        var ee, se;
        (h.needsCentroidUpdate || !h.centroidVertexBuffer && h.centroidVertexArray.length !== 0) && h.uploadCentroid(c);
      }
      const e_ = [1, 0, 0], lc = [0, 1, 0], cc = [0, 0, 1];
      function yt(c, t, s) {
        const h = s.transform, _ = s.shadowRenderer;
        if (!_)
          return !0;
        const y = c.toUnwrapped(), T = h.tileSize * _._cascades[s.currentShadowCascade].scale;
        let z = t.maxHeight;
        if (h.elevation) {
          const ee = h.elevation.getMinMaxForTile(c);
          ee && (z += ee.max);
        }
        const R = [..._.shadowDirection];
        R[2] = -R[2];
        const F = _.computeSimplifiedTileShadowVolume(y, z, T, R);
        if (!F)
          return !1;
        const N = [e_, lc, cc, R, [R[0], 0, R[2]], [0, R[1], R[2]]], G = h.projection.name === "globe", Z = h.scaleZoom(T), W = i.bR.fromInvProjectionMatrix(h.invProjMatrix, h.worldSize, Z, !G), te = _.getCurrentCascadeFrustum();
        return W.intersectsPrecise(F.vertices, F.planes, N) === 0 || te.intersectsPrecise(F.vertices, F.planes, N) === 0;
      }
      function Dt(c) {
        return [c[0] * i.d9, c[1] * i.d9, c[2] * i.d9, 0];
      }
      function Wa(c, t, s, h, _, y, T, z, R) {
        const F = h.getSource(), N = s.globeSharedBuffers;
        if (!N)
          return;
        let G, Z, W;
        if (t && (G = h.getTile(t)), F instanceof i.aJ ? (Z = F.texture, W = i.cI(0, 0, s.transform)) : G && t && (Z = G.texture, W = i.cI(t.canonical.z, t.canonical.x, s.transform)), !Z || !W)
          return;
        c || (W = i.ab.mat4.scale(i.ab.mat4.create(), W, [1, -1, 1]));
        const te = s.context, ee = te.gl, se = _.paint.get("raster-resampling") === "nearest" ? ee.NEAREST : ee.LINEAR, oe = s.colorModeForDrapableLayerRenderPass(y), he = T.defines;
        he.push("GLOBE_POLES");
        const _e = new Wt(ee.LEQUAL, Wt.ReadWrite, s.depthRangeFor3D), pe = Float32Array.from(s.transform.expandedFarZProjMatrix), Me = Float32Array.from(i.bb(i.cH(new i.bT(0, 0, 0))));
        s.terrain && s.terrain.prepareDrawTile(), te.activeTexture.set(ee.TEXTURE0), Z.bind(se, ee.CLAMP_TO_EDGE), te.activeTexture.set(ee.TEXTURE1), Z.bind(se, ee.CLAMP_TO_EDGE), Z.useMipmap && te.extTextureFilterAnisotropic && s.transform.pitch > 20 && ee.texParameterf(ee.TEXTURE_2D, te.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, te.extTextureFilterAnisotropicMax);
        const [xe, we, ve, Ae] = t ? N.getPoleBuffers(t.canonical.z, !1) : N.getPoleBuffers(0, !0), Oe = _.paint.get("raster-elevation");
        let Xe;
        c ? (Xe = xe, s.renderDefaultNorthPole = Oe !== 0) : (Xe = we, s.renderDefaultSouthPole = Oe !== 0);
        const He = Dt(T.mix), ke = ((st, ut, xt, Ge, lt, Je, _t, ct, nt, Lt, bt, zt, Bt) => pd(st, ut, xt, new Float32Array(16), new Float32Array(9), [0, 0], Ge, [0, 0], [0, 0, 0, 0], 1, { opacity: 1, mix: 0 }, Je, [0, 0], ct, 2, Lt, bt, zt, 1, 0, Bt))(pe, Me, W, i.ae(s.transform.zoom), 0, _, 0, Oe, 0, He, T.offset, T.range, y), Ne = s.getOrCreateProgram("raster", { defines: he });
        s.uploadCommonUniforms(te, Ne, null), Ne.draw(s, ee.TRIANGLES, _e, R, oe, z, ke, _.id, Xe, ve, Ae);
      }
      function Bn(c) {
        const t = c._nearZ, s = c.projection.farthestPixelDistance(c), h = s - t, _ = 0.2 * c.height, y = t + _;
        return [t, s, (y - _ - t) / h, (y - t) / h];
      }
      function $e(c, t, s, h) {
        if (c)
          return t instanceof xn && c instanceof ka ? t.getTextureDescriptor(c, s, !0) : { texture: c.texture, mix: Dt(h.mix), offset: h.offset, buffer: 0, tileSize: 1 };
      }
      var ip = i.da([{ name: "a_index", type: "Int16", components: 1 }]);
      class cu {
        constructor(t, s, h, _) {
          const y = { width: h[0], height: h[1], data: null }, T = t.gl;
          this.targetColorTexture = new i.T(t, y, T.RGBA8, { useMipmap: !1 }), this.backgroundColorTexture = new i.T(t, y, T.RGBA8, { useMipmap: !1 }), this.context = t, this.updateParticleTexture(s, _), this.lastInvalidatedAt = 0;
        }
        updateParticleTexture(t, s) {
          if (this.particleTextureDimension === s.width)
            return;
          (this.particleTexture0 || this.particleTexture1 || this.particleIndexBuffer || this.particleSegment) && (this.particleTexture0.destroy(), this.particleTexture1.destroy(), this.particleIndexBuffer.destroy(), this.particleSegment.destroy());
          const h = this.context.gl, _ = s.width * s.height;
          this.particleTexture0 = new i.T(this.context, s, h.RGBA8, { premultiply: !1, useMipmap: !1 }), this.particleTexture1 = new i.T(this.context, s, h.RGBA8, { premultiply: !1, useMipmap: !1 });
          const y = new i.db();
          y.reserve(_);
          for (let T = 0; T < _; T++)
            y.emplaceBack(T);
          this.particleIndexBuffer = this.context.createVertexBuffer(y, ip.members, !0), this.particleSegment = i.b7.simpleSegment(0, 0, this.particleIndexBuffer.length, 0), this.particleTextureDimension = s.width;
        }
        update(t) {
          return !(this.lastInvalidatedAt < t && (this.lastInvalidatedAt = i.q.now(), 1));
        }
        destroy() {
          this.targetColorTexture.destroy(), this.backgroundColorTexture.destroy(), this.particleIndexBuffer.destroy(), this.particleTexture0.destroy(), this.particleTexture1.destroy(), this.particleSegment.destroy();
        }
      }
      function bd(c, t, s) {
        if (!c)
          return null;
        const h = t.getTextureDescriptor(c, s, !0);
        if (!h)
          return null;
        let { texture: _, mix: y, offset: T, tileSize: z, buffer: R, format: F } = h;
        if (!_ || !F)
          return null;
        let N = !1;
        return F === "uint32" && (N = !0, y[3] = 0, y = eh(i.dc, y, [0, s.paint.get("raster-particle-max-speed")]), T = Ft(i.dc, T, [0, s.paint.get("raster-particle-max-speed")])), { texture: _, textureOffset: [R / (z + 2 * R), z / (z + 2 * R)], tileSize: z, scalarData: N, scale: y, offset: T, defines: ["RASTER_ARRAY", { uint8: "DATA_FORMAT_UINT8", uint16: "DATA_FORMAT_UINT16", uint32: "DATA_FORMAT_UINT32" }[F]] };
      }
      function np(c) {
        const t = c._nearZ, s = c.projection.farthestPixelDistance(c), h = s - t, _ = 0.2 * c.height, y = t + _;
        return [t, s, (y - _ - t) / h, (y - t) / h];
      }
      const sp = new i.aj(1, 0, 0, 1), rp = new i.aj(0, 1, 0, 1), hc = new i.aj(0, 0, 1, 1), t_ = new i.aj(1, 0, 1, 1), i_ = new i.aj(0, 1, 1, 1);
      function Sl(c, t, s, h, _, y, T) {
        const z = c.context, R = c.transform, F = z.gl, N = R.projection.name === "globe", G = N ? ["PROJECTION_GLOBE_VIEW"] : [];
        let Z = i.ab.mat4.clone(s.projMatrix);
        if (N && i.ae(R.zoom) > 0) {
          const He = i.ba(s.canonical, R), ke = i.dd(He);
          Z = i.ab.mat4.multiply(new Float32Array(16), R.globeMatrix, ke), i.ab.mat4.multiply(Z, R.projMatrix, Z);
        }
        const W = i.ab.mat4.create();
        W[12] += 2 * _ / (i.q.devicePixelRatio * R.width), W[13] += 2 * y / (i.q.devicePixelRatio * R.height), i.ab.mat4.multiply(Z, W, Z);
        const te = c.getOrCreateProgram("debug", { defines: G }), ee = t.getTileByID(s.key);
        c.terrain && c.terrain.setupElevationDraw(ee, te);
        const se = Wt.disabled, oe = ci.disabled, he = c.colorModeForRenderPass(), _e = "$debug";
        z.activeTexture.set(F.TEXTURE0), c.emptyTexture.bind(F.LINEAR, F.CLAMP_TO_EDGE), N ? ee._makeGlobeTileDebugBuffers(c.context, R) : ee._makeDebugTileBoundsBuffers(c.context, R.projection);
        const pe = ee._tileDebugBuffer || c.debugBuffer, Me = ee._tileDebugIndexBuffer || c.debugIndexBuffer, xe = ee._tileDebugSegments || c.debugSegments;
        if (te.draw(c, F.LINE_STRIP, se, oe, he, ti.disabled, fd(Z, h), _e, pe, Me, xe, null, null, null, [ee._globeTileDebugBorderBuffer]), T) {
          const He = ee.latestRawTileData, ke = Math.floor((He && He.byteLength || 0) / 1024);
          let Ne = s.canonical.toString();
          s.overscaledZ !== s.canonical.z && (Ne += ` => ${s.overscaledZ}`), Ne += ` ${ee.state}`, Ne += ` ${ke}kb`, function(st, ut) {
            st.initDebugOverlayCanvas();
            const xt = st.debugOverlayCanvas, Ge = st.context.gl, lt = st.debugOverlayCanvas.getContext("2d");
            lt.clearRect(0, 0, xt.width, xt.height), lt.shadowColor = "white", lt.shadowBlur = 2, lt.lineWidth = 1.5, lt.strokeStyle = "white", lt.textBaseline = "top", lt.font = "bold 36px Open Sans, sans-serif", lt.fillText(ut, 5, 5), lt.strokeText(ut, 5, 5), st.debugOverlayTexture.update(xt), st.debugOverlayTexture.bind(Ge.LINEAR, Ge.CLAMP_TO_EDGE);
          }(c, Ne);
        }
        const we = t.getTile(s).tileSize, ve = 512 / Math.min(we, 512) * (s.overscaledZ / R.zoom) * 0.5, Ae = ee._tileDebugTextBuffer || c.debugBuffer, Oe = ee._tileDebugTextIndexBuffer || c.quadTriangleIndexBuffer, Xe = ee._tileDebugTextSegments || c.debugSegments;
        te.draw(c, F.TRIANGLES, se, oe, bi.alphaBlended, ti.disabled, fd(Z, i.aj.transparent, ve), _e, Ae, Oe, Xe, null, null, null, [ee._globeTileDebugTextBuffer]);
      }
      function nh(c, t, s, h) {
        sh(c, 0, t + s / 2, c.transform.width, s, h);
      }
      function hu(c, t, s, h) {
        sh(c, t - s / 2, 0, s, c.transform.height, h);
      }
      function sh(c, t, s, h, _, y) {
        const T = c.context, z = T.gl;
        z.enable(z.SCISSOR_TEST), z.scissor(t * i.q.devicePixelRatio, s * i.q.devicePixelRatio, h * i.q.devicePixelRatio, _ * i.q.devicePixelRatio), T.clear({ color: y }), z.disable(z.SCISSOR_TEST);
      }
      const op = i.da([{ name: "a_pos_3f", components: 3, type: "Float32" }]), { members: uu } = op;
      function Co(c, t, s, h) {
        c.emplaceBack(t, s, h);
      }
      class Io {
        constructor(t) {
          this.vertexArray = new i.de(), this.indices = new i.aU(), Co(this.vertexArray, -1, -1, 1), Co(this.vertexArray, 1, -1, 1), Co(this.vertexArray, -1, 1, 1), Co(this.vertexArray, 1, 1, 1), Co(this.vertexArray, -1, -1, -1), Co(this.vertexArray, 1, -1, -1), Co(this.vertexArray, -1, 1, -1), Co(this.vertexArray, 1, 1, -1), this.indices.emplaceBack(5, 1, 3), this.indices.emplaceBack(3, 7, 5), this.indices.emplaceBack(6, 2, 0), this.indices.emplaceBack(0, 4, 6), this.indices.emplaceBack(2, 6, 7), this.indices.emplaceBack(7, 3, 2), this.indices.emplaceBack(5, 4, 0), this.indices.emplaceBack(0, 1, 5), this.indices.emplaceBack(0, 2, 3), this.indices.emplaceBack(3, 1, 0), this.indices.emplaceBack(7, 6, 4), this.indices.emplaceBack(4, 5, 7), this.vertexBuffer = t.createVertexBuffer(this.vertexArray, uu), this.indexBuffer = t.createIndexBuffer(this.indices), this.segment = i.b7.simpleSegment(0, 0, 36, 12);
        }
      }
      function El(c, t, s, h, _, y) {
        const T = c.context.gl, z = t.paint.get("sky-atmosphere-color"), R = t.paint.get("sky-atmosphere-halo-color"), F = t.paint.get("sky-atmosphere-sun-intensity"), N = ((G, Z, W, te, ee) => ({ u_matrix_3f: G, u_sun_direction: Z, u_sun_intensity: W, u_color_tint_r: [te.r, te.g, te.b, te.a], u_color_tint_m: [ee.r, ee.g, ee.b, ee.a], u_luminance: 5e-5 }))(i.ab.mat3.fromMat4(i.ab.mat3.create(), h), _, F, z, R);
        T.framebufferTexture2D(T.FRAMEBUFFER, T.COLOR_ATTACHMENT0, T.TEXTURE_CUBE_MAP_POSITIVE_X + y, t.skyboxTexture, 0), s.draw(c, T.TRIANGLES, Wt.disabled, ci.disabled, bi.unblended, ti.frontCW, N, "skyboxCapture", t.skyboxGeometry.vertexBuffer, t.skyboxGeometry.indexBuffer, t.skyboxGeometry.segment);
      }
      const n_ = i.da([{ type: "Float32", name: "a_pos", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }]);
      class wr {
        constructor(t) {
          const s = new i.df();
          s.emplaceBack(-1, 1, 1, 0, 0), s.emplaceBack(1, 1, 1, 1, 0), s.emplaceBack(1, -1, 1, 1, 1), s.emplaceBack(-1, -1, 1, 0, 1);
          const h = new i.aU();
          h.emplaceBack(0, 1, 2), h.emplaceBack(2, 3, 0), this.vertexBuffer = t.createVertexBuffer(s, n_.members), this.indexBuffer = t.createIndexBuffer(h), this.segments = i.b7.simpleSegment(0, 0, 4, 2);
        }
        destroy() {
          this.vertexBuffer.destroy(), this.indexBuffer.destroy(), this.segments.destroy();
        }
      }
      const s_ = i.da([{ type: "Float32", name: "a_pos_3f", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }, { type: "Float32", name: "a_size_scale", components: 1 }, { type: "Float32", name: "a_fade_opacity", components: 1 }]);
      class rh {
        constructor() {
          this.starsCount = 16e3, this.sizeMultiplier = 0.15, this.sizeRange = 100, this.intensityRange = 200;
        }
      }
      class bn {
        constructor(t) {
          this.colorModeAlphaBlendedWriteRGB = new bi([1, Xo, 1, Xo], i.aj.transparent, [!0, !0, !0, !1]), this.colorModeWriteAlpha = new bi([1, 0, 1, 0], i.aj.transparent, [!1, !1, !1, !0]), this.params = new rh(), this.updateNeeded = !0, t.tp.registerParameter(this.params, ["Stars"], "starsCount", { min: 100, max: 16e3, step: 1 }, () => {
            this.updateNeeded = !0;
          }), t.tp.registerParameter(this.params, ["Stars"], "sizeMultiplier", { min: 0.01, max: 2, step: 0.01 }), t.tp.registerParameter(this.params, ["Stars"], "sizeRange", { min: 0, max: 200, step: 1 }, () => {
            this.updateNeeded = !0;
          }), t.tp.registerParameter(this.params, ["Stars"], "intensityRange", { min: 0, max: 200, step: 1 }, () => {
            this.updateNeeded = !0;
          });
        }
        update(t) {
          const s = t.context;
          if (!this.atmosphereBuffer || this.updateNeeded) {
            this.updateNeeded = !1, this.atmosphereBuffer = new wr(s);
            const h = this.params.sizeRange, _ = this.params.intensityRange, y = function(N) {
              const G = i.di(30), Z = [];
              for (let W = 0; W < N; ++W) {
                const te = 2 * Math.PI * G(), ee = Math.acos(1 - 2 * G()) - 0.5 * Math.PI;
                Z.push(i.ab.vec3.fromValues(Math.cos(ee) * Math.cos(te), Math.cos(ee) * Math.sin(te), Math.sin(ee)));
              }
              return Z;
            }(this.params.starsCount), T = i.di(300), z = new i.dg(), R = new i.aU();
            let F = 0;
            for (let N = 0; N < y.length; ++N) {
              const G = i.ab.vec3.scale([], y[N], 200), Z = Math.max(0, 1 + 0.01 * h * (1 * T() - 0.5)), W = Math.max(0, 1 + 0.01 * _ * (1 * T() - 0.5));
              z.emplaceBack(G[0], G[1], G[2], -1, -1, Z, W), z.emplaceBack(G[0], G[1], G[2], 1, -1, Z, W), z.emplaceBack(G[0], G[1], G[2], 1, 1, Z, W), z.emplaceBack(G[0], G[1], G[2], -1, 1, Z, W), R.emplaceBack(F + 0, F + 1, F + 2), R.emplaceBack(F + 0, F + 2, F + 3), F += 4;
            }
            this.starsVx = s.createVertexBuffer(z, s_.members), this.starsIdx = s.createIndexBuffer(R), this.starsSegments = i.b7.simpleSegment(0, 0, z.length, R.length);
          }
        }
        destroy() {
          this.atmosphereBuffer && this.atmosphereBuffer.destroy(), this.starsVx && this.starsVx.destroy(), this.starsIdx && this.starsIdx.destroy();
        }
        drawAtmosphereGlow(t, s) {
          const h = t.context, _ = h.gl, y = t.transform, T = new Wt(_.LEQUAL, Wt.ReadOnly, [0, 1]), z = i.ae(y.zoom), R = t.style.getLut(s.scope), F = s.properties.get("color-use-theme") === "none", N = s.properties.get("color").toRenderColor(F ? null : R).toArray01(), G = s.properties.get("high-color-use-theme") === "none", Z = s.properties.get("high-color").toRenderColor(G ? null : R).toArray01(), W = s.properties.get("space-color-use-theme") === "none", te = s.properties.get("space-color").toRenderColor(W ? null : R).toArray01PremultipliedAlpha(), ee = 5e-4, se = i.dh(s.properties.get("horizon-blend"), 0, 1, ee, 0.25), oe = i.cC(t, h, y) && se === ee ? y.worldSize / (2 * Math.PI * 1.025) - 1 : y.globeRadius, he = t.frameCounter / 1e3 % 1, _e = i.ab.vec3.length(y.globeCenterInViewSpace), pe = Math.sqrt(Math.pow(_e, 2) - Math.pow(oe, 2)), Me = Math.acos(pe / _e), xe = (we) => {
            const ve = y.projection.name === "globe" ? ["PROJECTION_GLOBE_VIEW", "FOG"] : ["FOG"];
            we && ve.push("ALPHA_PASS");
            const Ae = t.getOrCreateProgram("globeAtmosphere", { defines: ve }), Oe = ((He, ke, Ne, st, ut, xt, Ge, lt, Je, _t, ct, nt) => ({ u_frustum_tl: He, u_frustum_tr: ke, u_frustum_br: Ne, u_frustum_bl: st, u_horizon: ut, u_transition: xt, u_fadeout_range: Ge, u_color: lt, u_high_color: Je, u_space_color: _t, u_temporal_offset: ct, u_horizon_angle: nt }))(y.frustumCorners.TL, y.frustumCorners.TR, y.frustumCorners.BR, y.frustumCorners.BL, y.frustumCorners.horizon, z, se, N, Z, te, he, Me);
            t.uploadCommonUniforms(h, Ae);
            const Xe = this.atmosphereBuffer;
            Xe && Ae.draw(t, _.TRIANGLES, T, ci.disabled, we ? this.colorModeWriteAlpha : this.colorModeAlphaBlendedWriteRGB, ti.backCW, Oe, we ? "atmosphere_glow_alpha" : "atmosphere_glow", Xe.vertexBuffer, Xe.indexBuffer, Xe.segments);
          };
          xe(!1), xe(!0);
        }
        drawStars(t, s) {
          const h = i.aw(s.properties.get("star-intensity"), 0, 1);
          if (h === 0)
            return;
          const _ = t.context, y = _.gl, T = t.transform, z = t.getOrCreateProgram("stars"), R = i.ab.quat.identity([]);
          i.ab.quat.rotateX(R, R, -T._pitch), i.ab.quat.rotateZ(R, R, -T.angle), i.ab.quat.rotateX(R, R, i.ai(T._center.lat)), i.ab.quat.rotateY(R, R, -i.ai(T._center.lng));
          const F = i.ab.mat4.fromQuat(new Float32Array(16), R), N = i.ab.mat4.multiply([], T.starsProjMatrix, F), G = i.ab.mat3.fromMat4([], F), Z = i.ab.mat3.invert([], G), W = [0, 1, 0];
          i.ab.vec3.transformMat3(W, W, Z), i.ab.vec3.scale(W, W, this.params.sizeMultiplier);
          const te = [1, 0, 0];
          i.ab.vec3.transformMat3(te, te, Z), i.ab.vec3.scale(te, te, this.params.sizeMultiplier);
          const ee = (se = W, oe = te, he = h, { u_matrix: Float32Array.from(N), u_up: se, u_right: oe, u_intensity_multiplier: he });
          var se, oe, he;
          t.uploadCommonUniforms(_, z), this.starsVx && this.starsIdx && z.draw(t, y.TRIANGLES, Wt.disabled, ci.disabled, this.colorModeAlphaBlendedWriteRGB, ti.disabled, ee, "atmosphere_stars", this.starsVx, this.starsIdx, this.starsSegments);
        }
      }
      function qi(c, t) {
        const s = [...c], h = t.cameraWorldSizeForFog / t.worldSize, _ = i.ab.mat4.identity([]);
        return i.ab.mat4.scale(_, _, [h, h, 1]), i.ab.mat4.multiply(s, _, s), i.ab.mat4.multiply(s, t.worldToFogMatrix, s), s;
      }
      function du(c, t, s, h, _) {
        const y = s.material, T = h.context, { baseColorTexture: z, metallicRoughnessTexture: R } = y.pbrMetallicRoughness, { normalTexture: F, occlusionTexture: N, emissionTexture: G } = y;
        function Z(te, ee, se) {
          if (te && (c.push(ee), T.activeTexture.set(T.gl.TEXTURE0 + se), te.gfxTexture)) {
            const { minFilter: oe, magFilter: he, wrapS: _e, wrapT: pe } = te.sampler;
            te.gfxTexture.bindExtraParam(oe, he, _e, pe);
          }
        }
        Z(z, "HAS_TEXTURE_u_baseColorTexture", bs.BaseColor), Z(R, "HAS_TEXTURE_u_metallicRoughnessTexture", bs.MetallicRoughness), Z(F, "HAS_TEXTURE_u_normalTexture", bs.Normal), Z(N, "HAS_TEXTURE_u_occlusionTexture", bs.Occlusion), Z(G, "HAS_TEXTURE_u_emissionTexture", bs.Emission), _ && (_.texture || (_.texture = new i.dk(h.context, _.image, [_.image.height, _.image.height, _.image.height], T.gl.RGBA8)), T.activeTexture.set(T.gl.TEXTURE0 + bs.LUT), _.texture && _.texture.bind(T.gl.LINEAR, T.gl.CLAMP_TO_EDGE), c.push("APPLY_LUT_ON_GPU")), s.texcoordBuffer && (c.push("HAS_ATTRIBUTE_a_uv_2f"), t.push(s.texcoordBuffer)), s.colorBuffer && (c.push(s.colorBuffer.itemSize === 12 ? "HAS_ATTRIBUTE_a_color_3f" : "HAS_ATTRIBUTE_a_color_4f"), t.push(s.colorBuffer)), s.normalBuffer && (c.push("HAS_ATTRIBUTE_a_normal_3f"), t.push(s.normalBuffer)), s.pbrBuffer && (c.push("HAS_ATTRIBUTE_a_pbr"), c.push("HAS_ATTRIBUTE_a_heightBasedEmissiveStrength"), t.push(s.pbrBuffer)), y.alphaMode !== "OPAQUE" && y.alphaMode !== "MASK" || c.push("UNPREMULT_TEXTURE_IN_SHADER"), y.defined || c.push("DIFFUSE_SHADED"), c.push("USE_STANDARD_DERIVATIVES");
        const W = h.shadowRenderer;
        W && (c.push("RENDER_SHADOWS", "DEPTH_TEXTURE"), W.useNormalOffset && c.push("NORMAL_OFFSET"));
      }
      function Lo(c, t, s, h, _, y) {
        const T = s.paint.get("model-opacity").constantOr(1), z = t.context, R = new Wt(t.context.gl.LEQUAL, Wt.ReadWrite, t.depthRangeFor3D), F = t.transform, N = c.mesh, G = N.material, Z = G.pbrMetallicRoughness, W = t.style.fog;
        let te;
        te = t.transform.projection.zAxisUnit === "pixels" ? [...c.nodeModelMatrix] : i.ab.mat4.multiply([], h.zScaleMatrix, c.nodeModelMatrix), i.ab.mat4.multiply(te, h.negCameraPosMatrix, te);
        const ee = i.ab.mat4.invert([], te);
        i.ab.mat4.transpose(ee, ee);
        const se = s.paint.get("model-color-use-theme").constantOr("default") === "none", oe = s.paint.get("model-emissive-strength").constantOr(0), he = gd(new Float32Array(c.worldViewProjection), new Float32Array(te), new Float32Array(ee), null, t, T, Z.baseColorFactor.toRenderColor(null), G.emissiveFactor, Z.metallicFactor, Z.roughnessFactor, G, oe, s), _e = { defines: [] }, pe = [], Me = t.shadowRenderer;
        Me && (Me.useNormalOffset = !1), du(_e.defines, pe, N, t, se ? null : s.lut);
        let xe = null;
        if (W) {
          const Ae = qi(c.nodeModelMatrix, t.transform);
          if (xe = new Float32Array(Ae), F.projection.name !== "globe") {
            const Oe = N.aabb.min, Xe = N.aabb.max, [He, ke] = W.getOpacityForBounds(Ae, Oe[0], Oe[1], Xe[0], Xe[1]);
            _e.overrideFog = He >= It || ke >= It;
          }
        }
        const we = Mo(t, s.paint.get("model-cutoff-fade-range"));
        we.shouldRenderCutoff && _e.defines.push("RENDER_CUTOFF");
        const ve = t.getOrCreateProgram("model", _e);
        t.uploadCommonUniforms(z, ve, null, xe, we), t.renderPass !== "shadow" && Me && Me.setupShadowsFromMatrix(c.nodeModelMatrix, ve), ve.draw(t, z.gl.TRIANGLES, R, _, y, N.material.doubleSided ? ti.disabled : ti.backCCW, he, s.id, N.vertexBuffer, N.indexBuffer, N.segments, s.paint, t.transform.zoom, void 0, pe);
      }
      function oh(c, t, s, h, _, y, T) {
        let z;
        z = c.projection.name === "globe" ? i.dl(s, c) : [...s], i.ab.mat4.multiply(z, z, t.matrix);
        const R = i.ab.mat4.multiply([], h, z);
        if (t.meshes)
          for (const F of t.meshes) {
            if (F.material.alphaMode !== "BLEND") {
              T.push({ mesh: F, depth: 0, modelIndex: _, worldViewProjection: R, nodeModelMatrix: z });
              continue;
            }
            const N = i.ab.vec3.transformMat4([], F.centroid, R);
            N[2] > 0 && y.push({ mesh: F, depth: N[2], modelIndex: _, worldViewProjection: R, nodeModelMatrix: z });
          }
        if (t.children)
          for (const F of t.children)
            oh(c, F, s, h, _, y, T);
      }
      function $a(c, t, s, h) {
        const _ = s.shadowRenderer;
        if (!_)
          return;
        const y = _.getShadowPassDepthMode(), T = _.getShadowPassColorMode(), z = _.calculateShadowPassMatrixFromMatrix(t), R = Qf(z);
        s.getOrCreateProgram("modelDepth", { defines: s._shadowMapDebug ? [] : ["DEPTH_TEXTURE"] }).draw(s, s.context.gl.TRIANGLES, y, ci.disabled, T, ti.backCCW, R, h.id, c.vertexBuffer, c.indexBuffer, c.segments, h.paint, s.transform.zoom, void 0, void 0);
      }
      function wd(c, t, s) {
        const h = t.updateZoomBasedPaintProperties(), _ = function(y, T, z) {
          let R, F, N, G = y.terrain ? y.terrain.exaggeration() : 0;
          if (y.terrain && G > 0) {
            const Z = y.terrain, W = Z.findDEMTileFor(z);
            W && W.dem ? R = i.dn.create(Z, z, W) : G = 0;
          }
          if (G === 0 && (T.terrainElevationMin = 0, T.terrainElevationMax = 0), G === T.validForExaggeration && (G === 0 || R && R._demTile && R._demTile.tileID === T.validForDEMTile.id && R._dem._timestamp === T.validForDEMTile.timestamp))
            return !1;
          for (const Z in T.instancesPerModel) {
            const W = T.instancesPerModel[Z];
            for (let te = 0; te < W.instancedDataArray.length; ++te) {
              const ee = (R ? G * R.getElevationAt(0 | W.instancedDataArray.float32[16 * te], 0 | W.instancedDataArray.float32[16 * te + 1], !0, !0) : 0) + W.instancesEvaluatedElevation[te];
              W.instancedDataArray.float32[16 * te + 6] = ee, F = F ? Math.min(T.terrainElevationMin, ee) : ee, N = N ? Math.max(T.terrainElevationMax, ee) : ee;
            }
          }
          return T.terrainElevationMin = F || 0, T.terrainElevationMax = N || 0, T.validForExaggeration = G, T.validForDEMTile = R && R._demTile ? { id: R._demTile.tileID, timestamp: R._dem._timestamp } : { id: void 0, timestamp: 0 }, !0;
        }(c, t, s);
        (h || _) && (t.uploaded = !1, t.upload(c.context));
      }
      const ho = { shadowUniformsInitialized: !1, useSingleShadowCascade: !1, tileMatrix: new Float64Array(16), shadowTileMatrix: new Float32Array(16), aabb: new i.cd([0, 0, 0], [i.ag, i.ag, 0]) };
      function Xa(c, t) {
        const s = 1 << c.canonical.z, h = t.getFreeCameraOptions().position, _ = t.elevation, y = c.canonical.x / s, T = (c.canonical.x + 1) / s, z = c.canonical.y / s, R = (c.canonical.y + 1) / s;
        let F = t._centerAltitude;
        if (_) {
          const W = _.getMinMaxForTile(c);
          W && W.max > F && (F = W.max);
        }
        const N = i.aw(h.x, y, T) - h.x, G = i.aw(h.y, z, R) - h.y, Z = i.bH(F, t.center.lat) - h.z;
        return t._zoomFromMercatorZ(Math.sqrt(N * N + G * G + Z * Z));
      }
      function va(c, t, s, h, _, y, T) {
        const z = c.context, R = c.renderPass === "shadow", F = c.shadowRenderer, N = R && F ? F.getShadowPassDepthMode() : new Wt(z.gl.LEQUAL, Wt.ReadWrite, c.depthRangeFor3D), G = c.isTileAffectedByFog(y);
        if (s.meshes)
          for (const Z of s.meshes) {
            const W = ["MODEL_POSITION_ON_GPU"], te = [];
            let ee, se, oe;
            h.instancedDataArray.length > 20 && W.push("INSTANCED_ARRAYS");
            const he = Mo(c, t.paint.get("model-cutoff-fade-range"));
            if (he.shouldRenderCutoff && W.push("RENDER_CUTOFF"), R && F)
              ee = c.getOrCreateProgram("modelDepth", { defines: W }), se = Qf(T.shadowTileMatrix, T.shadowTileMatrix, Float32Array.from(s.matrix)), oe = F.getShadowPassColorMode();
            else {
              du(W, te, Z, c, t.paint.get("model-color-use-theme").constantOr("default") === "none" ? null : t.lut), ee = c.getOrCreateProgram("model", { defines: W, overrideFog: G });
              const pe = Z.material, Me = pe.pbrMetallicRoughness, xe = t.paint.get("model-opacity").constantOr(1), we = t.paint.get("model-emissive-strength").constantOr(0);
              se = gd(y.expandedProjMatrix, Float32Array.from(s.matrix), new Float32Array(16), null, c, xe, Me.baseColorFactor.toRenderColor(null), pe.emissiveFactor, Me.metallicFactor, Me.roughnessFactor, pe, we, t, _), F && (T.shadowUniformsInitialized ? ee.setShadowUniformValues(z, F.getShadowUniformValues()) : (F.setupShadows(y.toUnwrapped(), ee, "model-tile", y.overscaledZ), T.shadowUniformsInitialized = !0)), oe = he.shouldRenderCutoff || xe < 1 || pe.alphaMode !== "OPAQUE" ? bi.alphaBlended : bi.unblended;
            }
            c.uploadCommonUniforms(z, ee, y.toUnwrapped(), null, he);
            const _e = Z.material.doubleSided ? ti.disabled : ti.backCCW;
            if (h.instancedDataArray.length > 20)
              te.push(h.instancedDataBuffer), ee.draw(c, z.gl.TRIANGLES, N, ci.disabled, oe, _e, se, t.id, Z.vertexBuffer, Z.indexBuffer, Z.segments, t.paint, c.transform.zoom, void 0, te, h.instancedDataArray.length);
            else {
              const pe = R ? "u_instance" : "u_normal_matrix";
              for (let Me = 0; Me < h.instancedDataArray.length; ++Me)
                se[pe] = new Float32Array(h.instancedDataArray.arrayBuffer, 64 * Me, 16), ee.draw(c, z.gl.TRIANGLES, N, ci.disabled, oe, _e, se, t.id, Z.vertexBuffer, Z.indexBuffer, Z.segments, t.paint, c.transform.zoom, void 0, te);
            }
          }
        if (s.children)
          for (const Z of s.children)
            va(c, t, Z, h, _, y, T);
      }
      const Ya = [1, -1, 1];
      function fu(c, t, s, h) {
        if (!s.modelManager)
          return !0;
        const _ = s.modelManager;
        if (!s.shadowRenderer)
          return !0;
        const y = s.shadowRenderer, T = t.aabb;
        let z = !0, R = c.maxHeight;
        if (R === 0) {
          let N = 0;
          for (const G in c.instancesPerModel) {
            const Z = _.getModel(G, h);
            Z ? N = Math.max(N, Math.max(Math.max(Z.aabb.max[0], Z.aabb.max[1]), Z.aabb.max[2])) : z = !1;
          }
          R = c.maxScale * N * 1.41 + c.maxVerticalOffset, z && (c.maxHeight = R);
        }
        T.max[2] = R, T.min[2] += c.terrainElevationMin, T.max[2] += c.terrainElevationMax, i.ab.vec3.transformMat4(T.min, T.min, t.tileMatrix), i.ab.vec3.transformMat4(T.max, T.max, t.tileMatrix);
        const F = T.intersects(y.getCurrentCascadeFrustum());
        return s.currentShadowCascade === 0 && (c.isInsideFirstShadowMapFrustum = F === 2), F === 0;
      }
      function pu(c, t) {
        const s = c.uniformValues.u_cutoff_params[0], h = c.uniformValues.u_cutoff_params[1], _ = c.uniformValues.u_cutoff_params[2], y = c.uniformValues.u_cutoff_params[3];
        return h === s || y === _ ? 1 : i.aw(((t - s) / (h - s) - _) / (y - _), 0, 1);
      }
      function Td(c, t, s, h) {
        if (t.pitch < 20)
          return 1;
        const _ = t.getWorldToCameraMatrix();
        i.ab.mat4.multiply(_, _, c);
        const y = i.ab.vec4.fromValues(s.min[0], s.min[1], s.min[2], 1);
        let T = i.ab.vec4.transformMat4(i.ab.vec4.create(), y, _), z = T, R = T;
        y[1] = s.max[1], T = i.ab.vec4.transformMat4(i.ab.vec4.create(), y, _), z = T[1] < z[1] ? T : z, R = T[1] > R[1] ? T : R, y[0] = s.max[0], T = i.ab.vec4.transformMat4(i.ab.vec4.create(), y, _), z = T[1] < z[1] ? T : z, R = T[1] > R[1] ? T : R, y[1] = s.min[1], T = i.ab.vec4.transformMat4(i.ab.vec4.create(), y, _), z = T[1] < z[1] ? T : z, R = T[1] > R[1] ? T : R;
        const F = i.aw(h[0], 0, 1), N = 100 * t.pixelsPerMeter * i.aw(h[1], 0, 1), G = i.aw(h[2], 0, 1), Z = i.ab.vec4.lerp(i.ab.vec4.create(), z, R, F), W = Math.tan(0.5 * t.fovX), te = -Z[2] * W;
        if (N === 0)
          return Z[1] < -Math.abs(te) ? G : 1;
        const ee = (-Math.abs(te) - Z[1]) / N, se = (he, _e, pe) => (1 - pe) * he + pe * _e, oe = i.aw(se(1, G, ee), G, 1);
        return se(1, oe, i.aw((t.pitch - 20) / 20, 0, 1));
      }
      class Md {
      }
      class Sd {
        constructor() {
          this._storage = /* @__PURE__ */ new Map();
        }
        getLinesFromTrianglesBuffer(t, s, h) {
          {
            const G = this._storage.get(s.id);
            if (G)
              return G.lastUsedFrameIdx = t, G.buf;
          }
          const _ = h.gl, y = _.getBufferParameter(_.ELEMENT_ARRAY_BUFFER, _.BUFFER_SIZE), T = new ArrayBuffer(y), z = new Int16Array(T);
          _.getBufferSubData(_.ELEMENT_ARRAY_BUFFER, 0, new Int16Array(T));
          const R = new i.dq();
          for (let G = 0; G < y / 2; G += 3) {
            const Z = z[G], W = z[G + 1], te = z[G + 2];
            R.emplaceBack(Z, W), R.emplaceBack(W, te), R.emplaceBack(te, Z);
          }
          const F = h.bindVertexArrayOES.current, N = new Md();
          return N.buf = new ea(h, R), N.lastUsedFrameIdx = t, this._storage.set(s.id, N), h.bindVertexArrayOES.set(F), N.buf;
        }
        update(t) {
          for (const [s, h] of this._storage)
            t - h.lastUsedFrameIdx > 30 && (h.buf.destroy(), this._storage.delete(s));
        }
        destroy() {
          for (const [t, s] of this._storage)
            s.buf.destroy(), this._storage.delete(t);
        }
      }
      class Ka {
        constructor(t) {
          this.occluderSize = 30, this.depthOffset = -1e-4, t.registerParameter(this, ["Occlusion"], "occluderSize", { min: 1, max: 100, step: 1 }), t.registerParameter(this, ["Occlusion"], "depthOffset", { min: -0.05, max: 0, step: 1e-5 });
        }
      }
      const Ed = i.da([{ type: "Float32", name: "a_pos_3f", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }, { type: "Float32", name: "a_rainParticleData", components: 4 }]);
      class mu {
        registerParameter() {
        }
        registerButton() {
        }
        registerBinding() {
        }
        refreshUI() {
        }
      }
      class _u {
        constructor(t, s) {
          this.revealStart = 11, this.revealRange = 2, t.registerParameter(this, [...s, "Reveal"], "revealStart", { min: 0, max: 17, step: 0.05 }), t.registerParameter(this, [...s, "Reveal"], "revealRange", { min: 0.1, max: 5.1, step: 0.05 });
        }
      }
      const Pd = i.da([{ type: "Float32", name: "a_pos_2f", components: 2 }]);
      class qs {
        destroy() {
          this.vignetteVx && this.vignetteVx.destroy(), this.vignetteIdx && this.vignetteIdx.destroy();
        }
        draw(t, s) {
          const h = t.getOrCreateProgram("vignette");
          if (!this.vignetteVx || !this.vignetteIdx) {
            const T = new i.dr(), z = new i.aU();
            T.emplaceBack(-1, -1), T.emplaceBack(1, -1), T.emplaceBack(1, 1), T.emplaceBack(-1, 1), z.emplaceBack(0, 1, 2), z.emplaceBack(0, 2, 3), this.vignetteVx = t.context.createVertexBuffer(T, Pd.members), this.vignetteIdx = t.context.createIndexBuffer(z);
          }
          const _ = i.b7.simpleSegment(0, 0, 4, 6);
          if (this.vignetteVx && this.vignetteIdx) {
            t.uploadCommonUniforms(t.context, h);
            const T = { u_vignetteShape: (y = { vignetteShape: [s.start, s.range, Math.pow(10, s.fadePower)], vignetteColor: [s.color.r, s.color.g, s.color.b, s.color.a * s.strength] }).vignetteShape, u_vignetteColor: y.vignetteColor };
            h.draw(t, t.context.gl.TRIANGLES, Wt.disabled, ci.disabled, bi.alphaBlended, ti.disabled, T, "vignette", this.vignetteVx, this.vignetteIdx, _, {});
          }
          var y;
        }
      }
      class Ad {
        constructor() {
          this._accumulatedOffsetX = 0, this._accumulatedOffsetY = 0, this._accumulatedElevation = 0;
        }
        update(t, s) {
          const h = t.getFreeCameraOptions().position, _ = h.toAltitude(), y = h.toLngLat(), T = i.ai(y.lng), z = i.ai(y.lat), R = t.pixelsPerMeter / s, F = T * i.ds, N = i.ds * Math.log(Math.tan(Math.PI / 4 + z / 2));
          if (this._offsetXPrev === void 0)
            this._offsetXPrev = 0, this._offsetYPrev = 0, this._elevationPrev = 0, this._accumulatedOffsetX = 0, this._accumulatedOffsetY = 0, this._accumulatedElevation = 0;
          else {
            const G = -this._offsetYPrev + N, Z = -this._elevationPrev + _;
            this._accumulatedOffsetX += (-this._offsetXPrev + F) * R, this._accumulatedOffsetY += G * R, this._accumulatedElevation += Z * R, this._offsetXPrev = F, this._offsetYPrev = N, this._elevationPrev = _;
          }
        }
        getPosition() {
          return [this._accumulatedOffsetX, this._accumulatedOffsetY, this._accumulatedElevation];
        }
      }
      function gu(c, t) {
        return [-(c[0] - Math.floor(c[0] / t) * t), -(c[1] - Math.floor(c[1] / t) * t), -(c[2] - Math.floor(c[2] / t) * t)];
      }
      function uc(c) {
        const t = i.di(1323123451230), s = [];
        for (let h = 0; h < c; ++h) {
          const _ = 2 * t() - 1, y = 2 * t() - 1, T = 2 * t() - 1;
          s.push(i.ab.vec3.fromValues(_, y, T));
        }
        return s;
      }
      function Rr(c, t, s, h, _) {
        const y = i.aw((_ - s) / (h - s), 0, 1);
        return (1 - y) * c + y * t;
      }
      class yu {
        constructor(t) {
          this._movement = new Ad(), this._accumulatedTimeFromStart = 0, this._prevTime = Date.now() / 1e3, this._vignette = new qs(), this._ppmScaleFactor = t;
        }
        destroy() {
          this.particlesVx && this.particlesVx.destroy(), this.particlesIdx && this.particlesIdx.destroy(), this._vignette && this._vignette.destroy();
        }
        updateOnRender(t, s) {
          const h = t.transform;
          this._movement.update(h, this._ppmScaleFactor);
          const _ = h.starsProjMatrix, y = i.ab.quat.identity([]);
          i.ab.quat.rotateX(y, y, i.ai(90) - h._pitch), i.ab.quat.rotateZ(y, y, -h.angle);
          const T = i.ab.mat4.fromQuat(new Float32Array(16), y), z = i.ab.mat4.fromValues(1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1), R = i.ab.mat4.transpose([], z), F = i.ab.mat4.multiply([], R, T), N = Date.now() / 1e3;
          return this._accumulatedTimeFromStart += (N - this._prevTime) * s, this._prevTime = N, { projectionMatrix: _, modelviewMatrix: F };
        }
      }
      class Cd extends yu {
        constructor(t) {
          super(4.25), this._params = { overrideStyleParameters: !1, intensity: 0.5, timeFactor: 1, velocityConeAperture: 0, velocity: 300, boxSize: 2500, dropletSizeX: 1, dropletSizeYScale: 10, distortionStrength: 70, screenThinning: { intensity: 0.57, start: 0.46, range: 1.17, fadePower: 0.17, affectedRatio: 1, particleOffset: -0.2 }, color: { r: 0.66, g: 0.68, b: 0.74, a: 0.7 }, direction: { x: -50, y: -35 }, shapeDirPower: 2, shapeNormalPower: 1 }, this._revealParams = new _u(t.tp, ["Precipitation", "Rain"]), this._vignetteParams = { strength: 1, start: 0.7, range: 1, fadePower: 0.4, color: { r: 0.27, g: 0.27, b: 0.27, a: 1 } }, this.particlesCount = 16e3;
        }
        update(t) {
          const s = t.context;
          if (!this.particlesVx) {
            const h = uc(this.particlesCount), _ = new i.dt(), y = new i.aU();
            let T = 0;
            const z = i.di(1323123451230);
            for (let R = 0; R < h.length; ++R) {
              const F = h[R], N = [2 * z() - 1, z(), z(), z()];
              _.emplaceBack(F[0], F[1], F[2], -1, -1, ...N), _.emplaceBack(F[0], F[1], F[2], 1, -1, ...N), _.emplaceBack(F[0], F[1], F[2], 1, 1, ...N), _.emplaceBack(F[0], F[1], F[2], -1, 1, ...N), y.emplaceBack(T + 0, T + 1, T + 2), y.emplaceBack(T + 0, T + 2, T + 3), T += 4;
            }
            this.particlesVx = s.createVertexBuffer(_, Ed.members), this.particlesIdx = s.createIndexBuffer(y);
          }
        }
        draw(t) {
          if (!this._params.overrideStyleParameters && !t.style.rain)
            return;
          const s = this._params.overrideStyleParameters ? this._revealParams : { revealStart: 0, revealRange: 0.01 }, h = t.transform.zoom;
          if (s.revealStart > h)
            return;
          const _ = Rr(0, 1, s.revealStart, s.revealStart + s.revealRange, h);
          if (!this.particlesVx || !this.particlesIdx)
            return;
          const y = structuredClone(this._params);
          let T = [-y.direction.x, y.direction.y, -100];
          i.ab.vec3.normalize(T, T);
          const z = structuredClone(this._vignetteParams);
          z.strength *= _, y.overrideStyleParameters || (y.intensity = t.style.rain.state.density, y.timeFactor = t.style.rain.state.intensity, y.color = structuredClone(t.style.rain.state.color), T = structuredClone(t.style.rain.state.direction), y.screenThinning.intensity = t.style.rain.state.centerThinning, y.dropletSizeX = t.style.rain.state.dropletSize[0], y.dropletSizeYScale = t.style.rain.state.dropletSize[1] / t.style.rain.state.dropletSize[0], y.distortionStrength = 100 * t.style.rain.state.distortionStrength, z.strength = 1, z.color = structuredClone(t.style.rain.state.vignetteColor));
          const R = this.updateOnRender(t, y.timeFactor), F = t.context, N = F.gl, G = t.transform;
          this.screenTexture && this.screenTexture.size[0] === t.width && this.screenTexture.size[1] === t.height || (this.screenTexture = new i.T(F, { width: t.width, height: t.height, data: null }, N.RGBA8)), y.distortionStrength > 0 && (F.activeTexture.set(N.TEXTURE0), this.screenTexture.bind(N.LINEAR, N.CLAMP_TO_EDGE), N.copyTexSubImage2D(N.TEXTURE_2D, 0, 0, 0, 0, 0, t.width, t.height));
          const Z = t.getOrCreateProgram("rainParticle");
          t.uploadCommonUniforms(F, Z), F.activeTexture.set(N.TEXTURE0), this.screenTexture.bind(N.LINEAR, N.CLAMP_TO_EDGE);
          const W = [y.color.r, y.color.g, y.color.b, y.color.a], te = (ee, se) => {
            const oe = gu(this._movement.getPosition(), ee), he = y.dropletSizeX, _e = y.dropletSizeX * y.dropletSizeYScale, pe = t.width / 2, Me = t.height / 2, xe = Rr(0, y.screenThinning.start, 0, 1, y.screenThinning.intensity), we = Rr(1e-3, y.screenThinning.range, 0, 1, y.screenThinning.intensity), ve = Rr(0, y.screenThinning.particleOffset, 0, 1, y.screenThinning.intensity), Ae = (Oe = { modelview: R.modelviewMatrix, projection: R.projectionMatrix, time: this._accumulatedTimeFromStart, camPos: oe, velocityConeAperture: y.velocityConeAperture, velocity: y.velocity, boxSize: ee, rainDropletSize: [he, _e], distortionStrength: y.distortionStrength, rainDirection: T, color: W, screenSize: [G.width, G.height], thinningCenterPos: [pe, Me], thinningShape: [xe, we, Math.pow(10, y.screenThinning.fadePower)], thinningAffectedRatio: y.screenThinning.affectedRatio, thinningParticleOffset: ve, shapeDirectionalPower: y.shapeDirPower, shapeNormalPower: y.shapeNormalPower, mode: se ? 0 : 1 }, { u_modelview: Float32Array.from(Oe.modelview), u_projection: Float32Array.from(Oe.projection), u_time: Oe.time, u_cam_pos: Oe.camPos, u_texScreen: 0, u_velocityConeAperture: Oe.velocityConeAperture, u_velocity: Oe.velocity, u_boxSize: Oe.boxSize, u_rainDropletSize: Oe.rainDropletSize, u_distortionStrength: Oe.distortionStrength, u_rainDirection: Oe.rainDirection, u_color: Oe.color, u_screenSize: Oe.screenSize, u_thinningCenterPos: Oe.thinningCenterPos, u_thinningShape: Oe.thinningShape, u_thinningAffectedRatio: Oe.thinningAffectedRatio, u_thinningParticleOffset: Oe.thinningParticleOffset, u_shapeDirectionalPower: Oe.shapeDirectionalPower, u_shapeNormalPower: Oe.shapeNormalPower, u_mode: Oe.mode });
            var Oe;
            const Xe = Math.round(_ * y.intensity * this.particlesCount), He = i.b7.simpleSegment(0, 0, 4 * Xe, 2 * Xe);
            Z.draw(t, N.TRIANGLES, Wt.disabled, ci.disabled, bi.alphaBlended, ti.disabled, Ae, "rain_particles", this.particlesVx, this.particlesIdx, He, {});
          };
          y.distortionStrength > 0 && te(y.boxSize, !0), te(y.boxSize, !1), this._vignette.draw(t, z);
        }
      }
      const Id = i.da([{ type: "Float32", name: "a_pos_3f", components: 3 }, { type: "Float32", name: "a_uv", components: 2 }, { type: "Float32", name: "a_snowParticleData", components: 4 }, { type: "Float32", name: "a_snowParticleDataHorizontalOscillation", components: 2 }]);
      class Pl extends yu {
        constructor(t) {
          super(2.25), this._params = { overrideStyleParameters: !1, intensity: 0.85, timeFactor: 0.75, velocityConeAperture: 70, velocity: 40, horizontalOscillationRadius: 4, horizontalOscillationRate: 1.5, boxSize: 2e3, billboardSize: 2, shapeFadeStart: 0.27, shapeFadePower: 0.21, screenThinning: { intensity: 0.4, start: 0.15, range: 1.4, fadePower: 0.24, affectedRatio: 1, particleOffset: -0.2 }, color: { r: 1, g: 1, b: 1, a: 1 }, direction: { x: -50, y: -35 } }, this._revealParams = new _u(t.tp, ["Precipitation", "Snow"]), this._vignetteParams = { strength: 0.3, start: 0.78, range: 0.46, fadePower: 0.2, color: { r: 1, g: 1, b: 1, a: 1 } }, this.particlesCount = 16e3;
        }
        update(t) {
          const s = t.context;
          if (!this.particlesVx) {
            const h = uc(this.particlesCount), _ = new i.du(), y = new i.aU();
            let T = 0;
            const z = i.di(1323123451230);
            for (let R = 0; R < h.length; ++R) {
              const F = h[R], N = z(), G = z(), Z = z(), W = [R / h.length, N, G, Z], te = [z(), z()];
              _.emplaceBack(F[0], F[1], F[2], -1, -1, ...W, ...te), _.emplaceBack(F[0], F[1], F[2], 1, -1, ...W, ...te), _.emplaceBack(F[0], F[1], F[2], 1, 1, ...W, ...te), _.emplaceBack(F[0], F[1], F[2], -1, 1, ...W, ...te), y.emplaceBack(T + 0, T + 1, T + 2), y.emplaceBack(T + 0, T + 2, T + 3), T += 4;
            }
            this.particlesVx = s.createVertexBuffer(_, Id.members), this.particlesIdx = s.createIndexBuffer(y);
          }
        }
        draw(t) {
          if (!this._params.overrideStyleParameters && !t.style.snow)
            return;
          const s = structuredClone(this._params);
          let h = [-s.direction.x, s.direction.y, -100];
          i.ab.vec3.normalize(h, h);
          const _ = structuredClone(this._vignetteParams), y = s.overrideStyleParameters ? this._revealParams : { revealStart: 0, revealRange: 0.01 }, T = t.transform.zoom;
          if (y.revealStart > T)
            return;
          const z = Rr(0, 1, y.revealStart, y.revealStart + y.revealRange, T);
          _.strength *= z, s.overrideStyleParameters || (s.intensity = t.style.snow.state.density, s.timeFactor = t.style.snow.state.intensity, s.color = structuredClone(t.style.snow.state.color), h = structuredClone(t.style.snow.state.direction), s.screenThinning.intensity = t.style.snow.state.centerThinning, s.billboardSize = 2.79 * t.style.snow.state.flakeSize, _.strength = 1, _.color = structuredClone(t.style.snow.state.vignetteColor));
          const R = this.updateOnRender(t, s.timeFactor);
          if (!this.particlesVx || !this.particlesIdx)
            return;
          const F = t.context, N = F.gl, G = t.transform, Z = t.getOrCreateProgram("snowParticle");
          t.uploadCommonUniforms(F, Z), ((W, te, ee) => {
            const se = gu(this._movement.getPosition(), W), oe = G.width / 2, he = G.height / 2, _e = Rr(0, ee.screenThinning.start, 0, 1, ee.screenThinning.intensity), pe = Rr(1e-3, ee.screenThinning.range, 0, 1, ee.screenThinning.intensity), Me = Rr(0, ee.screenThinning.particleOffset, 0, 1, ee.screenThinning.intensity), xe = (we = { modelview: R.modelviewMatrix, projection: R.projectionMatrix, time: this._accumulatedTimeFromStart, camPos: se, velocityConeAperture: ee.velocityConeAperture, velocity: ee.velocity, horizontalOscillationRadius: ee.horizontalOscillationRadius, horizontalOscillationRate: ee.horizontalOscillationRate, boxSize: W, billboardSize: 1 * ee.billboardSize, simpleShapeParameters: [ee.shapeFadeStart, ee.shapeFadePower], screenSize: [G.width, G.height], thinningCenterPos: [oe, he], thinningShape: [_e, pe, Math.pow(10, ee.screenThinning.fadePower)], thinningAffectedRatio: ee.screenThinning.affectedRatio, thinningParticleOffset: Me, color: [ee.color.r, ee.color.g, ee.color.b, ee.color.a], direction: h }, { u_modelview: Float32Array.from(we.modelview), u_projection: Float32Array.from(we.projection), u_time: we.time, u_cam_pos: we.camPos, u_velocityConeAperture: we.velocityConeAperture, u_velocity: we.velocity, u_horizontalOscillationRadius: we.horizontalOscillationRadius, u_horizontalOscillationRate: we.horizontalOscillationRate, u_boxSize: we.boxSize, u_billboardSize: we.billboardSize, u_simpleShapeParameters: we.simpleShapeParameters, u_screenSize: we.screenSize, u_thinningCenterPos: we.thinningCenterPos, u_thinningShape: we.thinningShape, u_thinningAffectedRatio: we.thinningAffectedRatio, u_thinningParticleOffset: we.thinningParticleOffset, u_particleColor: we.color, u_direction: we.direction });
            var we;
            const ve = Math.round(z * ee.intensity * this.particlesCount), Ae = i.b7.simpleSegment(0, 0, 4 * ve, 2 * ve);
            this.particlesVx && this.particlesIdx && Z.draw(t, N.TRIANGLES, Wt.disabled, ci.disabled, bi.alphaBlended, ti.disabled, xe, "snow_particles", this.particlesVx, this.particlesIdx, Ae, {});
          })(s.boxSize, 0, s), this._vignette.draw(t, _);
        }
      }
      const ah = { symbol: function(c, t, s, h, _) {
        if (c.renderPass !== "translucent")
          return;
        const y = ci.disabled, T = c.colorModeForRenderPass(), z = s.layout.get("text-variable-anchor"), R = s.layout.get("text-size-scale-range"), F = i.aw(c.scaleFactor, R[0], R[1]);
        z && function(Z, W, te, ee, se, oe, he, _e) {
          const pe = W.transform, Me = se === "map", xe = oe === "map";
          for (const we of Z) {
            const ve = ee.getTile(we), Ae = ve.getBucket(te);
            if (!Ae || !Ae.text || !Ae.text.segments.get().length)
              continue;
            const Oe = i.bp(Ae.textSizeData, pe.zoom, _e), Xe = pa(we, Ae.getProjection(), pe), He = pe.calculatePixelsToTileUnitsMatrix(ve), ke = Js(Xe, ve.tileID.canonical, xe, Me, pe, Ae.getProjection(), He), Ne = Ae.hasIconTextFit() && Ae.hasIconData();
            if (Oe) {
              const st = Math.pow(2, pe.zoom - ve.tileID.overscaledZ);
              co(Ae, Me, xe, he, i.cX, pe, ke, we, st, Oe, Ne);
            }
          }
        }(h, c, s, t, s.layout.get("text-rotation-alignment"), s.layout.get("text-pitch-alignment"), _, F);
        const N = s.paint.get("icon-opacity").constantOr(1) !== 0, G = s.paint.get("text-opacity").constantOr(1) !== 0;
        s.layout.get("symbol-sort-key").constantOr(1) !== void 0 && (N || G) ? Tn(c, t, s, h, y, T) : (N && Tn(c, t, s, h, y, T, { onlyIcons: !0 }), G && Tn(c, t, s, h, y, T, { onlyText: !0 })), t.map.showCollisionBoxes && (ou(c, t, s, h, s.paint.get("text-translate"), s.paint.get("text-translate-anchor"), !0), ou(c, t, s, h, s.paint.get("icon-translate"), s.paint.get("icon-translate-anchor"), !1));
      }, circle: function(c, t, s, h) {
        if (c.renderPass !== "translucent")
          return;
        const _ = s.paint.get("circle-opacity"), y = s.paint.get("circle-stroke-width"), T = s.paint.get("circle-stroke-opacity"), z = s.layout.get("circle-sort-key").constantOr(1) !== void 0, R = s.paint.get("circle-emissive-strength");
        if (_.constantOr(1) === 0 && (y.constantOr(1) === 0 || T.constantOr(1) === 0))
          return;
        const F = c.context, N = F.gl, G = c.transform, Z = c.depthModeForSublayer(0, Wt.ReadOnly), W = ci.disabled, te = c.colorModeForDrapableLayerRenderPass(R), ee = G.projection.name === "globe", se = [i.at(G.center.lng), i.aA(G.center.lat)], oe = [];
        for (let _e = 0; _e < h.length; _e++) {
          const pe = h[_e], Me = t.getTile(pe), xe = Me.getBucket(s);
          if (!xe || xe.projection.name !== G.projection.name)
            continue;
          const we = xe.programConfigurations.get(s.id), ve = i.cY(s), Ae = c.isTileAffectedByFog(pe);
          ee && ve.push("PROJECTION_GLOBE_VIEW"), ve.push("DEPTH_D24"), c.terrain && G.depthOcclusionForSymbolsAndCircles && ve.push("DEPTH_OCCLUSION");
          const Oe = c.getOrCreateProgram("circle", { config: we, defines: ve, overrideFog: Ae }), Xe = xe.layoutVertexBuffer, He = xe.globeExtVertexBuffer, ke = xe.indexBuffer, Ne = G.projection.createInversionMatrix(G, pe.canonical), st = { programConfiguration: we, program: Oe, layoutVertexBuffer: Xe, globeExtVertexBuffer: He, indexBuffer: ke, uniformValues: i.cZ(c, pe, Me, Ne, se, s), tile: Me };
          if (z) {
            const ut = xe.segments.get();
            for (const xt of ut)
              oe.push({ segments: new i.b7([xt]), sortKey: xt.sortKey, state: st });
          } else
            oe.push({ segments: xe.segments, sortKey: 0, state: st });
        }
        z && oe.sort((_e, pe) => _e.sortKey - pe.sortKey);
        const he = { useDepthForOcclusion: G.depthOcclusionForSymbolsAndCircles };
        for (const _e of oe) {
          const { programConfiguration: pe, program: Me, layoutVertexBuffer: xe, globeExtVertexBuffer: we, indexBuffer: ve, uniformValues: Ae, tile: Oe } = _e.state, Xe = _e.segments;
          c.terrain && c.terrain.setupElevationDraw(Oe, Me, he), c.uploadCommonUniforms(F, Me, Oe.tileID.toUnwrapped()), Me.draw(c, N.TRIANGLES, Z, W, te, ti.disabled, Ae, s.id, xe, ve, Xe, s.paint, G.zoom, pe, [we]);
        }
      }, heatmap: function(c, t, s, h) {
        if (s.paint.get("heatmap-opacity") !== 0)
          if (c.renderPass === "offscreen") {
            const _ = c.context, y = _.gl, T = ci.disabled, z = new bi([y.ONE, y.ONE, y.ONE, y.ONE], i.aj.transparent, [!0, !0, !0, !0]);
            (function(W, te, ee, se) {
              const oe = W.gl, he = te.width * se, _e = te.height * se;
              W.activeTexture.set(oe.TEXTURE1), W.viewport.set([0, 0, he, _e]);
              let pe = ee.heatmapFbo;
              if (!pe || pe && (pe.width !== he || pe.height !== _e)) {
                pe && pe.destroy();
                const Me = oe.createTexture();
                oe.bindTexture(oe.TEXTURE_2D, Me), oe.texParameteri(oe.TEXTURE_2D, oe.TEXTURE_WRAP_S, oe.CLAMP_TO_EDGE), oe.texParameteri(oe.TEXTURE_2D, oe.TEXTURE_WRAP_T, oe.CLAMP_TO_EDGE), oe.texParameteri(oe.TEXTURE_2D, oe.TEXTURE_MIN_FILTER, oe.LINEAR), oe.texParameteri(oe.TEXTURE_2D, oe.TEXTURE_MAG_FILTER, oe.LINEAR), pe = ee.heatmapFbo = W.createFramebuffer(he, _e, !0, null), function(xe, we, ve, Ae, Oe, Xe) {
                  const He = xe.gl;
                  He.texImage2D(He.TEXTURE_2D, 0, xe.extRenderToTextureHalfFloat ? He.RGBA16F : He.RGBA, Oe, Xe, 0, He.RGBA, xe.extRenderToTextureHalfFloat ? He.HALF_FLOAT : He.UNSIGNED_BYTE, null), Ae.colorAttachment.set(ve);
                }(W, 0, Me, pe, he, _e);
              } else
                oe.bindTexture(oe.TEXTURE_2D, pe.colorAttachment.get()), W.bindFramebuffer.set(pe.framebuffer);
            })(_, c, s, c.transform.projection.name === "globe" ? 0.5 : 0.25), _.clear({ color: i.aj.transparent });
            const R = c.transform, F = R.projection.name === "globe", N = F ? ["PROJECTION_GLOBE_VIEW"] : [], G = F ? ti.frontCCW : ti.disabled, Z = [i.at(R.center.lng), i.aA(R.center.lat)];
            for (let W = 0; W < h.length; W++) {
              const te = h[W];
              if (t.hasRenderableParent(te))
                continue;
              const ee = t.getTile(te), se = ee.getBucket(s);
              if (!se || se.projection.name !== R.projection.name)
                continue;
              const oe = c.isTileAffectedByFog(te), he = se.programConfigurations.get(s.id), _e = c.getOrCreateProgram("heatmap", { config: he, defines: N, overrideFog: oe }), { zoom: pe } = c.transform;
              c.terrain && c.terrain.setupElevationDraw(ee, _e), c.uploadCommonUniforms(_, _e, te.toUnwrapped());
              const Me = R.projection.createInversionMatrix(R, te.canonical);
              _e.draw(c, y.TRIANGLES, Wt.disabled, T, z, G, rc(c, te, ee, Me, Z, pe, s.paint.get("heatmap-intensity")), s.id, se.layoutVertexBuffer, se.indexBuffer, se.segments, s.paint, c.transform.zoom, he, F ? [se.globeExtVertexBuffer] : null);
            }
            _.viewport.set([0, 0, c.width, c.height]);
          } else
            c.renderPass === "translucent" && (c.context.setColorMode(c.colorModeForRenderPass()), function(_, y) {
              const T = _.context, z = T.gl, R = y.heatmapFbo;
              if (!R)
                return;
              T.activeTexture.set(z.TEXTURE0), z.bindTexture(z.TEXTURE_2D, R.colorAttachment.get()), T.activeTexture.set(z.TEXTURE1);
              let F = y.colorRampTexture;
              F || (F = y.colorRampTexture = new i.T(T, y.colorRamp, z.RGBA8)), F.bind(z.LINEAR, z.CLAMP_TO_EDGE), _.getOrCreateProgram("heatmapTexture").draw(_, z.TRIANGLES, Wt.disabled, ci.disabled, _.colorModeForRenderPass(), ti.disabled, ((N, G, Z, W) => ({ u_image: 0, u_color_ramp: 1, u_opacity: G.paint.get("heatmap-opacity") }))(0, y), y.id, _.viewportBuffer, _.quadTriangleIndexBuffer, _.viewportSegments, y.paint, _.transform.zoom);
            }(c, s));
      }, line: function(c, t, s, h) {
        if (c.renderPass !== "translucent")
          return;
        const _ = s.paint.get("line-opacity"), y = s.paint.get("line-width");
        if (_.constantOr(1) === 0 || y.constantOr(1) === 0)
          return;
        const T = s.paint.get("line-emissive-strength"), z = s.paint.get("line-occlusion-opacity"), R = s.layout.get("line-elevation-reference"), F = s.layout.get("line-width-unit") === "meters", N = R === "sea", G = c.context, Z = G.gl, W = !s.isDraped();
        if (W && c.transform.projection.name === "globe")
          return;
        const te = s.layout.get("line-cross-slope"), ee = te !== void 0, se = te < 1, oe = W ? new Wt(c.depthOcclusion ? Z.GREATER : Z.LEQUAL, Wt.ReadOnly, c.depthRangeFor3D) : c.depthModeForSublayer(0, Wt.ReadOnly), he = c.colorModeForDrapableLayerRenderPass(T), _e = c.terrain && c.terrain.renderingToTexture, pe = _e ? 1 : i.q.devicePixelRatio, Me = s.paint.get("line-dasharray"), xe = Me.constantOr(1), we = s.layout.get("line-cap"), ve = Me.constantOr(null), Ae = we.constantOr(null), Oe = s.paint.get("line-pattern"), Xe = Oe.constantOr(1), He = Oe.constantOr(null), ke = s.paint.get("line-opacity").constantOr(1);
        let Ne = !Xe && ke !== 1 || c.depthOcclusion && z > 0 && z < 1;
        const st = s.paint.get("line-gradient"), ut = Xe ? "linePattern" : "line", xt = i.c_(s);
        let Ge;
        if (_e && c.terrain && c.terrain.clipOrMaskOverlapStencilType() && (Ne = !1), z !== 0 && c.depthOcclusion) {
          const Je = s.paint._values["line-opacity"];
          Je && Je.value && Je.value.kind === "constant" ? Ge = Je.value : i.w(`Occlusion opacity for layer ${s.id} is supported only when line-opacity isn't data-driven.`);
        }
        if (W && (c.forceTerrainMode = !0), !W && z !== 0 && c.terrain && !_e)
          return void i.w(`Occlusion opacity for layer ${s.id} is supported on terrain only if the layer has line-z-offset enabled.`);
        const lt = Ne && W ? c.stencilModeFor3D() : ci.disabled;
        W && (xt.push("ELEVATED"), ee && xt.push(se ? "CROSS_SLOPE_HORIZONTAL" : "CROSS_SLOPE_VERTICAL"), N && xt.push("ELEVATION_REFERENCE_SEA")), y.value.kind !== "constant" && y.value.isLineProgressConstant === !1 && xt.push("VARIABLE_LINE_WIDTH");
        for (const Je of h) {
          const _t = t.getTile(Je);
          if (Xe && !_t.patternsLoaded())
            continue;
          const ct = _t.getBucket(s);
          if (!ct)
            continue;
          c.prepareDrawTile();
          const nt = ct.programConfigurations.get(s.id), Lt = c.isTileAffectedByFog(Je), bt = c.getOrCreateProgram(ut, { config: nt, defines: xt, overrideFog: Lt, overrideRtt: !W && void 0 });
          if (He && _t.imageAtlas) {
            const wi = i.A.from(He), mn = _t.imageAtlas.patternPositions[wi.getSerializedPrimary()];
            mn && nt.setConstantPatternPositions(mn);
          }
          if (!Xe && ve && Ae && _t.lineAtlas) {
            const wi = _t.lineAtlas.getDash(ve, Ae);
            wi && nt.setConstantPatternPositions(wi);
          }
          let [zt, Bt] = s.paint.get("line-trim-offset");
          (Ae === "round" || Ae === "square") && zt !== Bt && (zt === 0 && (zt -= 1), Bt === 1 && (Bt += 1));
          const oi = _e ? Je.projMatrix : null, $t = F ? 1 / ct.tileToMeter / i.ar(_t, 1, c.transform.zoom) : 1, Xt = F ? 1 / ct.tileToMeter / i.ar(_t, 1, Math.floor(c.transform.zoom)) : 1, ai = Xe ? i.c$(c, _t, s, oi, pe, $t, Xt, [zt, Bt]) : i.d0(c, _t, s, oi, ct.lineClipsArray.length, pe, $t, Xt, [zt, Bt]);
          if (st) {
            const wi = ct.gradients[s.id];
            let mn = wi.texture;
            if (s.gradientVersion !== wi.version) {
              let Mn = 256;
              if (s.stepInterpolant) {
                const Xi = t.getSource().maxzoom, sn = Je.canonical.z === Xi ? Math.ceil(1 << c.transform.maxZoom - Je.canonical.z) : 1;
                Mn = i.aw(i.d1(ct.maxLineLength / i.ag * 1024 * sn), 256, G.maxTextureSize);
              }
              wi.gradient = i.d2({ expression: s.gradientExpression(), evaluationKey: "lineProgress", resolution: Mn, image: wi.gradient || void 0, clips: ct.lineClipsArray }), wi.texture ? wi.texture.update(wi.gradient) : wi.texture = new i.T(G, wi.gradient, Z.RGBA8), wi.version = s.gradientVersion, mn = wi.texture;
            }
            G.activeTexture.set(Z.TEXTURE1), mn.bind(s.stepInterpolant ? Z.NEAREST : Z.LINEAR, Z.CLAMP_TO_EDGE);
          }
          xe && (G.activeTexture.set(Z.TEXTURE0), _t.lineAtlasTexture && _t.lineAtlasTexture.bind(Z.LINEAR, Z.REPEAT), nt.updatePaintBuffers()), Xe && (G.activeTexture.set(Z.TEXTURE0), _t.imageAtlasTexture && _t.imageAtlasTexture.bind(Z.LINEAR, Z.CLAMP_TO_EDGE), nt.updatePaintBuffers()), W && !N && c.terrain.setupElevationDraw(_t, bt), c.uploadCommonUniforms(G, bt, Je.toUnwrapped());
          const zi = (wi) => {
            Ge != null && (Ge.value = ke * z), bt.draw(c, Z.TRIANGLES, oe, wi, he, ti.disabled, ai, s.id, ct.layoutVertexBuffer, ct.indexBuffer, ct.segments, s.paint, c.transform.zoom, nt, [ct.layoutVertexBuffer2, ct.patternVertexBuffer, ct.zOffsetVertexBuffer]), Ge != null && (Ge.value = ke);
          };
          if (Ne && !W) {
            const wi = c.stencilModeForClipping(Je).ref;
            wi === 0 && _e && G.clear({ stencil: 0 });
            const mn = { func: Z.EQUAL, mask: 255 };
            ai.u_alpha_discard_threshold = 0.8, zi(new ci(mn, wi, 255, Z.KEEP, Z.KEEP, Z.INVERT)), ai.u_alpha_discard_threshold = 0, zi(new ci(mn, wi, 255, Z.KEEP, Z.KEEP, Z.KEEP));
          } else
            Ne && W && (ai.u_alpha_discard_threshold = 1e-3), zi(W ? lt : c.stencilModeForClipping(Je));
        }
        W && (c.forceTerrainMode = !1), Ne && (c.resetStencilClippingMasks(), _e && G.clear({ stencil: 0 })), z === 0 || c.depthOcclusion || _e || c.layersWithOcclusionOpacity.push(c.currentLayer);
      }, fill: function(c, t, s, h) {
        const _ = s.paint.get("fill-color"), y = s.paint.get("fill-opacity"), T = s.is3D(), z = new Wt(c.context.gl.LEQUAL, Wt.ReadWrite, c.depthRangeFor3D);
        if (y.constantOr(1) === 0)
          return;
        const R = s.paint.get("fill-emissive-strength"), F = c.colorModeForDrapableLayerRenderPass(R), N = s.paint.get("fill-pattern"), G = c.opaquePassEnabledForLayer() && !N.constantOr(1) && _.constantOr(i.aj.transparent).a === 1 && y.constantOr(0) === 1 ? "opaque" : "translucent";
        if (c.renderPass === G) {
          const Z = T ? z : c.depthModeForSublayer(1, c.renderPass === "opaque" ? Wt.ReadWrite : Wt.ReadOnly);
          lu(c, t, s, h, Z, F, !1);
        }
        if (!T && c.renderPass === "translucent" && s.paint.get("fill-antialias")) {
          const Z = T ? z : c.depthModeForSublayer(s.getPaintProperty("fill-outline-color") ? 2 : 0, Wt.ReadOnly);
          lu(c, t, s, h, Z, F, !0);
        }
      }, "fill-extrusion": function(c, t, s, h) {
        const _ = s.paint.get("fill-extrusion-opacity"), y = c.context, T = y.gl, z = c.terrain, R = z && z.renderingToTexture;
        if (_ === 0)
          return;
        const F = c.conflationActive && c.style.isLayerClipped(s, t.getSource()), N = c.style.order.indexOf(s.fqid);
        if (F && function(G, Z, W, te, ee) {
          for (const se of te) {
            const oe = Z.getTile(se).getBucket(W);
            oe && (oe.updateReplacement(se, G.replacementSource, ee), oe.uploadCentroid(G.context));
          }
        }(c, t, s, h, N), z || F)
          for (const G of h) {
            const Z = t.getTile(G).getBucket(s);
            Z && tp(c.context, t, G, Z, s, z, F);
          }
        if (c.renderPass === "shadow" && c.shadowRenderer) {
          const G = c.shadowRenderer;
          if (z && _ < 0.65 && s._transitionablePaint._values["fill-extrusion-opacity"].value.expression instanceof i.a9)
            return;
          const Z = G.getShadowPassDepthMode(), W = G.getShadowPassColorMode();
          ih(c, t, s, h, Z, ci.disabled, W, F);
        } else if (c.renderPass === "translucent") {
          const G = !s.paint.get("fill-extrusion-pattern").constantOr(1), Z = s.paint.get("fill-extrusion-color").constantOr(i.aj.white);
          if (!R && Z.a !== 0) {
            const W = new Wt(c.context.gl.LEQUAL, Wt.ReadWrite, c.depthRangeFor3D);
            _ === 1 && G ? ih(c, t, s, h, W, ci.disabled, bi.unblended, F) : (ih(c, t, s, h, W, ci.disabled, bi.disabled, F), ih(c, t, s, h, W, c.stencilModeFor3D(), c.colorModeForRenderPass(), F), c.resetStencilClippingMasks());
          }
          if (c.style.enable3dLights() && G && (!z && c.transform.projection.name !== "globe" || R)) {
            const W = s.paint.get("fill-extrusion-opacity"), te = s.paint.get("fill-extrusion-ambient-occlusion-intensity"), ee = s.paint.get("fill-extrusion-ambient-occlusion-ground-radius"), se = s.paint.get("fill-extrusion-flood-light-intensity"), oe = s.paint.get("fill-extrusion-flood-light-color-use-theme").constantOr("default") === "none", he = s.paint.get("fill-extrusion-flood-light-color").toRenderColor(oe ? null : s.lut).toArray01().slice(0, 3), _e = te > 0 && ee > 0, pe = se > 0, Me = (we, ve, Ae) => (1 - Ae) * we + Ae * ve, xe = (we) => {
              const ve = c.depthModeForSublayer(1, Wt.ReadOnly, T.LEQUAL, !0), Ae = s.paint.get(we ? "fill-extrusion-ambient-occlusion-ground-attenuation" : "fill-extrusion-flood-light-ground-attenuation"), Oe = Me(0.1, 3, Ae), Xe = c._showOverdrawInspector;
              if (!Xe) {
                const He = new ci({ func: T.ALWAYS, mask: 255 }, 255, 255, T.KEEP, T.KEEP, T.REPLACE), ke = new bi([T.ONE, T.ONE, T.ONE, T.ONE], i.aj.transparent, [!1, !1, !1, !0], T.MIN);
                Ml(c, t, s, h, ve, He, ke, ti.disabled, we, "sdf", W, te, ee, se, he, Oe, F, !1);
              }
              {
                const He = Xe ? ci.disabled : new ci({ func: T.EQUAL, mask: 255 }, 255, 255, T.KEEP, T.DECR, T.DECR), ke = Xe ? c.colorModeForRenderPass() : new bi([T.ONE_MINUS_DST_ALPHA, T.DST_ALPHA, T.ONE, T.ONE], i.aj.transparent, [!0, !0, !0, !0]);
                Ml(c, t, s, h, ve, He, ke, ti.disabled, we, "color", W, te, ee, se, he, Oe, F, !1);
              }
            };
            if (R) {
              const we = (ve, Ae, Oe) => {
                const Xe = c.depthModeForSublayer(1, Wt.ReadOnly, T.LEQUAL, !1), He = s.paint.get(ve ? "fill-extrusion-ambient-occlusion-ground-attenuation" : "fill-extrusion-flood-light-ground-attenuation"), ke = Me(0.1, 3, He);
                {
                  const Ne = new bi([T.ONE, T.ONE, T.ONE, T.ONE], i.aj.transparent, [!1, !1, !1, !0]);
                  Ml(c, t, s, h, Xe, ci.disabled, Ne, ti.disabled, ve, "clear", W, te, ee, se, he, ke, F, Ae);
                }
                {
                  const Ne = new ci({ func: T.ALWAYS, mask: 255 }, 255, 255, T.KEEP, T.KEEP, T.REPLACE), st = new bi([T.ONE, T.ONE, T.ONE, T.ONE], i.aj.transparent, [!1, !1, !1, !0], T.MIN);
                  Ml(c, t, s, h, Xe, Ne, st, ti.disabled, ve, "sdf", W, te, ee, se, he, ke, F, Ae);
                }
                {
                  const Ne = ve ? T.ZERO : T.ONE_MINUS_DST_ALPHA, st = new ci({ func: T.EQUAL, mask: 255 }, 255, 255, T.KEEP, T.DECR, T.DECR), ut = new bi([Ne, T.DST_ALPHA, T.ONE_MINUS_DST_ALPHA, T.ZERO], i.aj.transparent, [!0, !0, !0, !0]);
                  Ml(c, t, s, h, Xe, st, ut, ti.disabled, ve, "color", W, te, ee, se, he, ke, F, Ae);
                }
                {
                  const Ne = new bi([T.ONE, T.ONE, T.ONE, ve ? T.ZERO : T.ONE], i.aj.transparent, [!1, !1, !1, !0], ve ? T.FUNC_ADD : T.MAX);
                  Ml(c, t, s, h, Xe, ci.disabled, Ne, ti.disabled, ve, "clear", W, te, ee, se, he, ke, F, Ae, Oe);
                }
              };
              if (_e || pe) {
                let ve;
                if (c.prepareDrawTile(), z) {
                  const Ae = z.drapeBufferSize[0], Oe = z.drapeBufferSize[1];
                  ve = z.framebufferCopyTexture, ve && (!ve || ve.size[0] === Ae && ve.size[1] === Oe) || (ve && ve.destroy(), ve = z.framebufferCopyTexture = new i.T(y, new i.r({ width: Ae, height: Oe }), T.RGBA8)), ve.bind(T.LINEAR, T.CLAMP_TO_EDGE), T.copyTexSubImage2D(T.TEXTURE_2D, 0, 0, 0, 0, 0, Ae, Oe);
                }
                _e && we(!0, !1, ve), pe && we(!1, !0, ve);
              }
            } else
              _e && xe(!0), pe && xe(!1), (_e || pe) && c.resetStencilClippingMasks();
          }
        }
      }, hillshade: function(c, t, s, h) {
        if (c.renderPass !== "offscreen" && c.renderPass !== "translucent" || c.style.disableElevatedTerrain)
          return;
        const _ = c.context, y = c.terrain && c.terrain.renderingToTexture, [T, z] = c.renderPass !== "translucent" || y ? [{}, h] : c.stencilConfigForOverlap(h);
        for (const R of z) {
          const F = t.getTile(R);
          if (F.needsHillshadePrepare && c.renderPass === "offscreen")
            qc(c, F, s);
          else if (c.renderPass === "translucent") {
            const N = c.depthModeForSublayer(0, Wt.ReadOnly), G = s.paint.get("hillshade-emissive-strength"), Z = c.colorModeForDrapableLayerRenderPass(G), W = y && c.terrain ? c.terrain.stencilModeForRTTOverlap(R) : T[R.overscaledZ];
            Ga(c, R, F, s, N, W, Z);
          }
        }
        _.viewport.set([0, 0, c.width, c.height]), c.resetStencilClippingMasks();
      }, raster: function(c, t, s, h, _, y) {
        if (c.renderPass !== "translucent" || s.paint.get("raster-opacity") === 0)
          return;
        const T = c.transform.projection.name === "globe", z = s.paint.get("raster-elevation") !== 0, R = z && T;
        if (c.renderElevatedRasterBackface && !R)
          return;
        const F = c.context, N = F.gl, G = t.getSource(), Z = function(xe, we, ve, Ae) {
          const Oe = we.paint.get("raster-color"), Xe = xe.type === "raster-array", He = [], ke = we.paint.get("raster-resampling"), Ne = we.paint.get("raster-color-mix");
          let st = we.paint.get("raster-color-range");
          const ut = [Ne[0], Ne[1], Ne[2], 0], xt = Ne[3];
          let Ge = ke === "nearest" ? Ae.NEAREST : Ae.LINEAR;
          if (Xe && (He.push("RASTER_ARRAY"), Oe || He.push("RASTER_COLOR"), ke === "linear" && He.push("RASTER_ARRAY_LINEAR"), Ge = Ae.NEAREST, !st && xe.rasterLayers)) {
            const lt = xe.rasterLayers.find(({ id: Je }) => Je === we.sourceLayer);
            lt && lt.fields && lt.fields.range && (st = lt.fields.range);
          }
          if (st = st || [0, 1], Oe) {
            He.push("RASTER_COLOR"), ve.activeTexture.set(Ae.TEXTURE2), we.updateColorRamp(st);
            let lt = we.colorRampTexture;
            lt || (lt = we.colorRampTexture = new i.T(ve, we.colorRamp, Ae.RGBA8)), lt.bind(Ae.LINEAR, Ae.CLAMP_TO_EDGE);
          }
          return { mix: ut, range: st, offset: xt, defines: He, resampling: Ge };
        }(G, s, F, N);
        if (G instanceof i.aJ && !h.length && !T)
          return;
        const W = s.paint.get("raster-emissive-strength"), te = c.colorModeForDrapableLayerRenderPass(W), ee = c.terrain && c.terrain.renderingToTexture, se = !c.options.moving, oe = s.paint.get("raster-resampling") === "nearest" ? N.NEAREST : N.LINEAR;
        if (G instanceof i.aJ && !h.length && (G.onNorthPole || G.onSouthPole)) {
          const xe = z ? c.stencilModeFor3D() : ci.disabled;
          return void Wa(!!G.onNorthPole, null, c, t, s, W, Z, ti.disabled, xe);
        }
        if (!h.length)
          return;
        const [he, _e] = G instanceof i.aJ || ee ? [{}, h] : c.stencilConfigForOverlap(h), pe = _e[_e.length - 1].overscaledZ;
        R && Z.defines.push("PROJECTION_GLOBE_VIEW"), z && Z.defines.push("RENDER_CUTOFF");
        const Me = (xe, we, ve) => {
          for (const Ae of xe) {
            const Oe = Ae.toUnwrapped(), Xe = t.getTile(Ae);
            if (ee && (!Xe || !Xe.hasData()))
              continue;
            F.activeTexture.set(N.TEXTURE0);
            const He = $e(Xe, G, s, Z);
            if (!He || !He.texture)
              continue;
            const { texture: ke, mix: Ne, offset: st, tileSize: ut, buffer: xt } = He;
            let Ge, lt;
            ee ? (Ge = Wt.disabled, lt = Ae.projMatrix) : z ? (Ge = new Wt(N.LEQUAL, Wt.ReadWrite, c.depthRangeFor3D), lt = T ? Float32Array.from(c.transform.expandedFarZProjMatrix) : c.transform.calculateProjMatrix(Oe, se)) : (Ge = c.depthModeForSublayer(Ae.overscaledZ - pe, s.paint.get("raster-opacity") === 1 ? Wt.ReadWrite : Wt.ReadOnly, N.LESS), lt = c.transform.calculateProjMatrix(Oe, se));
            const Je = c.terrain && ee ? c.terrain.stencilModeForRTTOverlap(Ae) : he[Ae.overscaledZ], _t = y ? 0 : s.paint.get("raster-fade-duration");
            Xe.registerFadeDuration(_t);
            const ct = t.findLoadedParent(Ae, 0), nt = Jh(Xe, ct, t, c.transform, _t);
            let Lt, bt;
            c.terrain && c.terrain.prepareDrawTile(), F.activeTexture.set(N.TEXTURE0), ke.bind(oe, N.CLAMP_TO_EDGE), F.activeTexture.set(N.TEXTURE1), ct ? (ct.texture && ct.texture.bind(oe, N.CLAMP_TO_EDGE), Lt = Math.pow(2, ct.tileID.overscaledZ - Xe.tileID.overscaledZ), bt = [Xe.tileID.canonical.x * Lt % 1, Xe.tileID.canonical.y * Lt % 1]) : ke.bind(oe, N.CLAMP_TO_EDGE), ke.useMipmap && F.extTextureFilterAnisotropic && c.transform.pitch > 20 && N.texParameterf(N.TEXTURE_2D, F.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT, F.extTextureFilterAnisotropicMax);
            const zt = c.transform;
            let Bt;
            const oi = z ? Bn(zt) : [0, 0, 0, 0];
            let $t, Xt, ai, zi, wi, mn = 0;
            if (R && G instanceof i.aJ && G.coordinates.length > 3)
              $t = Float32Array.from(i.bb(i.cH(new i.bT(0, 0, 0)))), Xt = Float32Array.from(zt.globeMatrix), ai = Float32Array.from(i.cD(zt)), zi = [i.at(zt.center.lng), i.aA(zt.center.lat)], Bt = G.elevatedGlobePerspectiveTransform, wi = G.elevatedGlobeGridMatrix || new Float32Array(9);
            else if (R) {
              const _i = i.cE(Ae.canonical);
              mn = i.cF(_i.getCenter().lat), $t = Float32Array.from(i.bb(i.cH(Ae.canonical))), Xt = Float32Array.from(zt.globeMatrix), ai = Float32Array.from(i.cD(zt)), zi = [i.at(zt.center.lng), i.aA(zt.center.lat)], Bt = [0, 0], wi = Float32Array.from(i.cG(Ae.canonical, _i, mn, zt.worldSize / zt._pixelsPerMercatorPixel));
            } else
              Bt = G instanceof i.aJ ? G.perspectiveTransform : [0, 0], $t = new Float32Array(16), Xt = new Float32Array(9), ai = new Float32Array(16), zi = [0, 0], wi = new Float32Array(9);
            const Mn = pd(lt, $t, Xt, ai, wi, bt || [0, 0], i.ae(c.transform.zoom), zi, oi, Lt || 1, nt, s, Bt, z ? s.paint.get("raster-elevation") : 0, 2, Ne, st, Z.range, ut, xt, W), Xi = c.isTileAffectedByFog(Ae), sn = c.getOrCreateProgram("raster", { defines: Z.defines, overrideFog: Xi });
            if (c.uploadCommonUniforms(F, sn, Oe), G instanceof i.aJ) {
              const _i = G.elevatedGlobeVertexBuffer, Jt = G.elevatedGlobeIndexBuffer;
              if (ee || !T)
                G.boundsBuffer && G.boundsSegments && sn.draw(c, N.TRIANGLES, Ge, ci.disabled, te, ti.disabled, Mn, s.id, G.boundsBuffer, c.quadTriangleIndexBuffer, G.boundsSegments);
              else if (_i && Jt) {
                const ji = zt.zoom <= i.c6 ? G.elevatedGlobeSegments : G.getSegmentsForLongitude(zt.center.lng);
                ji && sn.draw(c, N.TRIANGLES, Ge, ci.disabled, te, we, Mn, s.id, _i, Jt, ji);
              }
            } else if (R) {
              Ge = new Wt(N.LEQUAL, Wt.ReadOnly, c.depthRangeFor3D);
              const _i = c.globeSharedBuffers;
              if (_i) {
                const [Jt, ji, Yi] = _i.getGridBuffers(mn, !1);
                sn.draw(c, N.TRIANGLES, Ge, ve || Je, c.colorModeForRenderPass(), we, Mn, s.id, Jt, ji, Yi);
              }
            } else {
              const { tileBoundsBuffer: _i, tileBoundsIndexBuffer: Jt, tileBoundsSegments: ji } = c.getTileBoundsBuffers(Xe);
              sn.draw(c, N.TRIANGLES, Ge, Je, te, ti.disabled, Mn, s.id, _i, Jt, ji);
            }
          }
          if (!(G instanceof i.aJ) && R)
            for (const Ae of xe) {
              const Oe = Ae.canonical.y === (1 << Ae.canonical.z) - 1;
              Ae.canonical.y === 0 && Wa(!0, Ae, c, t, s, W, Z, we, ve || ci.disabled), Oe && Wa(!1, Ae, c, t, s, W, Z, we === ti.frontCW ? ti.backCW : ti.frontCW, ve || ci.disabled);
            }
        };
        R ? Me(_e, c.renderElevatedRasterBackface ? ti.backCW : ti.frontCW, c.stencilModeFor3D()) : Me(_e, ti.disabled, void 0), c.resetStencilClippingMasks();
      }, "raster-particle": function(c, t, s, h, _, y) {
        c.renderPass === "offscreen" && function(T, z, R, F) {
          if (!F.length)
            return;
          const N = T.context, G = N.gl, Z = z.getSource();
          if (!(Z instanceof xn))
            return;
          const W = Math.ceil(Math.sqrt(R.paint.get("raster-particle-count")));
          let te = R.particlePositionRGBAImage;
          if (!te || te.width !== W) {
            const _e = function(pe) {
              const Me = pe * pe, xe = new Uint8Array(4 * Me), we = function(Ae) {
                return Ae |= 0, Ae = Math.imul(2747636419 ^ Ae, 2654435769), Ae = Math.imul(Ae ^ Ae >>> 16, 2654435769), ((Ae = Math.imul(Ae ^ Ae >>> 16, 2654435769)) >>> 0) / 4294967296;
              }, ve = 1 / 1.1;
              for (let Ae = 0; Ae < Me; Ae++) {
                const Oe = ve * (we(2 * Ae + 0) + lo), Xe = ve * (we(2 * Ae + 1) + lo), He = 255 * Oe % 1, ke = 255 * Xe % 1, Ne = He, st = Xe - ke / 255, ut = ke;
                xe[4 * Ae + 0] = 255 * (Oe - He / 255), xe[4 * Ae + 1] = 255 * Ne, xe[4 * Ae + 2] = 255 * st, xe[4 * Ae + 3] = 255 * ut;
              }
              return xe;
            }(W);
            te = R.particlePositionRGBAImage = new i.r({ width: W, height: W }, _e);
          }
          let ee = R.particleFramebuffer;
          ee ? ee.width !== W && (ee.destroy(), ee = R.particleFramebuffer = N.createFramebuffer(W, W, !0, null)) : ee = R.particleFramebuffer = N.createFramebuffer(W, W, !0, null);
          const se = [];
          for (const _e of F) {
            const pe = z.getTile(_e);
            if (!(pe instanceof ka))
              continue;
            const Me = bd(pe, Z, R);
            if (!Me)
              continue;
            const xe = [pe.tileSize, pe.tileSize];
            let we = R.tileFramebuffer;
            we || (we = R.tileFramebuffer = N.createFramebuffer(xe[0], xe[1], !0, null));
            let ve = pe.rasterParticleState;
            ve || (ve = pe.rasterParticleState = new cu(N, _e, xe, te));
            const Ae = ve.update(R.lastInvalidatedAt);
            ve.particleTextureDimension !== W && ve.updateParticleTexture(_e, te);
            const Oe = ve.targetColorTexture;
            ve.targetColorTexture = ve.backgroundColorTexture, ve.backgroundColorTexture = Oe;
            const Xe = ve.particleTexture0;
            ve.particleTexture0 = ve.particleTexture1, ve.particleTexture1 = Xe, se.push([_e, Me, ve, Ae]);
          }
          if (se.length === 0)
            return;
          const oe = i.q.now(), he = R.previousDrawTimestamp ? 1e-3 * (oe - R.previousDrawTimestamp) : 0.0167;
          if (R.previousDrawTimestamp = oe, R.hasColorMap()) {
            N.activeTexture.set(G.TEXTURE0 + 2);
            let _e = R.colorRampTexture;
            _e || (_e = R.colorRampTexture = new i.T(N, R.colorRamp, G.RGBA8)), _e.bind(G.LINEAR, G.CLAMP_TO_EDGE);
          }
          N.bindFramebuffer.set(R.tileFramebuffer.framebuffer), function(_e, pe, Me) {
            const xe = _e.context, we = xe.gl, ve = pe.tileFramebuffer;
            xe.activeTexture.set(we.TEXTURE0);
            const Ae = { u_texture: 0, u_opacity: 1.05 * (Xe = pe.paint.get("raster-particle-fade-opacity-factor")) / (Xe + 0.05) }, Oe = _e.getOrCreateProgram("rasterParticleTexture", { defines: [], overrideFog: !1 });
            var Xe;
            for (const He of Me) {
              const [, , ke, Ne] = He;
              ve.colorAttachment.set(ke.targetColorTexture.texture), xe.viewport.set([0, 0, ve.width, ve.height]), xe.clear({ color: i.aj.transparent }), Ne && (ke.backgroundColorTexture.bind(we.NEAREST, we.CLAMP_TO_EDGE), Oe.draw(_e, we.TRIANGLES, Wt.disabled, ci.disabled, bi.alphaBlended, ti.disabled, Ae, pe.id, _e.viewportBuffer, _e.quadTriangleIndexBuffer, _e.viewportSegments));
            }
          }(T, R, se), function(_e, pe, Me, xe) {
            const we = _e.context, ve = we.gl, Ae = Me.tileFramebuffer, Oe = _e.transform.projection.name === "globe", Xe = Me.paint.get("raster-particle-max-speed");
            for (const He of xe) {
              const [ke, Ne, st] = He;
              we.activeTexture.set(ve.TEXTURE0 + 0), Ne.texture.bind(ve.LINEAR, ve.CLAMP_TO_EDGE), Ae.colorAttachment.set(st.targetColorTexture.texture);
              const ut = _e.getOrCreateProgram("rasterParticleDraw", { defines: Ne.defines, overrideFog: !1 });
              we.activeTexture.set(ve.TEXTURE0 + 1);
              const xt = Ne.scalarData ? [] : [0, 1, 2, 3].map((Je) => i.d4[Je](ke));
              xt.push(ke);
              const Ge = ke.canonical.x, lt = ke.canonical.y;
              for (const Je of xt) {
                const _t = pe.getTile(Oe ? Je.wrapped() : Je);
                if (!_t)
                  continue;
                const ct = _t.rasterParticleState;
                if (!ct)
                  continue;
                const nt = Je.canonical.x + (1 << Je.canonical.z) * (Je.wrap - ke.wrap), Lt = Je.canonical.y;
                ct.particleTexture0.bind(ve.NEAREST, ve.CLAMP_TO_EDGE);
                const bt = Zt(1, ct.particleTexture0.size[0], [nt - Ge, Lt - lt], 0, Ne.texture.size, 2, Xe, Ne.textureOffset, Ne.scale, Ne.offset);
                ut.draw(_e, ve.POINTS, Wt.disabled, ci.disabled, bi.alphaBlended, ti.disabled, bt, Me.id, ct.particleIndexBuffer, void 0, ct.particleSegment);
              }
            }
          }(T, z, R, se), N.bindFramebuffer.set(R.particleFramebuffer.framebuffer), function(_e, pe, Me, xe) {
            const we = _e.context, ve = we.gl, Ae = pe.paint.get("raster-particle-max-speed"), Oe = xe * pe.paint.get("raster-particle-speed-factor") * 0.15, Xe = function(ke) {
              return Math.pow(ke, 6);
            }(0.01 + 1 * pe.paint.get("raster-particle-reset-rate-factor")), He = pe.particleFramebuffer;
            we.viewport.set([0, 0, He.width, He.height]);
            for (const ke of Me) {
              const [, Ne, st] = ke;
              we.activeTexture.set(ve.TEXTURE0 + 0), Ne.texture.bind(ve.LINEAR, ve.CLAMP_TO_EDGE), we.activeTexture.set(ve.TEXTURE0 + 1);
              const ut = st.particleTexture0;
              ut.bind(ve.NEAREST, ve.CLAMP_TO_EDGE);
              const xt = md(1, ut.size[0], 0, Ne.texture.size, Ae, Oe, Xe, Ne.textureOffset, Ne.scale, Ne.offset);
              He.colorAttachment.set(st.particleTexture1.texture), we.clear({ color: i.aj.transparent }), _e.getOrCreateProgram("rasterParticleUpdate", { defines: Ne.defines }).draw(_e, ve.TRIANGLES, Wt.disabled, ci.disabled, bi.unblended, ti.disabled, xt, pe.id, _e.viewportBuffer, _e.quadTriangleIndexBuffer, _e.viewportSegments);
            }
          }(T, R, se, he);
        }(c, t, s, h), c.renderPass === "translucent" && (function(T, z, R, F, N) {
          const G = T.context, Z = G.gl, W = z.getSource().tileSize, te = 5 * (1 - i.ac(i.bY, i.bY + 1, T.transform.zoom)) * W + R.paint.get("raster-particle-elevation"), ee = !T.options.moving, se = T.transform.projection.name === "globe";
          if (!F.length)
            return;
          const [oe, he] = T.stencilConfigForOverlap(F), _e = [];
          se && _e.push("PROJECTION_GLOBE_VIEW");
          const pe = T.stencilModeFor3D();
          for (const Me of he) {
            const xe = Me.toUnwrapped(), we = z.getTile(Me);
            if (!we.rasterParticleState)
              continue;
            const ve = we.rasterParticleState, Ae = 100;
            we.registerFadeDuration(Ae);
            const Oe = z.findLoadedParent(Me, 0), Xe = Jh(we, Oe, z, T.transform, Ae);
            let He, ke;
            T.terrain && T.terrain.prepareDrawTile(), G.activeTexture.set(Z.TEXTURE0), ve.targetColorTexture.bind(Z.LINEAR, Z.CLAMP_TO_EDGE), G.activeTexture.set(Z.TEXTURE1), Oe && Oe.rasterParticleState ? (Oe.rasterParticleState.targetColorTexture.bind(Z.LINEAR, Z.CLAMP_TO_EDGE), He = Math.pow(2, Oe.tileID.overscaledZ - we.tileID.overscaledZ), ke = [we.tileID.canonical.x * He % 1, we.tileID.canonical.y * He % 1]) : ve.targetColorTexture.bind(Z.LINEAR, Z.CLAMP_TO_EDGE);
            const Ne = se ? Float32Array.from(T.transform.expandedFarZProjMatrix) : T.transform.calculateProjMatrix(xe, ee), st = T.transform, ut = np(st), xt = i.cE(Me.canonical), Ge = i.cF(xt.getCenter().lat);
            let lt, Je, _t, ct, nt;
            se ? (lt = Float32Array.from(i.bb(i.cH(Me.canonical))), Je = Float32Array.from(st.globeMatrix), _t = Float32Array.from(i.cD(st)), ct = [i.at(st.center.lng), i.aA(st.center.lat)], nt = Float32Array.from(i.cG(Me.canonical, xt, Ge, st.worldSize / st._pixelsPerMercatorPixel))) : (lt = new Float32Array(16), Je = new Float32Array(9), _t = new Float32Array(16), ct = [0, 0], nt = new Float32Array(9));
            const Lt = Tl(Ne, lt, Je, _t, nt, ke || [0, 0], i.ae(T.transform.zoom), ct, ut, He || 1, Xe, te), bt = T.isTileAffectedByFog(Me), zt = T.getOrCreateProgram("rasterParticle", { defines: _e, overrideFog: bt });
            if (T.uploadCommonUniforms(G, zt, xe), se) {
              const Bt = new Wt(Z.LEQUAL, Wt.ReadOnly, T.depthRangeFor3D), oi = 0, $t = T.globeSharedBuffers;
              if ($t) {
                const [Xt, ai, zi] = $t.getGridBuffers(Ge, oi !== 0);
                zt.draw(T, Z.TRIANGLES, Bt, pe, bi.alphaBlended, T.renderElevatedRasterBackface ? ti.frontCCW : ti.backCCW, Lt, R.id, Xt, ai, zi);
              }
            } else {
              const Bt = T.depthModeForSublayer(0, Wt.ReadOnly), oi = oe[Me.overscaledZ], { tileBoundsBuffer: $t, tileBoundsIndexBuffer: Xt, tileBoundsSegments: ai } = T.getTileBoundsBuffers(we);
              zt.draw(T, Z.TRIANGLES, Bt, oi, bi.alphaBlended, ti.disabled, Lt, R.id, $t, Xt, ai);
            }
          }
          T.resetStencilClippingMasks();
        }(c, t, s, h), c.style.map.triggerRepaint());
      }, background: function(c, t, s, h) {
        const _ = s.paint.get("background-color"), y = s.paint.get("background-color-use-theme").constantOr("default") === "none", T = s.paint.get("background-opacity"), z = s.paint.get("background-emissive-strength"), R = s.paint.get("background-pitch-alignment") === "viewport";
        if (T === 0)
          return;
        const F = c.context, N = F.gl, G = c.transform, Z = G.tileSize, W = s.paint.get("background-pattern");
        let te;
        if (W !== void 0 && (W === null || (te = c.imageManager.getPattern(W.toString(), s.scope, c.style.getLut(s.scope)), !te)))
          return;
        const ee = !W && _.a === 1 && T === 1 && c.opaquePassEnabledForLayer() ? "opaque" : "translucent";
        if (c.renderPass !== ee)
          return;
        const se = ci.disabled, oe = c.depthModeForSublayer(0, ee === "opaque" ? Wt.ReadWrite : Wt.ReadOnly), he = c.colorModeForDrapableLayerRenderPass(z), _e = W ? "backgroundPattern" : "background";
        let pe, Me = h;
        if (Me || (pe = c.getBackgroundTiles(), Me = Object.values(pe).map((xe) => xe.tileID)), W && (F.activeTexture.set(N.TEXTURE0), c.imageManager.bind(c.context, s.scope)), R) {
          const xe = c.getOrCreateProgram(_e, { overrideFog: !1, overrideRtt: !0 }), we = new Float32Array(i.ab.mat4.identity([])), ve = new i.aG(0, 0, 0, 0, 0), Ae = W ? _d(we, z, T, c, 0, s.scope, te, R, { tileID: ve, tileSize: Z }) : su(we, z, T, _.toRenderColor(y ? null : s.lut));
          xe.draw(c, N.TRIANGLES, oe, se, he, ti.disabled, Ae, s.id, c.viewportBuffer, c.quadTriangleIndexBuffer, c.viewportSegments);
        } else
          for (const xe of Me) {
            const we = c.isTileAffectedByFog(xe), ve = c.getOrCreateProgram(_e, { overrideFog: we }), Ae = xe.toUnwrapped(), Oe = h ? xe.projMatrix : c.transform.calculateProjMatrix(Ae);
            c.prepareDrawTile();
            const Xe = t ? t.getTile(xe) : pe ? pe[xe.key] : new Cr(xe, Z, G.zoom, c), He = W ? _d(Oe, z, T, c, 0, s.scope, te, R, { tileID: xe, tileSize: Z }) : su(Oe, z, T, _.toRenderColor(y ? null : s.lut));
            c.uploadCommonUniforms(F, ve, Ae);
            const { tileBoundsBuffer: ke, tileBoundsIndexBuffer: Ne, tileBoundsSegments: st } = c.getTileBoundsBuffers(Xe);
            ve.draw(c, N.TRIANGLES, oe, se, he, ti.disabled, He, s.id, ke, Ne, st);
          }
      }, sky: function(c, t, s) {
        const h = c._atmosphere ? i.ae(c.transform.zoom) : 1, _ = s.paint.get("sky-opacity") * h;
        if (_ === 0)
          return;
        const y = c.context, T = s.paint.get("sky-type"), z = new Wt(y.gl.LEQUAL, Wt.ReadOnly, [0, 1]), R = c.frameCounter / 1e3 % 1;
        T === "atmosphere" ? c.renderPass === "offscreen" ? s.needsSkyboxCapture(c) && (function(F, N, G, Z) {
          const W = F.context, te = W.gl;
          let ee = N.skyboxFbo;
          if (!ee) {
            ee = N.skyboxFbo = W.createFramebuffer(32, 32, !0, null), N.skyboxGeometry = new Io(W), N.skyboxTexture = W.gl.createTexture(), te.bindTexture(te.TEXTURE_CUBE_MAP, N.skyboxTexture), te.texParameteri(te.TEXTURE_CUBE_MAP, te.TEXTURE_WRAP_S, te.CLAMP_TO_EDGE), te.texParameteri(te.TEXTURE_CUBE_MAP, te.TEXTURE_WRAP_T, te.CLAMP_TO_EDGE), te.texParameteri(te.TEXTURE_CUBE_MAP, te.TEXTURE_MIN_FILTER, te.LINEAR), te.texParameteri(te.TEXTURE_CUBE_MAP, te.TEXTURE_MAG_FILTER, te.LINEAR);
            for (let _e = 0; _e < 6; ++_e)
              te.texImage2D(te.TEXTURE_CUBE_MAP_POSITIVE_X + _e, 0, te.RGBA, 32, 32, 0, te.RGBA, te.UNSIGNED_BYTE, null);
          }
          W.bindFramebuffer.set(ee.framebuffer), W.viewport.set([0, 0, 32, 32]);
          const se = N.getCenter(F, !0), oe = F.getOrCreateProgram("skyboxCapture"), he = new Float64Array(16);
          i.ab.mat4.identity(he), i.ab.mat4.rotateY(he, he, 0.5 * -Math.PI), El(F, N, oe, he, se, 0), i.ab.mat4.identity(he), i.ab.mat4.rotateY(he, he, 0.5 * Math.PI), El(F, N, oe, he, se, 1), i.ab.mat4.identity(he), i.ab.mat4.rotateX(he, he, 0.5 * -Math.PI), El(F, N, oe, he, se, 2), i.ab.mat4.identity(he), i.ab.mat4.rotateX(he, he, 0.5 * Math.PI), El(F, N, oe, he, se, 3), i.ab.mat4.identity(he), El(F, N, oe, he, se, 4), i.ab.mat4.identity(he), i.ab.mat4.rotateY(he, he, Math.PI), El(F, N, oe, he, se, 5), W.viewport.set([0, 0, F.width, F.height]);
        }(c, s), s.markSkyboxValid(c)) : c.renderPass === "sky" && function(F, N, G, Z, W) {
          const te = F.context, ee = te.gl, se = F.transform, oe = F.getOrCreateProgram("skybox");
          te.activeTexture.set(ee.TEXTURE0), ee.bindTexture(ee.TEXTURE_CUBE_MAP, N.skyboxTexture);
          const he = ((_e, pe, Me, xe, we) => ({ u_matrix: _e, u_sun_direction: pe, u_cubemap: 0, u_opacity: xe, u_temporal_offset: we }))(se.skyboxMatrix, N.getCenter(F, !1), 0, Z, W);
          F.uploadCommonUniforms(te, oe), oe.draw(F, ee.TRIANGLES, G, ci.disabled, F.colorModeForRenderPass(), ti.backCW, he, "skybox", N.skyboxGeometry.vertexBuffer, N.skyboxGeometry.indexBuffer, N.skyboxGeometry.segment);
        }(c, s, z, _, R) : T === "gradient" && c.renderPass === "sky" && function(F, N, G, Z, W) {
          const te = F.context, ee = te.gl, se = F.transform, oe = F.getOrCreateProgram("skyboxGradient");
          N.skyboxGeometry || (N.skyboxGeometry = new Io(te)), te.activeTexture.set(ee.TEXTURE0);
          let he = N.colorRampTexture;
          he || (he = N.colorRampTexture = new i.T(te, N.colorRamp, ee.RGBA8)), he.bind(ee.LINEAR, ee.CLAMP_TO_EDGE);
          const _e = ((pe, Me, xe, we, ve) => ({ u_matrix: pe, u_color_ramp: 0, u_center_direction: Me, u_radius: i.ai(xe), u_opacity: we, u_temporal_offset: ve }))(se.skyboxMatrix, N.getCenter(F, !1), N.paint.get("sky-gradient-radius"), Z, W);
          F.uploadCommonUniforms(te, oe), oe.draw(F, ee.TRIANGLES, G, ci.disabled, F.colorModeForRenderPass(), ti.backCW, _e, "skyboxGradient", N.skyboxGeometry.vertexBuffer, N.skyboxGeometry.indexBuffer, N.skyboxGeometry.segment);
        }(c, s, z, _, R);
      }, debug: function(c, t, s, h, _, y) {
        for (let T = 0; T < s.length; T++)
          if (_) {
            const F = new i.aj(h.r * 0.8, h.g * 0.8, h.b * 0.8, 1);
            Sl(c, t, s[T], h, -1, -1, y), Sl(c, t, s[T], h, -1, 1, y), Sl(c, t, s[T], h, 1, 1, y), Sl(c, t, s[T], h, 1, -1, y), Sl(c, t, s[T], F, 0, 0, y);
          } else
            Sl(c, t, s[T], h, 0, 0, y);
      }, custom: function(c, t, s, h) {
        const _ = c.context, y = s.implementation;
        if (!c.transform.projection.unsupportedLayers || !c.transform.projection.unsupportedLayers.includes("custom") || c.terrain && (c.terrain.renderingToTexture || c.renderPass === "offscreen") && s.isDraped(t)) {
          if (c.renderPass === "offscreen") {
            const T = y.prerender;
            if (T) {
              if (c.setCustomLayerDefaults(), _.setColorMode(c.colorModeForRenderPass()), c.transform.projection.name === "globe") {
                const z = c.transform.pointMerc;
                T.call(y, _.gl, c.transform.customLayerMatrix(), c.transform.getProjection(), c.transform.globeToMercatorMatrix(), i.ae(c.transform.zoom), [z.x, z.y], c.transform.pixelsPerMeterRatio);
              } else
                T.call(y, _.gl, c.transform.customLayerMatrix());
              _.setDirty(), c.setBaseState();
            }
          } else if (c.renderPass === "translucent") {
            if (c.terrain && c.terrain.renderingToTexture) {
              const z = y.renderToTile;
              if (z) {
                const R = h[0].canonical, F = new i.aa(R.x + h[0].wrap * (1 << R.z), R.y, R.z);
                _.setDepthMode(Wt.disabled), _.setStencilMode(ci.disabled), _.setColorMode(c.colorModeForRenderPass()), c.setCustomLayerDefaults(), z.call(y, _.gl, F), _.setDirty(), c.setBaseState();
              }
              return;
            }
            c.setCustomLayerDefaults(), _.setColorMode(c.colorModeForRenderPass()), _.setStencilMode(ci.disabled);
            const T = y.renderingMode === "3d" ? new Wt(c.context.gl.LEQUAL, Wt.ReadWrite, c.depthRangeFor3D) : c.depthModeForSublayer(0, Wt.ReadOnly);
            if (_.setDepthMode(T), c.transform.projection.name === "globe") {
              const z = c.transform.pointMerc;
              y.render(_.gl, c.transform.customLayerMatrix(), c.transform.getProjection(), c.transform.globeToMercatorMatrix(), i.ae(c.transform.zoom), [z.x, z.y], c.transform.pixelsPerMeterRatio);
            } else
              y.render(_.gl, c.transform.customLayerMatrix());
            _.setDirty(), c.setBaseState(), _.bindFramebuffer.set(null);
          }
        } else
          i.w("Custom layers are not yet supported with this projection. Use mercator or globe to enable usage of custom layers.");
      }, model: function(c, t, s, h) {
        if (c.renderPass === "opaque")
          return;
        const _ = s.paint.get("model-opacity").constantOr(1);
        if (_ === 0)
          return;
        const y = s.paint.get("model-cast-shadows");
        if (c.renderPass === "shadow" && (!y || c.terrain && _ < 0.65 && s._transitionablePaint._values["model-opacity"].value.expression instanceof i.a9))
          return;
        const T = c.shadowRenderer, z = s.paint.get("model-receive-shadows");
        T && (T.useNormalOffset = !0, z || (T.enabled = !1));
        const R = () => {
          T && (T.useNormalOffset = !0, z || (T.enabled = !0));
        }, F = t.getSource();
        if (c.renderPass === "light-beam" && F.type !== "batched-model")
          return;
        if (F.type === "vector" || F.type === "geojson")
          return function(oe, he, _e, pe, Me) {
            const xe = oe.transform;
            if (xe.projection.name !== "mercator")
              return void i.w(`Drawing 3D models for ${xe.projection.name} projection is not yet implemented`);
            const we = xe.getFreeCameraOptions().position;
            if (!oe.modelManager)
              return;
            const ve = oe.modelManager;
            _e.modelManager = ve;
            const Ae = oe.shadowRenderer;
            if (!_e._unevaluatedLayout._values.hasOwnProperty("model-id"))
              return;
            const Oe = _e._unevaluatedLayout._values["model-id"], Xe = { ..._e.layout.get("model-id").parameters }, He = oe.style.order.indexOf(_e.fqid);
            for (const ke of pe) {
              const Ne = he.getTile(ke).getBucket(_e);
              if (!Ne || Ne.projection.name !== xe.projection.name)
                continue;
              const st = Ne.getModelUris();
              st && !Ne.modelsRequested && (ve.addModelsFromBucket(st, Me), Ne.modelsRequested = !0);
              const ut = Xa(ke, xe);
              Xe.zoom = ut;
              const xt = Oe.possiblyEvaluate(Xe);
              if (wd(oe, Ne, ke), ho.shadowUniformsInitialized = !1, ho.useSingleShadowCascade = !!Ae && Ae.getMaxCascadeForTile(ke.toUnwrapped()) === 0, oe.renderPass === "shadow" && Ae) {
                if (oe.currentShadowCascade === 1 && Ne.isInsideFirstShadowMapFrustum)
                  continue;
                const Je = xe.calculatePosMatrix(ke.toUnwrapped(), xe.worldSize);
                if (ho.tileMatrix.set(Je), ho.shadowTileMatrix = Float32Array.from(Ae.calculateShadowPassMatrixFromMatrix(Je)), ho.aabb.min.fill(0), ho.aabb.max[0] = ho.aabb.max[1] = i.ag, ho.aabb.max[2] = 0, fu(Ne, ho, oe, _e.scope))
                  continue;
              }
              const Ge = 1 << ke.canonical.z, lt = [((we.x - ke.wrap) * Ge - ke.canonical.x) * i.ag, (we.y * Ge - ke.canonical.y) * i.ag, we.z * Ge * i.ag];
              oe.conflationActive && Object.keys(Ne.instancesPerModel).length > 0 && oe.style.isLayerClipped(_e, he.getSource()) && Ne.updateReplacement(ke, oe.replacementSource, He, Me) && (Ne.uploaded = !1, Ne.upload(oe.context));
              for (let Je in Ne.instancesPerModel) {
                const _t = Ne.instancesPerModel[Je];
                _t.features.length > 0 && (Je = xt.evaluate(_t.features[0].feature, {}));
                const ct = ve.getModel(Je, Me);
                if (ct && ct.uploaded)
                  for (const nt of ct.nodes)
                    va(oe, _e, nt, _t, lt, ke, ho);
              }
            }
          }(c, t, s, h, F.type === "vector" ? s.scope : ""), void R();
        if (!F.loaded())
          return;
        if (F.type === "batched-model")
          return function(oe, he, _e, pe) {
            _e.resetLayerRenderingStats(oe);
            const Me = oe.context, xe = oe.transform, we = oe.style.fog, ve = oe.shadowRenderer;
            if (xe.projection.name !== "mercator")
              return void i.w(`Drawing 3D landmark models for ${xe.projection.name} projection is not yet implemented`);
            const Ae = oe.transform.getFreeCameraOptions().position, Oe = i.ab.vec3.scale([], [Ae.x, Ae.y, Ae.z], oe.transform.worldSize), Xe = i.ab.vec3.negate([], Oe), He = i.ab.mat4.identity([]), ke = i.dj(xe.center.lat, xe.zoom), Ne = i.ab.mat4.fromScaling([], [1, 1, 1 / ke]);
            i.ab.mat4.translate(He, He, Xe);
            const st = _e.paint.get("model-opacity").constantOr(1), ut = new Wt(Me.gl.LEQUAL, Wt.ReadWrite, oe.depthRangeFor3D), xt = new Wt(Me.gl.LEQUAL, Wt.ReadOnly, oe.depthRangeFor3D), Ge = new i.cd([1 / 0, 1 / 0, 1 / 0], [-1 / 0, -1 / 0, -1 / 0]), lt = oe.renderPass === "shadow", Je = lt && ve ? ve.getCurrentCascadeFrustum() : xe.getFrustum(xe.scaleZoom(xe.worldSize)), _t = _e.paint.get("model-front-cutoff"), ct = _t[2] < 1, nt = Mo(oe, _e.paint.get("model-cutoff-fade-range")), Lt = _e.getLayerRenderingStats();
            (function(bt, zt, Bt, oi) {
              const $t = bt.terrain ? bt.terrain.exaggeration() : 0, Xt = bt.transform.zoom;
              for (const ai of oi) {
                const zi = zt.getTile(ai).getBucket(Bt);
                zi && (bt.conflationActive && zi.updateReplacement(ai, bt.replacementSource), zi.evaluateScale(bt, Bt), bt.terrain && $t > 0 && zi.elevationUpdate(bt.terrain, $t, ai, Bt.source), zi.needsReEvaluation(bt, Xt, Bt) && zi.evaluate(Bt));
              }
            })(oe, he, _e, pe), function() {
              let bt, zt, Bt;
              ct ? (bt = pe.length - 1, zt = -1, Bt = -1) : (bt = 0, zt = pe.length, Bt = 1);
              const oi = new Float64Array(16), $t = i.ab.vec3.create(), Xt = new i.P(0, 0);
              for (let ai = bt; ai !== zt; ai += Bt) {
                const zi = pe[ai], wi = he.getTile(zi).getBucket(_e);
                if (!wi || !wi.uploaded)
                  continue;
                let mn = !1;
                ve && (mn = ve.getMaxCascadeForTile(zi.toUnwrapped()) === 0);
                const Mn = xe.calculatePosMatrix(zi.toUnwrapped(), xe.worldSize), Xi = wi.modelTraits;
                !lt && ct && (i.ab.mat4.invert(oi, Mn), i.ab.vec3.transformMat4($t, Oe, oi), Xt.x = $t[0], Xt.y = $t[1]);
                const sn = [];
                for (const _i of wi.getNodesInfo()) {
                  if (_i.hiddenByReplacement || !_i.node.meshes)
                    continue;
                  const Jt = _i.node;
                  let ji = 0;
                  oe.terrain && Jt.elevation && (ji = Jt.elevation * oe.terrain.exaggeration());
                  const Yi = (() => {
                    const Ri = _i.aabb;
                    return Ge.min = [...Ri.min], Ge.max = [...Ri.max], Ge.min[2] += ji, Ge.max[2] += ji, i.ab.vec3.transformMat4(Ge.min, Ge.min, Mn), i.ab.vec3.transformMat4(Ge.max, Ge.max, Mn), Ge;
                  })(), In = _i.evaluatedScale;
                  if (In[0] <= 1 && In[1] <= 1 && In[2] <= 1 && Yi.intersects(Je) === 0)
                    continue;
                  if (!lt && ct) {
                    const Ri = 0.16666666666666666;
                    _i.cameraCollisionOpacity = Oe[0] > Yi.min[0] && Oe[0] < Yi.max[0] && Oe[1] > Yi.min[1] && Oe[1] < Yi.max[1] && Oe[2] * ke < Yi.max[2] && Jt.footprint && i.bA(Xt, Jt.footprint) ? Math.max(_i.cameraCollisionOpacity - Ri, 0) : Math.min(1, _i.cameraCollisionOpacity + Ri);
                  }
                  const Fs = [...Mn], pr = Jt.anchor ? Jt.anchor[0] : 0, ts = Jt.anchor ? Jt.anchor[1] : 0;
                  i.ab.mat4.translate(Fs, Fs, [pr * (In[0] - 1), ts * (In[1] - 1), ji]), i.ab.vec3.exactEquals(In, i.dm) || i.ab.mat4.scale(Fs, Fs, In);
                  const Ps = i.ab.mat4.multiply([], Fs, Jt.matrix), Qs = i.ab.mat4.multiply([], xe.expandedFarZProjMatrix, Ps), jn = i.ab.mat4.multiply([], xe.expandedFarZProjMatrix, Fs), dn = i.ab.vec4.transformMat4([], [pr, ts, ji, 1], Qs)[2];
                  Jt.hidden = !1;
                  let _n = st;
                  lt || (ct && (_n *= _i.cameraCollisionOpacity, _n *= Td(Fs, xe, _i.aabb, _t)), _n *= pu(nt, dn)), _n !== 0 ? sn.push({ nodeInfo: _i, depth: dn, opacity: _n, wvpForNode: Qs, wvpForTile: jn, nodeModelMatrix: Ps, tileModelMatrix: Fs }) : Jt.hidden = !0;
                }
                lt || sn.sort((_i, Jt) => !ct || _i.opacity === 1 && Jt.opacity === 1 ? _i.depth < Jt.depth ? -1 : 1 : _i.opacity === 1 ? -1 : Jt.opacity === 1 ? 1 : _i.depth > Jt.depth ? -1 : 1);
                for (const _i of sn) {
                  const Jt = _i.nodeInfo, ji = Jt.node;
                  let Yi = i.ab.mat4.multiply([], Ne, _i.tileModelMatrix);
                  i.ab.mat4.multiply(Yi, He, Yi);
                  const In = i.ab.mat4.invert([], Yi);
                  i.ab.mat4.transpose(In, In), i.ab.mat4.scale(In, In, Ya), Yi = i.ab.mat4.multiply(Yi, Yi, ji.matrix);
                  const Fs = oe.renderPass === "light-beam", pr = _e.paint.get("model-color-use-theme").constantOr("default") === "none", ts = Xi & i.dp.HasMapboxMeshFeatures, Ps = ts ? 0 : Jt.evaluatedRMEA[0][2];
                  for (let Qs = 0; Qs < ji.meshes.length; ++Qs) {
                    const jn = ji.meshes[Qs], dn = Qs === ji.lightMeshIndex;
                    let _n = _i.wvpForNode;
                    if (dn) {
                      if (!Fs && !oe.terrain && oe.shadowRenderer) {
                        oe.currentLayer < oe.firstLightBeamLayer && (oe.firstLightBeamLayer = oe.currentLayer);
                        continue;
                      }
                      _n = _i.wvpForTile;
                    } else if (Fs)
                      continue;
                    const Ri = { defines: [] }, Gn = [];
                    if (!lt && ve && (ve.useNormalOffset = !!jn.normalBuffer), du(Ri.defines, Gn, jn, oe, pr ? null : _e.lut), ts || Ri.defines.push("DIFFUSE_SHADED"), mn && Ri.defines.push("SHADOWS_SINGLE_CASCADE"), Lt && (lt ? Lt.numRenderedVerticesInShadowPass += jn.vertexArray.length : Lt.numRenderedVerticesInTransparentPass += jn.vertexArray.length), lt) {
                      $a(jn, _i.nodeModelMatrix, oe, _e);
                      continue;
                    }
                    let Bs = null;
                    if (we) {
                      const mr = qi(_i.nodeModelMatrix, oe.transform);
                      if (Bs = new Float32Array(mr), xe.projection.name !== "globe") {
                        const ko = jn.aabb.min, Nr = jn.aabb.max, [il, ia] = we.getOpacityForBounds(mr, ko[0], ko[1], Nr[0], Nr[1]);
                        Ri.overrideFog = il >= It || ia >= It;
                      }
                    }
                    const cn = jn.material;
                    let er;
                    cn.occlusionTexture && cn.occlusionTexture.offsetScale && (er = cn.occlusionTexture.offsetScale, Ri.defines.push("OCCLUSION_TEXTURE_TRANSFORM"));
                    const eo = oe.getOrCreateProgram("model", Ri);
                    !lt && ve && ve.setupShadowsFromMatrix(_i.tileModelMatrix, eo, ve.useNormalOffset), oe.uploadCommonUniforms(Me, eo, null, Bs);
                    const Br = cn.pbrMetallicRoughness;
                    Br.metallicFactor = 0.9, Br.roughnessFactor = 0.5;
                    const Ma = gd(new Float32Array(_n), new Float32Array(Yi), new Float32Array(In), new Float32Array(ji.matrix), oe, _i.opacity, Br.baseColorFactor.toRenderColor(null), cn.emissiveFactor, Br.metallicFactor, Br.roughnessFactor, cn, Ps, _e, [0, 0, 0], er);
                    !dn && (Jt.hasTranslucentParts || _i.opacity < 1) && eo.draw(oe, Me.gl.TRIANGLES, ut, ci.disabled, bi.disabled, ti.backCCW, Ma, _e.id, jn.vertexBuffer, jn.indexBuffer, jn.segments, _e.paint, oe.transform.zoom, void 0, Gn), eo.draw(oe, Me.gl.TRIANGLES, dn ? xt : ut, ci.disabled, dn || _i.opacity < 1 || Jt.hasTranslucentParts ? bi.alphaBlended : bi.unblended, ti.backCCW, Ma, _e.id, jn.vertexBuffer, jn.indexBuffer, jn.segments, _e.paint, oe.transform.zoom, void 0, Gn);
                  }
                }
              }
            }();
          }(c, t, s, h), void R();
        if (F.type !== "model")
          return;
        const N = F.getModels(), G = [], Z = c.transform.getFreeCameraOptions().position, W = i.ab.vec3.scale([], [Z.x, Z.y, Z.z], c.transform.worldSize);
        i.ab.vec3.negate(W, W);
        const te = [], ee = [];
        let se = 0;
        for (const oe of N) {
          const he = s.paint.get("model-rotation").constantOr(null), _e = s.paint.get("model-scale").constantOr(null), pe = s.paint.get("model-translation").constantOr(null);
          oe.computeModelMatrix(c, he, _e, pe, !0, !0, !1);
          const Me = i.ab.mat4.identity([]), xe = i.dj(oe.position.lat, c.transform.zoom), we = i.ab.mat4.fromScaling([], [1, 1, 1 / xe]);
          i.ab.mat4.translate(Me, Me, W), G.push({ zScaleMatrix: we, negCameraPosMatrix: Me });
          for (const ve of oe.nodes)
            oh(c.transform, ve, oe.matrix, c.transform.expandedFarZProjMatrix, se, te, ee);
          se++;
        }
        if (te.sort((oe, he) => he.depth - oe.depth), c.renderPass !== "shadow") {
          if (_ === 1)
            for (const oe of ee)
              Lo(oe, c, s, G[oe.modelIndex], ci.disabled, c.colorModeForRenderPass());
          else {
            for (const oe of ee)
              Lo(oe, c, s, G[oe.modelIndex], ci.disabled, bi.disabled);
            for (const oe of ee)
              Lo(oe, c, s, G[oe.modelIndex], c.stencilModeFor3D(), c.colorModeForRenderPass());
            c.resetStencilClippingMasks();
          }
          for (const oe of te)
            Lo(oe, c, s, G[oe.modelIndex], ci.disabled, c.colorModeForRenderPass());
          R();
        } else {
          for (const oe of ee)
            $a(oe.mesh, oe.nodeModelMatrix, c, s);
          for (const oe of te)
            $a(oe.mesh, oe.nodeModelMatrix, c, s);
          R();
        }
      } }, xu = { model: function(c, t, s) {
        const h = t.getSource();
        if (!h.loaded())
          return;
        if (h.type === "vector" || h.type === "geojson")
          return void (s.modelManager && s.modelManager.upload(s, h.type === "vector" ? c.scope : ""));
        if (h.type === "batched-model" || h.type !== "model")
          return;
        const _ = h.getModels();
        for (const y of _)
          y.upload(s.context);
      }, raster: function(c, t, s) {
        const h = t.getSource();
        if (!(h instanceof xn && h.loaded()))
          return;
        const _ = c.sourceLayer || h.rasterLayerIds && h.rasterLayerIds[0];
        if (!_)
          return;
        const y = c.paint.get("raster-array-band") || h.getInitialBand(_);
        if (y == null)
          return;
        const T = t.getIds().map((z) => t.getTileByID(z));
        for (const z of T)
          z.updateNeeded(_, y) && h.prepareTile(z, _, y);
      }, "raster-particle": function(c, t, s) {
        const h = t.getSource();
        if (!(h instanceof xn && h.loaded()))
          return;
        const _ = c.sourceLayer || h.rasterLayerIds && h.rasterLayerIds[0];
        if (!_)
          return;
        const y = c.paint.get("raster-particle-array-band") || h.getInitialBand(_);
        if (y == null)
          return;
        const T = t.getIds().map((z) => t.getTileByID(z));
        for (const z of T)
          z.updateNeeded(_, y) && h.prepareTile(z, _, y);
      } };
      class Ld {
        constructor(t, s, h, _, y) {
          this.context = new qa(t, s), this.transform = h, this._tileTextures = {}, this.frameCopies = [], this.loadTimeStamps = [], this.tp = y, this._timeStamp = i.q.now(), this._averageFPS = 0, this._fpsHistory = [], this._dt = 0, this._debugParams = { forceEnablePrecipitation: !1, showTerrainProxyTiles: !1, fpsWindow: 30, continousRedraw: !1, enabledLayers: {} };
          const T = ["fill", "line", "symbol", "circle", "heatmap", "fill-extrusion", "raster", "raster-particle", "hillshade", "model", "background", "sky"];
          for (const R of T)
            this._debugParams.enabledLayers[R] = !0;
          y.registerParameter(this._debugParams, ["Terrain"], "showTerrainProxyTiles", {}, () => {
            this.style.map.triggerRepaint();
          }), y.registerParameter(this._debugParams, ["Precipitation"], "forceEnablePrecipitation"), y.registerParameter(this._debugParams, ["FPS"], "fpsWindow", { min: 1, max: 100, step: 1 }), y.registerBinding(this._debugParams, ["FPS"], "continousRedraw", { readonly: !0, label: "continuous redraw" }), y.registerBinding(this, ["FPS"], "_averageFPS", { readonly: !0, label: "value" }), y.registerBinding(this, ["FPS"], "_averageFPS", { readonly: !0, label: "graph", view: "graph", min: 0, max: 200 });
          for (const R of T)
            y.registerParameter(this._debugParams.enabledLayers, ["Debug", "Layers"], R);
          this.occlusionParams = new Ka(y), this.setup(), this.numSublayers = sr.maxUnderzooming + sr.maxOverzooming + 1, this.depthEpsilon = 1 / Math.pow(2, 16), this.deferredRenderGpuTimeQueries = [], this.gpuTimers = {}, this.frameCounter = 0, this._backgroundTiles = {}, this.conflationActive = !1, this.replacementSource = new i.dv(), this.longestCutoffRange = 0, this.minCutoffZoom = 0, this._fogVisible = !1, this._cachedTileFogOpacities = {}, this._shadowRenderer = new So(this), this._wireframeDebugCache = new Sd(), this.renderDefaultNorthPole = !0, this.renderDefaultSouthPole = !0, this.layersWithOcclusionOpacity = [];
          const z = new i.r({ width: 1, height: 1 }, Uint8Array.of(0, 0, 0, 0));
          this.emptyDepthTexture = new i.T(this.context, z, t.RGBA8), this._clippingActiveLastFrame = !1, this.scaleFactor = _;
        }
        updateTerrain(t, s) {
          const h = !!t && !!t.terrain && this.transform.projection.supportsTerrain;
          if (!(h || this._terrain && this._terrain.enabled))
            return;
          this._terrain || (this._terrain = new Wf(this, t));
          const _ = this._terrain;
          this.transform.elevation = h ? _ : null, _.update(t, this.transform, s), this.transform.elevation && !_.enabled && (this.transform.elevation = null);
        }
        _updateFog(t) {
          const s = t.fog;
          if (!s || this.transform.projection.name === "globe" || s.getOpacity(this.transform.pitch) < 1 || s.properties.get("horizon-blend") < 0.03)
            return void (this.transform.fogCullDistSq = null);
          const [h, _] = s.getFovAdjustedRange(this.transform._fov);
          if (h > _)
            return void (this.transform.fogCullDistSq = null);
          const y = h + 0.78 * (_ - h);
          this.transform.fogCullDistSq = y * y;
        }
        get terrain() {
          return this.transform._terrainEnabled() && this._terrain && this._terrain.enabled || this._forceTerrainMode ? this._terrain : null;
        }
        get forceTerrainMode() {
          return this._forceTerrainMode;
        }
        set forceTerrainMode(t) {
          t && !this._terrain && (this._terrain = new Wf(this, this.style)), this._forceTerrainMode = t;
        }
        get shadowRenderer() {
          return this._shadowRenderer && this._shadowRenderer.enabled ? this._shadowRenderer : null;
        }
        get wireframeDebugCache() {
          return this._wireframeDebugCache;
        }
        resize(t, s) {
          if (this.width = t * i.q.devicePixelRatio, this.height = s * i.q.devicePixelRatio, this.context.viewport.set([0, 0, this.width, this.height]), this.style)
            for (const h of this.style.order)
              this.style._mergedLayers[h].resize();
        }
        setup() {
          const t = this.context, s = new i.b4();
          s.emplaceBack(0, 0), s.emplaceBack(i.ag, 0), s.emplaceBack(0, i.ag), s.emplaceBack(i.ag, i.ag), this.tileExtentBuffer = t.createVertexBuffer(s, i.b6.members), this.tileExtentSegments = i.b7.simpleSegment(0, 0, 4, 2);
          const h = new i.b4();
          h.emplaceBack(0, 0), h.emplaceBack(i.ag, 0), h.emplaceBack(0, i.ag), h.emplaceBack(i.ag, i.ag), this.debugBuffer = t.createVertexBuffer(h, i.b6.members), this.debugSegments = i.b7.simpleSegment(0, 0, 4, 5);
          const _ = new i.b4();
          _.emplaceBack(-1, -1), _.emplaceBack(1, -1), _.emplaceBack(-1, 1), _.emplaceBack(1, 1), this.viewportBuffer = t.createVertexBuffer(_, i.b6.members), this.viewportSegments = i.b7.simpleSegment(0, 0, 4, 2);
          const y = new i.aT();
          y.emplaceBack(0, 0, 0, 0), y.emplaceBack(i.ag, 0, i.ag, 0), y.emplaceBack(0, i.ag, 0, i.ag), y.emplaceBack(i.ag, i.ag, i.ag, i.ag), this.mercatorBoundsBuffer = t.createVertexBuffer(y, i.b9.members), this.mercatorBoundsSegments = i.b7.simpleSegment(0, 0, 4, 2);
          const T = new i.aU();
          T.emplaceBack(0, 1, 2), T.emplaceBack(2, 1, 3), this.quadTriangleIndexBuffer = t.createIndexBuffer(T);
          const z = new i.b5();
          for (const F of [0, 1, 3, 2, 0])
            z.emplaceBack(F);
          this.debugIndexBuffer = t.createIndexBuffer(z), this.emptyTexture = new i.T(t, new i.r({ width: 1, height: 1 }, Uint8Array.of(0, 0, 0, 0)), t.gl.RGBA8), this.identityMat = i.ab.mat4.create();
          const R = this.context.gl;
          this.stencilClearMode = new ci({ func: R.ALWAYS, mask: 0 }, 0, 255, R.ZERO, R.ZERO, R.ZERO), this.loadTimeStamps.push(performance.now());
        }
        getMercatorTileBoundsBuffers() {
          return { tileBoundsBuffer: this.mercatorBoundsBuffer, tileBoundsIndexBuffer: this.quadTriangleIndexBuffer, tileBoundsSegments: this.mercatorBoundsSegments };
        }
        getTileBoundsBuffers(t) {
          return t._makeTileBoundsBuffers(this.context, this.transform.projection), t._tileBoundsBuffer ? { tileBoundsBuffer: t._tileBoundsBuffer, tileBoundsIndexBuffer: t._tileBoundsIndexBuffer, tileBoundsSegments: t._tileBoundsSegments } : this.getMercatorTileBoundsBuffers();
        }
        clearStencil() {
          const t = this.context.gl;
          this.nextStencilID = 1, this.currentStencilSource = void 0, this._tileClippingMaskIDs = {}, this.getOrCreateProgram("clippingMask").draw(this, t.TRIANGLES, Wt.disabled, this.stencilClearMode, bi.disabled, ti.disabled, nc(this.identityMat), "$clipping", this.viewportBuffer, this.quadTriangleIndexBuffer, this.viewportSegments);
        }
        resetStencilClippingMasks() {
          this.terrain || (this.currentStencilSource = void 0, this._tileClippingMaskIDs = {});
        }
        _renderTileClippingMasks(t, s, h) {
          if (!s || this.currentStencilSource === s.id || !t.isTileClipped() || !h || h.length === 0)
            return;
          if (this._tileClippingMaskIDs && !this.terrain) {
            let z = !1;
            for (const R of h)
              if (this._tileClippingMaskIDs[R.key] === void 0) {
                z = !0;
                break;
              }
            if (!z)
              return;
          }
          this.currentStencilSource = s.id;
          const _ = this.context, y = _.gl;
          this.nextStencilID + h.length > 256 && this.clearStencil(), _.setColorMode(bi.disabled), _.setDepthMode(Wt.disabled);
          const T = this.getOrCreateProgram("clippingMask");
          this._tileClippingMaskIDs = {};
          for (const z of h) {
            const R = s.getTile(z), F = this._tileClippingMaskIDs[z.key] = this.nextStencilID++, { tileBoundsBuffer: N, tileBoundsIndexBuffer: G, tileBoundsSegments: Z } = this.getTileBoundsBuffers(R);
            T.draw(this, y.TRIANGLES, Wt.disabled, new ci({ func: y.ALWAYS, mask: 0 }, F, 255, y.KEEP, y.KEEP, y.REPLACE), bi.disabled, ti.disabled, nc(z.projMatrix), "$clipping", N, G, Z);
          }
        }
        stencilModeFor3D() {
          this.currentStencilSource = void 0, this.nextStencilID + 1 > 256 && this.clearStencil();
          const t = this.nextStencilID++, s = this.context.gl;
          return new ci({ func: s.NOTEQUAL, mask: 255 }, t, 255, s.KEEP, s.KEEP, s.REPLACE);
        }
        stencilModeForClipping(t) {
          if (this.terrain)
            return this.terrain.stencilModeForRTTOverlap(t);
          const s = this.context.gl;
          return new ci({ func: s.EQUAL, mask: 255 }, this._tileClippingMaskIDs[t.key], 0, s.KEEP, s.KEEP, s.REPLACE);
        }
        stencilConfigForOverlap(t) {
          const s = this.context.gl, h = t.sort((T, z) => z.overscaledZ - T.overscaledZ), _ = h[h.length - 1].overscaledZ, y = h[0].overscaledZ - _ + 1;
          if (y > 1) {
            this.currentStencilSource = void 0, this.nextStencilID + y > 256 && this.clearStencil();
            const T = {};
            for (let z = 0; z < y; z++)
              T[z + _] = new ci({ func: s.GEQUAL, mask: 255 }, z + this.nextStencilID, 255, s.KEEP, s.KEEP, s.REPLACE);
            return this.nextStencilID += y, [T, h];
          }
          return [{ [_]: ci.disabled }, h];
        }
        colorModeForRenderPass() {
          const t = this.context.gl;
          return this._showOverdrawInspector ? new bi([t.CONSTANT_COLOR, t.ONE, t.CONSTANT_COLOR, t.ONE], new i.aj(0.125, 0.125, 0.125, 0), [!0, !0, !0, !0]) : this.renderPass === "opaque" ? bi.unblended : bi.alphaBlended;
        }
        colorModeForDrapableLayerRenderPass(t) {
          const s = this.context.gl;
          return (() => this.style && this.style.enable3dLights() && this.terrain && this.terrain.renderingToTexture)() && this.renderPass === "translucent" ? new bi([s.ONE, s.ONE_MINUS_SRC_ALPHA, s.CONSTANT_ALPHA, s.ONE_MINUS_SRC_ALPHA], new i.aj(0, 0, 0, t === void 0 ? 0 : t), [!0, !0, !0, !0]) : this.colorModeForRenderPass();
        }
        depthModeForSublayer(t, s, h, _ = !1) {
          if (this.depthOcclusion)
            return new Wt(this.context.gl.GREATER, Wt.ReadOnly, this.depthRangeFor3D);
          if (!this.opaquePassEnabledForLayer() && !_)
            return Wt.disabled;
          const y = 1 - ((1 + this.currentLayer) * this.numSublayers + t) * this.depthEpsilon;
          return new Wt(h || this.context.gl.LEQUAL, s, [y, y]);
        }
        opaquePassEnabledForLayer() {
          return this.currentLayer < this.opaquePassCutoff;
        }
        blitDepth() {
          const t = this.context.gl, s = Math.ceil(this.width), h = Math.ceil(this.height), _ = this.context.bindFramebuffer.get(), y = t.getParameter(t.TEXTURE_BINDING_2D);
          this.depthFBO && this.depthFBO.width === s && this.depthFBO.height === h || (this.depthFBO && (this.depthFBO.destroy(), this.depthFBO = void 0, this.depthTexture = void 0), s !== 0 && h !== 0 && (this.depthFBO = new br(this.context, s, h, !1, "texture"), this.depthTexture = new i.T(this.context, { width: s, height: h, data: null }, t.DEPTH24_STENCIL8), this.depthFBO.depthAttachment.set(this.depthTexture.texture))), this.context.bindFramebuffer.set(_), t.bindTexture(t.TEXTURE_2D, y), this.depthFBO && (t.bindFramebuffer(t.READ_FRAMEBUFFER, null), t.bindFramebuffer(t.DRAW_FRAMEBUFFER, this.depthFBO.framebuffer), t.blitFramebuffer(0, 0, s, h, 0, 0, s, h, t.DEPTH_BUFFER_BIT, t.NEAREST), t.bindFramebuffer(t.FRAMEBUFFER, this.context.bindFramebuffer.current));
        }
        updateAverageFPS() {
          this._fpsHistory.push(this._dt === 0 ? 0 : 1e3 / this._dt), this._fpsHistory.length > this._debugParams.fpsWindow && this._fpsHistory.splice(0, this._fpsHistory.length - this._debugParams.fpsWindow), this._averageFPS = Math.round(this._fpsHistory.reduce((t, s) => t + s / this._fpsHistory.length, 0));
        }
        render(t, s) {
          const h = i.q.now();
          this._dt = h - this._timeStamp, this._timeStamp = h, this._wireframeDebugCache.update(this.frameCounter), this._debugParams.continousRedraw = t.map.repaint, this.style = t, this.options = s;
          const _ = this.style._mergedLayers, y = this.style._getOrder(!(!this.terrain || !this.terrain.enabled)).filter((ke) => {
            const Ne = _[ke];
            return !(Ne.type in this._debugParams.enabledLayers) || this._debugParams.enabledLayers[Ne.type];
          });
          let T = !1, z = !1;
          for (const ke of y) {
            const Ne = _[ke];
            Ne.type === "circle" && (T = !0), Ne.type === "symbol" && (Ne.hasInitialOcclusionOpacityProperties ? z = !0 : T = !0);
          }
          const R = y.map((ke) => _[ke]), F = this.style._mergedSourceCaches;
          this.imageManager = t.imageManager, this.modelManager = t.modelManager, this.symbolFadeChange = t.placement.symbolFadeChange(i.q.now()), this.imageManager.beginFrame();
          let N = 0, G = !1;
          for (const ke in F) {
            const Ne = F[ke];
            Ne.used && (Ne.prepare(this.context), Ne.getSource().usedInConflation && ++N);
          }
          let Z = !1;
          for (const ke of R)
            ke.isHidden(this.transform.zoom) || (ke.type === "clip" && (Z = !0), this.prepareLayer(ke));
          const W = {}, te = {}, ee = {}, se = {}, oe = {};
          for (const ke in F) {
            const Ne = F[ke];
            W[ke] = Ne.getVisibleCoordinates(), te[ke] = W[ke].slice().reverse(), ee[ke] = Ne.getVisibleCoordinates(!0).reverse(), se[ke] = Ne.getShadowCasterCoordinates(), oe[ke] = Ne.sortCoordinatesByDistance(W[ke]);
          }
          const he = (ke) => {
            const Ne = this.style.getLayerSourceCache(ke);
            return Ne && Ne.used ? Ne.getSource() : null;
          };
          if (N || Z || this._clippingActiveLastFrame) {
            const ke = [], Ne = [];
            let st = 0;
            for (const ut of R)
              this.isSourceForClippingOrConflation(ut, he(ut)) && (ke.push(ut), Ne.push(st)), st++;
            if (ke && (Z || ke.length > 1) || this._clippingActiveLastFrame) {
              Z = !1;
              const ut = [];
              for (let xt = 0; xt < ke.length; xt++) {
                const Ge = ke[xt], lt = Ne[xt], Je = this.style.getLayerSourceCache(Ge);
                if (!Je || !Je.used || !Je.getSource().usedInConflation && Ge.type !== "clip")
                  continue;
                let _t = i.dx, ct = i.by.None;
                const nt = [];
                let Lt = !0;
                if (Ge.type === "clip") {
                  _t = lt;
                  for (const bt of Ge.layout.get("clip-layer-types"))
                    ct |= bt === "model" ? i.by.Model : bt === "symbol" ? i.by.Symbol : i.by.FillExtrusion;
                  for (const bt of Ge.layout.get("clip-layer-scope"))
                    nt.push(bt);
                  Ge.isHidden(this.transform.zoom) ? Lt = !1 : Z = !0;
                }
                Lt && ut.push({ layer: Ge.fqid, cache: Je, order: _t, clipMask: ct, clipScope: nt });
              }
              this.replacementSource.setSources(ut), G = !0;
            }
          }
          this._clippingActiveLastFrame = Z, G || this.replacementSource.clear(), this.conflationActive = G, this.minCutoffZoom = 0, this.longestCutoffRange = 0, this.opaquePassCutoff = 1 / 0, this._lastOcclusionLayer = -1, this.layersWithOcclusionOpacity = [];
          for (let ke = 0; ke < R.length; ke++) {
            const Ne = R[ke], st = Ne.cutoffRange();
            if (this.longestCutoffRange = Math.max(st, this.longestCutoffRange), st > 0) {
              const ut = he(Ne);
              ut && (this.minCutoffZoom = Math.max(ut.minzoom, this.minCutoffZoom)), Ne.minzoom && (this.minCutoffZoom = Math.max(Ne.minzoom, this.minCutoffZoom));
            }
            Ne.is3D() && (this.opaquePassCutoff === 1 / 0 && (this.opaquePassCutoff = ke), this._lastOcclusionLayer = ke);
          }
          const _e = this.style && this.style.fog;
          _e ? (this._fogVisible = _e.getOpacity(this.transform.pitch) !== 0, this._fogVisible && this.transform.projection.name !== "globe" && (this._fogVisible = _e.isVisibleOnFrustum(this.transform.cameraFrustum))) : this._fogVisible = !1, this._cachedTileFogOpacities = {}, this.terrain && (this.terrain.updateTileBinding(ee), this.opaquePassCutoff = 0);
          const pe = this._shadowRenderer;
          if (pe) {
            pe.updateShadowParameters(this.transform, this.style.directionalLight);
            for (const ke in F)
              for (const Ne of W[ke]) {
                let st = { min: 0, max: 0 };
                this.terrain && (st = this.terrain.getMinMaxForTile(Ne) || st), pe.addShadowReceiver(Ne.toUnwrapped(), st.min, st.max);
              }
          }
          this.transform.projection.name !== "globe" || this.globeSharedBuffers || (this.globeSharedBuffers = new i.dw(this.context)), this.style.fog && this.transform.projection.supportsFog ? (this._atmosphere || (this._atmosphere = new bn(this)), this._atmosphere.update(this)) : this._atmosphere && (this._atmosphere.destroy(), this._atmosphere = void 0);
          const Me = this._debugParams.forceEnablePrecipitation || !(!this.style || !this.style.snow), xe = this._debugParams.forceEnablePrecipitation || !(!this.style || !this.style.rain);
          if (Me && !this._snow && (this._snow = new Pl(this)), !Me && this._snow && (this._snow.destroy(), delete this._snow), xe && !this._rain && (this._rain = new Cd(this)), !xe && this._rain && (this._rain.destroy(), delete this._rain), this._snow && this._snow.update(this), this._rain && this._rain.update(this), !Vs.has(this.context.gl))
            return;
          this.renderPass = "offscreen";
          for (const ke of R) {
            const Ne = t.getLayerSourceCache(ke);
            if (!ke.hasOffscreenPass() || ke.isHidden(this.transform.zoom))
              continue;
            const st = Ne ? te[Ne.id] : void 0;
            (ke.type === "custom" || ke.type === "raster" || ke.type === "raster-particle" || ke.isSky() || st && st.length) && this.renderLayer(this, Ne, ke, st);
          }
          this.depthRangeFor3D = [0, 1 - (R.length + 2) * this.numSublayers * this.depthEpsilon], this._shadowRenderer && (this.renderPass = "shadow", this._shadowRenderer.drawShadowPass(this.style, se)), this.context.bindFramebuffer.set(null), this.context.viewport.set([0, 0, this.width, this.height]);
          const we = this.transform.projection.name === "globe" || this.transform.isHorizonVisible(), ve = (() => {
            if (s.showOverdrawInspector)
              return i.aj.black;
            const ke = this.style.fog;
            if (ke && this.transform.projection.supportsFog) {
              const Ne = this.style.getLut(ke.scope);
              if (!we) {
                const st = ke.properties.get("color-use-theme") === "none", ut = ke.properties.get("color").toRenderColor(st ? null : Ne).toArray01();
                return new i.aj(...ut);
              }
              if (we) {
                const st = ke.properties.get("space-color-use-theme") === "none", ut = ke.properties.get("space-color").toRenderColor(st ? null : Ne).toArray01();
                return new i.aj(...ut);
              }
            }
            return i.aj.transparent;
          })();
          if (this.context.clear({ color: ve, depth: 1 }), this.clearStencil(), this._showOverdrawInspector = s.showOverdrawInspector, this.renderPass = "opaque", this.style.fog && this.transform.projection.supportsFog && this._atmosphere && !this._showOverdrawInspector && we && this._atmosphere.drawStars(this, this.style.fog), !this.terrain)
            for (this.currentLayer = y.length - 1; this.currentLayer >= 0; this.currentLayer--) {
              const ke = R[this.currentLayer], Ne = t.getLayerSourceCache(ke);
              if (ke.isSky())
                continue;
              const st = Ne ? (ke.is3D() ? oe : te)[Ne.id] : void 0;
              this._renderTileClippingMasks(ke, Ne, st), this.renderLayer(this, Ne, ke, st);
            }
          if (this.style.fog && this.transform.projection.supportsFog && this._atmosphere && !this._showOverdrawInspector && we && this._atmosphere.drawAtmosphereGlow(this, this.style.fog), this.renderPass = "sky", (!this._atmosphere || i.ae(this.transform.zoom) > 0) && (this.transform.projection.name === "globe" || this.transform.isHorizonVisible()))
            for (this.currentLayer = 0; this.currentLayer < y.length; this.currentLayer++) {
              const ke = R[this.currentLayer], Ne = t.getLayerSourceCache(ke);
              ke.isSky() && this.renderLayer(this, Ne, ke, Ne ? te[Ne.id] : void 0);
            }
          function Ae(ke, Ne) {
            let st;
            return Ne && (st = (ke.type === "symbol" ? ee : ke.is3D() ? oe : te)[Ne.id]), st;
          }
          if (this.renderPass = "translucent", this.transform.projection.name === "globe") {
            for (this.renderElevatedRasterBackface = !0, this.currentLayer = 0; this.currentLayer < y.length; ) {
              const ke = R[this.currentLayer];
              if (ke.type === "raster" || ke.type === "raster-particle") {
                const Ne = t.getLayerSourceCache(ke);
                this.renderLayer(this, Ne, ke, Ae(ke, Ne));
              }
              ++this.currentLayer;
            }
            this.renderElevatedRasterBackface = !1;
          }
          this.currentLayer = 0, this.firstLightBeamLayer = Number.MAX_SAFE_INTEGER;
          let Oe = 0;
          pe && (Oe = pe.getShadowCastingLayerCount());
          let Xe = !1, He = -1;
          for (let ke = 0; ke < y.length; ++ke) {
            const Ne = R[ke];
            Ne.isHidden(this.transform.zoom) || Ne.is3D() && (He = ke);
          }
          for (z && He === -1 && (T = !0); this.currentLayer < y.length; ) {
            const ke = R[this.currentLayer], Ne = t.getLayerSourceCache(ke);
            if (ke.isSky())
              ++this.currentLayer;
            else if (this.terrain && this.style.isLayerDraped(ke)) {
              if (ke.isHidden(this.transform.zoom)) {
                ++this.currentLayer;
                continue;
              }
              this.currentLayer = this.terrain.renderBatch(this.currentLayer), this._lastOcclusionLayer = Math.max(this.currentLayer, this._lastOcclusionLayer);
            } else {
              if (T && !Xe && this.terrain && !this.transform.isOrthographic && (Xe = !0, this.blitDepth()), z && He !== -1 && this.currentLayer === He + 1 && !this.transform.isOrthographic && this.blitDepth(), ke.is3D() || this.terrain || this._renderTileClippingMasks(ke, Ne, Ne ? W[Ne.id] : void 0), this.renderLayer(this, Ne, ke, Ae(ke, Ne)), !this.terrain && pe && Oe > 0 && ke.hasShadowPass() && --Oe == 0 && (pe.drawGroundShadows(), this.firstLightBeamLayer <= this.currentLayer)) {
                const st = this.currentLayer;
                for (this.renderPass = "light-beam", this.currentLayer = this.firstLightBeamLayer; this.currentLayer <= st; this.currentLayer++) {
                  const ut = R[this.currentLayer];
                  if (!ut.hasLightBeamPass())
                    continue;
                  const xt = t.getLayerSourceCache(ut);
                  this.renderLayer(this, xt, ut, xt ? te[xt.id] : void 0);
                }
                this.currentLayer = st, this.renderPass = "translucent";
              }
              if (this.currentLayer >= this._lastOcclusionLayer && this.layersWithOcclusionOpacity.length > 0) {
                const st = this.currentLayer;
                this.depthOcclusion = !0;
                for (const ut of this.layersWithOcclusionOpacity) {
                  this.currentLayer = ut;
                  const xt = R[this.currentLayer], Ge = t.getLayerSourceCache(xt), lt = Ge ? te[Ge.id] : void 0;
                  xt.is3D() || this.terrain || this._renderTileClippingMasks(xt, Ge, Ge ? W[Ge.id] : void 0), this.renderLayer(this, Ge, xt, lt);
                }
                this.depthOcclusion = !1, this.currentLayer = st, this.renderPass = "translucent", this.layersWithOcclusionOpacity = [];
              }
              ++this.currentLayer;
            }
          }
          if (this.terrain && this.terrain.postRender(), this._snow && this._snow.draw(this), this._rain && this._rain.draw(this), this.options.showTileBoundaries || this.options.showQueryGeometry || this.options.showTileAABBs) {
            let ke = null;
            R.forEach((Ne) => {
              const st = t.getLayerSourceCache(Ne);
              st && !Ne.isHidden(this.transform.zoom) && st.getVisibleCoordinates().length && (!ke || ke.getSource().maxzoom < st.getSource().maxzoom) && (ke = st);
            }), ke && this.options.showTileBoundaries && ah.debug(this, ke, ke.getVisibleCoordinates(), i.aj.red, !1, this.options.showParseStatus);
          }
          this.terrain && this._debugParams.showTerrainProxyTiles && ah.debug(this, this.terrain.proxySourceCache, this.terrain.proxyCoords, new i.aj(1, 0.8, 0.1, 1), !0, this.options.showParseStatus), this.options.showPadding && function(ke) {
            const Ne = ke.transform.padding;
            nh(ke, ke.transform.height - (Ne.top || 0), 3, sp), nh(ke, Ne.bottom || 0, 3, rp), hu(ke, Ne.left || 0, 3, hc), hu(ke, ke.transform.width - (Ne.right || 0), 3, t_);
            const st = ke.transform.centerPoint;
            (function(ut, xt, Ge, lt) {
              sh(ut, xt - 1, Ge - 10, 2, 20, lt), sh(ut, xt - 10, Ge - 1, 20, 2, lt);
            })(ke, st.x, ke.transform.height - st.y, i_);
          }(this), this.context.setDefault(), this.frameCounter = (this.frameCounter + 1) % Number.MAX_SAFE_INTEGER, this.tileLoaded && this.options.speedIndexTiming && (this.loadTimeStamps.push(performance.now()), this.saveCanvasCopy()), G || (this.conflationActive = !1);
        }
        prepareLayer(t) {
          this.gpuTimingStart(t);
          const { unsupportedLayers: s } = this.transform.projection, h = !s || !s.includes(t.type);
          if (xu[t.type] && (h || this.terrain && t.type === "custom")) {
            const _ = this.style.getLayerSourceCache(t);
            xu[t.type](t, _, this);
          }
          this.gpuTimingEnd();
        }
        renderLayer(t, s, h, _) {
          h.isHidden(this.transform.zoom) || (h.type === "background" || h.type === "sky" || h.type === "custom" || h.type === "model" || h.type === "raster" || h.type === "raster-particle" || _ && _.length) && (this.id = h.id, this.gpuTimingStart(h), t.transform.projection.unsupportedLayers && t.transform.projection.unsupportedLayers.includes(h.type) && (!t.terrain || h.type !== "custom") || h.type === "clip" || ah[h.type](t, s, h, _, this.style.placement.variableOffsets, this.options.isInitialLoad), this.gpuTimingEnd());
        }
        gpuTimingStart(t) {
          if (!this.options.gpuTiming)
            return;
          const s = this.context.extTimerQuery, h = this.context.gl;
          let _ = this.gpuTimers[t.id];
          _ || (_ = this.gpuTimers[t.id] = { calls: 0, cpuTime: 0, query: h.createQuery() }), _.calls++, h.beginQuery(s.TIME_ELAPSED_EXT, _.query);
        }
        gpuTimingDeferredRenderStart() {
          if (this.options.gpuTimingDeferredRender) {
            const t = this.context.extTimerQuery, s = this.context.gl, h = s.createQuery();
            this.deferredRenderGpuTimeQueries.push(h), s.beginQuery(t.TIME_ELAPSED_EXT, h);
          }
        }
        gpuTimingDeferredRenderEnd() {
          this.options.gpuTimingDeferredRender && this.context.gl.endQuery(this.context.extTimerQuery.TIME_ELAPSED_EXT);
        }
        gpuTimingEnd() {
          this.options.gpuTiming && this.context.gl.endQuery(this.context.extTimerQuery.TIME_ELAPSED_EXT);
        }
        collectGpuTimers() {
          const t = this.gpuTimers;
          return this.gpuTimers = {}, t;
        }
        collectDeferredRenderGpuQueries() {
          const t = this.deferredRenderGpuTimeQueries;
          return this.deferredRenderGpuTimeQueries = [], t;
        }
        queryGpuTimers(t) {
          const s = {};
          for (const h in t) {
            const _ = t[h], y = this.context.extTimerQuery, T = y.getQueryParameter(_.query, this.context.gl.QUERY_RESULT) / 1e6;
            y.deleteQueryEXT(_.query), s[h] = T;
          }
          return s;
        }
        queryGpuTimeDeferredRender(t) {
          if (!this.options.gpuTimingDeferredRender)
            return 0;
          const s = this.context.gl;
          let h = 0;
          for (const _ of t)
            h += s.getQueryParameter(_, s.QUERY_RESULT) / 1e6, s.deleteQuery(_);
          return h;
        }
        translatePosMatrix(t, s, h, _, y) {
          if (!h[0] && !h[1])
            return t;
          const T = y ? _ === "map" ? this.transform.angle : 0 : _ === "viewport" ? -this.transform.angle : 0;
          if (T) {
            const F = Math.sin(T), N = Math.cos(T);
            h = [h[0] * N - h[1] * F, h[0] * F + h[1] * N];
          }
          const z = [y ? h[0] : i.ar(s, h[0], this.transform.zoom), y ? h[1] : i.ar(s, h[1], this.transform.zoom), 0], R = new Float32Array(16);
          return i.ab.mat4.translate(R, t, z), R;
        }
        saveTileTexture(t) {
          const s = t.size[0], h = this._tileTextures[s];
          h ? h.push(t) : this._tileTextures[s] = [t];
        }
        getTileTexture(t) {
          const s = this._tileTextures[t];
          return s && s.length > 0 ? s.pop() : null;
        }
        terrainRenderModeElevated() {
          return this.style && !!this.style.getTerrain() && !!this.terrain && !this.terrain.renderingToTexture || this.forceTerrainMode;
        }
        linearFloatFilteringSupported() {
          return this.context.extTextureFloatLinear != null;
        }
        currentGlobalDefines(t, s, h) {
          const _ = h === void 0 ? this.terrain && this.terrain.renderingToTexture : h, y = [];
          return this.style && this.style.enable3dLights() && (t === "globeRaster" || t === "terrainRaster" ? (y.push("LIGHTING_3D_MODE"), y.push("LIGHTING_3D_ALPHA_EMISSIVENESS")) : _ || y.push("LIGHTING_3D_MODE")), this.renderPass === "shadow" && (this._shadowMapDebug || y.push("DEPTH_TEXTURE")), this.terrainRenderModeElevated() && (y.push("TERRAIN"), this.linearFloatFilteringSupported() && y.push("TERRAIN_DEM_FLOAT_FORMAT")), this.transform.projection.name === "globe" && y.push("GLOBE"), !this._fogVisible || _ || s !== void 0 && !s || y.push("FOG", "FOG_DITHERING"), _ && y.push("RENDER_TO_TEXTURE"), this._showOverdrawInspector && y.push("OVERDRAW_INSPECTOR"), y;
        }
        getOrCreateProgram(t, s) {
          this.cache = this.cache || {};
          const h = s && s.defines || [], _ = s && s.config, y = this.currentGlobalDefines(t, s && s.overrideFog, s && s.overrideRtt).concat(h), T = Xf.cacheKey(vl[t], t, y, _);
          return this.cache[T] || (this.cache[T] = new Xf(this.context, t, vl[t], _, yd[t], y)), this.cache[T];
        }
        setCustomLayerDefaults() {
          this.context.unbindVAO(), this.context.cullFace.setDefault(), this.context.frontFace.setDefault(), this.context.cullFaceSide.setDefault(), this.context.activeTexture.setDefault(), this.context.pixelStoreUnpack.setDefault(), this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(), this.context.pixelStoreUnpackFlipY.setDefault();
        }
        setBaseState() {
          const t = this.context.gl;
          this.context.cullFace.set(!1), this.context.viewport.set([0, 0, this.width, this.height]), this.context.blendEquation.set(t.FUNC_ADD);
        }
        initDebugOverlayCanvas() {
          this.debugOverlayCanvas == null && (this.debugOverlayCanvas = document.createElement("canvas"), this.debugOverlayCanvas.width = 512, this.debugOverlayCanvas.height = 512, this.debugOverlayTexture = new i.T(this.context, this.debugOverlayCanvas, this.context.gl.RGBA8));
        }
        destroy() {
          this._terrain && this._terrain.destroy(), this._atmosphere && (this._atmosphere.destroy(), this._atmosphere = void 0), this.globeSharedBuffers && this.globeSharedBuffers.destroy(), this.emptyTexture.destroy(), this.debugOverlayTexture && this.debugOverlayTexture.destroy(), this._wireframeDebugCache.destroy(), this.depthFBO && (this.depthFBO.destroy(), this.depthFBO = void 0, this.depthTexture = void 0), this.emptyDepthTexture && this.emptyDepthTexture.destroy();
        }
        prepareDrawTile() {
          this.terrain && this.terrain.prepareDrawTile();
        }
        uploadCommonLightUniforms(t, s) {
          if (this.style.enable3dLights()) {
            const h = this.style.directionalLight, _ = this.style.ambientLight;
            if (h && _) {
              const y = ((T, z, R) => {
                const F = T.properties.get("direction"), N = T.properties.get("color-use-theme") === "none", G = T.properties.get("color").toRenderColor(N ? null : R.getLut(T.scope)).toArray01(), Z = T.properties.get("intensity"), W = z.properties.get("color-use-theme") === "none", te = z.properties.get("color").toRenderColor(W ? null : R.getLut(z.scope)).toArray01(), ee = z.properties.get("intensity"), se = [F.x, F.y, F.z], oe = i.cM(te, ee), he = i.cM(G, Z);
                return { u_lighting_ambient_color: oe, u_lighting_directional_dir: se, u_lighting_directional_color: he, u_ground_radiance: $f(se, he, oe) };
              })(h, _, this.style);
              s.setLightsUniformValues(t, y);
            }
          }
        }
        uploadCommonUniforms(t, s, h, _, y) {
          if (this.uploadCommonLightUniforms(t, s), this.terrain && this.terrain.renderingToTexture)
            return;
          const T = this.style.fog;
          if (T) {
            const z = T.getOpacity(this.transform.pitch), R = ((F, N, G, Z, W, te, ee, se, oe, he, _e, pe) => {
              const Me = F.transform, xe = N.properties.get("color-use-theme") === "none", we = N.properties.get("color").toRenderColor(xe ? null : F.style.getLut(N.scope)).toArray01();
              we[3] = Z;
              const ve = F.frameCounter / 1e3 % 1, [Ae, Oe] = N.properties.get("vertical-range");
              return { u_fog_matrix: G ? Me.calculateFogTileMatrix(G) : pe || F.identityMat, u_fog_range: N.getFovAdjustedRange(Me._fov), u_fog_color: we, u_fog_horizon_blend: N.properties.get("horizon-blend"), u_fog_vertical_limit: [Math.min(Ae, Oe), Oe], u_fog_temporal_offset: ve, u_frustum_tl: W, u_frustum_tr: te, u_frustum_br: ee, u_frustum_bl: se, u_globe_pos: oe, u_globe_radius: he, u_viewport: _e, u_globe_transition: i.ae(Me.zoom), u_is_globe: +(Me.projection.name === "globe") };
            })(this, T, h, z, this.transform.frustumCorners.TL, this.transform.frustumCorners.TR, this.transform.frustumCorners.BR, this.transform.frustumCorners.BL, this.transform.globeCenterInViewSpace, this.transform.globeRadius, [this.transform.width * i.q.devicePixelRatio, this.transform.height * i.q.devicePixelRatio], _);
            s.setFogUniformValues(t, R);
          }
          y && s.setCutoffUniformValues(t, y.uniformValues);
        }
        setTileLoadedFlag(t) {
          this.tileLoaded = t;
        }
        saveCanvasCopy() {
          const t = this.canvasCopy();
          t && (this.frameCopies.push(t), this.tileLoaded = !1);
        }
        canvasCopy() {
          const t = this.context.gl, s = t.createTexture();
          return t.bindTexture(t.TEXTURE_2D, s), t.copyTexImage2D(t.TEXTURE_2D, 0, t.RGBA, 0, 0, t.drawingBufferWidth, t.drawingBufferHeight, 0), s;
        }
        getCanvasCopiesAndTimestamps() {
          return { canvasCopies: this.frameCopies, timeStamps: this.loadTimeStamps };
        }
        averageElevationNeedsEasing() {
          if (!this.transform._elevation)
            return !1;
          const t = this.style && this.style.fog;
          return !!t && t.getOpacity(this.transform.pitch) !== 0;
        }
        getBackgroundTiles() {
          const t = this._backgroundTiles, s = this._backgroundTiles = {}, h = this.transform.coveringTiles({ tileSize: 512 });
          for (const _ of h)
            s[_.key] = t[_.key] || new Cr(_, 512, this.transform.tileZoom, this);
          return s;
        }
        clearBackgroundTiles() {
          this._backgroundTiles = {};
        }
        isSourceForClippingOrConflation(t, s) {
          return !(!t.is3D() || t.type !== "clip" && (t.minzoom && t.minzoom > this.transform.zoom || (this.style._clipLayerPresent || t.sourceLayer !== "building") && (!s || s.type !== "batched-model")));
        }
        isTileAffectedByFog(t) {
          if (!this.style || !this.style.fog)
            return !1;
          if (this.transform.projection.name === "globe")
            return !0;
          let s = this._cachedTileFogOpacities[t.key];
          return s || (this._cachedTileFogOpacities[t.key] = s = this.style.fog.getOpacityForTile(t)), s[0] >= It || s[1] >= It;
        }
        setupDepthForOcclusion(t, s, h) {
          const _ = this.context, y = _.gl, T = !!h;
          var z;
          h || (h = { u_dem: 2, u_dem_prev: 4, u_dem_tl: [0, 0], u_dem_tl_prev: [0, 0], u_dem_scale: 0, u_dem_scale_prev: 0, u_dem_size: 0, u_dem_lerp: 1, u_depth: 3, u_depth_size_inv: [0, 0], u_depth_range_unpack: [0, 1], u_occluder_half_size: 16, u_occlusion_depth_offset: -1e-4, u_exaggeration: 0 }), _.activeTexture.set(y.TEXTURE3), t && this.depthFBO && this.depthTexture ? (this.depthTexture.bind(y.NEAREST, y.CLAMP_TO_EDGE), h.u_depth_size_inv = [1 / this.depthFBO.width, 1 / this.depthFBO.height], h.u_depth_range_unpack = [2 / ((z = this.depthRangeFor3D)[1] - z[0]), -1 - 2 * z[0] / (z[1] - z[0])], h.u_occluder_half_size = 0.5 * this.occlusionParams.occluderSize, h.u_occlusion_depth_offset = this.occlusionParams.depthOffset) : this.emptyDepthTexture.bind(y.NEAREST, y.CLAMP_TO_EDGE), _.activeTexture.set(y.TEXTURE0), T || s.setTerrainUniformValues(_, h);
        }
      }
      function lh(c, t) {
        let s = !1, h = null;
        const _ = () => {
          h = null, s && (c(), h = setTimeout(_, t), s = !1);
        };
        return () => (s = !0, h || _(), h);
      }
      class zd {
        constructor(t) {
          this._hashName = t && encodeURIComponent(t), i.aP(["_getCurrentHash", "_onHashChange", "_updateHash"], this), this._updateHash = lh(this._updateHashUnthrottled.bind(this), 300);
        }
        addTo(t) {
          return this._map = t, window.addEventListener("hashchange", this._onHashChange, !1), t.on("moveend", this._updateHash), this;
        }
        remove() {
          return this._map ? (this._map.off("moveend", this._updateHash), window.removeEventListener("hashchange", this._onHashChange, !1), clearTimeout(this._updateHash()), this._map = void 0, this) : this;
        }
        getHashString() {
          const t = this._map;
          if (!t)
            return "";
          const s = vu(t);
          if (this._hashName) {
            const h = this._hashName;
            let _ = !1;
            const y = location.hash.slice(1).split("&").map((T) => {
              const z = T.split("=")[0];
              return z === h ? (_ = !0, `${z}=${s}`) : T;
            }).filter((T) => T);
            return _ || y.push(`${h}=${s}`), `#${y.join("&")}`;
          }
          return `#${s}`;
        }
        _getCurrentHash() {
          const t = location.hash.replace("#", "");
          if (this._hashName) {
            let s;
            return t.split("&").map((h) => h.split("=")).forEach((h) => {
              h[0] === this._hashName && (s = h);
            }), (s && s[1] || "").split("/");
          }
          return t.split("/");
        }
        _onHashChange() {
          const t = this._map;
          if (!t)
            return !1;
          const s = this._getCurrentHash();
          if (s.length >= 3 && !s.some((h) => isNaN(h))) {
            const h = t.dragRotate.isEnabled() && t.touchZoomRotate.isEnabled() ? +(s[3] || 0) : t.getBearing();
            return t.jumpTo({ center: [+s[2], +s[1]], zoom: +s[0], bearing: h, pitch: +(s[4] || 0) }), !0;
          }
          return !1;
        }
        _updateHashUnthrottled() {
          history.replaceState(history.state, "", location.href.replace(/(#.+)?$/, this.getHashString()));
        }
      }
      function vu(c, t) {
        const s = c.getCenter(), h = Math.round(100 * c.getZoom()) / 100, _ = Math.ceil((h * Math.LN2 + Math.log(512 / 360 / 0.5)) / Math.LN10), y = Math.pow(10, _), T = Math.round(s.lng * y) / y, z = Math.round(s.lat * y) / y, R = c.getBearing(), F = c.getPitch();
        let N = t ? `/${T}/${z}/${h}` : `${h}/${z}/${T}`;
        return (R || F) && (N += "/" + Math.round(10 * R) / 10), F && (N += `/${Math.round(F)}`), N;
      }
      const ch = { linearity: 0.3, easing: i.dy(0, 0, 0.3, 1) }, ap = i.l({ deceleration: 2500, maxSpeed: 1400 }, ch), lp = i.l({ deceleration: 20, maxSpeed: 1400 }, ch), cp = i.l({ deceleration: 1e3, maxSpeed: 360 }, ch), hp = i.l({ deceleration: 1e3, maxSpeed: 90 }, ch);
      class up {
        constructor(t) {
          this._map = t, this.clear();
        }
        clear() {
          this._inertiaBuffer = [];
        }
        record(t) {
          this._drainInertiaBuffer(), this._inertiaBuffer.push({ time: i.q.now(), settings: t });
        }
        _drainInertiaBuffer() {
          const t = this._inertiaBuffer, s = i.q.now();
          for (; t.length > 0 && s - t[0].time > 160; )
            t.shift();
        }
        _onMoveEnd(t) {
          if (this._map._prefersReducedMotion() || (this._drainInertiaBuffer(), this._inertiaBuffer.length < 2))
            return;
          const s = { zoom: 0, bearing: 0, pitch: 0, pan: new i.P(0, 0), pinchAround: void 0, around: void 0 };
          for (const { settings: y } of this._inertiaBuffer)
            s.zoom += y.zoomDelta || 0, s.bearing += y.bearingDelta || 0, s.pitch += y.pitchDelta || 0, y.panDelta && s.pan._add(y.panDelta), y.around && (s.around = y.around), y.pinchAround && (s.pinchAround = y.pinchAround);
          const h = this._inertiaBuffer[this._inertiaBuffer.length - 1].time - this._inertiaBuffer[0].time, _ = {};
          if (s.pan.mag()) {
            const y = uh(s.pan.mag(), h, i.l({}, ap, t || {}));
            _.offset = s.pan.mult(y.amount / s.pan.mag()), _.center = this._map.transform.center, hh(_, y);
          }
          if (s.zoom) {
            const y = uh(s.zoom, h, lp);
            _.zoom = this._map.transform.zoom + y.amount, hh(_, y);
          }
          if (s.bearing) {
            const y = uh(s.bearing, h, cp);
            _.bearing = this._map.transform.bearing + i.aw(y.amount, -179, 179), hh(_, y);
          }
          if (s.pitch) {
            const y = uh(s.pitch, h, hp);
            _.pitch = this._map.transform.pitch + y.amount, hh(_, y);
          }
          if (_.zoom || _.bearing) {
            const y = s.pinchAround === void 0 ? s.around : s.pinchAround;
            _.around = y ? this._map.unproject(y) : this._map.getCenter();
          }
          return this.clear(), _.noMoveStart = !0, _;
        }
      }
      function hh(c, t) {
        (!c.duration || c.duration < t.duration) && (c.duration = t.duration, c.easing = t.easing);
      }
      function uh(c, t, s) {
        const { maxSpeed: h, linearity: _, deceleration: y } = s, T = i.aw(c * _ / (t / 1e3), -h, h), z = Math.abs(T) / (y * _);
        return { easing: s.easing, duration: 1e3 * z, amount: T * (z / 2) };
      }
      class Or extends i.z {
        preventDefault() {
          this._defaultPrevented = !0;
        }
        get defaultPrevented() {
          return this._defaultPrevented;
        }
        constructor(t, s, h, _ = {}) {
          const y = Gt(s.getCanvasContainer(), h), T = s.unproject(y);
          super(t, i.l({ point: y, lngLat: T, originalEvent: h }, _)), this._defaultPrevented = !1, this.target = s;
        }
      }
      class dh extends i.z {
        preventDefault() {
          this._defaultPrevented = !0;
        }
        get defaultPrevented() {
          return this._defaultPrevented;
        }
        constructor(t, s, h) {
          const _ = t === "touchend" ? h.changedTouches : h.touches, y = ui(s.getCanvasContainer(), _), T = y.map((R) => s.unproject(R)), z = y.reduce((R, F, N, G) => R.add(F.div(G.length)), new i.P(0, 0));
          super(t, { points: y, point: z, lngLats: T, lngLat: s.unproject(z), originalEvent: h }), this._defaultPrevented = !1;
        }
      }
      class dp extends i.z {
        preventDefault() {
          this._defaultPrevented = !0;
        }
        get defaultPrevented() {
          return this._defaultPrevented;
        }
        constructor(t, s) {
          super("wheel", { originalEvent: s }), this._defaultPrevented = !1;
        }
      }
      class fp {
        constructor(t, s) {
          this._map = t, this._clickTolerance = s.clickTolerance;
        }
        reset() {
          this._mousedownPos = void 0;
        }
        wheel(t) {
          return this._firePreventable(new dp(this._map, t));
        }
        mousedown(t, s) {
          return this._mousedownPos = s, this._firePreventable(new Or(t.type, this._map, t));
        }
        mouseup(t) {
          this._map.fire(new Or(t.type, this._map, t));
        }
        preclick(t) {
          const s = i.l({}, t);
          s.type = "preclick", this._map.fire(new Or(s.type, this._map, s));
        }
        click(t, s) {
          this._mousedownPos && this._mousedownPos.dist(s) >= this._clickTolerance || (this.preclick(t), this._map.fire(new Or(t.type, this._map, t)));
        }
        dblclick(t) {
          return this._firePreventable(new Or(t.type, this._map, t));
        }
        mouseover(t) {
          this._map.fire(new Or(t.type, this._map, t));
        }
        mouseout(t) {
          this._map.fire(new Or(t.type, this._map, t));
        }
        touchstart(t) {
          return this._firePreventable(new dh(t.type, this._map, t));
        }
        touchmove(t) {
          this._map.fire(new dh(t.type, this._map, t));
        }
        touchend(t) {
          this._map.fire(new dh(t.type, this._map, t));
        }
        touchcancel(t) {
          this._map.fire(new dh(t.type, this._map, t));
        }
        _firePreventable(t) {
          if (this._map.fire(t), t.defaultPrevented)
            return {};
        }
        isEnabled() {
          return !0;
        }
        isActive() {
          return !1;
        }
        enable() {
        }
        disable() {
        }
      }
      class pp {
        constructor(t) {
          this._map = t;
        }
        reset() {
          this._delayContextMenu = !1, this._contextMenuEvent = void 0;
        }
        mousemove(t) {
          this._map.fire(new Or(t.type, this._map, t));
        }
        mousedown() {
          this._delayContextMenu = !0;
        }
        mouseup() {
          this._delayContextMenu = !1, this._contextMenuEvent && (this._map.fire(new Or("contextmenu", this._map, this._contextMenuEvent)), delete this._contextMenuEvent);
        }
        contextmenu(t) {
          this._delayContextMenu ? this._contextMenuEvent = t : this._map.fire(new Or(t.type, this._map, t)), this._map.listens("contextmenu") && t.preventDefault();
        }
        isEnabled() {
          return !0;
        }
        isActive() {
          return !1;
        }
        enable() {
        }
        disable() {
        }
      }
      class r_ {
        constructor(t, s) {
          this._map = t, this._el = t.getCanvasContainer(), this._container = t.getContainer(), this._clickTolerance = s.clickTolerance || 1;
        }
        isEnabled() {
          return !!this._enabled;
        }
        isActive() {
          return !!this._active;
        }
        enable() {
          this.isEnabled() || (this._enabled = !0);
        }
        disable() {
          this.isEnabled() && (this._enabled = !1);
        }
        mousedown(t, s) {
          this.isEnabled() && t.shiftKey && t.button === 0 && (ht(), this._startPos = this._lastPos = s, this._active = !0);
        }
        mousemoveWindow(t, s) {
          if (!this._active)
            return;
          const h = s, _ = this._startPos, y = this._lastPos;
          if (!_ || !y || y.equals(h) || !this._box && h.dist(_) < this._clickTolerance)
            return;
          this._lastPos = h, this._box || (this._box = be("div", "mapboxgl-boxzoom", this._container), this._container.classList.add("mapboxgl-crosshair"), this._fireEvent("boxzoomstart", t));
          const T = Math.min(_.x, h.x), z = Math.max(_.x, h.x), R = Math.min(_.y, h.y), F = Math.max(_.y, h.y);
          this._map._requestDomTask(() => {
            this._box && (this._box.style.transform = `translate(${T}px,${R}px)`, this._box.style.width = z - T + "px", this._box.style.height = F - R + "px");
          });
        }
        mouseupWindow(t, s) {
          if (!this._active)
            return;
          const h = this._startPos, _ = s;
          if (h && t.button === 0) {
            if (this.reset(), pt(), h.x !== _.x || h.y !== _.y)
              return this._map.fire(new i.z("boxzoomend", { originalEvent: t })), { cameraAnimation: (y) => y.fitScreenCoordinates(h, _, this._map.getBearing(), { linear: !1 }) };
            this._fireEvent("boxzoomcancel", t);
          }
        }
        keydown(t) {
          this._active && t.keyCode === 27 && (this.reset(), this._fireEvent("boxzoomcancel", t));
        }
        blur() {
          this.reset();
        }
        reset() {
          this._active = !1, this._container.classList.remove("mapboxgl-crosshair"), this._box && (this._box.remove(), this._box = null), gt(), delete this._startPos, delete this._lastPos;
        }
        _fireEvent(t, s) {
          return this._map.fire(new i.z(t, { originalEvent: s }));
        }
      }
      function Dd(c, t) {
        const s = {};
        for (let h = 0; h < c.length; h++)
          s[c[h].identifier] = t[h];
        return s;
      }
      class Wn {
        constructor(t) {
          this.reset(), this.numTouches = t.numTouches;
        }
        reset() {
          this.centroid = void 0, this.startTime = 0, this.touches = {}, this.aborted = !1;
        }
        touchstart(t, s, h) {
          (this.centroid || h.length > this.numTouches) && (this.aborted = !0), this.aborted || (this.startTime === 0 && (this.startTime = t.timeStamp), h.length === this.numTouches && (this.centroid = function(_) {
            const y = new i.P(0, 0);
            for (const T of _)
              y._add(T);
            return y.div(_.length);
          }(s), this.touches = Dd(h, s)));
        }
        touchmove(t, s, h) {
          if (this.aborted || !this.centroid)
            return;
          const _ = Dd(h, s);
          for (const y in this.touches) {
            const T = _[y];
            (!T || T.dist(this.touches[y]) > 30) && (this.aborted = !0);
          }
        }
        touchend(t, s, h) {
          if ((!this.centroid || t.timeStamp - this.startTime > 500) && (this.aborted = !0), h.length === 0) {
            const _ = !this.aborted && this.centroid;
            if (this.reset(), _)
              return _;
          }
        }
      }
      class bu {
        constructor(t) {
          this.singleTap = new Wn(t), this.numTaps = t.numTaps, this.reset();
        }
        reset() {
          this.lastTime = 1 / 0, this.lastTap = void 0, this.count = 0, this.singleTap.reset();
        }
        touchstart(t, s, h) {
          this.singleTap.touchstart(t, s, h);
        }
        touchmove(t, s, h) {
          this.singleTap.touchmove(t, s, h);
        }
        touchend(t, s, h) {
          const _ = this.singleTap.touchend(t, s, h);
          if (_) {
            const y = t.timeStamp - this.lastTime < 500, T = !this.lastTap || this.lastTap.dist(_) < 30;
            if (y && T || this.reset(), this.count++, this.lastTime = t.timeStamp, this.lastTap = _, this.count === this.numTaps)
              return this.reset(), _;
          }
        }
      }
      class o_ {
        constructor() {
          this._zoomIn = new bu({ numTouches: 1, numTaps: 2 }), this._zoomOut = new bu({ numTouches: 2, numTaps: 1 }), this.reset();
        }
        reset() {
          this._active = !1, this._zoomIn.reset(), this._zoomOut.reset();
        }
        touchstart(t, s, h) {
          this._zoomIn.touchstart(t, s, h), this._zoomOut.touchstart(t, s, h);
        }
        touchmove(t, s, h) {
          this._zoomIn.touchmove(t, s, h), this._zoomOut.touchmove(t, s, h);
        }
        touchend(t, s, h) {
          const _ = this._zoomIn.touchend(t, s, h), y = this._zoomOut.touchend(t, s, h);
          return _ ? (this._active = !0, t.preventDefault(), setTimeout(() => this.reset(), 0), { cameraAnimation: (T) => T.easeTo({ duration: 300, zoom: T.getZoom() + 1, around: T.unproject(_) }, { originalEvent: t }) }) : y ? (this._active = !0, t.preventDefault(), setTimeout(() => this.reset(), 0), { cameraAnimation: (T) => T.easeTo({ duration: 300, zoom: T.getZoom() - 1, around: T.unproject(y) }, { originalEvent: t }) }) : void 0;
        }
        touchcancel() {
          this.reset();
        }
        enable() {
          this._enabled = !0;
        }
        disable() {
          this._enabled = !1, this.reset();
        }
        isEnabled() {
          return this._enabled;
        }
        isActive() {
          return this._active;
        }
      }
      const a_ = { 0: 1, 2: 2 };
      class Al {
        constructor(t) {
          this.reset(), this._clickTolerance = t.clickTolerance || 1;
        }
        blur() {
          this.reset();
        }
        reset() {
          this._active = !1, this._moved = !1, this._lastPoint = void 0, this._eventButton = void 0;
        }
        _correctButton(t, s) {
          return !1;
        }
        _move(t, s) {
          return {};
        }
        mousedown(t, s) {
          if (this._lastPoint)
            return;
          const h = kt(t);
          this._correctButton(t, h) && (this._lastPoint = s, this._eventButton = h);
        }
        mousemoveWindow(t, s) {
          const h = this._lastPoint;
          if (h) {
            if (t.preventDefault(), this._eventButton != null && function(_, y) {
              const T = a_[y];
              return _.buttons === void 0 || (_.buttons & T) !== T;
            }(t, this._eventButton))
              this.reset();
            else if (this._moved || !(s.dist(h) < this._clickTolerance))
              return this._moved = !0, this._lastPoint = s, this._move(h, s);
          }
        }
        mouseupWindow(t) {
          this._lastPoint && kt(t) === this._eventButton && (this._moved && pt(), this.reset());
        }
        enable() {
          this._enabled = !0;
        }
        disable() {
          this._enabled = !1, this.reset();
        }
        isEnabled() {
          return this._enabled;
        }
        isActive() {
          return this._active;
        }
      }
      class mp extends Al {
        mousedown(t, s) {
          super.mousedown(t, s), this._lastPoint && (this._active = !0);
        }
        _correctButton(t, s) {
          return s === 0 && !t.ctrlKey;
        }
        _move(t, s) {
          return { around: s, panDelta: s.sub(t) };
        }
      }
      class wu extends Al {
        _correctButton(t, s) {
          return s === 0 && t.ctrlKey || s === 2;
        }
        _move(t, s) {
          const h = 0.8 * (s.x - t.x);
          if (h)
            return this._active = !0, { bearingDelta: h };
        }
        contextmenu(t) {
          t.preventDefault();
        }
      }
      class fh extends Al {
        _correctButton(t, s) {
          return s === 0 && t.ctrlKey || s === 2;
        }
        _move(t, s) {
          const h = -0.5 * (s.y - t.y);
          if (h)
            return this._active = !0, { pitchDelta: h };
        }
        contextmenu(t) {
          t.preventDefault();
        }
      }
      class ba {
        constructor(t, s) {
          this._map = t, this._el = t.getCanvasContainer(), this._minTouches = 1, this._clickTolerance = s.clickTolerance || 1, this.reset(), i.aP(["_addTouchPanBlocker", "_showTouchPanBlockerAlert"], this);
        }
        reset() {
          this._active = !1, this._touches = {}, this._sum = new i.P(0, 0);
        }
        touchstart(t, s, h) {
          return this._calculateTransform(t, s, h);
        }
        touchmove(t, s, h) {
          if (this._active && !(h.length < this._minTouches)) {
            if (this._map._cooperativeGestures && !this._map.isMoving()) {
              if (h.length === 1 && !i.dz())
                return void this._showTouchPanBlockerAlert();
              this._alertContainer.style.visibility !== "hidden" && (this._alertContainer.style.visibility = "hidden", clearTimeout(this._alertTimer));
            }
            return t.cancelable && t.preventDefault(), this._calculateTransform(t, s, h);
          }
        }
        touchend(t, s, h) {
          this._calculateTransform(t, s, h), this._active && h.length < this._minTouches && this.reset();
        }
        touchcancel() {
          this.reset();
        }
        _calculateTransform(t, s, h) {
          h.length > 0 && (this._active = !0);
          const _ = Dd(h, s), y = new i.P(0, 0), T = new i.P(0, 0);
          let z = 0;
          for (const F in _) {
            const N = _[F], G = this._touches[F];
            G && (y._add(N), T._add(N.sub(G)), z++, _[F] = N);
          }
          if (this._touches = _, z < this._minTouches || !T.mag())
            return;
          const R = T.div(z);
          return this._sum._add(R), this._sum.mag() < this._clickTolerance ? void 0 : { around: y.div(z), panDelta: R };
        }
        enable() {
          this._enabled = !0, this._map._cooperativeGestures && (this._addTouchPanBlocker(), this._el.classList.add("mapboxgl-touch-pan-blocker-override", "mapboxgl-scrollable-page"));
        }
        disable() {
          this._enabled = !1, this._map._cooperativeGestures && (clearTimeout(this._alertTimer), this._alertContainer.remove(), this._el.classList.remove("mapboxgl-touch-pan-blocker-override", "mapboxgl-scrollable-page")), this.reset();
        }
        isEnabled() {
          return !!this._enabled;
        }
        isActive() {
          return !!this._active;
        }
        _addTouchPanBlocker() {
          this._map && !this._alertContainer && (this._alertContainer = be("div", "mapboxgl-touch-pan-blocker", this._map._container), this._alertContainer.textContent = this._map._getUIString("TouchPanBlocker.Message"), this._alertContainer.style.fontSize = `${Math.max(10, Math.min(24, Math.floor(0.05 * this._el.clientWidth)))}px`);
        }
        _showTouchPanBlockerAlert() {
          this._alertContainer.style.visibility = "visible", this._alertContainer.classList.add("mapboxgl-touch-pan-blocker-show"), this._alertContainer.setAttribute("role", "alert"), clearTimeout(this._alertTimer), this._alertTimer = window.setTimeout(() => {
            this._alertContainer.classList.remove("mapboxgl-touch-pan-blocker-show"), this._alertContainer.removeAttribute("role");
          }, 500);
        }
      }
      class dc {
        constructor() {
          this.reset();
        }
        reset() {
          this._active = !1, this._firstTwoTouches = void 0;
        }
        _start(t) {
        }
        _move(t, s, h) {
          return {};
        }
        touchstart(t, s, h) {
          this._firstTwoTouches || h.length < 2 || (this._firstTwoTouches = [h[0].identifier, h[1].identifier], this._start([s[0], s[1]]));
        }
        touchmove(t, s, h) {
          const _ = this._firstTwoTouches;
          if (!_)
            return;
          t.preventDefault();
          const [y, T] = _, z = Nn(h, s, y), R = Nn(h, s, T);
          if (!z || !R)
            return;
          const F = this._aroundCenter ? null : z.add(R).div(2);
          return this._move([z, R], F, t);
        }
        touchend(t, s, h) {
          if (!this._firstTwoTouches)
            return;
          const [_, y] = this._firstTwoTouches, T = Nn(h, s, _), z = Nn(h, s, y);
          T && z || (this._active && pt(), this.reset());
        }
        touchcancel() {
          this.reset();
        }
        enable(t) {
          this._enabled = !0, this._aroundCenter = !!t && t.around === "center";
        }
        disable() {
          this._enabled = !1, this.reset();
        }
        isEnabled() {
          return this._enabled;
        }
        isActive() {
          return this._active;
        }
      }
      function Nn(c, t, s) {
        for (let h = 0; h < c.length; h++)
          if (c[h].identifier === s)
            return t[h];
      }
      function zo(c, t) {
        return Math.log(c / t) / Math.LN2;
      }
      class kd extends dc {
        reset() {
          super.reset(), this._distance = 0, this._startDistance = 0;
        }
        _start(t) {
          this._startDistance = this._distance = t[0].dist(t[1]);
        }
        _move(t, s) {
          const h = this._distance;
          if (this._distance = t[0].dist(t[1]), this._active || !(Math.abs(zo(this._distance, this._startDistance)) < 0.1))
            return this._active = !0, { zoomDelta: zo(this._distance, h), pinchAround: s };
        }
      }
      function ph(c, t) {
        return 180 * c.angleWith(t) / Math.PI;
      }
      class _p extends dc {
        reset() {
          super.reset(), this._minDiameter = 0, this._startVector = void 0, this._vector = void 0;
        }
        _start(t) {
          this._startVector = this._vector = t[0].sub(t[1]), this._minDiameter = t[0].dist(t[1]);
        }
        _move(t, s) {
          const h = this._vector;
          if (this._vector = t[0].sub(t[1]), h && (this._active || !this._isBelowThreshold(this._vector)))
            return this._active = !0, { bearingDelta: ph(this._vector, h), pinchAround: s };
        }
        _isBelowThreshold(t) {
          this._minDiameter = Math.min(this._minDiameter, t.mag());
          const s = 25 / (Math.PI * this._minDiameter) * 360, h = this._startVector;
          if (!h)
            return !1;
          const _ = ph(t, h);
          return Math.abs(_) < s;
        }
      }
      function Rd(c) {
        return Math.abs(c.y) > Math.abs(c.x);
      }
      class mh extends dc {
        constructor(t) {
          super(), this._map = t;
        }
        reset() {
          super.reset(), this._valid = void 0, this._firstMove = void 0, this._lastPoints = void 0;
        }
        _start(t) {
          this._lastPoints = t, Rd(t[0].sub(t[1])) && (this._valid = !1);
        }
        _move(t, s, h) {
          const _ = this._lastPoints;
          if (!_)
            return;
          const y = t[0].sub(_[0]), T = t[1].sub(_[1]);
          return this._map._cooperativeGestures && !i.dz() && h.touches.length < 3 || (this._valid = this.gestureBeginsVertically(y, T, h.timeStamp), !this._valid) ? void 0 : (this._lastPoints = t, this._active = !0, { pitchDelta: (y.y + T.y) / 2 * -0.5 });
        }
        gestureBeginsVertically(t, s, h) {
          if (this._valid !== void 0)
            return this._valid;
          const _ = t.mag() >= 2, y = s.mag() >= 2;
          if (!_ && !y)
            return;
          if (!_ || !y)
            return this._firstMove == null && (this._firstMove = h), h - this._firstMove < 100 && void 0;
          const T = t.y > 0 == s.y > 0;
          return Rd(t) && Rd(s) && T;
        }
      }
      const l_ = { panStep: 100, bearingStep: 15, pitchStep: 10 };
      class c_ {
        constructor() {
          const t = l_;
          this._panStep = t.panStep, this._bearingStep = t.bearingStep, this._pitchStep = t.pitchStep, this._rotationDisabled = !1;
        }
        blur() {
          this.reset();
        }
        reset() {
          this._active = !1;
        }
        keydown(t) {
          if (t.altKey || t.ctrlKey || t.metaKey)
            return;
          let s = 0, h = 0, _ = 0, y = 0, T = 0;
          switch (t.keyCode) {
            case 61:
            case 107:
            case 171:
            case 187:
              s = 1;
              break;
            case 189:
            case 109:
            case 173:
              s = -1;
              break;
            case 37:
              t.shiftKey ? h = -1 : (t.preventDefault(), y = -1);
              break;
            case 39:
              t.shiftKey ? h = 1 : (t.preventDefault(), y = 1);
              break;
            case 38:
              t.shiftKey ? _ = 1 : (t.preventDefault(), T = -1);
              break;
            case 40:
              t.shiftKey ? _ = -1 : (t.preventDefault(), T = 1);
              break;
            default:
              return;
          }
          return this._rotationDisabled && (h = 0, _ = 0), { cameraAnimation: (z) => {
            const R = z.getZoom();
            z.easeTo({ duration: 300, easeId: "keyboardHandler", easing: Od, zoom: s ? Math.round(R) + s * (t.shiftKey ? 2 : 1) : R, bearing: z.getBearing() + h * this._bearingStep, pitch: z.getPitch() + _ * this._pitchStep, offset: [-y * this._panStep, -T * this._panStep], center: z.getCenter() }, { originalEvent: t });
          } };
        }
        enable() {
          this._enabled = !0;
        }
        disable() {
          this._enabled = !1, this.reset();
        }
        isEnabled() {
          return this._enabled;
        }
        isActive() {
          return this._active;
        }
        disableRotation() {
          this._rotationDisabled = !0;
        }
        enableRotation() {
          this._rotationDisabled = !1;
        }
      }
      function Od(c) {
        return c * (2 - c);
      }
      const Tu = 4.000244140625, fc = 1 / 450;
      class pc {
        constructor(t, s) {
          this._map = t, this._el = t.getCanvasContainer(), this._handler = s, this._delta = 0, this._lastDelta = 0, this._defaultZoomRate = 0.01, this._wheelZoomRate = fc, i.aP(["_onTimeout", "_addScrollZoomBlocker", "_showBlockerAlert"], this);
        }
        setZoomRate(t) {
          this._defaultZoomRate = t;
        }
        setWheelZoomRate(t) {
          this._wheelZoomRate = t;
        }
        isEnabled() {
          return !!this._enabled;
        }
        isActive() {
          return this._active || this._finishTimeout !== void 0;
        }
        isZooming() {
          return !!this._zooming;
        }
        enable(t) {
          this.isEnabled() || (this._enabled = !0, this._aroundCenter = !!t && t.around === "center", this._map._cooperativeGestures && this._addScrollZoomBlocker());
        }
        disable() {
          this.isEnabled() && (this._enabled = !1, this._map._cooperativeGestures && (clearTimeout(this._alertTimer), this._alertContainer.remove()));
        }
        wheel(t) {
          if (!this.isEnabled())
            return;
          if (this._map._cooperativeGestures) {
            if (!(t.ctrlKey || t.metaKey || this.isZooming() || i.dz()))
              return void this._showBlockerAlert();
            this._alertContainer.style.visibility !== "hidden" && (this._alertContainer.style.visibility = "hidden", clearTimeout(this._alertTimer));
          }
          let s = t.deltaMode === WheelEvent.DOM_DELTA_LINE ? 40 * t.deltaY : t.deltaY;
          const h = i.q.now(), _ = h - (this._lastWheelEventTime || 0);
          this._lastWheelEventTime = h, s !== 0 && s % Tu == 0 ? this._type = "wheel" : s !== 0 && Math.abs(s) < 4 ? this._type = "trackpad" : _ > 400 ? (this._type = null, this._lastValue = s, this._timeout = window.setTimeout(this._onTimeout, 40, t)) : this._type || (this._type = Math.abs(_ * s) < 200 ? "trackpad" : "wheel", this._timeout && (clearTimeout(this._timeout), this._timeout = null, s += this._lastValue)), t.shiftKey && s && (s /= 4), this._type && (this._lastWheelEvent = t, this._delta -= s, this._active || this._start(t)), t.preventDefault();
        }
        _onTimeout(t) {
          this._type = "wheel", this._delta -= this._lastValue, this._active || this._start(t);
        }
        _start(t) {
          if (!this._delta)
            return;
          this._frameId && (this._frameId = null), this._active = !0, this.isZooming() || (this._zooming = !0), this._finishTimeout && (clearTimeout(this._finishTimeout), delete this._finishTimeout);
          const s = Gt(this._el, t);
          this._aroundPoint = this._aroundCenter ? this._map.transform.centerPoint : s, this._aroundCoord = this._map.transform.pointCoordinate3D(this._aroundPoint), this._targetZoom = void 0, this._frameId || (this._frameId = !0, this._handler._triggerRenderFrame());
        }
        renderFrame() {
          if (!this._frameId || (this._frameId = null, !this.isActive()))
            return;
          const t = this._map.transform;
          this._type === "wheel" && t.projection.wrap && (t._center.lng >= 180 || t._center.lng <= -180) && (this._prevEase = null, this._easing = null, this._lastWheelEvent = null, this._lastWheelEventTime = 0);
          const s = () => t._terrainEnabled() && this._aroundCoord ? t.computeZoomRelativeTo(this._aroundCoord) : t.zoom;
          if (this._delta !== 0) {
            const F = this._type === "wheel" && Math.abs(this._delta) > Tu ? this._wheelZoomRate : this._defaultZoomRate;
            let N = 2 / (1 + Math.exp(-Math.abs(this._delta * F)));
            this._delta < 0 && N !== 0 && (N = 1 / N);
            const G = s(), Z = Math.pow(2, G), W = typeof this._targetZoom == "number" ? t.zoomScale(this._targetZoom) : Z;
            this._targetZoom = Math.min(t.maxZoom, Math.max(t.minZoom, t.scaleZoom(W * N))), this._type === "wheel" && (this._startZoom = G, this._easing = this._smoothOutEasing(200)), this._lastDelta = this._delta, this._delta = 0;
          }
          const h = typeof this._targetZoom == "number" ? this._targetZoom : s(), _ = this._startZoom, y = this._easing;
          let T, z = !1;
          if (this._type === "wheel" && _ && y) {
            const F = Math.min((i.q.now() - this._lastWheelEventTime) / 200, 1), N = y(F);
            T = i.af(_, h, N), F < 1 ? this._frameId || (this._frameId = !0) : z = !0;
          } else
            T = h, z = !0;
          this._active = !0, z && (this._active = !1, this._finishTimeout = window.setTimeout(() => {
            this._zooming = !1, this._handler._triggerRenderFrame(), delete this._targetZoom, delete this._finishTimeout;
          }, 200));
          let R = T - s();
          return R * this._lastDelta < 0 && (R = 0), { noInertia: !0, needsRenderFrame: !z, zoomDelta: R, around: this._aroundPoint, aroundCoord: this._aroundCoord, originalEvent: this._lastWheelEvent };
        }
        _smoothOutEasing(t) {
          let s = i.dA;
          if (this._prevEase) {
            const h = this._prevEase, _ = (i.q.now() - h.start) / h.duration, y = h.easing(_ + 0.01) - h.easing(_), T = 0.27 / Math.sqrt(y * y + 1e-4) * 0.01, z = Math.sqrt(0.0729 - T * T);
            s = i.dy(T, z, 0.25, 1);
          }
          return this._prevEase = { start: i.q.now(), duration: t, easing: s }, s;
        }
        blur() {
          this.reset();
        }
        reset() {
          this._active = !1;
        }
        _addScrollZoomBlocker() {
          this._map && !this._alertContainer && (this._alertContainer = be("div", "mapboxgl-scroll-zoom-blocker", this._map._container), this._alertContainer.textContent = /(Mac|iPad)/i.test(navigator.userAgent) ? this._map._getUIString("ScrollZoomBlocker.CmdMessage") : this._map._getUIString("ScrollZoomBlocker.CtrlMessage"), this._alertContainer.style.fontSize = `${Math.max(10, Math.min(24, Math.floor(0.05 * this._el.clientWidth)))}px`);
        }
        _showBlockerAlert() {
          this._alertContainer.style.visibility = "visible", this._alertContainer.classList.add("mapboxgl-scroll-zoom-blocker-show"), this._alertContainer.setAttribute("role", "alert"), clearTimeout(this._alertTimer), this._alertTimer = window.setTimeout(() => {
            this._alertContainer.classList.remove("mapboxgl-scroll-zoom-blocker-show"), this._alertContainer.removeAttribute("role");
          }, 200);
        }
      }
      class wa {
        constructor(t, s) {
          this._clickZoom = t, this._tapZoom = s;
        }
        enable() {
          this._clickZoom.enable(), this._tapZoom.enable();
        }
        disable() {
          this._clickZoom.disable(), this._tapZoom.disable();
        }
        isEnabled() {
          return this._clickZoom.isEnabled() && this._tapZoom.isEnabled();
        }
        isActive() {
          return this._clickZoom.isActive() || this._tapZoom.isActive();
        }
      }
      class Do {
        constructor() {
          this.reset();
        }
        reset() {
          this._active = !1;
        }
        blur() {
          this.reset();
        }
        dblclick(t, s) {
          return t.preventDefault(), { cameraAnimation: (h) => {
            h.easeTo({ duration: 300, zoom: h.getZoom() + (t.shiftKey ? -1 : 1), around: h.unproject(s) }, { originalEvent: t });
          } };
        }
        enable() {
          this._enabled = !0;
        }
        disable() {
          this._enabled = !1, this.reset();
        }
        isEnabled() {
          return this._enabled;
        }
        isActive() {
          return this._active;
        }
      }
      class Ja {
        constructor() {
          this._tap = new bu({ numTouches: 1, numTaps: 1 }), this.reset();
        }
        reset() {
          this._active = !1, this._swipePoint = void 0, this._swipeTouch = 0, this._tapTime = 0, this._tap.reset();
        }
        touchstart(t, s, h) {
          this._swipePoint || (this._tapTime && t.timeStamp - this._tapTime > 500 && this.reset(), this._tapTime ? h.length > 0 && (this._swipePoint = s[0], this._swipeTouch = h[0].identifier) : this._tap.touchstart(t, s, h));
        }
        touchmove(t, s, h) {
          if (this._tapTime) {
            if (this._swipePoint) {
              if (h[0].identifier !== this._swipeTouch)
                return;
              const _ = s[0], y = _.y - this._swipePoint.y;
              return this._swipePoint = _, t.preventDefault(), this._active = !0, { zoomDelta: y / 128 };
            }
          } else
            this._tap.touchmove(t, s, h);
        }
        touchend(t, s, h) {
          this._tapTime ? this._swipePoint && h.length === 0 && this.reset() : this._tap.touchend(t, s, h) && (this._tapTime = t.timeStamp);
        }
        touchcancel() {
          this.reset();
        }
        enable() {
          this._enabled = !0;
        }
        disable() {
          this._enabled = !1, this.reset();
        }
        isEnabled() {
          return this._enabled;
        }
        isActive() {
          return this._active;
        }
      }
      class Cl {
        constructor(t, s, h) {
          this._el = t, this._mousePan = s, this._touchPan = h;
        }
        enable(t) {
          this._inertiaOptions = t || {}, this._mousePan.enable(), this._touchPan.enable(), this._el.classList.add("mapboxgl-touch-drag-pan");
        }
        disable() {
          this._mousePan.disable(), this._touchPan.disable(), this._el.classList.remove("mapboxgl-touch-drag-pan");
        }
        isEnabled() {
          return this._mousePan.isEnabled() && this._touchPan.isEnabled();
        }
        isActive() {
          return this._mousePan.isActive() || this._touchPan.isActive();
        }
      }
      class Qa {
        constructor(t, s, h) {
          this._pitchWithRotate = t.pitchWithRotate, this._mouseRotate = s, this._mousePitch = h;
        }
        enable() {
          this._mouseRotate.enable(), this._pitchWithRotate && this._mousePitch.enable();
        }
        disable() {
          this._mouseRotate.disable(), this._mousePitch.disable();
        }
        isEnabled() {
          return this._mouseRotate.isEnabled() && (!this._pitchWithRotate || this._mousePitch.isEnabled());
        }
        isActive() {
          return this._mouseRotate.isActive() || this._mousePitch.isActive();
        }
      }
      class h_ {
        constructor(t, s, h, _) {
          this._el = t, this._touchZoom = s, this._touchRotate = h, this._tapDragZoom = _, this._rotationDisabled = !1, this._enabled = !0;
        }
        enable(t) {
          this._touchZoom.enable(t), this._rotationDisabled || this._touchRotate.enable(t), this._tapDragZoom.enable(), this._el.classList.add("mapboxgl-touch-zoom-rotate");
        }
        disable() {
          this._touchZoom.disable(), this._touchRotate.disable(), this._tapDragZoom.disable(), this._el.classList.remove("mapboxgl-touch-zoom-rotate");
        }
        isEnabled() {
          return this._touchZoom.isEnabled() && (this._rotationDisabled || this._touchRotate.isEnabled()) && this._tapDragZoom.isEnabled();
        }
        isActive() {
          return this._touchZoom.isActive() || this._touchRotate.isActive() || this._tapDragZoom.isActive();
        }
        disableRotation() {
          this._rotationDisabled = !0, this._touchRotate.disable();
        }
        enableRotation() {
          this._rotationDisabled = !1, this._touchZoom.isEnabled() && this._touchRotate.enable();
        }
      }
      const Mu = (c) => c.zoom || c.drag || c.pitch || c.rotate;
      class u_ extends i.z {
      }
      class d_ {
        constructor() {
          this.constants = [1, 1, 0.01], this.radius = 0;
        }
        setup(t, s) {
          const h = i.ab.vec3.sub([], s, t);
          this.radius = i.ab.vec3.length(h[2] < 0 ? i.ab.vec3.div([], h, this.constants) : [h[0], h[1], 0]);
        }
        projectRay(t) {
          i.ab.vec3.div(t, t, this.constants), i.ab.vec3.normalize(t, t), i.ab.vec3.mul(t, t, this.constants);
          const s = i.ab.vec3.scale([], t, this.radius);
          if (s[2] > 0) {
            const h = i.ab.vec3.scale([], [0, 0, 1], i.ab.vec3.dot(s, [0, 0, 1])), _ = i.ab.vec3.scale([], i.ab.vec3.normalize([], [s[0], s[1], 0]), this.radius), y = i.ab.vec3.add([], s, i.ab.vec3.scale([], i.ab.vec3.sub([], i.ab.vec3.add([], _, h), s), 2));
            s[0] = y[0], s[1] = y[1];
          }
          return s;
        }
      }
      function _h(c) {
        return c.panDelta && c.panDelta.mag() || c.zoomDelta || c.bearingDelta || c.pitchDelta;
      }
      class dr {
        constructor(t, s) {
          this._map = t, this._el = this._map.getCanvasContainer(), this._handlers = [], this._handlersById = {}, this._changes = [], this._inertia = new up(t), this._bearingSnap = s.bearingSnap, this._previousActiveHandlers = {}, this._trackingEllipsoid = new d_(), this._dragOrigin = null, this._eventsInProgress = {}, this._addDefaultHandlers(s), i.aP(["handleEvent", "handleWindowEvent"], this);
          const h = this._el;
          this._listeners = [[h, "touchstart", { passive: !0 }], [h, "touchmove", { passive: !1 }], [h, "touchend", void 0], [h, "touchcancel", void 0], [h, "mousedown", void 0], [h, "mousemove", void 0], [h, "mouseup", void 0], [document, "mousemove", { capture: !0 }], [document, "mouseup", void 0], [h, "mouseover", void 0], [h, "mouseout", void 0], [h, "dblclick", void 0], [h, "click", void 0], [h, "keydown", { capture: !1 }], [h, "keyup", void 0], [h, "wheel", { passive: !1 }], [h, "contextmenu", void 0], [window, "blur", void 0]];
          for (const [_, y, T] of this._listeners) {
            const z = _ === document ? this.handleWindowEvent : this.handleEvent;
            _.addEventListener(y, z, T);
          }
        }
        destroy() {
          for (const [t, s, h] of this._listeners) {
            const _ = t === document ? this.handleWindowEvent : this.handleEvent;
            t.removeEventListener(s, _, h);
          }
        }
        _addDefaultHandlers(t) {
          const s = this._map, h = s.getCanvasContainer();
          this._add("mapEvent", new fp(s, t));
          const _ = s.boxZoom = new r_(s, t);
          this._add("boxZoom", _);
          const y = new o_(), T = new Do();
          s.doubleClickZoom = new wa(T, y), this._add("tapZoom", y), this._add("clickZoom", T);
          const z = new Ja();
          this._add("tapDragZoom", z);
          const R = s.touchPitch = new mh(s);
          this._add("touchPitch", R);
          const F = new wu(t), N = new fh(t);
          s.dragRotate = new Qa(t, F, N), this._add("mouseRotate", F, ["mousePitch"]), this._add("mousePitch", N, ["mouseRotate"]);
          const G = new mp(t), Z = new ba(s, t);
          s.dragPan = new Cl(h, G, Z), this._add("mousePan", G), this._add("touchPan", Z, ["touchZoom", "touchRotate"]);
          const W = new _p(), te = new kd();
          s.touchZoomRotate = new h_(h, te, W, z), this._add("touchRotate", W, ["touchPan", "touchZoom"]), this._add("touchZoom", te, ["touchPan", "touchRotate"]), this._add("blockableMapEvent", new pp(s));
          const ee = s.scrollZoom = new pc(s, this);
          this._add("scrollZoom", ee, ["mousePan"]);
          const se = s.keyboard = new c_();
          this._add("keyboard", se);
          for (const oe of ["boxZoom", "doubleClickZoom", "tapDragZoom", "touchPitch", "dragRotate", "dragPan", "touchZoomRotate", "scrollZoom", "keyboard"])
            t.interactive && t[oe] && s[oe].enable(t[oe]);
        }
        _add(t, s, h) {
          this._handlers.push({ handlerName: t, handler: s, allowed: h }), this._handlersById[t] = s;
        }
        stop(t) {
          if (!this._updatingCamera) {
            for (const { handler: s } of this._handlers)
              s.reset();
            this._inertia.clear(), this._fireEvents({}, {}, t), this._changes = [], this._originalZoom = void 0;
          }
        }
        isActive() {
          for (const { handler: t } of this._handlers)
            if (t.isActive())
              return !0;
          return !1;
        }
        isZooming() {
          return !!this._eventsInProgress.zoom || this._map.scrollZoom.isZooming();
        }
        isRotating() {
          return !!this._eventsInProgress.rotate;
        }
        isMoving() {
          return !!Mu(this._eventsInProgress) || this.isZooming();
        }
        _isDragging() {
          return !!this._eventsInProgress.drag;
        }
        _blockedByActive(t, s, h) {
          for (const _ in t)
            if (_ !== h && (!s || s.indexOf(_) < 0))
              return !0;
          return !1;
        }
        handleWindowEvent(t) {
          this.handleEvent(t, `${t.type}Window`);
        }
        _getMapTouches(t) {
          const s = [];
          for (const h of t)
            this._el.contains(h.target) && s.push(h);
          return s;
        }
        handleEvent(t, s) {
          this._updatingCamera = !0;
          const h = t.type === "renderFrame", _ = h ? void 0 : t, y = { needsRenderFrame: !1 }, T = {}, z = {}, R = t.touches ? this._getMapTouches(t.touches) : void 0, F = R ? ui(this._el, R) : h ? void 0 : Gt(this._el, t);
          for (const { handlerName: Z, handler: W, allowed: te } of this._handlers) {
            if (!W.isEnabled())
              continue;
            let ee;
            this._blockedByActive(z, te, Z) ? W.reset() : W[s || t.type] && (ee = W[s || t.type](t, F, R), this.mergeHandlerResult(y, T, ee, Z, _), ee && ee.needsRenderFrame && this._triggerRenderFrame()), (ee || W.isActive()) && (z[Z] = W);
          }
          const N = {};
          for (const Z in this._previousActiveHandlers)
            z[Z] || (N[Z] = _);
          this._previousActiveHandlers = z, (Object.keys(N).length || _h(y)) && (this._changes.push([y, T, N]), this._triggerRenderFrame()), (Object.keys(z).length || _h(y)) && this._map._stop(!0), this._updatingCamera = !1;
          const { cameraAnimation: G } = y;
          G && (this._inertia.clear(), this._fireEvents({}, {}, !0), this._changes = [], G(this._map));
        }
        mergeHandlerResult(t, s, h, _, y) {
          if (!h)
            return;
          i.l(t, h);
          const T = { handlerName: _, originalEvent: h.originalEvent || y };
          h.zoomDelta !== void 0 && (s.zoom = T), h.panDelta !== void 0 && (s.drag = T), h.pitchDelta !== void 0 && (s.pitch = T), h.bearingDelta !== void 0 && (s.rotate = T);
        }
        _applyChanges() {
          const t = {}, s = {}, h = {};
          for (const [_, y, T] of this._changes)
            _.panDelta && (t.panDelta = (t.panDelta || new i.P(0, 0))._add(_.panDelta)), _.zoomDelta && (t.zoomDelta = (t.zoomDelta || 0) + _.zoomDelta), _.bearingDelta && (t.bearingDelta = (t.bearingDelta || 0) + _.bearingDelta), _.pitchDelta && (t.pitchDelta = (t.pitchDelta || 0) + _.pitchDelta), _.around !== void 0 && (t.around = _.around), _.aroundCoord !== void 0 && (t.aroundCoord = _.aroundCoord), _.pinchAround !== void 0 && (t.pinchAround = _.pinchAround), _.noInertia && (t.noInertia = _.noInertia), i.l(s, y), i.l(h, T);
          this._updateMapTransform(t, s, h), this._changes = [];
        }
        _updateMapTransform(t, s, h) {
          const _ = this._map, y = _.transform, T = (he) => [he.x, he.y, he.z];
          if (((he) => {
            const _e = this._eventsInProgress.drag;
            return _e && !this._handlersById[_e.handlerName].isActive();
          })() && !_h(t)) {
            const he = y.zoom;
            y.cameraElevationReference = "sea", this._originalZoom != null && y._orthographicProjectionAtLowPitch && y.projection.name !== "globe" && y.pitch === 0 ? (y.cameraElevationReference = "ground", y.zoom = this._originalZoom) : (y.recenterOnTerrain(), y.cameraElevationReference = "ground"), he !== y.zoom && this._map._update(!0);
          }
          if (y._isCameraConstrained && _._stop(!0), !_h(t))
            return void this._fireEvents(s, h, !0);
          let { panDelta: z, zoomDelta: R, bearingDelta: F, pitchDelta: N, around: G, aroundCoord: Z, pinchAround: W } = t;
          y._isCameraConstrained && (R > 0 && (R = 0), y._isCameraConstrained = !1), W !== void 0 && (G = W), (R || ((he) => s[he] && !this._eventsInProgress[he])("drag")) && G && (this._dragOrigin = T(y.pointCoordinate3D(G)), this._originalZoom = y.zoom, this._trackingEllipsoid.setup(y._camera.position, this._dragOrigin)), y.cameraElevationReference = "sea", _._stop(!0), G = G || _.transform.centerPoint, F && (y.bearing += F), N && (y.pitch += N), y._updateCameraState();
          const te = [0, 0, 0];
          if (z)
            if (y.projection.name === "mercator") {
              const he = this._trackingEllipsoid.projectRay(y.screenPointToMercatorRay(G).dir), _e = this._trackingEllipsoid.projectRay(y.screenPointToMercatorRay(G.sub(z)).dir);
              te[0] = _e[0] - he[0], te[1] = _e[1] - he[1];
            } else {
              const he = y.pointCoordinate(G);
              if (y.projection.name === "globe") {
                z = z.rotate(-y.angle);
                const _e = y._pixelsPerMercatorPixel / y.worldSize;
                te[0] = -z.x * i.dB(i.aS(he.y)) * _e, te[1] = -z.y * i.dB(y.center.lat) * _e;
              } else {
                const _e = y.pointCoordinate(G.sub(z));
                he && _e && (te[0] = _e.x - he.x, te[1] = _e.y - he.y);
              }
            }
          const ee = y.zoom, se = [0, 0, 0];
          if (R) {
            const he = T(Z || y.pointCoordinate3D(G)), _e = { dir: i.ab.vec3.normalize([], i.ab.vec3.sub([], he, y._camera.position)) };
            if (_e.dir[2] < 0) {
              const pe = y.zoomDeltaToMovement(he, R);
              i.ab.vec3.scale(se, _e.dir, pe);
            }
          }
          const oe = i.ab.vec3.add(te, te, se);
          y._translateCameraConstrained(oe), R && Math.abs(y.zoom - ee) > 1e-4 && y.recenterOnTerrain(), y.cameraElevationReference = "ground", this._map._update(), t.noInertia || this._inertia.record(t), this._fireEvents(s, h, !0);
        }
        _fireEvents(t, s, h) {
          const _ = Mu(this._eventsInProgress), y = Mu(t), T = {};
          for (const N in t) {
            const { originalEvent: G } = t[N];
            this._eventsInProgress[N] || (T[`${N}start`] = G), this._eventsInProgress[N] = t[N];
          }
          !_ && y && this._fireEvent("movestart", y.originalEvent);
          for (const N in T)
            this._fireEvent(N, T[N]);
          y && this._fireEvent("move", y.originalEvent);
          for (const N in t) {
            const { originalEvent: G } = t[N];
            this._fireEvent(N, G);
          }
          const z = {};
          let R;
          for (const N in this._eventsInProgress) {
            const { handlerName: G, originalEvent: Z } = this._eventsInProgress[N];
            this._handlersById[G].isActive() || (delete this._eventsInProgress[N], R = s[G] || Z, z[`${N}end`] = R);
          }
          for (const N in z)
            this._fireEvent(N, z[N]);
          const F = Mu(this._eventsInProgress);
          if (h && (_ || y) && !F) {
            this._updatingCamera = !0;
            const N = this._inertia._onMoveEnd(this._map.dragPan._inertiaOptions), G = (Z) => Z !== 0 && -this._bearingSnap < Z && Z < this._bearingSnap;
            N ? (G(N.bearing || this._map.getBearing()) && (N.bearing = 0), this._map.easeTo(N, { originalEvent: R })) : (this._map.fire(new i.z("moveend", { originalEvent: R })), G(this._map.getBearing()) && this._map.resetNorth()), this._updatingCamera = !1;
          }
        }
        _fireEvent(t, s) {
          this._map.fire(new i.z(t, s ? { originalEvent: s } : {}));
        }
        _requestFrame() {
          return this._map.triggerRepaint(), this._map._renderTaskQueue.add((t) => {
            this._frameId = void 0, this.handleEvent(new u_("renderFrame", { timeStamp: t })), this._applyChanges();
          });
        }
        _triggerRenderFrame() {
          this._frameId === void 0 && (this._frameId = this._requestFrame());
        }
      }
      const Su = "map.setFreeCameraOptions(...) and map.getFreeCameraOptions() are not yet supported for non-mercator projections.";
      class gp extends i.E {
        constructor(t, s) {
          super(), this._moving = !1, this._zooming = !1, this.transform = t, this._bearingSnap = s.bearingSnap, this._respectPrefersReducedMotion = s.respectPrefersReducedMotion !== !1, i.aP(["_renderFrameCallback"], this);
        }
        getCenter() {
          return new i.bO(this.transform.center.lng, this.transform.center.lat);
        }
        setCenter(t, s) {
          return this.jumpTo({ center: t }, s);
        }
        panBy(t, s, h) {
          return t = i.P.convert(t).mult(-1), this.panTo(this.transform.center, i.l({ offset: t }, s), h);
        }
        panTo(t, s, h) {
          return this.easeTo(i.l({ center: t }, s), h);
        }
        getZoom() {
          return this.transform.zoom;
        }
        setZoom(t, s) {
          return this.jumpTo({ zoom: t }, s), this;
        }
        zoomTo(t, s, h) {
          return this.easeTo(i.l({ zoom: t }, s), h);
        }
        zoomIn(t, s) {
          return this.zoomTo(this.getZoom() + 1, t, s), this;
        }
        zoomOut(t, s) {
          return this.zoomTo(this.getZoom() - 1, t, s), this;
        }
        getBearing() {
          return this.transform.bearing;
        }
        setBearing(t, s) {
          return this.jumpTo({ bearing: t }, s), this;
        }
        getPadding() {
          return this.transform.padding;
        }
        setPadding(t, s) {
          return this.jumpTo({ padding: t }, s), this;
        }
        rotateTo(t, s, h) {
          return this.easeTo(i.l({ bearing: t }, s), h);
        }
        resetNorth(t, s) {
          return this.rotateTo(0, i.l({ duration: 1e3 }, t), s), this;
        }
        resetNorthPitch(t, s) {
          return this.easeTo(i.l({ bearing: 0, pitch: 0, duration: 1e3 }, t), s), this;
        }
        snapToNorth(t, s) {
          return Math.abs(this.getBearing()) < this._bearingSnap ? this.resetNorth(t, s) : this;
        }
        getPitch() {
          return this.transform.pitch;
        }
        setPitch(t, s) {
          return this.jumpTo({ pitch: t }, s), this;
        }
        cameraForBounds(t, s) {
          t = i.az.convert(t);
          const h = s && s.bearing || 0, _ = s && s.pitch || 0, y = t.getNorthWest(), T = t.getSouthEast();
          return this._cameraForBounds(this.transform, y, T, h, _, s);
        }
        _extendPadding(t) {
          const s = { top: 0, right: 0, bottom: 0, left: 0 };
          return t == null ? i.l({}, s, this.transform.padding) : typeof t == "number" ? { top: t, bottom: t, right: t, left: t } : i.l({}, s, t);
        }
        _extendCameraOptions(t) {
          return (t = i.l({ offset: [0, 0], maxZoom: this.transform.maxZoom }, t)).padding = this._extendPadding(t.padding), t;
        }
        _minimumAABBFrustumDistance(t, s) {
          const h = s.max[0] - s.min[0], _ = s.max[1] - s.min[1];
          return h / _ > t.aspect ? h / (2 * Math.tan(0.5 * t.fovX) * t.aspect) : _ / (2 * Math.tan(0.5 * t.fovY) * t.aspect);
        }
        _cameraForBoundsOnGlobe(t, s, h, _, y, T) {
          const z = t.clone(), R = this._extendCameraOptions(T);
          z.bearing = _, z.pitch = y;
          const F = i.bO.convert(s), N = i.bO.convert(h), G = 0.5 * (F.lat + N.lat), Z = 0.5 * (F.lng + N.lng), W = i.dC(G, Z), te = i.ab.vec3.normalize([], W), ee = i.ab.vec3.normalize([], i.ab.vec3.cross([], te, [0, 1, 0])), se = i.ab.vec3.cross([], ee, te), oe = [ee[0], ee[1], ee[2], 0, se[0], se[1], se[2], 0, te[0], te[1], te[2], 0, 0, 0, 0, 1], he = [W, i.dC(F.lat, F.lng), i.dC(N.lat, F.lng), i.dC(N.lat, N.lng), i.dC(F.lat, N.lng), i.dC(G, F.lng), i.dC(G, N.lng), i.dC(F.lat, Z), i.dC(N.lat, Z)];
          let _e = i.cd.fromPoints(he.map((Je) => [i.ab.vec3.dot(ee, Je), i.ab.vec3.dot(se, Je), i.ab.vec3.dot(te, Je)]));
          const pe = i.ab.vec3.transformMat4([], _e.center, oe);
          i.ab.vec3.squaredLength(pe) === 0 && i.ab.vec3.set(pe, 0, 0, 1), i.ab.vec3.normalize(pe, pe), i.ab.vec3.scale(pe, pe, i.ax), z.center = i.dD(pe);
          const Me = z.getWorldToCameraMatrix(), xe = i.ab.mat4.invert(new Float64Array(16), Me);
          _e = i.cd.applyTransform(_e, i.ab.mat4.multiply([], Me, oe));
          const we = this._extendAABB(_e, z, R, _);
          if (!we)
            return void i.w("Map cannot fit within canvas with the given bounds, padding, and/or offset.");
          _e = we, i.ab.vec3.transformMat4(pe, pe, Me);
          const ve = 0.5 * (_e.max[2] - _e.min[2]), Ae = this._minimumAABBFrustumDistance(z, _e), Oe = i.ab.vec3.scale([], [0, 0, 1], ve), Xe = i.ab.vec3.add(Oe, pe, Oe), He = Ae + (z.pitch === 0 ? 0 : i.ab.vec3.distance(pe, Xe)), ke = z.globeCenterInViewSpace, Ne = i.ab.vec3.sub([], pe, [ke[0], ke[1], ke[2]]);
          i.ab.vec3.normalize(Ne, Ne), i.ab.vec3.scale(Ne, Ne, He);
          const st = i.ab.vec3.add([], pe, Ne);
          i.ab.vec3.transformMat4(st, st, xe);
          const ut = i.ds / i.ax, xt = i.ab.vec3.length(st), Ge = i.bH(Math.max(xt * ut - i.ds, Number.EPSILON), 0), lt = Math.min(z.zoomFromMercatorZAdjusted(Ge), R.maxZoom);
          return lt > 0.5 * (i.c6 + i.bY) ? (z.setProjection({ name: "mercator" }), z.zoom = lt, this._cameraForBounds(z, s, h, _, y, T)) : { center: z.center, zoom: lt, bearing: _, pitch: y };
        }
        _extendAABB(t, s, h, _) {
          const y = 0.5 * ((h.padding.left || 0) + (h.padding.right || 0)), T = 0.5 * ((h.padding.top || 0) + (h.padding.bottom || 0)), z = T, R = y, F = y, N = T, G = s.width - (R + F), Z = s.height - (z + N), W = i.ab.vec3.sub([], t.max, t.min), te = Math.min(G / W[0], Z / W[1]), ee = Math.min(s.scaleZoom(s.scale * te), h.maxZoom);
          if (isNaN(ee))
            return null;
          const se = s.scale / s.zoomScale(ee), oe = new i.cd([t.min[0] - R * se, t.min[1] - N * se, t.min[2]], [t.max[0] + F * se, t.max[1] + z * se, t.max[2]]), he = (typeof h.offset.x == "number" && typeof h.offset.y == "number" ? new i.P(h.offset.x, h.offset.y) : i.P.convert(h.offset)).rotate(-i.ai(_));
          return oe.center[0] -= he.x * se, oe.center[1] += he.y * se, oe;
        }
        queryTerrainElevation(t, s) {
          const h = this.transform.elevation;
          return h ? (s = i.l({}, { exaggerated: !0 }, s), h.getAtPoint(i.aa.fromLngLat(t), null, s.exaggerated)) : null;
        }
        _cameraForBounds(t, s, h, _, y, T) {
          if (t.projection.name === "globe")
            return this._cameraForBoundsOnGlobe(t, s, h, _, y, T);
          const z = t.clone(), R = this._extendCameraOptions(T);
          z.bearing = _, z.pitch = y;
          const F = i.bO.convert(s), N = i.bO.convert(h), G = new i.bO(F.lng, N.lat), Z = new i.bO(N.lng, F.lat), W = z.project(F), te = z.project(N), ee = this.queryTerrainElevation(F), se = this.queryTerrainElevation(N), oe = this.queryTerrainElevation(G), he = this.queryTerrainElevation(Z), _e = [[W.x, W.y, Math.min(ee || 0, se || 0, oe || 0, he || 0)], [te.x, te.y, Math.max(ee || 0, se || 0, oe || 0, he || 0)]];
          let pe = i.cd.fromPoints(_e);
          const Me = z.getWorldToCameraMatrix(), xe = i.ab.mat4.invert(new Float64Array(16), Me);
          pe = i.cd.applyTransform(pe, Me);
          const we = this._extendAABB(pe, z, R, _);
          if (!we)
            return void i.w("Map cannot fit within canvas with the given bounds, padding, and/or offset.");
          pe = we;
          const ve = 0.5 * i.ab.vec3.sub([], pe.max, pe.min)[2], Ae = this._minimumAABBFrustumDistance(z, pe), Oe = [0, 0, 1, 0];
          i.ab.vec4.transformMat4(Oe, Oe, Me), i.ab.vec4.normalize(Oe, Oe);
          const Xe = i.ab.vec3.scale([], Oe, Ae + ve), He = i.ab.vec3.add([], pe.center, Xe);
          i.ab.vec3.transformMat4(pe.center, pe.center, xe), i.ab.vec3.transformMat4(He, He, xe);
          const ke = z.unproject(new i.P(pe.center[0], pe.center[1])), Ne = i.dE(z.projection, ke), st = Math.pow(2, Ne), ut = Math.min(z._zoomFromMercatorZ(He[2] * z.pixelsPerMeter * st / z.worldSize), R.maxZoom);
          return z.mercatorFromTransition && ut < 0.5 * (i.c6 + i.bY) ? (z.setProjection({ name: "globe" }), z.zoom = ut, this._cameraForBounds(z, s, h, _, y, T)) : { center: ke, zoom: ut, bearing: _, pitch: y };
        }
        fitBounds(t, s, h) {
          const _ = this.cameraForBounds(t, s);
          return this._fitInternal(_, s, h);
        }
        fitScreenCoordinates(t, s, h, _, y) {
          const T = i.P.convert(t), z = i.P.convert(s), R = new i.P(Math.min(T.x, z.x), Math.min(T.y, z.y)), F = new i.P(Math.max(T.x, z.x), Math.max(T.y, z.y));
          if (this.transform.projection.name === "mercator" && this.transform.anyCornerOffEdge(T, z))
            return this;
          const N = this.transform.pointLocation3D(R), G = this.transform.pointLocation3D(F), Z = this.transform.pointLocation3D(new i.P(R.x, F.y)), W = this.transform.pointLocation3D(new i.P(F.x, R.y)), te = [Math.min(N.lng, G.lng, Z.lng, W.lng), Math.min(N.lat, G.lat, Z.lat, W.lat)], ee = [Math.max(N.lng, G.lng, Z.lng, W.lng), Math.max(N.lat, G.lat, Z.lat, W.lat)], se = _ && _.pitch ? _.pitch : this.getPitch(), oe = this._cameraForBounds(this.transform, te, ee, h, se, _);
          return this._fitInternal(oe, _, y);
        }
        _fitInternal(t, s, h) {
          return t ? (s = i.l(t, s)).linear ? this.easeTo(s, h) : this.flyTo(s, h) : this;
        }
        jumpTo(t, s) {
          this.stop();
          const h = t.preloadOnly ? this.transform.clone() : this.transform;
          let _ = !1, y = !1, T = !1;
          "zoom" in t && h.zoom !== +t.zoom && (_ = !0, h.zoom = +t.zoom), t.center !== void 0 && (h.center = i.bO.convert(t.center)), "bearing" in t && h.bearing !== +t.bearing && (y = !0, h.bearing = +t.bearing), "pitch" in t && h.pitch !== +t.pitch && (T = !0, h.pitch = +t.pitch);
          const z = typeof t.padding == "number" ? this._extendPadding(t.padding) : t.padding;
          if (t.padding != null && !h.isPaddingEqual(z))
            if (t.retainPadding === !1) {
              const R = h.clone();
              R.padding = z, h.setLocationAtPoint(h.center, R.centerPoint);
            } else
              h.padding = z;
          return t.preloadOnly ? (this._preloadTiles(h), this) : (this.fire(new i.z("movestart", s)).fire(new i.z("move", s)), _ && this.fire(new i.z("zoomstart", s)).fire(new i.z("zoom", s)).fire(new i.z("zoomend", s)), y && this.fire(new i.z("rotatestart", s)).fire(new i.z("rotate", s)).fire(new i.z("rotateend", s)), T && this.fire(new i.z("pitchstart", s)).fire(new i.z("pitch", s)).fire(new i.z("pitchend", s)), this.fire(new i.z("moveend", s)));
        }
        getFreeCameraOptions() {
          return this.transform.projection.supportsFreeCamera || i.w(Su), this.transform.getFreeCameraOptions();
        }
        setFreeCameraOptions(t, s) {
          const h = this.transform;
          if (!h.projection.supportsFreeCamera)
            return i.w(Su), this;
          this.stop();
          const _ = h.zoom, y = h.pitch, T = h.bearing;
          h.setFreeCameraOptions(t);
          const z = _ !== h.zoom, R = y !== h.pitch, F = T !== h.bearing;
          return this.fire(new i.z("movestart", s)).fire(new i.z("move", s)), z && this.fire(new i.z("zoomstart", s)).fire(new i.z("zoom", s)).fire(new i.z("zoomend", s)), F && this.fire(new i.z("rotatestart", s)).fire(new i.z("rotate", s)).fire(new i.z("rotateend", s)), R && this.fire(new i.z("pitchstart", s)).fire(new i.z("pitch", s)).fire(new i.z("pitchend", s)), this.fire(new i.z("moveend", s)), this;
        }
        easeTo(t, s) {
          this._stop(!1, t.easeId), ((t = i.l({ offset: [0, 0], duration: 500, easing: i.dA }, t)).animate === !1 || this._prefersReducedMotion(t)) && (t.duration = 0);
          const h = this.transform, _ = this.getZoom(), y = this.getBearing(), T = this.getPitch(), z = this.getPadding(), R = "zoom" in t ? +t.zoom : _, F = "bearing" in t ? this._normalizeBearing(t.bearing, y) : y, N = "pitch" in t ? +t.pitch : T, G = this._extendPadding(t.padding), Z = i.P.convert(t.offset);
          let W, te, ee;
          if (h.projection.name === "globe") {
            const Oe = i.aa.fromLngLat(h.center), Xe = Z.rotate(-h.angle);
            Oe.x += Xe.x / h.worldSize, Oe.y += Xe.y / h.worldSize;
            const He = Oe.toLngLat(), ke = i.bO.convert(t.center || He);
            this._normalizeCenter(ke), W = h.centerPoint.add(Xe), te = new i.P(Oe.x, Oe.y).mult(h.worldSize), ee = new i.P(i.at(ke.lng), i.aA(ke.lat)).mult(h.worldSize).sub(te);
          } else {
            W = h.centerPoint.add(Z);
            const Oe = h.pointLocation(W), Xe = i.bO.convert(t.center || Oe);
            this._normalizeCenter(Xe), te = h.project(Oe), ee = h.project(Xe).sub(te);
          }
          const se = h.zoomScale(R - _);
          let oe, he;
          t.around && (oe = i.bO.convert(t.around), he = h.locationPoint(oe));
          const _e = this._zooming || R !== _, pe = this._rotating || y !== F, Me = this._pitching || N !== T, xe = !h.isPaddingEqual(G), we = t.retainPadding === !1 ? h.clone() : h, ve = (Oe) => (Xe) => {
            if (_e && (Oe.zoom = i.af(_, R, Xe)), pe && (Oe.bearing = i.af(y, F, Xe)), Me && (Oe.pitch = i.af(T, N, Xe)), xe && (we.interpolatePadding(z, G, Xe), W = we.centerPoint.add(Z)), oe)
              Oe.setLocationAtPoint(oe, he);
            else {
              const He = Oe.zoomScale(Oe.zoom - _), ke = R > _ ? Math.min(2, se) : Math.max(0.5, se), Ne = Math.pow(ke, 1 - Xe), st = Oe.unproject(te.add(ee.mult(Xe * Ne)).mult(He));
              Oe.setLocationAtPoint(Oe.renderWorldCopies ? st.wrap() : st, W);
            }
            return t.preloadOnly || this._fireMoveEvents(s), Oe;
          };
          if (t.preloadOnly) {
            const Oe = this._emulate(ve, t.duration, h);
            return this._preloadTiles(Oe), this;
          }
          const Ae = { moving: this._moving, zooming: this._zooming, rotating: this._rotating, pitching: this._pitching };
          return this._zooming = _e, this._rotating = pe, this._pitching = Me, this._padding = xe, this._easeId = t.easeId, this._prepareEase(s, t.noMoveStart, Ae), this._ease(ve(h), (Oe) => {
            h.cameraElevationReference === "sea" && h.recenterOnTerrain(), this._afterEase(s, Oe);
          }, t), this;
        }
        _prepareEase(t, s, h = {}) {
          this._moving = !0, this.transform.cameraElevationReference = "sea", this.transform._orthographicProjectionAtLowPitch && this.transform.pitch === 0 && this.transform.projection.name !== "globe" && (this.transform.cameraElevationReference = "ground"), s || h.moving || this.fire(new i.z("movestart", t)), this._zooming && !h.zooming && this.fire(new i.z("zoomstart", t)), this._rotating && !h.rotating && this.fire(new i.z("rotatestart", t)), this._pitching && !h.pitching && this.fire(new i.z("pitchstart", t));
        }
        _fireMoveEvents(t) {
          this.fire(new i.z("move", t)), this._zooming && this.fire(new i.z("zoom", t)), this._rotating && this.fire(new i.z("rotate", t)), this._pitching && this.fire(new i.z("pitch", t));
        }
        _afterEase(t, s) {
          if (this._easeId && s && this._easeId === s)
            return;
          this._easeId = void 0, this.transform.cameraElevationReference = "ground";
          const h = this._zooming, _ = this._rotating, y = this._pitching;
          this._moving = !1, this._zooming = !1, this._rotating = !1, this._pitching = !1, this._padding = !1, h && this.fire(new i.z("zoomend", t)), _ && this.fire(new i.z("rotateend", t)), y && this.fire(new i.z("pitchend", t)), this.fire(new i.z("moveend", t));
        }
        flyTo(t, s) {
          if (this._prefersReducedMotion(t)) {
            const Je = i.ay(t, ["center", "zoom", "bearing", "pitch", "around", "padding", "retainPadding"]);
            return this.jumpTo(Je, s);
          }
          this.stop(), t = i.l({ offset: [0, 0], speed: 1.2, curve: 1.42, easing: i.dA }, t);
          const h = this.transform, _ = this.getZoom(), y = this.getBearing(), T = this.getPitch(), z = this.getPadding(), R = "zoom" in t ? i.aw(+t.zoom, h.minZoom, h.maxZoom) : _, F = "bearing" in t ? this._normalizeBearing(t.bearing, y) : y, N = "pitch" in t ? +t.pitch : T, G = this._extendPadding(t.padding), Z = h.zoomScale(R - _), W = i.P.convert(t.offset);
          let te = h.centerPoint.add(W);
          const ee = h.pointLocation(te), se = i.bO.convert(t.center || ee);
          this._normalizeCenter(se);
          const oe = h.project(ee), he = h.project(se).sub(oe);
          let _e = t.curve;
          const pe = Math.max(h.width, h.height), Me = pe / Z, xe = he.mag();
          if ("minZoom" in t) {
            const Je = i.aw(Math.min(t.minZoom, _, R), h.minZoom, h.maxZoom), _t = pe / h.zoomScale(Je - _);
            _e = Math.sqrt(_t / xe * 2);
          }
          const we = _e * _e;
          function ve(Je) {
            const _t = (Me * Me - pe * pe + (Je ? -1 : 1) * we * we * xe * xe) / (2 * (Je ? Me : pe) * we * xe);
            return Math.log(Math.sqrt(_t * _t + 1) - _t);
          }
          function Ae(Je) {
            return (Math.exp(Je) - Math.exp(-Je)) / 2;
          }
          function Oe(Je) {
            return (Math.exp(Je) + Math.exp(-Je)) / 2;
          }
          const Xe = ve(0);
          let He = function(Je) {
            return Oe(Xe) / Oe(Xe + _e * Je);
          }, ke = function(Je) {
            return pe * ((Oe(Xe) * (Ae(_t = Xe + _e * Je) / Oe(_t)) - Ae(Xe)) / we) / xe;
            var _t;
          }, Ne = (ve(1) - Xe) / _e;
          if (Math.abs(xe) < 1e-6 || !isFinite(Ne)) {
            if (Math.abs(pe - Me) < 1e-6)
              return this.easeTo(t, s);
            const Je = Me < pe ? -1 : 1;
            Ne = Math.abs(Math.log(Me / pe)) / _e, ke = function() {
              return 0;
            }, He = function(_t) {
              return Math.exp(Je * _e * _t);
            };
          }
          t.duration = "duration" in t ? +t.duration : 1e3 * Ne / ("screenSpeed" in t ? +t.screenSpeed / _e : +t.speed), t.maxDuration && t.duration > t.maxDuration && (t.duration = 0);
          const st = y !== F, ut = N !== T, xt = !h.isPaddingEqual(G), Ge = t.retainPadding === !1 ? h.clone() : h, lt = (Je) => (_t) => {
            const ct = _t * Ne, nt = 1 / He(ct);
            Je.zoom = _t === 1 ? R : _ + Je.scaleZoom(nt), st && (Je.bearing = i.af(y, F, _t)), ut && (Je.pitch = i.af(T, N, _t)), xt && (Ge.interpolatePadding(z, G, _t), te = Ge.centerPoint.add(W));
            const Lt = _t === 1 ? se : Je.unproject(oe.add(he.mult(ke(ct))).mult(nt));
            return Je.setLocationAtPoint(Je.renderWorldCopies ? Lt.wrap() : Lt, te), Je._updateCameraOnTerrain(), t.preloadOnly || this._fireMoveEvents(s), Je;
          };
          if (t.preloadOnly) {
            const Je = this._emulate(lt, t.duration, h);
            return this._preloadTiles(Je), this;
          }
          return this._zooming = !0, this._rotating = st, this._pitching = ut, this._padding = xt, this._prepareEase(s, !1), this._ease(lt(h), () => this._afterEase(s), t), this;
        }
        isEasing() {
          return !!this._easeFrameId;
        }
        stop() {
          return this._stop();
        }
        _requestRenderFrame(t) {
        }
        _cancelRenderFrame(t) {
        }
        _stop(t, s) {
          if (this._easeFrameId && (this._cancelRenderFrame(this._easeFrameId), this._easeFrameId = void 0, this._onEaseFrame = void 0), this._onEaseEnd) {
            const h = this._onEaseEnd;
            this._onEaseEnd = void 0, h.call(this, s);
          }
          if (!t) {
            const h = this.handlers;
            h && h.stop(!1);
          }
          return this;
        }
        _ease(t, s, h) {
          h.animate === !1 || h.duration === 0 ? (t(1), s()) : (this._easeStart = i.q.now(), this._easeOptions = h, this._onEaseFrame = t, this._onEaseEnd = s, this._easeFrameId = this._requestRenderFrame(this._renderFrameCallback));
        }
        _renderFrameCallback() {
          const t = Math.min((i.q.now() - this._easeStart) / this._easeOptions.duration, 1), s = this._onEaseFrame;
          s && s(this._easeOptions.easing(t)), t < 1 ? this._easeFrameId = this._requestRenderFrame(this._renderFrameCallback) : this.stop();
        }
        _normalizeBearing(t, s) {
          t = i.bF(t, -180, 180);
          const h = Math.abs(t - s);
          return Math.abs(t - 360 - s) < h && (t -= 360), Math.abs(t + 360 - s) < h && (t += 360), t;
        }
        _normalizeCenter(t) {
          const s = this.transform;
          if (s.maxBounds || s.projection.name !== "globe" && !s.renderWorldCopies)
            return;
          const h = t.lng - s.center.lng;
          t.lng += h > 180 ? -360 : h < -180 ? 360 : 0;
        }
        _prefersReducedMotion(t) {
          return this._respectPrefersReducedMotion && i.q.prefersReducedMotion && !(t && t.essential);
        }
        _emulate(t, s, h) {
          const _ = Math.ceil(15 * s / 1e3), y = [], T = t(h.clone());
          for (let z = 0; z <= _; z++) {
            const R = T(z / _);
            y.push(R.clone());
          }
          return y;
        }
        _preloadTiles(t, s) {
        }
      }
      class yp {
        constructor(t = {}) {
          this.options = t, i.aP(["_toggleAttribution", "_updateEditLink", "_updateData", "_updateCompact"], this);
        }
        getDefaultPosition() {
          return "bottom-right";
        }
        onAdd(t) {
          const s = this.options && this.options.compact, h = t._getUIString("AttributionControl.ToggleAttribution");
          this._map = t, this._container = be("div", "mapboxgl-ctrl mapboxgl-ctrl-attrib"), this._compactButton = be("button", "mapboxgl-ctrl-attrib-button", this._container), this._compactButton.type = "button", this._compactButton.addEventListener("click", this._toggleAttribution), this._compactButton.setAttribute("aria-label", h);
          const _ = be("span", "mapboxgl-ctrl-icon", this._compactButton);
          return _.setAttribute("aria-hidden", "true"), _.setAttribute("title", h), this._innerContainer = be("div", "mapboxgl-ctrl-attrib-inner", this._container), s && this._container.classList.add("mapboxgl-compact"), this._updateAttributions(), this._updateEditLink(), this._map.on("styledata", this._updateData), this._map.on("sourcedata", this._updateData), this._map.on("moveend", this._updateEditLink), s === void 0 && (this._map.on("resize", this._updateCompact), this._updateCompact()), this._container;
        }
        onRemove() {
          this._container.remove(), this._map.off("styledata", this._updateData), this._map.off("sourcedata", this._updateData), this._map.off("moveend", this._updateEditLink), this._map.off("resize", this._updateCompact), this._map = void 0, this._attribHTML = void 0;
        }
        _toggleAttribution() {
          this._container.classList.contains("mapboxgl-compact-show") ? (this._container.classList.remove("mapboxgl-compact-show"), this._compactButton.setAttribute("aria-expanded", "false")) : (this._container.classList.add("mapboxgl-compact-show"), this._compactButton.setAttribute("aria-expanded", "true"));
        }
        _updateEditLink() {
          let t = this._editLink;
          t || (t = this._editLink = this._container.querySelector(".mapbox-improve-map"));
          const s = [{ key: "owner", value: this.styleOwner }, { key: "id", value: this.styleId }, { key: "access_token", value: this._map._requestManager._customAccessToken || i.e.ACCESS_TOKEN }];
          if (t) {
            const h = s.reduce((_, y, T) => (y.value && (_ += `${y.key}=${y.value}${T < s.length - 1 ? "&" : ""}`), _), "?");
            t.href = `${i.e.FEEDBACK_URL}/${h}#${vu(this._map, !0)}`, t.rel = "noopener nofollow";
          }
        }
        _updateData(t) {
          !t || t.sourceDataType !== "metadata" && t.sourceDataType !== "visibility" && t.dataType !== "style" || (this._updateAttributions(), this._updateEditLink());
        }
        _updateAttributions() {
          if (!this._map.style)
            return;
          let t = [];
          if (this._map.style.stylesheet) {
            const _ = this._map.style.stylesheet;
            this.styleOwner = _.owner, this.styleId = _.id;
          }
          const s = this._map.style._mergedSourceCaches;
          for (const _ in s) {
            const y = s[_];
            if (y.used) {
              const T = y.getSource();
              T.attribution && t.indexOf(T.attribution) < 0 && t.push(T.attribution);
            }
          }
          t.sort((_, y) => _.length - y.length), t = t.filter((_, y) => {
            for (let T = y + 1; T < t.length; T++)
              if (t[T].indexOf(_) >= 0)
                return !1;
            return !0;
          }), this.options.customAttribution && (Array.isArray(this.options.customAttribution) ? t = [...this.options.customAttribution, ...t] : t.unshift(this.options.customAttribution));
          const h = t.join(" | ");
          h !== this._attribHTML && (this._attribHTML = h, t.length ? (this._innerContainer.innerHTML = h, this._container.classList.remove("mapboxgl-attrib-empty")) : this._container.classList.add("mapboxgl-attrib-empty"), this._editLink = null);
        }
        _updateCompact() {
          this._map.getCanvasContainer().offsetWidth <= 640 ? this._container.classList.add("mapboxgl-compact") : this._container.classList.remove("mapboxgl-compact", "mapboxgl-compact-show");
        }
      }
      class Il {
        constructor() {
          i.aP(["_updateLogo", "_updateCompact"], this);
        }
        onAdd(t) {
          this._map = t, this._container = be("div", "mapboxgl-ctrl");
          const s = be("a", "mapboxgl-ctrl-logo");
          return s.target = "_blank", s.rel = "noopener nofollow", s.href = "https://www.mapbox.com/", s.setAttribute("aria-label", this._map._getUIString("LogoControl.Title")), s.setAttribute("rel", "noopener nofollow"), this._container.appendChild(s), this._container.style.display = "none", this._map.on("sourcedata", this._updateLogo), this._updateLogo(), this._map.on("resize", this._updateCompact), this._updateCompact(), this._container;
        }
        onRemove() {
          this._container.remove(), this._map.off("sourcedata", this._updateLogo), this._map.off("resize", this._updateCompact);
        }
        getDefaultPosition() {
          return "bottom-left";
        }
        _updateLogo(t) {
          t && t.sourceDataType !== "metadata" || (this._container.style.display = this._logoRequired() ? "block" : "none");
        }
        _logoRequired() {
          if (!this._map.style)
            return !0;
          const t = this._map.style._sourceCaches;
          if (Object.entries(t).length === 0)
            return !0;
          for (const s in t) {
            const h = t[s].getSource();
            if (h.hasOwnProperty("mapbox_logo") && !h.mapbox_logo)
              return !1;
          }
          return !0;
        }
        _updateCompact() {
          const t = this._container.children;
          if (t.length) {
            const s = t[0];
            this._map.getCanvasContainer().offsetWidth < 250 ? s.classList.add("mapboxgl-compact") : s.classList.remove("mapboxgl-compact");
          }
        }
      }
      class Eu {
        constructor() {
          this._queue = [], this._id = 0, this._cleared = !1, this._currentlyRunning = !1;
        }
        add(t) {
          const s = ++this._id;
          return this._queue.push({ callback: t, id: s, cancelled: !1 }), s;
        }
        remove(t) {
          const s = this._currentlyRunning, h = s ? this._queue.concat(s) : this._queue;
          for (const _ of h)
            if (_.id === t)
              return void (_.cancelled = !0);
        }
        run(t = 0) {
          const s = this._currentlyRunning = this._queue;
          this._queue = [];
          for (const h of s)
            if (!h.cancelled && (h.callback(t), this._cleared))
              break;
          this._cleared = !1, this._currentlyRunning = !1;
        }
        clear() {
          this._currentlyRunning && (this._cleared = !0), this._queue = [];
        }
      }
      class uo {
        constructor(t) {
          this.jumpTo(t);
        }
        getValue(t) {
          if (t <= this._startTime)
            return this._start;
          if (t >= this._endTime)
            return this._end;
          const s = i.cB((t - this._startTime) / (this._endTime - this._startTime));
          return this._start * (1 - s) + this._end * s;
        }
        isEasing(t) {
          return t >= this._startTime && t <= this._endTime;
        }
        jumpTo(t) {
          this._startTime = -1 / 0, this._endTime = -1 / 0, this._start = t, this._end = t;
        }
        easeTo(t, s, h) {
          this._start = this.getValue(s), this._end = t, this._startTime = s, this._endTime = s + h;
        }
      }
      const fo = { "AttributionControl.ToggleAttribution": "Toggle attribution", "FullscreenControl.Enter": "Enter fullscreen", "FullscreenControl.Exit": "Exit fullscreen", "GeolocateControl.FindMyLocation": "Find my location", "GeolocateControl.LocationNotAvailable": "Location not available", "LogoControl.Title": "Mapbox homepage", "Map.Title": "Map", "NavigationControl.ResetBearing": "Reset bearing to north", "NavigationControl.ZoomIn": "Zoom in", "NavigationControl.ZoomOut": "Zoom out", "ScrollZoomBlocker.CtrlMessage": "Use ctrl + scroll to zoom the map", "ScrollZoomBlocker.CmdMessage": "Use ⌘ + scroll to zoom the map", "TouchPanBlocker.Message": "Use two fingers to move the map" }, mc = ["mouseenter", "mouseover", "mouseleave", "mouseout"];
      class el extends i.z {
        constructor(t, s, h, _) {
          const { point: y, lngLat: T, originalEvent: z, target: R } = t;
          super(t.type, { point: y, lngLat: T, originalEvent: z, target: R }), this.preventDefault = () => {
            t.preventDefault();
          }, this.id = s, this.interaction = h, this.feature = _;
        }
      }
      class _c {
        constructor(t) {
          this.map = t, this.interactionsByType = /* @__PURE__ */ new Map(), this.typeById = /* @__PURE__ */ new Map(), this.filters = /* @__PURE__ */ new Map(), this.delegatedHandlers = /* @__PURE__ */ new Map(), this.handleType = this.handleType.bind(this);
        }
        add(t, s) {
          if (this.typeById.has(t))
            throw new Error(`Interaction id "${t}" already exists.`);
          const { type: h, filter: _ } = s;
          _ && this.filters.set(t, i.aZ(_));
          const y = this.interactionsByType.get(h) || /* @__PURE__ */ new Map();
          if (y.size === 0) {
            if (mc.includes(h)) {
              const { mousemove: T, mouseout: z } = this._createDelegatedHandlers(t, s);
              this.map.on("mousemove", T), this.map.on("mouseout", z), this.delegatedHandlers.set(t, { mousemove: T, mouseout: z });
            } else
              this.map.on(h, this.handleType);
            this.interactionsByType.set(h, y);
          }
          y.set(t, s), this.typeById.set(t, h);
        }
        get(t) {
          const s = this.typeById.get(t);
          if (!s)
            return;
          const h = this.interactionsByType.get(s);
          return h ? h.get(t) : void 0;
        }
        remove(t) {
          const s = this.typeById.get(t);
          if (!s)
            return;
          this.typeById.delete(t), this.filters.delete(t);
          const h = this.interactionsByType.get(s);
          if (h) {
            if (h.delete(t), this.delegatedHandlers.has(t)) {
              const { mousemove: _, mouseout: y } = this.delegatedHandlers.get(t);
              this.map.off("mousemove", _), this.map.off("mouseout", y), this.delegatedHandlers.delete(t);
            }
            h.size === 0 && this.map.off(s, this.handleType);
          }
        }
        queryTargets(t, s) {
          const h = [];
          for (const [_, y] of s)
            y.target && h.push({ targetId: _, target: y.target, filter: this.filters.get(_) });
          return this.map.style.queryRenderedTargets(t, h, this.map.transform);
        }
        handleType(t, s) {
          const h = this.interactionsByType.get(t.type), _ = Array.from(h).reverse();
          s = s || this.queryTargets(t.point, _);
          let y = !1;
          for (const T of s) {
            for (const [z, R] of _) {
              if (!R.target)
                continue;
              const F = T.variants ? T.variants[z] : null;
              if (F) {
                for (const N of F) {
                  const G = new i.cw(T, N);
                  if (R.handler(new el(t, z, R, G)) !== !1) {
                    y = !0;
                    break;
                  }
                }
                if (y)
                  break;
              }
            }
            if (y)
              break;
          }
          if (!y)
            for (const [T, z] of _) {
              const { handler: R, target: F } = z;
              if (!F && R(new el(t, T, z, null)) !== !1)
                break;
            }
        }
        _createDelegatedHandlers(t, s) {
          switch (s.type) {
            case "mouseenter":
            case "mouseover": {
              let h = !1, _ = /* @__PURE__ */ new Set();
              return { mousemove: (y) => {
                const T = this.queryTargets(y.point, [[t, s]]), z = /* @__PURE__ */ new Set();
                if (!T.length)
                  return h = !1, void _.clear();
                const R = [];
                for (const F of T)
                  _.has(F.id) || (z.add(F.id), R.push(F));
                h && !R.length || (h = !0, _ = z, y.type = s.type, this.handleType(y, R));
              }, mouseout: () => {
                h = !1, _.clear();
              } };
            }
            case "mouseleave":
            case "mouseout": {
              let h = [];
              return { mousemove: (_) => {
                const y = this.queryTargets(_.point, [[t, s]]);
                if (!y.length)
                  return _.type = s.type, this.handleType(_, h), void (h = y);
                const T = [], z = new Set(y.map((R) => R.id));
                for (const R of h)
                  z.has(R.id) || T.push(R);
                T.length && (_.type = s.type, this.handleType(_, T)), h = y;
              }, mouseout: (_) => {
                h.length && (_.type = s.type, this.handleType(_, h), h = []);
              } };
            }
          }
        }
      }
      function Fd(c, t) {
        if (Array.isArray(c) && Array.isArray(t)) {
          const s = new Set(c), h = new Set(t);
          return s.size === h.size && c.every((_) => h.has(_));
        }
        return i.bn(c, t);
      }
      const Ui = { center: [0, 0], zoom: 0, bearing: 0, pitch: 0, minZoom: -2, maxZoom: 22, minPitch: 0, maxPitch: 85, interactive: !0, scrollZoom: !0, boxZoom: !0, dragRotate: !0, dragPan: !0, keyboard: !0, doubleClickZoom: !0, touchZoomRotate: !0, touchPitch: !0, cooperativeGestures: !1, performanceMetricsCollection: !0, bearingSnap: 7, clickTolerance: 3, pitchWithRotate: !0, hash: !1, attributionControl: !0, antialias: !1, failIfMajorPerformanceCaveat: !1, preserveDrawingBuffer: !1, trackResize: !0, renderWorldCopies: !0, refreshExpiredTiles: !0, minTileCacheSize: null, maxTileCacheSize: null, localIdeographFontFamily: "sans-serif", localFontFamily: null, transformRequest: null, accessToken: null, fadeDuration: 300, respectPrefersReducedMotion: !0, crossSourceCollisions: !0, collectResourceTiming: !1, testMode: !1, precompilePrograms: !0, scaleFactor: 1, spriteFormat: "auto" }, tl = { showCompass: !0, showZoom: !0, visualizePitch: !1 };
      class f_ {
        constructor(t, s, h = !1) {
          this._clickTolerance = 10, this.element = s, this.mouseRotate = new wu({ clickTolerance: t.dragRotate._mouseRotate._clickTolerance }), this.map = t, h && (this.mousePitch = new fh({ clickTolerance: t.dragRotate._mousePitch._clickTolerance })), i.aP(["mousedown", "mousemove", "mouseup", "touchstart", "touchmove", "touchend", "reset"], this), s.addEventListener("mousedown", this.mousedown), s.addEventListener("touchstart", this.touchstart, { passive: !1 }), s.addEventListener("touchmove", this.touchmove), s.addEventListener("touchend", this.touchend), s.addEventListener("touchcancel", this.reset);
        }
        down(t, s) {
          this.mouseRotate.mousedown(t, s), this.mousePitch && this.mousePitch.mousedown(t, s), ht();
        }
        move(t, s) {
          const h = this.map, _ = this.mouseRotate.mousemoveWindow(t, s), y = _ && _.bearingDelta;
          if (y && h.setBearing(h.getBearing() + y), this.mousePitch) {
            const T = this.mousePitch.mousemoveWindow(t, s), z = T && T.pitchDelta;
            z && h.setPitch(h.getPitch() + z);
          }
        }
        off() {
          const t = this.element;
          t.removeEventListener("mousedown", this.mousedown), t.removeEventListener("touchstart", this.touchstart, { passive: !1 }), t.removeEventListener("touchmove", this.touchmove), t.removeEventListener("touchend", this.touchend), t.removeEventListener("touchcancel", this.reset), this.offTemp();
        }
        offTemp() {
          gt(), window.removeEventListener("mousemove", this.mousemove), window.removeEventListener("mouseup", this.mouseup);
        }
        mousedown(t) {
          this.down(i.l({}, t, { ctrlKey: !0, preventDefault: () => t.preventDefault() }), Gt(this.element, t)), window.addEventListener("mousemove", this.mousemove), window.addEventListener("mouseup", this.mouseup);
        }
        mousemove(t) {
          this.move(t, Gt(this.element, t));
        }
        mouseup(t) {
          this.mouseRotate.mouseupWindow(t), this.mousePitch && this.mousePitch.mouseupWindow(t), this.offTemp();
        }
        touchstart(t) {
          t.targetTouches.length !== 1 ? this.reset() : (this._startPos = this._lastPos = ui(this.element, t.targetTouches)[0], this.down({ type: "mousedown", button: 0, ctrlKey: !0, preventDefault: () => t.preventDefault() }, this._startPos));
        }
        touchmove(t) {
          t.targetTouches.length !== 1 ? this.reset() : (this._lastPos = ui(this.element, t.targetTouches)[0], this.move({ preventDefault: () => t.preventDefault() }, this._lastPos));
        }
        touchend(t) {
          t.targetTouches.length === 0 && this._startPos && this._lastPos && this._startPos.dist(this._lastPos) < this._clickTolerance && this.element.click(), this.reset();
        }
        reset() {
          this.mouseRotate.reset(), this.mousePitch && this.mousePitch.reset(), delete this._startPos, delete this._lastPos, this.offTemp();
        }
      }
      function xp(c, t, s) {
        if (c = new i.bO(c.lng, c.lat), t) {
          const h = new i.bO(c.lng - 360, c.lat), _ = new i.bO(c.lng + 360, c.lat), y = 360 * Math.ceil(Math.abs(c.lng - s.center.lng) / 360), T = s.locationPoint(c).distSqr(t), z = t.x < 0 || t.y < 0 || t.x > s.width || t.y > s.height;
          s.locationPoint(h).distSqr(t) < T && (z || Math.abs(h.lng - s.center.lng) < y) ? c = h : s.locationPoint(_).distSqr(t) < T && (z || Math.abs(_.lng - s.center.lng) < y) && (c = _);
        }
        for (; Math.abs(c.lng - s.center.lng) > 180; ) {
          const h = s.locationPoint(c);
          if (h.x >= 0 && h.y >= 0 && h.x <= s.width && h.y <= s.height)
            break;
          c.lng > s.center.lng ? c.lng -= 360 : c.lng += 360;
        }
        return c;
      }
      const gh = { center: "translate(-50%,-50%)", top: "translate(-50%,0)", "top-left": "translate(0,0)", "top-right": "translate(-100%,0)", bottom: "translate(-50%,-100%)", "bottom-left": "translate(0,-100%)", "bottom-right": "translate(-100%,-100%)", left: "translate(0,-50%)", right: "translate(-100%,-50%)" };
      class ta extends i.E {
        constructor(t, s) {
          if (super(), (t instanceof HTMLElement || s) && (t = i.l({ element: t }, s)), i.aP(["_update", "_onMove", "_onUp", "_addDragHandler", "_onMapClick", "_onKeyPress", "_clearFadeTimer"], this), this._anchor = t && t.anchor || "center", this._color = t && t.color || "#3FB1CE", this._scale = t && t.scale || 1, this._draggable = t && t.draggable || !1, this._clickTolerance = t && t.clickTolerance || 0, this._isDragging = !1, this._state = "inactive", this._rotation = t && t.rotation || 0, this._rotationAlignment = t && t.rotationAlignment || "auto", this._pitchAlignment = t && t.pitchAlignment && t.pitchAlignment || "auto", this._updateMoving = () => this._update(!0), this._occludedOpacity = t && t.occludedOpacity || 0.2, t && t.element)
            this._element = t.element, this._offset = i.P.convert(t && t.offset || [0, 0]);
          else {
            this._defaultMarker = !0, this._element = be("div");
            const y = 41, T = 27, z = Ze("svg", { display: "block", height: y * this._scale + "px", width: T * this._scale + "px", viewBox: `0 0 ${T} ${y}` }, this._element), R = Ze("radialGradient", { id: "shadowGradient" }, Ze("defs", {}, z));
            Ze("stop", { offset: "10%", "stop-opacity": 0.4 }, R), Ze("stop", { offset: "100%", "stop-opacity": 0.05 }, R), Ze("ellipse", { cx: 13.5, cy: 34.8, rx: 10.5, ry: 5.25, fill: "url(#shadowGradient)" }, z), Ze("path", { fill: this._color, d: "M27,13.5C27,19.07 20.25,27 14.75,34.5C14.02,35.5 12.98,35.5 12.25,34.5C6.75,27 0,19.22 0,13.5C0,6.04 6.04,0 13.5,0C20.96,0 27,6.04 27,13.5Z" }, z), Ze("path", { opacity: 0.25, d: "M13.5,0C6.04,0 0,6.04 0,13.5C0,19.22 6.75,27 12.25,34.5C13,35.52 14.02,35.5 14.75,34.5C20.25,27 27,19.07 27,13.5C27,6.04 20.96,0 13.5,0ZM13.5,1C20.42,1 26,6.58 26,13.5C26,15.9 24.5,19.18 22.22,22.74C19.95,26.3 16.71,30.14 13.94,33.91C13.74,34.18 13.61,34.32 13.5,34.44C13.39,34.32 13.26,34.18 13.06,33.91C10.28,30.13 7.41,26.31 5.02,22.77C2.62,19.23 1,15.95 1,13.5C1,6.58 6.58,1 13.5,1Z" }, z), Ze("circle", { fill: "white", cx: 13.5, cy: 13.5, r: 5.5 }, z), this._offset = i.P.convert(t && t.offset || [0, -14]);
          }
          this._element.hasAttribute("aria-label") || this._element.setAttribute("aria-label", "Map marker"), this._element.hasAttribute("role") || this._element.setAttribute("role", "img"), this._element.classList.add("mapboxgl-marker"), this._element.addEventListener("dragstart", (y) => {
            y.preventDefault();
          }), this._element.addEventListener("mousedown", (y) => {
            y.preventDefault();
          });
          const h = this._element.classList;
          for (const y in gh)
            h.remove(`mapboxgl-marker-anchor-${y}`);
          h.add(`mapboxgl-marker-anchor-${this._anchor}`);
          const _ = t && t.className ? t.className.trim().split(/\s+/) : [];
          h.add(..._), this._popup = null;
        }
        addTo(t) {
          return t === this._map || (this.remove(), this._map = t, t.getCanvasContainer().appendChild(this._element), t.on("move", this._updateMoving), t.on("moveend", this._update), t.on("remove", this._clearFadeTimer), t._addMarker(this), this.setDraggable(this._draggable), this._update(), t.on("click", this._onMapClick)), this;
        }
        remove() {
          const t = this._map;
          return t && (t.off("click", this._onMapClick), t.off("move", this._updateMoving), t.off("moveend", this._update), t.off("mousedown", this._addDragHandler), t.off("touchstart", this._addDragHandler), t.off("mouseup", this._onUp), t.off("touchend", this._onUp), t.off("mousemove", this._onMove), t.off("touchmove", this._onMove), t.off("remove", this._clearFadeTimer), t._removeMarker(this), this._map = void 0), this._clearFadeTimer(), this._element.remove(), this._popup && this._popup.remove(), this;
        }
        getLngLat() {
          return this._lngLat;
        }
        setLngLat(t) {
          return this._lngLat = i.bO.convert(t), this._pos = null, this._popup && this._popup.setLngLat(this._lngLat), this._update(!0), this;
        }
        getElement() {
          return this._element;
        }
        setPopup(t) {
          if (this._popup && (this._popup.remove(), this._popup = null, this._element.removeAttribute("role"), this._element.removeEventListener("keypress", this._onKeyPress), this._originalTabIndex || this._element.removeAttribute("tabindex")), t) {
            if (!("offset" in t.options)) {
              const _ = Math.sqrt(Math.pow(13.5, 2) / 2);
              t.options.offset = this._defaultMarker ? { top: [0, 0], "top-left": [0, 0], "top-right": [0, 0], bottom: [0, -38.1], "bottom-left": [_, -1 * (38.1 - 13.5 + _)], "bottom-right": [-_, -1 * (38.1 - 13.5 + _)], left: [13.5, -1 * (38.1 - 13.5)], right: [-13.5, -1 * (38.1 - 13.5)] } : this._offset;
            }
            this._popup = t, t._marker = this, this._lngLat && this._popup.setLngLat(this._lngLat), this._element.setAttribute("role", "button"), this._originalTabIndex = this._element.getAttribute("tabindex"), this._originalTabIndex || this._element.setAttribute("tabindex", "0"), this._element.addEventListener("keypress", this._onKeyPress), this._element.setAttribute("aria-expanded", "false");
          }
          return this;
        }
        _onKeyPress(t) {
          const s = t.code, h = t.charCode || t.keyCode;
          s !== "Space" && s !== "Enter" && h !== 32 && h !== 13 || this.togglePopup();
        }
        _onMapClick(t) {
          const s = t.originalEvent.target, h = this._element;
          this._popup && (s === h || h.contains(s)) && this.togglePopup();
        }
        getPopup() {
          return this._popup;
        }
        togglePopup() {
          const t = this._popup;
          return t ? (t.isOpen() ? (t.remove(), this._element.setAttribute("aria-expanded", "false")) : this._map && (t.addTo(this._map), this._element.setAttribute("aria-expanded", "true")), this) : this;
        }
        _behindTerrain() {
          const t = this._map, s = this._pos;
          if (!t || !s)
            return !1;
          const h = t.unproject(s), _ = t.getFreeCameraOptions();
          if (!_.position)
            return !1;
          const y = _.position.toLngLat();
          return y.distanceTo(h) < 0.9 * y.distanceTo(this._lngLat);
        }
        _evaluateOpacity() {
          const t = this._map;
          if (!t)
            return;
          const s = this._pos;
          if (!s || s.x < 0 || s.x > t.transform.width || s.y < 0 || s.y > t.transform.height)
            return void this._clearFadeTimer();
          const h = t.unproject(s);
          let _;
          t._showingGlobe() && i.dH(t.transform, this._lngLat) ? _ = 0 : (_ = 1 - t._queryFogOpacity(h), t.transform._terrainEnabled() && t.getTerrain() && this._behindTerrain() && (_ *= this._occludedOpacity)), this._element.style.opacity = `${_}`, this._element.style.pointerEvents = _ > 0 ? "auto" : "none", this._popup && this._popup._setOpacity(_), this._fadeTimer = null;
        }
        _clearFadeTimer() {
          this._fadeTimer && (clearTimeout(this._fadeTimer), this._fadeTimer = null);
        }
        _updateDOM() {
          const t = this._pos;
          if (!t || !this._map)
            return;
          const s = this._offset.mult(this._scale);
          this._element.style.transform = `
            translate(${t.x}px,${t.y}px)
            ${gh[this._anchor]}
            ${this._calculateXYTransform()} ${this._calculateZTransform()}
            translate(${s.x}px,${s.y}px)
        `;
        }
        _calculateXYTransform() {
          const t = this._pos, s = this._map, h = this.getPitchAlignment();
          if (!s || !t || h !== "map")
            return "";
          if (!s._showingGlobe()) {
            const R = s.getPitch();
            return R ? `rotateX(${R}deg)` : "";
          }
          const _ = i.c4(i.dI(s.transform, this._lngLat)), y = t.sub(i.dJ(s.transform)), T = Math.abs(y.x) + Math.abs(y.y);
          if (T === 0)
            return "";
          const z = _ / T;
          return `rotateX(${-y.y * z}deg) rotateY(${y.x * z}deg)`;
        }
        _calculateZTransform() {
          const t = this._pos, s = this._map;
          if (!s || !t)
            return "";
          let h = 0;
          const _ = this.getRotationAlignment();
          if (_ === "map")
            if (s._showingGlobe()) {
              const y = s.project(new i.bO(this._lngLat.lng, this._lngLat.lat + 1e-3)), T = s.project(new i.bO(this._lngLat.lng, this._lngLat.lat - 1e-3)).sub(y);
              h = i.c4(Math.atan2(T.y, T.x)) - 90;
            } else
              h = -s.getBearing();
          else if (_ === "horizon") {
            const y = i.ac(4, 6, s.getZoom()), T = i.dJ(s.transform);
            T.y += y * s.transform.height;
            const z = t.sub(T), R = i.c4(Math.atan2(z.y, z.x));
            h = (R > 90 ? R - 270 : R + 90) * (1 - y);
          }
          return h += this._rotation, h ? `rotateZ(${h}deg)` : "";
        }
        _update(t) {
          cancelAnimationFrame(this._updateFrameId);
          const s = this._map;
          s && (s.transform.renderWorldCopies && (this._lngLat = xp(this._lngLat, this._pos, s.transform)), this._pos = s.project(this._lngLat), t === !0 ? this._updateFrameId = requestAnimationFrame(() => {
            this._element && this._pos && this._anchor && (this._pos = this._pos.round(), this._updateDOM());
          }) : this._pos = this._pos.round(), s._requestDomTask(() => {
            this._map && (this._element && this._pos && this._anchor && this._updateDOM(), (s._showingGlobe() || s.getTerrain() || s.getFog()) && !this._fadeTimer && (this._fadeTimer = window.setTimeout(this._evaluateOpacity.bind(this), 60)));
          }));
        }
        getOffset() {
          return this._offset;
        }
        setOffset(t) {
          return this._offset = i.P.convert(t), this._update(), this;
        }
        addClassName(t) {
          return this._element.classList.add(t), this;
        }
        removeClassName(t) {
          return this._element.classList.remove(t), this;
        }
        toggleClassName(t) {
          return this._element.classList.toggle(t);
        }
        _onMove(t) {
          const s = this._map;
          if (!s)
            return;
          const h = this._pointerdownPos, _ = this._positionDelta;
          if (h && _) {
            if (!this._isDragging) {
              const y = this._clickTolerance || s._clickTolerance;
              if (t.point.dist(h) < y)
                return;
              this._isDragging = !0;
            }
            this._pos = t.point.sub(_), this._lngLat = s.unproject(this._pos), this.setLngLat(this._lngLat), this._element.style.pointerEvents = "none", this._state === "pending" && (this._state = "active", this.fire(new i.z("dragstart"))), this.fire(new i.z("drag"));
          }
        }
        _onUp() {
          this._element.style.pointerEvents = "auto", this._positionDelta = null, this._pointerdownPos = null, this._isDragging = !1;
          const t = this._map;
          t && (t.off("mousemove", this._onMove), t.off("touchmove", this._onMove)), this._state === "active" && this.fire(new i.z("dragend")), this._state = "inactive";
        }
        _addDragHandler(t) {
          const s = this._map, h = this._pos;
          s && h && this._element.contains(t.originalEvent.target) && (t.preventDefault(), this._positionDelta = t.point.sub(h), this._pointerdownPos = t.point, this._state = "pending", s.on("mousemove", this._onMove), s.on("touchmove", this._onMove), s.once("mouseup", this._onUp), s.once("touchend", this._onUp));
        }
        setDraggable(t) {
          this._draggable = !!t;
          const s = this._map;
          return s && (t ? (s.on("mousedown", this._addDragHandler), s.on("touchstart", this._addDragHandler)) : (s.off("mousedown", this._addDragHandler), s.off("touchstart", this._addDragHandler))), this;
        }
        isDraggable() {
          return this._draggable;
        }
        setRotation(t) {
          return this._rotation = t || 0, this._update(), this;
        }
        getRotation() {
          return this._rotation;
        }
        setRotationAlignment(t) {
          return this._rotationAlignment = t || "auto", this._update(), this;
        }
        getRotationAlignment() {
          return this._rotationAlignment === "auto" || this._rotationAlignment === "horizon" && this._map && !this._map._showingGlobe() ? "viewport" : this._rotationAlignment;
        }
        setPitchAlignment(t) {
          return this._pitchAlignment = t || "auto", this._update(), this;
        }
        getPitchAlignment() {
          return this._pitchAlignment === "auto" ? this.getRotationAlignment() : this._pitchAlignment;
        }
        setOccludedOpacity(t) {
          return this._occludedOpacity = t || 0.2, this._update(), this;
        }
        getOccludedOpacity() {
          return this._occludedOpacity;
        }
      }
      const Ta = { positionOptions: { enableHighAccuracy: !1, maximumAge: 0, timeout: 6e3 }, fitBoundsOptions: { maxZoom: 15 }, trackUserLocation: !1, showAccuracyCircle: !0, showUserLocation: !0, showUserHeading: !1 }, fr = { maxWidth: 100, unit: "metric" }, Fr = { kilometer: "km", meter: "m", mile: "mi", foot: "ft", "nautical-mile": "nm" }, Os = { closeButton: !0, closeOnClick: !0, focusAfterOpen: !0, className: "", maxWidth: "240px" }, vp = ["a[href]", "[tabindex]:not([tabindex='-1'])", "[contenteditable]:not([contenteditable='false'])", "button:not([disabled])", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])"].join(", ");
      function Un(c = new i.P(0, 0), t = "bottom") {
        if (typeof c == "number") {
          const s = Math.round(Math.sqrt(0.5 * Math.pow(c, 2)));
          switch (t) {
            case "top":
              return new i.P(0, c);
            case "top-left":
              return new i.P(s, s);
            case "top-right":
              return new i.P(-s, s);
            case "bottom":
              return new i.P(0, -c);
            case "bottom-left":
              return new i.P(s, -s);
            case "bottom-right":
              return new i.P(-s, -s);
            case "left":
              return new i.P(c, 0);
            case "right":
              return new i.P(-c, 0);
          }
          return new i.P(0, 0);
        }
        return c instanceof i.P || Array.isArray(c) ? i.P.convert(c) : i.P.convert(c[t] || [0, 0]);
      }
      return { version: O, supported: Te.supported, setRTLTextPlugin: i.dK, getRTLTextPluginStatus: i.dL, Map: class extends gp {
        constructor(c) {
          Y.mark(j.create);
          const t = c;
          if ((c = i.l({}, Ui, c)).minZoom != null && c.maxZoom != null && c.minZoom > c.maxZoom)
            throw new Error("maxZoom must be greater than or equal to minZoom");
          if (c.minPitch != null && c.maxPitch != null && c.minPitch > c.maxPitch)
            throw new Error("maxPitch must be greater than or equal to minPitch");
          if (c.minPitch != null && c.minPitch < 0)
            throw new Error("minPitch must be greater than or equal to 0");
          if (c.maxPitch != null && c.maxPitch > 85)
            throw new Error("maxPitch must be less than or equal to 85");
          if (c.antialias && i.dF(window) && (c.antialias = !1, i.w("Antialiasing is disabled for this WebGL context to avoid browser bug: https://github.com/mapbox/mapbox-gl-js/issues/11609")), super(new ma(c.minZoom, c.maxZoom, c.minPitch, c.maxPitch, c.renderWorldCopies), c), this._repaint = !!c.repaint, this._interactive = c.interactive, this._minTileCacheSize = c.minTileCacheSize, this._maxTileCacheSize = c.maxTileCacheSize, this._failIfMajorPerformanceCaveat = c.failIfMajorPerformanceCaveat, this._preserveDrawingBuffer = c.preserveDrawingBuffer, this._antialias = c.antialias, this._trackResize = c.trackResize, this._bearingSnap = c.bearingSnap, this._refreshExpiredTiles = c.refreshExpiredTiles, this._fadeDuration = c.fadeDuration, this._isInitialLoad = !0, this._crossSourceCollisions = c.crossSourceCollisions, this._collectResourceTiming = c.collectResourceTiming, this._language = this._parseLanguage(c.language), this._worldview = c.worldview, this._renderTaskQueue = new Eu(), this._domRenderTaskQueue = new Eu(), this._controls = [], this._markers = [], this._popups = [], this._mapId = i.aV(), this._locale = i.l({}, fo, c.locale), this._clickTolerance = c.clickTolerance, this._cooperativeGestures = c.cooperativeGestures, this._performanceMetricsCollection = c.performanceMetricsCollection, this._tessellationStep = c.tessellationStep, this._containerWidth = 0, this._containerHeight = 0, this._showParseStatus = !0, this._precompilePrograms = c.precompilePrograms, this._scaleFactorChanged = !1, this._averageElevationLastSampledAt = -1 / 0, this._averageElevationExaggeration = 0, this._averageElevation = new uo(0), this._interactionRange = [1 / 0, -1 / 0], this._visibilityHidden = 0, this._useExplicitProjection = !1, this._frameId = 0, this._scaleFactor = c.scaleFactor, this._requestManager = new hn(c.transformRequest, c.accessToken, c.testMode), this._silenceAuthErrors = !!c.testMode, this._contextCreateOptions = c.contextCreateOptions ? { ...c.contextCreateOptions } : {}, typeof c.container == "string") {
            const s = document.getElementById(c.container);
            if (!s)
              throw new Error(`Container '${c.container.toString()}' not found.`);
            this._container = s;
          } else {
            if (!(c.container instanceof HTMLElement))
              throw new Error("Invalid type: 'container' must be a String or HTMLElement.");
            this._container = c.container;
          }
          if (this._container.childNodes.length > 0 && i.w("The map container element should be empty, otherwise the map's interactivity will be negatively impacted. If you want to display a message when WebGL is not supported, use the Mapbox GL Supported plugin instead."), c.maxBounds && this.setMaxBounds(c.maxBounds), this._spriteFormat = c.spriteFormat, i.aP(["_onWindowOnline", "_onWindowResize", "_onVisibilityChange", "_onMapScroll", "_contextLost", "_contextRestored"], this), this._setupContainer(), this._tp || (this._tp = new mu()), this._tp.registerParameter(this, ["Debug"], "showOverdrawInspector"), this._tp.registerParameter(this, ["Debug"], "showTileBoundaries"), this._tp.registerParameter(this, ["Debug"], "showParseStatus"), this._tp.registerParameter(this, ["Debug"], "repaint"), this._tp.registerParameter(this, ["Debug"], "showTileAABBs"), this._tp.registerParameter(this, ["Debug"], "showPadding"), this._tp.registerParameter(this, ["Debug"], "showCollisionBoxes", { noSave: !0 }), this._tp.registerParameter(this.transform, ["Debug"], "freezeTileCoverage", { noSave: !0 }, () => {
            this._update();
          }), this._tp.registerParameter(this, ["Debug", "Wireframe"], "showTerrainWireframe"), this._tp.registerParameter(this, ["Debug", "Wireframe"], "showLayers2DWireframe"), this._tp.registerParameter(this, ["Debug", "Wireframe"], "showLayers3DWireframe"), this._tp.registerParameter(this, ["Scaling"], "_scaleFactor", { min: 0.1, max: 10, step: 0.1 }, () => {
            this.setScaleFactor(this._scaleFactor);
          }), this._setupPainter(), this.painter === void 0)
            throw new Error("Failed to initialize WebGL.");
          if (this.on("move", () => this._update(!1)), this.on("moveend", () => this._update(!1)), this.on("zoom", () => this._update(!0)), this._fullscreenchangeEvent = "onfullscreenchange" in document ? "fullscreenchange" : "webkitfullscreenchange", window.addEventListener("online", this._onWindowOnline, !1), window.addEventListener("resize", this._onWindowResize, !1), window.addEventListener("orientationchange", this._onWindowResize, !1), window.addEventListener(this._fullscreenchangeEvent, this._onWindowResize, !1), window.addEventListener("visibilitychange", this._onVisibilityChange, !1), this.handlers = new dr(this, c), this._localFontFamily = c.localFontFamily, this._localIdeographFontFamily = c.localIdeographFontFamily, (c.style || !c.testMode) && this.setStyle(c.style || i.e.DEFAULT_STYLE, { config: c.config, localFontFamily: this._localFontFamily, localIdeographFontFamily: this._localIdeographFontFamily }), c.projection && this.setProjection(c.projection), this.indoor = new yl(this), c.hash && (this._hash = new zd(typeof c.hash == "string" && c.hash || void 0).addTo(this)), !this._hash || !this._hash._onHashChange()) {
            t.center == null && t.zoom == null || (this.transform._unmodified = !1), this.jumpTo({ center: c.center, zoom: c.zoom, bearing: c.bearing, pitch: c.pitch });
            const s = c.bounds;
            s && (this.resize(), this.fitBounds(s, i.l({}, c.fitBoundsOptions, { duration: 0 })));
          }
          this.resize(), c.attributionControl && this.addControl(new yp({ customAttribution: c.customAttribution })), this._logoControl = new Il(), this.addControl(this._logoControl, c.logoPosition), this.on("style.load", () => {
            this.transform.unmodified && this.jumpTo(this.style.stylesheet), this._postStyleLoadEvent();
          }), this.on("data", (s) => {
            this._update(s.dataType === "style"), this.fire(new i.z(`${s.dataType}data`, s));
          }), this.on("dataloading", (s) => {
            this.fire(new i.z(`${s.dataType}dataloading`, s));
          }), this._interactions = new _c(this);
        }
        _getMapId() {
          return this._mapId;
        }
        addControl(c, t) {
          if (t === void 0 && (t = c.getDefaultPosition ? c.getDefaultPosition() : "top-right"), !c || !c.onAdd)
            return this.fire(new i.y(new Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.")));
          const s = c.onAdd(this);
          this._controls.push(c);
          const h = this._controlPositions[t];
          return t.indexOf("bottom") !== -1 ? h.insertBefore(s, h.firstChild) : h.appendChild(s), this;
        }
        removeControl(c) {
          if (!c || !c.onRemove)
            return this.fire(new i.y(new Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.")));
          const t = this._controls.indexOf(c);
          return t > -1 && this._controls.splice(t, 1), c.onRemove(this), this;
        }
        hasControl(c) {
          return this._controls.indexOf(c) > -1;
        }
        getContainer() {
          return this._container;
        }
        getCanvasContainer() {
          return this._canvasContainer;
        }
        getCanvas() {
          return this._canvas;
        }
        resize(c) {
          if (this._updateContainerDimensions(), this._containerWidth === this.transform.width && this._containerHeight === this.transform.height)
            return this;
          this._resizeCanvas(this._containerWidth, this._containerHeight), this.transform.resize(this._containerWidth, this._containerHeight), this.painter.resize(Math.ceil(this._containerWidth), Math.ceil(this._containerHeight));
          const t = !this._moving;
          return t && this.fire(new i.z("movestart", c)).fire(new i.z("move", c)), this.fire(new i.z("resize", c)), t && this.fire(new i.z("moveend", c)), this;
        }
        getBounds() {
          return this.transform.getBounds();
        }
        getMaxBounds() {
          return this.transform.getMaxBounds() || null;
        }
        setMaxBounds(c) {
          return this.transform.setMaxBounds(i.az.convert(c)), this._update();
        }
        setMinZoom(c) {
          if ((c = c ?? -2) >= -2 && c <= this.transform.maxZoom)
            return this.transform.minZoom = c, this._update(), this.getZoom() < c ? this.setZoom(c) : this.fire(new i.z("zoomstart")).fire(new i.z("zoom")).fire(new i.z("zoomend")), this;
          throw new Error("minZoom must be between -2 and the current maxZoom, inclusive");
        }
        getMinZoom() {
          return this.transform.minZoom;
        }
        setMaxZoom(c) {
          if ((c = c ?? 22) >= this.transform.minZoom)
            return this.transform.maxZoom = c, this._update(), this.getZoom() > c ? this.setZoom(c) : this.fire(new i.z("zoomstart")).fire(new i.z("zoom")).fire(new i.z("zoomend")), this;
          throw new Error("maxZoom must be greater than the current minZoom");
        }
        getMaxZoom() {
          return this.transform.maxZoom;
        }
        setMinPitch(c) {
          if ((c = c ?? 0) < 0)
            throw new Error("minPitch must be greater than or equal to 0");
          if (c >= 0 && c <= this.transform.maxPitch)
            return this.transform.minPitch = c, this._update(), this.getPitch() < c ? this.setPitch(c) : this.fire(new i.z("pitchstart")).fire(new i.z("pitch")).fire(new i.z("pitchend")), this;
          throw new Error("minPitch must be between 0 and the current maxPitch, inclusive");
        }
        getMinPitch() {
          return this.transform.minPitch;
        }
        setMaxPitch(c) {
          if ((c = c ?? 85) > 85)
            throw new Error("maxPitch must be less than or equal to 85");
          if (c >= this.transform.minPitch)
            return this.transform.maxPitch = c, this._update(), this.getPitch() > c ? this.setPitch(c) : this.fire(new i.z("pitchstart")).fire(new i.z("pitch")).fire(new i.z("pitchend")), this;
          throw new Error("maxPitch must be greater than or equal to minPitch");
        }
        getMaxPitch() {
          return this.transform.maxPitch;
        }
        getScaleFactor() {
          return this._scaleFactor;
        }
        setScaleFactor(c) {
          return this._scaleFactor = c, this.painter.scaleFactor = c, this._tp.refreshUI(), this._scaleFactorChanged = !0, this.style._updateFilteredLayers((t) => t.type === "symbol"), this._update(!0), this;
        }
        getRenderWorldCopies() {
          return this.transform.renderWorldCopies;
        }
        setRenderWorldCopies(c) {
          return this.transform.renderWorldCopies = c, this.transform.renderWorldCopies || this._forceMarkerAndPopupUpdate(!0), this._update();
        }
        getLanguage() {
          return this._language;
        }
        _parseLanguage(c) {
          return c === "auto" ? navigator.language : Array.isArray(c) ? c.length === 0 ? void 0 : c.map((t) => t === "auto" ? navigator.language : t) : c;
        }
        setLanguage(c) {
          const t = this._parseLanguage(c);
          if (!this.style || t === this._language)
            return this;
          this._language = t, this.style.reloadSources();
          for (const s of this._controls)
            s._setLanguage && s._setLanguage(this._language);
          return this;
        }
        getWorldview() {
          return this._worldview;
        }
        setWorldview(c) {
          return this.style && c !== this._worldview ? (this._worldview = c, this.style.reloadSources(), this) : this;
        }
        getProjection() {
          return this.transform.mercatorFromTransition ? { name: "globe", center: [0, 0] } : this.transform.getProjection();
        }
        _showingGlobe() {
          return this.transform.projection.name === "globe";
        }
        setProjection(c) {
          return this._lazyInitEmptyStyle(), c ? typeof c == "string" && (c = { name: c }) : c = null, this._useExplicitProjection = !!c, this._prioritizeAndUpdateProjection(c, this.style.projection);
        }
        _updateProjectionTransition() {
          if (this.getProjection().name !== "globe")
            return;
          const c = this.transform, t = c.projection.name;
          let s;
          t === "globe" && c.zoom >= i.bY ? (c.setMercatorFromTransition(), s = !0) : t === "mercator" && c.zoom < i.bY && (c.setProjection({ name: "globe" }), s = !0), s && (this.style.applyProjectionUpdate(), this.style._forceSymbolLayerUpdate());
        }
        _prioritizeAndUpdateProjection(c, t) {
          return this._updateProjection(c || t || { name: "mercator" });
        }
        _updateProjection(c) {
          let t;
          return t = c.name === "globe" && this.transform.zoom >= i.bY ? this.transform.setMercatorFromTransition() : this.transform.setProjection(c), this.style.applyProjectionUpdate(), t && (this.painter.clearBackgroundTiles(), this.style.clearSources(), this._update(!0), this._forceMarkerAndPopupUpdate(!0)), this;
        }
        project(c) {
          return this.transform.locationPoint3D(i.bO.convert(c));
        }
        unproject(c) {
          return this.transform.pointLocation3D(i.P.convert(c));
        }
        isMoving() {
          return this._moving || this.handlers && this.handlers.isMoving() || !1;
        }
        isZooming() {
          return this._zooming || this.handlers && this.handlers.isZooming() || !1;
        }
        isRotating() {
          return this._rotating || this.handlers && this.handlers.isRotating() || !1;
        }
        _isDragging() {
          return this.handlers && this.handlers._isDragging() || !1;
        }
        _createDelegatedListener(c, t, s) {
          const h = (_) => {
            let y = [];
            if (Array.isArray(t)) {
              const T = t.filter((z) => this.getLayer(z));
              y = T.length ? this.queryRenderedFeatures(_, { layers: T }) : [];
            } else
              y = this.queryRenderedFeatures(_, { target: t });
            return y;
          };
          if (c === "mouseenter" || c === "mouseover") {
            let _ = !1;
            return { listener: s, targets: t, delegates: { mousemove: (T) => {
              const z = h(T.point);
              z.length ? _ || (_ = !0, s.call(this, new Or(c, this, T.originalEvent, { features: z }))) : _ = !1;
            }, mouseout: () => {
              _ = !1;
            } } };
          }
          if (c === "mouseleave" || c === "mouseout") {
            let _ = !1;
            return { listener: s, targets: t, delegates: { mousemove: (z) => {
              h(z.point).length ? _ = !0 : _ && (_ = !1, s.call(this, new Or(c, this, z.originalEvent)));
            }, mouseout: (z) => {
              _ && (_ = !1, s.call(this, new Or(c, this, z.originalEvent)));
            } } };
          }
          {
            const _ = (y) => {
              const T = h(y.point);
              T.length && (y.features = T, s.call(this, y), delete y.features);
            };
            return { listener: s, targets: t, delegates: { [c]: _ } };
          }
        }
        on(c, t, s) {
          if (typeof t == "function" || s === void 0)
            return super.on(c, t);
          if (typeof t == "string" && (t = [t]), !this._areTargetsValid(t))
            return this;
          const h = this._createDelegatedListener(c, t, s);
          this._delegatedListeners = this._delegatedListeners || {}, this._delegatedListeners[c] = this._delegatedListeners[c] || [], this._delegatedListeners[c].push(h);
          for (const _ in h.delegates)
            this.on(_, h.delegates[_]);
          return this;
        }
        once(c, t, s) {
          if (typeof t == "function" || s === void 0)
            return super.once(c, t);
          if (typeof t == "string" && (t = [t]), !this._areTargetsValid(t))
            return this;
          const h = this._createDelegatedListener(c, t, s);
          for (const _ in h.delegates)
            this.once(_, h.delegates[_]);
          return this;
        }
        off(c, t, s) {
          if (typeof t == "function" || s === void 0)
            return super.off(c, t);
          if (typeof t == "string" && (t = [t]), !this._areTargetsValid(t))
            return this;
          const h = this._delegatedListeners ? this._delegatedListeners[c] : void 0;
          return h && ((_) => {
            for (let y = 0; y < _.length; y++) {
              const T = _[y];
              if (T.listener === s && Fd(T.targets, t)) {
                for (const z in T.delegates)
                  this.off(z, T.delegates[z]);
                return _.splice(y, 1), this;
              }
            }
          })(h), this;
        }
        queryRenderedFeatures(c, t) {
          if (!this.style)
            return [];
          if (c === void 0 || c instanceof i.P || Array.isArray(c) || t !== void 0 || (t = c, c = void 0), c = c || [[0, 0], [this.transform.width, this.transform.height]], !t) {
            const y = this.style.queryRenderedFeatures(c, void 0, this.transform), T = this.style.queryRenderedFeatureset(c, void 0, this.transform);
            return y.concat(T);
          }
          let s = !0;
          if (t.target && (s = this._isTargetValid(t.target), s && !t.layers))
            return this.style.queryRenderedFeatureset(c, t, this.transform);
          let h = !0;
          if (t.layers && Array.isArray(t.layers)) {
            for (const y of t.layers)
              if (!this._isValidId(y)) {
                h = !1;
                break;
              }
            if (h && !t.target)
              return this.style.queryRenderedFeatures(c, t, this.transform);
          }
          let _ = [];
          return h && (_ = _.concat(this.style.queryRenderedFeatures(c, t, this.transform))), s && (_ = _.concat(this.style.queryRenderedFeatureset(c, t, this.transform))), _;
        }
        querySourceFeatures(c, t) {
          return !c || typeof c == "string" && !this._isValidId(c) ? [] : this.style.querySourceFeatures(c, t);
        }
        isPointOnSurface(c) {
          const { name: t } = this.transform.projection;
          return t !== "globe" && t !== "mercator" && i.w(`${t} projection does not support isPointOnSurface, this API may behave unexpectedly.`), this.transform.isPointOnSurface(i.P.convert(c));
        }
        addInteraction(c, t) {
          return this._interactions.add(c, t), this;
        }
        removeInteraction(c) {
          return this._interactions.remove(c), this;
        }
        setStyle(c, t) {
          return t = i.l({}, { localIdeographFontFamily: this._localIdeographFontFamily, localFontFamily: this._localFontFamily }, t), this.style && c && t.diff !== !1 && t.localFontFamily === this._localFontFamily && t.localIdeographFontFamily === this._localIdeographFontFamily && !t.config ? (this.style._diffStyle(c, (s, h) => {
            s ? (i.w(`Unable to perform style diff: ${String(s.message || s.error || s)}. Rebuilding the style from scratch.`), this._updateStyle(c, t)) : h && this._update(!0);
          }, () => {
            this._postStyleLoadEvent();
          }), this) : (this._localIdeographFontFamily = t.localIdeographFontFamily, this._localFontFamily = t.localFontFamily, this._updateStyle(c, t));
        }
        _getUIString(c) {
          const t = this._locale[c];
          if (t == null)
            throw new Error(`Missing UI string '${c}'`);
          return t;
        }
        _updateStyle(c, t) {
          if (this.style && (this.style.setEventedParent(null), this.style._remove(), this.style = void 0), c) {
            const s = i.l({}, t);
            t && t.config && (s.initialConfig = t.config, delete s.config), this.style = new hr(this, s).load(c), this.style.setEventedParent(this, { style: this.style });
          }
          return this._updateTerrain(), this;
        }
        _lazyInitEmptyStyle() {
          this.style || (this.style = new hr(this, {}), this.style.setEventedParent(this, { style: this.style }), this.style.loadEmpty());
        }
        getStyle() {
          if (this.style)
            return this.style.serialize();
        }
        isStyleLoaded() {
          return this.style ? this.style.loaded() : (i.w("There is no style added to the map."), !1);
        }
        _isValidId(c) {
          return c == null ? (this.fire(new i.y(new Error("IDs can't be empty."))), !1) : !i.cr(c) || (this.fire(new i.y(new Error(`IDs can't contain special symbols: "${c}".`))), !1);
        }
        _isTargetValid(c) {
          return "featuresetId" in c ? this._isValidId("importId" in c ? c.importId : c.featuresetId) : "layerId" in c && this._isValidId(c.layerId);
        }
        _areTargetsValid(c) {
          if (Array.isArray(c)) {
            for (const t of c)
              if (!this._isValidId(t))
                return !1;
            return !0;
          }
          return this._isTargetValid(c);
        }
        addSource(c, t) {
          return this._isValidId(c) ? (this._lazyInitEmptyStyle(), this.style.addSource(c, t), this._update(!0)) : this;
        }
        isSourceLoaded(c) {
          return !!this._isValidId(c) && !!this.style && this.style._isSourceCacheLoaded(c);
        }
        areTilesLoaded() {
          return this.style.areTilesLoaded();
        }
        addSourceType(c, t, s) {
          this._lazyInitEmptyStyle(), this.style.addSourceType(c, t, s);
        }
        removeSource(c) {
          return this._isValidId(c) ? (this.style.removeSource(c), this._updateTerrain(), this._update(!0)) : this;
        }
        getSource(c) {
          return this._isValidId(c) ? this.style.getOwnSource(c) : null;
        }
        addImage(c, t, { pixelRatio: s = 1, sdf: h = !1, stretchX: _, stretchY: y, content: T } = {}) {
          if (this._lazyInitEmptyStyle(), t instanceof HTMLImageElement || ImageBitmap && t instanceof ImageBitmap) {
            const { width: z, height: R, data: F } = i.q.getImageData(t);
            this.style.addImage(c, { data: new i.r({ width: z, height: R }, F), pixelRatio: s, stretchX: _, stretchY: y, content: T, sdf: h, version: 0, usvg: !1 });
          } else if (t.width === void 0 || t.height === void 0)
            this.fire(new i.y(new Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));
          else {
            const { width: z, height: R } = t, F = t;
            this.style.addImage(c, { data: new i.r({ width: z, height: R }, new Uint8Array(F.data)), pixelRatio: s, stretchX: _, stretchY: y, content: T, sdf: h, usvg: !1, version: 0, userImage: F }), F.onAdd && F.onAdd(this, c);
          }
        }
        updateImage(c, t) {
          this._lazyInitEmptyStyle();
          const s = this.style.getImage(c);
          if (!s)
            return void this.fire(new i.y(new Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.")));
          const h = t instanceof HTMLImageElement || ImageBitmap && t instanceof ImageBitmap ? i.q.getImageData(t) : t, { width: _, height: y, data: T } = h;
          if (_ === void 0 || y === void 0)
            return void this.fire(new i.y(new Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));
          if (_ !== (s.usvg ? s.icon.usvg_tree.width : s.data.width) || y !== (s.usvg ? s.icon.usvg_tree.height : s.data.height))
            return void this.fire(new i.y(new Error(`The width and height of the updated image (${_}, ${y})
                must be that same as the previous version of the image
                (${s.data.width}, ${s.data.height})`)));
          const z = !(t instanceof HTMLImageElement || ImageBitmap && t instanceof ImageBitmap);
          let R = !1;
          s.usvg ? (s.data = new i.r({ width: _, height: y }, new Uint8Array(T)), s.usvg = !1, s.icon = void 0, R = !0) : s.data.replace(T, z), this.style.updateImage(c, s, R);
        }
        hasImage(c) {
          return c ? !!this.style && !!this.style.getImage(c) : (this.fire(new i.y(new Error("Missing required image id"))), !1);
        }
        removeImage(c) {
          this.style.removeImage(c);
        }
        loadImage(c, t) {
          i.o(this._requestManager.transformRequest(c, i.R.Image), (s, h) => {
            t(s, h instanceof HTMLImageElement ? i.q.getImageData(h) : h);
          });
        }
        listImages() {
          return this.style.listImages();
        }
        addModel(c, t) {
          this._lazyInitEmptyStyle(), this.style.addModel(c, t);
        }
        hasModel(c) {
          return c ? this.style.hasModel(c) : (this.fire(new i.y(new Error("Missing required model id"))), !1);
        }
        removeModel(c) {
          this.style.removeModel(c);
        }
        listModels() {
          return this.style.listModels();
        }
        addLayer(c, t) {
          return this._isValidId(c.id) ? (this._lazyInitEmptyStyle(), this.style.addLayer(c, t), this._update(!0)) : this;
        }
        getSlot(c) {
          const t = this.getLayer(c);
          return t && t.slot || null;
        }
        setSlot(c, t) {
          return this.style.setSlot(c, t), this.style.mergeLayers(), this._update(!0);
        }
        addImport(c, t) {
          return this.style.addImport(c, t), this;
        }
        updateImport(c, t) {
          return typeof t != "string" && t.id !== c ? (this.removeImport(c), this.addImport(t)) : (this.style.updateImport(c, t), this._update(!0));
        }
        removeImport(c) {
          return this.style.removeImport(c), this;
        }
        moveImport(c, t) {
          return this.style.moveImport(c, t), this._update(!0);
        }
        moveLayer(c, t) {
          return this._isValidId(c) ? (this.style.moveLayer(c, t), this._update(!0)) : this;
        }
        removeLayer(c) {
          return this._isValidId(c) ? (this.style.removeLayer(c), this._update(!0)) : this;
        }
        getLayer(c) {
          if (!this._isValidId(c))
            return null;
          const t = this.style.getOwnLayer(c);
          return t ? t.type === "custom" ? t.implementation : t.serialize() : void 0;
        }
        getSlots() {
          return this.style.getSlots();
        }
        setLayerZoomRange(c, t, s) {
          return this._isValidId(c) ? (this.style.setLayerZoomRange(c, t, s), this._update(!0)) : this;
        }
        setFilter(c, t, s = {}) {
          return this._isValidId(c) ? (this.style.setFilter(c, t, s), this._update(!0)) : this;
        }
        getFilter(c) {
          return this._isValidId(c) ? this.style.getFilter(c) : null;
        }
        setPaintProperty(c, t, s, h = {}) {
          return this._isValidId(c) ? (this.style.setPaintProperty(c, t, s, h), this._update(!0)) : this;
        }
        getPaintProperty(c, t) {
          return this._isValidId(c) ? this.style.getPaintProperty(c, t) : null;
        }
        setLayoutProperty(c, t, s, h = {}) {
          return this._isValidId(c) ? (this.style.setLayoutProperty(c, t, s, h), this._update(!0)) : this;
        }
        getLayoutProperty(c, t) {
          return this._isValidId(c) ? this.style.getLayoutProperty(c, t) : null;
        }
        getSchema(c) {
          return this.style.getSchema(c);
        }
        setSchema(c, t) {
          return this.style.setSchema(c, t), this._update(!0);
        }
        getConfig(c) {
          return this.style.getConfig(c);
        }
        setConfig(c, t) {
          return this.style.setConfig(c, t), this._update(!0);
        }
        getConfigProperty(c, t) {
          return this.style.getConfigProperty(c, t);
        }
        setConfigProperty(c, t, s) {
          return this.style.setConfigProperty(c, t, s), this._update(!0);
        }
        getFeaturesetDescriptors(c) {
          return this.style.getFeaturesetDescriptors(c);
        }
        setLights(c) {
          if (this._lazyInitEmptyStyle(), c && c.length === 1 && c[0].type === "flat") {
            const t = c[0];
            t.properties ? this.style.setFlatLight(t.properties, t.id, {}) : this.style.setFlatLight({}, "flat");
          } else
            this.style.setLights(c), this.painter.terrain && (this.painter.terrain.invalidateRenderCache = !0);
          return this._update(!0);
        }
        getLights() {
          const c = this.style.getLights() || [];
          return c.length === 0 && c.push({ id: this.style.light.id, type: "flat", properties: this.style.getFlatLight() }), c;
        }
        setLight(c, t = {}) {
          return console.log("The `map.setLight` function is deprecated, prefer using `map.setLights` with `flat` light type instead."), this.setLights([{ id: "flat", type: "flat", properties: c }]);
        }
        getLight() {
          return console.log("The `map.getLight` function is deprecated, prefer using `map.getLights` instead."), this.style.getFlatLight();
        }
        setTerrain(c) {
          return this._lazyInitEmptyStyle(), !c && this.transform.projection.requiresDraping ? this.style.setTerrainForDraping() : this.style.setTerrain(c), this._averageElevationLastSampledAt = -1 / 0, this._update(!0);
        }
        getTerrain() {
          return this.style ? this.style.getTerrain() : null;
        }
        setFog(c) {
          return this._lazyInitEmptyStyle(), this.style.setFog(c), this._update(!0);
        }
        getFog() {
          return this.style ? this.style.getFog() : null;
        }
        setSnow(c) {
          return this._lazyInitEmptyStyle(), this.style.setSnow(c), this._update(!0);
        }
        getSnow() {
          return this.style ? this.style.getSnow() : null;
        }
        setRain(c) {
          return this._lazyInitEmptyStyle(), this.style.setRain(c), this._update(!0);
        }
        getRain() {
          return this.style ? this.style.getRain() : null;
        }
        setColorTheme(c) {
          return this._lazyInitEmptyStyle(), this.style.setColorTheme(c), this._update(!0);
        }
        setImportColorTheme(c, t) {
          return this._lazyInitEmptyStyle(), this.style.setImportColorTheme(c, t), this._update(!0);
        }
        setCamera(c) {
          return this.style.setCamera(c), this._triggerCameraUpdate(c);
        }
        _triggerCameraUpdate(c) {
          return this._update(this.transform.setOrthographicProjectionAtLowPitch(c["camera-projection"] === "orthographic"));
        }
        getCamera() {
          return this.style.camera;
        }
        _queryFogOpacity(c) {
          return this.style && this.style.fog ? this.style.fog.getOpacityAtLatLng(i.bO.convert(c), this.transform) : 0;
        }
        setFeatureState(c, t) {
          return c.source && !this._isValidId(c.source) ? this : (this.style.setFeatureState(c, t), this._update());
        }
        removeFeatureState(c, t) {
          return c.source && !this._isValidId(c.source) ? this : (this.style.removeFeatureState(c, t), this._update());
        }
        getFeatureState(c) {
          return c.source && !this._isValidId(c.source) ? null : this.style.getFeatureState(c);
        }
        _updateContainerDimensions() {
          if (!this._container)
            return;
          const c = this._container.getBoundingClientRect().width || 400, t = this._container.getBoundingClientRect().height || 300;
          let s, h, _, y = this._container;
          for (; y && (!h || !_); ) {
            const T = window.getComputedStyle(y).transform;
            T && T !== "none" && (s = T.match(/matrix.*\((.+)\)/)[1].split(", "), s[0] && s[0] !== "0" && s[0] !== "1" && (h = s[0]), s[3] && s[3] !== "0" && s[3] !== "1" && (_ = s[3])), y = y.parentElement;
          }
          this._containerWidth = h ? Math.abs(c / h) : c, this._containerHeight = _ ? Math.abs(t / _) : t;
        }
        _detectMissingCSS() {
          window.getComputedStyle(this._missingCSSCanary).getPropertyValue("background-color") !== "rgb(250, 128, 114)" && i.w("This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.");
        }
        _setupContainer() {
          const c = this._container;
          c.classList.add("mapboxgl-map"), (this._missingCSSCanary = be("div", "mapboxgl-canary", c)).style.visibility = "hidden", this._detectMissingCSS();
          const t = this._canvasContainer = be("div", "mapboxgl-canvas-container", c);
          this._canvas = be("canvas", "mapboxgl-canvas", t), this._interactive && (t.classList.add("mapboxgl-interactive"), this._canvas.setAttribute("tabindex", "0")), this._canvas.addEventListener("webglcontextlost", this._contextLost, !1), this._canvas.addEventListener("webglcontextrestored", this._contextRestored, !1), this._canvas.setAttribute("aria-label", this._getUIString("Map.Title")), this._canvas.setAttribute("role", "region"), this._updateContainerDimensions(), this._resizeCanvas(this._containerWidth, this._containerHeight);
          const s = this._controlContainer = be("div", "mapboxgl-control-container", c), h = this._controlPositions = {};
          ["top-left", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left"].forEach((_) => {
            h[_] = be("div", `mapboxgl-ctrl-${_}`, s);
          }), this._container.addEventListener("scroll", this._onMapScroll, !1);
        }
        _resizeCanvas(c, t) {
          const s = i.q.devicePixelRatio || 1;
          this._canvas.width = s * Math.ceil(c), this._canvas.height = s * Math.ceil(t), this._canvas.style.width = `${c}px`, this._canvas.style.height = `${t}px`;
        }
        _addMarker(c) {
          this._markers.push(c);
        }
        _removeMarker(c) {
          const t = this._markers.indexOf(c);
          t !== -1 && this._markers.splice(t, 1);
        }
        _addPopup(c) {
          this._popups.push(c);
        }
        _removePopup(c) {
          const t = this._popups.indexOf(c);
          t !== -1 && this._popups.splice(t, 1);
        }
        _setupPainter() {
          const c = i.l({}, Te.supported.webGLContextAttributes, { failIfMajorPerformanceCaveat: this._failIfMajorPerformanceCaveat, preserveDrawingBuffer: this._preserveDrawingBuffer, antialias: this._antialias || !1 }), t = this._canvas.getContext("webgl2", c);
          t ? (Us(t, !0), this.painter = new Ld(t, this._contextCreateOptions, this.transform, this._scaleFactor, this._tp), this.on("data", (s) => {
            s.dataType === "source" && this.painter.setTileLoadedFlag(!0);
          }), i.m.testSupport(t)) : this.fire(new i.y(new Error("Failed to initialize WebGL")));
        }
        _contextLost(c) {
          c.preventDefault(), this._frame && (this._frame.cancel(), this._frame = null), this.fire(new i.z("webglcontextlost", { originalEvent: c }));
        }
        _contextRestored(c) {
          this._setupPainter(), this.resize(), this._update(), this.fire(new i.z("webglcontextrestored", { originalEvent: c }));
        }
        _onMapScroll(c) {
          if (c.target === this._container)
            return this._container.scrollTop = 0, this._container.scrollLeft = 0, !1;
        }
        idle() {
          return !this.isMoving() && this.loaded();
        }
        loaded() {
          return !this._styleDirty && !this._sourcesDirty && !!this.style && this.style.loaded();
        }
        frameReady() {
          return this.loaded() && !this._placementDirty;
        }
        _update(c) {
          return this.style ? (this._styleDirty = this._styleDirty || c, this._sourcesDirty = !0, this.triggerRepaint(), this) : this;
        }
        _requestRenderFrame(c) {
          return this._update(), this._renderTaskQueue.add(c);
        }
        _cancelRenderFrame(c) {
          this._renderTaskQueue.remove(c);
        }
        _requestDomTask(c) {
          !this.loaded() || this.loaded() && !this.isMoving() ? c() : this._domRenderTaskQueue.add(c);
        }
        _render(c) {
          let t;
          this.fire(new i.z("renderstart")), ++this._frameId;
          const s = this.painter.context.extTimerQuery, h = i.q.now(), _ = this.painter.context.gl;
          if (this.listens("gpu-timing-frame") && (t = _.createQuery(), _.beginQuery(s.TIME_ELAPSED_EXT, t)), this.painter.context.setDirty(), this.painter.setBaseState(), (this.isMoving() || this.isRotating() || this.isZooming()) && (this._interactionRange[0] = Math.min(this._interactionRange[0], performance.now()), this._interactionRange[1] = Math.max(this._interactionRange[1], performance.now())), this._renderTaskQueue.run(c), this._domRenderTaskQueue.run(c), this._removed)
            return;
          this._updateProjectionTransition();
          const y = this._isInitialLoad ? 0 : this._fadeDuration;
          if (this.style && this._styleDirty) {
            this._styleDirty = !1;
            const F = this.transform.zoom, N = this.transform.pitch, G = i.q.now(), Z = new i.a8(F, { now: G, fadeDuration: y, pitch: N, transition: this.style.transition });
            this.style.update(Z);
          }
          this.style && this.style.hasFogTransition() && (this.style._markersNeedUpdate = !0, this._sourcesDirty = !0);
          let T = !1;
          this.style && this._sourcesDirty ? (this._sourcesDirty = !1, this.painter._updateFog(this.style), this._updateTerrain(), T = this._updateAverageElevation(h), this.style.updateSources(this.transform), this._forceMarkerAndPopupUpdate()) : T = this._updateAverageElevation(h);
          const z = this.style && this.style._updatePlacement(this.painter, this.painter.transform, this.showCollisionBoxes, y, this._crossSourceCollisions, this.painter.replacementSource, this._scaleFactorChanged);
          if (this._scaleFactorChanged && (this._scaleFactorChanged = !1), z && (this._placementDirty = z.needsRerender), this.style && this.painter.render(this.style, { showTileBoundaries: this.showTileBoundaries, showParseStatus: this.showParseStatus, wireframe: { terrain: this.showTerrainWireframe, layers2D: this.showLayers2DWireframe, layers3D: this.showLayers3DWireframe }, showOverdrawInspector: this._showOverdrawInspector, showQueryGeometry: !!this._showQueryGeometry, showTileAABBs: this.showTileAABBs, rotating: this.isRotating(), zooming: this.isZooming(), moving: this.isMoving(), fadeDuration: y, isInitialLoad: this._isInitialLoad, showPadding: this.showPadding, gpuTiming: !!this.listens("gpu-timing-layer"), gpuTimingDeferredRender: !!this.listens("gpu-timing-deferred-render"), speedIndexTiming: this.speedIndexTiming }), this.fire(new i.z("render")), this.loaded() && !this._loaded && (this._loaded = !0, Y.mark(j.load), this.fire(new i.z("load"))), this.style && this.style.hasTransitions() && (this._styleDirty = !0), this.style && (this.style.snow || this.style.rain) && (this._styleDirty = !0), this.style && !this._placementDirty && this.style._releaseSymbolFadeTiles(), t) {
            const F = i.q.now() - h;
            _.endQuery(s.TIME_ELAPSED_EXT), setTimeout(() => {
              const N = _.getQueryParameter(t, _.QUERY_RESULT) / 1e6;
              _.deleteQuery(t), this.fire(new i.z("gpu-timing-frame", { cpuTime: F, gpuTime: N }));
            }, 50);
          }
          if (this.listens("gpu-timing-layer")) {
            const F = this.painter.collectGpuTimers();
            setTimeout(() => {
              const N = this.painter.queryGpuTimers(F);
              this.fire(new i.z("gpu-timing-layer", { layerTimes: N }));
            }, 50);
          }
          if (this.listens("gpu-timing-deferred-render")) {
            const F = this.painter.collectDeferredRenderGpuQueries();
            setTimeout(() => {
              const N = this.painter.queryGpuTimeDeferredRender(F);
              this.fire(new i.z("gpu-timing-deferred-render", { gpuTime: N }));
            }, 50);
          }
          const R = this._sourcesDirty || this._styleDirty || this._placementDirty || T;
          if (R || this._repaint)
            this.triggerRepaint();
          else {
            const F = this.idle();
            if (F && (T = this._updateAverageElevation(h, !0)), T)
              this.triggerRepaint();
            else if (this._triggerFrame(!1), F && (this.fire(new i.z("idle")), this._isInitialLoad = !1, this.speedIndexTiming)) {
              const N = this._calculateSpeedIndex();
              this.fire(new i.z("speedindexcompleted", { speedIndex: N })), this.speedIndexTiming = !1;
            }
          }
          !this._loaded || this._fullyLoaded || R || (this._fullyLoaded = !0, Y.mark(j.fullLoad), this._performanceMetricsCollection && xs(this._requestManager._customAccessToken, { width: this.painter.width, height: this.painter.height, interactionRange: this._interactionRange, visibilityHidden: this._visibilityHidden, terrainEnabled: !!this.painter.style.getTerrain(), fogEnabled: !!this.painter.style.getFog(), projection: this.getProjection().name, zoom: this.transform.zoom, renderer: this.painter.context.renderer, vendor: this.painter.context.vendor }), this._authenticate());
        }
        _forceMarkerAndPopupUpdate(c) {
          for (const t of this._markers)
            c && !this.getRenderWorldCopies() && (t._lngLat = t._lngLat.wrap()), t._update();
          for (const t of this._popups)
            !c || this.getRenderWorldCopies() || t._trackPointer || (t._lngLat = t._lngLat.wrap()), t._update();
        }
        _updateAverageElevation(c, t = !1) {
          const s = (_) => (this.transform.averageElevation = _, this._update(!1), !0);
          if (!this.painter.averageElevationNeedsEasing())
            return this.transform.averageElevation !== 0 && s(0);
          const h = this.transform.elevation && this.transform.elevation.exaggeration() !== this._averageElevationExaggeration;
          if (h || (t || c - this._averageElevationLastSampledAt > 500) && !this._averageElevation.isEasing(c)) {
            const _ = this.transform.averageElevation;
            let y = this.transform.sampleAverageElevation();
            this.transform.elevation != null && (this._averageElevationExaggeration = this.transform.elevation.exaggeration()), isNaN(y) ? y = 0 : this._averageElevationLastSampledAt = c;
            const T = Math.abs(_ - y);
            if (T > 1) {
              if (this._isInitialLoad || h)
                return this._averageElevation.jumpTo(y), s(y);
              this._averageElevation.easeTo(y, c, 300);
            } else if (T > 1e-4)
              return this._averageElevation.jumpTo(y), s(y);
          }
          return !!this._averageElevation.isEasing(c) && s(this._averageElevation.getValue(c));
        }
        _authenticate() {
          De(this._getMapId(), this._requestManager._skuToken, this._requestManager._customAccessToken, (c) => {
            if (c && (c.message === Pn || c.status === 401)) {
              const t = this.painter.context.gl;
              Us(t, !1), this._logoControl instanceof Il && this._logoControl._updateLogo(), t && t.clear(t.DEPTH_BUFFER_BIT | t.COLOR_BUFFER_BIT | t.STENCIL_BUFFER_BIT), this._silenceAuthErrors || this.fire(new i.y(new Error("A valid Mapbox access token is required to use Mapbox GL JS. To create an account or a new access token, visit https://account.mapbox.com/")));
            }
          }), ln(this._getMapId(), this._requestManager._skuToken, this._requestManager._customAccessToken, () => {
          });
        }
        _postStyleLoadEvent() {
          this.style.globalId && xi(this._requestManager._customAccessToken, { map: this, skuToken: this._requestManager._skuToken, style: this.style.globalId, importedStyles: this.style.getImportGlobalIds() });
        }
        _updateTerrain() {
          const c = this._isDragging();
          this.painter.updateTerrain(this.style, c);
        }
        _calculateSpeedIndex() {
          const c = this.painter.canvasCopy(), t = this.painter.getCanvasCopiesAndTimestamps();
          t.timeStamps.push(performance.now());
          const s = this.painter.context.gl, h = s.createFramebuffer();
          function _(y) {
            s.framebufferTexture2D(s.FRAMEBUFFER, s.COLOR_ATTACHMENT0, s.TEXTURE_2D, y, 0);
            const T = new Uint8Array(s.drawingBufferWidth * s.drawingBufferHeight * 4);
            return s.readPixels(0, 0, s.drawingBufferWidth, s.drawingBufferHeight, s.RGBA, s.UNSIGNED_BYTE, T), T;
          }
          return s.bindFramebuffer(s.FRAMEBUFFER, h), this._canvasPixelComparison(_(c), t.canvasCopies.map(_), t.timeStamps);
        }
        _canvasPixelComparison(c, t, s) {
          let h = s[1] - s[0];
          const _ = c.length / 4;
          for (let y = 0; y < t.length; y++) {
            const T = t[y];
            let z = 0;
            for (let R = 0; R < T.length; R += 4)
              T[R] === c[R] && T[R + 1] === c[R + 1] && T[R + 2] === c[R + 2] && T[R + 3] === c[R + 3] && (z += 1);
            h += (s[y + 2] - s[y + 1]) * (1 - z / _);
          }
          return h;
        }
        remove() {
          this._hash && this._hash.remove();
          for (const t of this._controls)
            t.onRemove(this);
          this._controls = [], this._frame && (this._frame.cancel(), this._frame = null), this._renderTaskQueue.clear(), this._domRenderTaskQueue.clear(), this.style && this.style.destroy(), this.indoor.destroy(), this.painter.destroy(), this.handlers && this.handlers.destroy(), this.handlers = void 0, this.setStyle(null), window.removeEventListener("resize", this._onWindowResize, !1), window.removeEventListener("orientationchange", this._onWindowResize, !1), window.removeEventListener(this._fullscreenchangeEvent, this._onWindowResize, !1), window.removeEventListener("online", this._onWindowOnline, !1), window.removeEventListener("visibilitychange", this._onVisibilityChange, !1);
          const c = this.painter.context.gl.getExtension("WEBGL_lose_context");
          c && c.loseContext(), this._canvas.removeEventListener("webglcontextlost", this._contextLost, !1), this._canvas.removeEventListener("webglcontextrestored", this._contextRestored, !1), this._canvasContainer.remove(), this._controlContainer.remove(), this._missingCSSCanary.remove(), this._canvas = void 0, this._canvasContainer = void 0, this._controlContainer = void 0, this._missingCSSCanary = void 0, this._container.classList.remove("mapboxgl-map"), this._container.removeEventListener("scroll", this._onMapScroll, !1), Vs.delete(this.painter.context.gl), Is.remove(), qt.remove(), this._removed = !0, this.fire(new i.z("remove"));
        }
        triggerRepaint() {
          this._triggerFrame(!0);
        }
        _triggerFrame(c) {
          this._renderNextFrame = this._renderNextFrame || c, this.style && !this._frame && (this._frame = i.q.frame((t) => {
            const s = !!this._renderNextFrame;
            this._frame = null, this._renderNextFrame = null, s && this._render(t);
          }));
        }
        _preloadTiles(c) {
          const t = this.style ? this.style.getSourceCaches() : [];
          return i.bl(t, (s, h) => s._preloadTiles(c, h), () => {
            this.triggerRepaint();
          }), this;
        }
        _onWindowOnline() {
          this._update();
        }
        _onWindowResize(c) {
          this._trackResize && this.resize({ originalEvent: c })._update();
        }
        _onVisibilityChange() {
          document.visibilityState === "hidden" && this._visibilityHidden++;
        }
        get showTileBoundaries() {
          return !!this._showTileBoundaries;
        }
        set showTileBoundaries(c) {
          this._showTileBoundaries !== c && (this._showTileBoundaries = c, this._tp.refreshUI(), this._update());
        }
        get showParseStatus() {
          return !!this._showParseStatus;
        }
        set showParseStatus(c) {
          this._showParseStatus !== c && (this._showParseStatus = c, this._tp.refreshUI(), this._update());
        }
        get showTerrainWireframe() {
          return !!this._showTerrainWireframe;
        }
        set showTerrainWireframe(c) {
          this._showTerrainWireframe !== c && (this._showTerrainWireframe = c, this._tp.refreshUI(), this._update());
        }
        get showLayers2DWireframe() {
          return !!this._showLayers2DWireframe;
        }
        set showLayers2DWireframe(c) {
          this._showLayers2DWireframe !== c && (this._showLayers2DWireframe = c, this._tp.refreshUI(), this._update());
        }
        get showLayers3DWireframe() {
          return !!this._showLayers3DWireframe;
        }
        set showLayers3DWireframe(c) {
          this._showLayers3DWireframe !== c && (this._showLayers3DWireframe = c, this._tp.refreshUI(), this._update());
        }
        get speedIndexTiming() {
          return !!this._speedIndexTiming;
        }
        set speedIndexTiming(c) {
          this._speedIndexTiming !== c && (this._speedIndexTiming = c, this._update());
        }
        get showPadding() {
          return !!this._showPadding;
        }
        set showPadding(c) {
          this._showPadding !== c && (this._showPadding = c, this._tp.refreshUI(), this._update());
        }
        get showCollisionBoxes() {
          return !!this._showCollisionBoxes;
        }
        set showCollisionBoxes(c) {
          this._showCollisionBoxes !== c && (this._showCollisionBoxes = c, this._tp.refreshUI(), c ? this.style._generateCollisionBoxes() : this._update());
        }
        get showOverdrawInspector() {
          return !!this._showOverdrawInspector;
        }
        set showOverdrawInspector(c) {
          this._showOverdrawInspector !== c && (this._showOverdrawInspector = c, this._tp.refreshUI(), this._update());
        }
        get repaint() {
          return !!this._repaint;
        }
        set repaint(c) {
          this._repaint !== c && (this._repaint = c, this._tp.refreshUI(), this.triggerRepaint());
        }
        get vertices() {
          return !!this._vertices;
        }
        set vertices(c) {
          this._vertices = c, this._update();
        }
        get showTileAABBs() {
          return !!this._showTileAABBs;
        }
        set showTileAABBs(c) {
          this._showTileAABBs !== c && (this._showTileAABBs = c, this._tp.refreshUI(), c && this._update());
        }
        _setCacheLimits(c, t) {
          i.dG(c, t);
        }
        get version() {
          return O;
        }
      }, NavigationControl: class {
        constructor(c = {}) {
          this.options = i.l({}, tl, c), this._container = be("div", "mapboxgl-ctrl mapboxgl-ctrl-group"), this._container.addEventListener("contextmenu", (t) => t.preventDefault()), this.options.showZoom && (i.aP(["_setButtonTitle", "_updateZoomButtons"], this), this._zoomInButton = this._createButton("mapboxgl-ctrl-zoom-in", (t) => {
            this._map && this._map.zoomIn({}, { originalEvent: t });
          }), be("span", "mapboxgl-ctrl-icon", this._zoomInButton).setAttribute("aria-hidden", "true"), this._zoomOutButton = this._createButton("mapboxgl-ctrl-zoom-out", (t) => {
            this._map && this._map.zoomOut({}, { originalEvent: t });
          }), be("span", "mapboxgl-ctrl-icon", this._zoomOutButton).setAttribute("aria-hidden", "true")), this.options.showCompass && (i.aP(["_rotateCompassArrow"], this), this._compass = this._createButton("mapboxgl-ctrl-compass", (t) => {
            const s = this._map;
            s && (this.options.visualizePitch ? s.resetNorthPitch({}, { originalEvent: t }) : s.resetNorth({}, { originalEvent: t }));
          }), this._compassIcon = be("span", "mapboxgl-ctrl-icon", this._compass), this._compassIcon.setAttribute("aria-hidden", "true"));
        }
        _updateZoomButtons() {
          const c = this._map;
          if (!c)
            return;
          const t = c.getZoom(), s = t === c.getMaxZoom(), h = t === c.getMinZoom();
          this._zoomInButton.disabled = s, this._zoomOutButton.disabled = h, this._zoomInButton.setAttribute("aria-disabled", s.toString()), this._zoomOutButton.setAttribute("aria-disabled", h.toString());
        }
        _rotateCompassArrow() {
          const c = this._map;
          if (!c)
            return;
          const t = this.options.visualizePitch ? `scale(${1 / Math.pow(Math.cos(c.transform.pitch * (Math.PI / 180)), 0.5)}) rotateX(${c.transform.pitch}deg) rotateZ(${c.transform.angle * (180 / Math.PI)}deg)` : `rotate(${c.transform.angle * (180 / Math.PI)}deg)`;
          c._requestDomTask(() => {
            this._compassIcon && (this._compassIcon.style.transform = t);
          });
        }
        onAdd(c) {
          return this._map = c, this.options.showZoom && (this._setButtonTitle(this._zoomInButton, "ZoomIn"), this._setButtonTitle(this._zoomOutButton, "ZoomOut"), c.on("zoom", this._updateZoomButtons), this._updateZoomButtons()), this.options.showCompass && (this._setButtonTitle(this._compass, "ResetBearing"), this.options.visualizePitch && c.on("pitch", this._rotateCompassArrow), c.on("rotate", this._rotateCompassArrow), this._rotateCompassArrow(), this._handler = new f_(c, this._compass, this.options.visualizePitch)), this._container;
        }
        onRemove() {
          const c = this._map;
          c && (this._container.remove(), this.options.showZoom && c.off("zoom", this._updateZoomButtons), this.options.showCompass && (this.options.visualizePitch && c.off("pitch", this._rotateCompassArrow), c.off("rotate", this._rotateCompassArrow), this._handler && this._handler.off(), this._handler = void 0), this._map = void 0);
        }
        _createButton(c, t) {
          const s = be("button", c, this._container);
          return s.type = "button", s.addEventListener("click", t), s;
        }
        _setButtonTitle(c, t) {
          if (!this._map)
            return;
          const s = this._map._getUIString(`NavigationControl.${t}`);
          c.setAttribute("aria-label", s), c.firstElementChild && c.firstElementChild.setAttribute("title", s);
        }
      }, GeolocateControl: class extends i.E {
        constructor(c = {}) {
          super();
          const t = navigator.geolocation;
          this.options = i.l({ geolocation: t }, Ta, c), i.aP(["_onSuccess", "_onError", "_onZoom", "_finish", "_setupUI", "_updateCamera", "_updateMarker", "_updateMarkerRotation", "_onDeviceOrientation"], this), this._updateMarkerRotationThrottled = lh(this._updateMarkerRotation, 20), this._numberOfWatches = 0;
        }
        onAdd(c) {
          return this._map = c, this._container = be("div", "mapboxgl-ctrl mapboxgl-ctrl-group"), this._checkGeolocationSupport(this._setupUI), this._container;
        }
        onRemove() {
          this._geolocationWatchID !== void 0 && (this.options.geolocation.clearWatch(this._geolocationWatchID), this._geolocationWatchID = void 0), this.options.showUserLocation && this._userLocationDotMarker && this._userLocationDotMarker.remove(), this.options.showAccuracyCircle && this._accuracyCircleMarker && this._accuracyCircleMarker.remove(), this._container.remove(), this._map.off("zoom", this._onZoom), this._map = void 0, this._numberOfWatches = 0, this._noTimeout = !1;
        }
        _checkGeolocationSupport(c) {
          const t = (s = !!this.options.geolocation) => {
            this._supportsGeolocation = s, c(s);
          };
          this._supportsGeolocation !== void 0 ? c(this._supportsGeolocation) : navigator.permissions !== void 0 ? navigator.permissions.query({ name: "geolocation" }).then((s) => t(s.state !== "denied")).catch(() => t()) : t();
        }
        _isOutOfMapMaxBounds(c) {
          const t = this._map.getMaxBounds(), s = c.coords;
          return !!t && (s.longitude < t.getWest() || s.longitude > t.getEast() || s.latitude < t.getSouth() || s.latitude > t.getNorth());
        }
        _setErrorState() {
          switch (this._watchState) {
            case "WAITING_ACTIVE":
              this._watchState = "ACTIVE_ERROR", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");
              break;
            case "ACTIVE_LOCK":
              this._watchState = "ACTIVE_ERROR", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");
              break;
            case "BACKGROUND":
              this._watchState = "BACKGROUND_ERROR", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");
          }
        }
        _onSuccess(c) {
          if (this._map) {
            if (this._isOutOfMapMaxBounds(c))
              return this._setErrorState(), this.fire(new i.z("outofmaxbounds", c)), this._updateMarker(), void this._finish();
            if (this.options.trackUserLocation)
              switch (this._lastKnownPosition = c, this._watchState) {
                case "WAITING_ACTIVE":
                case "ACTIVE_LOCK":
                case "ACTIVE_ERROR":
                  this._watchState = "ACTIVE_LOCK", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");
                  break;
                case "BACKGROUND":
                case "BACKGROUND_ERROR":
                  this._watchState = "BACKGROUND", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");
              }
            this.options.showUserLocation && this._watchState !== "OFF" && this._updateMarker(c), this.options.trackUserLocation && this._watchState !== "ACTIVE_LOCK" || this._updateCamera(c), this.options.showUserLocation && this._userLocationDotMarker.removeClassName("mapboxgl-user-location-dot-stale"), this.fire(new i.z("geolocate", c)), this._finish();
          }
        }
        _updateCamera(c) {
          const t = new i.bO(c.coords.longitude, c.coords.latitude), s = c.coords.accuracy, h = this._map.getBearing(), _ = i.l({ bearing: h }, this.options.fitBoundsOptions);
          this._map.fitBounds(t.toBounds(s), _, { geolocateSource: !0 });
        }
        _updateMarker(c) {
          if (c) {
            const t = new i.bO(c.coords.longitude, c.coords.latitude);
            this._accuracyCircleMarker.setLngLat(t).addTo(this._map), this._userLocationDotMarker.setLngLat(t).addTo(this._map), this._accuracy = c.coords.accuracy, this.options.showUserLocation && this.options.showAccuracyCircle && this._updateCircleRadius();
          } else
            this._userLocationDotMarker.remove(), this._accuracyCircleMarker.remove();
        }
        _updateCircleRadius() {
          const c = this._map.transform, t = i.bH(1, c._center.lat) * c.worldSize, s = Math.ceil(2 * this._accuracy * t);
          this._circleElement.style.width = `${s}px`, this._circleElement.style.height = `${s}px`;
        }
        _onZoom() {
          this.options.showUserLocation && this.options.showAccuracyCircle && this._updateCircleRadius();
        }
        _updateMarkerRotation() {
          this._userLocationDotMarker && typeof this._heading == "number" ? (this._userLocationDotMarker.setRotation(this._heading), this._userLocationDotMarker.addClassName("mapboxgl-user-location-show-heading")) : (this._userLocationDotMarker.removeClassName("mapboxgl-user-location-show-heading"), this._userLocationDotMarker.setRotation(0));
        }
        _onError(c) {
          if (this._map) {
            if (this.options.trackUserLocation)
              if (c.code === 1) {
                this._watchState = "OFF", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"), this._geolocateButton.disabled = !0;
                const t = this._map._getUIString("GeolocateControl.LocationNotAvailable");
                this._geolocateButton.setAttribute("aria-label", t), this._geolocateButton.firstElementChild && this._geolocateButton.firstElementChild.setAttribute("title", t), this._geolocationWatchID !== void 0 && this._clearWatch();
              } else {
                if (c.code === 3 && this._noTimeout)
                  return;
                this._setErrorState();
              }
            this._watchState !== "OFF" && this.options.showUserLocation && this._userLocationDotMarker.addClassName("mapboxgl-user-location-dot-stale"), this.fire(new i.z("error", c)), this._finish();
          }
        }
        _finish() {
          this._timeoutId && clearTimeout(this._timeoutId), this._timeoutId = void 0;
        }
        _setupUI(c) {
          if (this._map !== void 0) {
            if (this._container.addEventListener("contextmenu", (t) => t.preventDefault()), this._geolocateButton = be("button", "mapboxgl-ctrl-geolocate", this._container), be("span", "mapboxgl-ctrl-icon", this._geolocateButton).setAttribute("aria-hidden", "true"), this._geolocateButton.type = "button", c === !1) {
              i.w("Geolocation support is not available so the GeolocateControl will be disabled.");
              const t = this._map._getUIString("GeolocateControl.LocationNotAvailable");
              this._geolocateButton.disabled = !0, this._geolocateButton.setAttribute("aria-label", t), this._geolocateButton.firstElementChild && this._geolocateButton.firstElementChild.setAttribute("title", t);
            } else {
              const t = this._map._getUIString("GeolocateControl.FindMyLocation");
              this._geolocateButton.setAttribute("aria-label", t), this._geolocateButton.firstElementChild && this._geolocateButton.firstElementChild.setAttribute("title", t);
            }
            this.options.trackUserLocation && (this._geolocateButton.setAttribute("aria-pressed", "false"), this._watchState = "OFF"), this.options.showUserLocation && (this._dotElement = be("div", "mapboxgl-user-location"), this._dotElement.appendChild(be("div", "mapboxgl-user-location-dot")), this._dotElement.appendChild(be("div", "mapboxgl-user-location-heading")), this._userLocationDotMarker = new ta({ element: this._dotElement, rotationAlignment: "map", pitchAlignment: "map" }), this._circleElement = be("div", "mapboxgl-user-location-accuracy-circle"), this._accuracyCircleMarker = new ta({ element: this._circleElement, pitchAlignment: "map" }), this.options.trackUserLocation && (this._watchState = "OFF"), this._map.on("zoom", this._onZoom)), this._geolocateButton.addEventListener("click", this.trigger.bind(this)), this._setup = !0, this.options.trackUserLocation && this._map.on("movestart", (t) => {
              t.geolocateSource || this._watchState !== "ACTIVE_LOCK" || t.originalEvent && t.originalEvent.type === "resize" || (this._watchState = "BACKGROUND", this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this.fire(new i.z("trackuserlocationend")));
            });
          }
        }
        _onDeviceOrientation(c) {
          this._userLocationDotMarker && (c.webkitCompassHeading ? this._heading = c.webkitCompassHeading : c.absolute === !0 && (this._heading = -1 * c.alpha), this._updateMarkerRotationThrottled());
        }
        trigger() {
          if (!this._setup)
            return i.w("Geolocate control triggered before added to a map"), !1;
          if (this.options.trackUserLocation) {
            switch (this._watchState) {
              case "OFF":
                this._watchState = "WAITING_ACTIVE", this.fire(new i.z("trackuserlocationstart"));
                break;
              case "WAITING_ACTIVE":
              case "ACTIVE_LOCK":
              case "ACTIVE_ERROR":
              case "BACKGROUND_ERROR":
                this._numberOfWatches--, this._noTimeout = !1, this._watchState = "OFF", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"), this.fire(new i.z("trackuserlocationend"));
                break;
              case "BACKGROUND":
                this._watchState = "ACTIVE_LOCK", this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"), this._lastKnownPosition && this._updateCamera(this._lastKnownPosition), this.fire(new i.z("trackuserlocationstart"));
            }
            switch (this._watchState) {
              case "WAITING_ACTIVE":
                this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");
                break;
              case "ACTIVE_LOCK":
                this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");
                break;
              case "ACTIVE_ERROR":
                this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");
                break;
              case "BACKGROUND":
                this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");
                break;
              case "BACKGROUND_ERROR":
                this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error");
            }
            if (this._watchState === "OFF" && this._geolocationWatchID !== void 0)
              this._clearWatch();
            else if (this._geolocationWatchID === void 0) {
              let c;
              this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.setAttribute("aria-pressed", "true"), this._numberOfWatches++, this._numberOfWatches > 1 ? (c = { maximumAge: 6e5, timeout: 0 }, this._noTimeout = !0) : (c = this.options.positionOptions, this._noTimeout = !1), this._geolocationWatchID = this.options.geolocation.watchPosition(this._onSuccess, this._onError, c), this.options.showUserHeading && this._addDeviceOrientationListener();
            }
          } else
            this.options.geolocation.getCurrentPosition(this._onSuccess, this._onError, this.options.positionOptions), this._timeoutId = window.setTimeout(this._finish, 1e4);
          return !0;
        }
        _addDeviceOrientationListener() {
          const c = () => {
            "ondeviceorientationabsolute" in window ? window.addEventListener("deviceorientationabsolute", this._onDeviceOrientation) : window.addEventListener("deviceorientation", this._onDeviceOrientation);
          };
          typeof DeviceMotionEvent < "u" && typeof DeviceMotionEvent.requestPermission == "function" ? DeviceOrientationEvent.requestPermission().then((t) => {
            t === "granted" && c();
          }).catch(console.error) : c();
        }
        _clearWatch() {
          this.options.geolocation.clearWatch(this._geolocationWatchID), window.removeEventListener("deviceorientation", this._onDeviceOrientation), window.removeEventListener("deviceorientationabsolute", this._onDeviceOrientation), this._geolocationWatchID = void 0, this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"), this._geolocateButton.setAttribute("aria-pressed", "false"), this.options.showUserLocation && this._updateMarker(null);
        }
      }, AttributionControl: yp, ScaleControl: class {
        constructor(c = {}) {
          this.options = i.l({}, fr, c), this._isNumberFormatSupported = function() {
            try {
              return new Intl.NumberFormat("en", { style: "unit", unitDisplay: "short", unit: "meter" }), !0;
            } catch {
              return !1;
            }
          }(), i.aP(["_update", "_setScale", "setUnit"], this);
        }
        getDefaultPosition() {
          return "bottom-left";
        }
        _update() {
          const c = this.options.maxWidth || 100, t = this._map, s = t._containerHeight / 2, h = t._containerWidth / 2 - c / 2, _ = t.unproject([h, s]), y = t.unproject([h + c, s]), T = _.distanceTo(y);
          if (this.options.unit === "imperial") {
            const z = 3.2808 * T;
            z > 5280 ? this._setScale(c, z / 5280, "mile") : this._setScale(c, z, "foot");
          } else
            this.options.unit === "nautical" ? this._setScale(c, T / 1852, "nautical-mile") : T >= 1e3 ? this._setScale(c, T / 1e3, "kilometer") : this._setScale(c, T, "meter");
        }
        _setScale(c, t, s) {
          this._map._requestDomTask(() => {
            const h = function(y) {
              const T = Math.pow(10, `${Math.floor(y)}`.length - 1);
              let z = y / T;
              return z = z >= 10 ? 10 : z >= 5 ? 5 : z >= 3 ? 3 : z >= 2 ? 2 : z >= 1 ? 1 : function(R) {
                const F = Math.pow(10, Math.ceil(-Math.log(R) / Math.LN10));
                return Math.round(R * F) / F;
              }(z), T * z;
            }(t), _ = h / t;
            this._container.innerHTML = this._isNumberFormatSupported && s !== "nautical-mile" ? new Intl.NumberFormat(this._language, { style: "unit", unitDisplay: "short", unit: s }).format(h) : `${h}&nbsp;${Fr[s]}`, this._container.style.width = c * _ + "px";
          });
        }
        onAdd(c) {
          return this._map = c, this._language = c.getLanguage(), this._container = be("div", "mapboxgl-ctrl mapboxgl-ctrl-scale", c.getContainer()), this._container.dir = "auto", this._map.on("move", this._update), this._update(), this._container;
        }
        onRemove() {
          this._container.remove(), this._map.off("move", this._update), this._map = void 0;
        }
        _setLanguage(c) {
          this._language = c, this._update();
        }
        setUnit(c) {
          this.options.unit = c, this._update();
        }
      }, FullscreenControl: class {
        constructor(c = {}) {
          this._fullscreen = !1, c && c.container && (c.container instanceof HTMLElement ? this._container = c.container : i.w("Full screen control 'container' must be a DOM element.")), i.aP(["_onClickFullscreen", "_changeIcon"], this), "onfullscreenchange" in document ? this._fullscreenchange = "fullscreenchange" : "onwebkitfullscreenchange" in document && (this._fullscreenchange = "webkitfullscreenchange");
        }
        onAdd(c) {
          return this._map = c, this._container || (this._container = this._map.getContainer()), this._controlContainer = be("div", "mapboxgl-ctrl mapboxgl-ctrl-group"), this._checkFullscreenSupport() ? this._setupUI() : (this._controlContainer.style.display = "none", i.w("This device does not support fullscreen mode.")), this._controlContainer;
        }
        onRemove() {
          this._controlContainer.remove(), this._map = null, document.removeEventListener(this._fullscreenchange, this._changeIcon);
        }
        _checkFullscreenSupport() {
          return !(!document.fullscreenEnabled && !document.webkitFullscreenEnabled);
        }
        _setupUI() {
          const c = this._fullscreenButton = be("button", "mapboxgl-ctrl-fullscreen", this._controlContainer);
          be("span", "mapboxgl-ctrl-icon", c).setAttribute("aria-hidden", "true"), c.type = "button", this._updateTitle(), this._fullscreenButton.addEventListener("click", this._onClickFullscreen), document.addEventListener(this._fullscreenchange, this._changeIcon);
        }
        _updateTitle() {
          const c = this._getTitle();
          this._fullscreenButton.setAttribute("aria-label", c), this._fullscreenButton.firstElementChild && this._fullscreenButton.firstElementChild.setAttribute("title", c);
        }
        _getTitle() {
          return this._map._getUIString(this._isFullscreen() ? "FullscreenControl.Exit" : "FullscreenControl.Enter");
        }
        _isFullscreen() {
          return this._fullscreen;
        }
        _changeIcon() {
          (document.fullscreenElement || document.webkitFullscreenElement) === this._container !== this._fullscreen && (this._fullscreen = !this._fullscreen, this._fullscreenButton.classList.toggle("mapboxgl-ctrl-shrink"), this._fullscreenButton.classList.toggle("mapboxgl-ctrl-fullscreen"), this._updateTitle());
        }
        _onClickFullscreen() {
          this._isFullscreen() ? document.exitFullscreen ? document.exitFullscreen() : document.webkitCancelFullScreen && document.webkitCancelFullScreen() : this._container.requestFullscreen ? this._container.requestFullscreen() : this._container.webkitRequestFullscreen && this._container.webkitRequestFullscreen();
        }
      }, Popup: class extends i.E {
        constructor(c) {
          super(), this.options = i.l(Object.create(Os), c), i.aP(["_update", "_onClose", "remove", "_onMouseEvent"], this), this._classList = new Set(c && c.className ? c.className.trim().split(/\s+/) : []);
        }
        addTo(c) {
          return this._map && this.remove(), this._map = c, this.options.closeOnClick && c.on("preclick", this._onClose), this.options.closeOnMove && c.on("move", this._onClose), c.on("remove", this.remove), this._update(), c._addPopup(this), this._focusFirstElement(), this._trackPointer ? (c.on("mousemove", this._onMouseEvent), c.on("mouseup", this._onMouseEvent), c._canvasContainer.classList.add("mapboxgl-track-pointer")) : c.on("move", this._update), this.fire(new i.z("open")), this;
        }
        isOpen() {
          return !!this._map;
        }
        remove() {
          this._content && this._content.remove(), this._container && (this._container.remove(), this._container = void 0);
          const c = this._map;
          return c && (c.off("move", this._update), c.off("move", this._onClose), c.off("preclick", this._onClose), c.off("click", this._onClose), c.off("remove", this.remove), c.off("mousemove", this._onMouseEvent), c.off("mouseup", this._onMouseEvent), c.off("drag", this._onMouseEvent), c._canvasContainer && c._canvasContainer.classList.remove("mapboxgl-track-pointer"), c._removePopup(this), this._map = void 0), this.fire(new i.z("close")), this;
        }
        getLngLat() {
          return this._lngLat;
        }
        setLngLat(c) {
          this._lngLat = i.bO.convert(c), this._pos = null, this._trackPointer = !1, this._update();
          const t = this._map;
          return t && (t.on("move", this._update), t.off("mousemove", this._onMouseEvent), t._canvasContainer.classList.remove("mapboxgl-track-pointer")), this;
        }
        trackPointer() {
          this._trackPointer = !0, this._pos = null, this._update();
          const c = this._map;
          return c && (c.off("move", this._update), c.on("mousemove", this._onMouseEvent), c.on("drag", this._onMouseEvent), c._canvasContainer.classList.add("mapboxgl-track-pointer")), this;
        }
        getElement() {
          return this._container;
        }
        setText(c) {
          return this.setDOMContent(document.createTextNode(c));
        }
        setHTML(c) {
          const t = document.createDocumentFragment(), s = document.createElement("body");
          let h;
          for (s.innerHTML = c; h = s.firstChild, h; )
            t.appendChild(h);
          return this.setDOMContent(t);
        }
        getMaxWidth() {
          return this._container && this._container.style.maxWidth;
        }
        setMaxWidth(c) {
          return this.options.maxWidth = c, this._update(), this;
        }
        setDOMContent(c) {
          let t = this._content;
          if (t)
            for (; t.hasChildNodes(); )
              t.firstChild && t.removeChild(t.firstChild);
          else
            t = this._content = be("div", "mapboxgl-popup-content", this._container || void 0);
          if (t.appendChild(c), this.options.closeButton) {
            const s = this._closeButton = be("button", "mapboxgl-popup-close-button", t);
            s.type = "button", s.setAttribute("aria-label", "Close popup"), s.setAttribute("aria-hidden", "true"), s.innerHTML = "&#215;", s.addEventListener("click", this._onClose);
          }
          return this._update(), this._focusFirstElement(), this;
        }
        addClassName(c) {
          return this._classList.add(c), this._updateClassList(), this;
        }
        removeClassName(c) {
          return this._classList.delete(c), this._updateClassList(), this;
        }
        setOffset(c) {
          return this.options.offset = c, this._update(), this;
        }
        toggleClassName(c) {
          let t;
          return this._classList.delete(c) ? t = !1 : (this._classList.add(c), t = !0), this._updateClassList(), t;
        }
        _onMouseEvent(c) {
          this._update(c.point);
        }
        _getAnchor(c) {
          if (this.options.anchor)
            return this.options.anchor;
          const t = this._map, s = this._container, h = this._pos;
          if (!t || !s || !h)
            return "bottom";
          const _ = s.offsetWidth, y = s.offsetHeight, T = h.x < _ / 2, z = h.x > t.transform.width - _ / 2;
          if (h.y + c < y)
            return T ? "top-left" : z ? "top-right" : "top";
          if (h.y > t.transform.height - y) {
            if (T)
              return "bottom-left";
            if (z)
              return "bottom-right";
          }
          return T ? "left" : z ? "right" : "bottom";
        }
        _updateClassList() {
          const c = this._container;
          if (!c)
            return;
          const t = [...this._classList];
          t.push("mapboxgl-popup"), this._anchor && t.push(`mapboxgl-popup-anchor-${this._anchor}`), this._trackPointer && t.push("mapboxgl-popup-track-pointer"), c.className = t.join(" ");
        }
        _update(c) {
          const t = this._map, s = this._content;
          if (!t || !this._lngLat && !this._trackPointer || !s)
            return;
          let h = this._container;
          if (h || (h = this._container = be("div", "mapboxgl-popup", t.getContainer()), this._tip = be("div", "mapboxgl-popup-tip", h), h.appendChild(s)), this.options.maxWidth && h.style.maxWidth !== this.options.maxWidth && (h.style.maxWidth = this.options.maxWidth), t.transform.renderWorldCopies && !this._trackPointer && (this._lngLat = xp(this._lngLat, this._pos, t.transform)), !this._trackPointer || c) {
            const _ = this._pos = this._trackPointer && c instanceof i.P ? c : t.project(this._lngLat), y = Un(this.options.offset), T = this._anchor = this._getAnchor(y.y), z = Un(this.options.offset, T), R = _.add(z).round();
            t._requestDomTask(() => {
              this._container && T && (this._container.style.transform = `${gh[T]} translate(${R.x}px,${R.y}px)`);
            });
          }
          if (!this._marker && t._showingGlobe()) {
            const _ = i.dH(t.transform, this._lngLat) ? 0 : 1;
            this._setOpacity(_);
          }
          this._updateClassList();
        }
        _focusFirstElement() {
          if (!this.options.focusAfterOpen || !this._container)
            return;
          const c = this._container.querySelector(vp);
          c && c.focus();
        }
        _onClose() {
          this.remove();
        }
        _setOpacity(c) {
          this._container && (this._container.style.opacity = `${c}`), this._content && (this._content.style.pointerEvents = c ? "auto" : "none");
        }
      }, Marker: ta, Style: hr, LngLat: i.bO, LngLatBounds: i.az, Point: i.P, MercatorCoordinate: i.aa, FreeCameraOptions: Va, Evented: i.E, config: i.e, prewarm: i.dM, clearPrewarmedResources: i.dN, get accessToken() {
        return i.e.ACCESS_TOKEN;
      }, set accessToken(c) {
        i.e.ACCESS_TOKEN = c;
      }, get baseApiUrl() {
        return i.e.API_URL;
      }, set baseApiUrl(c) {
        i.e.API_URL = c;
      }, get workerCount() {
        return i.dO.workerCount;
      }, set workerCount(c) {
        i.dO.workerCount = c;
      }, get maxParallelImageRequests() {
        return i.e.MAX_PARALLEL_IMAGE_REQUESTS;
      }, set maxParallelImageRequests(c) {
        i.e.MAX_PARALLEL_IMAGE_REQUESTS = c;
      }, clearStorage(c) {
        i.dP(c);
      }, get workerUrl() {
        return i.dQ.workerUrl;
      }, set workerUrl(c) {
        i.dQ.workerUrl = c;
      }, get workerClass() {
        return i.dQ.workerClass;
      }, set workerClass(c) {
        i.dQ.workerClass = c;
      }, get workerParams() {
        return i.dQ.workerParams;
      }, set workerParams(c) {
        i.dQ.workerParams = c;
      }, get dracoUrl() {
        return i.dR();
      }, set dracoUrl(c) {
        i.dS(c);
      }, get meshoptUrl() {
        return i.dT();
      }, set meshoptUrl(c) {
        i.dU(c);
      }, setNow: i.q.setNow, restoreNow: i.q.restoreNow };
    });
    var E = w;
    return E;
  });
})(vw);
var LC = vw.exports;
const Cc = /* @__PURE__ */ gw(LC);
var _o = 63710088e-1, ww = {
  centimeters: _o * 100,
  centimetres: _o * 100,
  degrees: _o / 111325,
  feet: _o * 3.28084,
  inches: _o * 39.37,
  kilometers: _o / 1e3,
  kilometres: _o / 1e3,
  meters: _o,
  metres: _o,
  miles: _o / 1609.344,
  millimeters: _o * 1e3,
  millimetres: _o * 1e3,
  nauticalmiles: _o / 1852,
  radians: 1,
  yards: _o * 1.0936
};
function Hm(m, a, d) {
  d === void 0 && (d = {});
  var g = { type: "Feature" };
  return (d.id === 0 || d.id) && (g.id = d.id), d.bbox && (g.bbox = d.bbox), g.properties = a || {}, g.geometry = m, g;
}
function ry(m, a, d) {
  if (d === void 0 && (d = {}), !m)
    throw new Error("coordinates is required");
  if (!Array.isArray(m))
    throw new Error("coordinates must be an Array");
  if (m.length < 2)
    throw new Error("coordinates must be at least 2 numbers long");
  if (!yb(m[0]) || !yb(m[1]))
    throw new Error("coordinates must contain numbers");
  var g = {
    type: "Point",
    coordinates: m
  };
  return Hm(g, a, d);
}
function Af(m, a, d) {
  if (d === void 0 && (d = {}), m.length < 2)
    throw new Error("coordinates must be an array of two or more positions");
  var g = {
    type: "LineString",
    coordinates: m
  };
  return Hm(g, a, d);
}
function zC(m, a) {
  a === void 0 && (a = "kilometers");
  var d = ww[a];
  if (!d)
    throw new Error(a + " units is invalid");
  return m * d;
}
function DC(m, a) {
  a === void 0 && (a = "kilometers");
  var d = ww[a];
  if (!d)
    throw new Error(a + " units is invalid");
  return m / d;
}
function oy(m) {
  var a = m % (2 * Math.PI);
  return a * 180 / Math.PI;
}
function La(m) {
  var a = m % 360;
  return a * Math.PI / 180;
}
function yb(m) {
  return !isNaN(m) && m !== null && !Array.isArray(m);
}
function Tw(m, a, d) {
  if (m !== null)
    for (var g, w, b, E, i, O, j, Y = 0, J = 0, ae, ce = m.type, Te = ce === "FeatureCollection", be = ce === "Feature", Ze = Te ? m.features.length : 1, je = 0; je < Ze; je++) {
      j = Te ? m.features[je].geometry : be ? m.geometry : m, ae = j ? j.type === "GeometryCollection" : !1, i = ae ? j.geometries.length : 1;
      for (var ot = 0; ot < i; ot++) {
        var vt = 0, ht = 0;
        if (E = ae ? j.geometries[ot] : j, E !== null) {
          O = E.coordinates;
          var gt = E.type;
          switch (Y = d && (gt === "Polygon" || gt === "MultiPolygon") ? 1 : 0, gt) {
            case null:
              break;
            case "Point":
              if (a(
                O,
                J,
                je,
                vt,
                ht
              ) === !1)
                return !1;
              J++, vt++;
              break;
            case "LineString":
            case "MultiPoint":
              for (g = 0; g < O.length; g++) {
                if (a(
                  O[g],
                  J,
                  je,
                  vt,
                  ht
                ) === !1)
                  return !1;
                J++, gt === "MultiPoint" && vt++;
              }
              gt === "LineString" && vt++;
              break;
            case "Polygon":
            case "MultiLineString":
              for (g = 0; g < O.length; g++) {
                for (w = 0; w < O[g].length - Y; w++) {
                  if (a(
                    O[g][w],
                    J,
                    je,
                    vt,
                    ht
                  ) === !1)
                    return !1;
                  J++;
                }
                gt === "MultiLineString" && vt++, gt === "Polygon" && ht++;
              }
              gt === "Polygon" && vt++;
              break;
            case "MultiPolygon":
              for (g = 0; g < O.length; g++) {
                for (ht = 0, w = 0; w < O[g].length; w++) {
                  for (b = 0; b < O[g][w].length - Y; b++) {
                    if (a(
                      O[g][w][b],
                      J,
                      je,
                      vt,
                      ht
                    ) === !1)
                      return !1;
                    J++;
                  }
                  ht++;
                }
                vt++;
              }
              break;
            case "GeometryCollection":
              for (g = 0; g < E.geometries.length; g++)
                if (Tw(E.geometries[g], a, d) === !1)
                  return !1;
              break;
            default:
              throw new Error("Unknown Geometry Type");
          }
        }
      }
    }
}
function kC(m, a) {
  var d, g, w, b, E, i, O, j, Y, J, ae = 0, ce = m.type === "FeatureCollection", Te = m.type === "Feature", be = ce ? m.features.length : 1;
  for (d = 0; d < be; d++) {
    for (i = ce ? m.features[d].geometry : Te ? m.geometry : m, j = ce ? m.features[d].properties : Te ? m.properties : {}, Y = ce ? m.features[d].bbox : Te ? m.bbox : void 0, J = ce ? m.features[d].id : Te ? m.id : void 0, O = i ? i.type === "GeometryCollection" : !1, E = O ? i.geometries.length : 1, w = 0; w < E; w++) {
      if (b = O ? i.geometries[w] : i, b === null) {
        if (a(
          null,
          ae,
          j,
          Y,
          J
        ) === !1)
          return !1;
        continue;
      }
      switch (b.type) {
        case "Point":
        case "LineString":
        case "MultiPoint":
        case "Polygon":
        case "MultiLineString":
        case "MultiPolygon": {
          if (a(
            b,
            ae,
            j,
            Y,
            J
          ) === !1)
            return !1;
          break;
        }
        case "GeometryCollection": {
          for (g = 0; g < b.geometries.length; g++)
            if (a(
              b.geometries[g],
              ae,
              j,
              Y,
              J
            ) === !1)
              return !1;
          break;
        }
        default:
          throw new Error("Unknown Geometry Type");
      }
    }
    ae++;
  }
}
function RC(m, a) {
  kC(m, function(d, g, w, b, E) {
    var i = d === null ? null : d.type;
    switch (i) {
      case null:
      case "Point":
      case "LineString":
      case "Polygon":
        return a(
          Hm(d, w, { bbox: b, id: E }),
          g,
          0
        ) === !1 ? !1 : void 0;
    }
    var O;
    switch (i) {
      case "MultiPoint":
        O = "Point";
        break;
      case "MultiLineString":
        O = "LineString";
        break;
      case "MultiPolygon":
        O = "Polygon";
        break;
    }
    for (var j = 0; j < d.coordinates.length; j++) {
      var Y = d.coordinates[j], J = {
        type: O,
        coordinates: Y
      };
      if (a(Hm(J, w), g, j) === !1)
        return !1;
    }
  });
}
function OC(m, a) {
  RC(m, function(d, g, w) {
    var b = 0;
    if (d.geometry) {
      var E = d.geometry.type;
      if (!(E === "Point" || E === "MultiPoint")) {
        var i, O = 0, j = 0, Y = 0;
        if (Tw(
          d,
          function(J, ae, ce, Te, be) {
            if (i === void 0 || g > O || Te > j || be > Y) {
              i = J, O = g, j = Te, Y = be, b = 0;
              return;
            }
            var Ze = Af(
              [i, J],
              d.properties
            );
            if (a(
              Ze,
              g,
              w,
              be,
              b
            ) === !1)
              return !1;
            b++, i = J;
          }
        ) === !1)
          return !1;
      }
    }
  });
}
function FC(m, a, d) {
  var g = d, w = !1;
  return OC(
    m,
    function(b, E, i, O, j) {
      w === !1 && d === void 0 ? g = b : g = a(
        g,
        b,
        E,
        i,
        O,
        j
      ), w = !0;
    }
  ), g;
}
function jf(m) {
  if (!m)
    throw new Error("coord is required");
  if (!Array.isArray(m)) {
    if (m.type === "Feature" && m.geometry !== null && m.geometry.type === "Point")
      return m.geometry.coordinates;
    if (m.type === "Point")
      return m.coordinates;
  }
  if (Array.isArray(m) && m.length >= 2 && !Array.isArray(m[0]) && !Array.isArray(m[1]))
    return m;
  throw new Error("coord must be GeoJSON Point or an Array of numbers");
}
function BC(m) {
  return m.type === "Feature" ? m.geometry : m;
}
function Mw(m, a, d) {
  d === void 0 && (d = {});
  var g = jf(m), w = jf(a), b = La(w[1] - g[1]), E = La(w[0] - g[0]), i = La(g[1]), O = La(w[1]), j = Math.pow(Math.sin(b / 2), 2) + Math.pow(Math.sin(E / 2), 2) * Math.cos(i) * Math.cos(O);
  return zC(2 * Math.atan2(Math.sqrt(j), Math.sqrt(1 - j)), d.units);
}
function NC(m, a, d, g) {
  g === void 0 && (g = {});
  var w = jf(m), b = La(w[0]), E = La(w[1]), i = La(d), O = DC(a, g.units), j = Math.asin(Math.sin(E) * Math.cos(O) + Math.cos(E) * Math.sin(O) * Math.cos(i)), Y = b + Math.atan2(Math.sin(i) * Math.sin(O) * Math.cos(E), Math.cos(O) - Math.sin(E) * Math.sin(j)), J = oy(Y), ae = oy(j);
  return ry([J, ae], g.properties);
}
function Sw(m, a, d) {
  if (d === void 0 && (d = {}), d.final === !0)
    return VC(m, a);
  var g = jf(m), w = jf(a), b = La(g[0]), E = La(w[0]), i = La(g[1]), O = La(w[1]), j = Math.sin(E - b) * Math.cos(O), Y = Math.cos(i) * Math.sin(O) - Math.sin(i) * Math.cos(O) * Math.cos(E - b);
  return oy(Math.atan2(j, Y));
}
function VC(m, a) {
  var d = Sw(a, m);
  return d = (d + 180) % 360, d;
}
function xb(m, a, d) {
  d === void 0 && (d = {});
  for (var g = BC(m), w = g.coordinates, b = 0, E = 0; E < w.length && !(a >= b && E === w.length - 1); E++)
    if (b >= a) {
      var i = a - b;
      if (i) {
        var O = Sw(w[E], w[E - 1]) - 180, j = NC(w[E], i, O, d);
        return j;
      } else
        return ry(w[E]);
    } else
      b += Mw(w[E], w[E + 1], d);
  return ry(w[w.length - 1]);
}
function vb(m, a) {
  return a === void 0 && (a = {}), FC(m, function(d, g) {
    var w = g.geometry.coordinates;
    return d + Mw(w[0], w[1], a);
  }, 0);
}
class UC {
  constructor() {
    this.start = 0, this.animationDuration = 8e4, this.cameraAltitude = 1e3, this.targetRoute = [], this.cameraRoute = [], this.iconDefault = "/wp-content/plugins/wp-gpx-maps/img/map-play-svgrepo-com.svg", this.iconStop = "/wp-content/plugins/wp-gpx-maps/img/stop-svgrepo-com.svg", this.routeDistance = 0, this.cameraRouteDistance = 0, this.isPlaying = !1;
  }
  onAdd(a) {
    return this.map = a, this.container = document.createElement("div"), this.container.className = "mapboxgl-ctrl mapboxgl-ctrl-group mapboxgl-wp-gpx-maps", this.container.innerHTML = `<button style='background-image: url(${this.iconDefault});'>&nbsp;</div>`, this.container.onclick = () => {
      this.isPlaying == !1 ? (this.isPlaying = !0, this._playAnimation()) : this.isPlaying = !1;
    }, this.container;
  }
  _animationFrame(a) {
    if (this.isPlaying == !1) {
      this.start = 0;
      return;
    }
    this.start || (this.start = a);
    const d = (a - this.start) / this.animationDuration;
    d > 1 && setTimeout(() => {
      this.start = 0;
    }, 1500);
    const g = xb(
      Af(this.targetRoute),
      this.routeDistance * d
    ).geometry.coordinates, w = xb(
      Af(this.cameraRoute),
      this.cameraRouteDistance * d
    ).geometry.coordinates, b = this.map.getFreeCameraOptions();
    b.position = Cc.MercatorCoordinate.fromLngLat(
      {
        lng: w[0],
        lat: w[1]
      },
      this.cameraAltitude
    ), b.lookAtPoint({
      lng: g[0],
      lat: g[1]
    }), this.map.setFreeCameraOptions(b), window.requestAnimationFrame((E) => this._animationFrame(E));
  }
  _stopAnimation() {
  }
  _playAnimation() {
    this.cameraRouteDistance = vb(
      Af(this.cameraRoute)
    ), this.routeDistance = vb(
      Af(this.targetRoute)
    ), window.requestAnimationFrame((a) => this._animationFrame(a));
  }
  onRemove(a) {
    this.container.remove();
  }
}
class jC {
  constructor() {
    this.Bounds = [], this.EventSelectChart = null, this.CurrentLocationMarker = null, this.animationControl = null, this.animateLineOptions = {
      SpeedFactor: 30,
      // number of frames per longitude degree
      Animation: null,
      // to store and cancel the animation
      StartTime: 0,
      Progress: 0,
      // progress = timestamp - startTime
      ResetTime: !1
      // indicator of whether time reset is needed for the animation
    };
  }
  init(a, d, g, w, b) {
    this.otherParams = b, this.map = new Cc.Map({
      container: a,
      style: "mapbox://styles/mapbox/streets-v11",
      accessToken: "pk.eyJ1Ijoic2VjdXJjdWJlbWF4IiwiYSI6ImNsbW94MzRodjE4YjEya3BuM3liZXl6MXYifQ.db3c6nnAcFwFm5jD2NCg6w",
      // MapBoxApiKey ?? 
      center: [0, 0],
      zoom: 1,
      scrollZoom: g
    }), this.animationControl = new UC(), this.map.addControl(new Cc.NavigationControl()), this.map.addControl(new Cc.FullscreenControl()), this.map.addControl(new IC(), "top-left"), this.map.addControl(this.animationControl), this.map.on("style.load", async () => {
      b.MapBoxFog && this.map.setFog({
        range: [-1, 2],
        "horizon-blend": 0.3,
        color: "white",
        "high-color": "#add8e6",
        "space-color": "#d8f2ff",
        "star-intensity": 0
      }), b.MapBox3dTerrain && (this.map.addSource("mapbox-dem", {
        type: "raster-dem",
        url: "mapbox://mapbox.mapbox-terrain-dem-v1",
        tileSize: 512,
        maxzoom: 14
      }), this.map.setTerrain({ source: "mapbox-dem", exaggeration: 1.5 }));
    });
  }
  _addMarker(a, d, g) {
    const w = document.createElement("div"), b = 32, E = 32;
    return w.className = "marker", w.style.backgroundImage = `url(${d})`, w.style.width = `${b}px`, w.style.height = `${E}px`, w.style.backgroundSize = "100%", w.addEventListener("click", (i) => {
      g == null || g.call(this, i);
    }), new Cc.Marker(w).setLngLat([a[1], a[0]]).addTo(this.map);
  }
  AppPolylines(a, d, g, w, b) {
    this.Bounds = a.filter((E) => E != null), this.map.on("style.load", async () => {
      const E = Zm.Utils.DividePolylinesPoints(a), i = this.Bounds.map((O) => [O[1], O[0]]);
      if (this.animationControl.cameraRoute = i, this.animationControl.targetRoute = i, this.map.addSource("route", {
        type: "geojson",
        data: {
          type: "FeatureCollection",
          features: E.map((O, j) => ({
            type: "Feature",
            properties: {
              color: j < d.length ? d[j] : d[d.length - 1]
            },
            geometry: {
              type: "LineString",
              coordinates: O.map((Y) => [Y[1], Y[0]])
            }
          }))
        }
      }), this.map.addLayer({
        id: "route",
        type: "line",
        source: "route",
        layout: {
          "line-join": "round",
          "line-cap": "round"
        },
        paint: {
          "line-color": ["get", "color"],
          "line-width": 3
        }
      }), (g == "" || g == null) && (g = "https://maps.google.com/mapfiles/kml/pal4/icon25.png"), this.CurrentLocationMarker = this._addMarker(a[0], g, (O) => {
      }), w != "") {
        let O = a[0];
        O != null && this._addMarker(O, w, null);
      }
      if (b != "" && a[a.length - 1] != null) {
        let O = a[a.length - 1];
        O != null && this._addMarker(O, b, null);
      }
      this.CenterMap(), this.otherParams.MapBoxAnimateOnLoading == "1" && (this.animateLineOptions.StartTime = performance.now(), this.animateLine());
    });
  }
  AddWaypoints(a, d) {
  }
  MoveMarkerToPosition(a, d) {
    var g;
    (g = this.CurrentLocationMarker) == null || g.setLngLat([a[1], a[0]]);
  }
  SetCurrentGPSPosition(a, d, g) {
  }
  CenterMap() {
    var a;
    try {
      if (this.Bounds && this.Bounds.length > 0) {
        let d = {
          minLat: Number.POSITIVE_INFINITY,
          maxLat: Number.NEGATIVE_INFINITY,
          minLng: Number.POSITIVE_INFINITY,
          maxLng: Number.NEGATIVE_INFINITY
        };
        this.Bounds.forEach((b) => {
          if (!Array.isArray(b) || b.length !== 2)
            throw new Error("Each coordinate must be an array with [latitude, longitude].");
          const [E, i] = b;
          d.minLat = Math.min(d.minLat, E), d.maxLat = Math.max(d.maxLat, E), d.minLng = Math.min(d.minLng, i), d.maxLng = Math.max(d.maxLng, i);
        });
        const g = new Cc.LngLat(d.minLng, d.minLat), w = new Cc.LngLat(d.maxLng, d.maxLat);
        (a = this.map) == null || a.fitBounds(new Cc.LngLatBounds(g, w), { padding: 30, animate: !1 });
      }
    } catch (d) {
      console.log(d);
    }
  }
  AddPhotos(a) {
    for (const w of a) {
      let b = this._addMarker([w.lat, w.lng], w.thumbnail, (E) => {
        let i = `a[data-image-id='${w.image_id}']`, O = document.querySelector(i);
        O == null || O.click();
      });
      b._element.classList.add("wp-gpx-maps-photo-marker"), b._element.style.width = "40px", b._element.style.height = "40px";
    }
  }
  // animated in a circle as a sine wave along the map.
  animateLine(a = null) {
    if (a == null) {
      var d = this.map.getSource("route")._data;
      this.animateLineOptions.ruteJeoJson = d, this.animateLineOptions.ruteCoordinates = d.features[0].geometry.coordinates, d.features[0].geometry.coordinates = [];
    }
    if (this.animateLineOptions.ResetTime ? (this.animateLineOptions.sta = performance.now() - this.animateLineOptions.Progress, this.animateLineOptions.ResetTime = !1) : this.animateLineOptions.Progress = a - this.animateLineOptions.StartTime, this.animateLineOptions.Progress < 0 && (this.animateLineOptions.Progress = 0), this.animateLineOptions.Progress > this.animateLineOptions.SpeedFactor * 360) {
      this.animateLineOptions.startTime = a;
      return;
    } else {
      let g = this.animateLineOptions.ruteCoordinates.length, w = Math.floor(g * this.animateLineOptions.Progress / (this.animateLineOptions.SpeedFactor * 360));
      this.animateLineOptions.ruteJeoJson.features[0].geometry.coordinates = this.animateLineOptions.ruteCoordinates.slice(0, w), this.map.getSource("route").setData(this.animateLineOptions.ruteJeoJson);
    }
    this.animateLineOptions.animation = requestAnimationFrame((g) => this.animateLine(g));
  }
}
const GC = "1", ZC = "2", HC = "3", qC = "4", WC = "5", $C = "6", XC = "5", YC = "4", KC = "3", JC = "2", QC = "1";
class iI {
  constructor(a) {
    this.map = null, this.myChart = null, this.params = a, this.init();
  }
  init() {
    var yo, xo, vo, yr, Mr, io, Ys, Sr, mi;
    let {
      targetId: a,
      mapType: d,
      mapData: g,
      graphDist: w,
      graphEle: b,
      graphSpeed: E,
      graphHr: i,
      graphAtemp: O,
      graphCad: j,
      graphGrade: Y,
      waypoints: J,
      unit: ae,
      unitspeed: ce,
      color1: Te,
      color2: be,
      color3: Ze,
      color4: je,
      color5: ot,
      color6: vt,
      color7: ht,
      chartFrom1: gt,
      chartTo1: Vt,
      chartFrom2: pt,
      chartTo2: Gt,
      startIcon: ui,
      waypointIcon: kt,
      endIcon: Pt,
      currentIcon: Mi,
      zoomOnScrollWheel: Pn,
      langs: hn,
      pluginUrl: Ht,
      usegpsposition: Si,
      currentpositioncon: Ji,
      TFApiKey: fi
    } = this.params;
    var jt = [], ni = { suf: "", dec: 0 }, Gi = { suf: "", dec: 0 }, an = { suf: "", dec: 0 }, qt = { suf: "%", dec: 1 }, ln = { suf: "", dec: 0 }, Di = { suf: "", dec: 0 }, xi = document.getElementById("wpgpxmaps_" + a), Cs = document.getElementById("map_" + a), xs = document.getElementById("chart_" + a);
    if (document.getElementById("report_" + a), document.getElementById("wpgpxmaps_" + a + "_osm_footer"), Cs == null)
      return;
    let Is = this;
    this.params.MapBoxApiKey && this.params.MapBoxApiKey.length > 20 ? this.map = new jC() : this.map = new CC(), this.map.init(
      Cs,
      d,
      Pn == "true",
      fi,
      this.params
    ), this.map.EventSelectChart = function(On) {
      var Vo, Ke;
      if (Is.myChart) {
        for (var Vn = On[0], Zi = On[1], Jn = Is.getClosestIndex(g, Vn, Zi), Fn = [], Ls = Is.myChart._metasets.length, zs = 0; zs < Ls; zs++)
          Fn.push(Is.myChart._metasets[zs].data[Jn]);
        if (Fn.length > 0) {
          let re = (Vo = Is.myChart.tooltip) == null ? void 0 : Vo.getActiveElements();
          (re == null || re.length == 0) && ((Ke = Is.myChart.tooltip) == null || Ke.setActiveElements([{
            datasetIndex: 0,
            index: Jn
          }], {
            x: Fn[0].x,
            y: Fn[0].y
          })), Is.myChart.tooltip.setActiveElements(Fn), Is.myChart.draw();
        }
      }
    }, Si == "true" && navigator.geolocation && navigator.geolocation.watchPosition(
      function(On) {
        On.coords.accuracy / 2;
        var Vn = [On.coords.latitude, On.coords.longitude];
        this.map.SetCurrentGPSPosition([Vn[0], Vn[1]], Ji, hn);
      },
      function(On) {
      },
      {
        enableHighAccuracy: !1,
        timeout: 5e3,
        maximumAge: 0
      }
    ), J != null && J.length > 0 && this.map.AddWaypoints(J, kt);
    let De = document.getElementById("ngimages_" + a);
    De == null || De.setAttribute("style", "display:block;position:absolute;left:-50000px");
    var Vs = De == null ? void 0 : De.querySelectorAll("span");
    if (Vs && Vs.length > 0) {
      for (var Us = [], Zr = 0; Zr < Vs.length; Zr++) {
        var Et = Vs[Zr], Ws = Et.children[0], $n = [
          Number(Et.getAttribute("lat")),
          Number(Et.getAttribute("lon"))
        ];
        this.map.Bounds.push($n), Us.push({
          lat: $n[0],
          lng: $n[1],
          name: Ws.children[0].getAttribute("alt"),
          image_id: Ws.getAttribute("data-image-id"),
          url: Ws.getAttribute("href"),
          thumbnail: Ws.children[0].getAttribute("src")
        });
      }
      Us.length > 0 && this.map.AddPhotos(Us);
    }
    g && this.map.AppPolylines(g, Te, Mi, ui, Pt);
    var $s = this.map;
    let vi = null, kn = xi == null ? void 0 : xi.parentElement;
    for (; kn != null; ) {
      if (kn.classList.contains("wordpress-post-tabs") && kn.classList.contains("tab-pane")) {
        vi = kn;
        break;
      }
      kn = kn.parentElement;
    }
    if (vi) {
      var Xs = function(On) {
        setTimeout(function(Vn) {
          var Zi;
          (Zi = $s.map) == null || Zi.invalidateSize(), $s.CenterMap();
        }, 300);
      };
      (yo = document.querySelector(".wpsm_nav-tabs a")) == null || yo.addEventListener("click", Xs, !1), (xo = vi.querySelector("div > ul > li > a")) == null || xo.addEventListener("click", Xs, !1);
    }
    var Hr = xs == null ? void 0 : xs.style.height;
    if (w && (b || E || i || O || j) && Hr != "0px") {
      w.length, GC == ae ? (Gi = { suf: "mi", dec: 1 }, an = { suf: "ft", dec: 0 }) : ZC == ae ? (Gi = { suf: "km", dec: 1 }, an = { suf: "m", dec: 2 }) : HC == ae ? (Gi = { suf: "NM", dec: 1 }, an = { suf: "m", dec: 0 }) : qC == ae ? (Gi = { suf: "mi", dec: 1 }, an = { suf: "m", dec: 0 }) : WC == ae ? (Gi = { suf: "NM", dec: 1 }, an = { suf: "ft", dec: 0 }) : (Gi = { suf: "m", dec: 0 }, an = { suf: "m", dec: 0 });
      var qr = 1111.1, Wr = qr.toLocaleString(), si = Wr.length;
      Wr.substring(si - 2, si - 1), Wr.substring(1, 2), Bl.register(...EC);
      var fs = {
        type: "line",
        data: {
          datasets: []
        },
        //borderWidth: 1,
        options: {
          animation: {
            // duration: 0,
            // general animation time
          },
          hover: {
            // animationDuration: 0,
            // duration of animations when hovering an item
          },
          interaction: {
            intersect: !1,
            mode: "index"
          },
          // responsiveAnimationDuration: 0,
          // animation duration after a resize
          //customLine: {
          //	color: 'gray'
          //},
          scales: {
            xAxe: {
              type: "linear",
              min: 0,
              max: w[w.length - 1],
              ticks: {
                /* Include a dollar sign in the ticks. */
                callback: function(Vn, Zi, Jn) {
                  return parseFloat(Vn + "").toFixed(Gi.dec) + Gi.suf;
                }
              }
            }
          },
          plugins: {
            tooltip: {
              position: "average",
              mode: "index",
              intersect: !1,
              callbacks: {
                title: function(Vn) {
                  var Zi = jt[0].label_x, Jn = Vn[0].element.x, Fn = Zi.dec, Ls = Zi.suf;
                  return Jn.toFixed(Fn) + Ls;
                },
                label: function(Vn) {
                  var Zi = Vn.label || "", Jn = jt[Vn.datasetIndex].label_y, Fn = Jn.dec, Ls = Jn.suf, zs = Vn.element.y;
                  return Zi && (Zi += ": "), Zi += zs.toFixed(Fn) + Ls, Zi;
                },
                footer: function(Vn) {
                  var Zi = Vn[0].dataIndex, Jn = Zm.Utils.GetItemFromArray(g, Zi);
                  Jn && $s.MoveMarkerToPosition(Jn, !1);
                }
              }
            }
            /*
            							decimation: {
            								beforeEvent: function (chart, args, options) {
            									if ((args.event.type === 'mousemove' && args.event.x)
            										&& (args.event.x >= chart.chartArea.left)
            										&& (args.event.x <= chart.chartArea.right)
            									) {
            										chart.options.customLine.x = args.event.x;
            									}
            								},
            								afterDraw: function (chart, args, opt) {
            									var ctx = chart.ctx;
            									var chartArea = chart.chartArea;
            									var x = chart.options.customLine.x;
            									if (!isNaN(x)) {
            										ctx.save();
            										ctx.strokeStyle = chart.options.customLine.color;
            										ctx.moveTo(chart.options.customLine.x, chartArea.bottom);
            										ctx.lineTo(chart.options.customLine.x, chartArea.top);
            										ctx.stroke();
            										ctx.restore();
            									}
            								}
            
            							}						
            						*/
          }
        }
        //labels: graphDist
      };
      let On = 1;
      if (b && b.length > 0) {
        var zn = this.mergeArrayForChart(w, b);
        let Vn, Zi;
        gt != "" ? Vn = parseFloat(gt) : Vn = zn.Min, Vt != "" ? Zi = parseFloat(Vt) : Zi = zn.Max;
        var Rn = "yaxis" + On++, An = {
          type: "linear",
          max: Zi,
          min: Vn,
          ticks: {
            callback(Jn, Fn, Ls) {
              return parseFloat(Jn + "").toFixed(an.dec) + an.suf;
            }
          }
        };
        ((vo = fs.options) == null ? void 0 : vo.scales)[Rn] = An, jt.push({ label_x: Gi, label_y: an }), fs.data.datasets.push(this.wpgpxmapsGetDataset(hn.altitude, zn.Items, be, Rn));
      }
      if (E && E.length > 0) {
        $C == ce ? ni = { suf: "min/100m", dec: 2 } : XC == ce ? ni = { suf: "knots", dec: 2 } : YC == ce ? ni = { suf: "min/mi", dec: 2 } : KC == ce ? ni = { suf: "min/km", dec: 2 } : JC == ce ? ni = { suf: "mi/h", dec: 0 } : QC == ce ? ni = { suf: "km/h", dec: 0 } : ni = { suf: "m/s", dec: 0 };
        var zn = this.mergeArrayForChart(w, E);
        let Zi = {
          type: "linear",
          ticks: {
            /* Include a dollar sign in the ticks. */
            callback(Fn, Ls, zs) {
              return parseFloat(Fn + "").toFixed(ni.dec) + ni.suf;
            }
          },
          position: "right"
          //scalePositionLeft: false,
        };
        pt != "" ? Zi.min = parseFloat(pt) : Zi.min = zn.Min, Gt != "" ? Zi.max = parseFloat(Gt) : Zi.max = zn.Max, jt.push({ label_x: jt[0].label_x, label_y: ni });
        var Rn = "yaxis" + On++;
        ((yr = fs.options) == null ? void 0 : yr.scales)[Rn] = Zi, fs.data.datasets.push(this.wpgpxmapsGetDataset(hn.speed, zn.Items, Ze, Rn));
      }
      if (i && i.length > 0) {
        var zn = this.mergeArrayForChart(w, i), An = {
          type: "linear",
          ticks: {
            /* Include a dollar sign in the ticks. */
            callback(Fn, Ls, zs) {
              return parseFloat(Fn + "").toFixed(ln.dec) + ln.suf;
            }
          },
          position: "right"
          //scalePositionLeft: false,
        }, Rn = "yaxis" + On++;
        ((Mr = fs.options) == null ? void 0 : Mr.scales)[Rn] = An, fs.data.datasets.push(this.wpgpxmapsGetDataset(hn.heartRate, zn.Items, je, Rn)), jt.push({ label_x: jt[0].label_x, label_y: ln });
      }
      if (O && O.length > 0) {
        var zn = this.mergeArrayForChart(w, O), An = {
          type: "linear",
          ticks: {
            /* Include a dollar sign in the ticks. */
            callback(Fn, Ls, zs) {
              return parseFloat(Fn + "").toFixed(1) + "°C";
            }
          },
          position: "right"
          //scalePositionLeft: false,
        }, Rn = "yaxis" + On++;
        ((io = fs.options) == null ? void 0 : io.scales)[Rn] = An, fs.data.datasets.push(this.wpgpxmapsGetDataset(hn.atemp, zn.Items, ht, Rn)), jt.push({ label_x: jt[0].label_x, label_y: { suf: "°C", dec: 1 } });
      }
      if (j && j.length > 0) {
        var zn = this.mergeArrayForChart(w, j, !0), An = {
          type: "linear",
          ticks: {
            // Include a dollar sign in the ticks.
            callback(Fn, Ls, zs) {
              return parseFloat(Fn + "").toFixed(Di.dec) + Di.suf;
            }
          },
          position: "right"
          //scalePositionLeft: false,
        }, Rn = "yaxis" + On++;
        ((Ys = fs.options) == null ? void 0 : Ys.scales)[Rn] = An, fs.data.datasets.push(this.wpgpxmapsGetDataset(hn.cadence, zn.Items, ot, Rn)), jt.push({ label_x: jt[0].label_x, label_y: Di });
      }
      if (Y && Y.length > 0) {
        var zn = this.mergeArrayForChart(w, Y), An = {
          type: "linear",
          ticks: {
            // Include a dollar sign in the ticks.
            callback: function(Fn, Ls, zs) {
              return parseFloat(Fn + "").toFixed(qt.dec) + qt.suf;
            }
          },
          position: "right"
          //scalePositionLeft: false,
        };
        jt.push({ label_x: jt[0].label_x, label_y: qt });
        var Rn = "yaxis" + On++;
        ((Sr = fs.options) == null ? void 0 : Sr.scales)[Rn] = An, fs.data.datasets.push(this.wpgpxmapsGetDataset(hn.grade, zn.Items, vt, Rn));
      }
      var js = (mi = document.getElementById("myChart_" + a)) == null ? void 0 : mi.getContext("2d");
      js && (this.myChart = new Bl(js, fs));
    } else
      xs == null || xs.style.setProperty("display", "none");
    return this;
  }
  mergeArrayForChart(a, d, g) {
    const w = a.length, b = new Array(w);
    let E = 1e4, i = -1e4;
    for (let O = 0; O < w; O++)
      if (a[O] != null) {
        let j = d[O];
        g === !0 && j === 0 && (j = null), b[O] = {
          x: a[O],
          y: j
        }, j > i && (i = j), j < E && (E = j);
      }
    return {
      Items: b,
      Min: E,
      Max: i
    };
  }
  wpgpxmapsGetDataset(a, d, g, w) {
    return {
      label: a,
      data: d,
      borderColor: g,
      backgroundColor: this.hexToRgbA(g, 0.3),
      pointRadius: 0,
      borderWidth: 1,
      pointHoverRadius: 1,
      yAxisID: w
    };
  }
  hexToRgbA(a, d) {
    let g;
    if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(a))
      return g = a.substring(1).split(""), g.length == 3 && (g = [g[0], g[0], g[1], g[1], g[2], g[2]]), g = "0x" + g.join(""), "rgba(" + [g >> 16 & 255, g >> 8 & 255, g & 255].join(",") + "," + d + ")";
    throw new Error("Bad Hex");
  }
  getItemFromArray(a, d) {
    try {
      return a[d];
    } catch {
      return [0, 0];
    }
  }
  getClosestIndex(a, d, g) {
    let w = 1e4, b = 0;
    for (let E = 0; E < a.length; E++) {
      if (a[E] === null)
        continue;
      const i = this.wpgpxmapsDist(a[E][0], a[E][1], d, g);
      i < w && (b = E, w = i);
    }
    return b;
  }
  getClosestImage(a, d, g) {
    let w = 1e4, b;
    const E = document.getElementById("ngimages_" + g);
    if (E == null)
      return;
    const i = E.getElementsByTagName("span");
    for (let O = 0; O < i.length; O++) {
      let j = i[O].getAttribute("lat"), Y = i[O].getAttribute("lon");
      if (j == null || Y == null)
        return;
      j = j.replace(",", "."), Y = Y.replace(",", ".");
      const J = this.wpgpxmapsDist(parseFloat(j), parseFloat(Y), a, d);
      J < w && (b = i[O], w = J);
    }
    return b;
  }
  isNumeric(a) {
    return /^-{0,1}\d*\.{0,1}\d+$/.test(a);
  }
  wpgpxmapsDist(a, d, g, w) {
    const b = g - a, E = w - d;
    return Math.sqrt(b * b + E * E);
  }
}
export {
  iI as WPGPXMaps
};
//# sourceMappingURL=WP-GPX-Maps.es.js.map